blob: b2f223f79f822834ec3a2d5f36f5325f8ef21d61 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/common/extensions/api/extension_action/action_info.h"
#include "chrome/common/extensions/extension_icon_set.h"
#include "chrome/common/extensions/manifest_tests/extension_manifest_test.h"
#include "extensions/common/error_utils.h"
#include "extensions/common/extension_builder.h"
#include "extensions/common/manifest_constants.h"
#include "extensions/common/value_builder.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace extensions {
namespace errors = manifest_errors;
namespace {
class BrowserActionManifestTest : public ExtensionManifestTest {
};
TEST_F(BrowserActionManifestTest,
BrowserActionManifestIcons_NoDefaultIcons) {
scoped_refptr<const Extension> extension =
ExtensionBuilder()
.SetManifest(DictionaryBuilder()
.Set("name", "No default properties")
.Set("version", "1.0.0")
.Set("manifest_version", 2)
.Set("browser_action", DictionaryBuilder()
.Set("default_title", "Title")))
.Build();
ASSERT_TRUE(extension.get());
const ActionInfo* browser_action_info =
ActionInfo::GetBrowserActionInfo(extension.get());
ASSERT_TRUE(browser_action_info);
EXPECT_TRUE(browser_action_info->default_icon.empty());
}
TEST_F(BrowserActionManifestTest,
BrowserActionManifestIcons_StringDefaultIcon) {
scoped_refptr<const Extension> extension =
ExtensionBuilder()
.SetManifest(DictionaryBuilder()
.Set("name", "String default icon")
.Set("version", "1.0.0")
.Set("manifest_version", 2)
.Set("browser_action", DictionaryBuilder()
.Set("default_icon", "icon.png")))
.Build();
ASSERT_TRUE(extension.get());
const ActionInfo* browser_action_info =
ActionInfo::GetBrowserActionInfo(extension.get());
ASSERT_TRUE(browser_action_info);
ASSERT_FALSE(browser_action_info->default_icon.empty());
const ExtensionIconSet& icons = browser_action_info->default_icon;
EXPECT_EQ(1u, icons.map().size());
EXPECT_EQ("icon.png", icons.Get(19, ExtensionIconSet::MATCH_EXACTLY));
}
TEST_F(BrowserActionManifestTest,
BrowserActionManifestIcons_DictDefaultIcon) {
scoped_refptr<const Extension> extension =
ExtensionBuilder()
.SetManifest(DictionaryBuilder()
.Set("name", "Dictionary default icon")
.Set("version", "1.0.0")
.Set("manifest_version", 2)
.Set("browser_action", DictionaryBuilder()
.Set("default_icon", DictionaryBuilder()
.Set("19", "icon19.png")
.Set("24", "icon24.png") // Should be ignored.
.Set("38", "icon38.png"))))
.Build();
ASSERT_TRUE(extension.get());
const ActionInfo* browser_action_info =
ActionInfo::GetBrowserActionInfo(extension.get());
ASSERT_TRUE(browser_action_info);
ASSERT_FALSE(browser_action_info->default_icon.empty());
const ExtensionIconSet& icons = browser_action_info->default_icon;
// 24px icon should be ignored.
EXPECT_EQ(2u, icons.map().size());
EXPECT_EQ("icon19.png", icons.Get(19, ExtensionIconSet::MATCH_EXACTLY));
EXPECT_EQ("icon38.png", icons.Get(38, ExtensionIconSet::MATCH_EXACTLY));
}
TEST_F(BrowserActionManifestTest,
BrowserActionManifestIcons_InvalidDefaultIcon) {
scoped_ptr<base::DictionaryValue> manifest_value = DictionaryBuilder()
.Set("name", "Invalid default icon").Set("version", "1.0.0")
.Set("manifest_version", 2)
.Set("browser_action",
DictionaryBuilder().Set(
"default_icon",
DictionaryBuilder().Set("19", std::string()) // Invalid value.
.Set("24", "icon24.png").Set("38", "icon38.png"))).Build();
base::string16 error = ErrorUtils::FormatErrorMessageUTF16(
errors::kInvalidIconPath, "19");
LoadAndExpectError(Manifest(manifest_value.get(), "Invalid default icon"),
errors::kInvalidIconPath);
}
} // namespace
} // namespace extensions