Index: chrome/common/extensions/manifest_handlers/settings_overrides_handler.cc |
diff --git a/chrome/common/extensions/manifest_handlers/settings_overrides_handler.cc b/chrome/common/extensions/manifest_handlers/settings_overrides_handler.cc |
index 391643ecb216e836487042777be37a7f0decf607..c71a1c32c1b3ce44fc4332dadda3559a9e99251a 100644 |
--- a/chrome/common/extensions/manifest_handlers/settings_overrides_handler.cc |
+++ b/chrome/common/extensions/manifest_handlers/settings_overrides_handler.cc |
@@ -4,15 +4,23 @@ |
#include "chrome/common/extensions/manifest_handlers/settings_overrides_handler.h" |
+#include "base/strings/string_util.h" |
#include "base/strings/utf_string_conversions.h" |
+#include "chrome/common/extensions/permissions/permissions_data.h" |
+#include "chrome/common/extensions/permissions/settings_override_permission.h" |
#include "extensions/common/error_utils.h" |
#include "extensions/common/manifest_constants.h" |
+#include "extensions/common/permissions/api_permission_set.h" |
+#include "extensions/common/permissions/permissions_info.h" |
+#include "url/gurl.h" |
using extensions::api::manifest_types::ChromeSettingsOverrides; |
namespace extensions { |
namespace { |
+const char* kWwwPrefix = "www."; |
+ |
scoped_ptr<GURL> CreateManifestURL(const std::string& url) { |
scoped_ptr<GURL> manifest_url(new GURL(url)); |
if (!manifest_url->is_valid() || |
@@ -54,6 +62,14 @@ std::vector<GURL> ParseStartupPage(const ChromeSettingsOverrides& overrides, |
return urls; |
} |
+// A www. prefix is not informative and thus not worth the limited real estate |
+// in the permissions UI. |
+std::string RemoveWwwPrefix(const std::string& url) { |
+ if (StartsWithASCII(url, kWwwPrefix, false)) |
+ return url.substr(strlen(kWwwPrefix)); |
+ return url; |
+} |
+ |
} // namespace |
SettingsOverrides::SettingsOverrides() {} |
@@ -86,6 +102,27 @@ bool SettingsOverridesHandler::Parse(Extension* extension, string16* error) { |
*error = ASCIIToUTF16(manifest_errors::kInvalidEmptySettingsOverrides); |
return false; |
} |
+ APIPermissionSet* permission_set = |
+ PermissionsData::GetInitialAPIPermissions(extension); |
+ DCHECK(permission_set); |
+ if (info->search_engine) { |
+ permission_set->insert(new SettingsOverrideAPIPermission( |
+ PermissionsInfo::GetInstance()->GetByID(APIPermission::kSearchProvider), |
+ RemoveWwwPrefix(CreateManifestURL(info->search_engine->search_url)-> |
+ GetOrigin().host()))); |
+ } |
+ if (!info->startup_pages.empty()) { |
+ permission_set->insert(new SettingsOverrideAPIPermission( |
+ PermissionsInfo::GetInstance()->GetByID(APIPermission::kStartupPages), |
+ // We only support one startup page even though the type of the manifest |
+ // property is a list, only the first one is used. |
+ RemoveWwwPrefix(info->startup_pages[0].GetContent()))); |
+ } |
+ if (info->homepage) { |
+ permission_set->insert(new SettingsOverrideAPIPermission( |
+ PermissionsInfo::GetInstance()->GetByID(APIPermission::kHomepage), |
+ RemoveWwwPrefix(info->homepage.get()->GetContent()))); |
+ } |
extension->SetManifestData(manifest_keys::kSettingsOverride, |
info.release()); |
return true; |