diff options
author | oshima <oshima@chromium.org> | 2014-10-24 07:14:32 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-10-24 14:14:55 +0000 |
commit | 82f7248c0e48ee71c4b78f9d305caefc7fa9bab2 (patch) | |
tree | 9ecd0cbb7fbb60805d3d82a466a969558632093e | |
parent | 2a1a687a8175495a41f32df456b03c227059616b (diff) | |
download | chromium_src-82f7248c0e48ee71c4b78f9d305caefc7fa9bab2.zip chromium_src-82f7248c0e48ee71c4b78f9d305caefc7fa9bab2.tar.gz chromium_src-82f7248c0e48ee71c4b78f9d305caefc7fa9bab2.tar.bz2 |
Componentize app_modal_dialog
Notable changes (other than just moving code aruond)
* kJavaScriptMessageExpectedDelay constant has been moved from chrome_constants to javascript_dialog_manager.cc because that's the only place used.
* NOTIFICATION_APP_MODAL_DIALOG_SHOWN notification has been removed and replaced by test only waiter class. (as this notification was used only in tests)
* Moved and creates string resource for app_modal_dialog.
Next step: move dialog implementations to compoents/app_modal_dialogs (javascript_dialog_manager/ javascript_app_modal_dialogs_views/, javascript_app_modal_dialogs_cocoa ....)
BUG=422092
TBR=sky@chromium.org
Review URL: https://codereview.chromium.org/648833004
Cr-Commit-Position: refs/heads/master@{#301095}
39 files changed, 311 insertions, 226 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 2cf6426..95c5903 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd @@ -7176,23 +7176,6 @@ Keep your key file in a safe place. You will need it to create new versions of y About Voice Search </message> - <!-- JavaScript Dialog Box strings --> - <message name="IDS_JAVASCRIPT_ALERT_DEFAULT_TITLE" desc="Title for JavaScript alert originating from a webpage if there is no hostname to display"> - JavaScript Alert - </message> - <message name="IDS_JAVASCRIPT_MESSAGEBOX_DEFAULT_TITLE" desc="Title for JavaScript prompt and confirm originating from a webpage if there is no hostname to display"> - JavaScript - </message> - <message name="IDS_JAVASCRIPT_ALERT_TITLE" desc="Title for JavaScript alert originating from a webpage"> - The page at <ph name="SITE">$1<ex>http://www.google.com</ex></ph> says: - </message> - <message name="IDS_JAVASCRIPT_MESSAGEBOX_TITLE" desc="Title for JavaScript prompt and confirm originating from a webpage"> - The page at <ph name="SITE">$1<ex>http://www.google.com</ex></ph> says: - </message> - <message name="IDS_JAVASCRIPT_MESSAGEBOX_SUPPRESS_OPTION" desc="Optional UI shown on the message box, in the form of a checkbox, allowing the user to suppress additional message boxes from the page."> - Prevent this page from creating additional dialogs. - </message> - <!-- About box strings --> <if expr="is_win"> <message name="IDS_ABOUT_BOX_ERROR_DURING_UPDATE_CHECK" desc="The error label for errors that occurred while checking for updates in the About box."> @@ -7203,34 +7186,6 @@ Keep your key file in a safe place. You will need it to create new versions of y </message> </if> - <!-- "Before Unload" Dialog Box strings --> - <message name="IDS_BEFOREUNLOAD_MESSAGEBOX_TITLE" desc="Title for the 'before unload' dialog."> - Confirm Navigation - </message> - <message name="IDS_BEFOREUNLOAD_MESSAGEBOX_FOOTER" desc="Text shown at the bottom of the dialog, after the message provided by the script."> - Are you sure you want to leave this page? - </message> - <message name="IDS_BEFOREUNLOAD_MESSAGEBOX_OK_BUTTON_LABEL" desc="The text on the button which navigates the user away from the page."> - Leave this Page - </message> - <message name="IDS_BEFOREUNLOAD_MESSAGEBOX_CANCEL_BUTTON_LABEL" desc="The text on the button which cancels the navigation away from the page."> - Stay on this Page - </message> - - <!-- "Before Reload" Dialog Box strings (same as "Before Unload" but when reloading rather than unloading the page --> - <message name="IDS_BEFORERELOAD_MESSAGEBOX_TITLE" desc="Title for the 'before reload' dialog."> - Confirm Reload - </message> - <message name="IDS_BEFORERELOAD_MESSAGEBOX_FOOTER" desc="Text shown at the bottom of the dialog, after the message provided by the script."> - Are you sure you want to reload this page? - </message> - <message name="IDS_BEFORERELOAD_MESSAGEBOX_OK_BUTTON_LABEL" desc="The text on the button which reloads the page."> - Reload this Page - </message> - <message name="IDS_BEFORERELOAD_MESSAGEBOX_CANCEL_BUTTON_LABEL" desc="The text on the button which cancels the page reload."> - Don't Reload - </message> - <!-- Omnibox --> <if expr="not use_titlecase"> <message name="IDS_PASTE_AND_GO" desc="The text label of the Paste And Go menu item when the clipboard contains a URL"> diff --git a/chrome/browser/DEPS b/chrome/browser/DEPS index 8955447..f9572557 100644 --- a/chrome/browser/DEPS +++ b/chrome/browser/DEPS @@ -10,6 +10,7 @@ include_rules = [ "+chrome_elf/create_file", "+chrome_elf/dll_hash", "+chromeos", + "+components/app_modal_dialogs", "+components/autofill/content/browser", "+components/autofill/content/common", "+components/autofill/core/browser", diff --git a/chrome/browser/chrome_notification_types.h b/chrome/browser/chrome_notification_types.h index 4a94b8b..9765dbc 100644 --- a/chrome/browser/chrome_notification_types.h +++ b/chrome/browser/chrome_notification_types.h @@ -124,12 +124,6 @@ enum NotificationType { // handler. Use APP_TERMINATING for such needs. NOTIFICATION_CLOSE_ALL_BROWSERS_REQUEST, - // Application-modal dialogs ----------------------------------------------- - - // Sent after an application-modal dialog has been shown. The source - // is the dialog. - NOTIFICATION_APP_MODAL_DIALOG_SHOWN, - // This message is sent when a new InfoBar has been added to an // InfoBarService. The source is a Source<InfoBarService> with a pointer to // the InfoBarService the InfoBar was added to. The details is a diff --git a/chrome/browser/chromeos/login/signin/oauth2_browsertest.cc b/chrome/browser/chromeos/login/signin/oauth2_browsertest.cc index 721db65..5523b00 100644 --- a/chrome/browser/chromeos/login/signin/oauth2_browsertest.cc +++ b/chrome/browser/chromeos/login/signin/oauth2_browsertest.cc @@ -17,8 +17,6 @@ #include "chrome/browser/chromeos/login/wizard_controller.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" -#include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h" -#include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_tabstrip.h" #include "chrome/browser/ui/scoped_tabbed_browser_displayer.h" @@ -28,6 +26,8 @@ #include "chrome/test/base/ui_test_utils.h" #include "chromeos/login/auth/key.h" #include "chromeos/login/auth/user_context.h" +#include "components/app_modal_dialogs/javascript_app_modal_dialog.h" +#include "components/app_modal_dialogs/native_app_modal_dialog.h" #include "components/signin/core/browser/profile_oauth2_token_service.h" #include "components/user_manager/user.h" #include "components/user_manager/user_manager.h" diff --git a/chrome/browser/devtools/devtools_sanity_browsertest.cc b/chrome/browser/devtools/devtools_sanity_browsertest.cc index eb7d561..64de7c7 100644 --- a/chrome/browser/devtools/devtools_sanity_browsertest.cc +++ b/chrome/browser/devtools/devtools_sanity_browsertest.cc @@ -21,8 +21,6 @@ #include "chrome/browser/extensions/unpacked_installer.h" #include "chrome/browser/lifetime/application_lifetime.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h" -#include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_commands.h" #include "chrome/browser/ui/browser_iterator.h" @@ -34,6 +32,8 @@ #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/test_switches.h" #include "chrome/test/base/ui_test_utils.h" +#include "components/app_modal_dialogs/javascript_app_modal_dialog.h" +#include "components/app_modal_dialogs/native_app_modal_dialog.h" #include "content/public/browser/child_process_data.h" #include "content/public/browser/content_browser_client.h" #include "content/public/browser/devtools_agent_host.h" diff --git a/chrome/browser/extensions/alert_apitest.cc b/chrome/browser/extensions/alert_apitest.cc index 893a9b4..dbd7c55 100644 --- a/chrome/browser/extensions/alert_apitest.cc +++ b/chrome/browser/extensions/alert_apitest.cc @@ -5,9 +5,9 @@ #include "base/strings/utf_string_conversions.h" #include "chrome/browser/extensions/extension_apitest.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog.h" #include "chrome/browser/ui/browser.h" #include "chrome/test/base/ui_test_utils.h" +#include "components/app_modal_dialogs/app_modal_dialog.h" #include "content/public/browser/render_frame_host.h" #include "extensions/browser/extension_host.h" #include "extensions/browser/extension_system.h" diff --git a/chrome/browser/extensions/lazy_background_page_apitest.cc b/chrome/browser/extensions/lazy_background_page_apitest.cc index 2438a5e..509db41 100644 --- a/chrome/browser/extensions/lazy_background_page_apitest.cc +++ b/chrome/browser/extensions/lazy_background_page_apitest.cc @@ -11,13 +11,13 @@ #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/lazy_background_page_test_util.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/location_bar/location_bar.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/common/url_constants.h" #include "chrome/test/base/ui_test_utils.h" +#include "components/app_modal_dialogs/app_modal_dialog.h" #include "components/bookmarks/browser/bookmark_model.h" #include "components/bookmarks/browser/bookmark_utils.h" #include "components/bookmarks/test/bookmark_test_helpers.h" diff --git a/chrome/browser/lifetime/browser_close_manager_browsertest.cc b/chrome/browser/lifetime/browser_close_manager_browsertest.cc index dd5fae9..c0768e7 100644 --- a/chrome/browser/lifetime/browser_close_manager_browsertest.cc +++ b/chrome/browser/lifetime/browser_close_manager_browsertest.cc @@ -21,8 +21,6 @@ #include "chrome/browser/prefs/session_startup_pref.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" -#include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h" -#include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_commands.h" #include "chrome/browser/ui/browser_iterator.h" @@ -32,6 +30,8 @@ #include "chrome/common/url_constants.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" +#include "components/app_modal_dialogs/javascript_app_modal_dialog.h" +#include "components/app_modal_dialogs/native_app_modal_dialog.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/download_item.h" #include "content/public/browser/download_manager.h" @@ -49,50 +49,22 @@ namespace { -class AppModalDialogObserver { - public: - AppModalDialogObserver() {} - - void Start() { - observer_.reset(new content::WindowedNotificationObserver( - chrome::NOTIFICATION_APP_MODAL_DIALOG_SHOWN, - content::NotificationService::AllSources())); - } - - void AcceptClose() { - NativeAppModalDialog* dialog = GetNextDialog(); - ASSERT_TRUE(dialog); - dialog->AcceptAppModalDialog(); - } - - void CancelClose() { - NativeAppModalDialog* dialog = GetNextDialog(); - ASSERT_TRUE(dialog); - dialog->CancelAppModalDialog(); - } - - private: - NativeAppModalDialog* GetNextDialog() { - DCHECK(observer_); - observer_->Wait(); - if (observer_->source() == content::NotificationService::AllSources()) - return NULL; - - AppModalDialog* dialog = - content::Source<AppModalDialog>(observer_->source()).ptr(); - EXPECT_TRUE(dialog->IsJavaScriptModalDialog()); - JavaScriptAppModalDialog* js_dialog = - static_cast<JavaScriptAppModalDialog*>(dialog); - observer_.reset(new content::WindowedNotificationObserver( - chrome::NOTIFICATION_APP_MODAL_DIALOG_SHOWN, - content::NotificationService::AllSources())); - return js_dialog->native_dialog(); - } +NativeAppModalDialog* GetNextDialog() { + AppModalDialog* dialog = ui_test_utils::WaitForAppModalDialog(); + EXPECT_TRUE(dialog->IsJavaScriptModalDialog()); + JavaScriptAppModalDialog* js_dialog = + static_cast<JavaScriptAppModalDialog*>(dialog); + CHECK(js_dialog->native_dialog()); + return js_dialog->native_dialog(); +} - scoped_ptr<content::WindowedNotificationObserver> observer_; +void AcceptClose() { + GetNextDialog()->AcceptAppModalDialog(); +} - DISALLOW_COPY_AND_ASSIGN(AppModalDialogObserver); -}; +void CancelClose() { + GetNextDialog()->CancelAppModalDialog(); +} class RepeatedNotificationObserver : public content::NotificationObserver { public: @@ -242,7 +214,6 @@ class BrowserCloseManagerBrowserTest SessionStartupPref::SetStartupPref( browser()->profile(), SessionStartupPref(SessionStartupPref::LAST)); browsers_.push_back(browser()); - dialogs_.Start(); content::BrowserThread::PostTask( content::BrowserThread::IO, FROM_HERE, @@ -273,7 +244,6 @@ class BrowserCloseManagerBrowserTest } std::vector<Browser*> browsers_; - AppModalDialogObserver dialogs_; }; IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) { @@ -283,7 +253,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) { RepeatedNotificationObserver cancel_observer( chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); chrome::CloseAllBrowsersAndQuit(); - ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); + ASSERT_NO_FATAL_FAILURE(CancelClose()); cancel_observer.Wait(); EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); EXPECT_EQ(1, browser()->tab_strip_model()->count()); @@ -291,7 +261,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) { RepeatedNotificationObserver close_observer( chrome::NOTIFICATION_BROWSER_CLOSED, 1); chrome::CloseAllBrowsersAndQuit(); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); close_observer.Wait(); EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); EXPECT_TRUE(chrome::BrowserIterator().done()); @@ -306,7 +276,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); chrome::CloseAllBrowsersAndQuit(); chrome::CloseAllBrowsersAndQuit(); - ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); + ASSERT_NO_FATAL_FAILURE(CancelClose()); cancel_observer.Wait(); EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); EXPECT_EQ(1, browser()->tab_strip_model()->count()); @@ -315,7 +285,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, chrome::NOTIFICATION_BROWSER_CLOSED, 1); chrome::CloseAllBrowsersAndQuit(); chrome::CloseAllBrowsersAndQuit(); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); close_observer.Wait(); EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); EXPECT_TRUE(chrome::BrowserIterator().done()); @@ -331,7 +301,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, PRE_TestSessionRestore) { RepeatedNotificationObserver cancel_observer( chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); chrome::CloseAllBrowsersAndQuit(); - ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); + ASSERT_NO_FATAL_FAILURE(CancelClose()); cancel_observer.Wait(); EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); @@ -344,7 +314,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, PRE_TestSessionRestore) { GURL(chrome::kChromeUIVersionURL), CURRENT_TAB, ui_test_utils::BROWSER_TEST_NONE)); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); navigation_observer.Wait(); RepeatedNotificationObserver close_observer( @@ -381,7 +351,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestMultipleWindows) { RepeatedNotificationObserver cancel_observer( chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); chrome::CloseAllBrowsersAndQuit(); - ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); + ASSERT_NO_FATAL_FAILURE(CancelClose()); cancel_observer.Wait(); } EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); @@ -393,8 +363,8 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestMultipleWindows) { RepeatedNotificationObserver cancel_observer( chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); chrome::CloseAllBrowsersAndQuit(); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); - ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); + ASSERT_NO_FATAL_FAILURE(CancelClose()); cancel_observer.Wait(); } EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); @@ -405,8 +375,8 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestMultipleWindows) { RepeatedNotificationObserver close_observer( chrome::NOTIFICATION_BROWSER_CLOSED, 2); chrome::CloseAllBrowsersAndQuit(); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); close_observer.Wait(); EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); EXPECT_TRUE(chrome::BrowserIterator().done()); @@ -438,7 +408,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, RepeatedNotificationObserver cancel_observer( chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); chrome::CloseAllBrowsersAndQuit(); - ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); + ASSERT_NO_FATAL_FAILURE(CancelClose()); cancel_observer.Wait(); EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); // All tabs should still be open. @@ -447,7 +417,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, RepeatedNotificationObserver close_observer( chrome::NOTIFICATION_BROWSER_CLOSED, 1); chrome::CloseAllBrowsersAndQuit(); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); close_observer.Wait(); EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); EXPECT_TRUE(chrome::BrowserIterator().done()); @@ -471,7 +441,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, RepeatedNotificationObserver cancel_observer( chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); chrome::CloseAllBrowsersAndQuit(); - ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); + ASSERT_NO_FATAL_FAILURE(CancelClose()); cancel_observer.Wait(); EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); // All windows should still be open. @@ -482,7 +452,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, RepeatedNotificationObserver close_observer( chrome::NOTIFICATION_BROWSER_CLOSED, 3); chrome::CloseAllBrowsersAndQuit(); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); close_observer.Wait(); EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); EXPECT_TRUE(chrome::BrowserIterator().done()); @@ -499,7 +469,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, chrome::NOTIFICATION_BROWSER_CLOSED, 2); chrome::CloseAllBrowsersAndQuit(); browsers_.push_back(CreateBrowser(browser()->profile())); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); close_observer.Wait(); EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); EXPECT_TRUE(chrome::BrowserIterator().done()); @@ -519,8 +489,8 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, browsers_.push_back(CreateBrowser(browser()->profile())); ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); - ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); + ASSERT_NO_FATAL_FAILURE(CancelClose()); cancel_observer.Wait(); EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); @@ -530,8 +500,8 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, RepeatedNotificationObserver close_observer( chrome::NOTIFICATION_BROWSER_CLOSED, 2); chrome::CloseAllBrowsersAndQuit(); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); close_observer.Wait(); EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); EXPECT_TRUE(chrome::BrowserIterator().done()); @@ -550,10 +520,10 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, RepeatedNotificationObserver close_observer( chrome::NOTIFICATION_BROWSER_CLOSED, 2); chrome::CloseAllBrowsersAndQuit(); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); AddBlankTabAndShow(browsers_[0]); AddBlankTabAndShow(browsers_[1]); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); close_observer.Wait(); EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); EXPECT_TRUE(chrome::BrowserIterator().done()); @@ -572,15 +542,15 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, RepeatedNotificationObserver cancel_observer( chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); chrome::CloseAllBrowsersAndQuit(); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); AddBlankTabAndShow(browsers_[0]); ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); AddBlankTabAndShow(browsers_[1]); ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); - ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); + ASSERT_NO_FATAL_FAILURE(CancelClose()); cancel_observer.Wait(); EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count()); @@ -589,10 +559,10 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, RepeatedNotificationObserver close_observer( chrome::NOTIFICATION_BROWSER_CLOSED, 2); chrome::CloseAllBrowsersAndQuit(); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); close_observer.Wait(); EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); @@ -612,8 +582,8 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); browsers_[1]->tab_strip_model()->CloseAllTabs(); - ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); - ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); + ASSERT_NO_FATAL_FAILURE(CancelClose()); + ASSERT_NO_FATAL_FAILURE(CancelClose()); cancel_observer.Wait(); EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); @@ -623,8 +593,8 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, chrome::NOTIFICATION_BROWSER_CLOSED, 2); chrome::CloseAllBrowsersAndQuit(); browsers_[1]->tab_strip_model()->CloseAllTabs(); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); close_observer.Wait(); EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); @@ -652,8 +622,8 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); - ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); - ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); + ASSERT_NO_FATAL_FAILURE(CancelClose()); + ASSERT_NO_FATAL_FAILURE(CancelClose()); cancel_observer.Wait(); EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); @@ -663,8 +633,8 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, chrome::NOTIFICATION_BROWSER_CLOSED, 2); chrome::CloseAllBrowsersAndQuit(); ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); close_observer.Wait(); EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); @@ -684,7 +654,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, chrome::CloseAllBrowsersAndQuit(); ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); - ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); + ASSERT_NO_FATAL_FAILURE(CancelClose()); cancel_observer.Wait(); EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); @@ -694,8 +664,8 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, chrome::NOTIFICATION_BROWSER_CLOSED, 2); chrome::CloseAllBrowsersAndQuit(); ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); close_observer.Wait(); EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); @@ -871,7 +841,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithDownloadsBrowserTest, content::NotificationService::AllSources()); TestBrowserCloseManager::AttemptClose( TestBrowserCloseManager::USER_CHOICE_USER_CANCELS_CLOSE); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); cancel_observer.Wait(); EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); @@ -879,7 +849,7 @@ IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithDownloadsBrowserTest, chrome::NOTIFICATION_BROWSER_CLOSED, 1); TestBrowserCloseManager::AttemptClose( TestBrowserCloseManager::USER_CHOICE_USER_ALLOWS_CLOSE); - ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); + ASSERT_NO_FATAL_FAILURE(AcceptClose()); close_observer.Wait(); EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); EXPECT_TRUE(chrome::BrowserIterator().done()); diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 7bb0671d..cb1fa28 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn @@ -46,6 +46,7 @@ static_library("ui") { "//chrome/browser/net:cert_logger_proto", "//chrome/common", "//chrome/common/net", + "//components/app_modal_dialogs", "//components/auto_login_parser", "//components/dom_distiller/webui", "//components/feedback/proto", diff --git a/chrome/browser/ui/android/javascript_app_modal_dialog_android.cc b/chrome/browser/ui/android/javascript_app_modal_dialog_android.cc index 0cdc5f4..3c7331f 100644 --- a/chrome/browser/ui/android/javascript_app_modal_dialog_android.cc +++ b/chrome/browser/ui/android/javascript_app_modal_dialog_android.cc @@ -9,8 +9,8 @@ #include "base/strings/utf_string_conversions.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog_queue.h" -#include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h" +#include "components/app_modal_dialogs/app_modal_dialog_queue.h" +#include "components/app_modal_dialogs/javascript_app_modal_dialog.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/web_contents.h" #include "content/public/common/javascript_message_type.h" diff --git a/chrome/browser/ui/android/javascript_app_modal_dialog_android.h b/chrome/browser/ui/android/javascript_app_modal_dialog_android.h index 5a731d1..af2ede5 100644 --- a/chrome/browser/ui/android/javascript_app_modal_dialog_android.h +++ b/chrome/browser/ui/android/javascript_app_modal_dialog_android.h @@ -8,7 +8,7 @@ #include "base/android/jni_weak_ref.h" #include "base/android/scoped_java_ref.h" #include "base/memory/scoped_ptr.h" -#include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h" +#include "components/app_modal_dialogs/native_app_modal_dialog.h" class JavaScriptAppModalDialog; diff --git a/chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.cc b/chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.cc index e807582..d6c74a8 100644 --- a/chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.cc +++ b/chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.cc @@ -9,16 +9,14 @@ #include "base/i18n/rtl.h" #include "base/memory/singleton.h" #include "base/strings/utf_string_conversions.h" -#include "chrome/browser/chrome_notification_types.h" -#include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog.h" -#include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog_queue.h" -#include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h" -#include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h" -#include "chrome/common/chrome_constants.h" -#include "chrome/grit/generated_resources.h" +#include "components/app_modal_dialogs/app_modal_dialog.h" +#include "components/app_modal_dialogs/app_modal_dialog_queue.h" +#include "components/app_modal_dialogs/javascript_app_modal_dialog.h" +#include "components/app_modal_dialogs/native_app_modal_dialog.h" #include "content/public/browser/web_contents.h" #include "content/public/common/content_client.h" #include "content/public/common/javascript_message_type.h" +#include "grit/components_strings.h" #include "net/base/net_util.h" #include "ui/base/l10n/l10n_util.h" @@ -171,11 +169,14 @@ void ChromeJavaScriptDialogManager::RunJavaScriptDialog( base::TimeDelta time_since_last_message = base::TimeTicks::Now() - extra_data->last_javascript_message_dismissal_; bool display_suppress_checkbox = false; - // Show a checkbox offering to suppress further messages if this message is - // being displayed within kJavaScriptMessageExpectedDelay of the last one. + // If a WebContents is impolite and displays a second JavaScript + // alert within kJavaScriptMessageExpectedDelay of a previous + // JavaScript alert being dismissed, show a checkbox offering to + // suppress future alerts from this WebContents. + const int kJavaScriptMessageExpectedDelay = 1000; + if (time_since_last_message < - base::TimeDelta::FromMilliseconds( - chrome::kJavaScriptMessageExpectedDelay)) { + base::TimeDelta::FromMilliseconds(kJavaScriptMessageExpectedDelay)) { display_suppress_checkbox = true; } else { display_suppress_checkbox = false; diff --git a/chrome/browser/ui/browser_browsertest.cc b/chrome/browser/ui/browser_browsertest.cc index cbff1c9..54acd9c 100644 --- a/chrome/browser/ui/browser_browsertest.cc +++ b/chrome/browser/ui/browser_browsertest.cc @@ -32,10 +32,6 @@ #include "chrome/browser/sessions/session_service_factory.h" #include "chrome/browser/translate/chrome_translate_client.h" #include "chrome/browser/translate/cld_data_harness.h" -#include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog.h" -#include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog_queue.h" -#include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h" -#include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_command_controller.h" #include "chrome/browser/ui/browser_commands.h" @@ -60,6 +56,10 @@ #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/test_switches.h" #include "chrome/test/base/ui_test_utils.h" +#include "components/app_modal_dialogs/app_modal_dialog.h" +#include "components/app_modal_dialogs/app_modal_dialog_queue.h" +#include "components/app_modal_dialogs/javascript_app_modal_dialog.h" +#include "components/app_modal_dialogs/native_app_modal_dialog.h" #include "components/translate/core/browser/language_state.h" #include "components/translate/core/common/language_detection_details.h" #include "content/public/browser/favicon_status.h" diff --git a/chrome/browser/ui/cocoa/javascript_app_modal_dialog_cocoa.h b/chrome/browser/ui/cocoa/javascript_app_modal_dialog_cocoa.h index 459dff4..b300180 100644 --- a/chrome/browser/ui/cocoa/javascript_app_modal_dialog_cocoa.h +++ b/chrome/browser/ui/cocoa/javascript_app_modal_dialog_cocoa.h @@ -5,11 +5,10 @@ #ifndef CHROME_BROWSER_UI_COCOA_JAVASCRIPT_APP_MODAL_DIALOG_COCOA_H_ #define CHROME_BROWSER_UI_COCOA_JAVASCRIPT_APP_MODAL_DIALOG_COCOA_H_ -#include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h" - #include "base/logging.h" #include "base/mac/scoped_nsobject.h" #include "base/memory/scoped_ptr.h" +#include "components/app_modal_dialogs/native_app_modal_dialog.h" #if __OBJC__ @class NSAlert; diff --git a/chrome/browser/ui/cocoa/javascript_app_modal_dialog_cocoa.mm b/chrome/browser/ui/cocoa/javascript_app_modal_dialog_cocoa.mm index 6ef8729..37c4ad7 100644 --- a/chrome/browser/ui/cocoa/javascript_app_modal_dialog_cocoa.mm +++ b/chrome/browser/ui/cocoa/javascript_app_modal_dialog_cocoa.mm @@ -11,8 +11,9 @@ #import "base/mac/foundation_util.h" #include "base/strings/sys_string_conversions.h" #import "chrome/browser/chrome_browser_application_mac.h" -#include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h" #include "chrome/grit/generated_resources.h" +#include "components/app_modal_dialogs/javascript_app_modal_dialog.h" +#include "grit/components_strings.h" #include "ui/base/l10n/l10n_util_mac.h" #include "ui/base/ui_base_types.h" #include "ui/gfx/text_elider.h" diff --git a/chrome/browser/ui/panels/panel_browsertest.cc b/chrome/browser/ui/panels/panel_browsertest.cc index 24dc3c0..2873a7b 100644 --- a/chrome/browser/ui/panels/panel_browsertest.cc +++ b/chrome/browser/ui/panels/panel_browsertest.cc @@ -12,8 +12,6 @@ #include "chrome/browser/net/url_request_mock_util.h" #include "chrome/browser/prefs/browser_prefs.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog.h" -#include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_commands.h" #include "chrome/browser/ui/browser_finder.h" @@ -31,6 +29,8 @@ #include "chrome/common/url_constants.h" #include "chrome/test/base/interactive_test_utils.h" #include "chrome/test/base/ui_test_utils.h" +#include "components/app_modal_dialogs/app_modal_dialog.h" +#include "components/app_modal_dialogs/native_app_modal_dialog.h" #include "content/public/browser/native_web_keyboard_event.h" #include "content/public/browser/notification_service.h" #include "content/public/browser/web_contents.h" diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc index bc84ca9..b6c4a17 100644 --- a/chrome/browser/ui/views/frame/browser_view.cc +++ b/chrome/browser/ui/views/frame/browser_view.cc @@ -37,8 +37,6 @@ #include "chrome/browser/themes/theme_properties.h" #include "chrome/browser/themes/theme_service_factory.h" #include "chrome/browser/translate/chrome_translate_client.h" -#include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog.h" -#include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog_queue.h" #include "chrome/browser/ui/bookmarks/bookmark_bar_constants.h" #include "chrome/browser/ui/bookmarks/bookmark_bubble_delegate.h" #include "chrome/browser/ui/bookmarks/bookmark_bubble_sign_in_delegate.h" @@ -100,6 +98,8 @@ #include "chrome/grit/chromium_strings.h" #include "chrome/grit/generated_resources.h" #include "chrome/grit/locale_settings.h" +#include "components/app_modal_dialogs/app_modal_dialog.h" +#include "components/app_modal_dialogs/app_modal_dialog_queue.h" #include "components/signin/core/common/profile_management_switches.h" #include "components/translate/core/browser/language_state.h" #include "content/app/resources/grit/content_resources.h" diff --git a/chrome/browser/ui/views/javascript_app_modal_dialog_views.cc b/chrome/browser/ui/views/javascript_app_modal_dialog_views.cc index adfcac3..a237c54 100644 --- a/chrome/browser/ui/views/javascript_app_modal_dialog_views.cc +++ b/chrome/browser/ui/views/javascript_app_modal_dialog_views.cc @@ -5,9 +5,9 @@ #include "chrome/browser/ui/views/javascript_app_modal_dialog_views.h" #include "base/strings/utf_string_conversions.h" -#include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h" #include "chrome/browser/ui/views/constrained_window_views.h" -#include "chrome/grit/generated_resources.h" +#include "components/app_modal_dialogs/javascript_app_modal_dialog.h" +#include "grit/components_strings.h" #include "ui/base/l10n/l10n_util.h" #include "ui/events/keycodes/keyboard_codes.h" #include "ui/views/controls/message_box_view.h" diff --git a/chrome/browser/ui/views/javascript_app_modal_dialog_views.h b/chrome/browser/ui/views/javascript_app_modal_dialog_views.h index b8f86c9..e7efd9f 100644 --- a/chrome/browser/ui/views/javascript_app_modal_dialog_views.h +++ b/chrome/browser/ui/views/javascript_app_modal_dialog_views.h @@ -6,7 +6,7 @@ #define CHROME_BROWSER_UI_VIEWS_JAVASCRIPT_APP_MODAL_DIALOG_VIEWS_H_ #include "base/memory/scoped_ptr.h" -#include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h" +#include "components/app_modal_dialogs/native_app_modal_dialog.h" #include "ui/views/window/dialog_delegate.h" class JavaScriptAppModalDialog; diff --git a/chrome/browser/unload_browsertest.cc b/chrome/browser/unload_browsertest.cc index 4481adf..2378f02 100644 --- a/chrome/browser/unload_browsertest.cc +++ b/chrome/browser/unload_browsertest.cc @@ -11,8 +11,6 @@ #include "base/strings/utf_string_conversions.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/net/url_request_mock_util.h" -#include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h" -#include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_commands.h" #include "chrome/browser/ui/browser_list.h" @@ -20,6 +18,8 @@ #include "chrome/common/chrome_switches.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" +#include "components/app_modal_dialogs/javascript_app_modal_dialog.h" +#include "components/app_modal_dialogs/native_app_modal_dialog.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/notification_service.h" #include "content/public/browser/web_contents.h" diff --git a/chrome/chrome_browser_ui.gypi b/chrome/chrome_browser_ui.gypi index 67488b9..a2bad5b 100644 --- a/chrome/chrome_browser_ui.gypi +++ b/chrome/chrome_browser_ui.gypi @@ -69,15 +69,8 @@ 'browser/ui/app_list/app_list_util.cc', 'browser/ui/app_list/app_list_util.h', # All other browser/ui/app_list files go in chrome_browser_ui_app_list_sources. - 'browser/ui/app_modal_dialogs/app_modal_dialog.cc', - 'browser/ui/app_modal_dialogs/app_modal_dialog.h', - 'browser/ui/app_modal_dialogs/app_modal_dialog_queue.cc', - 'browser/ui/app_modal_dialogs/app_modal_dialog_queue.h', - 'browser/ui/app_modal_dialogs/javascript_app_modal_dialog.cc', - 'browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h', 'browser/ui/app_modal_dialogs/javascript_dialog_manager.cc', 'browser/ui/app_modal_dialogs/javascript_dialog_manager.h', - 'browser/ui/app_modal_dialogs/native_app_modal_dialog.h', 'browser/ui/autofill/autofill_dialog_controller.cc', 'browser/ui/autofill/autofill_dialog_controller.h', 'browser/ui/autofill/autofill_dialog_models.cc', @@ -2639,6 +2632,7 @@ 'chrome_web_ui_mojo_bindings.gyp:web_ui_mojo_bindings', 'debugger', 'installer_util', + '../components/components.gyp:app_modal_dialogs', '../components/components.gyp:autofill_content_risk_proto', '../components/components.gyp:translate_content_common', '../content/app/resources/content_resources.gyp:content_resources', diff --git a/chrome/common/chrome_constants.cc b/chrome/common/chrome_constants.cc index 1b0b5cc..66501e2 100644 --- a/chrome/common/chrome_constants.cc +++ b/chrome/common/chrome_constants.cc @@ -214,8 +214,6 @@ const wchar_t kUserDataDirname[] = L"User Data"; const bool kRecordModeEnabled = true; -const int kJavaScriptMessageExpectedDelay = 1000; - #if defined(OS_ANDROID) || defined(OS_IOS) const bool kEnableTouchIcon = true; #else diff --git a/chrome/common/chrome_constants.h b/chrome/common/chrome_constants.h index 3d2fd7b5..ca4bc86 100644 --- a/chrome/common/chrome_constants.h +++ b/chrome/common/chrome_constants.h @@ -109,11 +109,6 @@ extern const wchar_t kUserDataDirname[]; extern const bool kRecordModeEnabled; -// If a WebContents is impolite and displays a second JavaScript alert within -// kJavaScriptMessageExpectedDelay of a previous JavaScript alert being -// dismissed, display an option to suppress future alerts from this WebContents. -extern const int kJavaScriptMessageExpectedDelay; - // Are touch icons enabled? False by default. extern const bool kEnableTouchIcon; diff --git a/chrome/test/base/ui_test_utils.cc b/chrome/test/base/ui_test_utils.cc index e017345..64f5115 100644 --- a/chrome/test/base/ui_test_utils.cc +++ b/chrome/test/base/ui_test_utils.cc @@ -30,8 +30,6 @@ #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog.h" -#include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog_queue.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_commands.h" #include "chrome/browser/ui/browser_finder.h" @@ -48,6 +46,8 @@ #include "chrome/common/chrome_paths.h" #include "chrome/common/pref_names.h" #include "chrome/test/base/find_in_page_observer.h" +#include "components/app_modal_dialogs/app_modal_dialog.h" +#include "components/app_modal_dialogs/app_modal_dialog_queue.h" #include "components/bookmarks/browser/bookmark_model.h" #include "components/search_engines/template_url_service.h" #include "content/public/browser/dom_operation_notification_details.h" @@ -107,6 +107,38 @@ Browser* WaitForBrowserNotInSet(std::set<Browser*> excluded_browsers) { return new_browser; } +class AppModalDialogWaiter : public AppModalDialogObserver { + public: + AppModalDialogWaiter() + : dialog_(NULL) { + } + ~AppModalDialogWaiter() override { + } + + AppModalDialog* Wait() { + if (dialog_) + return dialog_; + message_loop_runner_ = new content::MessageLoopRunner; + message_loop_runner_->Run(); + EXPECT_TRUE(dialog_); + return dialog_; + } + + // AppModalDialogWaiter: + virtual void Notify(AppModalDialog* dialog) override { + DCHECK(!dialog_); + dialog_ = dialog; + if (message_loop_runner_.get() && message_loop_runner_->loop_running()) + message_loop_runner_->Quit(); + } + + private: + AppModalDialog* dialog_; + scoped_refptr<content::MessageLoopRunner> message_loop_runner_; + + DISALLOW_COPY_AND_ASSIGN(AppModalDialogWaiter); +}; + } // namespace bool GetCurrentTabTitle(const Browser* browser, base::string16* title) { @@ -296,12 +328,8 @@ AppModalDialog* WaitForAppModalDialog() { AppModalDialogQueue* dialog_queue = AppModalDialogQueue::GetInstance(); if (dialog_queue->HasActiveDialog()) return dialog_queue->active_dialog(); - - content::WindowedNotificationObserver observer( - chrome::NOTIFICATION_APP_MODAL_DIALOG_SHOWN, - content::NotificationService::AllSources()); - observer.Wait(); - return content::Source<AppModalDialog>(observer.source()).ptr(); + AppModalDialogWaiter waiter; + return waiter.Wait(); } int FindInPage(WebContents* tab, diff --git a/components/OWNERS b/components/OWNERS index 2c0b9f2..5f683e7 100644 --- a/components/OWNERS +++ b/components/OWNERS @@ -3,6 +3,8 @@ caitkp@chromium.org erikwright@chromium.org jochen@chromium.org +per-file app_modal_dialog*=avi@chromium.org + # Can not match autofill* due to crbug.com/397984 per-file autofill.gypi=estade@chromium.org per-file autofill.gypi=isherman@chromium.org diff --git a/components/app_modal_dialogs.gypi b/components/app_modal_dialogs.gypi new file mode 100644 index 0000000..df3c3ec7 --- /dev/null +++ b/components/app_modal_dialogs.gypi @@ -0,0 +1,36 @@ +# 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. +{ + 'targets': [ + { + 'target_name': 'app_modal_dialogs', + 'type': 'static_library', + 'dependencies': [ + '../skia/skia.gyp:skia', + '../content/content.gyp:content_browser', + 'components_strings.gyp:components_strings', + ], + 'include_dirs': [ + '..', + ], + 'sources': [ + 'app_modal_dialogs/app_modal_dialog.cc', + 'app_modal_dialogs/app_modal_dialog.h', + 'app_modal_dialogs/app_modal_dialog_test_util.h', + 'app_modal_dialogs/app_modal_dialog_queue.cc', + 'app_modal_dialogs/app_modal_dialog_queue.h', + 'app_modal_dialogs/javascript_app_modal_dialog.cc', + 'app_modal_dialogs/javascript_app_modal_dialog.h', + 'app_modal_dialogs/native_app_modal_dialog.h' + ], + 'conditions': [ + ['use_aura==1',{ + 'dependencies': [ + '../ui/aura/aura.gyp:aura', + ], + }] + ], + }, + ], +} diff --git a/components/app_modal_dialogs/BUILD.gn b/components/app_modal_dialogs/BUILD.gn new file mode 100644 index 0000000..34d10af --- /dev/null +++ b/components/app_modal_dialogs/BUILD.gn @@ -0,0 +1,28 @@ +# 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. + +import("//build/config/ui.gni") + +static_library("app_modal_dialogs") { + sources = [ + "app_modal_dialog.cc", + "app_modal_dialog.h", + "app_modal_dialog_test_util.h", + "app_modal_dialog_queue.cc", + "app_modal_dialog_queue.h", + "javascript_app_modal_dialog.cc", + "javascript_app_modal_dialog.h", + "native_app_modal_dialog.h" + ] + + deps = [ + "//components/strings", + "//content/public/browser", + "//skia", + ] + + if (use_aura) { + deps += [ "//ui/aura" ] + } +} diff --git a/components/app_modal_dialogs/DEPS b/components/app_modal_dialogs/DEPS new file mode 100644 index 0000000..9faf2b4 --- /dev/null +++ b/components/app_modal_dialogs/DEPS @@ -0,0 +1,7 @@ +include_rules = [ + "+content/public/browser", + "+grit/components_strings.h", + "+net/base", + "+ui/aura", + "+ui/gfx", +] diff --git a/components/app_modal_dialogs/OWNERS b/components/app_modal_dialogs/OWNERS new file mode 100644 index 0000000..704db9f --- /dev/null +++ b/components/app_modal_dialogs/OWNERS @@ -0,0 +1 @@ +avi@chromium.org diff --git a/chrome/browser/ui/app_modal_dialogs/app_modal_dialog.cc b/components/app_modal_dialogs/app_modal_dialog.cc index edd9457..7156520 100644 --- a/chrome/browser/ui/app_modal_dialogs/app_modal_dialog.cc +++ b/components/app_modal_dialogs/app_modal_dialog.cc @@ -2,18 +2,33 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog.h" +#include "components/app_modal_dialogs/app_modal_dialog.h" #include "base/logging.h" -#include "chrome/browser/chrome_notification_types.h" -#include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog_queue.h" -#include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h" -#include "content/public/browser/notification_service.h" +#include "base/run_loop.h" +#include "components/app_modal_dialogs/app_modal_dialog_queue.h" +#include "components/app_modal_dialogs/native_app_modal_dialog.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_delegate.h" using content::WebContents; +namespace { + +AppModalDialogObserver* app_modal_dialog_observer = NULL; + +} // namespace + +AppModalDialogObserver::AppModalDialogObserver() { + DCHECK(!app_modal_dialog_observer); + app_modal_dialog_observer = this; +} + +AppModalDialogObserver::~AppModalDialogObserver() { + DCHECK(app_modal_dialog_observer); + app_modal_dialog_observer = NULL; +} + AppModalDialog::AppModalDialog(WebContents* web_contents, const base::string16& title) : title_(title), @@ -30,11 +45,8 @@ AppModalDialog::~AppModalDialog() { void AppModalDialog::ShowModalDialog() { web_contents_->GetDelegate()->ActivateContents(web_contents_); CreateAndShowDialog(); - - content::NotificationService::current()->Notify( - chrome::NOTIFICATION_APP_MODAL_DIALOG_SHOWN, - content::Source<AppModalDialog>(this), - content::NotificationService::NoDetails()); + if (app_modal_dialog_observer) + app_modal_dialog_observer->Notify(this); } void AppModalDialog::CreateAndShowDialog() { diff --git a/chrome/browser/ui/app_modal_dialogs/app_modal_dialog.h b/components/app_modal_dialogs/app_modal_dialog.h index 28cf584..12d7f5c 100644 --- a/chrome/browser/ui/app_modal_dialogs/app_modal_dialog.h +++ b/components/app_modal_dialogs/app_modal_dialog.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_UI_APP_MODAL_DIALOGS_APP_MODAL_DIALOG_H_ -#define CHROME_BROWSER_UI_APP_MODAL_DIALOGS_APP_MODAL_DIALOG_H_ +#ifndef COMPONENTS_APP_MODAL_DIALOGS_APP_MODAL_DIALOG_H_ +#define COMPONENTS_APP_MODAL_DIALOGS_APP_MODAL_DIALOG_H_ #include <string> @@ -89,4 +89,17 @@ class AppModalDialog { DISALLOW_COPY_AND_ASSIGN(AppModalDialog); }; -#endif // CHROME_BROWSER_UI_APP_MODAL_DIALOGS_APP_MODAL_DIALOG_H_ +// An interface to observe that a modal dialog is shown. +class AppModalDialogObserver { + public: + AppModalDialogObserver(); + virtual ~AppModalDialogObserver(); + + // Called when the modal dialog is shown. + virtual void Notify(AppModalDialog* dialog) = 0; + + private: + DISALLOW_COPY_AND_ASSIGN(AppModalDialogObserver); +}; + +#endif // COMPONENTS_APP_MODAL_DIALOGS_APP_MODAL_DIALOG_H_ diff --git a/chrome/browser/ui/app_modal_dialogs/app_modal_dialog_queue.cc b/components/app_modal_dialogs/app_modal_dialog_queue.cc index 99af7ad..effacb9 100644 --- a/chrome/browser/ui/app_modal_dialogs/app_modal_dialog_queue.cc +++ b/components/app_modal_dialogs/app_modal_dialog_queue.cc @@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog_queue.h" +#include "components/app_modal_dialogs/app_modal_dialog_queue.h" #include "base/memory/singleton.h" -#include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog.h" +#include "components/app_modal_dialogs/app_modal_dialog.h" // static AppModalDialogQueue* AppModalDialogQueue::GetInstance() { diff --git a/chrome/browser/ui/app_modal_dialogs/app_modal_dialog_queue.h b/components/app_modal_dialogs/app_modal_dialog_queue.h index 5f4eb9a..aca8a23a 100644 --- a/chrome/browser/ui/app_modal_dialogs/app_modal_dialog_queue.h +++ b/components/app_modal_dialogs/app_modal_dialog_queue.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_UI_APP_MODAL_DIALOGS_APP_MODAL_DIALOG_QUEUE_H_ -#define CHROME_BROWSER_UI_APP_MODAL_DIALOGS_APP_MODAL_DIALOG_QUEUE_H_ +#ifndef COMPONENTS_APP_MODAL_DIALOGS_APP_MODAL_DIALOG_QUEUE_H_ +#define COMPONENTS_APP_MODAL_DIALOGS_APP_MODAL_DIALOG_QUEUE_H_ #include <deque> @@ -86,4 +86,4 @@ class AppModalDialogQueue { DISALLOW_COPY_AND_ASSIGN(AppModalDialogQueue); }; -#endif // CHROME_BROWSER_UI_APP_MODAL_DIALOGS_APP_MODAL_DIALOG_QUEUE_H_ +#endif // COMPONENTS_APP_MODAL_DIALOGS_APP_MODAL_DIALOG_QUEUE_H_ diff --git a/chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.cc b/components/app_modal_dialogs/javascript_app_modal_dialog.cc index a037376..99adc4b 100644 --- a/chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.cc +++ b/components/app_modal_dialogs/javascript_app_modal_dialog.cc @@ -2,10 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h" +#include "components/app_modal_dialogs/javascript_app_modal_dialog.h" -#include "chrome/browser/browser_shutdown.h" -#include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h" +#include "components/app_modal_dialogs/native_app_modal_dialog.h" #include "content/public/browser/web_contents.h" #include "ui/gfx/text_elider.h" diff --git a/chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h b/components/app_modal_dialogs/javascript_app_modal_dialog.h index 87dd203..6fb0777 100644 --- a/chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h +++ b/components/app_modal_dialogs/javascript_app_modal_dialog.h @@ -2,15 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_UI_APP_MODAL_DIALOGS_JAVASCRIPT_APP_MODAL_DIALOG_H_ -#define CHROME_BROWSER_UI_APP_MODAL_DIALOGS_JAVASCRIPT_APP_MODAL_DIALOG_H_ +#ifndef COMPONENTS_APP_MODAL_DIALOGS_JAVASCRIPT_APP_MODAL_DIALOG_H_ +#define COMPONENTS_APP_MODAL_DIALOGS_JAVASCRIPT_APP_MODAL_DIALOG_H_ #include <map> #include "base/basictypes.h" #include "base/compiler_specific.h" #include "base/time/time.h" -#include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog.h" +#include "components/app_modal_dialogs/app_modal_dialog.h" #include "content/public/browser/javascript_dialog_manager.h" // Extra data for JavaScript dialogs to add Chrome-only features. @@ -98,4 +98,4 @@ class JavaScriptAppModalDialog : public AppModalDialog { DISALLOW_COPY_AND_ASSIGN(JavaScriptAppModalDialog); }; -#endif // CHROME_BROWSER_UI_APP_MODAL_DIALOGS_JAVASCRIPT_APP_MODAL_DIALOG_H_ +#endif // COMPONENTS_APP_MODAL_DIALOGS_JAVASCRIPT_APP_MODAL_DIALOG_H_ diff --git a/chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h b/components/app_modal_dialogs/native_app_modal_dialog.h index 6fe82f8..88db763 100644 --- a/chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h +++ b/components/app_modal_dialogs/native_app_modal_dialog.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_UI_APP_MODAL_DIALOGS_NATIVE_APP_MODAL_DIALOG_H_ -#define CHROME_BROWSER_UI_APP_MODAL_DIALOGS_NATIVE_APP_MODAL_DIALOG_H_ +#ifndef COMPONENTS_APP_MODAL_DIALOGS_NATIVE_APP_MODAL_DIALOG_H_ +#define COMPONENTS_APP_MODAL_DIALOGS_NATIVE_APP_MODAL_DIALOG_H_ #include "ui/gfx/native_widget_types.h" @@ -34,5 +34,4 @@ class NativeAppModalDialog { gfx::NativeWindow parent_window); }; -#endif // CHROME_BROWSER_UI_APP_MODAL_DIALOGS_NATIVE_APP_MODAL_DIALOG_H_ - +#endif // COMPONENTS_APP_MODAL_DIALOGS_NATIVE_APP_MODAL_DIALOG_H_ diff --git a/components/app_modal_dialogs_strings.grdp b/components/app_modal_dialogs_strings.grdp new file mode 100644 index 0000000..f1e413c --- /dev/null +++ b/components/app_modal_dialogs_strings.grdp @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="utf-8"?> +<grit-part> + + <!-- JavaScript Dialog Box strings --> + <message name="IDS_JAVASCRIPT_ALERT_DEFAULT_TITLE" desc="Title for JavaScript alert originating from a webpage if there is no hostname to display"> + JavaScript Alert + </message> + <message name="IDS_JAVASCRIPT_MESSAGEBOX_DEFAULT_TITLE" desc="Title for JavaScript prompt and confirm originating from a webpage if there is no hostname to display"> + JavaScript + </message> + <message name="IDS_JAVASCRIPT_ALERT_TITLE" desc="Title for JavaScript alert originating from a webpage"> + The page at <ph name="SITE">$1<ex>http://www.google.com</ex></ph> says: + </message> + <message name="IDS_JAVASCRIPT_MESSAGEBOX_TITLE" desc="Title for JavaScript prompt and confirm originating from a webpage"> + The page at <ph name="SITE">$1<ex>http://www.google.com</ex></ph> says: + </message> + <message name="IDS_JAVASCRIPT_MESSAGEBOX_SUPPRESS_OPTION" desc="Optional UI shown on the message box, in the form of a checkbox, allowing the user to suppress additional message boxes from the page."> + Prevent this page from creating additional dialogs. + </message> + + <!-- "Before Unload" Dialog Box strings --> + <message name="IDS_BEFOREUNLOAD_MESSAGEBOX_TITLE" desc="Title for the 'before unload' dialog."> + Confirm Navigation + </message> + <message name="IDS_BEFOREUNLOAD_MESSAGEBOX_FOOTER" desc="Text shown at the bottom of the dialog, after the message provided by the script."> + Are you sure you want to leave this page? + </message> + <message name="IDS_BEFOREUNLOAD_MESSAGEBOX_OK_BUTTON_LABEL" desc="The text on the button which navigates the user away from the page."> + Leave this Page + </message> + <message name="IDS_BEFOREUNLOAD_MESSAGEBOX_CANCEL_BUTTON_LABEL" desc="The text on the button which cancels the navigation away from the page."> + Stay on this Page + </message> + + <!-- "Before Reload" Dialog Box strings (same as "Before Unload" but when reloading rather than unloading the page --> + <message name="IDS_BEFORERELOAD_MESSAGEBOX_TITLE" desc="Title for the 'before reload' dialog."> + Confirm Reload + </message> + <message name="IDS_BEFORERELOAD_MESSAGEBOX_FOOTER" desc="Text shown at the bottom of the dialog, after the message provided by the script."> + Are you sure you want to reload this page? + </message> + <message name="IDS_BEFORERELOAD_MESSAGEBOX_OK_BUTTON_LABEL" desc="The text on the button which reloads the page."> + Reload this Page + </message> + <message name="IDS_BEFORERELOAD_MESSAGEBOX_CANCEL_BUTTON_LABEL" desc="The text on the button which cancels the page reload."> + Don't Reload + </message> + +</grit-part> diff --git a/components/components.gyp b/components/components.gyp index 8f1dba5..a468b7c 100644 --- a/components/components.gyp +++ b/components/components.gyp @@ -62,6 +62,7 @@ 'conditions': [ ['OS != "ios"', { 'includes': [ + 'app_modal_dialogs.gypi', 'cdm.gypi', 'copresence_sockets.gypi', 'navigation_interception.gypi', diff --git a/components/components_strings.grd b/components/components_strings.grd index 3c8437c..7cc8583 100644 --- a/components/components_strings.grd +++ b/components/components_strings.grd @@ -167,6 +167,7 @@ </translations> <release seq="1" allow_pseudo="false"> <messages fallback_to_english="true"> + <part file="app_modal_dialogs_strings.grdp" /> <part file="autofill_strings.grdp" /> <part file="bookmark_bar_strings.grdp" /> <part file="dom_distiller_strings.grdp" /> |