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

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

Issue 332021: Move page actions over to ExtensionAction2 (Closed)
Patch Set: Review feedback Created 11 years, 1 month 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
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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/extension.h" 5 #include "chrome/common/extensions/extension.h"
6 6
7 #include "app/resource_bundle.h" 7 #include "app/resource_bundle.h"
8 #include "base/basictypes.h" 8 #include "base/basictypes.h"
9 #include "base/file_path.h" 9 #include "base/file_path.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 GURL url = GetResourceURL(WideToUTF8(relative)); 290 GURL url = GetResourceURL(WideToUTF8(relative));
291 ExtensionResource resource = GetResource(WideToUTF8(relative)); 291 ExtensionResource resource = GetResource(WideToUTF8(relative));
292 result->css_scripts().push_back(UserScript::File( 292 result->css_scripts().push_back(UserScript::File(
293 resource.extension_root(), resource.relative_path(), url)); 293 resource.extension_root(), resource.relative_path(), url));
294 } 294 }
295 } 295 }
296 296
297 return true; 297 return true;
298 } 298 }
299 299
300 // Helper method that loads a PageAction or BrowserAction object from a
301 // dictionary in the page_actions list or browser_action key of the manifest.
302 ExtensionAction* Extension::LoadExtensionActionHelper(
303 const DictionaryValue* page_action, std::string* error,
304 ExtensionAction::ExtensionActionType action_type) {
305 scoped_ptr<ExtensionAction> result(new ExtensionAction());
306 result->set_extension_id(id());
307 result->set_type(action_type);
308
309 // TODO(EXTENSIONS_DEPRECATED): icons list is obsolete.
310 ListValue* icons = NULL;
311 if (page_action->HasKey(keys::kPageActionIcons) &&
312 page_action->GetList(keys::kPageActionIcons, &icons)) {
313 for (ListValue::const_iterator iter = icons->begin();
314 iter != icons->end(); ++iter) {
315 std::string path;
316 if (!(*iter)->GetAsString(&path) || path.empty()) {
317 *error = errors::kInvalidPageActionIconPath;
318 return NULL;
319 }
320
321 result->AddIconPath(path);
322 }
323 }
324
325 // TODO(EXTENSIONS_DEPRECATED): Read the page action |id| (optional).
326 std::string id;
327 if (action_type == ExtensionAction::PAGE_ACTION)
328 page_action->GetString(keys::kPageActionId, &id);
329 result->set_id(id);
330
331 std::string default_icon;
332 // Read the page action |default_icon| (optional).
333 if (page_action->HasKey(keys::kPageActionDefaultIcon)) {
334 if (!page_action->GetString(keys::kPageActionDefaultIcon, &default_icon) ||
335 default_icon.empty()) {
336 *error = errors::kInvalidPageActionIconPath;
337 return NULL;
338 }
339 // TODO(EXTENSIONS_DEPRECATED): one icon.
340 result->AddIconPath(default_icon);
341 }
342
343 // Read the page action |default_title|.
344 std::string title;
345 if (!page_action->GetString(keys::kName, &title) &&
346 !page_action->GetString(keys::kPageActionDefaultTitle, &title)) {
347 *error = errors::kInvalidPageActionDefaultTitle;
348 return NULL;
349 }
350 result->set_title(title);
351
352 // Read the action's |popup| (optional).
353 DictionaryValue* popup = NULL;
354 std::string url_str;
355 if (page_action->HasKey(keys::kPageActionPopup) &&
356 !page_action->GetDictionary(keys::kPageActionPopup, &popup) &&
357 !page_action->GetString(keys::kPageActionPopup, &url_str)) {
358 *error = errors::kInvalidPageActionPopup;
359 return NULL;
360 }
361 if (popup) {
362 // TODO(EXTENSIONS_DEPRECATED): popup is a string only
363 if (!popup->GetString(keys::kPageActionPopupPath, &url_str)) {
364 *error = ExtensionErrorUtils::FormatErrorMessage(
365 errors::kInvalidPageActionPopupPath, "<missing>");
366 return NULL;
367 }
368 GURL url = GetResourceURL(url_str);
369 if (!url.is_valid()) {
370 *error = ExtensionErrorUtils::FormatErrorMessage(
371 errors::kInvalidPageActionPopupPath, url_str);
372 return NULL;
373 }
374 result->set_popup_url(url);
375 } else if (!url_str.empty()) {
376 GURL url = GetResourceURL(url_str);
377 if (!url.is_valid()) {
378 *error = ExtensionErrorUtils::FormatErrorMessage(
379 errors::kInvalidPageActionPopupPath, url_str);
380 return NULL;
381 }
382 result->set_popup_url(url);
383 }
384
385 return result.release();
386 }
387
388 ExtensionAction2* Extension::LoadExtensionAction2Helper( 300 ExtensionAction2* Extension::LoadExtensionAction2Helper(
389 const DictionaryValue* extension_action, std::string* error) { 301 const DictionaryValue* extension_action, std::string* error) {
390 scoped_ptr<ExtensionAction2> result(new ExtensionAction2()); 302 scoped_ptr<ExtensionAction2> result(new ExtensionAction2());
391 result->set_extension_id(id()); 303 result->set_extension_id(id());
392 304
305 // Page actions are hidden by default, and browser actions ignore
306 // visibility.
307 result->SetIsVisible(ExtensionAction2::kDefaultTabId, false);
308
393 // TODO(EXTENSIONS_DEPRECATED): icons list is obsolete. 309 // TODO(EXTENSIONS_DEPRECATED): icons list is obsolete.
394 ListValue* icons = NULL; 310 ListValue* icons = NULL;
395 if (extension_action->HasKey(keys::kPageActionIcons) && 311 if (extension_action->HasKey(keys::kPageActionIcons) &&
396 extension_action->GetList(keys::kPageActionIcons, &icons)) { 312 extension_action->GetList(keys::kPageActionIcons, &icons)) {
397 for (ListValue::const_iterator iter = icons->begin(); 313 for (ListValue::const_iterator iter = icons->begin();
398 iter != icons->end(); ++iter) { 314 iter != icons->end(); ++iter) {
399 std::string path; 315 std::string path;
400 if (!(*iter)->GetAsString(&path) || path.empty()) { 316 if (!(*iter)->GetAsString(&path) || path.empty()) {
401 *error = errors::kInvalidPageActionIconPath; 317 *error = errors::kInvalidPageActionIconPath;
402 return NULL; 318 return NULL;
403 } 319 }
404 320
405 result->icon_paths()->push_back(path); 321 result->icon_paths()->push_back(path);
406 result->SetDefaultIcon(path);
407 } 322 }
408 } 323 }
409 324
410 // TODO(EXTENSIONS_DEPRECATED): Read the page action |id| (optional). 325 // TODO(EXTENSIONS_DEPRECATED): Read the page action |id| (optional).
411 std::string id; 326 std::string id;
412 if (extension_action->HasKey(keys::kPageActionId)) { 327 if (extension_action->HasKey(keys::kPageActionId)) {
413 if (!extension_action->GetString(keys::kPageActionId, &id)) { 328 if (!extension_action->GetString(keys::kPageActionId, &id)) {
414 *error = errors::kInvalidPageActionId; 329 *error = errors::kInvalidPageActionId;
415 return NULL; 330 return NULL;
416 } 331 }
417 result->set_id(id); 332 result->set_id(id);
418 } 333 }
419 334
420 std::string default_icon; 335 std::string default_icon;
421 // Read the page action |default_icon| (optional). 336 // Read the page action |default_icon| (optional).
422 if (extension_action->HasKey(keys::kPageActionDefaultIcon)) { 337 if (extension_action->HasKey(keys::kPageActionDefaultIcon)) {
423 if (!extension_action->GetString(keys::kPageActionDefaultIcon, 338 if (!extension_action->GetString(keys::kPageActionDefaultIcon,
424 &default_icon) || 339 &default_icon) ||
425 default_icon.empty()) { 340 default_icon.empty()) {
426 *error = errors::kInvalidPageActionIconPath; 341 *error = errors::kInvalidPageActionIconPath;
427 return NULL; 342 return NULL;
428 } 343 }
429 result->SetDefaultIcon(default_icon); 344 result->set_default_icon_path(default_icon);
430 } 345 }
431 346
432 // Read the page action |default_title|. 347 // Read the page action |default_title|.
433 std::string title; 348 std::string title;
434 if (!extension_action->GetString(keys::kName, &title) && 349 if (!extension_action->GetString(keys::kName, &title) &&
435 !extension_action->GetString(keys::kPageActionDefaultTitle, &title)) { 350 !extension_action->GetString(keys::kPageActionDefaultTitle, &title)) {
436 *error = errors::kInvalidPageActionDefaultTitle; 351 *error = errors::kInvalidPageActionDefaultTitle;
437 return NULL; 352 return NULL;
438 } 353 }
439 result->SetTitle(ExtensionAction2::kDefaultTabId, title); 354 result->SetTitle(ExtensionAction2::kDefaultTabId, title);
(...skipping 584 matching lines...) Expand 10 before | Expand all | Expand 10 after
1024 return false; 939 return false;
1025 } 940 }
1026 941
1027 DictionaryValue* page_action_value; 942 DictionaryValue* page_action_value;
1028 if (!list_value->GetDictionary(0, &page_action_value)) { 943 if (!list_value->GetDictionary(0, &page_action_value)) {
1029 *error = errors::kInvalidPageAction; 944 *error = errors::kInvalidPageAction;
1030 return false; 945 return false;
1031 } 946 }
1032 947
1033 page_action_.reset( 948 page_action_.reset(
1034 LoadExtensionActionHelper(page_action_value, error, 949 LoadExtensionAction2Helper(page_action_value, error));
1035 ExtensionAction::PAGE_ACTION));
1036 if (!page_action_.get()) 950 if (!page_action_.get())
1037 return false; // Failed to parse page action definition. 951 return false; // Failed to parse page action definition.
1038 } else if (source.HasKey(keys::kPageAction)) { 952 } else if (source.HasKey(keys::kPageAction)) {
1039 DictionaryValue* page_action_value; 953 DictionaryValue* page_action_value;
1040 if (!source.GetDictionary(keys::kPageAction, &page_action_value)) { 954 if (!source.GetDictionary(keys::kPageAction, &page_action_value)) {
1041 *error = errors::kInvalidPageAction; 955 *error = errors::kInvalidPageAction;
1042 return false; 956 return false;
1043 } 957 }
1044 958
1045 page_action_.reset( 959 page_action_.reset(
1046 LoadExtensionActionHelper(page_action_value, error, 960 LoadExtensionAction2Helper(page_action_value, error));
1047 ExtensionAction::PAGE_ACTION));
1048 if (!page_action_.get()) 961 if (!page_action_.get())
1049 return false; // Failed to parse page action definition. 962 return false; // Failed to parse page action definition.
1050 } 963 }
1051 964
1052 // Initialize browser action (optional). 965 // Initialize browser action (optional).
1053 if (source.HasKey(keys::kBrowserAction)) { 966 if (source.HasKey(keys::kBrowserAction)) {
1054 // Restrict extensions to one UI surface. 967 // Restrict extensions to one UI surface.
1055 if (source.HasKey(keys::kPageAction) || source.HasKey(keys::kPageActions)) { 968 if (source.HasKey(keys::kPageAction) || source.HasKey(keys::kPageActions)) {
1056 *error = errors::kOneUISurfaceOnly; 969 *error = errors::kOneUISurfaceOnly;
1057 return false; 970 return false;
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
1172 it != theme_images->end_keys(); ++it) { 1085 it != theme_images->end_keys(); ++it) {
1173 std::wstring val; 1086 std::wstring val;
1174 if (theme_images->GetString(*it, &val)) { 1087 if (theme_images->GetString(*it, &val)) {
1175 image_paths.insert(FilePath::FromWStringHack(val)); 1088 image_paths.insert(FilePath::FromWStringHack(val));
1176 } 1089 }
1177 } 1090 }
1178 } 1091 }
1179 1092
1180 // page action icons 1093 // page action icons
1181 if (page_action_.get()) { 1094 if (page_action_.get()) {
1182 const std::vector<std::string>& icon_paths = page_action_->icon_paths(); 1095 std::vector<std::string>* icon_paths = page_action_->icon_paths();
1183 for (std::vector<std::string>::const_iterator iter = icon_paths.begin(); 1096 for (std::vector<std::string>::iterator iter = icon_paths->begin();
1184 iter != icon_paths.end(); ++iter) { 1097 iter != icon_paths->end(); ++iter) {
1185 image_paths.insert(FilePath::FromWStringHack(UTF8ToWide(*iter))); 1098 image_paths.insert(FilePath::FromWStringHack(UTF8ToWide(*iter)));
1186 } 1099 }
1187 } 1100 }
1188 1101
1189 // browser action icons 1102 // browser action icons
1190 if (browser_action_.get()) { 1103 if (browser_action_.get()) {
1191 std::vector<std::string>* icon_paths = browser_action_->icon_paths(); 1104 std::vector<std::string>* icon_paths = browser_action_->icon_paths();
1192 for (std::vector<std::string>::iterator iter = icon_paths->begin(); 1105 for (std::vector<std::string>::iterator iter = icon_paths->begin();
1193 iter != icon_paths->end(); ++iter) { 1106 iter != icon_paths->end(); ++iter) {
1194 image_paths.insert(FilePath::FromWStringHack(UTF8ToWide(*iter))); 1107 image_paths.insert(FilePath::FromWStringHack(UTF8ToWide(*iter)));
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1258 UserScript::PatternList::const_iterator pattern = 1171 UserScript::PatternList::const_iterator pattern =
1259 content_script->url_patterns().begin(); 1172 content_script->url_patterns().begin();
1260 for (; pattern != content_script->url_patterns().end(); ++pattern) { 1173 for (; pattern != content_script->url_patterns().end(); ++pattern) {
1261 if (pattern->match_subdomains() && pattern->host().empty()) 1174 if (pattern->match_subdomains() && pattern->host().empty())
1262 return true; 1175 return true;
1263 } 1176 }
1264 } 1177 }
1265 1178
1266 return false; 1179 return false;
1267 } 1180 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698