Index: chrome/browser/ui/views/extensions/extension_popup.cc |
diff --git a/chrome/browser/ui/views/extensions/extension_popup.cc b/chrome/browser/ui/views/extensions/extension_popup.cc |
index fabbcddf729cfe35ad10f6d35b70209de90cae2a..6b7c85009ac1ff515c9f56e58d668c5816dd438d 100644 |
--- a/chrome/browser/ui/views/extensions/extension_popup.cc |
+++ b/chrome/browser/ui/views/extensions/extension_popup.cc |
@@ -16,13 +16,9 @@ |
#include "content/public/browser/notification_source.h" |
#include "content/public/browser/render_view_host.h" |
#include "content/public/browser/web_contents.h" |
-#include "ui/aura/window.h" |
#include "ui/gfx/geometry/insets.h" |
#include "ui/views/layout/fill_layout.h" |
#include "ui/views/widget/widget.h" |
-#include "ui/wm/core/window_animations.h" |
-#include "ui/wm/core/window_util.h" |
-#include "ui/wm/public/activation_client.h" |
namespace { |
@@ -40,6 +36,18 @@ const int ExtensionPopup::kMinHeight = 25; |
const int ExtensionPopup::kMaxWidth = 800; |
const int ExtensionPopup::kMaxHeight = 600; |
+#if !defined(USE_AURA) |
+// static |
+ExtensionPopup* ExtensionPopup::Create(extensions::ExtensionViewHost* host, |
+ views::View* anchor_view, |
+ views::BubbleBorder::Arrow arrow, |
+ ShowAction show_action) { |
+ auto popup = new ExtensionPopup(host, anchor_view, arrow, show_action); |
+ views::BubbleDelegateView::CreateBubble(popup); |
+ return popup; |
+} |
+#endif |
+ |
ExtensionPopup::ExtensionPopup(extensions::ExtensionViewHost* host, |
views::View* anchor_view, |
views::BubbleBorder::Arrow arrow, |
@@ -138,53 +146,29 @@ void ExtensionPopup::ViewHierarchyChanged( |
CHECK(GetWidget() || !widget_initialized_); |
} |
-void ExtensionPopup::OnWidgetDestroying(views::Widget* widget) { |
- BubbleDelegateView::OnWidgetDestroying(widget); |
- aura::Window* bubble_window = GetWidget()->GetNativeWindow(); |
- aura::client::ActivationClient* activation_client = |
- aura::client::GetActivationClient(bubble_window->GetRootWindow()); |
- // If the popup was being inspected with devtools and the browser window was |
- // closed, then the root window and activation client are already destroyed. |
- if (activation_client) |
- activation_client->RemoveObserver(this); |
-} |
- |
void ExtensionPopup::OnWidgetActivationChanged(views::Widget* widget, |
bool active) { |
- // TODO(msw): Find any remaining crashes related to http://crbug.com/327776 |
- // No calls are expected if the widget isn't initialized or no longer exists. |
- CHECK(widget_initialized_); |
- CHECK(GetWidget()); |
+ if (active && widget == anchor_widget()) |
+ OnAnchorWindowActivation(); |
+} |
- // Close on anchor window activation (ie. user clicked the browser window). |
- if (!inspect_with_devtools_ && widget && active && |
- widget->GetNativeWindow() == anchor_widget()->GetNativeWindow()) |
- GetWidget()->Close(); |
+void ExtensionPopup::ActiveTabChanged(content::WebContents* old_contents, |
+ content::WebContents* new_contents, |
+ int index, |
+ int reason) { |
+ GetWidget()->Close(); |
} |
-void ExtensionPopup::OnWindowActivated(aura::Window* gained_active, |
- aura::Window* lost_active) { |
+void ExtensionPopup::OnAnchorWindowActivation() { |
// TODO(msw): Find any remaining crashes related to http://crbug.com/327776 |
// No calls are expected if the widget isn't initialized or no longer exists. |
CHECK(widget_initialized_); |
CHECK(GetWidget()); |
- // Close on anchor window activation (ie. user clicked the browser window). |
- // DesktopNativeWidgetAura does not trigger the expected browser widget |
- // [de]activation events when activating widgets in its own root window. |
- // This additional check handles those cases. See: http://crbug.com/320889 |
- if (!inspect_with_devtools_ && |
- gained_active == anchor_widget()->GetNativeWindow()) |
+ if (!inspect_with_devtools_) |
GetWidget()->Close(); |
} |
-void ExtensionPopup::ActiveTabChanged(content::WebContents* old_contents, |
- content::WebContents* new_contents, |
- int index, |
- int reason) { |
- GetWidget()->Close(); |
-} |
- |
// static |
ExtensionPopup* ExtensionPopup::ShowPopup(const GURL& url, |
Browser* browser, |
@@ -193,25 +177,13 @@ ExtensionPopup* ExtensionPopup::ShowPopup(const GURL& url, |
ShowAction show_action) { |
extensions::ExtensionViewHost* host = |
extensions::ExtensionViewHostFactory::CreatePopupHost(url, browser); |
- ExtensionPopup* popup = new ExtensionPopup(host, anchor_view, arrow, |
- show_action); |
- views::BubbleDelegateView::CreateBubble(popup); |
- |
- gfx::NativeView native_view = popup->GetWidget()->GetNativeView(); |
- wm::SetWindowVisibilityAnimationType( |
- native_view, wm::WINDOW_VISIBILITY_ANIMATION_TYPE_VERTICAL); |
- wm::SetWindowVisibilityAnimationVerticalPosition(native_view, -3.0f); |
+ auto popup = ExtensionPopup::Create(host, anchor_view, arrow, show_action); |
// If the host had somehow finished loading, then we'd miss the notification |
// and not show. This seems to happen in single-process mode. |
if (host->did_stop_loading()) |
popup->ShowBubble(); |
- aura::Window* bubble_window = popup->GetWidget()->GetNativeWindow(); |
- aura::client::ActivationClient* activation_client = |
- aura::client::GetActivationClient(bubble_window->GetRootWindow()); |
- activation_client->AddObserver(popup); |
- |
return popup; |
} |