Index: chrome/browser/webdata/autocomplete_syncable_service.cc |
diff --git a/chrome/browser/webdata/autocomplete_syncable_service.cc b/chrome/browser/webdata/autocomplete_syncable_service.cc |
index f039075cf83f2cfd69efb5373f1a1c92794ad1c5..e3499c2946a91e0638157f55653357f434727364 100644 |
--- a/chrome/browser/webdata/autocomplete_syncable_service.cc |
+++ b/chrome/browser/webdata/autocomplete_syncable_service.cc |
@@ -79,6 +79,13 @@ bool MergeTimestamps(const sync_pb::AutofillSpecifics& autofill, |
} |
} |
+void* UserDataKey() { |
+ // Use the address of a static that COMDAT folding won't ever fold |
+ // with something else. |
+ static int user_data_key = 0; |
+ return reinterpret_cast<void*>(&user_data_key); |
+} |
+ |
} // namespace |
AutocompleteSyncableService::AutocompleteSyncableService( |
@@ -96,6 +103,20 @@ AutocompleteSyncableService::~AutocompleteSyncableService() { |
DCHECK(CalledOnValidThread()); |
} |
+// static |
+void AutocompleteSyncableService::CreateForWebDataService( |
+ WebDataService* web_data) { |
+ web_data->GetDBUserData()->SetUserData( |
+ UserDataKey(), new AutocompleteSyncableService(web_data)); |
+} |
+ |
+// static |
+AutocompleteSyncableService* AutocompleteSyncableService::FromWebDataService( |
+ WebDataService* web_data) { |
+ return static_cast<AutocompleteSyncableService*>( |
+ web_data->GetDBUserData()->GetUserData(UserDataKey())); |
+} |
+ |
AutocompleteSyncableService::AutocompleteSyncableService() |
: web_data_service_(NULL), |
cull_expired_entries_(false) { |