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

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

Issue 11968032: Move 'theme' parsing out of Extension class (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: TOT (new ManifestHandler interface) + Android gypi changes 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
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/extension.h" 5 #include "chrome/common/extensions/extension.h"
6 6
7 #include <ostream> 7 #include <ostream>
8 8
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 11 matching lines...) Expand all
22 #include "base/stringprintf.h" 22 #include "base/stringprintf.h"
23 #include "base/utf_string_conversions.h" 23 #include "base/utf_string_conversions.h"
24 #include "base/values.h" 24 #include "base/values.h"
25 #include "base/version.h" 25 #include "base/version.h"
26 #include "chrome/common/chrome_constants.h" 26 #include "chrome/common/chrome_constants.h"
27 #include "chrome/common/chrome_switches.h" 27 #include "chrome/common/chrome_switches.h"
28 #include "chrome/common/chrome_version_info.h" 28 #include "chrome/common/chrome_version_info.h"
29 // TODO(rdevlin.cronin): Remove this once PageAction, BrowserAction, and 29 // TODO(rdevlin.cronin): Remove this once PageAction, BrowserAction, and
30 // SystemIndicator have been moved out of Extension. 30 // SystemIndicator have been moved out of Extension.
31 #include "chrome/common/extensions/api/extension_action/action_info.h" 31 #include "chrome/common/extensions/api/extension_action/action_info.h"
32 #include "chrome/common/extensions/api/themes/theme_handler.h"
32 #include "chrome/common/extensions/csp_validator.h" 33 #include "chrome/common/extensions/csp_validator.h"
33 #include "chrome/common/extensions/extension_manifest_constants.h" 34 #include "chrome/common/extensions/extension_manifest_constants.h"
34 #include "chrome/common/extensions/extension_resource.h" 35 #include "chrome/common/extensions/extension_resource.h"
35 #include "chrome/common/extensions/feature_switch.h" 36 #include "chrome/common/extensions/feature_switch.h"
36 #include "chrome/common/extensions/features/base_feature_provider.h" 37 #include "chrome/common/extensions/features/base_feature_provider.h"
37 #include "chrome/common/extensions/features/feature.h" 38 #include "chrome/common/extensions/features/feature.h"
38 #include "chrome/common/extensions/manifest.h" 39 #include "chrome/common/extensions/manifest.h"
39 #include "chrome/common/extensions/manifest_handler.h" 40 #include "chrome/common/extensions/manifest_handler.h"
40 #include "chrome/common/extensions/manifest_handler_helpers.h" 41 #include "chrome/common/extensions/manifest_handler_helpers.h"
41 #include "chrome/common/extensions/manifest_url_handler.h" 42 #include "chrome/common/extensions/manifest_url_handler.h"
(...skipping 848 matching lines...) Expand 10 before | Expand all | Expand 10 after
890 // TODO(viettrungluu): These |FilePath::FromWStringHack(UTF8ToWide())| 891 // TODO(viettrungluu): These |FilePath::FromWStringHack(UTF8ToWide())|
891 // indicate that we're doing something wrong. 892 // indicate that we're doing something wrong.
892 893
893 // Extension icons. 894 // Extension icons.
894 for (ExtensionIconSet::IconMap::const_iterator iter = icons().map().begin(); 895 for (ExtensionIconSet::IconMap::const_iterator iter = icons().map().begin();
895 iter != icons().map().end(); ++iter) { 896 iter != icons().map().end(); ++iter) {
896 image_paths.insert(FilePath::FromWStringHack(UTF8ToWide(iter->second))); 897 image_paths.insert(FilePath::FromWStringHack(UTF8ToWide(iter->second)));
897 } 898 }
898 899
899 // Theme images. 900 // Theme images.
900 DictionaryValue* theme_images = GetThemeImages(); 901 DictionaryValue* theme_images = ThemeInfo::GetThemeImages(this);
901 if (theme_images) { 902 if (theme_images) {
902 for (DictionaryValue::Iterator it(*theme_images); !it.IsAtEnd(); 903 for (DictionaryValue::Iterator it(*theme_images); !it.IsAtEnd();
903 it.Advance()) { 904 it.Advance()) {
904 std::string val; 905 std::string val;
905 if (it.value().GetAsString(&val)) 906 if (it.value().GetAsString(&val))
906 image_paths.insert(FilePath::FromWStringHack(UTF8ToWide(val))); 907 image_paths.insert(FilePath::FromWStringHack(UTF8ToWide(val)));
907 } 908 }
908 } 909 }
909 910
910 if (page_action_info() && !page_action_info()->default_icon.empty()) { 911 if (page_action_info() && !page_action_info()->default_icon.empty()) {
(...skipping 645 matching lines...) Expand 10 before | Expand all | Expand 10 after
1556 1557
1557 if (!LoadAppIsolation(api_permissions, error)) 1558 if (!LoadAppIsolation(api_permissions, error))
1558 return false; 1559 return false;
1559 1560
1560 if (!LoadSharedFeatures(api_permissions, error)) 1561 if (!LoadSharedFeatures(api_permissions, error))
1561 return false; 1562 return false;
1562 1563
1563 if (!LoadExtensionFeatures(&api_permissions, error)) 1564 if (!LoadExtensionFeatures(&api_permissions, error))
1564 return false; 1565 return false;
1565 1566
1566 if (!LoadThemeFeatures(error))
1567 return false;
1568
1569 if (!LoadManagedModeFeatures(error)) 1567 if (!LoadManagedModeFeatures(error))
1570 return false; 1568 return false;
1571 1569
1572 if (HasMultipleUISurfaces()) { 1570 if (HasMultipleUISurfaces()) {
1573 *error = ASCIIToUTF16(errors::kOneUISurfaceOnly); 1571 *error = ASCIIToUTF16(errors::kOneUISurfaceOnly);
1574 return false; 1572 return false;
1575 } 1573 }
1576 1574
1577 finished_parsing_manifest_ = true; 1575 finished_parsing_manifest_ = true;
1578 1576
(...skipping 958 matching lines...) Expand 10 before | Expand all | Expand 10 after
2537 // TODO(abarth): Should we continue to let extensions override the 2535 // TODO(abarth): Should we continue to let extensions override the
2538 // default Content-Security-Policy? 2536 // default Content-Security-Policy?
2539 content_security_policy_ = is_platform_app() ? 2537 content_security_policy_ = is_platform_app() ?
2540 kDefaultPlatformAppContentSecurityPolicy : 2538 kDefaultPlatformAppContentSecurityPolicy :
2541 kDefaultContentSecurityPolicy; 2539 kDefaultContentSecurityPolicy;
2542 CHECK(ContentSecurityPolicyIsSecure(content_security_policy_, GetType())); 2540 CHECK(ContentSecurityPolicyIsSecure(content_security_policy_, GetType()));
2543 } 2541 }
2544 return true; 2542 return true;
2545 } 2543 }
2546 2544
2547 bool Extension::LoadThemeFeatures(string16* error) {
2548 if (!manifest_->HasKey(keys::kTheme))
2549 return true;
2550 DictionaryValue* theme_value = NULL;
2551 if (!manifest_->GetDictionary(keys::kTheme, &theme_value)) {
2552 *error = ASCIIToUTF16(errors::kInvalidTheme);
2553 return false;
2554 }
2555 if (!LoadThemeImages(theme_value, error))
2556 return false;
2557 if (!LoadThemeColors(theme_value, error))
2558 return false;
2559 if (!LoadThemeTints(theme_value, error))
2560 return false;
2561 if (!LoadThemeDisplayProperties(theme_value, error))
2562 return false;
2563
2564 return true;
2565 }
2566
2567 bool Extension::LoadThemeImages(const DictionaryValue* theme_value,
2568 string16* error) {
2569 const DictionaryValue* images_value = NULL;
2570 if (theme_value->GetDictionary(keys::kThemeImages, &images_value)) {
2571 // Validate that the images are all strings
2572 for (DictionaryValue::Iterator iter(*images_value); !iter.IsAtEnd();
2573 iter.Advance()) {
2574 std::string val;
2575 if (!iter.value().GetAsString(&val)) {
2576 *error = ASCIIToUTF16(errors::kInvalidThemeImages);
2577 return false;
2578 }
2579 }
2580 theme_images_.reset(images_value->DeepCopy());
2581 }
2582 return true;
2583 }
2584
2585 bool Extension::LoadThemeColors(const DictionaryValue* theme_value,
2586 string16* error) {
2587 const DictionaryValue* colors_value = NULL;
2588 if (theme_value->GetDictionary(keys::kThemeColors, &colors_value)) {
2589 // Validate that the colors are RGB or RGBA lists
2590 for (DictionaryValue::Iterator iter(*colors_value); !iter.IsAtEnd();
2591 iter.Advance()) {
2592 const ListValue* color_list = NULL;
2593 double alpha = 0.0;
2594 int color = 0;
2595 // The color must be a list
2596 if (!iter.value().GetAsList(&color_list) ||
2597 // And either 3 items (RGB) or 4 (RGBA)
2598 ((color_list->GetSize() != 3) &&
2599 ((color_list->GetSize() != 4) ||
2600 // For RGBA, the fourth item must be a real or int alpha value.
2601 // Note that GetDouble() can get an integer value.
2602 !color_list->GetDouble(3, &alpha))) ||
2603 // For both RGB and RGBA, the first three items must be ints (R,G,B)
2604 !color_list->GetInteger(0, &color) ||
2605 !color_list->GetInteger(1, &color) ||
2606 !color_list->GetInteger(2, &color)) {
2607 *error = ASCIIToUTF16(errors::kInvalidThemeColors);
2608 return false;
2609 }
2610 }
2611 theme_colors_.reset(colors_value->DeepCopy());
2612 }
2613 return true;
2614 }
2615
2616 bool Extension::LoadThemeTints(const DictionaryValue* theme_value,
2617 string16* error) {
2618 const DictionaryValue* tints_value = NULL;
2619 if (!theme_value->GetDictionary(keys::kThemeTints, &tints_value))
2620 return true;
2621
2622 // Validate that the tints are all reals.
2623 for (DictionaryValue::Iterator iter(*tints_value); !iter.IsAtEnd();
2624 iter.Advance()) {
2625 const ListValue* tint_list = NULL;
2626 double v = 0.0;
2627 if (!iter.value().GetAsList(&tint_list) ||
2628 tint_list->GetSize() != 3 ||
2629 !tint_list->GetDouble(0, &v) ||
2630 !tint_list->GetDouble(1, &v) ||
2631 !tint_list->GetDouble(2, &v)) {
2632 *error = ASCIIToUTF16(errors::kInvalidThemeTints);
2633 return false;
2634 }
2635 }
2636 theme_tints_.reset(tints_value->DeepCopy());
2637 return true;
2638 }
2639
2640 bool Extension::LoadThemeDisplayProperties(const DictionaryValue* theme_value,
2641 string16* error) {
2642 const DictionaryValue* display_properties_value = NULL;
2643 if (theme_value->GetDictionary(keys::kThemeDisplayProperties,
2644 &display_properties_value)) {
2645 theme_display_properties_.reset(
2646 display_properties_value->DeepCopy());
2647 }
2648 return true;
2649 }
2650 SkBitmap* Extension::GetCachedImageImpl(const ExtensionResource& source, 2545 SkBitmap* Extension::GetCachedImageImpl(const ExtensionResource& source,
2651 const gfx::Size& max_size) const { 2546 const gfx::Size& max_size) const {
2652 const FilePath& path = source.relative_path(); 2547 const FilePath& path = source.relative_path();
2653 2548
2654 // Look for exact size match. 2549 // Look for exact size match.
2655 ImageCache::iterator i = image_cache_.find( 2550 ImageCache::iterator i = image_cache_.find(
2656 ImageCacheKey(path, SizeToString(max_size))); 2551 ImageCacheKey(path, SizeToString(max_size)));
2657 if (i != image_cache_.end()) 2552 if (i != image_cache_.end())
2658 return &(i->second); 2553 return &(i->second);
2659 2554
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after
3128 3023
3129 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo( 3024 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo(
3130 const Extension* extension, 3025 const Extension* extension,
3131 const PermissionSet* permissions, 3026 const PermissionSet* permissions,
3132 Reason reason) 3027 Reason reason)
3133 : reason(reason), 3028 : reason(reason),
3134 extension(extension), 3029 extension(extension),
3135 permissions(permissions) {} 3030 permissions(permissions) {}
3136 3031
3137 } // namespace extensions 3032 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698