1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
|
// Copyright (c) 2009 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/browser/extensions/browser_action_test_util.h"
#include "base/mac/foundation_util.h"
#include "base/strings/sys_string_conversions.h"
#include "chrome/browser/ui/browser.h"
#import "chrome/browser/ui/cocoa/browser_window_cocoa.h"
#import "chrome/browser/ui/cocoa/browser_window_controller.h"
#import "chrome/browser/ui/cocoa/extensions/browser_action_button.h"
#import "chrome/browser/ui/cocoa/extensions/browser_actions_container_view.h"
#import "chrome/browser/ui/cocoa/extensions/browser_actions_controller.h"
#import "chrome/browser/ui/cocoa/extensions/extension_popup_controller.h"
#import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h"
#import "chrome/browser/ui/cocoa/toolbar/wrench_toolbar_button_cell.h"
#import "chrome/browser/ui/cocoa/info_bubble_window.h"
#import "chrome/browser/ui/cocoa/themed_window.h"
#import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h"
#include "chrome/browser/ui/toolbar/toolbar_action_view_controller.h"
#include "grit/theme_resources.h"
#include "ui/base/theme_provider.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/geometry/size.h"
namespace {
BrowserActionsController* GetController(
Browser* browser,
ToolbarActionsBarDelegate* barDelegate) {
if (barDelegate)
return [BrowserActionsController fromToolbarActionsBarDelegate:barDelegate];
BrowserWindowCocoa* window =
static_cast<BrowserWindowCocoa*>(browser->window());
return [[window->cocoa_controller() toolbarController]
browserActionsController];
}
BrowserActionButton* GetButton(
Browser* browser,
ToolbarActionsBarDelegate* barDelegate,
int index) {
return [GetController(browser, barDelegate) buttonWithIndex:index];
}
} // namespace
int BrowserActionTestUtil::NumberOfBrowserActions() {
return [GetController(browser_, bar_delegate_) buttonCount];
}
int BrowserActionTestUtil::VisibleBrowserActions() {
return [GetController(browser_, bar_delegate_) visibleButtonCount];
}
bool BrowserActionTestUtil::IsChevronShowing() {
BrowserActionsController* controller = GetController(browser_, bar_delegate_);
// The magic "18" comes from kChevronWidth in browser_actions_controller.mm.
return ![controller chevronIsHidden] &&
NSWidth([[controller containerView] animationEndFrame]) >= 18;
}
void BrowserActionTestUtil::InspectPopup(int index) {
NOTREACHED();
}
bool BrowserActionTestUtil::HasIcon(int index) {
return [GetButton(browser_, bar_delegate_, index) image] != nil;
}
gfx::Image BrowserActionTestUtil::GetIcon(int index) {
NSImage* ns_image = [GetButton(browser_, bar_delegate_, index) image];
// gfx::Image takes ownership of the |ns_image| reference. We have to increase
// the ref count so |ns_image| stays around when the image object is
// destroyed.
base::mac::NSObjectRetain(ns_image);
return gfx::Image(ns_image);
}
void BrowserActionTestUtil::Press(int index) {
NSButton* button = GetButton(browser_, bar_delegate_, index);
[button performClick:nil];
}
std::string BrowserActionTestUtil::GetExtensionId(int index) {
return [GetButton(browser_, bar_delegate_, index) viewController]->GetId();
}
std::string BrowserActionTestUtil::GetTooltip(int index) {
NSString* tooltip = [GetButton(browser_, bar_delegate_, index) toolTip];
return base::SysNSStringToUTF8(tooltip);
}
gfx::NativeView BrowserActionTestUtil::GetPopupNativeView() {
return [[ExtensionPopupController popup] view];
}
bool BrowserActionTestUtil::HasPopup() {
return [ExtensionPopupController popup] != nil;
}
gfx::Size BrowserActionTestUtil::GetPopupSize() {
NSRect bounds = [[[ExtensionPopupController popup] view] bounds];
return gfx::Size(NSSizeToCGSize(bounds.size));
}
bool BrowserActionTestUtil::HidePopup() {
ExtensionPopupController* controller = [ExtensionPopupController popup];
// The window must be gone or we'll fail a unit test with windows left open.
[static_cast<InfoBubbleWindow*>([controller window])
setAllowedAnimations:info_bubble::kAnimateNone];
[controller close];
return !HasPopup();
}
bool BrowserActionTestUtil::ActionButtonWantsToRun(size_t index) {
BrowserActionsController* controller = GetController(browser_, bar_delegate_);
ui::ThemeProvider* themeProvider =
[[[controller containerView] window] themeProvider];
DCHECK(themeProvider);
NSImage* wantsToRunImage =
themeProvider->GetNSImageNamed(IDR_BROWSER_ACTION_H);
BrowserActionButton* button = [controller buttonWithIndex:index];
BrowserActionCell* cell =
base::mac::ObjCCastStrict<BrowserActionCell>([button cell]);
NSImage* actualImage = [cell imageForState:image_button_cell::kDefaultState
view:button];
return wantsToRunImage == actualImage;
}
bool BrowserActionTestUtil::OverflowedActionButtonWantsToRun() {
NSView* wrench = [[[BrowserWindowController browserWindowControllerForWindow:
browser_->window()->GetNativeWindow()] toolbarController] wrenchButton];
NSButton* wrenchButton = base::mac::ObjCCastStrict<NSButton>(wrench);
WrenchToolbarButtonCell* cell =
base::mac::ObjCCastStrict<WrenchToolbarButtonCell>([wrenchButton cell]);
return [cell overflowedToolbarActionWantsToRun];
}
// static
gfx::Size BrowserActionTestUtil::GetMinPopupSize() {
return gfx::Size(NSSizeToCGSize([ExtensionPopupController minPopupSize]));
}
// static
gfx::Size BrowserActionTestUtil::GetMaxPopupSize() {
return gfx::Size(NSSizeToCGSize([ExtensionPopupController maxPopupSize]));
}
|