Chromium Code Reviews| Index: chrome/browser/api/webdata/web_data_service_base.h |
| diff --git a/chrome/browser/api/webdata/web_data_service_base.h b/chrome/browser/api/webdata/web_data_service_base.h |
| index 9a6f92640cf7bc591a3da420cbd86f2be8f6b198..9580520996730bca2195b17b9410f1fbd249485b 100644 |
| --- a/chrome/browser/api/webdata/web_data_service_base.h |
| +++ b/chrome/browser/api/webdata/web_data_service_base.h |
| @@ -5,9 +5,11 @@ |
| #ifndef CHROME_BROWSER_API_WEBDATA_WEB_DATA_SERVICE_BASE_H_ |
| #define CHROME_BROWSER_API_WEBDATA_WEB_DATA_SERVICE_BASE_H_ |
| +#include "base/callback_forward.h" |
| #include "base/files/file_path.h" |
| #include "base/memory/ref_counted.h" |
| #include "base/memory/scoped_ptr.h" |
| +#include "base/supports_user_data.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/notification_source.h" |
| #include "sql/init_status.h" |
| @@ -27,7 +29,18 @@ class WebDataServiceBase |
| // All requests return an opaque handle of the following type. |
| typedef int Handle; |
| - WebDataServiceBase(); |
| + // Users of this class may provide a callback to handle errors |
| + // (e.g. by showing a UI). The callback is called only on error, and |
| + // takes a single parameter, the sql::InitStatus value from trying |
| + // to open the database. |
| + |
| + // TODO(joi): Should we combine this with WebDatabaseService::InitCallback? |
| + typedef base::Callback<void(sql::InitStatus)> ProfileErrorCallback; |
| + |
| + // |callback| will only be invoked on error, and only if |
| + // ||callback.is_null()| evaluates to true. |
|
Jói
2013/03/19 20:53:58
||callback.is_null()| evaluates to true
-->
|cal
Cait (Slow)
2013/03/20 22:21:10
I updated this CL so its now based off of https://
|
| + WebDataServiceBase(scoped_refptr<WebDatabaseService> wdbs, |
| + const ProfileErrorCallback& callback); |
| // Cancel any pending request. You need to call this method if your |
| // WebDataServiceConsumer is about to be deleted. |
| @@ -60,11 +73,18 @@ class WebDataServiceBase |
| // DBThread. |
| virtual WebDatabase* GetDatabase(); |
| + // Returns a SupportsUserData objects that may be used to store data |
| + // owned by the DB thread on this object. Should be called only from |
| + // the DB thread, and will be destroyed on the DB thread soon after |
| + // |ShutdownOnUIThread()| is called. |
| + base::SupportsUserData* GetDBUserData(); |
| + |
| protected: |
| virtual ~WebDataServiceBase(); |
| + virtual void ShutdownOnDBThread(); |
| // Our database service. |
| - scoped_ptr<WebDatabaseService> wdbs_; |
| + scoped_refptr<WebDatabaseService> wdbs_; |
| // True if we've received a notification that the WebDatabase has loaded. |
| bool db_loaded_; |
| @@ -74,6 +94,25 @@ class WebDataServiceBase |
| content::BrowserThread::UI>; |
| friend class base::DeleteHelper<WebDataServiceBase>; |
| + ProfileErrorCallback profile_error_callback_; |
| + |
| + // This makes the destructor public, and thus allows us to aggregate |
| + // SupportsUserData. It is private by default to prevent incorrect |
| + // usage in class hierarchies where it is inherited by |
| + // reference-counted objects. |
| + class SupportsUserDataAggregatable : public base::SupportsUserData { |
| + public: |
| + SupportsUserDataAggregatable() {} |
| + virtual ~SupportsUserDataAggregatable() {} |
| + private: |
| + DISALLOW_COPY_AND_ASSIGN(SupportsUserDataAggregatable); |
| + }; |
| + |
| + // Storage for user data to be accessed only on the DB thread. May |
| + // be used e.g. for SyncableService subclasses that need to be owned |
| + // by this object. Is created on first call to |GetDBUserData()|. |
| + scoped_ptr<SupportsUserDataAggregatable> db_thread_user_data_; |
| + |
| void DBInitFailed(sql::InitStatus sql_status); |
| void NotifyDatabaseLoadedOnUIThread(); |
| void DatabaseInitOnDB(sql::InitStatus status); |