-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2012 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.
#include <deque>
#include "base/memory/scoped_ptr.h"
-#include "components/web_modal/native_web_contents_modal_dialog_manager.h"
+#include "components/web_modal/single_web_contents_dialog_manager.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/browser/web_contents_user_data.h"
#include "ui/gfx/native_widget_types.h"
// Per-WebContents class to manage WebContents-modal dialogs.
class WebContentsModalDialogManager
- : public NativeWebContentsModalDialogManagerDelegate,
+ : public SingleWebContentsDialogManagerDelegate,
public content::WebContentsObserver,
public content::WebContentsUserData<WebContentsModalDialogManager> {
public:
- virtual ~WebContentsModalDialogManager();
+ ~WebContentsModalDialogManager() override;
WebContentsModalDialogManagerDelegate* delegate() const { return delegate_; }
void SetDelegate(WebContentsModalDialogManagerDelegate* d);
- static NativeWebContentsModalDialogManager* CreateNativeManager(
- NativeWebContentsModalDialogManagerDelegate* native_delegate);
+ static SingleWebContentsDialogManager* CreateNativeWebModalManager(
+ NativeWebContentsModalDialog dialog,
+ SingleWebContentsDialogManagerDelegate* native_delegate);
// Shows the dialog as a web contents modal dialog. The dialog will notify via
// WillClose() when it is being destroyed.
- void ShowDialog(NativeWebContentsModalDialog dialog);
+ void ShowModalDialog(NativeWebContentsModalDialog dialog);
+
+ // Allow clients to supply their own native dialog manager. Suitable for
+ // bubble clients.
+ void ShowDialogWithManager(
+ NativeWebContentsModalDialog dialog,
+ scoped_ptr<SingleWebContentsDialogManager> manager);
// Returns true if any dialogs are active and not closed.
bool IsDialogActive() const;
// Focus the topmost modal dialog. IsDialogActive() must be true when calling
// this function.
- void FocusTopmostDialog();
-
- // Set to true to close the window when a page load starts on the WebContents.
- void SetCloseOnInterstitialPage(NativeWebContentsModalDialog dialog,
- bool close);
+ void FocusTopmostDialog() const;
- // Overriden from NativeWebContentsModalDialogManagerDelegate:
- virtual content::WebContents* GetWebContents() const OVERRIDE;
- // Called when a WebContentsModalDialogs we own is about to be closed.
- virtual void WillClose(NativeWebContentsModalDialog dialog) OVERRIDE;
+ // SingleWebContentsDialogManagerDelegate:
+ content::WebContents* GetWebContents() const override;
+ void WillClose(NativeWebContentsModalDialog dialog) override;
// For testing.
class TestApi {
void CloseAllDialogs() { manager_->CloseAllDialogs(); }
void DidAttachInterstitialPage() { manager_->DidAttachInterstitialPage(); }
- void ResetNativeManager(NativeWebContentsModalDialogManager* delegate) {
- manager_->native_manager_.reset(delegate);
- }
void WebContentsWasShown() { manager_->WasShown(); }
void WebContentsWasHidden() { manager_->WasHidden(); }
private:
explicit WebContentsModalDialogManager(content::WebContents* web_contents);
friend class content::WebContentsUserData<WebContentsModalDialogManager>;
+ friend class PopupManager;
struct DialogState {
- explicit DialogState(NativeWebContentsModalDialog dialog);
+ DialogState(NativeWebContentsModalDialog dialog,
+ scoped_ptr<SingleWebContentsDialogManager> manager);
+ ~DialogState();
NativeWebContentsModalDialog dialog;
- bool close_on_interstitial_webui;
+ scoped_ptr<SingleWebContentsDialogManager> manager;
};
- typedef std::deque<DialogState> WebContentsModalDialogList;
+ typedef std::deque<DialogState*> WebContentsModalDialogList;
// Utility function to get the dialog state for a dialog.
WebContentsModalDialogList::iterator FindDialogState(
void CloseAllDialogs();
// Overridden from content::WebContentsObserver:
- virtual void DidNavigateMainFrame(
+ void DidNavigateMainFrame(
const content::LoadCommittedDetails& details,
- const content::FrameNavigateParams& params) OVERRIDE;
- virtual void DidGetIgnoredUIEvent() OVERRIDE;
- virtual void WasShown() OVERRIDE;
- virtual void WasHidden() OVERRIDE;
- virtual void WebContentsDestroyed(content::WebContents* tab) OVERRIDE;
- virtual void DidAttachInterstitialPage() OVERRIDE;
+ const content::FrameNavigateParams& params) override;
+ void DidGetIgnoredUIEvent() override;
+ void WasShown() override;
+ void WasHidden() override;
+ void WebContentsDestroyed() override;
+ void DidAttachInterstitialPage() override;
// Delegate for notifying our owner about stuff. Not owned by us.
WebContentsModalDialogManagerDelegate* delegate_;
- // Delegate for native UI-specific functions on the dialog.
- scoped_ptr<NativeWebContentsModalDialogManager> native_manager_;
-
// All active dialogs.
WebContentsModalDialogList child_dialogs_;