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

Side by Side Diff: chrome/browser/prefs/pref_service.cc

Issue 7838030: WIP: Introduce per-TabContents PrefService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Use TabContentsWrapper instead of rolling our own TabContents property. Created 9 years, 3 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/prefs/pref_service.h" 5 #include "chrome/browser/prefs/pref_service.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
11 #include "base/file_path.h" 11 #include "base/file_path.h"
12 #include "base/file_util.h" 12 #include "base/file_util.h"
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/message_loop.h" 14 #include "base/message_loop.h"
15 #include "base/metrics/histogram.h" 15 #include "base/metrics/histogram.h"
16 #include "base/stl_util.h" 16 #include "base/stl_util.h"
17 #include "base/string_number_conversions.h" 17 #include "base/string_number_conversions.h"
18 #include "base/string_util.h" 18 #include "base/string_util.h"
19 #include "base/value_conversions.h" 19 #include "base/value_conversions.h"
20 #include "build/build_config.h" 20 #include "build/build_config.h"
21 #include "chrome/browser/browser_process.h" 21 #include "chrome/browser/browser_process.h"
22 #include "chrome/browser/extensions/extension_pref_store.h" 22 #include "chrome/browser/extensions/extension_pref_store.h"
23 #include "chrome/browser/policy/configuration_policy_pref_store.h" 23 #include "chrome/browser/policy/configuration_policy_pref_store.h"
24 #include "chrome/browser/prefs/command_line_pref_store.h" 24 #include "chrome/browser/prefs/command_line_pref_store.h"
25 #include "chrome/browser/prefs/default_pref_store.h" 25 #include "chrome/browser/prefs/default_pref_store.h"
26 #include "chrome/browser/prefs/incognito_user_pref_store.h" 26 #include "chrome/browser/prefs/incognito_user_pref_store.h"
27 #include "chrome/browser/prefs/pref_model_associator.h" 27 #include "chrome/browser/prefs/pref_model_associator.h"
28 #include "chrome/browser/prefs/pref_notifier_impl.h" 28 #include "chrome/browser/prefs/pref_notifier_impl.h"
29 #include "chrome/browser/prefs/pref_value_store.h" 29 #include "chrome/browser/prefs/pref_value_store.h"
30 #include "chrome/browser/prefs/tab_contents_user_pref_store.h"
30 #include "chrome/browser/ui/profile_error_dialog.h" 31 #include "chrome/browser/ui/profile_error_dialog.h"
31 #include "chrome/common/json_pref_store.h" 32 #include "chrome/common/json_pref_store.h"
32 #include "content/browser/browser_thread.h" 33 #include "content/browser/browser_thread.h"
33 #include "content/common/notification_service.h" 34 #include "content/common/notification_service.h"
34 #include "grit/chromium_strings.h" 35 #include "grit/chromium_strings.h"
35 #include "grit/generated_resources.h" 36 #include "grit/generated_resources.h"
36 #include "ui/base/l10n/l10n_util.h" 37 #include "ui/base/l10n/l10n_util.h"
37 38
38 namespace { 39 namespace {
39 40
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 ConfigurationPolicyPrefStore* recommended_cloud = NULL; 145 ConfigurationPolicyPrefStore* recommended_cloud = NULL;
145 #endif // ENABLE_CONFIGURATION_POLICY 146 #endif // ENABLE_CONFIGURATION_POLICY
146 147
147 CommandLinePrefStore* command_line = 148 CommandLinePrefStore* command_line =
148 new CommandLinePrefStore(CommandLine::ForCurrentProcess()); 149 new CommandLinePrefStore(CommandLine::ForCurrentProcess());
149 JsonPrefStore* user = new JsonPrefStore( 150 JsonPrefStore* user = new JsonPrefStore(
150 pref_filename, 151 pref_filename,
151 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE)); 152 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE));
152 DefaultPrefStore* default_pref_store = new DefaultPrefStore(); 153 DefaultPrefStore* default_pref_store = new DefaultPrefStore();
153 154
154 return new PrefService( 155 PrefNotifierImpl* notifier = new PrefNotifierImpl();
155 managed_platform, managed_cloud, extension_prefs, 156 PrefService* prefs = new PrefService(
156 command_line, user, recommended_platform, 157 new PrefValueStore(managed_platform,
157 recommended_cloud, default_pref_store, async); 158 managed_cloud,
159 extension_prefs,
160 command_line,
161 user,
162 recommended_platform,
163 recommended_cloud,
164 default_pref_store,
165 notifier),
166 user,
167 default_pref_store,
168 notifier,
169 async);
170 PrefModelAssociator* associator = new PrefModelAssociator(prefs);
171 prefs->pref_sync_associator_.reset(associator);
172 notifier->SetPrefModelAssociator(associator);
173 return prefs;
158 } 174 }
159 175
160 PrefService* PrefService::CreateIncognitoPrefService( 176 PrefService* PrefService::CreateIncognitoPrefService(
161 PrefStore* incognito_extension_prefs) { 177 PrefStore* incognito_extension_prefs) {
162 return new PrefService(*this, incognito_extension_prefs); 178 PersistentPrefStore* incognito_user_prefs =
179 new IncognitoUserPrefStore(user_pref_store_.get());
180 // TODO(mnissler): This PrefNotifier needs to listen for notifications from
181 // the original |pref_notifier_| and forward notifications. We need to
182 // implement a wrapper that does this.
183 PrefNotifierImpl* pref_notifier = new PrefNotifierImpl();
184 return new PrefService(
185 pref_value_store_->CloneAndSpecialize(
186 NULL, // managed_platform_prefs
187 NULL, // managed_cloud_prefs
188 incognito_extension_prefs,
189 NULL, // command_line_prefs
190 incognito_user_prefs,
191 NULL, // recommended_platform_prefs
192 NULL, // recommended_cloud_prefs
193 default_store_.get(),
194 pref_notifier),
195 incognito_user_prefs,
196 default_store_.get(),
197 pref_notifier,
198 false);
163 } 199 }
164 200
165 PrefService::PrefService(PrefStore* managed_platform_prefs, 201 PrefService* PrefService::CreateTabContentsPrefService() {
166 PrefStore* managed_cloud_prefs, 202 PersistentPrefStore* tab_contents_user_prefs = new TabContentsUserPrefStore();
167 PrefStore* extension_prefs, 203 DefaultPrefStore* default_store = new DefaultPrefStore();
168 PrefStore* command_line_prefs, 204 PrefNotifierImpl* pref_notifier = new PrefNotifierImpl();
169 PersistentPrefStore* user_prefs, 205 return new PrefService(
170 PrefStore* recommended_platform_prefs, 206 pref_value_store_->CloneAndSpecialize(
171 PrefStore* recommended_cloud_prefs, 207 NULL, // managed_platform_prefs
172 DefaultPrefStore* default_store, 208 NULL, // managed_cloud_prefs
173 bool async) 209 NULL, // extension_prefs
174 : user_pref_store_(user_prefs), 210 NULL, // command_line_prefs
175 default_store_(default_store) { 211 tab_contents_user_prefs,
176 pref_sync_associator_.reset(new PrefModelAssociator(this)); 212 NULL, // recommended_platform_prefs
177 pref_notifier_.reset(new PrefNotifierImpl(this)); 213 NULL, // recommended_cloud_prefs
178 pref_value_store_.reset( 214 default_store,
179 new PrefValueStore(managed_platform_prefs, 215 pref_notifier),
180 managed_cloud_prefs, 216 tab_contents_user_prefs,
181 extension_prefs, 217 default_store,
182 command_line_prefs, 218 pref_notifier,
183 user_pref_store_, 219 false);
184 recommended_platform_prefs,
185 recommended_cloud_prefs,
186 default_store,
187 pref_sync_associator_.get(),
188 pref_notifier_.get()));
189 InitFromStorage(async);
190 } 220 }
191 221
192 PrefService::PrefService(const PrefService& original, 222 PrefService::PrefService(PrefValueStore* pref_value_store,
193 PrefStore* incognito_extension_prefs) 223 PersistentPrefStore* user_prefs,
194 : user_pref_store_( 224 DefaultPrefStore* default_store,
195 new IncognitoUserPrefStore(original.user_pref_store_.get())), 225 PrefNotifierImpl* pref_notifier,
196 default_store_(original.default_store_.get()) { 226 bool async)
197 // Incognito mode doesn't sync, so no need to create PrefModelAssociator. 227 : pref_notifier_(pref_notifier),
198 pref_notifier_.reset(new PrefNotifierImpl(this)); 228 pref_value_store_(pref_value_store),
199 pref_value_store_.reset(original.pref_value_store_->CloneAndSpecialize( 229 user_pref_store_(user_prefs),
200 NULL, // managed_platform_prefs 230 default_store_(default_store) {
201 NULL, // managed_cloud_prefs 231 pref_notifier_->SetSource(this);
202 incognito_extension_prefs, 232 InitFromStorage(async);
203 NULL, // command_line_prefs
204 user_pref_store_.get(),
205 NULL, // recommended_platform_prefs
206 NULL, // recommended_cloud_prefs
207 default_store_.get(),
208 NULL, // pref_sync_associator_
209 pref_notifier_.get()));
210 } 233 }
211 234
212 PrefService::~PrefService() { 235 PrefService::~PrefService() {
213 DCHECK(CalledOnValidThread()); 236 DCHECK(CalledOnValidThread());
214 STLDeleteContainerPointers(prefs_.begin(), prefs_.end()); 237 STLDeleteContainerPointers(prefs_.begin(), prefs_.end());
215 prefs_.clear(); 238 prefs_.clear();
216 239
217 // Reset pointers so accesses after destruction reliably crash. 240 // Reset pointers so accesses after destruction reliably crash.
218 pref_value_store_.reset(); 241 pref_value_store_.reset();
219 user_pref_store_ = NULL; 242 user_pref_store_ = NULL;
(...skipping 674 matching lines...) Expand 10 before | Expand all | Expand 10 after
894 return pref_value_store()->PrefValueFromDefaultStore(name_.c_str()); 917 return pref_value_store()->PrefValueFromDefaultStore(name_.c_str());
895 } 918 }
896 919
897 bool PrefService::Preference::IsUserModifiable() const { 920 bool PrefService::Preference::IsUserModifiable() const {
898 return pref_value_store()->PrefValueUserModifiable(name_.c_str()); 921 return pref_value_store()->PrefValueUserModifiable(name_.c_str());
899 } 922 }
900 923
901 bool PrefService::Preference::IsExtensionModifiable() const { 924 bool PrefService::Preference::IsExtensionModifiable() const {
902 return pref_value_store()->PrefValueExtensionModifiable(name_.c_str()); 925 return pref_value_store()->PrefValueExtensionModifiable(name_.c_str());
903 } 926 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698