OLD | NEW |
(Empty) | |
| 1 // Copyright 2017 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 #import <Cocoa/Cocoa.h> |
| 6 |
| 7 #include "chrome/browser/ui/browser_window.h" |
| 8 #import "chrome/browser/ui/cocoa/browser_window_controller.h" |
| 9 #import "chrome/browser/ui/cocoa/extensions/browser_action_button.h" |
| 10 #import "chrome/browser/ui/cocoa/extensions/browser_actions_controller.h" |
| 11 #import "chrome/browser/ui/cocoa/extensions/toolbar_actions_bar_bubble_views_pre
senter.h" |
| 12 #import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h" |
| 13 #include "chrome/browser/ui/extensions/extension_message_bubble_browsertest.h" |
| 14 #include "chrome/browser/ui/views/toolbar/toolbar_actions_bar_bubble_views.h" |
| 15 #import "ui/gfx/mac/coordinate_conversion.h" |
| 16 |
| 17 namespace { |
| 18 |
| 19 // Returns the ToolbarController for the given browser. |
| 20 ToolbarController* ToolbarControllerForBrowser(Browser* browser) { |
| 21 return [[BrowserWindowController |
| 22 browserWindowControllerForWindow:browser->window()->GetNativeWindow()] |
| 23 toolbarController]; |
| 24 } |
| 25 |
| 26 } // namespace |
| 27 |
| 28 @interface BrowserActionsController (ViewsTestingAPI) |
| 29 - (ToolbarActionsBarBubbleViewsPresenter*)presenter; |
| 30 @end |
| 31 |
| 32 @implementation BrowserActionsController (ViewsTestingAPI) |
| 33 - (ToolbarActionsBarBubbleViewsPresenter*)presenter { |
| 34 return viewsBubblePresenter_.get(); |
| 35 } |
| 36 @end |
| 37 |
| 38 namespace test { |
| 39 |
| 40 class ToolbarActionsBarBubbleViewsPresenterTestApi { |
| 41 public: |
| 42 static ToolbarActionsBarBubbleViews* GetBubble( |
| 43 ToolbarActionsBarBubbleViewsPresenter* presenter) { |
| 44 return presenter->active_bubble_; |
| 45 } |
| 46 }; |
| 47 |
| 48 } // namespace test |
| 49 |
| 50 // static |
| 51 ToolbarActionsBarBubbleViews* |
| 52 ExtensionMessageBubbleBrowserTest::GetViewsBubbleForBrowser(Browser* browser) { |
| 53 ToolbarController* toolbarController = ToolbarControllerForBrowser(browser); |
| 54 BrowserActionsController* actionsController = |
| 55 [toolbarController browserActionsController]; |
| 56 return test::ToolbarActionsBarBubbleViewsPresenterTestApi::GetBubble( |
| 57 [actionsController presenter]); |
| 58 } |
| 59 |
| 60 // static |
| 61 gfx::Rect ExtensionMessageBubbleBrowserTest::GetAnchorReferenceBoundsForBrowser( |
| 62 Browser* browser, |
| 63 AnchorPosition anchor) { |
| 64 ToolbarController* toolbarController = ToolbarControllerForBrowser(browser); |
| 65 BrowserActionsController* actionsController = |
| 66 [toolbarController browserActionsController]; |
| 67 NSView* anchor_view = nil; |
| 68 switch (anchor) { |
| 69 case ExtensionMessageBubbleBrowserTest::ANCHOR_BROWSER_ACTION: |
| 70 anchor_view = [actionsController buttonWithIndex:0]; |
| 71 break; |
| 72 case ExtensionMessageBubbleBrowserTest::ANCHOR_APP_MENU: |
| 73 anchor_view = [toolbarController appMenuButton]; |
| 74 break; |
| 75 } |
| 76 EXPECT_TRUE(anchor_view); |
| 77 NSWindow* parent_window = [anchor_view window]; |
| 78 |
| 79 ToolbarActionsBarBubbleViews* bubble = GetViewsBubbleForBrowser(browser); |
| 80 EXPECT_TRUE(bubble); |
| 81 EXPECT_EQ([parent_window contentView], bubble->parent_window()); |
| 82 |
| 83 NSRect anchor_bounds_in_window = |
| 84 [anchor_view convertRect:[anchor_view bounds] toView:nil]; |
| 85 NSRect reference_bounds_in_screen = |
| 86 [parent_window convertRectToScreen:anchor_bounds_in_window]; |
| 87 |
| 88 return gfx::ScreenRectFromNSRect(reference_bounds_in_screen); |
| 89 } |
OLD | NEW |