Index: chrome/browser/ui/webui/constrained_web_dialog_delegate_base.h |
diff --git a/chrome/browser/ui/webui/constrained_web_dialog_delegate_base.h b/chrome/browser/ui/webui/constrained_web_dialog_delegate_base.h |
index 606d59d866e6dcdd6d12d9b4c8853732533ce482..3b2d37241258f4d3652040f6fe26b076ee0e82c6 100644 |
--- a/chrome/browser/ui/webui/constrained_web_dialog_delegate_base.h |
+++ b/chrome/browser/ui/webui/constrained_web_dialog_delegate_base.h |
@@ -9,6 +9,7 @@ |
#include "base/macros.h" |
#include "chrome/browser/ui/webui/constrained_web_dialog_ui.h" |
+#include "content/public/browser/web_contents_observer.h" |
#include "ui/web_dialogs/web_dialog_ui.h" |
#include "ui/web_dialogs/web_dialog_web_contents_delegate.h" |
@@ -23,6 +24,7 @@ class WebDialogDelegate; |
// Platform-agnostic base implementation of ConstrainedWebDialogDelegate. |
class ConstrainedWebDialogDelegateBase |
: public ConstrainedWebDialogDelegate, |
+ public content::WebContentsObserver, |
public ui::WebDialogWebContentsDelegate { |
public: |
// |browser_context| and |delegate| must outlive |this| instance, whereas |
@@ -38,13 +40,16 @@ class ConstrainedWebDialogDelegateBase |
const ui::WebDialogDelegate* GetWebDialogDelegate() const override; |
ui::WebDialogDelegate* GetWebDialogDelegate() override; |
void OnDialogCloseFromWebUI() override; |
- void ReleaseWebContentsOnDialogClose() override; |
+ std::unique_ptr<content::WebContents> ReleaseWebContents() override; |
content::WebContents* GetWebContents() override; |
gfx::NativeWindow GetNativeDialog() override; |
gfx::Size GetMinimumSize() const override; |
gfx::Size GetMaximumSize() const override; |
gfx::Size GetPreferredSize() const override; |
+ // WebContentsObserver interface |
+ void WebContentsDestroyed() override; |
+ |
// WebDialogWebContentsDelegate interface. |
void HandleKeyboardEvent( |
content::WebContents* source, |
@@ -57,15 +62,15 @@ class ConstrainedWebDialogDelegateBase |
std::unique_ptr<ui::WebDialogDelegate> web_dialog_delegate_; |
// Holds the HTML to display in the constrained dialog. |
- std::unique_ptr<content::WebContents> web_contents_; |
+ std::unique_ptr<content::WebContents> web_contents_holder_; |
+ |
+ // Pointer to |web_contents_| that remains valid until it is destroyed. |
+ content::WebContents* web_contents_; |
// Was the dialog closed from WebUI (in which case |web_dialog_delegate_|'s |
// OnDialogClosed() method has already been called)? |
bool closed_via_webui_; |
- // If true, release |web_contents_| on close instead of destroying it. |
- bool release_contents_on_close_; |
- |
std::unique_ptr<WebDialogWebContentsDelegate> override_tab_delegate_; |
DISALLOW_COPY_AND_ASSIGN(ConstrainedWebDialogDelegateBase); |