diff options
author | wittman@chromium.org <wittman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-16 00:56:31 +0000 |
---|---|---|
committer | wittman@chromium.org <wittman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-16 00:56:31 +0000 |
commit | 2735271ca64e47103858895952f546f9a4c8ce2a (patch) | |
tree | 8889b2c3dc98cced2088a976c277451e2fa74615 | |
parent | a95bf59deab56b939894f38fb8d299f2286405b3 (diff) | |
download | chromium_src-2735271ca64e47103858895952f546f9a4c8ce2a.zip chromium_src-2735271ca64e47103858895952f546f9a4c8ce2a.tar.gz chromium_src-2735271ca64e47103858895952f546f9a4c8ce2a.tar.bz2 |
Use a uniform opaque type to represent web contents modal dialogs
Since the WebContentsModalDialog interface is going away, the
platform-independent code in WebContentsModalDialogManager requires an
opaque type with which to identify dialogs.
In a first attempt at this under https://codereview.chromium.org/12224020,
comments indicated that the Mac implementation of the web contents
modal dialog does not fit any of the abstracted native types provided
by ui/gfx/native_widget_types.h. So, define a special typedef
NativeWebContentsModalDialog that uses the existing gfx::NativeView
abstraction on platforms where supported, mainly to document the expected
type. On Mac, we use a void* which is the preferred type for this, per
Sailesh in comments in this review.
BUG=157161
Review URL: https://chromiumcodereview.appspot.com/12221055
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@182878 0039d316-1c4b-4281-b951-d872f2087c98
14 files changed, 53 insertions, 27 deletions
diff --git a/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.h b/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.h index bf45405..93c6c44 100644 --- a/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.h +++ b/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.h @@ -43,7 +43,7 @@ class ConstrainedWindowMac : public WebContentsModalDialog, virtual void CloseWebContentsModalDialog() OVERRIDE; virtual void FocusWebContentsModalDialog() OVERRIDE; virtual void PulseWebContentsModalDialog() OVERRIDE; - virtual gfx::NativeWindow GetNativeWindow() OVERRIDE; + virtual NativeWebContentsModalDialog GetNativeDialog() OVERRIDE; // content::NotificationObserver: virtual void Observe(int type, diff --git a/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.mm b/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.mm index 80ca7e0..7240b9a 100644 --- a/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.mm +++ b/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.mm @@ -76,9 +76,11 @@ void ConstrainedWindowMac::PulseWebContentsModalDialog() { pulseSheet:sheet_]; } -gfx::NativeWindow ConstrainedWindowMac::GetNativeWindow() { - NOTREACHED(); - return nil; +NativeWebContentsModalDialog ConstrainedWindowMac::GetNativeDialog() { + // TODO(wittman): Ultimately this should be changed to the + // ConstrainedWindowSheet pointer, in conjunction with the corresponding + // changes to NativeWebContentsModalDialogManagerCocoa. + return this; } void ConstrainedWindowMac::Observe( diff --git a/chrome/browser/ui/gtk/constrained_window_gtk.cc b/chrome/browser/ui/gtk/constrained_window_gtk.cc index a280ffe..1b1b474 100644 --- a/chrome/browser/ui/gtk/constrained_window_gtk.cc +++ b/chrome/browser/ui/gtk/constrained_window_gtk.cc @@ -119,8 +119,8 @@ void ConstrainedWindowGtk::FocusWebContentsModalDialog() { void ConstrainedWindowGtk::PulseWebContentsModalDialog() { } -gfx::NativeWindow ConstrainedWindowGtk::GetNativeWindow() { - return GTK_WINDOW(gtk_widget_get_toplevel(widget())); +NativeWebContentsModalDialog ConstrainedWindowGtk::GetNativeDialog() { + return widget(); } void ConstrainedWindowGtk::BackgroundColorChanged() { diff --git a/chrome/browser/ui/gtk/constrained_window_gtk.h b/chrome/browser/ui/gtk/constrained_window_gtk.h index a9807bd..9646665 100644 --- a/chrome/browser/ui/gtk/constrained_window_gtk.h +++ b/chrome/browser/ui/gtk/constrained_window_gtk.h @@ -59,7 +59,7 @@ class ConstrainedWindowGtk : public WebContentsModalDialog { virtual void CloseWebContentsModalDialog() OVERRIDE; virtual void FocusWebContentsModalDialog() OVERRIDE; virtual void PulseWebContentsModalDialog() OVERRIDE; - virtual gfx::NativeWindow GetNativeWindow() OVERRIDE; + virtual NativeWebContentsModalDialog GetNativeDialog() OVERRIDE; // Called when the result of GetBackgroundColor may have changed. void BackgroundColorChanged(); diff --git a/chrome/browser/ui/native_web_contents_modal_dialog.h b/chrome/browser/ui/native_web_contents_modal_dialog.h new file mode 100644 index 0000000..3fb6445 --- /dev/null +++ b/chrome/browser/ui/native_web_contents_modal_dialog.h @@ -0,0 +1,18 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_NATIVE_WEB_CONTENTS_MODAL_DIALOG_H_ +#define CHROME_BROWSER_UI_NATIVE_WEB_CONTENTS_MODAL_DIALOG_H_ + +#include "ui/gfx/native_widget_types.h" + +#if defined(OS_MACOSX) +// Use a void* since none of the gfx::Native* types are suitable for +// representing the web contents modal dialog under Cocoa. +typedef void* NativeWebContentsModalDialog; +#else +typedef gfx::NativeView NativeWebContentsModalDialog; +#endif + +#endif // CHROME_BROWSER_UI_NATIVE_WEB_CONTENTS_MODAL_DIALOG_H_ diff --git a/chrome/browser/ui/native_web_contents_modal_dialog_manager.h b/chrome/browser/ui/native_web_contents_modal_dialog_manager.h index 7630b8c..c40596f 100644 --- a/chrome/browser/ui/native_web_contents_modal_dialog_manager.h +++ b/chrome/browser/ui/native_web_contents_modal_dialog_manager.h @@ -5,22 +5,24 @@ #ifndef CHROME_BROWSER_UI_NATIVE_WEB_CONTENTS_MODAL_DIALOG_MANAGER_H_ #define CHROME_BROWSER_UI_NATIVE_WEB_CONTENTS_MODAL_DIALOG_MANAGER_H_ -#include "ui/gfx/native_widget_types.h" +#include "chrome/browser/ui/native_web_contents_modal_dialog.h" // Provides an interface for platform-specific UI implementation for the web // contents modal dialog. class NativeWebContentsModalDialogManager { public: - NativeWebContentsModalDialogManager() {} virtual ~NativeWebContentsModalDialogManager() {} // Starts management of the modal aspects of the dialog. This function should // also register to be notified when the dialog is closing, so that it can // notify the manager. - virtual void ManageDialog(gfx::NativeWindow window) = 0; + virtual void ManageDialog(NativeWebContentsModalDialog dialog) = 0; // Closes the web contents modal dialog. - virtual void CloseDialog(gfx::NativeWindow window) = 0; + virtual void CloseDialog(NativeWebContentsModalDialog dialog) = 0; + + protected: + NativeWebContentsModalDialogManager() {} private: DISALLOW_COPY_AND_ASSIGN(NativeWebContentsModalDialogManager); diff --git a/chrome/browser/ui/views/constrained_window_views.cc b/chrome/browser/ui/views/constrained_window_views.cc index 4ee0fd7..b3f6abc 100644 --- a/chrome/browser/ui/views/constrained_window_views.cc +++ b/chrome/browser/ui/views/constrained_window_views.cc @@ -612,8 +612,8 @@ void ConstrainedWindowViews::FocusWebContentsModalDialog() { void ConstrainedWindowViews::PulseWebContentsModalDialog() { } -gfx::NativeWindow ConstrainedWindowViews::GetNativeWindow() { - return Widget::GetNativeWindow(); +NativeWebContentsModalDialog ConstrainedWindowViews::GetNativeDialog() { + return GetNativeView(); } ConstrainedWindowViews* ConstrainedWindowViews::Create( diff --git a/chrome/browser/ui/views/constrained_window_views.h b/chrome/browser/ui/views/constrained_window_views.h index fef4ab3..88fe027 100644 --- a/chrome/browser/ui/views/constrained_window_views.h +++ b/chrome/browser/ui/views/constrained_window_views.h @@ -43,7 +43,7 @@ class ConstrainedWindowViews : public views::Widget, virtual void CloseWebContentsModalDialog() OVERRIDE; virtual void FocusWebContentsModalDialog() OVERRIDE; virtual void PulseWebContentsModalDialog() OVERRIDE; - virtual gfx::NativeWindow GetNativeWindow() OVERRIDE; + virtual NativeWebContentsModalDialog GetNativeDialog() OVERRIDE; // Factory function for the class (temporary). static ConstrainedWindowViews* Create(content::WebContents* web_contents, diff --git a/chrome/browser/ui/views/web_contents_modal_dialog_manager_views.cc b/chrome/browser/ui/views/web_contents_modal_dialog_manager_views.cc index b5371b4..dc4df3f 100644 --- a/chrome/browser/ui/views/web_contents_modal_dialog_manager_views.cc +++ b/chrome/browser/ui/views/web_contents_modal_dialog_manager_views.cc @@ -45,8 +45,8 @@ class NativeWebContentsModalDialogManagerViews } // NativeWebContentsModalDialogManager overrides - virtual void ManageDialog(gfx::NativeWindow window) OVERRIDE { - views::Widget* widget = GetWidget(window); + virtual void ManageDialog(NativeWebContentsModalDialog dialog) OVERRIDE { + views::Widget* widget = GetWidget(dialog); widget->AddObserver(this); observed_widgets_.insert(widget); widget->set_movement_disabled(true); @@ -74,8 +74,8 @@ class NativeWebContentsModalDialogManagerViews #endif } - virtual void CloseDialog(gfx::NativeWindow window) OVERRIDE { - views::Widget* widget = GetWidget(window); + virtual void CloseDialog(NativeWebContentsModalDialog dialog) OVERRIDE { + views::Widget* widget = GetWidget(dialog); #if defined(USE_ASH) gfx::NativeView view = platform_util::GetParent(widget->GetNativeView()); // Allow the parent to animate again. @@ -92,8 +92,8 @@ class NativeWebContentsModalDialogManagerViews } private: - static views::Widget* GetWidget(gfx::NativeWindow window) { - views::Widget* widget = views::Widget::GetWidgetForNativeWindow(window); + static views::Widget* GetWidget(NativeWebContentsModalDialog dialog) { + views::Widget* widget = views::Widget::GetWidgetForNativeWindow(dialog); DCHECK(widget); return widget; } diff --git a/chrome/browser/ui/web_contents_modal_dialog.h b/chrome/browser/ui/web_contents_modal_dialog.h index 90f8588..f052645 100644 --- a/chrome/browser/ui/web_contents_modal_dialog.h +++ b/chrome/browser/ui/web_contents_modal_dialog.h @@ -5,8 +5,7 @@ #ifndef CHROME_BROWSER_UI_WEB_CONTENTS_MODAL_DIALOG_H_ #define CHROME_BROWSER_UI_WEB_CONTENTS_MODAL_DIALOG_H_ -#include "build/build_config.h" -#include "ui/gfx/native_widget_types.h" +#include "chrome/browser/ui/native_web_contents_modal_dialog.h" /////////////////////////////////////////////////////////////////////////////// // WebContentsModalDialog @@ -29,8 +28,8 @@ class WebContentsModalDialog { // Runs a pulse animation for the web contents modal dialog. virtual void PulseWebContentsModalDialog() = 0; - // Returns the native window of the web contents modal dialog. - virtual gfx::NativeWindow GetNativeWindow() = 0; + // Returns the native representation of the web contents modal dialog. + virtual NativeWebContentsModalDialog GetNativeDialog() = 0; protected: virtual ~WebContentsModalDialog() {} diff --git a/chrome/browser/ui/web_contents_modal_dialog_manager.cc b/chrome/browser/ui/web_contents_modal_dialog_manager.cc index 819580e..c9dd7cd 100644 --- a/chrome/browser/ui/web_contents_modal_dialog_manager.cc +++ b/chrome/browser/ui/web_contents_modal_dialog_manager.cc @@ -26,7 +26,7 @@ void WebContentsModalDialogManager::AddDialog( child_dialogs_.push_back(dialog); if (native_manager_) - native_manager_->ManageDialog(dialog->GetNativeWindow()); + native_manager_->ManageDialog(dialog->GetNativeDialog()); if (child_dialogs_.size() == 1) { dialog->ShowWebContentsModalDialog(); diff --git a/chrome/browser/ui/web_contents_modal_dialog_manager_unittest.cc b/chrome/browser/ui/web_contents_modal_dialog_manager_unittest.cc index f9ea5fa..b905f8a 100644 --- a/chrome/browser/ui/web_contents_modal_dialog_manager_unittest.cc +++ b/chrome/browser/ui/web_contents_modal_dialog_manager_unittest.cc @@ -42,7 +42,7 @@ class WebContentsModalDialogCloseTest : public WebContentsModalDialog { } virtual void FocusWebContentsModalDialog() OVERRIDE {} virtual void PulseWebContentsModalDialog() OVERRIDE {} - virtual gfx::NativeWindow GetNativeWindow() OVERRIDE { + virtual NativeWebContentsModalDialog GetNativeDialog() OVERRIDE { NOTREACHED(); return NULL; } diff --git a/chrome/browser/ui/webui/certificate_viewer_webui.cc b/chrome/browser/ui/webui/certificate_viewer_webui.cc index 2b1ccab..aebfc0a 100644 --- a/chrome/browser/ui/webui/certificate_viewer_webui.cc +++ b/chrome/browser/ui/webui/certificate_viewer_webui.cc @@ -75,7 +75,7 @@ void CertificateViewerDialog::Show(WebContents* web_contents, web_contents->GetBrowserContext(), this, NULL, - web_contents)->GetWindow()->GetNativeWindow(); + web_contents)->GetWindow()->GetNativeDialog(); } ui::ModalType CertificateViewerDialog::GetDialogModalType() const { diff --git a/chrome/chrome_browser_ui.gypi b/chrome/chrome_browser_ui.gypi index 1706ab6..37ff1cf 100644 --- a/chrome/chrome_browser_ui.gypi +++ b/chrome/chrome_browser_ui.gypi @@ -1163,6 +1163,7 @@ 'browser/ui/media_stream_infobar_delegate.cc', 'browser/ui/metro_pin_tab_helper_win.cc', 'browser/ui/metro_pin_tab_helper_win.h', + 'browser/ui/native_web_contents_modal_dialog.h', 'browser/ui/native_web_contents_modal_dialog_manager.h', 'browser/ui/network_profile_bubble.cc', 'browser/ui/network_profile_bubble.h', @@ -2336,6 +2337,10 @@ 'dependencies': [ '../build/linux/system.gyp:udev', ], + 'sources/': [ + ['exclude', '^browser/ui/webui/certificate_viewer_webui.cc'], + ['exclude', '^browser/ui/webui/certificate_viewer_webui.h'], + ], }], ['chromeos==0', { 'sources/': [ |