summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/extension_prefs.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/extensions/extension_prefs.cc')
-rw-r--r--chrome/browser/extensions/extension_prefs.cc96
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