1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/browser_action_test_util.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_action_manager.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/ui/browser_window_testing_views.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/extensions/extension_popup.h"
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/views/toolbar/browser_action_view.h"
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/views/toolbar/browser_actions_container.h"
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/views/toolbar/toolbar_view.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/size.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserActionsContainer* GetContainer(Browser* browser) {
23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return browser->window()->GetBrowserWindowTesting()->GetToolbarView()->
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      browser_actions();
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int BrowserActionTestUtil::NumberOfBrowserActions() {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetContainer(browser_)->num_browser_actions();
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int BrowserActionTestUtil::VisibleBrowserActions() {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetContainer(browser_)->VisibleBrowserActions();
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionAction* BrowserActionTestUtil::GetExtensionAction(int index) {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return extensions::ExtensionActionManager::Get(browser_->profile())->
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetBrowserAction(*GetContainer(browser_)->GetBrowserActionViewAt(index)->
406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                       extension());
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void BrowserActionTestUtil::InspectPopup(int index) {
446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  GetContainer(browser_)->GetBrowserActionViewAt(index)->
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      view_controller()->InspectPopup();
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BrowserActionTestUtil::HasIcon(int index) {
496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return !GetContainer(browser_)->GetBrowserActionViewAt(index)->
50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      GetImage(views::Button::STATE_NORMAL).isNull();
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::Image BrowserActionTestUtil::GetIcon(int index) {
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::ImageSkia icon = GetContainer(browser_)->GetBrowserActionViewAt(index)->
556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      GetIconForTest();
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return gfx::Image(icon);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserActionTestUtil::Press(int index) {
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  GetContainer(browser_)->GetBrowserActionViewAt(index)->
616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      view_controller()->ExecuteActionByUser();
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string BrowserActionTestUtil::GetExtensionId(int index) {
656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return GetContainer(browser_)->GetBrowserActionViewAt(index)->
666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      extension()->id();
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string BrowserActionTestUtil::GetTooltip(int index) {
70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  base::string16 text;
716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  GetContainer(browser_)->GetBrowserActionViewAt(index)->
726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      GetTooltipText(gfx::Point(), &text);
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return base::UTF16ToUTF8(text);
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)gfx::NativeView BrowserActionTestUtil::GetPopupNativeView() {
77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return GetContainer(browser_)->TestGetPopup()->GetWidget()->GetNativeView();
78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BrowserActionTestUtil::HasPopup() {
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetContainer(browser_)->TestGetPopup() != NULL;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::Rect BrowserActionTestUtil::GetPopupBounds() {
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetContainer(browser_)->TestGetPopup()->bounds();
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BrowserActionTestUtil::HidePopup() {
895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  GetContainer(browser_)->HideActivePopup();
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return !HasPopup();
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserActionTestUtil::SetIconVisibilityCount(size_t icons) {
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetContainer(browser_)->TestSetIconVisibilityCount(icons);
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::Size BrowserActionTestUtil::GetMinPopupSize() {
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return gfx::Size(ExtensionPopup::kMinWidth, ExtensionPopup::kMinHeight);
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::Size BrowserActionTestUtil::GetMaxPopupSize() {
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return gfx::Size(ExtensionPopup::kMaxWidth, ExtensionPopup::kMaxHeight);
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
104