diff options
Diffstat (limited to 'chrome/browser/extensions/extension_prefs.cc')
-rw-r--r-- | chrome/browser/extensions/extension_prefs.cc | 96 |
1 files changed, 74 insertions, 22 deletions
diff --git a/chrome/browser/extensions/extension_prefs.cc b/chrome/browser/extensions/extension_prefs.cc index 058ede3..3fbea88 100644 --- a/chrome/browser/extensions/extension_prefs.cc +++ b/chrome/browser/extensions/extension_prefs.cc @@ -14,11 +14,7 @@ using base::Time; namespace { -// Preferences keys - -// A preference that keeps track of per-extension settings. This is a dictionary -// object read from the Preferences file, keyed off of extension id's. -const char kExtensionsPref[] = "extensions.settings"; +// Additional preferences keys // Where an extension was installed from. (see Extension::Location) const char kPrefLocation[] = "location"; @@ -79,6 +75,10 @@ const char kPrefAllowFileAccess[] = "allowFileAccess"; // purchased apps. const char kWebStoreLogin[] = "extensions.webstore_login"; +// A preference set by the the NTP to persist the desired launch container type +// used for apps. +const char kPrefLaunchType[] = "launchType"; + } // namespace //////////////////////////////////////////////////////////////////////////////// @@ -90,7 +90,8 @@ namespace { // id. We can remove this in a couple of months. (See http://crbug.com/40017 // and http://crbug.com/39745 for more details). static void CleanupBadExtensionKeys(PrefService* prefs) { - DictionaryValue* dictionary = prefs->GetMutableDictionary(kExtensionsPref); + DictionaryValue* dictionary = + prefs->GetMutableDictionary(ExtensionPrefs::kExtensionsPref); std::set<std::string> bad_keys; for (DictionaryValue::key_iterator i = dictionary->begin_keys(); i != dictionary->end_keys(); ++i) { @@ -121,6 +122,9 @@ ExtensionPrefs::ExtensionPrefs(PrefService* prefs, const FilePath& root_dir) MakePathsRelative(); } +// static +const char ExtensionPrefs::kExtensionsPref[] = "extensions.settings"; + static FilePath::StringType MakePathRelative(const FilePath& parent, const FilePath& child, bool *dirty) { @@ -164,7 +168,7 @@ void ExtensionPrefs::MakePathsRelative() { } } if (dirty) - prefs_->ScheduleSavePersistentPrefs(); + SavePrefsAndNotify(); } void ExtensionPrefs::MakePathsAbsolute(DictionaryValue* dict) { @@ -233,6 +237,36 @@ bool ExtensionPrefs::ReadExtensionPrefBoolean( return ReadBooleanFromPref(ext, pref_key); } +bool ExtensionPrefs::ReadIntegerFromPref( + DictionaryValue* ext, const std::string& pref_key, int* out_value) { + if (!ext->HasKey(pref_key)) return false; + if (!ext->GetInteger(pref_key, out_value)) { + NOTREACHED() << "Failed to fetch " << pref_key << " flag."; + // In case we could not fetch the flag, we treat it as false. + return false; + } + return out_value != NULL; +} + +bool ExtensionPrefs::ReadExtensionPrefInteger( + const std::string& extension_id, const std::string& pref_key, + int* out_value) { + const DictionaryValue* extensions = prefs_->GetDictionary(kExtensionsPref); + if (!extensions) + return false; + DictionaryValue* ext = NULL; + if (!extensions->GetDictionary(extension_id, &ext)) { + // No such extension yet. + return false; + } + return ReadIntegerFromPref(ext, pref_key, out_value); +} + +void ExtensionPrefs::SavePrefsAndNotify() { + prefs_->ScheduleSavePersistentPrefs(); + prefs_->pref_notifier()->OnUserPreferenceSet(kExtensionsPref); +} + bool ExtensionPrefs::IsBlacklistBitSet(DictionaryValue* ext) { return ReadBooleanFromPref(ext, kPrefBlacklist); } @@ -289,7 +323,7 @@ void ExtensionPrefs::SetDidExtensionEscalatePermissions( Extension* extension, bool did_escalate) { UpdateExtensionPref(extension->id(), kExtensionDidEscalatePermissions, Value::CreateBooleanValue(did_escalate)); - prefs_->SavePersistentPrefs(); + prefs_->ScheduleSavePersistentPrefs(); } void ExtensionPrefs::UpdateBlacklist( @@ -343,8 +377,7 @@ void ExtensionPrefs::UpdateBlacklist( for (unsigned int i = 0; i < remove_pref_ids.size(); ++i) { DeleteExtensionPrefs(remove_pref_ids[i]); } - // Update persistent registry - prefs_->ScheduleSavePersistentPrefs(); + SavePrefsAndNotify(); return; } @@ -368,7 +401,7 @@ void ExtensionPrefs::SetLastPingDayImpl(const Time& time, } std::string value = base::Int64ToString(time.ToInternalValue()); dictionary->SetString(kLastPingDay, value); - prefs_->ScheduleSavePersistentPrefs(); + SavePrefsAndNotify(); } Time ExtensionPrefs::LastPingDay(const std::string& extension_id) const { @@ -399,7 +432,7 @@ void ExtensionPrefs::SetIsIncognitoEnabled(const std::string& extension_id, bool enabled) { UpdateExtensionPref(extension_id, kPrefIncognitoEnabled, Value::CreateBooleanValue(enabled)); - prefs_->SavePersistentPrefs(); + SavePrefsAndNotify(); } bool ExtensionPrefs::AllowFileAccess(const std::string& extension_id) { @@ -410,7 +443,26 @@ void ExtensionPrefs::SetAllowFileAccess(const std::string& extension_id, bool allow) { UpdateExtensionPref(extension_id, kPrefAllowFileAccess, Value::CreateBooleanValue(allow)); - prefs_->SavePersistentPrefs(); + SavePrefsAndNotify(); +} + +ExtensionPrefs::LaunchType ExtensionPrefs::GetLaunchType( + const std::string& extension_id) { + int value; + if (ReadExtensionPrefInteger(extension_id, kPrefLaunchType, &value) && ( + value == LAUNCH_PINNED || + value == LAUNCH_REGULAR || + value == LAUNCH_FULLSCREEN)) { + return static_cast<LaunchType>(value); + } + return LAUNCH_PINNED; +} + +void ExtensionPrefs::SetLaunchType(const std::string& extension_id, + LaunchType launch_type) { + UpdateExtensionPref(extension_id, kPrefLaunchType, + Value::CreateIntegerValue(static_cast<int>(launch_type))); + SavePrefsAndNotify(); } void ExtensionPrefs::GetKilledExtensionIds(std::set<std::string>* killed_ids) { @@ -462,7 +514,7 @@ void ExtensionPrefs::SetToolbarOrder( iter != extension_ids.end(); ++iter) { toolbar_order->Append(new StringValue(*iter)); } - prefs_->ScheduleSavePersistentPrefs(); + SavePrefsAndNotify(); } void ExtensionPrefs::OnExtensionInstalled( @@ -484,7 +536,7 @@ void ExtensionPrefs::OnExtensionInstalled( UpdateExtensionPref(id, kPrefManifest, extension->manifest_value()->DeepCopy()); } - prefs_->SavePersistentPrefs(); + SavePrefsAndNotify(); } void ExtensionPrefs::OnExtensionUninstalled(const std::string& extension_id, @@ -497,7 +549,7 @@ void ExtensionPrefs::OnExtensionUninstalled(const std::string& extension_id, if (!external_uninstall && Extension::IsExternalLocation(location)) { UpdateExtensionPref(extension_id, kPrefState, Value::CreateIntegerValue(Extension::KILLBIT)); - prefs_->ScheduleSavePersistentPrefs(); + SavePrefsAndNotify(); } else { DeleteExtensionPrefs(extension_id); } @@ -525,7 +577,7 @@ void ExtensionPrefs::SetExtensionState(Extension* extension, Extension::State state) { UpdateExtensionPref(extension->id(), kPrefState, Value::CreateIntegerValue(state)); - prefs_->SavePersistentPrefs(); + SavePrefsAndNotify(); } std::string ExtensionPrefs::GetVersionString(const std::string& extension_id) { @@ -546,7 +598,7 @@ void ExtensionPrefs::UpdateManifest(Extension* extension) { if (extension->location() != Extension::LOAD) { UpdateExtensionPref(extension->id(), kPrefManifest, extension->manifest_value()->DeepCopy()); - prefs_->ScheduleSavePersistentPrefs(); + SavePrefsAndNotify(); } } @@ -577,7 +629,7 @@ void ExtensionPrefs::DeleteExtensionPrefs(const std::string& extension_id) { DictionaryValue* dict = prefs_->GetMutableDictionary(kExtensionsPref); if (dict->HasKey(extension_id)) { dict->Remove(extension_id, NULL); - prefs_->ScheduleSavePersistentPrefs(); + SavePrefsAndNotify(); } } @@ -717,7 +769,7 @@ void ExtensionPrefs::SetIdleInstallInfo(const std::string& extension_id, info->SetString(kIdleInstallInfoFetchTime, base::Int64ToString(fetch_time.ToInternalValue())); extension_prefs->Set(kIdleInstallInfo, info); - prefs_->ScheduleSavePersistentPrefs(); + SavePrefsAndNotify(); } bool ExtensionPrefs::RemoveIdleInstallInfo(const std::string& extension_id) { @@ -725,7 +777,7 @@ bool ExtensionPrefs::RemoveIdleInstallInfo(const std::string& extension_id) { if (!extension_prefs) return false; bool result = extension_prefs->Remove(kIdleInstallInfo, NULL); - prefs_->ScheduleSavePersistentPrefs(); + SavePrefsAndNotify(); return result; } @@ -807,7 +859,7 @@ bool ExtensionPrefs::GetWebStoreLogin(std::string* result) { void ExtensionPrefs::SetWebStoreLogin(const std::string& login) { prefs_->SetString(kWebStoreLogin, login); - prefs_->ScheduleSavePersistentPrefs(); + SavePrefsAndNotify(); } // static |