Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2388)

Unified Diff: chrome/browser/ui/extensions/extension_action_view_controller.cc

Issue 1105713002: [Extension Toolbar] Slide out overflowed actions for popups (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Latest master Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/extensions/extension_action_view_controller.cc
diff --git a/chrome/browser/ui/extensions/extension_action_view_controller.cc b/chrome/browser/ui/extensions/extension_action_view_controller.cc
index 76ab240c405e324819e8e3c69c4065e7956c8ab6..10b796b090c08191400209188105ee9b520ddda1 100644
--- a/chrome/browser/ui/extensions/extension_action_view_controller.cc
+++ b/chrome/browser/ui/extensions/extension_action_view_controller.cc
@@ -11,6 +11,7 @@
#include "chrome/browser/extensions/extension_action.h"
#include "chrome/browser/extensions/extension_view.h"
#include "chrome/browser/extensions/extension_view_host.h"
+#include "chrome/browser/extensions/extension_view_host_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sessions/session_tab_helper.h"
#include "chrome/browser/ui/browser.h"
@@ -18,10 +19,12 @@
#include "chrome/browser/ui/extensions/extension_action_platform_delegate.h"
#include "chrome/browser/ui/toolbar/toolbar_action_view_delegate.h"
#include "chrome/browser/ui/toolbar/toolbar_actions_bar.h"
+#include "chrome/browser/ui/toolbar/toolbar_actions_bar.h"
#include "chrome/common/extensions/api/extension_action/action_info.h"
#include "extensions/browser/extension_host.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/common/extension.h"
+#include "extensions/common/feature_switch.h"
#include "extensions/common/manifest_constants.h"
#include "ui/gfx/image/image_skia.h"
#include "ui/gfx/image/image_skia_operations.h"
@@ -45,7 +48,8 @@ ExtensionActionViewController::ExtensionActionViewController(
icon_observer_(nullptr),
extension_registry_(
extensions::ExtensionRegistry::Get(browser_->profile())),
- popup_host_observer_(this) {
+ popup_host_observer_(this),
+ weak_factory_(this) {
DCHECK(extension_action);
DCHECK(extension_action->action_type() == ActionInfo::TYPE_PAGE ||
extension_action->action_type() == ActionInfo::TYPE_BROWSER);
@@ -199,7 +203,7 @@ bool ExtensionActionViewController::ExecuteAction(PopupShowAction show_action,
GURL popup_url = extension_action_->GetPopupUrl(
SessionTabHelper::IdForTab(view_delegate_->GetCurrentWebContents()));
return GetPreferredPopupViewController()
- ->ShowPopupWithUrl(show_action, popup_url, grant_tab_permissions);
+ ->TriggerPopupWithUrl(show_action, popup_url, grant_tab_permissions);
}
return false;
}
@@ -254,6 +258,12 @@ void ExtensionActionViewController::HideActivePopup() {
}
}
+void ExtensionActionViewController::OnMenuClosed() {
+ if (toolbar_actions_bar_->popped_out_action() == this &&
+ !is_showing_popup())
+ toolbar_actions_bar_->UndoPopOut();
+}
+
bool ExtensionActionViewController::GetExtensionCommand(
extensions::Command* command) {
DCHECK(command);
@@ -279,7 +289,7 @@ ExtensionActionViewController::GetPreferredPopupViewController() {
return this;
}
-bool ExtensionActionViewController::ShowPopupWithUrl(
+bool ExtensionActionViewController::TriggerPopupWithUrl(
PopupShowAction show_action,
const GURL& popup_url,
bool grant_tab_permissions) {
@@ -298,21 +308,56 @@ bool ExtensionActionViewController::ShowPopupWithUrl(
if (already_showing)
return false;
- popup_host_ = platform_delegate_->ShowPopupWithUrl(
- show_action, popup_url, grant_tab_permissions);
- if (popup_host_) {
- popup_host_observer_.Add(popup_host_);
- if (toolbar_actions_bar_)
- toolbar_actions_bar_->SetPopupOwner(this);
- view_delegate_->OnPopupShown(grant_tab_permissions);
+ scoped_ptr<extensions::ExtensionViewHost> host(
+ extensions::ExtensionViewHostFactory::CreatePopupHost(popup_url,
+ browser_));
+ if (!host)
+ return false;
+
+ popup_host_ = host.get();
+ popup_host_observer_.Add(popup_host_);
+ if (toolbar_actions_bar_)
+ toolbar_actions_bar_->SetPopupOwner(this);
+
+ if (toolbar_actions_bar_ &&
+ !toolbar_actions_bar_->IsActionVisible(this) &&
+ extensions::FeatureSwitch::extension_action_redesign()->IsEnabled()) {
+ platform_delegate_->CloseOverflowMenu();
+ toolbar_actions_bar_->PopOutAction(
+ this,
+ base::Bind(&ExtensionActionViewController::ShowPopup,
+ weak_factory_.GetWeakPtr(),
+ base::Passed(host.Pass()),
+ grant_tab_permissions,
+ show_action));
+ } else {
+ ShowPopup(host.Pass(), grant_tab_permissions, show_action);
}
- return is_showing_popup();
+
+ return true;
+}
+
+void ExtensionActionViewController::ShowPopup(
+ scoped_ptr<extensions::ExtensionViewHost> popup_host,
+ bool grant_tab_permissions,
+ PopupShowAction show_action) {
+ // It's possible that the popup should be closed before it finishes opening
+ // (since it can open asynchronously). Check before proceeding.
+ if (!popup_host_)
+ return;
+ platform_delegate_->ShowPopup(
+ popup_host.Pass(), grant_tab_permissions, show_action);
+ view_delegate_->OnPopupShown(grant_tab_permissions);
}
void ExtensionActionViewController::OnPopupClosed() {
popup_host_observer_.Remove(popup_host_);
popup_host_ = nullptr;
- if (toolbar_actions_bar_)
+ if (toolbar_actions_bar_) {
toolbar_actions_bar_->SetPopupOwner(nullptr);
+ if (toolbar_actions_bar_->popped_out_action() == this &&
+ !platform_delegate_->IsMenuRunning())
+ toolbar_actions_bar_->UndoPopOut();
+ }
view_delegate_->OnPopupClosed();
}

Powered by Google App Engine
This is Rietveld 408576698