summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwittman@chromium.org <wittman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-16 00:56:31 +0000
committerwittman@chromium.org <wittman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-16 00:56:31 +0000
commit2735271ca64e47103858895952f546f9a4c8ce2a (patch)
tree8889b2c3dc98cced2088a976c277451e2fa74615
parenta95bf59deab56b939894f38fb8d299f2286405b3 (diff)
downloadchromium_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
-rw-r--r--chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.h2
-rw-r--r--chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.mm8
-rw-r--r--chrome/browser/ui/gtk/constrained_window_gtk.cc4
-rw-r--r--chrome/browser/ui/gtk/constrained_window_gtk.h2
-rw-r--r--chrome/browser/ui/native_web_contents_modal_dialog.h18
-rw-r--r--chrome/browser/ui/native_web_contents_modal_dialog_manager.h10
-rw-r--r--chrome/browser/ui/views/constrained_window_views.cc4
-rw-r--r--chrome/browser/ui/views/constrained_window_views.h2
-rw-r--r--chrome/browser/ui/views/web_contents_modal_dialog_manager_views.cc12
-rw-r--r--chrome/browser/ui/web_contents_modal_dialog.h7
-rw-r--r--chrome/browser/ui/web_contents_modal_dialog_manager.cc2
-rw-r--r--chrome/browser/ui/web_contents_modal_dialog_manager_unittest.cc2
-rw-r--r--chrome/browser/ui/webui/certificate_viewer_webui.cc2
-rw-r--r--chrome/chrome_browser_ui.gypi5
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/': [