diff options
author | oshima <oshima@chromium.org> | 2014-11-19 14:21:03 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-11-19 22:21:32 +0000 |
commit | 0929be2a6d3e1880cfb047a7adc1c3e8e6dd5285 (patch) | |
tree | cb838d09bb51fca863e1225c1a91f09518fa3653 | |
parent | 8d4fc306580f056833a10dd6f0b55f8d2d665602 (diff) | |
download | chromium_src-0929be2a6d3e1880cfb047a7adc1c3e8e6dd5285.zip chromium_src-0929be2a6d3e1880cfb047a7adc1c3e8e6dd5285.tar.gz chromium_src-0929be2a6d3e1880cfb047a7adc1c3e8e6dd5285.tar.bz2 |
Consolidate javascript_dialog_manager.h and javascript_dialog_manager_impl.h
* Renamed JavaScriptDialgoManagerImpl to JavaScriptDialogManager.
* Add namespace app_modal_dialogs
* Add namespace javascript_dialog_extensions_client
* Shortened InstallJavaScriptDialogExtensionsClient to InstallClient to fit the 80 chars limit.
BUG=410499
TBR=sky@chromium.org
Review URL: https://codereview.chromium.org/688853005
Cr-Commit-Position: refs/heads/master@{#304903}
43 files changed, 453 insertions, 429 deletions
diff --git a/athena/content/web_activity.cc b/athena/content/web_activity.cc index d302a08..cc4928a 100644 --- a/athena/content/web_activity.cc +++ b/athena/content/web_activity.cc @@ -367,7 +367,7 @@ class AthenaWebView : public views::WebView { content::JavaScriptDialogManager* GetJavaScriptDialogManager( content::WebContents* contents) override { - return GetJavaScriptDialogManagerInstance(); + return app_modal::JavaScriptDialogManager::GetInstance(); } content::ColorChooser* OpenColorChooser( diff --git a/athena/extensions/athena_javascript_native_dialog_factory.cc b/athena/extensions/athena_javascript_native_dialog_factory.cc index b4401a8..39c349b 100644 --- a/athena/extensions/athena_javascript_native_dialog_factory.cc +++ b/athena/extensions/athena_javascript_native_dialog_factory.cc @@ -17,18 +17,18 @@ namespace athena { namespace { class AthenaJavaScriptNativeDialogFactory - : public JavaScriptNativeDialogFactory { + : public app_modal::JavaScriptNativeDialogFactory { public: AthenaJavaScriptNativeDialogFactory() {} ~AthenaJavaScriptNativeDialogFactory() override {} private: - // JavScriptNativeDialogFactory: - NativeAppModalDialog* CreateNativeJavaScriptDialog( - JavaScriptAppModalDialog* dialog, + // app_modal::JavScriptNativeDialogFactory: + app_modal::NativeAppModalDialog* CreateNativeJavaScriptDialog( + app_modal::JavaScriptAppModalDialog* dialog, gfx::NativeWindow parent_window) override{ - JavaScriptAppModalDialogViews* d = - new JavaScriptAppModalDialogViews(dialog); + app_modal::JavaScriptAppModalDialogViews* d = + new app_modal::JavaScriptAppModalDialogViews(dialog); constrained_window::CreateBrowserModalDialogViews(d, parent_window); return d; } @@ -39,8 +39,9 @@ class AthenaJavaScriptNativeDialogFactory } // namespace void InstallJavaScriptNativeDialogFactory() { - SetJavaScriptNativeDialogFactory( - make_scoped_ptr(new AthenaJavaScriptNativeDialogFactory)); + app_modal::JavaScriptDialogManager::GetInstance()-> + SetNativeDialogFactory( + make_scoped_ptr(new AthenaJavaScriptNativeDialogFactory)); } } // namespace athena diff --git a/athena/extensions/extensions_delegate.cc b/athena/extensions/extensions_delegate.cc index 00a93b9..823a159 100644 --- a/athena/extensions/extensions_delegate.cc +++ b/athena/extensions/extensions_delegate.cc @@ -18,7 +18,7 @@ ExtensionsDelegate* instance = nullptr; ExtensionsDelegate::ExtensionsDelegate() { InstallConstrainedWindowViewsClient(); - InstallJavaScriptDialogExtensionsClient(); + javascript_dialog_extensions_client::InstallClient(); InstallJavaScriptNativeDialogFactory(); DCHECK(!instance); instance = this; diff --git a/chrome/browser/android/chrome_web_contents_delegate_android.cc b/chrome/browser/android/chrome_web_contents_delegate_android.cc index 8a0c196..56da4aa 100644 --- a/chrome/browser/android/chrome_web_contents_delegate_android.cc +++ b/chrome/browser/android/chrome_web_contents_delegate_android.cc @@ -216,7 +216,7 @@ void ChromeWebContentsDelegateAndroid::FindMatchRectsReply( content::JavaScriptDialogManager* ChromeWebContentsDelegateAndroid::GetJavaScriptDialogManager( WebContents* source) { - return GetJavaScriptDialogManagerInstance(); + return app_modal::JavaScriptDialogManager::GetInstance(); } void ChromeWebContentsDelegateAndroid::RequestMediaAccessPermission( diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc index 30e35e9..75993b8 100644 --- a/chrome/browser/chrome_browser_main.cc +++ b/chrome/browser/chrome_browser_main.cc @@ -1070,7 +1070,7 @@ void ChromeBrowserMainParts::PreProfileInit() { #endif // OS_ANDROID #if defined(ENABLE_EXTENSIONS) - InstallJavaScriptDialogExtensionsClient(); + javascript_dialog_extensions_client::InstallClient(); #endif #if !defined(OS_IOS) diff --git a/chrome/browser/chromeos/login/signin/oauth2_browsertest.cc b/chrome/browser/chromeos/login/signin/oauth2_browsertest.cc index 2709134..30156bf 100644 --- a/chrome/browser/chromeos/login/signin/oauth2_browsertest.cc +++ b/chrome/browser/chromeos/login/signin/oauth2_browsertest.cc @@ -46,6 +46,8 @@ #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_context_getter.h" +using app_modal::AppModalDialog; +using app_modal::JavaScriptAppModalDialog; using net::test_server::BasicHttpResponse; using net::test_server::HttpRequest; using net::test_server::HttpResponse; diff --git a/chrome/browser/devtools/devtools_sanity_browsertest.cc b/chrome/browser/devtools/devtools_sanity_browsertest.cc index de34cff..b0c8bf0 100644 --- a/chrome/browser/devtools/devtools_sanity_browsertest.cc +++ b/chrome/browser/devtools/devtools_sanity_browsertest.cc @@ -52,6 +52,9 @@ #include "net/socket/tcp_listen_socket.h" #include "net/test/spawned_test_server/spawned_test_server.h" +using app_modal::AppModalDialog; +using app_modal::JavaScriptAppModalDialog; +using app_modal::NativeAppModalDialog; using content::BrowserThread; using content::DevToolsAgentHost; using content::NavigationController; diff --git a/chrome/browser/extensions/alert_apitest.cc b/chrome/browser/extensions/alert_apitest.cc index 766c158..9aece03 100644 --- a/chrome/browser/extensions/alert_apitest.cc +++ b/chrome/browser/extensions/alert_apitest.cc @@ -24,7 +24,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, AlertBasic) { host->host_contents()->GetMainFrame()->ExecuteJavaScript( base::ASCIIToUTF16("alert('This should not crash.');")); - AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); + app_modal::AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); ASSERT_TRUE(alert); alert->CloseModalDialog(); } diff --git a/chrome/browser/extensions/chrome_extension_host_delegate.cc b/chrome/browser/extensions/chrome_extension_host_delegate.cc index e0adf5a..c8d2b58 100644 --- a/chrome/browser/extensions/chrome_extension_host_delegate.cc +++ b/chrome/browser/extensions/chrome_extension_host_delegate.cc @@ -35,7 +35,7 @@ void ChromeExtensionHostDelegate::OnRenderViewCreatedForBackgroundPage( content::JavaScriptDialogManager* ChromeExtensionHostDelegate::GetJavaScriptDialogManager() { - return GetJavaScriptDialogManagerInstance(); + return app_modal::JavaScriptDialogManager::GetInstance(); } void ChromeExtensionHostDelegate::CreateTab(content::WebContents* web_contents, diff --git a/chrome/browser/extensions/lazy_background_page_apitest.cc b/chrome/browser/extensions/lazy_background_page_apitest.cc index 1353131..d25219f9 100644 --- a/chrome/browser/extensions/lazy_background_page_apitest.cc +++ b/chrome/browser/extensions/lazy_background_page_apitest.cc @@ -216,7 +216,7 @@ IN_PROC_BROWSER_TEST_F(LazyBackgroundPageApiTest, WaitForDialog) { ASSERT_TRUE(extension); // The test extension opens a dialog on installation. - AppModalDialog* dialog = ui_test_utils::WaitForAppModalDialog(); + app_modal::AppModalDialog* dialog = ui_test_utils::WaitForAppModalDialog(); ASSERT_TRUE(dialog); // With the dialog open the background page is still alive. diff --git a/chrome/browser/lifetime/browser_close_manager_browsertest.cc b/chrome/browser/lifetime/browser_close_manager_browsertest.cc index a81ce65..4cb1584 100644 --- a/chrome/browser/lifetime/browser_close_manager_browsertest.cc +++ b/chrome/browser/lifetime/browser_close_manager_browsertest.cc @@ -49,11 +49,11 @@ namespace { -NativeAppModalDialog* GetNextDialog() { - AppModalDialog* dialog = ui_test_utils::WaitForAppModalDialog(); +app_modal::NativeAppModalDialog* GetNextDialog() { + app_modal::AppModalDialog* dialog = ui_test_utils::WaitForAppModalDialog(); EXPECT_TRUE(dialog->IsJavaScriptModalDialog()); - JavaScriptAppModalDialog* js_dialog = - static_cast<JavaScriptAppModalDialog*>(dialog); + app_modal::JavaScriptAppModalDialog* js_dialog = + static_cast<app_modal::JavaScriptAppModalDialog*>(dialog); CHECK(js_dialog->native_dialog()); return js_dialog->native_dialog(); } 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 ff09409..34a8b99 100644 --- a/chrome/browser/ui/android/javascript_app_modal_dialog_android.cc +++ b/chrome/browser/ui/android/javascript_app_modal_dialog_android.cc @@ -23,7 +23,7 @@ using base::android::ScopedJavaLocalRef; JavascriptAppModalDialogAndroid::JavascriptAppModalDialogAndroid( JNIEnv* env, - JavaScriptAppModalDialog* dialog, + app_modal::JavaScriptAppModalDialog* dialog, gfx::NativeWindow parent) : dialog_(dialog), parent_jobject_weak_ref_(env, parent->GetJavaObject().obj()) { @@ -131,7 +131,8 @@ const ScopedJavaGlobalRef<jobject>& // static jobject GetCurrentModalDialog(JNIEnv* env, jclass clazz) { - AppModalDialog* dialog = AppModalDialogQueue::GetInstance()->active_dialog(); + app_modal::AppModalDialog* dialog = + app_modal::AppModalDialogQueue::GetInstance()->active_dialog(); if (!dialog || !dialog->native_dialog()) return NULL; @@ -159,14 +160,14 @@ JavascriptAppModalDialogAndroid::~JavascriptAppModalDialogAndroid() { namespace { class ChromeJavaScriptNativeDialogAndroidFactory - : public JavaScriptNativeDialogFactory { + : public app_modal::JavaScriptNativeDialogFactory { public: ChromeJavaScriptNativeDialogAndroidFactory() {} ~ChromeJavaScriptNativeDialogAndroidFactory() override {} private: - NativeAppModalDialog* CreateNativeJavaScriptDialog( - JavaScriptAppModalDialog* dialog, + app_modal::NativeAppModalDialog* CreateNativeJavaScriptDialog( + app_modal::JavaScriptAppModalDialog* dialog, gfx::NativeWindow parent_window) override { return new JavascriptAppModalDialogAndroid( base::android::AttachCurrentThread(), @@ -179,7 +180,8 @@ class ChromeJavaScriptNativeDialogAndroidFactory } // namespace void InstallChromeJavaScriptNativeDialogFactory() { - SetJavaScriptNativeDialogFactory( - make_scoped_ptr(new ChromeJavaScriptNativeDialogAndroidFactory)); + app_modal::JavaScriptDialogManager::GetInstance()-> + SetNativeDialogFactory( + make_scoped_ptr(new ChromeJavaScriptNativeDialogAndroidFactory)); } 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 bf748e4..3a84734 100644 --- a/chrome/browser/ui/android/javascript_app_modal_dialog_android.h +++ b/chrome/browser/ui/android/javascript_app_modal_dialog_android.h @@ -12,11 +12,13 @@ class JavaScriptAppModalDialog; -class JavascriptAppModalDialogAndroid : public NativeAppModalDialog { +class JavascriptAppModalDialogAndroid + : public app_modal::NativeAppModalDialog { public: - JavascriptAppModalDialogAndroid(JNIEnv* env, - JavaScriptAppModalDialog* dialog, - gfx::NativeWindow parent); + JavascriptAppModalDialogAndroid( + JNIEnv* env, + app_modal::JavaScriptAppModalDialog* dialog, + gfx::NativeWindow parent); // NativeAppModalDialog: virtual int GetAppModalDialogButtons() const override; @@ -41,7 +43,7 @@ class JavascriptAppModalDialogAndroid : public NativeAppModalDialog { // The object deletes itself. virtual ~JavascriptAppModalDialogAndroid(); - scoped_ptr<JavaScriptAppModalDialog> dialog_; + scoped_ptr<app_modal::JavaScriptAppModalDialog> dialog_; base::android::ScopedJavaGlobalRef<jobject> dialog_jobject_; JavaObjectWeakGlobalRef parent_jobject_weak_ref_; diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc index 0d269e3..f5d4afa 100644 --- a/chrome/browser/ui/browser.cc +++ b/chrome/browser/ui/browser.cc @@ -1624,7 +1624,7 @@ void Browser::DidNavigateToPendingEntry(WebContents* web_contents) { content::JavaScriptDialogManager* Browser::GetJavaScriptDialogManager( WebContents* source) { - return GetJavaScriptDialogManagerInstance(); + return app_modal::JavaScriptDialogManager::GetInstance(); } content::ColorChooser* Browser::OpenColorChooser( diff --git a/chrome/browser/ui/browser_browsertest.cc b/chrome/browser/ui/browser_browsertest.cc index 03a0141..c7e91e18 100644 --- a/chrome/browser/ui/browser_browsertest.cc +++ b/chrome/browser/ui/browser_browsertest.cc @@ -102,6 +102,9 @@ #include "chrome/browser/browser_process.h" #endif +using app_modal::AppModalDialog; +using app_modal::AppModalDialogQueue; +using app_modal::JavaScriptAppModalDialog; using base::ASCIIToUTF16; using content::InterstitialPage; using content::HostZoomMap; 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 1324def..88230f3 100644 --- a/chrome/browser/ui/cocoa/javascript_app_modal_dialog_cocoa.h +++ b/chrome/browser/ui/cocoa/javascript_app_modal_dialog_cocoa.h @@ -18,9 +18,11 @@ class NSAlert; class JavaScriptAppModalDialogHelper; #endif -class JavaScriptAppModalDialogCocoa : public NativeAppModalDialog { +class JavaScriptAppModalDialogCocoa + : public app_modal::NativeAppModalDialog { public: - explicit JavaScriptAppModalDialogCocoa(JavaScriptAppModalDialog* dialog); + explicit JavaScriptAppModalDialogCocoa( + app_modal::JavaScriptAppModalDialog* dialog); virtual ~JavaScriptAppModalDialogCocoa(); // Overridden from NativeAppModalDialog: @@ -31,13 +33,15 @@ class JavaScriptAppModalDialogCocoa : public NativeAppModalDialog { void AcceptAppModalDialog() override; void CancelAppModalDialog() override; - JavaScriptAppModalDialog* dialog() const { return dialog_.get(); } + app_modal::JavaScriptAppModalDialog* dialog() const { + return dialog_.get(); + } private: // Returns the NSAlert associated with the modal dialog. NSAlert* GetAlert() const; - scoped_ptr<JavaScriptAppModalDialog> dialog_; + scoped_ptr<app_modal::JavaScriptAppModalDialog> dialog_; // Created in the constructor and destroyed in the destructor. base::scoped_nsobject<JavaScriptAppModalDialogHelper> helper_; 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 b0d27b4..3f7165c 100644 --- a/chrome/browser/ui/cocoa/javascript_app_modal_dialog_cocoa.mm +++ b/chrome/browser/ui/cocoa/javascript_app_modal_dialog_cocoa.mm @@ -219,7 +219,7 @@ enum AlertAction { // JavaScriptAppModalDialogCocoa, public: JavaScriptAppModalDialogCocoa::JavaScriptAppModalDialogCocoa( - JavaScriptAppModalDialog* dialog) + app_modal::JavaScriptAppModalDialog* dialog) : dialog_(dialog), helper_(NULL) { // Determine the names of the dialog buttons based on the flags. "Default" @@ -440,14 +440,14 @@ void JavaScriptAppModalDialogCocoa::CancelAppModalDialog() { namespace { class ChromeJavaScriptNativeDialogCocoaFactory - : public JavaScriptNativeDialogFactory { + : public app_modal::JavaScriptNativeDialogFactory { public: ChromeJavaScriptNativeDialogCocoaFactory() {} ~ChromeJavaScriptNativeDialogCocoaFactory() override {} private: - NativeAppModalDialog* CreateNativeJavaScriptDialog( - JavaScriptAppModalDialog* dialog, + app_modal::NativeAppModalDialog* CreateNativeJavaScriptDialog( + app_modal::JavaScriptAppModalDialog* dialog, gfx::NativeWindow parent_window) override { return new JavaScriptAppModalDialogCocoa(dialog); } @@ -458,6 +458,7 @@ class ChromeJavaScriptNativeDialogCocoaFactory } // namespace void InstallChromeJavaScriptNativeDialogFactory() { - SetJavaScriptNativeDialogFactory( - make_scoped_ptr(new ChromeJavaScriptNativeDialogCocoaFactory)); + app_modal::JavaScriptDialogManager::GetInstance()-> + SetNativeDialogFactory( + make_scoped_ptr(new ChromeJavaScriptNativeDialogCocoaFactory)); } diff --git a/chrome/browser/ui/views/chrome_javascript_native_dialog_factory_views.cc b/chrome/browser/ui/views/chrome_javascript_native_dialog_factory_views.cc index 1f7ab42..060c43b 100644 --- a/chrome/browser/ui/views/chrome_javascript_native_dialog_factory_views.cc +++ b/chrome/browser/ui/views/chrome_javascript_native_dialog_factory_views.cc @@ -17,20 +17,20 @@ namespace { class ChromeJavaScriptNativeDialogViewsFactory - : public JavaScriptNativeDialogFactory { + : public app_modal::JavaScriptNativeDialogFactory { public: ChromeJavaScriptNativeDialogViewsFactory() {} ~ChromeJavaScriptNativeDialogViewsFactory() override {} private: - NativeAppModalDialog* CreateNativeJavaScriptDialog( - JavaScriptAppModalDialog* dialog, + app_modal::NativeAppModalDialog* CreateNativeJavaScriptDialog( + app_modal::JavaScriptAppModalDialog* dialog, gfx::NativeWindow parent_window) override{ - JavaScriptAppModalDialogViews* d = nullptr; + app_modal::JavaScriptAppModalDialogViews* d = nullptr; #if defined(USE_X11) && !defined(OS_CHROMEOS) d = new JavaScriptAppModalDialogViewsX11(dialog); #else - d = new JavaScriptAppModalDialogViews(dialog); + d = new app_modal::JavaScriptAppModalDialogViews(dialog); #endif constrained_window::CreateBrowserModalDialogViews(d, parent_window); return d; @@ -42,6 +42,7 @@ class ChromeJavaScriptNativeDialogViewsFactory } // namespace void InstallChromeJavaScriptNativeDialogFactory() { - SetJavaScriptNativeDialogFactory( - make_scoped_ptr(new ChromeJavaScriptNativeDialogViewsFactory)); + app_modal::JavaScriptDialogManager::GetInstance()-> + SetNativeDialogFactory( + make_scoped_ptr(new ChromeJavaScriptNativeDialogViewsFactory)); } diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc index 7c92fed..caff0f4 100644 --- a/chrome/browser/ui/views/frame/browser_view.cc +++ b/chrome/browser/ui/views/frame/browser_view.cc @@ -1514,14 +1514,15 @@ bool BrowserView::CanMinimize() const { } bool BrowserView::CanActivate() const { - if (!AppModalDialogQueue::GetInstance()->active_dialog() || - !AppModalDialogQueue::GetInstance()->active_dialog()->native_dialog()) + app_modal::AppModalDialogQueue* queue = + app_modal::AppModalDialogQueue::GetInstance(); + if (!queue->active_dialog() || !queue->active_dialog()->native_dialog()) return true; #if defined(USE_AURA) && defined(OS_CHROMEOS) // On Aura window manager controls all windows so settings focus via PostTask // will make only worse because posted task will keep trying to steal focus. - AppModalDialogQueue::GetInstance()->ActivateModalDialog(); + queue->ActivateModalDialog(); #else // If another browser is app modal, flash and activate the modal browser. This // has to be done in a post task, otherwise if the user clicked on a window @@ -2482,8 +2483,8 @@ bool BrowserView::DoCutCopyPasteForWebContents( void BrowserView::ActivateAppModalDialog() const { // If another browser is app modal, flash and activate the modal browser. - AppModalDialog* active_dialog = - AppModalDialogQueue::GetInstance()->active_dialog(); + app_modal::AppModalDialog* active_dialog = + app_modal::AppModalDialogQueue::GetInstance()->active_dialog(); if (!active_dialog) return; @@ -2494,7 +2495,7 @@ void BrowserView::ActivateAppModalDialog() const { modal_browser->window()->Activate(); } - AppModalDialogQueue::GetInstance()->ActivateModalDialog(); + app_modal::AppModalDialogQueue::GetInstance()->ActivateModalDialog(); } int BrowserView::GetMaxTopInfoBarArrowHeight() { diff --git a/chrome/browser/ui/views/javascript_app_modal_dialog_views_x11.cc b/chrome/browser/ui/views/javascript_app_modal_dialog_views_x11.cc index d11b2d5..68efee2 100644 --- a/chrome/browser/ui/views/javascript_app_modal_dialog_views_x11.cc +++ b/chrome/browser/ui/views/javascript_app_modal_dialog_views_x11.cc @@ -8,8 +8,8 @@ #include "ui/views/widget/widget.h" JavaScriptAppModalDialogViewsX11::JavaScriptAppModalDialogViewsX11( - JavaScriptAppModalDialog* parent) - : JavaScriptAppModalDialogViews(parent) {} + app_modal::JavaScriptAppModalDialog* parent) + : app_modal::JavaScriptAppModalDialogViews(parent) {} JavaScriptAppModalDialogViewsX11::~JavaScriptAppModalDialogViewsX11() { } diff --git a/chrome/browser/ui/views/javascript_app_modal_dialog_views_x11.h b/chrome/browser/ui/views/javascript_app_modal_dialog_views_x11.h index 7d1171e..1a942c3 100644 --- a/chrome/browser/ui/views/javascript_app_modal_dialog_views_x11.h +++ b/chrome/browser/ui/views/javascript_app_modal_dialog_views_x11.h @@ -11,9 +11,11 @@ class JavascriptAppModalEventBlockerX11; // JavaScriptAppModalDialog implmentation for linux desktop. -class JavaScriptAppModalDialogViewsX11 : public JavaScriptAppModalDialogViews { +class JavaScriptAppModalDialogViewsX11 + : public app_modal::JavaScriptAppModalDialogViews { public: - explicit JavaScriptAppModalDialogViewsX11(JavaScriptAppModalDialog* parent); + explicit JavaScriptAppModalDialogViewsX11( + app_modal::JavaScriptAppModalDialog* parent); virtual ~JavaScriptAppModalDialogViewsX11(); // JavaScriptAppModalDialogViews: diff --git a/chrome/browser/unload_browsertest.cc b/chrome/browser/unload_browsertest.cc index befef6d..4276730 100644 --- a/chrome/browser/unload_browsertest.cc +++ b/chrome/browser/unload_browsertest.cc @@ -178,10 +178,10 @@ class UnloadTest : public InProcessBrowserTest { // If |accept| is true, simulates user clicking OK, otherwise simulates // clicking Cancel. void ClickModalDialogButton(bool accept) { - AppModalDialog* dialog = ui_test_utils::WaitForAppModalDialog(); + app_modal::AppModalDialog* dialog = ui_test_utils::WaitForAppModalDialog(); ASSERT_TRUE(dialog->IsJavaScriptModalDialog()); - JavaScriptAppModalDialog* js_dialog = - static_cast<JavaScriptAppModalDialog*>(dialog); + app_modal::JavaScriptAppModalDialog* js_dialog = + static_cast<app_modal::JavaScriptAppModalDialog*>(dialog); if (accept) js_dialog->native_dialog()->AcceptAppModalDialog(); else diff --git a/chrome/test/base/ui_test_utils.cc b/chrome/test/base/ui_test_utils.cc index 10ecf4d..4438ad6 100644 --- a/chrome/test/base/ui_test_utils.cc +++ b/chrome/test/base/ui_test_utils.cc @@ -107,7 +107,7 @@ Browser* WaitForBrowserNotInSet(std::set<Browser*> excluded_browsers) { return new_browser; } -class AppModalDialogWaiter : public AppModalDialogObserver { +class AppModalDialogWaiter : public app_modal::AppModalDialogObserver { public: AppModalDialogWaiter() : dialog_(NULL) { @@ -115,7 +115,7 @@ class AppModalDialogWaiter : public AppModalDialogObserver { ~AppModalDialogWaiter() override { } - AppModalDialog* Wait() { + app_modal::AppModalDialog* Wait() { if (dialog_) return dialog_; message_loop_runner_ = new content::MessageLoopRunner; @@ -125,7 +125,7 @@ class AppModalDialogWaiter : public AppModalDialogObserver { } // AppModalDialogWaiter: - void Notify(AppModalDialog* dialog) override { + void Notify(app_modal::AppModalDialog* dialog) override { DCHECK(!dialog_); dialog_ = dialog; if (message_loop_runner_.get() && message_loop_runner_->loop_running()) @@ -133,7 +133,7 @@ class AppModalDialogWaiter : public AppModalDialogObserver { } private: - AppModalDialog* dialog_; + app_modal::AppModalDialog* dialog_; scoped_refptr<content::MessageLoopRunner> message_loop_runner_; DISALLOW_COPY_AND_ASSIGN(AppModalDialogWaiter); @@ -324,8 +324,9 @@ bool GetRelativeBuildDirectory(base::FilePath* build_dir) { return true; } -AppModalDialog* WaitForAppModalDialog() { - AppModalDialogQueue* dialog_queue = AppModalDialogQueue::GetInstance(); +app_modal::AppModalDialog* WaitForAppModalDialog() { + app_modal::AppModalDialogQueue* dialog_queue = + app_modal::AppModalDialogQueue::GetInstance(); if (dialog_queue->HasActiveDialog()) return dialog_queue->active_dialog(); AppModalDialogWaiter waiter; diff --git a/chrome/test/base/ui_test_utils.h b/chrome/test/base/ui_test_utils.h index 81fa904..7f11fb2 100644 --- a/chrome/test/base/ui_test_utils.h +++ b/chrome/test/base/ui_test_utils.h @@ -26,13 +26,16 @@ #include "ui/gfx/native_widget_types.h" #include "url/gurl.h" -class AppModalDialog; class Browser; class LocationBar; class Profile; class SkBitmap; class TemplateURLService; +namespace app_modal { +class AppModalDialog; +} + namespace base { class FilePath; } @@ -127,7 +130,7 @@ GURL GetTestUrl(const base::FilePath& dir, const base::FilePath& file); bool GetRelativeBuildDirectory(base::FilePath* build_dir); // Blocks until an application modal dialog is showns and returns it. -AppModalDialog* WaitForAppModalDialog(); +app_modal::AppModalDialog* WaitForAppModalDialog(); // Performs a find in the page of the specified tab. Returns the number of // matches found. |ordinal| is an optional parameter which is set to the index diff --git a/components/app_modal.gypi b/components/app_modal.gypi index c2fe1fa..73fefdc 100644 --- a/components/app_modal.gypi +++ b/components/app_modal.gypi @@ -25,8 +25,6 @@ 'app_modal/javascript_dialog_extensions_client.h', 'app_modal/javascript_dialog_manager.cc', 'app_modal/javascript_dialog_manager.h', - 'app_modal/javascript_dialog_manager_impl.cc', - 'app_modal/javascript_dialog_manager_impl.h', 'app_modal/javascript_native_dialog_factory.h', 'app_modal/native_app_modal_dialog.h' ], diff --git a/components/app_modal/BUILD.gn b/components/app_modal/BUILD.gn index 26df1df..a2d373d 100644 --- a/components/app_modal/BUILD.gn +++ b/components/app_modal/BUILD.gn @@ -15,8 +15,6 @@ static_library("app_modal") { "javascript_dialog_extension_client.h", "javascript_dialog_manager.cc", "javascript_dialog_manager.h", - "javascript_dialog_manager_impl.cc", - "javascript_dialog_manager_impl.h", "javascript_native_dialog_factory.h", "native_app_modal_dialog.h" ] diff --git a/components/app_modal/app_modal_dialog.cc b/components/app_modal/app_modal_dialog.cc index 66daa5a..2f7fa9b 100644 --- a/components/app_modal/app_modal_dialog.cc +++ b/components/app_modal/app_modal_dialog.cc @@ -13,6 +13,7 @@ using content::WebContents; +namespace app_modal { namespace { AppModalDialogObserver* app_modal_dialog_observer = NULL; @@ -82,3 +83,5 @@ void AppModalDialog::CompleteDialog() { AppModalDialogQueue::GetInstance()->ShowNextDialog(); } } + +} // namespace app_modal diff --git a/components/app_modal/app_modal_dialog.h b/components/app_modal/app_modal_dialog.h index 7180d12..0c2b5dc 100644 --- a/components/app_modal/app_modal_dialog.h +++ b/components/app_modal/app_modal_dialog.h @@ -11,12 +11,14 @@ #include "base/strings/string16.h" #include "build/build_config.h" -class NativeAppModalDialog; - namespace content { class WebContents; } +namespace app_modal { + +class NativeAppModalDialog; + // A controller+model base class for modal dialogs. class AppModalDialog { public: @@ -102,4 +104,6 @@ class AppModalDialogObserver { DISALLOW_COPY_AND_ASSIGN(AppModalDialogObserver); }; +} // namespace app_modal + #endif // COMPONENTS_APP_MODAL_APP_MODAL_DIALOG_H_ diff --git a/components/app_modal/app_modal_dialog_queue.cc b/components/app_modal/app_modal_dialog_queue.cc index b90ceb3..2bb527d 100644 --- a/components/app_modal/app_modal_dialog_queue.cc +++ b/components/app_modal/app_modal_dialog_queue.cc @@ -7,6 +7,8 @@ #include "base/memory/singleton.h" #include "components/app_modal/app_modal_dialog.h" +namespace app_modal { + // static AppModalDialogQueue* AppModalDialogQueue::GetInstance() { return Singleton<AppModalDialogQueue>::get(); @@ -74,3 +76,5 @@ AppModalDialog* AppModalDialogQueue::GetNextDialog() { } return NULL; } + +} // namespace app_modal diff --git a/components/app_modal/app_modal_dialog_queue.h b/components/app_modal/app_modal_dialog_queue.h index d1f0491..9fbf143 100644 --- a/components/app_modal/app_modal_dialog_queue.h +++ b/components/app_modal/app_modal_dialog_queue.h @@ -9,10 +9,12 @@ #include "base/basictypes.h" -class AppModalDialog; - template <typename T> struct DefaultSingletonTraits; +namespace app_modal { + +class AppModalDialog; + // Keeps a queue of AppModalDialogs, making sure only one app modal // dialog is shown at a time. // This class is a singleton. @@ -86,4 +88,6 @@ class AppModalDialogQueue { DISALLOW_COPY_AND_ASSIGN(AppModalDialogQueue); }; +} // namespace app_modal + #endif // COMPONENTS_APP_MODAL_APP_MODAL_DIALOG_QUEUE_H_ diff --git a/components/app_modal/javascript_app_modal_dialog.cc b/components/app_modal/javascript_app_modal_dialog.cc index 8d9ccc3..27ccd3d 100644 --- a/components/app_modal/javascript_app_modal_dialog.cc +++ b/components/app_modal/javascript_app_modal_dialog.cc @@ -4,7 +4,7 @@ #include "components/app_modal/javascript_app_modal_dialog.h" -#include "components/app_modal/javascript_dialog_manager_impl.h" +#include "components/app_modal/javascript_dialog_manager.h" #include "components/app_modal/javascript_native_dialog_factory.h" #include "content/public/browser/web_contents.h" #include "ui/gfx/text_elider.h" @@ -14,9 +14,9 @@ #include "ui/aura/window_event_dispatcher.h" #endif -using content::JavaScriptDialogManager; using content::WebContents; +namespace app_modal { namespace { // Control maximum sizes of various texts passed to us from javascript. @@ -69,7 +69,7 @@ JavaScriptAppModalDialog::JavaScriptAppModalDialog( bool display_suppress_checkbox, bool is_before_unload_dialog, bool is_reload, - const JavaScriptDialogManager::DialogClosedCallback& callback) + const content::JavaScriptDialogManager::DialogClosedCallback& callback) : AppModalDialog(web_contents, title), extra_data_map_(extra_data_map), javascript_message_type_(javascript_message_type), @@ -95,7 +95,7 @@ NativeAppModalDialog* JavaScriptAppModalDialog::CreateNativeDialog() { parent_window = NULL; } #endif // defined(USE_AURA) - return JavaScriptDialogManagerImpl::GetInstance()->native_dialog_factory()-> + return JavaScriptDialogManager::GetInstance()->native_dialog_factory()-> CreateNativeJavaScriptDialog(this, parent_window); } @@ -161,7 +161,7 @@ void JavaScriptAppModalDialog::NotifyDelegate(bool success, } // The callback_ above may delete web_contents_, thus removing the extra - // data from the map owned by ChromeJavaScriptDialogManager. Make sure + // data from the map owned by ::JavaScriptDialogManager. Make sure // to only use the data if still present. http://crbug.com/236476 ExtraDataMap::iterator extra_data = extra_data_map_->find(web_contents()); if (extra_data != extra_data_map_->end()) { @@ -174,3 +174,5 @@ void JavaScriptAppModalDialog::NotifyDelegate(bool success, // See crbug.com/63732. AppModalDialog::Invalidate(); } + +} // namespace app_modal diff --git a/components/app_modal/javascript_app_modal_dialog.h b/components/app_modal/javascript_app_modal_dialog.h index 3ea6bca..64883e0 100644 --- a/components/app_modal/javascript_app_modal_dialog.h +++ b/components/app_modal/javascript_app_modal_dialog.h @@ -13,6 +13,8 @@ #include "components/app_modal/app_modal_dialog.h" #include "content/public/browser/javascript_dialog_manager.h" +namespace app_modal { + // Extra data for JavaScript dialogs to add Chrome-only features. class ChromeJavaScriptDialogExtraData { public: @@ -98,4 +100,6 @@ class JavaScriptAppModalDialog : public AppModalDialog { DISALLOW_COPY_AND_ASSIGN(JavaScriptAppModalDialog); }; +} // namespace app_modal + #endif // COMPONENTS_APP_MODAL_JAVASCRIPT_APP_MODAL_DIALOG_H_ diff --git a/components/app_modal/javascript_dialog_extensions_client.h b/components/app_modal/javascript_dialog_extensions_client.h index 466aaeb..f85976e 100644 --- a/components/app_modal/javascript_dialog_extensions_client.h +++ b/components/app_modal/javascript_dialog_extensions_client.h @@ -13,6 +13,8 @@ namespace content { class WebContents; } +namespace app_modal { + // A client interface to access and control extensions/apps // that opened a JavaScript dialog. class JavaScriptDialogExtensionsClient { @@ -35,4 +37,6 @@ class JavaScriptDialogExtensionsClient { std::string* name_out) = 0; }; +} // namespace app_modal + #endif // COMPONENTS_APP_MODAL_JAVASCRIPT_DIALOG_EXTENSIONS_CLIENT_H_ diff --git a/components/app_modal/javascript_dialog_manager.cc b/components/app_modal/javascript_dialog_manager.cc index 4cb5f5f..5bf42fd 100644 --- a/components/app_modal/javascript_dialog_manager.cc +++ b/components/app_modal/javascript_dialog_manager.cc @@ -4,22 +4,233 @@ #include "components/app_modal/javascript_dialog_manager.h" +#include "base/bind.h" +#include "base/i18n/rtl.h" +#include "base/strings/utf_string_conversions.h" +#include "components/app_modal/app_modal_dialog.h" +#include "components/app_modal/app_modal_dialog_queue.h" #include "components/app_modal/javascript_dialog_extensions_client.h" -#include "components/app_modal/javascript_dialog_manager_impl.h" #include "components/app_modal/javascript_native_dialog_factory.h" +#include "components/app_modal/native_app_modal_dialog.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" -content::JavaScriptDialogManager* GetJavaScriptDialogManagerInstance() { - return JavaScriptDialogManagerImpl::GetInstance(); +namespace app_modal { +namespace { + +class DefaultExtensionsClient : public JavaScriptDialogExtensionsClient { + public: + DefaultExtensionsClient() {} + ~DefaultExtensionsClient() override {} + + private: + // JavaScriptDialogExtensionsClient: + void OnDialogOpened(content::WebContents* web_contents) override {} + void OnDialogClosed(content::WebContents* web_contents) override {} + bool GetExtensionName(content::WebContents* web_contents, + const GURL& origin_url, + std::string* name_out) override { + return false; + } + + DISALLOW_COPY_AND_ASSIGN(DefaultExtensionsClient); +}; + +} // namespace + +//////////////////////////////////////////////////////////////////////////////// +// JavaScriptDialogManager, public: + +// static +JavaScriptDialogManager* JavaScriptDialogManager::GetInstance() { + return Singleton<JavaScriptDialogManager>::get(); +} + +void JavaScriptDialogManager::SetNativeDialogFactory( + scoped_ptr<JavaScriptNativeDialogFactory> factory) { + native_dialog_factory_ = factory.Pass(); +} + +void JavaScriptDialogManager::SetExtensionsClient( + scoped_ptr<JavaScriptDialogExtensionsClient> extensions_client) { + extensions_client_ = extensions_client.Pass(); } -void SetJavaScriptNativeDialogFactory( - scoped_ptr<JavaScriptNativeDialogFactory> new_factory) { - JavaScriptDialogManagerImpl::GetInstance()->SetNativeDialogFactory( - new_factory.Pass()); +//////////////////////////////////////////////////////////////////////////////// +// JavaScriptDialogManager, private: + +JavaScriptDialogManager::JavaScriptDialogManager() + : extensions_client_(new DefaultExtensionsClient) { +} + +JavaScriptDialogManager::~JavaScriptDialogManager() { } -void SetJavaScriptDialogExtensionsClient( - scoped_ptr<JavaScriptDialogExtensionsClient> new_client) { - JavaScriptDialogManagerImpl::GetInstance()->SetExtensionsClient( - new_client.Pass()); +void JavaScriptDialogManager::RunJavaScriptDialog( + content::WebContents* web_contents, + const GURL& origin_url, + const std::string& accept_lang, + content::JavaScriptMessageType message_type, + const base::string16& message_text, + const base::string16& default_prompt_text, + const DialogClosedCallback& callback, + bool* did_suppress_message) { + *did_suppress_message = false; + + ChromeJavaScriptDialogExtraData* extra_data = + &javascript_dialog_extra_data_[web_contents]; + + if (extra_data->suppress_javascript_messages_) { + *did_suppress_message = true; + return; + } + + base::TimeDelta time_since_last_message = base::TimeTicks::Now() - + extra_data->last_javascript_message_dismissal_; + bool display_suppress_checkbox = false; + // 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(kJavaScriptMessageExpectedDelay)) { + display_suppress_checkbox = true; + } else { + display_suppress_checkbox = false; + } + + bool is_alert = message_type == content::JAVASCRIPT_MESSAGE_TYPE_ALERT; + base::string16 dialog_title = + GetTitle(web_contents, origin_url, accept_lang, is_alert); + + extensions_client_->OnDialogOpened(web_contents); + + AppModalDialogQueue::GetInstance()->AddDialog(new JavaScriptAppModalDialog( + web_contents, + &javascript_dialog_extra_data_, + dialog_title, + message_type, + message_text, + default_prompt_text, + display_suppress_checkbox, + false, // is_before_unload_dialog + false, // is_reload + base::Bind(&JavaScriptDialogManager::OnDialogClosed, + base::Unretained(this), web_contents, callback))); } + +void JavaScriptDialogManager::RunBeforeUnloadDialog( + content::WebContents* web_contents, + const base::string16& message_text, + bool is_reload, + const DialogClosedCallback& callback) { + const base::string16 title = l10n_util::GetStringUTF16(is_reload ? + IDS_BEFORERELOAD_MESSAGEBOX_TITLE : IDS_BEFOREUNLOAD_MESSAGEBOX_TITLE); + const base::string16 footer = l10n_util::GetStringUTF16(is_reload ? + IDS_BEFORERELOAD_MESSAGEBOX_FOOTER : IDS_BEFOREUNLOAD_MESSAGEBOX_FOOTER); + + base::string16 full_message = + message_text + base::ASCIIToUTF16("\n\n") + footer; + + extensions_client_->OnDialogOpened(web_contents); + + AppModalDialogQueue::GetInstance()->AddDialog(new JavaScriptAppModalDialog( + web_contents, + &javascript_dialog_extra_data_, + title, + content::JAVASCRIPT_MESSAGE_TYPE_CONFIRM, + full_message, + base::string16(), // default_prompt_text + false, // display_suppress_checkbox + true, // is_before_unload_dialog + is_reload, + base::Bind(&JavaScriptDialogManager::OnDialogClosed, + base::Unretained(this), web_contents, callback))); +} + +bool JavaScriptDialogManager::HandleJavaScriptDialog( + content::WebContents* web_contents, + bool accept, + const base::string16* prompt_override) { + AppModalDialogQueue* dialog_queue = AppModalDialogQueue::GetInstance(); + if (!dialog_queue->HasActiveDialog() || + !dialog_queue->active_dialog()->IsJavaScriptModalDialog() || + dialog_queue->active_dialog()->web_contents() != web_contents) { + return false; + } + JavaScriptAppModalDialog* dialog = static_cast<JavaScriptAppModalDialog*>( + dialog_queue->active_dialog()); + if (accept) { + if (prompt_override) + dialog->SetOverridePromptText(*prompt_override); + dialog->native_dialog()->AcceptAppModalDialog(); + } else { + dialog->native_dialog()->CancelAppModalDialog(); + } + return true; +} + +void JavaScriptDialogManager::WebContentsDestroyed( + content::WebContents* web_contents) { + CancelActiveAndPendingDialogs(web_contents); + javascript_dialog_extra_data_.erase(web_contents); +} + +base::string16 JavaScriptDialogManager::GetTitle( + content::WebContents* web_contents, + const GURL& origin_url, + const std::string& accept_lang, + bool is_alert) { + // If the URL hasn't any host, return the default string. + if (!origin_url.has_host()) { + return l10n_util::GetStringUTF16( + is_alert ? IDS_JAVASCRIPT_ALERT_DEFAULT_TITLE + : IDS_JAVASCRIPT_MESSAGEBOX_DEFAULT_TITLE); + } + + // For extensions, show the extension name, but only if the origin of + // the alert matches the top-level WebContents. + std::string name; + if (extensions_client_->GetExtensionName(web_contents, origin_url, &name)) + return base::UTF8ToUTF16(name); + + // Otherwise, return the formatted URL. + // In this case, force URL to have LTR directionality. + base::string16 url_string = net::FormatUrl(origin_url, accept_lang); + return l10n_util::GetStringFUTF16( + is_alert ? IDS_JAVASCRIPT_ALERT_TITLE + : IDS_JAVASCRIPT_MESSAGEBOX_TITLE, + base::i18n::GetDisplayStringInLTRDirectionality(url_string)); +} + +void JavaScriptDialogManager::CancelActiveAndPendingDialogs( + content::WebContents* web_contents) { + AppModalDialogQueue* queue = AppModalDialogQueue::GetInstance(); + AppModalDialog* active_dialog = queue->active_dialog(); + if (active_dialog && active_dialog->web_contents() == web_contents) + active_dialog->Invalidate(); + for (AppModalDialogQueue::iterator i = queue->begin(); + i != queue->end(); ++i) { + if ((*i)->web_contents() == web_contents) + (*i)->Invalidate(); + } +} + +void JavaScriptDialogManager::OnDialogClosed( + content::WebContents* web_contents, + DialogClosedCallback callback, + bool success, + const base::string16& user_input) { + // If an extension opened this dialog then the extension may shut down its + // lazy background page after the dialog closes. (Dialogs are closed before + // their WebContents is destroyed so |web_contents| is still valid here.) + extensions_client_->OnDialogClosed(web_contents); + + callback.Run(success, user_input); +} + +} // namespace app_modal diff --git a/components/app_modal/javascript_dialog_manager.h b/components/app_modal/javascript_dialog_manager.h index 88aa78c..8372015 100644 --- a/components/app_modal/javascript_dialog_manager.h +++ b/components/app_modal/javascript_dialog_manager.h @@ -6,28 +6,82 @@ #define COMPONENTS_APP_MODAL_JAVASCRIPT_DIALOG_MANAGER_H_ #include "base/memory/scoped_ptr.h" +#include "base/memory/singleton.h" +#include "components/app_modal/javascript_app_modal_dialog.h" +#include "content/public/browser/javascript_dialog_manager.h" -namespace content { -class JavaScriptDialogManager; -} +namespace app_modal { class JavaScriptDialogExtensionsClient; class JavaScriptNativeDialogFactory; -// Returns a JavaScriptDialogManager that creates real dialogs. -// It returns a Singleton instance of JavaScriptDialogManager, -// which should not be deleted. -content::JavaScriptDialogManager* GetJavaScriptDialogManagerInstance(); - -// Sets the JavaScriptNativeDialogFactory used to create platform specific -// dialog window implementation. -void SetJavaScriptNativeDialogFactory( - scoped_ptr<JavaScriptNativeDialogFactory> factory); - -// JavaScript dialog may be opened by an extensions/app, thus needs -// access to extensions functionality. This sets a client interface to -// access //extensions. -void SetJavaScriptDialogExtensionsClient( - scoped_ptr<JavaScriptDialogExtensionsClient> client); +class JavaScriptDialogManager : public content::JavaScriptDialogManager { + public: + static JavaScriptDialogManager* GetInstance(); + + JavaScriptNativeDialogFactory* native_dialog_factory() { + return native_dialog_factory_.get(); + } + + // Sets the JavaScriptNativeDialogFactory used to create platform specific + // dialog window instances. + void SetNativeDialogFactory( + scoped_ptr<JavaScriptNativeDialogFactory> factory); + + // JavaScript dialogs may be opened by an extensions/app, thus they need + // access to extensions functionality. This sets a client interface to + // access //extensions. + void SetExtensionsClient( + scoped_ptr<JavaScriptDialogExtensionsClient> extensions_client); + + private: + friend struct DefaultSingletonTraits<JavaScriptDialogManager>; + + JavaScriptDialogManager(); + ~JavaScriptDialogManager() override; + + // JavaScriptDialogManager: + void RunJavaScriptDialog(content::WebContents* web_contents, + const GURL& origin_url, + const std::string& accept_lang, + content::JavaScriptMessageType message_type, + const base::string16& message_text, + const base::string16& default_prompt_text, + const DialogClosedCallback& callback, + bool* did_suppress_message) override; + void RunBeforeUnloadDialog(content::WebContents* web_contents, + const base::string16& message_text, + bool is_reload, + const DialogClosedCallback& callback) override; + bool HandleJavaScriptDialog(content::WebContents* web_contents, + bool accept, + const base::string16* prompt_override) override; + void CancelActiveAndPendingDialogs( + content::WebContents* web_contents) override; + void WebContentsDestroyed(content::WebContents* web_contents) override; + + base::string16 GetTitle(content::WebContents* web_contents, + const GURL& origin_url, + const std::string& accept_lang, + bool is_alert); + + // Wrapper around a DialogClosedCallback so that we can intercept it before + // passing it onto the original callback. + void OnDialogClosed(content::WebContents* web_contents, + DialogClosedCallback callback, + bool success, + const base::string16& user_input); + + // Mapping between the WebContents and their extra data. The key + // is a void* because the pointer is just a cookie and is never dereferenced. + JavaScriptAppModalDialog::ExtraDataMap javascript_dialog_extra_data_; + + scoped_ptr<JavaScriptNativeDialogFactory> native_dialog_factory_; + scoped_ptr<JavaScriptDialogExtensionsClient> extensions_client_; + + DISALLOW_COPY_AND_ASSIGN(JavaScriptDialogManager); +}; + +} // namespace app_modal #endif // COMPONENTS_APP_MODAL_JAVASCRIPT_DIALOG_MANAGER_H_ diff --git a/components/app_modal/javascript_dialog_manager_impl.cc b/components/app_modal/javascript_dialog_manager_impl.cc deleted file mode 100644 index 4203062..0000000 --- a/components/app_modal/javascript_dialog_manager_impl.cc +++ /dev/null @@ -1,233 +0,0 @@ -// Copyright (c) 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 "components/app_modal/javascript_dialog_manager_impl.h" - -#include "base/bind.h" -#include "base/compiler_specific.h" -#include "base/i18n/rtl.h" -#include "base/strings/utf_string_conversions.h" -#include "components/app_modal/app_modal_dialog.h" -#include "components/app_modal/app_modal_dialog_queue.h" -#include "components/app_modal/javascript_dialog_extensions_client.h" -#include "components/app_modal/javascript_native_dialog_factory.h" -#include "components/app_modal/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" - -namespace { - -class DefaultExtensionsClient : public JavaScriptDialogExtensionsClient { - public: - DefaultExtensionsClient() {} - ~DefaultExtensionsClient() override {} - - private: - // JavaScriptDialogExtensionsClient: - void OnDialogOpened(content::WebContents* web_contents) override {} - void OnDialogClosed(content::WebContents* web_contents) override {} - bool GetExtensionName(content::WebContents* web_contents, - const GURL& origin_url, - std::string* name_out) override { - return false; - } - - DISALLOW_COPY_AND_ASSIGN(DefaultExtensionsClient); -}; - -} // namespace - -//////////////////////////////////////////////////////////////////////////////// -// JavaScriptDialogManagerImpl, public: - -// static -JavaScriptDialogManagerImpl* JavaScriptDialogManagerImpl::GetInstance() { - return Singleton<JavaScriptDialogManagerImpl>::get(); -} - -void JavaScriptDialogManagerImpl::RunJavaScriptDialog( - content::WebContents* web_contents, - const GURL& origin_url, - const std::string& accept_lang, - content::JavaScriptMessageType message_type, - const base::string16& message_text, - const base::string16& default_prompt_text, - const DialogClosedCallback& callback, - bool* did_suppress_message) { - *did_suppress_message = false; - - ChromeJavaScriptDialogExtraData* extra_data = - &javascript_dialog_extra_data_[web_contents]; - - if (extra_data->suppress_javascript_messages_) { - *did_suppress_message = true; - return; - } - - base::TimeDelta time_since_last_message = base::TimeTicks::Now() - - extra_data->last_javascript_message_dismissal_; - bool display_suppress_checkbox = false; - // 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(kJavaScriptMessageExpectedDelay)) { - display_suppress_checkbox = true; - } else { - display_suppress_checkbox = false; - } - - bool is_alert = message_type == content::JAVASCRIPT_MESSAGE_TYPE_ALERT; - base::string16 dialog_title = - GetTitle(web_contents, origin_url, accept_lang, is_alert); - - extensions_client_->OnDialogOpened(web_contents); - - AppModalDialogQueue::GetInstance()->AddDialog(new JavaScriptAppModalDialog( - web_contents, - &javascript_dialog_extra_data_, - dialog_title, - message_type, - message_text, - default_prompt_text, - display_suppress_checkbox, - false, // is_before_unload_dialog - false, // is_reload - base::Bind(&JavaScriptDialogManagerImpl::OnDialogClosed, - base::Unretained(this), web_contents, callback))); -} - -void JavaScriptDialogManagerImpl::RunBeforeUnloadDialog( - content::WebContents* web_contents, - const base::string16& message_text, - bool is_reload, - const DialogClosedCallback& callback) { - const base::string16 title = l10n_util::GetStringUTF16(is_reload ? - IDS_BEFORERELOAD_MESSAGEBOX_TITLE : IDS_BEFOREUNLOAD_MESSAGEBOX_TITLE); - const base::string16 footer = l10n_util::GetStringUTF16(is_reload ? - IDS_BEFORERELOAD_MESSAGEBOX_FOOTER : IDS_BEFOREUNLOAD_MESSAGEBOX_FOOTER); - - base::string16 full_message = - message_text + base::ASCIIToUTF16("\n\n") + footer; - - extensions_client_->OnDialogOpened(web_contents); - - AppModalDialogQueue::GetInstance()->AddDialog(new JavaScriptAppModalDialog( - web_contents, - &javascript_dialog_extra_data_, - title, - content::JAVASCRIPT_MESSAGE_TYPE_CONFIRM, - full_message, - base::string16(), // default_prompt_text - false, // display_suppress_checkbox - true, // is_before_unload_dialog - is_reload, - base::Bind(&JavaScriptDialogManagerImpl::OnDialogClosed, - base::Unretained(this), web_contents, callback))); -} - -bool JavaScriptDialogManagerImpl::HandleJavaScriptDialog( - content::WebContents* web_contents, - bool accept, - const base::string16* prompt_override) { - AppModalDialogQueue* dialog_queue = AppModalDialogQueue::GetInstance(); - if (!dialog_queue->HasActiveDialog() || - !dialog_queue->active_dialog()->IsJavaScriptModalDialog() || - dialog_queue->active_dialog()->web_contents() != web_contents) { - return false; - } - JavaScriptAppModalDialog* dialog = static_cast<JavaScriptAppModalDialog*>( - dialog_queue->active_dialog()); - if (accept) { - if (prompt_override) - dialog->SetOverridePromptText(*prompt_override); - dialog->native_dialog()->AcceptAppModalDialog(); - } else { - dialog->native_dialog()->CancelAppModalDialog(); - } - return true; -} - -void JavaScriptDialogManagerImpl::WebContentsDestroyed( - content::WebContents* web_contents) { - CancelActiveAndPendingDialogs(web_contents); - javascript_dialog_extra_data_.erase(web_contents); -} - -void JavaScriptDialogManagerImpl::SetNativeDialogFactory( - scoped_ptr<JavaScriptNativeDialogFactory> factory) { - native_dialog_factory_ = factory.Pass(); -} - -void JavaScriptDialogManagerImpl::SetExtensionsClient( - scoped_ptr<JavaScriptDialogExtensionsClient> extensions_client) { - extensions_client_ = extensions_client.Pass(); -} - -JavaScriptDialogManagerImpl::JavaScriptDialogManagerImpl() - : extensions_client_(new DefaultExtensionsClient) { -} - -JavaScriptDialogManagerImpl::~JavaScriptDialogManagerImpl() { -} - -base::string16 JavaScriptDialogManagerImpl::GetTitle( - content::WebContents* web_contents, - const GURL& origin_url, - const std::string& accept_lang, - bool is_alert) { - // If the URL hasn't any host, return the default string. - if (!origin_url.has_host()) { - return l10n_util::GetStringUTF16( - is_alert ? IDS_JAVASCRIPT_ALERT_DEFAULT_TITLE - : IDS_JAVASCRIPT_MESSAGEBOX_DEFAULT_TITLE); - } - - // For extensions, show the extension name, but only if the origin of - // the alert matches the top-level WebContents. - std::string name; - if (extensions_client_->GetExtensionName(web_contents, origin_url, &name)) - return base::UTF8ToUTF16(name); - - // Otherwise, return the formatted URL. - // In this case, force URL to have LTR directionality. - base::string16 url_string = net::FormatUrl(origin_url, accept_lang); - return l10n_util::GetStringFUTF16( - is_alert ? IDS_JAVASCRIPT_ALERT_TITLE - : IDS_JAVASCRIPT_MESSAGEBOX_TITLE, - base::i18n::GetDisplayStringInLTRDirectionality(url_string)); -} - -void JavaScriptDialogManagerImpl::CancelActiveAndPendingDialogs( - content::WebContents* web_contents) { - AppModalDialogQueue* queue = AppModalDialogQueue::GetInstance(); - AppModalDialog* active_dialog = queue->active_dialog(); - if (active_dialog && active_dialog->web_contents() == web_contents) - active_dialog->Invalidate(); - for (AppModalDialogQueue::iterator i = queue->begin(); - i != queue->end(); ++i) { - if ((*i)->web_contents() == web_contents) - (*i)->Invalidate(); - } -} - -void JavaScriptDialogManagerImpl::OnDialogClosed( - content::WebContents* web_contents, - DialogClosedCallback callback, - bool success, - const base::string16& user_input) { - // If an extension opened this dialog then the extension may shut down its - // lazy background page after the dialog closes. (Dialogs are closed before - // their WebContents is destroyed so |web_contents| is still valid here.) - extensions_client_->OnDialogClosed(web_contents); - - callback.Run(success, user_input); -} diff --git a/components/app_modal/javascript_dialog_manager_impl.h b/components/app_modal/javascript_dialog_manager_impl.h deleted file mode 100644 index 4938936..0000000 --- a/components/app_modal/javascript_dialog_manager_impl.h +++ /dev/null @@ -1,79 +0,0 @@ -// 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. - -#ifndef COMPONENTS_APP_MODAL_JAVASCRIPT_DIALOG_MANAGER_IMPL_H_ -#define COMPONENTS_APP_MODAL_JAVASCRIPT_DIALOG_MANAGER_IMPL_H_ - -#include "content/public/browser/javascript_dialog_manager.h" - -#include "base/memory/scoped_ptr.h" -#include "base/memory/singleton.h" -#include "components/app_modal/javascript_app_modal_dialog.h" - -class JavaScriptDialogExtensionsClient; -class JavaScriptNativeDialogFactory; - -class JavaScriptDialogManagerImpl : public content::JavaScriptDialogManager { - public: - static JavaScriptDialogManagerImpl* GetInstance(); - - // JavaScriptDialogManager: - void RunJavaScriptDialog(content::WebContents* web_contents, - const GURL& origin_url, - const std::string& accept_lang, - content::JavaScriptMessageType message_type, - const base::string16& message_text, - const base::string16& default_prompt_text, - const DialogClosedCallback& callback, - bool* did_suppress_message) override; - void RunBeforeUnloadDialog(content::WebContents* web_contents, - const base::string16& message_text, - bool is_reload, - const DialogClosedCallback& callback) override; - bool HandleJavaScriptDialog(content::WebContents* web_contents, - bool accept, - const base::string16* prompt_override) override; - void CancelActiveAndPendingDialogs( - content::WebContents* web_contents) override; - void WebContentsDestroyed(content::WebContents* web_contents) override; - - JavaScriptNativeDialogFactory* native_dialog_factory() { - return native_dialog_factory_.get(); - } - - void SetNativeDialogFactory( - scoped_ptr<JavaScriptNativeDialogFactory> factory); - - void SetExtensionsClient( - scoped_ptr<JavaScriptDialogExtensionsClient> extensions_client); - - private: - friend struct DefaultSingletonTraits<JavaScriptDialogManagerImpl>; - - JavaScriptDialogManagerImpl(); - ~JavaScriptDialogManagerImpl() override; - - base::string16 GetTitle(content::WebContents* web_contents, - const GURL& origin_url, - const std::string& accept_lang, - bool is_alert); - - // Wrapper around a DialogClosedCallback so that we can intercept it before - // passing it onto the original callback. - void OnDialogClosed(content::WebContents* web_contents, - DialogClosedCallback callback, - bool success, - const base::string16& user_input); - - // Mapping between the WebContents and their extra data. The key - // is a void* because the pointer is just a cookie and is never dereferenced. - JavaScriptAppModalDialog::ExtraDataMap javascript_dialog_extra_data_; - - scoped_ptr<JavaScriptDialogExtensionsClient> extensions_client_; - scoped_ptr<JavaScriptNativeDialogFactory> native_dialog_factory_; - - DISALLOW_COPY_AND_ASSIGN(JavaScriptDialogManagerImpl); -}; - -#endif // COMPONENTS_APP_MODAL_JAVASCRIPT_DIALOG_MANAGER_IMPL_H_ diff --git a/components/app_modal/javascript_native_dialog_factory.h b/components/app_modal/javascript_native_dialog_factory.h index 155af63..d8f901c 100644 --- a/components/app_modal/javascript_native_dialog_factory.h +++ b/components/app_modal/javascript_native_dialog_factory.h @@ -7,6 +7,8 @@ #include "ui/gfx/native_widget_types.h" +namespace app_modal { + class JavaScriptAppModalDialog; class NativeAppModalDialog; @@ -20,4 +22,6 @@ class JavaScriptNativeDialogFactory { gfx::NativeWindow parent_window) = 0; }; +} // namespace app_modal + #endif // COMPONENTS_APP_MODAL_JAVASCRIPT_NATIVE_DIALOG_FACTORY_H_ diff --git a/components/app_modal/native_app_modal_dialog.h b/components/app_modal/native_app_modal_dialog.h index 192619a..e41ff48 100644 --- a/components/app_modal/native_app_modal_dialog.h +++ b/components/app_modal/native_app_modal_dialog.h @@ -7,6 +7,8 @@ #include "ui/gfx/native_widget_types.h" +namespace app_modal { + class JavaScriptAppModalDialog; class NativeAppModalDialog { @@ -29,4 +31,6 @@ class NativeAppModalDialog { virtual void CancelAppModalDialog() = 0; }; +} // namespace app_modal + #endif // COMPONENTS_APP_MODAL_NATIVE_APP_MODAL_DIALOG_H_ diff --git a/components/app_modal/views/javascript_app_modal_dialog_views.cc b/components/app_modal/views/javascript_app_modal_dialog_views.cc index 575e66c..7488272 100644 --- a/components/app_modal/views/javascript_app_modal_dialog_views.cc +++ b/components/app_modal/views/javascript_app_modal_dialog_views.cc @@ -15,6 +15,8 @@ #include "ui/views/widget/widget.h" #include "ui/views/window/dialog_client_view.h" +namespace app_modal { + //////////////////////////////////////////////////////////////////////////////// // JavaScriptAppModalDialogViews, public: @@ -151,3 +153,5 @@ views::View* JavaScriptAppModalDialogViews::GetInitiallyFocusedView() { return message_box_view_->text_box(); return views::DialogDelegate::GetInitiallyFocusedView(); } + +} // namespace app_modal diff --git a/components/app_modal/views/javascript_app_modal_dialog_views.h b/components/app_modal/views/javascript_app_modal_dialog_views.h index 8165393..6af35ba 100644 --- a/components/app_modal/views/javascript_app_modal_dialog_views.h +++ b/components/app_modal/views/javascript_app_modal_dialog_views.h @@ -15,6 +15,8 @@ namespace views { class MessageBoxView; } +namespace app_modal { + class JavaScriptAppModalDialogViews : public NativeAppModalDialog, public views::DialogDelegate { public: @@ -56,4 +58,6 @@ class JavaScriptAppModalDialogViews : public NativeAppModalDialog, DISALLOW_COPY_AND_ASSIGN(JavaScriptAppModalDialogViews); }; +} // namespace app_modal + #endif // COMPONENTS_APP_MODAL_VIEWS_JAVASCRIPT_APP_MODAL_DIALOG_VIEWS_H_ diff --git a/extensions/components/javascript_dialog_extensions_client/javascript_dialog_extension_client_impl.cc b/extensions/components/javascript_dialog_extensions_client/javascript_dialog_extension_client_impl.cc index ddf0272..f50b4e9 100644 --- a/extensions/components/javascript_dialog_extensions_client/javascript_dialog_extension_client_impl.cc +++ b/extensions/components/javascript_dialog_extensions_client/javascript_dialog_extension_client_impl.cc @@ -11,6 +11,7 @@ #include "extensions/common/extension.h" #include "ui/gfx/native_widget_types.h" +namespace javascript_dialog_extensions_client { namespace { using extensions::Extension; @@ -30,7 +31,7 @@ const Extension* GetExtensionForWebContents( } class JavaScriptDialogExtensionsClientImpl - : public JavaScriptDialogExtensionsClient { + : public app_modal::JavaScriptDialogExtensionsClient { public: JavaScriptDialogExtensionsClientImpl() {} ~JavaScriptDialogExtensionsClientImpl() override {} @@ -74,7 +75,10 @@ class JavaScriptDialogExtensionsClientImpl } // namespace -void InstallJavaScriptDialogExtensionsClient() { - SetJavaScriptDialogExtensionsClient( - make_scoped_ptr(new JavaScriptDialogExtensionsClientImpl)); +void InstallClient() { + app_modal::JavaScriptDialogManager::GetInstance()-> + SetExtensionsClient( + make_scoped_ptr(new JavaScriptDialogExtensionsClientImpl)); } + +} // namespace javascript_dialog_extensions_client diff --git a/extensions/components/javascript_dialog_extensions_client/javascript_dialog_extension_client_impl.h b/extensions/components/javascript_dialog_extensions_client/javascript_dialog_extension_client_impl.h index 7aa2d22..b94fff2 100644 --- a/extensions/components/javascript_dialog_extensions_client/javascript_dialog_extension_client_impl.h +++ b/extensions/components/javascript_dialog_extensions_client/javascript_dialog_extension_client_impl.h @@ -5,7 +5,11 @@ #ifndef EXTENSIONS_COMPONENTS_JAVASCRIPT_DIALOG_EXTENSIONS_CLIENT_JAVASCRIPT_DIALOG_EXTENSION_CLIENT_IMPL_H_ #define EXTENSIONS_COMPONENTS_JAVASCRIPT_DIALOG_EXTENSIONS_CLIENT_JAVASCRIPT_DIALOG_EXTENSION_CLIENT_IMPL_H_ -void InstallJavaScriptDialogExtensionsClient(); +namespace javascript_dialog_extensions_client { + +void InstallClient(); + +} // namespace javascript_dialog_extensions_client #endif // EXTENSIONS_COMPONENTS_JAVASCRIPT_DIALOG_EXTENSIONS_CLIENT_JAVASCRIPT_DIALOG_EXTENSION_CLIENT_IMPL_H_ |