Chromium Code Reviews| 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..11e5c47eaa01c581dce4c7ac92bb469ffcde747a 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,26 @@ 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::kSearchSettings), |
| + 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. |
|
Yoyo Zhou
2013/11/04 22:15:50
Is this "we only support warning for one startup p
MAD
2013/11/05 01:02:06
No, we only support one startup page in the manife
|
| + 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; |