// Copyright 2016 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_JAVASCRIPT_DIALOGS_TAB_MODAL_DIALOG_MANAGER_H_ #define COMPONENTS_JAVASCRIPT_DIALOGS_TAB_MODAL_DIALOG_MANAGER_H_ #include <memory> #include "base/functional/callback_forward.h" #include "base/memory/weak_ptr.h" #include "build/build_config.h" #include "components/javascript_dialogs/tab_modal_dialog_manager_delegate.h" #include "components/javascript_dialogs/tab_modal_dialog_view.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" namespace javascript_dialogs { // A class that serves as the JavaScriptDialogManager for tab modal JavaScript // dialogs. // // This implements two different functionalities for JavaScript dialogs. // // window.alert() dialogs are tab-modal dialogs. If a tab calls alert() while it // is foremost, a dialog is displayed and the renderer is held blocked. When the // user switches to a different tab, or if the dialog is shown while the tab is // not foremost, while the dialog is shown, the renderer is not held blocked. // // window.confirm() and window.prompt() dialogs are auto-dismissing, // dialogs that close when the user switches away to a different tab. Because // JavaScript dialogs 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. // // References: // http://bit.ly/project-oldspice class TabModalDialogManager : public content::JavaScriptDialogManager, public content::WebContentsObserver, public content::WebContentsUserData<TabModalDialogManager> { … }; } // namespace javascript_dialogs #endif // COMPONENTS_JAVASCRIPT_DIALOGS_TAB_MODAL_DIALOG_MANAGER_H_