| Index: chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl.cc
|
| diff --git a/chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl.cc b/chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl.cc
|
| index ad69808749ce7dd72bfd8aedcdc801c2c8f82e9b..a8ff8a1c1813494797c0692fcaa9f9fc3705f956 100644
|
| --- a/chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl.cc
|
| +++ b/chrome/browser/ui/webui/media_router/media_router_dialog_controller_impl.cc
|
| @@ -15,6 +15,8 @@
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/ui/browser_finder.h"
|
| #include "chrome/browser/ui/browser_window.h"
|
| +#include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| +#include "chrome/browser/ui/toolbar/component_toolbar_actions_factory.h"
|
| #include "chrome/browser/ui/toolbar/media_router_action.h"
|
| #include "chrome/browser/ui/webui/constrained_web_dialog_ui.h"
|
| #include "chrome/browser/ui/webui/media_router/media_router_ui.h"
|
| @@ -52,10 +54,9 @@ constexpr const int kWidth = 340;
|
| // will look like.
|
| class MediaRouterDialogDelegate : public WebDialogDelegate {
|
| public:
|
| - MediaRouterDialogDelegate(base::WeakPtr<MediaRouterAction> action,
|
| + explicit MediaRouterDialogDelegate(
|
| const base::WeakPtr<MediaRouterDialogControllerImpl>& controller)
|
| - : action_(action),
|
| - controller_(controller) {}
|
| + : controller_(controller) {}
|
| ~MediaRouterDialogDelegate() override {}
|
|
|
| // WebDialogDelegate implementation.
|
| @@ -77,7 +78,13 @@ class MediaRouterDialogDelegate : public WebDialogDelegate {
|
| // MediaRouterUI adds its own message handlers.
|
| }
|
|
|
| - void GetDialogSize(gfx::Size* size) const override;
|
| + void GetDialogSize(gfx::Size* size) const override {
|
| + DCHECK(size);
|
| + // GetDialogSize() is called when the browser window resizes. We may want to
|
| + // update the maximum height of the dialog and scale the WebUI to the new
|
| + // height. |size| is not set because the dialog is auto-resizeable.
|
| + controller_->UpdateMaxDialogSize();
|
| + }
|
|
|
| std::string GetDialogArgs() const override {
|
| return std::string();
|
| @@ -86,8 +93,6 @@ class MediaRouterDialogDelegate : public WebDialogDelegate {
|
| void OnDialogClosed(const std::string& json_retval) override {
|
| // We don't delete |this| here because this class is owned
|
| // by ConstrainedWebDialogDelegate.
|
| - if (action_)
|
| - action_->OnPopupHidden();
|
| }
|
|
|
| void OnCloseContents(WebContents* source, bool* out_close_dialog) override {
|
| @@ -100,20 +105,11 @@ class MediaRouterDialogDelegate : public WebDialogDelegate {
|
| }
|
|
|
| private:
|
| - base::WeakPtr<MediaRouterAction> action_;
|
| base::WeakPtr<MediaRouterDialogControllerImpl> controller_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(MediaRouterDialogDelegate);
|
| };
|
|
|
| -void MediaRouterDialogDelegate::GetDialogSize(gfx::Size* size) const {
|
| - DCHECK(size);
|
| - // GetDialogSize() is called when the browser window resizes. We may want to
|
| - // update the maximum height of the dialog and scale the WebUI to the new
|
| - // height. |size| is not set because the dialog is auto-resizeable.
|
| - controller_->UpdateMaxDialogSize();
|
| -}
|
| -
|
| } // namespace
|
|
|
| // static
|
| @@ -160,7 +156,10 @@ MediaRouterDialogControllerImpl::MediaRouterDialogControllerImpl(
|
| WebContents* web_contents)
|
| : MediaRouterDialogController(web_contents),
|
| media_router_dialog_pending_(false),
|
| + tab_strip_model_observer_(this),
|
| weak_ptr_factory_(this) {
|
| + tab_strip_model_observer_.Add(
|
| + chrome::FindBrowserWithWebContents(initiator())->tab_strip_model());
|
| }
|
|
|
| MediaRouterDialogControllerImpl::~MediaRouterDialogControllerImpl() {
|
| @@ -173,12 +172,7 @@ WebContents* MediaRouterDialogControllerImpl::GetMediaRouterDialog() const {
|
|
|
| void MediaRouterDialogControllerImpl::SetMediaRouterAction(
|
| const base::WeakPtr<MediaRouterAction>& action) {
|
| - if (!action_)
|
| - action_ = action;
|
| -}
|
| -
|
| -bool MediaRouterDialogControllerImpl::IsShowingMediaRouterDialog() const {
|
| - return GetMediaRouterDialog() != nullptr;
|
| + action_ = action;
|
| }
|
|
|
| void MediaRouterDialogControllerImpl::UpdateMaxDialogSize() {
|
| @@ -208,6 +202,25 @@ void MediaRouterDialogControllerImpl::UpdateMaxDialogSize() {
|
| }
|
| }
|
|
|
| +bool MediaRouterDialogControllerImpl::IsShowingMediaRouterDialog() const {
|
| + return GetMediaRouterDialog() != nullptr;
|
| +}
|
| +
|
| +bool MediaRouterDialogControllerImpl::ShowMediaRouterDialog() {
|
| + if (!action_)
|
| + ShowMediaRouterAction();
|
| + return MediaRouterDialogController::ShowMediaRouterDialog();
|
| +}
|
| +
|
| +void MediaRouterDialogControllerImpl::ActiveTabChanged(
|
| + content::WebContents* old_contents,
|
| + content::WebContents* new_contents,
|
| + int index,
|
| + int reason) {
|
| + if (IsShowingMediaRouterDialog() && !action_)
|
| + ShowMediaRouterAction();
|
| +}
|
| +
|
| void MediaRouterDialogControllerImpl::CloseMediaRouterDialog() {
|
| WebContents* media_router_dialog = GetMediaRouterDialog();
|
| if (!media_router_dialog)
|
| @@ -235,7 +248,7 @@ void MediaRouterDialogControllerImpl::CreateMediaRouterDialog() {
|
| // |web_dialog_delegate|'s owner is |constrained_delegate|.
|
| // |constrained_delegate| is owned by the parent |views::View|.
|
| WebDialogDelegate* web_dialog_delegate =
|
| - new MediaRouterDialogDelegate(action_, weak_ptr_factory_.GetWeakPtr());
|
| + new MediaRouterDialogDelegate(weak_ptr_factory_.GetWeakPtr());
|
|
|
| // |ShowConstrainedWebDialogWithAutoResize()| will end up creating
|
| // ConstrainedWebDialogDelegateViewViews containing a WebContents containing
|
| @@ -266,14 +279,15 @@ void MediaRouterDialogControllerImpl::CreateMediaRouterDialog() {
|
|
|
| dialog_observer_.reset(new DialogWebContentsObserver(
|
| media_router_dialog, this));
|
| -
|
| - if (action_)
|
| - action_->OnPopupShown();
|
| }
|
|
|
| void MediaRouterDialogControllerImpl::Reset() {
|
| MediaRouterDialogController::Reset();
|
| dialog_observer_.reset();
|
| + if (action_) {
|
| + action_->OnDialogHidden();
|
| + action_->MaybeRemoveAction();
|
| + }
|
| }
|
|
|
| void MediaRouterDialogControllerImpl::OnDialogNavigated(
|
| @@ -295,6 +309,9 @@ void MediaRouterDialogControllerImpl::OnDialogNavigated(
|
| media_router_dialog_pending_ = false;
|
|
|
| PopulateDialog(media_router_dialog);
|
| +
|
| + if (action_)
|
| + action_->OnDialogShown();
|
| }
|
|
|
| void MediaRouterDialogControllerImpl::PopulateDialog(
|
| @@ -325,4 +342,19 @@ void MediaRouterDialogControllerImpl::PopulateDialog(
|
| }
|
| }
|
|
|
| +void MediaRouterDialogControllerImpl::ShowMediaRouterAction() {
|
| + Profile* profile =
|
| + Profile::FromBrowserContext(initiator()->GetBrowserContext());
|
| + if (!profile)
|
| + return;
|
| +
|
| + ToolbarActionsModel* model = ToolbarActionsModel::Get(profile);
|
| + if (model &&
|
| + !model->HasComponentAction(
|
| + ComponentToolbarActionsFactory::kMediaRouterActionId)) {
|
| + model->AddComponentAction(
|
| + ComponentToolbarActionsFactory::kMediaRouterActionId);
|
| + }
|
| +}
|
| +
|
| } // namespace media_router
|
|
|