Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(799)

Side by Side Diff: chrome/browser/extensions/api/storage/settings_sync_util.cc

Issue 2799653006: Revert of [Sync] Stop accessing BrowserContextKeyedServiceFactory on non-UI thread. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/api/storage/settings_sync_util.h" 5 #include "chrome/browser/extensions/api/storage/settings_sync_util.h"
6 6
7 #include "base/bind.h"
8 #include "base/json/json_writer.h" 7 #include "base/json/json_writer.h"
9 #include "base/values.h" 8 #include "base/values.h"
10 #include "chrome/browser/extensions/api/storage/sync_value_store_cache.h" 9 #include "chrome/browser/extensions/api/storage/sync_value_store_cache.h"
11 #include "components/sync/protocol/app_setting_specifics.pb.h" 10 #include "components/sync/protocol/app_setting_specifics.pb.h"
12 #include "components/sync/protocol/extension_setting_specifics.pb.h" 11 #include "components/sync/protocol/extension_setting_specifics.pb.h"
13 #include "components/sync/protocol/sync.pb.h" 12 #include "components/sync/protocol/sync.pb.h"
14 #include "content/public/browser/browser_thread.h" 13 #include "content/public/browser/browser_thread.h"
15 #include "extensions/browser/api/storage/storage_frontend.h" 14 #include "extensions/browser/api/storage/storage_frontend.h"
16 15
17 using base::WeakPtr;
18 using content::BrowserThread; 16 using content::BrowserThread;
19 using syncer::ModelType;
20 using syncer::SyncableService;
21 17
22 namespace extensions { 18 namespace extensions {
23 19
24 namespace settings_sync_util { 20 namespace settings_sync_util {
25 21
26 namespace { 22 namespace {
27 23
28 void PopulateExtensionSettingSpecifics( 24 void PopulateExtensionSettingSpecifics(
29 const std::string& extension_id, 25 const std::string& extension_id,
30 const std::string& key, 26 const std::string& key,
(...skipping 10 matching lines...) Expand all
41 37
42 void PopulateAppSettingSpecifics( 38 void PopulateAppSettingSpecifics(
43 const std::string& extension_id, 39 const std::string& extension_id,
44 const std::string& key, 40 const std::string& key,
45 const base::Value& value, 41 const base::Value& value,
46 sync_pb::AppSettingSpecifics* specifics) { 42 sync_pb::AppSettingSpecifics* specifics) {
47 PopulateExtensionSettingSpecifics( 43 PopulateExtensionSettingSpecifics(
48 extension_id, key, value, specifics->mutable_extension_setting()); 44 extension_id, key, value, specifics->mutable_extension_setting());
49 } 45 }
50 46
51 WeakPtr<SyncableService> GetSyncableService(WeakPtr<SyncValueStoreCache> cache,
52 ModelType type) {
53 DCHECK_CURRENTLY_ON(BrowserThread::FILE);
54 return cache.get() ? cache->GetSyncableService(type)->AsWeakPtr()
55 : WeakPtr<SyncableService>();
56 }
57
58 } // namespace 47 } // namespace
59 48
60 syncer::SyncData CreateData(const std::string& extension_id, 49 syncer::SyncData CreateData(
61 const std::string& key, 50 const std::string& extension_id,
62 const base::Value& value, 51 const std::string& key,
63 ModelType type) { 52 const base::Value& value,
53 syncer::ModelType type) {
64 sync_pb::EntitySpecifics specifics; 54 sync_pb::EntitySpecifics specifics;
65 switch (type) { 55 switch (type) {
66 case syncer::EXTENSION_SETTINGS: 56 case syncer::EXTENSION_SETTINGS:
67 PopulateExtensionSettingSpecifics( 57 PopulateExtensionSettingSpecifics(
68 extension_id, 58 extension_id,
69 key, 59 key,
70 value, 60 value,
71 specifics.mutable_extension_setting()); 61 specifics.mutable_extension_setting());
72 break; 62 break;
73 63
74 case syncer::APP_SETTINGS: 64 case syncer::APP_SETTINGS:
75 PopulateAppSettingSpecifics( 65 PopulateAppSettingSpecifics(
76 extension_id, 66 extension_id,
77 key, 67 key,
78 value, 68 value,
79 specifics.mutable_app_setting()); 69 specifics.mutable_app_setting());
80 break; 70 break;
81 71
82 default: 72 default:
83 NOTREACHED(); 73 NOTREACHED();
84 } 74 }
85 75
86 return syncer::SyncData::CreateLocalData( 76 return syncer::SyncData::CreateLocalData(
87 extension_id + "/" + key, key, specifics); 77 extension_id + "/" + key, key, specifics);
88 } 78 }
89 79
90 syncer::SyncChange CreateAdd(const std::string& extension_id, 80 syncer::SyncChange CreateAdd(
91 const std::string& key, 81 const std::string& extension_id,
92 const base::Value& value, 82 const std::string& key,
93 ModelType type) { 83 const base::Value& value,
84 syncer::ModelType type) {
94 return syncer::SyncChange( 85 return syncer::SyncChange(
95 FROM_HERE, 86 FROM_HERE,
96 syncer::SyncChange::ACTION_ADD, 87 syncer::SyncChange::ACTION_ADD,
97 CreateData(extension_id, key, value, type)); 88 CreateData(extension_id, key, value, type));
98 } 89 }
99 90
100 syncer::SyncChange CreateUpdate(const std::string& extension_id, 91 syncer::SyncChange CreateUpdate(
101 const std::string& key, 92 const std::string& extension_id,
102 const base::Value& value, 93 const std::string& key,
103 ModelType type) { 94 const base::Value& value,
95 syncer::ModelType type) {
104 return syncer::SyncChange( 96 return syncer::SyncChange(
105 FROM_HERE, 97 FROM_HERE,
106 syncer::SyncChange::ACTION_UPDATE, 98 syncer::SyncChange::ACTION_UPDATE,
107 CreateData(extension_id, key, value, type)); 99 CreateData(extension_id, key, value, type));
108 } 100 }
109 101
110 syncer::SyncChange CreateDelete(const std::string& extension_id, 102 syncer::SyncChange CreateDelete(
111 const std::string& key, 103 const std::string& extension_id,
112 ModelType type) { 104 const std::string& key,
105 syncer::ModelType type) {
113 base::DictionaryValue no_value; 106 base::DictionaryValue no_value;
114 return syncer::SyncChange( 107 return syncer::SyncChange(
115 FROM_HERE, 108 FROM_HERE,
116 syncer::SyncChange::ACTION_DELETE, 109 syncer::SyncChange::ACTION_DELETE,
117 CreateData(extension_id, key, no_value, type)); 110 CreateData(extension_id, key, no_value, type));
118 } 111 }
119 112
120 syncer::SyncClient::ServiceProvider GetSyncableServiceProvider( 113 syncer::SyncableService* GetSyncableService(content::BrowserContext* context,
121 content::BrowserContext* context, 114 syncer::ModelType type) {
122 ModelType type) { 115 DCHECK_CURRENTLY_ON(BrowserThread::FILE);
123 DCHECK_CURRENTLY_ON(BrowserThread::UI);
124 DCHECK(type == syncer::APP_SETTINGS || type == syncer::EXTENSION_SETTINGS); 116 DCHECK(type == syncer::APP_SETTINGS || type == syncer::EXTENSION_SETTINGS);
125 StorageFrontend* frontend = StorageFrontend::Get(context); 117 StorageFrontend* frontend = StorageFrontend::Get(context);
126 SyncValueStoreCache* sync_cache = static_cast<SyncValueStoreCache*>( 118 SyncValueStoreCache* sync_cache = static_cast<SyncValueStoreCache*>(
127 frontend->GetValueStoreCache(settings_namespace::SYNC)); 119 frontend->GetValueStoreCache(settings_namespace::SYNC));
128 // We must rely on our caller to guarantee that sync_cache->AsWeakPtr() is a 120 return sync_cache->GetSyncableService(type);
129 // valid call right now, and that shutdown has not begun.
130 return base::Bind(&GetSyncableService, sync_cache->AsWeakPtr(), type);
131 } 121 }
132 122
133 } // namespace settings_sync_util 123 } // namespace settings_sync_util
134 124
135 } // namespace extensions 125 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698