1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_WEBDATA_WEB_DATABASE_H_
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_WEBDATA_WEB_DATABASE_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "app/sql/connection.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "app/sql/init_status.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "app/sql/meta_table.h"
12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h"
13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/webdata/autofill_table.h"
14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/webdata/keyword_table.h"
15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/webdata/logins_table.h"
16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/webdata/token_service_table.h"
17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/webdata/web_apps_table.h"
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass FilePath;
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass NotificationService;
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// This class manages a SQLite database that stores various web page meta data.
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass WebDatabase {
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  WebDatabase();
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual ~WebDatabase();
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Initialize the database given a name. The name defines where the SQLite
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // file is. If this returns an error code, no other method should be called.
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sql::InitStatus Init(const FilePath& db_name);
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Transactions management
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void BeginTransaction();
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void CommitTransaction();
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual AutofillTable* GetAutofillTable();
37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual KeywordTable* GetKeywordTable();
38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual LoginsTable* GetLoginsTable();
39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual TokenServiceTable* GetTokenServiceTable();
40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual WebAppsTable* GetWebAppsTable();
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Exposed for testing only.
43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  sql::Connection* GetSQLConnection();
443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
46731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Used by |Init()| to migration database schema from older versions to
47731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // current version.
48731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  sql::InitStatus MigrateOldVersionsAsNeeded();
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sql::Connection db_;
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sql::MetaTable meta_table_;
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_ptr<AutofillTable> autofill_table_;
54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_ptr<KeywordTable> keyword_table_;
55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_ptr<LoginsTable> logins_table_;
56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_ptr<TokenServiceTable> token_service_table_;
57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_ptr<WebAppsTable> web_apps_table_;
58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<NotificationService> notification_service_;
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(WebDatabase);
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_WEBDATA_WEB_DATABASE_H_
65