Commit 771e6180 authored by Elly Fong-Jones's avatar Elly Fong-Jones Committed by Commit Bot

polychrome: fix ZoomBubbleView wiring

This change:
1) Makes ZoomBubbleView behave correctly in Polychrome Cocoa mode, by using the
   Cocoa code paths there;
2) Factors out some of the messy ifdef logic into even messier  (but
   encapsulated!) ifdef logic
3) Marks one test (NonImmersiveFullscreen) as requiring a Views browser window,
   although this test currently fails in that mode on Mac.

This change fixes all the ZoomBubbleBrowserTest, ZoomBubbleDialogTest, and
ZoomControllerBrowserTest tests for polychrome.

Bug: 817408
Change-Id: I3ecfa3aa98fb27ab32ac389c4be4955c3933b35c
Reviewed-on: https://chromium-review.googlesource.com/960801
Commit-Queue: Elly Fong-Jones <ellyjones@chromium.org>
Reviewed-by: default avatarPeter Kasting <pkasting@chromium.org>
Cr-Commit-Position: refs/heads/master@{#544098}
parent 740d6dec
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "base/i18n/number_formatting.h" #include "base/i18n/number_formatting.h"
#include "base/i18n/rtl.h" #include "base/i18n/rtl.h"
#include "base/strings/stringprintf.h" #include "base/strings/stringprintf.h"
#include "build/build_config.h"
#include "chrome/app/vector_icons/vector_icons.h" #include "chrome/app/vector_icons/vector_icons.h"
#include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/platform_util.h" #include "chrome/browser/platform_util.h"
...@@ -22,6 +23,7 @@ ...@@ -22,6 +23,7 @@
#include "chrome/browser/ui/views/harmony/chrome_layout_provider.h" #include "chrome/browser/ui/views/harmony/chrome_layout_provider.h"
#include "chrome/browser/ui/views/location_bar/location_bar_view.h" #include "chrome/browser/ui/views/location_bar/location_bar_view.h"
#include "chrome/browser/ui/views/location_bar/zoom_view.h" #include "chrome/browser/ui/views/location_bar/zoom_view.h"
#include "chrome/browser/ui/views_mode_controller.h"
#include "chrome/common/extensions/api/extension_action/action_info.h" #include "chrome/common/extensions/api/extension_action/action_info.h"
#include "chrome/grit/generated_resources.h" #include "chrome/grit/generated_resources.h"
#include "chrome/grit/theme_resources.h" #include "chrome/grit/theme_resources.h"
...@@ -112,6 +114,86 @@ class ZoomValue : public views::Label { ...@@ -112,6 +114,86 @@ class ZoomValue : public views::Label {
DISALLOW_COPY_AND_ASSIGN(ZoomValue); DISALLOW_COPY_AND_ASSIGN(ZoomValue);
}; };
views::View* GetAnchorViewForBrowser(Browser* browser, bool is_fullscreen) {
#if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER)
#if BUILDFLAG(MAC_VIEWS_BROWSER)
if (views_mode_controller::IsViewsBrowserCocoa())
return nullptr; // Cocoa browsers always use anchor rects instead of views.
#endif
BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser);
if (!is_fullscreen ||
browser_view->immersive_mode_controller()->IsRevealed()) {
LocationBarView* location_bar = browser_view->GetLocationBarView();
return ui::MaterialDesignController::IsSecondaryUiMaterial()
? static_cast<views::View*>(location_bar)
: static_cast<views::View*>(location_bar->zoom_view());
}
return nullptr;
#else // OS_MACOSX && !MAC_VIEWS_BROWSER
return nullptr;
#endif
}
ImmersiveModeController* GetImmersiveModeControllerForBrowser(
Browser* browser) {
#if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER)
#if BUILDFLAG(MAC_VIEWS_BROWSER)
if (views_mode_controller::IsViewsBrowserCocoa())
return nullptr;
#endif
BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser);
return browser_view->immersive_mode_controller();
#else
return nullptr;
#endif
}
#if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER)
void ParentToViewsBrowser(Browser* browser,
ZoomBubbleView* zoom_bubble,
views::View* anchor_view,
content::WebContents* web_contents) {
BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser);
// If we do not have an anchor view, parent the bubble to the content area.
if (!anchor_view)
zoom_bubble->set_parent_window(web_contents->GetNativeView());
views::Widget* zoom_bubble_widget =
views::BubbleDialogDelegateView::CreateBubble(zoom_bubble);
if (zoom_bubble_widget && anchor_view) {
browser_view->GetLocationBarView()->zoom_view()->OnBubbleWidgetCreated(
zoom_bubble_widget);
}
}
#endif
#if defined(OS_MACOSX)
void ParentToCocoaBrowser(Browser* browser, ZoomBubbleView* zoom_bubble) {
gfx::NativeView parent =
platform_util::GetViewForWindow(browser->window()->GetNativeWindow());
DCHECK(parent);
zoom_bubble->set_arrow(views::BubbleBorder::TOP_RIGHT);
zoom_bubble->set_parent_window(parent);
views::BubbleDialogDelegateView::CreateBubble(zoom_bubble);
}
#endif
void ParentToBrowser(Browser* browser,
ZoomBubbleView* zoom_bubble,
views::View* anchor_view,
content::WebContents* web_contents) {
#if defined(OS_MACOSX) && BUILDFLAG(MAC_VIEWS_BROWSER)
if (views_mode_controller::IsViewsBrowserCocoa())
ParentToCocoaBrowser(browser, zoom_bubble);
else
ParentToViewsBrowser(browser, zoom_bubble, anchor_view, web_contents);
#elif defined(OS_MACOSX)
ParentToCocoaBrowser(browser, zoom_bubble);
#else
ParentToViewsBrowser(browser, zoom_bubble, anchor_view, web_contents);
#endif
}
} // namespace } // namespace
// static // static
...@@ -129,20 +211,10 @@ void ZoomBubbleView::ShowBubble(content::WebContents* web_contents, ...@@ -129,20 +211,10 @@ void ZoomBubbleView::ShowBubble(content::WebContents* web_contents,
DCHECK(browser->window() && DCHECK(browser->window() &&
browser->exclusive_access_manager()->fullscreen_controller()); browser->exclusive_access_manager()->fullscreen_controller());
views::View* anchor_view = nullptr;
ImmersiveModeController* immersive_mode_controller = nullptr;
bool is_fullscreen = browser->window()->IsFullscreen(); bool is_fullscreen = browser->window()->IsFullscreen();
#if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER) views::View* anchor_view = GetAnchorViewForBrowser(browser, is_fullscreen);
BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser); ImmersiveModeController* immersive_mode_controller =
if (!is_fullscreen || GetImmersiveModeControllerForBrowser(browser);
browser_view->immersive_mode_controller()->IsRevealed()) {
if (ui::MaterialDesignController::IsSecondaryUiMaterial())
anchor_view = browser_view->GetLocationBarView();
else
anchor_view = browser_view->GetLocationBarView()->zoom_view();
}
immersive_mode_controller = browser_view->immersive_mode_controller();
#endif
// Find the extension that initiated the zoom change, if any. // Find the extension that initiated the zoom change, if any.
zoom::ZoomController* zoom_controller = zoom::ZoomController* zoom_controller =
...@@ -173,25 +245,7 @@ void ZoomBubbleView::ShowBubble(content::WebContents* web_contents, ...@@ -173,25 +245,7 @@ void ZoomBubbleView::ShowBubble(content::WebContents* web_contents,
->extension()); ->extension());
} }
#if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER) ParentToBrowser(browser, zoom_bubble_, anchor_view, web_contents);
// If we do not have an anchor view, parent the bubble to the content area.
if (!anchor_view)
zoom_bubble_->set_parent_window(web_contents->GetNativeView());
views::Widget* zoom_bubble_widget =
views::BubbleDialogDelegateView::CreateBubble(zoom_bubble_);
if (zoom_bubble_widget && anchor_view) {
browser_view->GetLocationBarView()->zoom_view()->OnBubbleWidgetCreated(
zoom_bubble_widget);
}
#else
gfx::NativeView parent =
platform_util::GetViewForWindow(browser->window()->GetNativeWindow());
DCHECK(parent);
zoom_bubble_->set_arrow(views::BubbleBorder::TOP_RIGHT);
zoom_bubble_->set_parent_window(parent);
views::BubbleDialogDelegateView::CreateBubble(zoom_bubble_);
#endif
// Adjust for fullscreen after creation as it relies on the content size. // Adjust for fullscreen after creation as it relies on the content size.
if (is_fullscreen) if (is_fullscreen)
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/ui/test/test_browser_dialog.h" #include "chrome/browser/ui/test/test_browser_dialog.h"
#include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/views/scoped_macviews_browser_mode.h"
#include "ui/base/ui_features.h" #include "ui/base/ui_features.h"
#include "ui/views/test/test_widget_observer.h" #include "ui/views/test/test_widget_observer.h"
...@@ -40,6 +41,11 @@ void ShowInActiveTab(Browser* browser) { ...@@ -40,6 +41,11 @@ void ShowInActiveTab(Browser* browser) {
} // namespace } // namespace
class ZoomBubbleViewsBrowserTest : public ZoomBubbleBrowserTest {
private:
test::ScopedMacViewsBrowserMode views_mode_{true};
};
// TODO(linux_aura) http://crbug.com/163931 // TODO(linux_aura) http://crbug.com/163931
#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA) #if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA)
#define MAYBE_NonImmersiveFullscreen DISABLED_NonImmersiveFullscreen #define MAYBE_NonImmersiveFullscreen DISABLED_NonImmersiveFullscreen
...@@ -49,7 +55,8 @@ void ShowInActiveTab(Browser* browser) { ...@@ -49,7 +55,8 @@ void ShowInActiveTab(Browser* browser) {
#if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER) #if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER)
// Test whether the zoom bubble is anchored and whether it is visible when in // Test whether the zoom bubble is anchored and whether it is visible when in
// non-immersive fullscreen. // non-immersive fullscreen.
IN_PROC_BROWSER_TEST_F(ZoomBubbleBrowserTest, MAYBE_NonImmersiveFullscreen) { IN_PROC_BROWSER_TEST_F(ZoomBubbleViewsBrowserTest,
MAYBE_NonImmersiveFullscreen) {
BrowserView* browser_view = static_cast<BrowserView*>(browser()->window()); BrowserView* browser_view = static_cast<BrowserView*>(browser()->window());
content::WebContents* web_contents = browser_view->GetActiveWebContents(); content::WebContents* web_contents = browser_view->GetActiveWebContents();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment