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); |