Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(176)

Side by Side Diff: chrome/common/extensions/manifest_url_handler.cc

Issue 12084034: Change manifest handler interface to always (implicitly) pass the entire manifest to handlers. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: tts, TODO Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_url_handler.h" 5 #include "chrome/common/extensions/manifest_url_handler.h"
6 6
7 #include "base/lazy_instance.h" 7 #include "base/lazy_instance.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/string_util.h" 9 #include "base/string_util.h"
10 #include "base/stringprintf.h" 10 #include "base/stringprintf.h"
11 #include "base/utf_string_conversions.h" 11 #include "base/utf_string_conversions.h"
12 #include "base/values.h" 12 #include "base/values.h"
13 #include "chrome/common/chrome_constants.h" 13 #include "chrome/common/chrome_constants.h"
14 #include "chrome/common/extensions/extension_manifest_constants.h" 14 #include "chrome/common/extensions/extension_manifest_constants.h"
15 #include "chrome/common/extensions/manifest.h"
15 #include "chrome/common/url_constants.h" 16 #include "chrome/common/url_constants.h"
16 #include "extensions/common/error_utils.h" 17 #include "extensions/common/error_utils.h"
17 18
18 namespace keys = extension_manifest_keys; 19 namespace keys = extension_manifest_keys;
19 namespace errors = extension_manifest_errors; 20 namespace errors = extension_manifest_errors;
20 21
21 namespace extensions { 22 namespace extensions {
22 23
23 namespace { 24 namespace {
24 25
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 url_overrides->chrome_url_overrides_ : 84 url_overrides->chrome_url_overrides_ :
84 g_empty_url_overrides.Get(); 85 g_empty_url_overrides.Get();
85 } 86 }
86 87
87 DevToolsPageHandler::DevToolsPageHandler() { 88 DevToolsPageHandler::DevToolsPageHandler() {
88 } 89 }
89 90
90 DevToolsPageHandler::~DevToolsPageHandler() { 91 DevToolsPageHandler::~DevToolsPageHandler() {
91 } 92 }
92 93
93 bool DevToolsPageHandler::Parse(const base::Value* value, 94 bool DevToolsPageHandler::Parse(Extension* extension, string16* error) {
94 Extension* extension,
95 string16* error) {
96 scoped_ptr<ManifestURL> manifest_url(new ManifestURL); 95 scoped_ptr<ManifestURL> manifest_url(new ManifestURL);
97 std::string devtools_str; 96 std::string devtools_str;
98 if (!value->GetAsString(&devtools_str)) { 97 if (!extension->manifest()->GetString(keys::kDevToolsPage, &devtools_str)) {
99 *error = ASCIIToUTF16(errors::kInvalidDevToolsPage); 98 *error = ASCIIToUTF16(errors::kInvalidDevToolsPage);
100 return false; 99 return false;
101 } 100 }
102 manifest_url->url_ = extension->GetResourceURL(devtools_str); 101 manifest_url->url_ = extension->GetResourceURL(devtools_str);
103 extension->SetManifestData(keys::kDevToolsPage, manifest_url.release()); 102 extension->SetManifestData(keys::kDevToolsPage, manifest_url.release());
104 return true; 103 return true;
105 } 104 }
106 105
107 HomepageURLHandler::HomepageURLHandler() { 106 HomepageURLHandler::HomepageURLHandler() {
108 } 107 }
109 108
110 HomepageURLHandler::~HomepageURLHandler() { 109 HomepageURLHandler::~HomepageURLHandler() {
111 } 110 }
112 111
113 bool HomepageURLHandler::Parse(const base::Value* value, 112 bool HomepageURLHandler::Parse(Extension* extension, string16* error) {
114 Extension* extension,
115 string16* error) {
116 scoped_ptr<ManifestURL> manifest_url(new ManifestURL); 113 scoped_ptr<ManifestURL> manifest_url(new ManifestURL);
117 std::string homepage_url_str; 114 std::string homepage_url_str;
118 if (!value->GetAsString(&homepage_url_str)) { 115 if (!extension->manifest()->GetString(keys::kHomepageURL,
116 &homepage_url_str)) {
119 *error = ErrorUtils::FormatErrorMessageUTF16( 117 *error = ErrorUtils::FormatErrorMessageUTF16(
120 errors::kInvalidHomepageURL, ""); 118 errors::kInvalidHomepageURL, "");
121 return false; 119 return false;
122 } 120 }
123 manifest_url->url_ = GURL(homepage_url_str); 121 manifest_url->url_ = GURL(homepage_url_str);
124 if (!manifest_url->url_.is_valid() || 122 if (!manifest_url->url_.is_valid() ||
125 (!manifest_url->url_.SchemeIs("http") && 123 (!manifest_url->url_.SchemeIs("http") &&
126 !manifest_url->url_.SchemeIs("https"))) { 124 !manifest_url->url_.SchemeIs("https"))) {
127 *error = ErrorUtils::FormatErrorMessageUTF16( 125 *error = ErrorUtils::FormatErrorMessageUTF16(
128 errors::kInvalidHomepageURL, homepage_url_str); 126 errors::kInvalidHomepageURL, homepage_url_str);
129 return false; 127 return false;
130 } 128 }
131 extension->SetManifestData(keys::kHomepageURL, manifest_url.release()); 129 extension->SetManifestData(keys::kHomepageURL, manifest_url.release());
132 return true; 130 return true;
133 } 131 }
134 132
135 UpdateURLHandler::UpdateURLHandler() { 133 UpdateURLHandler::UpdateURLHandler() {
136 } 134 }
137 135
138 UpdateURLHandler::~UpdateURLHandler() { 136 UpdateURLHandler::~UpdateURLHandler() {
139 } 137 }
140 138
141 bool UpdateURLHandler::Parse(const base::Value* value, 139 bool UpdateURLHandler::Parse(Extension* extension, string16* error) {
142 Extension* extension,
143 string16* error) {
144 scoped_ptr<ManifestURL> manifest_url(new ManifestURL); 140 scoped_ptr<ManifestURL> manifest_url(new ManifestURL);
145 std::string tmp_update_url; 141 std::string tmp_update_url;
146 142
147 if (!value->GetAsString(&tmp_update_url)) { 143 if (!extension->manifest()->GetString(keys::kUpdateURL, &tmp_update_url)) {
148 *error = ErrorUtils::FormatErrorMessageUTF16( 144 *error = ErrorUtils::FormatErrorMessageUTF16(
149 errors::kInvalidUpdateURL, ""); 145 errors::kInvalidUpdateURL, "");
150 return false; 146 return false;
151 } 147 }
152 148
153 manifest_url->url_ = GURL(tmp_update_url); 149 manifest_url->url_ = GURL(tmp_update_url);
154 if (!manifest_url->url_.is_valid() || 150 if (!manifest_url->url_.is_valid() ||
155 manifest_url->url_.has_ref()) { 151 manifest_url->url_.has_ref()) {
156 *error = ErrorUtils::FormatErrorMessageUTF16( 152 *error = ErrorUtils::FormatErrorMessageUTF16(
157 errors::kInvalidUpdateURL, tmp_update_url); 153 errors::kInvalidUpdateURL, tmp_update_url);
158 return false; 154 return false;
159 } 155 }
160 156
161 extension->SetManifestData(keys::kUpdateURL, manifest_url.release()); 157 extension->SetManifestData(keys::kUpdateURL, manifest_url.release());
162 return true; 158 return true;
163 } 159 }
164 160
165 OptionsPageHandler::OptionsPageHandler() { 161 OptionsPageHandler::OptionsPageHandler() {
166 } 162 }
167 163
168 OptionsPageHandler::~OptionsPageHandler() { 164 OptionsPageHandler::~OptionsPageHandler() {
169 } 165 }
170 166
171 bool OptionsPageHandler::Parse(const base::Value* value, 167 bool OptionsPageHandler::Parse(Extension* extension, string16* error) {
172 Extension* extension,
173 string16* error) {
174 scoped_ptr<ManifestURL> manifest_url(new ManifestURL); 168 scoped_ptr<ManifestURL> manifest_url(new ManifestURL);
175 std::string options_str; 169 std::string options_str;
176 if (!value->GetAsString(&options_str)) { 170 if (!extension->manifest()->GetString(keys::kOptionsPage, &options_str)) {
177 *error = ASCIIToUTF16(errors::kInvalidOptionsPage); 171 *error = ASCIIToUTF16(errors::kInvalidOptionsPage);
178 return false; 172 return false;
179 } 173 }
180 174
181 if (extension->is_hosted_app()) { 175 if (extension->is_hosted_app()) {
182 // hosted apps require an absolute URL. 176 // hosted apps require an absolute URL.
183 GURL options_url(options_str); 177 GURL options_url(options_str);
184 if (!options_url.is_valid() || 178 if (!options_url.is_valid() ||
185 !(options_url.SchemeIs("http") || options_url.SchemeIs("https"))) { 179 !(options_url.SchemeIs("http") || options_url.SchemeIs("https"))) {
186 *error = ASCIIToUTF16(errors::kInvalidOptionsPageInHostedApp); 180 *error = ASCIIToUTF16(errors::kInvalidOptionsPageInHostedApp);
(...skipping 16 matching lines...) Expand all
203 extension->SetManifestData(keys::kOptionsPage, manifest_url.release()); 197 extension->SetManifestData(keys::kOptionsPage, manifest_url.release());
204 return true; 198 return true;
205 } 199 }
206 200
207 URLOverridesHandler::URLOverridesHandler() { 201 URLOverridesHandler::URLOverridesHandler() {
208 } 202 }
209 203
210 URLOverridesHandler::~URLOverridesHandler() { 204 URLOverridesHandler::~URLOverridesHandler() {
211 } 205 }
212 206
213 bool URLOverridesHandler::Parse(const base::Value* value, 207 bool URLOverridesHandler::Parse(Extension* extension, string16* error) {
214 Extension* extension,
215 string16* error) {
216 const DictionaryValue* overrides = NULL; 208 const DictionaryValue* overrides = NULL;
217 if (!value->GetAsDictionary(&overrides)) { 209 if (!extension->manifest()->GetDictionary(keys::kChromeURLOverrides,
210 &overrides)) {
218 *error = ASCIIToUTF16(errors::kInvalidChromeURLOverrides); 211 *error = ASCIIToUTF16(errors::kInvalidChromeURLOverrides);
219 return false; 212 return false;
220 } 213 }
221 scoped_ptr<URLOverrides> url_overrides(new URLOverrides); 214 scoped_ptr<URLOverrides> url_overrides(new URLOverrides);
222 // Validate that the overrides are all strings 215 // Validate that the overrides are all strings
223 for (DictionaryValue::key_iterator iter = overrides->begin_keys(); 216 for (DictionaryValue::key_iterator iter = overrides->begin_keys();
224 iter != overrides->end_keys(); ++iter) { 217 iter != overrides->end_keys(); ++iter) {
225 std::string page = *iter; 218 std::string page = *iter;
226 std::string val; 219 std::string val;
227 // Restrict override pages to a list of supported URLs. 220 // Restrict override pages to a list of supported URLs.
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 if (overrides->size() > 1) { 257 if (overrides->size() > 1) {
265 *error = ASCIIToUTF16(errors::kMultipleOverrides); 258 *error = ASCIIToUTF16(errors::kMultipleOverrides);
266 return false; 259 return false;
267 } 260 }
268 extension->SetManifestData(keys::kChromeURLOverrides, 261 extension->SetManifestData(keys::kChromeURLOverrides,
269 url_overrides.release()); 262 url_overrides.release());
270 return true; 263 return true;
271 } 264 }
272 265
273 } // namespace extensions 266 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/common/extensions/manifest_url_handler.h ('k') | chrome/common/extensions/web_accessible_resources_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698