Home | History | Annotate | Download | only in extension_action
      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
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/common/extensions/api/extension_action/action_info.h"
      6 #include "chrome/common/extensions/extension_builder.h"
      7 #include "chrome/common/extensions/extension_icon_set.h"
      8 #include "chrome/common/extensions/extension_manifest_constants.h"
      9 #include "chrome/common/extensions/manifest_tests/extension_manifest_test.h"
     10 #include "chrome/common/extensions/value_builder.h"
     11 #include "extensions/common/error_utils.h"
     12 #include "testing/gtest/include/gtest/gtest.h"
     13 
     14 namespace errors = extension_manifest_errors;
     15 
     16 namespace extensions {
     17 namespace {
     18 
     19 class BrowserActionManifestTest : public ExtensionManifestTest {
     20 };
     21 
     22 TEST_F(BrowserActionManifestTest,
     23        BrowserActionManifestIcons_NoDefaultIcons) {
     24   scoped_refptr<const Extension> extension =
     25       ExtensionBuilder()
     26       .SetManifest(DictionaryBuilder()
     27                    .Set("name", "No default properties")
     28                    .Set("version", "1.0.0")
     29                    .Set("manifest_version", 2)
     30                    .Set("browser_action", DictionaryBuilder()
     31                        .Set("default_title", "Title")))
     32       .Build();
     33 
     34   ASSERT_TRUE(extension.get());
     35   const ActionInfo* browser_action_info =
     36       ActionInfo::GetBrowserActionInfo(extension.get());
     37   ASSERT_TRUE(browser_action_info);
     38   EXPECT_TRUE(browser_action_info->default_icon.empty());
     39 }
     40 
     41 TEST_F(BrowserActionManifestTest,
     42        BrowserActionManifestIcons_StringDefaultIcon) {
     43   scoped_refptr<const Extension> extension =
     44       ExtensionBuilder()
     45       .SetManifest(DictionaryBuilder()
     46                    .Set("name", "String default icon")
     47                    .Set("version", "1.0.0")
     48                    .Set("manifest_version", 2)
     49                    .Set("browser_action", DictionaryBuilder()
     50                        .Set("default_icon", "icon.png")))
     51       .Build();
     52 
     53   ASSERT_TRUE(extension.get());
     54   const ActionInfo* browser_action_info =
     55       ActionInfo::GetBrowserActionInfo(extension.get());
     56   ASSERT_TRUE(browser_action_info);
     57   ASSERT_FALSE(browser_action_info->default_icon.empty());
     58 
     59   const ExtensionIconSet& icons = browser_action_info->default_icon;
     60 
     61   EXPECT_EQ(1u, icons.map().size());
     62   EXPECT_EQ("icon.png", icons.Get(19, ExtensionIconSet::MATCH_EXACTLY));
     63 }
     64 
     65 TEST_F(BrowserActionManifestTest,
     66        BrowserActionManifestIcons_DictDefaultIcon) {
     67   scoped_refptr<const Extension> extension =
     68       ExtensionBuilder()
     69       .SetManifest(DictionaryBuilder()
     70                    .Set("name", "Dictionary default icon")
     71                    .Set("version", "1.0.0")
     72                    .Set("manifest_version", 2)
     73                    .Set("browser_action", DictionaryBuilder()
     74                        .Set("default_icon", DictionaryBuilder()
     75                            .Set("19", "icon19.png")
     76                            .Set("24", "icon24.png")  // Should be ignored.
     77                            .Set("38", "icon38.png"))))
     78       .Build();
     79 
     80   ASSERT_TRUE(extension.get());
     81   const ActionInfo* browser_action_info =
     82       ActionInfo::GetBrowserActionInfo(extension.get());
     83   ASSERT_TRUE(browser_action_info);
     84   ASSERT_FALSE(browser_action_info->default_icon.empty());
     85 
     86   const ExtensionIconSet& icons = browser_action_info->default_icon;
     87 
     88   // 24px icon should be ignored.
     89   EXPECT_EQ(2u, icons.map().size());
     90   EXPECT_EQ("icon19.png", icons.Get(19, ExtensionIconSet::MATCH_EXACTLY));
     91   EXPECT_EQ("icon38.png", icons.Get(38, ExtensionIconSet::MATCH_EXACTLY));
     92 }
     93 
     94 TEST_F(BrowserActionManifestTest,
     95        BrowserActionManifestIcons_InvalidDefaultIcon) {
     96   scoped_ptr<base::DictionaryValue> manifest_value = DictionaryBuilder()
     97       .Set("name", "Invalid default icon").Set("version", "1.0.0")
     98       .Set("manifest_version", 2)
     99       .Set("browser_action",
    100            DictionaryBuilder().Set(
    101                "default_icon",
    102                DictionaryBuilder().Set("19", std::string())  // Invalid value.
    103                    .Set("24", "icon24.png").Set("38", "icon38.png"))).Build();
    104 
    105   string16 error = ErrorUtils::FormatErrorMessageUTF16(
    106       errors::kInvalidIconPath, "19");
    107   LoadAndExpectError(Manifest(manifest_value.get(), "Invalid default icon"),
    108                      errors::kInvalidIconPath);
    109 }
    110 
    111 }  // namespace
    112 }  // namespace extensions
    113