Index: components/web_modal/single_popup_manager.h |
diff --git a/components/web_modal/single_popup_manager.h b/components/web_modal/single_popup_manager.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..26a4f0b94b5c33bff1b214a1acfd5d3b3c84d6ed |
--- /dev/null |
+++ b/components/web_modal/single_popup_manager.h |
@@ -0,0 +1,95 @@ |
+// Copyright 2014 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 COMPONENTS_WEB_MODAL_SINGLE_POPUP_MANAGER_H_ |
+#define COMPONENTS_WEB_MODAL_SINGLE_POPUP_MANAGER_H_ |
+ |
+#include "components/web_modal/native_web_contents_modal_dialog.h" |
+ |
+namespace content { |
+class WebContents; |
+} |
+ |
+namespace web_modal { |
+ |
+// Interface from SinglePopupManager to PopupManager. |
+class SinglePopupManagerDelegate { |
Finnur
2014/06/30 13:53:36
I kind of would have expected to see this class wi
Greg Billock
2014/07/01 00:53:05
Not really. It's descending from the modal dlg mgr
|
+ public: |
+ SinglePopupManagerDelegate() {} |
+ virtual ~SinglePopupManagerDelegate() {} |
+ |
+ // Notify the delegate that the dialog is closing. The |
+ // calling SinglePopupManager will be deleted before the end of this call. |
+ virtual void WillClose(NativePopup popup) = 0; |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(SinglePopupManagerDelegate); |
+}; |
+ |
+// Provides an interface for platform-specific UI implementation for popups. |
+// Each object will manage a single NativePopup window during its lifecycle. |
+// The rule of thumb is that only one popup will be shown at a time per tab. |
+// (Exceptions exist.) |
+// |
+// Implementation classes should accept a NativePopup at construction time |
+// and register to be notified when the dialog is closing, so that it can |
+// notify its delegate (WillClose method). |
+class SinglePopupManager { |
+ public: |
+ virtual ~SinglePopupManager() {} |
+ |
+ // If the manager returns non-null to this call, it is bound to a particular |
+ // tab and will be hidden and shown if that tab visibility changes. |
+ virtual content::WebContents* GetBoundWebContents() = 0; |
+ |
+ // Makes the popup visible. |
+ virtual void Show() = 0; |
+ |
+ // Hides the popup without closing it. |
+ virtual void Hide() = 0; |
+ |
+ // Closes the popup. |
+ // This method must call WillClose() on the delegate. |
+ // Important note: this object will be deleted at the close of that |
+ // invocation. |
+ virtual void Close() = 0; |
+ |
+ // Sets focus on the popup. |
+ virtual void Focus() = 0; |
+ |
+ virtual void Pulse() = 0; |
Finnur
2014/06/30 13:53:36
nit: Pulsate the popup, in order to draw the user'
Greg Billock
2014/07/01 00:53:05
Done.
|
+ |
+ // Returns the popup under management by this object. |
+ virtual NativePopup popup() = 0; |
+ |
+ // Returns true if the popup under management was initiated by a user |
+ // gesture. When this is true, the popup manager will hide any existing |
+ // popups and move the newly-created NativePopup to the top of the display |
+ // queue. |
+ virtual bool HasUserGesture() = 0; |
+ |
+ // Returns true if the popup under management is tolerant of being overlapped |
+ // by other popups. This may be true for large web-modals which cover most of |
+ // the window real estate (e.g. print preview). |
+ virtual bool MayBeOverlapped() = 0; |
+ |
+ // Returns true if the popup under management should close if there is a |
+ // navigation underneath it, including the showing of any interstitial |
+ // content. Popups which relate to the web content being displayed will |
+ // ordinarily set this to true. |
+ // TODO(gbillock): should be generalized in code location or by splitting |
+ // the API to support the same-origin logic in WCMDM::DidNavigateMainFrame. |
+ // TBD right now because we're not sure which knobs need to be set here. |
+ virtual bool ShouldCloseOnNavigation() = 0; |
+ |
+ protected: |
+ SinglePopupManager() {} |
Finnur
2014/06/30 13:53:36
nit: You have two ctors and two dtors in this .h f
Greg Billock
2014/07/01 00:53:05
These are interface stubs, which my impression was
|
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(SinglePopupManager); |
+}; |
+ |
+} // namespace web_modal |
+ |
+#endif // COMPONENTS_WEB_MODAL_SINGLE_POPUP_MANAGER_H_ |