blob: 011067ed11f2ab61c360254fc02d2353ffa54574 [file] [log] [blame]
// Copyright 2015 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 "base/run_loop.h"
#include "chrome/browser/ui/extensions/extension_action_view_controller.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/ui/toolbar/toolbar_actions_bar.h"
#include "chrome/browser/ui/toolbar/toolbar_actions_bar_unittest.h"
#include "chrome/common/icon_with_badge_image_source.h"
#include "chrome/grit/chromium_strings.h"
#include "chrome/grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
// Tests the icon appearance of extension actions without the toolbar redesign.
// In this case, the action should never be grayscaled or decorated to indicate
// whether or not it wants to run.
TEST_F(ToolbarActionsBarUnitTest, ExtensionActionNormalAppearance) {
CreateAndAddExtension("extension",
extensions::extension_action_test_util::BROWSER_ACTION);
EXPECT_EQ(1u, toolbar_actions_bar()->GetIconCount());
AddTab(browser(), GURL("chrome://newtab"));
gfx::Size size(ToolbarActionsBar::IconWidth(false),
ToolbarActionsBar::IconHeight());
content::WebContents* web_contents =
browser()->tab_strip_model()->GetActiveWebContents();
ExtensionActionViewController* action =
static_cast<ExtensionActionViewController*>(
toolbar_actions_bar()->GetActions()[0]);
scoped_ptr<IconWithBadgeImageSource> image_source =
action->GetIconImageSourceForTesting(web_contents, size);
EXPECT_FALSE(image_source->grayscale());
EXPECT_FALSE(image_source->paint_decoration());
SetActionWantsToRunOnTab(action->extension_action(), web_contents, false);
image_source = action->GetIconImageSourceForTesting(web_contents, size);
EXPECT_FALSE(image_source->grayscale());
EXPECT_FALSE(image_source->paint_decoration());
toolbar_model()->SetVisibleIconCount(0u);
image_source = action->GetIconImageSourceForTesting(web_contents, size);
EXPECT_FALSE(image_source->grayscale());
EXPECT_FALSE(image_source->paint_decoration());
SetActionWantsToRunOnTab(action->extension_action(), web_contents, true);
image_source = action->GetIconImageSourceForTesting(web_contents, size);
EXPECT_FALSE(image_source->grayscale());
EXPECT_FALSE(image_source->paint_decoration());
}
// Tests the icon appearance of extension actions with the toolbar redesign.
// Extensions that don't want to run should have their icons grayscaled.
// Overflowed extensions that want to run should have an additional decoration.
TEST_F(ToolbarActionsBarRedesignUnitTest, ExtensionActionWantsToRunAppearance) {
CreateAndAddExtension("extension",
extensions::extension_action_test_util::PAGE_ACTION);
EXPECT_EQ(1u, toolbar_actions_bar()->GetIconCount());
EXPECT_EQ(0u, overflow_bar()->GetIconCount());
AddTab(browser(), GURL("chrome://newtab"));
gfx::Size size(ToolbarActionsBar::IconWidth(false),
ToolbarActionsBar::IconHeight());
content::WebContents* web_contents =
browser()->tab_strip_model()->GetActiveWebContents();
ExtensionActionViewController* action =
static_cast<ExtensionActionViewController*>(
toolbar_actions_bar()->GetActions()[0]);
scoped_ptr<IconWithBadgeImageSource> image_source =
action->GetIconImageSourceForTesting(web_contents, size);
EXPECT_TRUE(image_source->grayscale());
EXPECT_FALSE(image_source->paint_decoration());
SetActionWantsToRunOnTab(action->extension_action(), web_contents, true);
image_source = action->GetIconImageSourceForTesting(web_contents, size);
EXPECT_FALSE(image_source->grayscale());
EXPECT_FALSE(image_source->paint_decoration());
toolbar_model()->SetVisibleIconCount(0u);
EXPECT_EQ(0u, toolbar_actions_bar()->GetIconCount());
EXPECT_EQ(1u, overflow_bar()->GetIconCount());
action = static_cast<ExtensionActionViewController*>(
overflow_bar()->GetActions()[0]);
image_source = action->GetIconImageSourceForTesting(web_contents, size);
EXPECT_FALSE(image_source->grayscale());
EXPECT_TRUE(image_source->paint_decoration());
SetActionWantsToRunOnTab(action->extension_action(), web_contents, false);
image_source = action->GetIconImageSourceForTesting(web_contents, size);
EXPECT_TRUE(image_source->grayscale());
EXPECT_FALSE(image_source->paint_decoration());
}
TEST_F(ToolbarActionsBarRedesignUnitTest, ExtensionActionContextMenu) {
CreateAndAddExtension("extension",
extensions::extension_action_test_util::BROWSER_ACTION);
EXPECT_EQ(1u, toolbar_actions_bar()->GetIconCount());
// Check that the context menu has the proper string for the action's position
// (in the main toolbar, in the overflow container, or temporarily popped
// out).
auto check_visibility_string = [](ToolbarActionViewController* action,
int expected_visibility_string) {
ui::SimpleMenuModel* context_menu =
static_cast<ui::SimpleMenuModel*>(action->GetContextMenu());
int visibility_index = context_menu->GetIndexOfCommandId(
extensions::ExtensionContextMenuModel::TOGGLE_VISIBILITY);
ASSERT_GE(visibility_index, 0);
base::string16 visibility_label =
context_menu->GetLabelAt(visibility_index);
EXPECT_EQ(l10n_util::GetStringUTF16(expected_visibility_string),
visibility_label);
};
check_visibility_string(toolbar_actions_bar()->GetActions()[0],
IDS_EXTENSIONS_HIDE_BUTTON_IN_MENU);
toolbar_model()->SetVisibleIconCount(0u);
check_visibility_string(overflow_bar()->GetActions()[0],
IDS_EXTENSIONS_SHOW_BUTTON_IN_TOOLBAR);
base::RunLoop run_loop;
toolbar_actions_bar()->PopOutAction(toolbar_actions_bar()->GetActions()[0],
run_loop.QuitClosure());
run_loop.Run();
check_visibility_string(toolbar_actions_bar()->GetActions()[0],
IDS_EXTENSIONS_KEEP_BUTTON_IN_TOOLBAR);
}