OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/common/extensions/manifest_handlers/settings_overrides_handler. h" | 5 #include "chrome/common/extensions/manifest_handlers/settings_overrides_handler. h" |
6 | 6 |
7 #include "base/strings/string_util.h" | |
7 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
9 #include "chrome/common/extensions/permissions/permissions_data.h" | |
10 #include "chrome/common/extensions/permissions/settings_override_permission.h" | |
8 #include "extensions/common/error_utils.h" | 11 #include "extensions/common/error_utils.h" |
9 #include "extensions/common/manifest_constants.h" | 12 #include "extensions/common/manifest_constants.h" |
13 #include "extensions/common/permissions/api_permission_set.h" | |
14 #include "extensions/common/permissions/permissions_info.h" | |
15 #include "url/gurl.h" | |
10 | 16 |
11 using extensions::api::manifest_types::ChromeSettingsOverrides; | 17 using extensions::api::manifest_types::ChromeSettingsOverrides; |
12 | 18 |
13 namespace extensions { | 19 namespace extensions { |
14 namespace { | 20 namespace { |
15 | 21 |
22 const char* kWwwPrefix = "www."; | |
23 | |
16 scoped_ptr<GURL> CreateManifestURL(const std::string& url) { | 24 scoped_ptr<GURL> CreateManifestURL(const std::string& url) { |
17 scoped_ptr<GURL> manifest_url(new GURL(url)); | 25 scoped_ptr<GURL> manifest_url(new GURL(url)); |
18 if (!manifest_url->is_valid() || | 26 if (!manifest_url->is_valid() || |
19 !manifest_url->SchemeIsHTTPOrHTTPS()) | 27 !manifest_url->SchemeIsHTTPOrHTTPS()) |
20 return scoped_ptr<GURL>(); | 28 return scoped_ptr<GURL>(); |
21 return manifest_url.Pass(); | 29 return manifest_url.Pass(); |
22 } | 30 } |
23 | 31 |
24 scoped_ptr<GURL> ParseHomepage(const ChromeSettingsOverrides& overrides, | 32 scoped_ptr<GURL> ParseHomepage(const ChromeSettingsOverrides& overrides, |
25 string16* error) { | 33 string16* error) { |
(...skipping 21 matching lines...) Expand all Loading... | |
47 *error = extensions::ErrorUtils::FormatErrorMessageUTF16( | 55 *error = extensions::ErrorUtils::FormatErrorMessageUTF16( |
48 manifest_errors::kInvalidStartupOverrideURL, *i); | 56 manifest_errors::kInvalidStartupOverrideURL, *i); |
49 } else { | 57 } else { |
50 urls.push_back(GURL()); | 58 urls.push_back(GURL()); |
51 urls.back().Swap(manifest_url.get()); | 59 urls.back().Swap(manifest_url.get()); |
52 } | 60 } |
53 } | 61 } |
54 return urls; | 62 return urls; |
55 } | 63 } |
56 | 64 |
65 std::string RemoveWwwPrefix(const std::string& url) { | |
66 if (StartsWithASCII(url, kWwwPrefix, false)) | |
67 return url.substr(strlen(kWwwPrefix)); | |
68 return url; | |
69 } | |
70 | |
57 } // namespace | 71 } // namespace |
58 | 72 |
59 SettingsOverrides::SettingsOverrides() {} | 73 SettingsOverrides::SettingsOverrides() {} |
60 | 74 |
61 SettingsOverrides::~SettingsOverrides() {} | 75 SettingsOverrides::~SettingsOverrides() {} |
62 | 76 |
63 const SettingsOverrides* SettingsOverrides::Get( | 77 const SettingsOverrides* SettingsOverrides::Get( |
64 const Extension* extension) { | 78 const Extension* extension) { |
65 return static_cast<SettingsOverrides*>( | 79 return static_cast<SettingsOverrides*>( |
66 extension->GetManifestData(manifest_keys::kSettingsOverride)); | 80 extension->GetManifestData(manifest_keys::kSettingsOverride)); |
(...skipping 12 matching lines...) Expand all Loading... | |
79 return false; | 93 return false; |
80 | 94 |
81 scoped_ptr<SettingsOverrides> info(new SettingsOverrides); | 95 scoped_ptr<SettingsOverrides> info(new SettingsOverrides); |
82 info->homepage = ParseHomepage(*settings, error); | 96 info->homepage = ParseHomepage(*settings, error); |
83 info->search_engine = settings->search_provider.Pass(); | 97 info->search_engine = settings->search_provider.Pass(); |
84 info->startup_pages = ParseStartupPage(*settings, error); | 98 info->startup_pages = ParseStartupPage(*settings, error); |
85 if (!info->homepage && !info->search_engine && info->startup_pages.empty()) { | 99 if (!info->homepage && !info->search_engine && info->startup_pages.empty()) { |
86 *error = ASCIIToUTF16(manifest_errors::kInvalidEmptySettingsOverrides); | 100 *error = ASCIIToUTF16(manifest_errors::kInvalidEmptySettingsOverrides); |
87 return false; | 101 return false; |
88 } | 102 } |
103 APIPermissionSet* permission_set = | |
104 PermissionsData::GetInitialAPIPermissions(extension); | |
105 DCHECK(permission_set); | |
106 if (info->search_engine) { | |
107 permission_set->insert(new SettingsOverrideAPIPermission( | |
108 PermissionsInfo::GetInstance()->GetByID(APIPermission::kSearchSettings), | |
109 RemoveWwwPrefix(CreateManifestURL(info->search_engine->search_url)-> | |
robertshield
2013/11/04 01:11:13
Please add a comment or a note in the changelist d
MAD
2013/11/04 02:06:34
Done.
| |
110 GetOrigin().host()))); | |
111 } | |
112 if (!info->startup_pages.empty()) { | |
113 permission_set->insert(new SettingsOverrideAPIPermission( | |
114 PermissionsInfo::GetInstance()->GetByID(APIPermission::kStartupPages), | |
115 // We only support one startup page. | |
116 RemoveWwwPrefix(info->startup_pages[0].GetContent()))); | |
117 } | |
118 if (info->homepage) { | |
119 permission_set->insert(new SettingsOverrideAPIPermission( | |
120 PermissionsInfo::GetInstance()->GetByID(APIPermission::kHomePage), | |
121 RemoveWwwPrefix(info->homepage.get()->GetContent()))); | |
122 } | |
89 extension->SetManifestData(manifest_keys::kSettingsOverride, | 123 extension->SetManifestData(manifest_keys::kSettingsOverride, |
90 info.release()); | 124 info.release()); |
91 return true; | 125 return true; |
92 } | 126 } |
93 | 127 |
94 const std::vector<std::string> SettingsOverridesHandler::Keys() const { | 128 const std::vector<std::string> SettingsOverridesHandler::Keys() const { |
95 return SingleKey(manifest_keys::kSettingsOverride); | 129 return SingleKey(manifest_keys::kSettingsOverride); |
96 } | 130 } |
97 | 131 |
98 } // namespace extensions | 132 } // namespace extensions |
OLD | NEW |