Commit 04c37c71 authored by Elly Fong-Jones's avatar Elly Fong-Jones Committed by Commit Bot

chromeos: make SimpleWebViewDialog no longer a WidgetDelegate

Now, the WidgetDelegate is separately created and configured by an
instance method, but this class does not inherit from WidgetDelegate
any more or override any of its methods.

Bug: 1075649
Change-Id: I5c2a7f90b120c6fd7e757a537a97df040436f4ab
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2463992
Commit-Queue: Elly Fong-Jones <ellyjones@chromium.org>
Reviewed-by: default avatarSteven Bennetts <stevenjb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#816330}
parent 692bd751
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "components/captive_portal/core/captive_portal_detector.h" #include "components/captive_portal/core/captive_portal_detector.h"
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
#include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util.h"
#include "ui/views/widget/widget_delegate.h"
#include "url/gurl.h" #include "url/gurl.h"
namespace { namespace {
...@@ -38,13 +39,7 @@ namespace chromeos { ...@@ -38,13 +39,7 @@ namespace chromeos {
CaptivePortalView::CaptivePortalView(Profile* profile, CaptivePortalView::CaptivePortalView(Profile* profile,
CaptivePortalWindowProxy* proxy) CaptivePortalWindowProxy* proxy)
: SimpleWebViewDialog(profile), proxy_(proxy), redirected_(false) { : SimpleWebViewDialog(profile), proxy_(proxy), redirected_(false) {}
SetCanResize(false);
SetModalType(ui::MODAL_TYPE_SYSTEM);
SetShowTitle(true);
SetTitle(WindowTitleForNetwork(
NetworkHandler::Get()->network_state_handler()->DefaultNetwork()));
}
CaptivePortalView::~CaptivePortalView() {} CaptivePortalView::~CaptivePortalView() {}
...@@ -78,4 +73,14 @@ void CaptivePortalView::LoadingStateChanged(content::WebContents* source, ...@@ -78,4 +73,14 @@ void CaptivePortalView::LoadingStateChanged(content::WebContents* source,
// proxy_->OnOriginalURLLoaded(); // proxy_->OnOriginalURLLoaded();
} }
std::unique_ptr<views::WidgetDelegate> CaptivePortalView::MakeWidgetDelegate() {
auto delegate = SimpleWebViewDialog::MakeWidgetDelegate();
delegate->SetCanResize(false);
delegate->SetModalType(ui::MODAL_TYPE_SYSTEM);
delegate->SetShowTitle(true);
delegate->SetTitle(WindowTitleForNetwork(
NetworkHandler::Get()->network_state_handler()->DefaultNetwork()));
return delegate;
}
} // namespace chromeos } // namespace chromeos
...@@ -27,6 +27,9 @@ class CaptivePortalView : public SimpleWebViewDialog { ...@@ -27,6 +27,9 @@ class CaptivePortalView : public SimpleWebViewDialog {
void LoadingStateChanged(content::WebContents* source, void LoadingStateChanged(content::WebContents* source,
bool to_different_document) override; bool to_different_document) override;
// Overridden from SimpleWebViewDialog:
std::unique_ptr<views::WidgetDelegate> MakeWidgetDelegate() override;
private: private:
// Contains CaptivePortalWindowProxy to be notified when redirection state is // Contains CaptivePortalWindowProxy to be notified when redirection state is
// resolved. // resolved.
......
...@@ -43,13 +43,14 @@ const ui::ThemeProvider* CaptivePortalWidget::GetThemeProvider() const { ...@@ -43,13 +43,14 @@ const ui::ThemeProvider* CaptivePortalWidget::GetThemeProvider() const {
// The captive portal dialog is system-modal, but uses the web-content-modal // The captive portal dialog is system-modal, but uses the web-content-modal
// dialog manager (odd) and requires this atypical dialog widget initialization. // dialog manager (odd) and requires this atypical dialog widget initialization.
views::Widget* CreateWindowAsFramelessChild(Profile* profile, views::Widget* CreateWindowAsFramelessChild(
views::WidgetDelegate* delegate, Profile* profile,
gfx::NativeView parent) { std::unique_ptr<views::WidgetDelegate> delegate,
gfx::NativeView parent) {
views::Widget* widget = new CaptivePortalWidget(profile); views::Widget* widget = new CaptivePortalWidget(profile);
views::Widget::InitParams params; views::Widget::InitParams params;
params.delegate = delegate; params.delegate = delegate.release();
params.child = true; params.child = true;
params.parent = parent; params.parent = parent;
params.opacity = views::Widget::InitParams::WindowOpacity::kTranslucent; params.opacity = views::Widget::InitParams::WindowOpacity::kTranslucent;
...@@ -100,11 +101,14 @@ void CaptivePortalWindowProxy::Show() { ...@@ -100,11 +101,14 @@ void CaptivePortalWindowProxy::Show() {
InitCaptivePortalView(); InitCaptivePortalView();
CaptivePortalView* portal = captive_portal_view_.release(); std::unique_ptr<views::WidgetDelegate> delegate =
captive_portal_view_->MakeWidgetDelegate();
CaptivePortalView* portal =
delegate->SetContentsView(std::move(captive_portal_view_));
auto* manager = auto* manager =
web_modal::WebContentsModalDialogManager::FromWebContents(web_contents_); web_modal::WebContentsModalDialogManager::FromWebContents(web_contents_);
widget_ = CreateWindowAsFramelessChild( widget_ = CreateWindowAsFramelessChild(
profile_, portal, profile_, std::move(delegate),
manager->delegate()->GetWebContentsModalDialogHost()->GetHostView()); manager->delegate()->GetWebContentsModalDialogHost()->GetHostView());
portal->Init(); portal->Init();
widget_->AddObserver(this); widget_->AddObserver(this);
......
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
#include "ui/views/layout/grid_layout.h" #include "ui/views/layout/grid_layout.h"
#include "ui/views/view.h" #include "ui/views/view.h"
#include "ui/views/widget/widget.h" #include "ui/views/widget/widget.h"
#include "ui/views/widget/widget_delegate.h"
using content::WebContents; using content::WebContents;
using views::GridLayout; using views::GridLayout;
...@@ -246,14 +247,6 @@ void SimpleWebViewDialog::Init() { ...@@ -246,14 +247,6 @@ void SimpleWebViewDialog::Init() {
Layout(); Layout();
} }
void SimpleWebViewDialog::Layout() {
views::WidgetDelegateView::Layout();
}
views::View* SimpleWebViewDialog::GetInitiallyFocusedView() {
return web_view_;
}
void SimpleWebViewDialog::ButtonPressed(views::Button* sender, void SimpleWebViewDialog::ButtonPressed(views::Button* sender,
const ui::Event& event) { const ui::Event& event) {
command_updater_->ExecuteCommand(sender->tag()); command_updater_->ExecuteCommand(sender->tag());
...@@ -335,6 +328,14 @@ void SimpleWebViewDialog::ExecuteCommandWithDisposition(int id, ...@@ -335,6 +328,14 @@ void SimpleWebViewDialog::ExecuteCommandWithDisposition(int id,
} }
} }
std::unique_ptr<views::WidgetDelegate>
SimpleWebViewDialog::MakeWidgetDelegate() {
auto delegate = std::make_unique<views::WidgetDelegate>();
delegate->SetInitiallyFocusedView(web_view_);
delegate->SetOwnedByWidget(true);
return delegate;
}
void SimpleWebViewDialog::LoadImages() { void SimpleWebViewDialog::LoadImages() {
const ui::ThemeProvider* tp = GetThemeProvider(); const ui::ThemeProvider* tp = GetThemeProvider();
......
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
#include "content/public/browser/page_navigator.h" #include "content/public/browser/page_navigator.h"
#include "content/public/browser/web_contents_delegate.h" #include "content/public/browser/web_contents_delegate.h"
#include "ui/views/controls/button/image_button.h" #include "ui/views/controls/button/image_button.h"
#include "ui/views/widget/widget_delegate.h"
#include "url/gurl.h" #include "url/gurl.h"
class CommandUpdaterImpl; class CommandUpdaterImpl;
...@@ -26,6 +25,7 @@ class LocationBarModel; ...@@ -26,6 +25,7 @@ class LocationBarModel;
namespace views { namespace views {
class WebView; class WebView;
class Widget; class Widget;
class WidgetDelegate;
} // namespace views } // namespace views
namespace chromeos { namespace chromeos {
...@@ -38,7 +38,7 @@ class StubBubbleModelDelegate; ...@@ -38,7 +38,7 @@ class StubBubbleModelDelegate;
// to be used for sign in to captive portal on login screen (when Browser // to be used for sign in to captive portal on login screen (when Browser
// isn't running). // isn't running).
class SimpleWebViewDialog : public views::ButtonListener, class SimpleWebViewDialog : public views::ButtonListener,
public views::WidgetDelegateView, public views::View,
public LocationBarView::Delegate, public LocationBarView::Delegate,
public ChromeLocationBarModelDelegate, public ChromeLocationBarModelDelegate,
public CommandUpdaterDelegate, public CommandUpdaterDelegate,
...@@ -54,12 +54,6 @@ class SimpleWebViewDialog : public views::ButtonListener, ...@@ -54,12 +54,6 @@ class SimpleWebViewDialog : public views::ButtonListener,
// Inits view. Should be attached to a Widget before call. // Inits view. Should be attached to a Widget before call.
void Init(); void Init();
// Overridden from views::View:
void Layout() override;
// Overridden from views::WidgetDelegate:
views::View* GetInitiallyFocusedView() override;
// Implements views::ButtonListener: // Implements views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override; void ButtonPressed(views::Button* sender, const ui::Event& event) override;
...@@ -85,6 +79,8 @@ class SimpleWebViewDialog : public views::ButtonListener, ...@@ -85,6 +79,8 @@ class SimpleWebViewDialog : public views::ButtonListener,
// Implements CommandUpdaterDelegate: // Implements CommandUpdaterDelegate:
void ExecuteCommandWithDisposition(int id, WindowOpenDisposition) override; void ExecuteCommandWithDisposition(int id, WindowOpenDisposition) override;
virtual std::unique_ptr<views::WidgetDelegate> MakeWidgetDelegate();
private: private:
friend class SimpleWebViewDialogTest; friend class SimpleWebViewDialogTest;
......
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