Index: chrome/browser/extensions/extension_management_internal.cc |
diff --git a/chrome/browser/extensions/extension_management_internal.cc b/chrome/browser/extensions/extension_management_internal.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..73bd132fbf831a7ee68bcbe04a9957153a721472 |
--- /dev/null |
+++ b/chrome/browser/extensions/extension_management_internal.cc |
@@ -0,0 +1,94 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/extensions/extension_management_internal.h" |
+ |
+#include "base/logging.h" |
+#include "base/values.h" |
+#include "chrome/browser/extensions/extension_management_constants.h" |
+#include "extensions/common/url_pattern_set.h" |
+#include "url/gurl.h" |
+ |
+namespace extensions { |
+ |
+namespace internal { |
+ |
+namespace { |
+const char kMalformedPreferenceWarning[] = |
+ "Malformed extension management preference."; |
+} // namespace |
+ |
+IndividualSettings::IndividualSettings() { |
+ Reset(); |
+} |
+ |
+IndividualSettings::~IndividualSettings() { |
+} |
+ |
+bool IndividualSettings::Parse(const base::DictionaryValue* dict, |
+ ParsingScope scope) { |
+ std::string installation_mode_str; |
+ if (dict->GetStringWithoutPathExpansion(schema_constants::kInstallationMode, |
+ &installation_mode_str)) { |
+ if (installation_mode_str == schema_constants::kAllowed) { |
+ installation_mode = ExtensionManagement::INSTALLATION_ALLOWED; |
+ } else if (installation_mode_str == schema_constants::kBlocked) { |
+ installation_mode = ExtensionManagement::INSTALLATION_BLOCKED; |
+ } else if (installation_mode_str == schema_constants::kForceInstalled) { |
+ installation_mode = ExtensionManagement::INSTALLATION_FORCED; |
+ } else if (installation_mode_str == schema_constants::kNormalInstalled) { |
+ installation_mode = ExtensionManagement::INSTALLATION_RECOMMENDED; |
+ } else { |
+ // Invalid value for 'installation_mode'. |
+ LOG(WARNING) << kMalformedPreferenceWarning; |
+ return false; |
+ } |
+ |
+ // Only proceed to fetch update url if force or recommended install mode |
+ // is set. |
+ if (installation_mode == ExtensionManagement::INSTALLATION_FORCED || |
+ installation_mode == ExtensionManagement::INSTALLATION_RECOMMENDED) { |
+ if (scope != SCOPE_INDIVIDUAL) { |
+ // Only individual extensions are allowed to be automatically installed. |
+ LOG(WARNING) << kMalformedPreferenceWarning; |
+ return false; |
+ } |
+ std::string update_url_str; |
+ if (dict->GetStringWithoutPathExpansion(schema_constants::kUpdateUrl, |
+ &update_url_str) && |
+ GURL(update_url_str).is_valid()) { |
+ update_url = update_url_str; |
+ } else { |
+ // No valid update URL for extension. |
+ LOG(WARNING) << kMalformedPreferenceWarning; |
+ return false; |
+ } |
+ } |
+ } |
+ |
+ return true; |
+} |
+ |
+void IndividualSettings::Reset() { |
+ installation_mode = ExtensionManagement::INSTALLATION_ALLOWED; |
+ update_url.clear(); |
+} |
+ |
+GlobalSettings::GlobalSettings() { |
+ Reset(); |
+} |
+ |
+GlobalSettings::~GlobalSettings() { |
+} |
+ |
+void GlobalSettings::Reset() { |
+ has_restricted_install_sources = false; |
+ install_sources.ClearPatterns(); |
+ has_restricted_allowed_types = false; |
+ allowed_types.clear(); |
+} |
+ |
+} // namespace internal |
+ |
+} // namespace extensions |