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