diff options
Diffstat (limited to 'chrome/browser/prefs')
-rw-r--r-- | chrome/browser/prefs/default_pref_store.cc | 5 | ||||
-rw-r--r-- | chrome/browser/prefs/default_pref_store.h | 3 | ||||
-rw-r--r-- | chrome/browser/prefs/per_tab_user_pref_store.cc | 45 | ||||
-rw-r--r-- | chrome/browser/prefs/pref_model_associator.cc | 5 | ||||
-rw-r--r-- | chrome/browser/prefs/pref_model_associator.h | 4 | ||||
-rw-r--r-- | chrome/browser/prefs/pref_service.cc | 18 | ||||
-rw-r--r-- | chrome/browser/prefs/pref_service.h | 2 | ||||
-rw-r--r-- | chrome/browser/prefs/pref_service_unittest.cc | 4 |
8 files changed, 83 insertions, 3 deletions
diff --git a/chrome/browser/prefs/default_pref_store.cc b/chrome/browser/prefs/default_pref_store.cc index c8b9b8a..06168bc 100644 --- a/chrome/browser/prefs/default_pref_store.cc +++ b/chrome/browser/prefs/default_pref_store.cc @@ -15,6 +15,11 @@ void DefaultPrefStore::SetDefaultValue(const std::string& key, Value* value) { SetValue(key, value); } +void DefaultPrefStore::RemoveDefaultValue(const std::string& key) { + CHECK(GetValue(key, NULL) == READ_OK); + RemoveValue(key); +} + base::Value::Type DefaultPrefStore::GetType(const std::string& key) const { const Value* value; return GetValue(key, &value) == READ_OK ? value->GetType() : Value::TYPE_NULL; diff --git a/chrome/browser/prefs/default_pref_store.h b/chrome/browser/prefs/default_pref_store.h index 4f818a5..96de6d3 100644 --- a/chrome/browser/prefs/default_pref_store.h +++ b/chrome/browser/prefs/default_pref_store.h @@ -21,6 +21,9 @@ class DefaultPrefStore : public ValueMapPrefStore { // Stores a new |value| for |key|. Assumes ownership of |value|. void SetDefaultValue(const std::string& key, Value* value); + // Removes the value for |key|. + void RemoveDefaultValue(const std::string& key); + // Returns the registered type for |key| or Value::TYPE_NULL if the |key| // has not been registered. base::Value::Type GetType(const std::string& key) const; diff --git a/chrome/browser/prefs/per_tab_user_pref_store.cc b/chrome/browser/prefs/per_tab_user_pref_store.cc index d521ea1..41f0c8f 100644 --- a/chrome/browser/prefs/per_tab_user_pref_store.cc +++ b/chrome/browser/prefs/per_tab_user_pref_store.cc @@ -8,5 +8,48 @@ PerTabUserPrefStore::PerTabUserPrefStore(PersistentPrefStore* underlay) : OverlayUserPrefStore(underlay) { RegisterOverlayProperty( - prefs::kWebKitJavascriptEnabled, prefs::kWebKitGlobalJavascriptEnabled); + prefs::kWebKitJavascriptEnabled, + prefs::kWebKitGlobalJavascriptEnabled); + RegisterOverlayProperty( + prefs::kWebKitJavascriptCanOpenWindowsAutomatically, + prefs::kWebKitGlobalJavascriptCanOpenWindowsAutomatically); + RegisterOverlayProperty( + prefs::kWebKitLoadsImagesAutomatically, + prefs::kWebKitGlobalLoadsImagesAutomatically); + RegisterOverlayProperty( + prefs::kWebKitPluginsEnabled, + prefs::kWebKitGlobalPluginsEnabled); + RegisterOverlayProperty( + prefs::kDefaultCharset, + prefs::kGlobalDefaultCharset); + RegisterOverlayProperty( + prefs::kWebKitStandardFontFamily, + prefs::kWebKitGlobalStandardFontFamily); + RegisterOverlayProperty( + prefs::kWebKitFixedFontFamily, + prefs::kWebKitGlobalFixedFontFamily); + RegisterOverlayProperty( + prefs::kWebKitSerifFontFamily, + prefs::kWebKitGlobalSerifFontFamily); + RegisterOverlayProperty( + prefs::kWebKitSansSerifFontFamily, + prefs::kWebKitGlobalSansSerifFontFamily); + RegisterOverlayProperty( + prefs::kWebKitCursiveFontFamily, + prefs::kWebKitGlobalCursiveFontFamily); + RegisterOverlayProperty( + prefs::kWebKitFantasyFontFamily, + prefs::kWebKitGlobalFantasyFontFamily); + RegisterOverlayProperty( + prefs::kWebKitDefaultFontSize, + prefs::kWebKitGlobalDefaultFontSize); + RegisterOverlayProperty( + prefs::kWebKitDefaultFixedFontSize, + prefs::kWebKitGlobalDefaultFixedFontSize); + RegisterOverlayProperty( + prefs::kWebKitMinimumFontSize, + prefs::kWebKitGlobalMinimumFontSize); + RegisterOverlayProperty( + prefs::kWebKitMinimumLogicalFontSize, + prefs::kWebKitGlobalMinimumLogicalFontSize); } diff --git a/chrome/browser/prefs/pref_model_associator.cc b/chrome/browser/prefs/pref_model_associator.cc index 4f06c19..45d4332 100644 --- a/chrome/browser/prefs/pref_model_associator.cc +++ b/chrome/browser/prefs/pref_model_associator.cc @@ -376,6 +376,11 @@ bool PrefModelAssociator::IsPrefRegistered(const char* name) { return registered_preferences_.count(name) > 0; } +void PrefModelAssociator::UnregisterPref(const char* name) { + DCHECK(synced_preferences_.count(name) == 0); + registered_preferences_.erase(name); +} + void PrefModelAssociator::ProcessPrefChange(const std::string& name) { if (processing_syncer_changes_) return; // These are changes originating from us, ignore. diff --git a/chrome/browser/prefs/pref_model_associator.h b/chrome/browser/prefs/pref_model_associator.h index cf1dd77..3d2fd1f 100644 --- a/chrome/browser/prefs/pref_model_associator.h +++ b/chrome/browser/prefs/pref_model_associator.h @@ -60,6 +60,10 @@ class PrefModelAssociator // Returns true if the specified preference is registered for syncing. virtual bool IsPrefRegistered(const char* name); + // Unregisters a previously registered preference. This must be called + // prior to making the first sync. + virtual void UnregisterPref(const char* name); + // Process a local preference change. This can trigger new SyncChanges being // sent to the syncer. virtual void ProcessPrefChange(const std::string& name); diff --git a/chrome/browser/prefs/pref_service.cc b/chrome/browser/prefs/pref_service.cc index 6ec0802..5022bdd 100644 --- a/chrome/browser/prefs/pref_service.cc +++ b/chrome/browser/prefs/pref_service.cc @@ -745,6 +745,24 @@ void PrefService::RegisterPreference(const char* path, pref_sync_associator_->RegisterPref(path); } +void PrefService::UnregisterPreference(const char* path) { + DCHECK(CalledOnValidThread()); + + Preference p(this, path, Value::TYPE_NULL); + PreferenceSet::const_iterator it = prefs_.find(&p); + if (it == prefs_.end()) { + NOTREACHED() << "Trying to unregister an unregistered pref: " << path; + return; + } + + prefs_.erase(it); + default_store_->RemoveDefaultValue(path); + if (pref_sync_associator_.get() && + pref_sync_associator_->IsPrefRegistered(path)) { + pref_sync_associator_->UnregisterPref(path); + } +} + void PrefService::ClearPref(const char* path) { DCHECK(CalledOnValidThread()); diff --git a/chrome/browser/prefs/pref_service.h b/chrome/browser/prefs/pref_service.h index a035de86..f0ed120 100644 --- a/chrome/browser/prefs/pref_service.h +++ b/chrome/browser/prefs/pref_service.h @@ -238,6 +238,8 @@ class PrefService : public base::NonThreadSafe { void RegisterInt64Pref(const char* path, int64 default_value, PrefSyncStatus sync_status); + // Unregisters a preference. + void UnregisterPreference(const char* path); // If the path is valid and the value at the end of the path matches the type // specified, it will return the specified value. Otherwise, the default diff --git a/chrome/browser/prefs/pref_service_unittest.cc b/chrome/browser/prefs/pref_service_unittest.cc index 9a490a4..de2060d 100644 --- a/chrome/browser/prefs/pref_service_unittest.cc +++ b/chrome/browser/prefs/pref_service_unittest.cc @@ -255,9 +255,9 @@ class PrefServiceWebKitPrefs : public ChromeRenderViewHostTestHarness { pref_services->SetUserPref(prefs::kUsesSystemTheme, Value::CreateBooleanValue(false)); #endif - pref_services->SetUserPref(prefs::kDefaultCharset, + pref_services->SetUserPref(prefs::kGlobalDefaultCharset, Value::CreateStringValue("utf8")); - pref_services->SetUserPref(prefs::kWebKitDefaultFontSize, + pref_services->SetUserPref(prefs::kWebKitGlobalDefaultFontSize, Value::CreateIntegerValue(20)); pref_services->SetUserPref(prefs::kWebKitTextAreasAreResizable, Value::CreateBooleanValue(false)); |