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 <memory> |
7 #include <utility> | 8 #include <utility> |
8 | 9 |
9 #include "base/memory/scoped_ptr.h" | |
10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
11 #include "base/strings/stringprintf.h" | 11 #include "base/strings/stringprintf.h" |
12 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
13 #include "base/values.h" | 13 #include "base/values.h" |
14 #include "extensions/common/error_utils.h" | 14 #include "extensions/common/error_utils.h" |
15 #include "extensions/common/extension_set.h" | 15 #include "extensions/common/extension_set.h" |
16 #include "extensions/common/feature_switch.h" | 16 #include "extensions/common/feature_switch.h" |
17 #include "extensions/common/manifest_constants.h" | 17 #include "extensions/common/manifest_constants.h" |
18 #include "extensions/common/manifest_handlers/permissions_parser.h" | 18 #include "extensions/common/manifest_handlers/permissions_parser.h" |
19 #include "extensions/common/permissions/api_permission_set.h" | 19 #include "extensions/common/permissions/api_permission_set.h" |
20 #include "extensions/common/permissions/manifest_permission.h" | 20 #include "extensions/common/permissions/manifest_permission.h" |
21 #include "extensions/common/permissions/permissions_info.h" | 21 #include "extensions/common/permissions/permissions_info.h" |
22 #include "extensions/common/permissions/settings_override_permission.h" | 22 #include "extensions/common/permissions/settings_override_permission.h" |
23 #include "ipc/ipc_message.h" | 23 #include "ipc/ipc_message.h" |
24 #include "ipc/ipc_message_utils.h" | 24 #include "ipc/ipc_message_utils.h" |
25 #include "url/gurl.h" | 25 #include "url/gurl.h" |
26 | 26 |
27 using extensions::api::manifest_types::ChromeSettingsOverrides; | 27 using extensions::api::manifest_types::ChromeSettingsOverrides; |
28 | 28 |
29 namespace extensions { | 29 namespace extensions { |
30 namespace { | 30 namespace { |
31 | 31 |
32 const char kWwwPrefix[] = "www."; | 32 const char kWwwPrefix[] = "www."; |
33 | 33 |
34 scoped_ptr<GURL> CreateManifestURL(const std::string& url) { | 34 std::unique_ptr<GURL> CreateManifestURL(const std::string& url) { |
35 scoped_ptr<GURL> manifest_url(new GURL(url)); | 35 std::unique_ptr<GURL> manifest_url(new GURL(url)); |
36 if (!manifest_url->is_valid() || | 36 if (!manifest_url->is_valid() || |
37 !manifest_url->SchemeIsHTTPOrHTTPS()) | 37 !manifest_url->SchemeIsHTTPOrHTTPS()) |
38 return scoped_ptr<GURL>(); | 38 return std::unique_ptr<GURL>(); |
39 return manifest_url; | 39 return manifest_url; |
40 } | 40 } |
41 | 41 |
42 scoped_ptr<GURL> ParseHomepage(const ChromeSettingsOverrides& overrides, | 42 std::unique_ptr<GURL> ParseHomepage(const ChromeSettingsOverrides& overrides, |
43 base::string16* error) { | 43 base::string16* error) { |
44 if (!overrides.homepage) | 44 if (!overrides.homepage) |
45 return scoped_ptr<GURL>(); | 45 return std::unique_ptr<GURL>(); |
46 scoped_ptr<GURL> manifest_url = CreateManifestURL(*overrides.homepage); | 46 std::unique_ptr<GURL> manifest_url = CreateManifestURL(*overrides.homepage); |
47 if (!manifest_url) { | 47 if (!manifest_url) { |
48 *error = extensions::ErrorUtils::FormatErrorMessageUTF16( | 48 *error = extensions::ErrorUtils::FormatErrorMessageUTF16( |
49 manifest_errors::kInvalidHomepageOverrideURL, *overrides.homepage); | 49 manifest_errors::kInvalidHomepageOverrideURL, *overrides.homepage); |
50 } | 50 } |
51 return manifest_url; | 51 return manifest_url; |
52 } | 52 } |
53 | 53 |
54 std::vector<GURL> ParseStartupPage(const ChromeSettingsOverrides& overrides, | 54 std::vector<GURL> ParseStartupPage(const ChromeSettingsOverrides& overrides, |
55 base::string16* error) { | 55 base::string16* error) { |
56 std::vector<GURL> urls; | 56 std::vector<GURL> urls; |
57 if (!overrides.startup_pages) | 57 if (!overrides.startup_pages) |
58 return urls; | 58 return urls; |
59 | 59 |
60 for (std::vector<std::string>::const_iterator i = | 60 for (std::vector<std::string>::const_iterator i = |
61 overrides.startup_pages->begin(); i != overrides.startup_pages->end(); | 61 overrides.startup_pages->begin(); i != overrides.startup_pages->end(); |
62 ++i) { | 62 ++i) { |
63 scoped_ptr<GURL> manifest_url = CreateManifestURL(*i); | 63 std::unique_ptr<GURL> manifest_url = CreateManifestURL(*i); |
64 if (!manifest_url) { | 64 if (!manifest_url) { |
65 *error = extensions::ErrorUtils::FormatErrorMessageUTF16( | 65 *error = extensions::ErrorUtils::FormatErrorMessageUTF16( |
66 manifest_errors::kInvalidStartupOverrideURL, *i); | 66 manifest_errors::kInvalidStartupOverrideURL, *i); |
67 } else { | 67 } else { |
68 urls.push_back(GURL()); | 68 urls.push_back(GURL()); |
69 urls.back().Swap(manifest_url.get()); | 69 urls.back().Swap(manifest_url.get()); |
70 } | 70 } |
71 } | 71 } |
72 return urls; | 72 return urls; |
73 } | 73 } |
74 | 74 |
75 scoped_ptr<ChromeSettingsOverrides::Search_provider> ParseSearchEngine( | 75 std::unique_ptr<ChromeSettingsOverrides::Search_provider> ParseSearchEngine( |
76 ChromeSettingsOverrides* overrides, | 76 ChromeSettingsOverrides* overrides, |
77 base::string16* error) { | 77 base::string16* error) { |
78 if (!overrides->search_provider) | 78 if (!overrides->search_provider) |
79 return scoped_ptr<ChromeSettingsOverrides::Search_provider>(); | 79 return std::unique_ptr<ChromeSettingsOverrides::Search_provider>(); |
80 if (!CreateManifestURL(overrides->search_provider->search_url)) { | 80 if (!CreateManifestURL(overrides->search_provider->search_url)) { |
81 *error = extensions::ErrorUtils::FormatErrorMessageUTF16( | 81 *error = extensions::ErrorUtils::FormatErrorMessageUTF16( |
82 manifest_errors::kInvalidSearchEngineURL, | 82 manifest_errors::kInvalidSearchEngineURL, |
83 overrides->search_provider->search_url); | 83 overrides->search_provider->search_url); |
84 return scoped_ptr<ChromeSettingsOverrides::Search_provider>(); | 84 return std::unique_ptr<ChromeSettingsOverrides::Search_provider>(); |
85 } | 85 } |
86 if (overrides->search_provider->prepopulated_id) | 86 if (overrides->search_provider->prepopulated_id) |
87 return std::move(overrides->search_provider); | 87 return std::move(overrides->search_provider); |
88 if (!overrides->search_provider->name || | 88 if (!overrides->search_provider->name || |
89 !overrides->search_provider->keyword || | 89 !overrides->search_provider->keyword || |
90 !overrides->search_provider->encoding || | 90 !overrides->search_provider->encoding || |
91 !overrides->search_provider->favicon_url) { | 91 !overrides->search_provider->favicon_url) { |
92 *error = | 92 *error = |
93 base::ASCIIToUTF16(manifest_errors::kInvalidSearchEngineMissingKeys); | 93 base::ASCIIToUTF16(manifest_errors::kInvalidSearchEngineMissingKeys); |
94 return scoped_ptr<ChromeSettingsOverrides::Search_provider>(); | 94 return std::unique_ptr<ChromeSettingsOverrides::Search_provider>(); |
95 } | 95 } |
96 if (!CreateManifestURL(*overrides->search_provider->favicon_url)) { | 96 if (!CreateManifestURL(*overrides->search_provider->favicon_url)) { |
97 *error = extensions::ErrorUtils::FormatErrorMessageUTF16( | 97 *error = extensions::ErrorUtils::FormatErrorMessageUTF16( |
98 manifest_errors::kInvalidSearchEngineURL, | 98 manifest_errors::kInvalidSearchEngineURL, |
99 *overrides->search_provider->favicon_url); | 99 *overrides->search_provider->favicon_url); |
100 return scoped_ptr<ChromeSettingsOverrides::Search_provider>(); | 100 return std::unique_ptr<ChromeSettingsOverrides::Search_provider>(); |
101 } | 101 } |
102 return std::move(overrides->search_provider); | 102 return std::move(overrides->search_provider); |
103 } | 103 } |
104 | 104 |
105 // A www. prefix is not informative and thus not worth the limited real estate | 105 // A www. prefix is not informative and thus not worth the limited real estate |
106 // in the permissions UI. | 106 // in the permissions UI. |
107 std::string RemoveWwwPrefix(const std::string& url) { | 107 std::string RemoveWwwPrefix(const std::string& url) { |
108 if (base::StartsWith(url, kWwwPrefix, base::CompareCase::INSENSITIVE_ASCII)) | 108 if (base::StartsWith(url, kWwwPrefix, base::CompareCase::INSENSITIVE_ASCII)) |
109 return url.substr(strlen(kWwwPrefix)); | 109 return url.substr(strlen(kWwwPrefix)); |
110 return url; | 110 return url; |
(...skipping 13 matching lines...) Expand all Loading... |
124 } | 124 } |
125 | 125 |
126 SettingsOverridesHandler::SettingsOverridesHandler() {} | 126 SettingsOverridesHandler::SettingsOverridesHandler() {} |
127 | 127 |
128 SettingsOverridesHandler::~SettingsOverridesHandler() {} | 128 SettingsOverridesHandler::~SettingsOverridesHandler() {} |
129 | 129 |
130 bool SettingsOverridesHandler::Parse(Extension* extension, | 130 bool SettingsOverridesHandler::Parse(Extension* extension, |
131 base::string16* error) { | 131 base::string16* error) { |
132 const base::Value* dict = NULL; | 132 const base::Value* dict = NULL; |
133 CHECK(extension->manifest()->Get(manifest_keys::kSettingsOverride, &dict)); | 133 CHECK(extension->manifest()->Get(manifest_keys::kSettingsOverride, &dict)); |
134 scoped_ptr<ChromeSettingsOverrides> settings( | 134 std::unique_ptr<ChromeSettingsOverrides> settings( |
135 ChromeSettingsOverrides::FromValue(*dict, error)); | 135 ChromeSettingsOverrides::FromValue(*dict, error)); |
136 if (!settings) | 136 if (!settings) |
137 return false; | 137 return false; |
138 | 138 |
139 scoped_ptr<SettingsOverrides> info(new SettingsOverrides); | 139 std::unique_ptr<SettingsOverrides> info(new SettingsOverrides); |
140 info->homepage = ParseHomepage(*settings, error); | 140 info->homepage = ParseHomepage(*settings, error); |
141 info->search_engine = ParseSearchEngine(settings.get(), error); | 141 info->search_engine = ParseSearchEngine(settings.get(), error); |
142 info->startup_pages = ParseStartupPage(*settings, error); | 142 info->startup_pages = ParseStartupPage(*settings, error); |
143 if (!info->homepage && !info->search_engine && info->startup_pages.empty()) { | 143 if (!info->homepage && !info->search_engine && info->startup_pages.empty()) { |
144 *error = ErrorUtils::FormatErrorMessageUTF16( | 144 *error = ErrorUtils::FormatErrorMessageUTF16( |
145 manifest_errors::kInvalidEmptyDictionary, | 145 manifest_errors::kInvalidEmptyDictionary, |
146 manifest_keys::kSettingsOverride); | 146 manifest_keys::kSettingsOverride); |
147 return false; | 147 return false; |
148 } | 148 } |
149 | 149 |
(...skipping 28 matching lines...) Expand all Loading... |
178 extension->SetManifestData(manifest_keys::kSettingsOverride, | 178 extension->SetManifestData(manifest_keys::kSettingsOverride, |
179 info.release()); | 179 info.release()); |
180 return true; | 180 return true; |
181 } | 181 } |
182 | 182 |
183 const std::vector<std::string> SettingsOverridesHandler::Keys() const { | 183 const std::vector<std::string> SettingsOverridesHandler::Keys() const { |
184 return SingleKey(manifest_keys::kSettingsOverride); | 184 return SingleKey(manifest_keys::kSettingsOverride); |
185 } | 185 } |
186 | 186 |
187 } // namespace extensions | 187 } // namespace extensions |
OLD | NEW |