Home | History | Annotate | Download | only in extensions
      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 "base/message_loop/message_loop.h"
      6 #include "chrome/browser/extensions/extension_action.h"
      7 #include "chrome/common/extensions/api/extension_action/action_info.h"
      8 #include "testing/gtest/include/gtest/gtest.h"
      9 #include "url/gurl.h"
     10 
     11 namespace {
     12 
     13 using extensions::ActionInfo;
     14 
     15 TEST(ExtensionActionTest, Title) {
     16   ActionInfo action_info;
     17   action_info.default_title = "Initial Title";
     18   ExtensionAction action(std::string(), ActionInfo::TYPE_PAGE, action_info);
     19 
     20   ASSERT_EQ("Initial Title", action.GetTitle(1));
     21   action.SetTitle(ExtensionAction::kDefaultTabId, "foo");
     22   ASSERT_EQ("foo", action.GetTitle(1));
     23   ASSERT_EQ("foo", action.GetTitle(100));
     24   action.SetTitle(100, "bar");
     25   ASSERT_EQ("foo", action.GetTitle(1));
     26   ASSERT_EQ("bar", action.GetTitle(100));
     27   action.SetTitle(ExtensionAction::kDefaultTabId, "baz");
     28   ASSERT_EQ("baz", action.GetTitle(1));
     29   action.ClearAllValuesForTab(100);
     30   ASSERT_EQ("baz", action.GetTitle(100));
     31 }
     32 
     33 TEST(ExtensionActionTest, Visibility) {
     34   ExtensionAction action(std::string(), ActionInfo::TYPE_PAGE, ActionInfo());
     35 
     36   ASSERT_FALSE(action.GetIsVisible(1));
     37   action.SetAppearance(ExtensionAction::kDefaultTabId, ExtensionAction::ACTIVE);
     38   ASSERT_TRUE(action.GetIsVisible(1));
     39   ASSERT_TRUE(action.GetIsVisible(100));
     40 
     41   action.SetAppearance(ExtensionAction::kDefaultTabId,
     42                        ExtensionAction::INVISIBLE);
     43   ASSERT_FALSE(action.GetIsVisible(1));
     44   ASSERT_FALSE(action.GetIsVisible(100));
     45   action.SetAppearance(100, ExtensionAction::ACTIVE);
     46   ASSERT_FALSE(action.GetIsVisible(1));
     47   ASSERT_TRUE(action.GetIsVisible(100));
     48   EXPECT_FALSE(action.GetIconAnimation(100))
     49       << "Page actions should not animate.";
     50 
     51   action.ClearAllValuesForTab(100);
     52   ASSERT_FALSE(action.GetIsVisible(1));
     53   ASSERT_FALSE(action.GetIsVisible(100));
     54 
     55   ExtensionAction browser_action(
     56       std::string(), ActionInfo::TYPE_BROWSER, ActionInfo());
     57   ASSERT_TRUE(browser_action.GetIsVisible(1));
     58 }
     59 
     60 TEST(ExtensionActionTest, ScriptBadgeAnimation) {
     61   // Supports the icon animation.
     62   base::MessageLoop message_loop;
     63 
     64   ExtensionAction script_badge(
     65       std::string(), ActionInfo::TYPE_SCRIPT_BADGE, ActionInfo());
     66   EXPECT_FALSE(script_badge.GetIconAnimation(ExtensionAction::kDefaultTabId));
     67   script_badge.SetAppearance(ExtensionAction::kDefaultTabId,
     68                              ExtensionAction::ACTIVE);
     69   EXPECT_FALSE(script_badge.GetIconAnimation(ExtensionAction::kDefaultTabId))
     70       << "Showing the default tab should not animate script badges.";
     71 
     72   script_badge.SetAppearance(ExtensionAction::kDefaultTabId,
     73                              ExtensionAction::INVISIBLE);
     74   EXPECT_FALSE(script_badge.GetIconAnimation(1))
     75       << "Making a script badge invisible should not show its animation.";
     76   script_badge.SetAppearance(1, ExtensionAction::ACTIVE);
     77   EXPECT_TRUE(script_badge.GetIconAnimation(1))
     78       << "Making a script badge visible should show its animation.";
     79 
     80   script_badge.ClearAllValuesForTab(1);
     81   EXPECT_FALSE(script_badge.GetIconAnimation(100));
     82 }
     83 
     84 TEST(ExtensionActionTest, GetAttention) {
     85   // Supports the icon animation.
     86   scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop);
     87 
     88   ExtensionAction script_badge(
     89       std::string(), ActionInfo::TYPE_SCRIPT_BADGE, ActionInfo());
     90   EXPECT_FALSE(script_badge.GetIsVisible(1));
     91   EXPECT_FALSE(script_badge.GetIconAnimation(1));
     92   script_badge.SetAppearance(1, ExtensionAction::WANTS_ATTENTION);
     93   EXPECT_TRUE(script_badge.GetIsVisible(1));
     94   EXPECT_TRUE(script_badge.GetIconAnimation(1));
     95 
     96   // Simulate waiting long enough for the animation to end.
     97   message_loop.reset();  // Can't have 2 MessageLoops alive at once.
     98   message_loop.reset(new base::MessageLoop);
     99   EXPECT_FALSE(script_badge.GetIconAnimation(1));  // Sanity check.
    100 
    101   script_badge.SetAppearance(1, ExtensionAction::ACTIVE);
    102   EXPECT_FALSE(script_badge.GetIconAnimation(1))
    103       << "The animation should not play again if the icon was already visible.";
    104 }
    105 
    106 TEST(ExtensionActionTest, Icon) {
    107   ActionInfo action_info;
    108   action_info.default_icon.Add(16, "icon16.png");
    109   ExtensionAction page_action(
    110       std::string(), ActionInfo::TYPE_PAGE, action_info);
    111   ASSERT_TRUE(page_action.default_icon());
    112   EXPECT_EQ("icon16.png",
    113             page_action.default_icon()->Get(
    114                 16, ExtensionIconSet::MATCH_EXACTLY));
    115   EXPECT_EQ("",
    116             page_action.default_icon()->Get(
    117                 17, ExtensionIconSet::MATCH_BIGGER));
    118 }
    119 
    120 TEST(ExtensionActionTest, Badge) {
    121   ExtensionAction action(std::string(), ActionInfo::TYPE_PAGE, ActionInfo());
    122   ASSERT_EQ("", action.GetBadgeText(1));
    123   action.SetBadgeText(ExtensionAction::kDefaultTabId, "foo");
    124   ASSERT_EQ("foo", action.GetBadgeText(1));
    125   ASSERT_EQ("foo", action.GetBadgeText(100));
    126   action.SetBadgeText(100, "bar");
    127   ASSERT_EQ("foo", action.GetBadgeText(1));
    128   ASSERT_EQ("bar", action.GetBadgeText(100));
    129   action.SetBadgeText(ExtensionAction::kDefaultTabId, "baz");
    130   ASSERT_EQ("baz", action.GetBadgeText(1));
    131   action.ClearAllValuesForTab(100);
    132   ASSERT_EQ("baz", action.GetBadgeText(100));
    133 }
    134 
    135 TEST(ExtensionActionTest, BadgeTextColor) {
    136   ExtensionAction action(std::string(), ActionInfo::TYPE_PAGE, ActionInfo());
    137   ASSERT_EQ(0x00000000u, action.GetBadgeTextColor(1));
    138   action.SetBadgeTextColor(ExtensionAction::kDefaultTabId, 0xFFFF0000u);
    139   ASSERT_EQ(0xFFFF0000u, action.GetBadgeTextColor(1));
    140   ASSERT_EQ(0xFFFF0000u, action.GetBadgeTextColor(100));
    141   action.SetBadgeTextColor(100, 0xFF00FF00);
    142   ASSERT_EQ(0xFFFF0000u, action.GetBadgeTextColor(1));
    143   ASSERT_EQ(0xFF00FF00u, action.GetBadgeTextColor(100));
    144   action.SetBadgeTextColor(ExtensionAction::kDefaultTabId, 0xFF0000FFu);
    145   ASSERT_EQ(0xFF0000FFu, action.GetBadgeTextColor(1));
    146   action.ClearAllValuesForTab(100);
    147   ASSERT_EQ(0xFF0000FFu, action.GetBadgeTextColor(100));
    148 }
    149 
    150 TEST(ExtensionActionTest, BadgeBackgroundColor) {
    151   ExtensionAction action(std::string(), ActionInfo::TYPE_PAGE, ActionInfo());
    152   ASSERT_EQ(0x00000000u, action.GetBadgeBackgroundColor(1));
    153   action.SetBadgeBackgroundColor(ExtensionAction::kDefaultTabId,
    154                                  0xFFFF0000u);
    155   ASSERT_EQ(0xFFFF0000u, action.GetBadgeBackgroundColor(1));
    156   ASSERT_EQ(0xFFFF0000u, action.GetBadgeBackgroundColor(100));
    157   action.SetBadgeBackgroundColor(100, 0xFF00FF00);
    158   ASSERT_EQ(0xFFFF0000u, action.GetBadgeBackgroundColor(1));
    159   ASSERT_EQ(0xFF00FF00u, action.GetBadgeBackgroundColor(100));
    160   action.SetBadgeBackgroundColor(ExtensionAction::kDefaultTabId,
    161                                  0xFF0000FFu);
    162   ASSERT_EQ(0xFF0000FFu, action.GetBadgeBackgroundColor(1));
    163   action.ClearAllValuesForTab(100);
    164   ASSERT_EQ(0xFF0000FFu, action.GetBadgeBackgroundColor(100));
    165 }
    166 
    167 TEST(ExtensionActionTest, PopupUrl) {
    168   GURL url_unset;
    169   GURL url_foo("http://www.example.com/foo.html");
    170   GURL url_bar("http://www.example.com/bar.html");
    171   GURL url_baz("http://www.example.com/baz.html");
    172 
    173   ActionInfo action_info;
    174   action_info.default_popup_url = url_foo;
    175   ExtensionAction action(std::string(), ActionInfo::TYPE_PAGE, action_info);
    176 
    177   ASSERT_EQ(url_foo, action.GetPopupUrl(1));
    178   ASSERT_EQ(url_foo, action.GetPopupUrl(100));
    179   ASSERT_TRUE(action.HasPopup(1));
    180   ASSERT_TRUE(action.HasPopup(100));
    181 
    182   action.SetPopupUrl(ExtensionAction::kDefaultTabId, url_unset);
    183   ASSERT_EQ(url_unset, action.GetPopupUrl(1));
    184   ASSERT_EQ(url_unset, action.GetPopupUrl(100));
    185   ASSERT_FALSE(action.HasPopup(1));
    186   ASSERT_FALSE(action.HasPopup(100));
    187 
    188   action.SetPopupUrl(100, url_bar);
    189   ASSERT_EQ(url_unset, action.GetPopupUrl(1));
    190   ASSERT_EQ(url_bar, action.GetPopupUrl(100));
    191 
    192   action.SetPopupUrl(ExtensionAction::kDefaultTabId, url_baz);
    193   ASSERT_EQ(url_baz, action.GetPopupUrl(1));
    194   ASSERT_EQ(url_bar, action.GetPopupUrl(100));
    195 
    196   action.ClearAllValuesForTab(100);
    197   ASSERT_EQ(url_baz, action.GetPopupUrl(1));
    198   ASSERT_EQ(url_baz, action.GetPopupUrl(100));
    199 }
    200 
    201 }  // namespace
    202