Index: chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.h |
diff --git a/chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.h b/chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.h |
index 4a75f5bf94b4255cfe471d4263f7c1ec2d95d3ba..94b77e89e0f52a21c18097e0d3c8588e83589368 100644 |
--- a/chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.h |
+++ b/chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.h |
@@ -5,14 +5,32 @@ |
#ifndef CHROME_BROWSER_UI_JAVASCRIPT_DIALOGS_JAVASCRIPT_DIALOG_TAB_HELPER_H_ |
#define CHROME_BROWSER_UI_JAVASCRIPT_DIALOGS_JAVASCRIPT_DIALOG_TAB_HELPER_H_ |
+#include <memory> |
+ |
#include "base/macros.h" |
+#include "base/memory/weak_ptr.h" |
+#include "chrome/browser/ui/browser_list_observer.h" |
#include "content/public/browser/javascript_dialog_manager.h" |
#include "content/public/browser/web_contents_observer.h" |
#include "content/public/browser/web_contents_user_data.h" |
+class JavaScriptDialogViews; |
+ |
+// A class, attached to WebContentses in browser windows, that is the |
+// JavaScriptDialogManager for them and handles displaying their dialogs. |
+// |
+// This is the primary mechanism for implementing auto-dismissing dialogs, |
+// dialogs that close when the user switches away. Because JavaScript dialogs |
Peter Kasting
2016/10/18 16:59:55
Nit: away -> to another tab?
Avi (use Gerrit)
2016/10/18 17:06:07
Done.
|
+// are synchronous and block arbitrary sets of renderers, they cannot be made |
+// tab-modal. Therefore the next best option is to make them auto-closing, so |
+// that they never block the user's access to other renderers. |
+// |
+// See http://bit.ly/project-oldspice for more details. Note that only part |
+// one of that design is implemented. |
class JavaScriptDialogTabHelper |
- : public content::WebContentsObserver, |
- public content::JavaScriptDialogManager, |
+ : public content::JavaScriptDialogManager, |
+ public content::WebContentsObserver, |
+ public chrome::BrowserListObserver, |
public content::WebContentsUserData<JavaScriptDialogTabHelper> { |
public: |
explicit JavaScriptDialogTabHelper(content::WebContents* web_contents); |
@@ -35,11 +53,28 @@ class JavaScriptDialogTabHelper |
void CancelDialogs(content::WebContents* web_contents, |
bool suppress_callbacks, |
bool reset_state) override; |
- void WebContentsDestroyed() override; |
+ |
+ // WebContentsObserver: |
+ void WasHidden() override; |
+ |
+ // BrowserListObserver: |
+ void OnBrowserSetLastActive(Browser* browser) override; |
private: |
friend class content::WebContentsUserData<JavaScriptDialogTabHelper>; |
+ void CloseDialog(bool suppress_callback, |
+ bool success, |
+ const base::string16& user_input); |
+ |
+ // The dialog being displayed on the observed WebContents. |
+ base::WeakPtr<JavaScriptDialogViews> dialog_; |
+ |
+ // The callback provided for when the dialog is closed. Usually the dialog |
+ // itself calls it, but in the cases where the dialog is closed not by the |
+ // user's input but by a call to |CloseDialog|, this class will call it. |
+ content::JavaScriptDialogManager::DialogClosedCallback dialog_callback_; |
+ |
DISALLOW_COPY_AND_ASSIGN(JavaScriptDialogTabHelper); |
}; |