| Index: chrome/browser/ui/cocoa/extensions/extension_message_bubble_views_browsertest_mac.mm
|
| diff --git a/chrome/browser/ui/cocoa/extensions/extension_message_bubble_views_browsertest_mac.mm b/chrome/browser/ui/cocoa/extensions/extension_message_bubble_views_browsertest_mac.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..efcd0afabb1c502e4b607d390358df8171aa70ea
|
| --- /dev/null
|
| +++ b/chrome/browser/ui/cocoa/extensions/extension_message_bubble_views_browsertest_mac.mm
|
| @@ -0,0 +1,89 @@
|
| +// Copyright 2017 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.
|
| +
|
| +#import <Cocoa/Cocoa.h>
|
| +
|
| +#include "chrome/browser/ui/browser_window.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_controller.h"
|
| +#import "chrome/browser/ui/cocoa/extensions/toolbar_actions_bar_bubble_views_presenter.h"
|
| +#import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h"
|
| +#include "chrome/browser/ui/extensions/extension_message_bubble_browsertest.h"
|
| +#include "chrome/browser/ui/views/toolbar/toolbar_actions_bar_bubble_views.h"
|
| +#import "ui/gfx/mac/coordinate_conversion.h"
|
| +
|
| +namespace {
|
| +
|
| +// Returns the ToolbarController for the given browser.
|
| +ToolbarController* ToolbarControllerForBrowser(Browser* browser) {
|
| + return [[BrowserWindowController
|
| + browserWindowControllerForWindow:browser->window()->GetNativeWindow()]
|
| + toolbarController];
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +@interface BrowserActionsController (ViewsTestingAPI)
|
| +- (ToolbarActionsBarBubbleViewsPresenter*)presenter;
|
| +@end
|
| +
|
| +@implementation BrowserActionsController (ViewsTestingAPI)
|
| +- (ToolbarActionsBarBubbleViewsPresenter*)presenter {
|
| + return viewsBubblePresenter_.get();
|
| +}
|
| +@end
|
| +
|
| +namespace test {
|
| +
|
| +class ToolbarActionsBarBubbleViewsPresenterTestApi {
|
| + public:
|
| + static ToolbarActionsBarBubbleViews* GetBubble(
|
| + ToolbarActionsBarBubbleViewsPresenter* presenter) {
|
| + return presenter->active_bubble_;
|
| + }
|
| +};
|
| +
|
| +} // namespace test
|
| +
|
| +// static
|
| +ToolbarActionsBarBubbleViews*
|
| +ExtensionMessageBubbleBrowserTest::GetViewsBubbleForBrowser(Browser* browser) {
|
| + ToolbarController* toolbarController = ToolbarControllerForBrowser(browser);
|
| + BrowserActionsController* actionsController =
|
| + [toolbarController browserActionsController];
|
| + return test::ToolbarActionsBarBubbleViewsPresenterTestApi::GetBubble(
|
| + [actionsController presenter]);
|
| +}
|
| +
|
| +// static
|
| +gfx::Rect ExtensionMessageBubbleBrowserTest::GetAnchorReferenceBoundsForBrowser(
|
| + Browser* browser,
|
| + AnchorPosition anchor) {
|
| + ToolbarController* toolbarController = ToolbarControllerForBrowser(browser);
|
| + BrowserActionsController* actionsController =
|
| + [toolbarController browserActionsController];
|
| + NSView* anchor_view = nil;
|
| + switch (anchor) {
|
| + case ExtensionMessageBubbleBrowserTest::ANCHOR_BROWSER_ACTION:
|
| + anchor_view = [actionsController buttonWithIndex:0];
|
| + break;
|
| + case ExtensionMessageBubbleBrowserTest::ANCHOR_APP_MENU:
|
| + anchor_view = [toolbarController appMenuButton];
|
| + break;
|
| + }
|
| + EXPECT_TRUE(anchor_view);
|
| + NSWindow* parent_window = [anchor_view window];
|
| +
|
| + ToolbarActionsBarBubbleViews* bubble = GetViewsBubbleForBrowser(browser);
|
| + EXPECT_TRUE(bubble);
|
| + EXPECT_EQ([parent_window contentView], bubble->parent_window());
|
| +
|
| + NSRect anchor_bounds_in_window =
|
| + [anchor_view convertRect:[anchor_view bounds] toView:nil];
|
| + NSRect reference_bounds_in_screen =
|
| + [parent_window convertRectToScreen:anchor_bounds_in_window];
|
| +
|
| + return gfx::ScreenRectFromNSRect(reference_bounds_in_screen);
|
| +}
|
|
|