diff options
author | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-09 21:41:05 +0000 |
---|---|---|
committer | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-09 21:41:05 +0000 |
commit | 7d7843067346da54c8f2dcf4c407eb3bf6ef56f9 (patch) | |
tree | 18e0b1008a6a0379018aac02e3caed8b009bf93c | |
parent | 8af79b005cce6d0263655d81ce3861a4c8c2dc5e (diff) | |
download | chromium_src-7d7843067346da54c8f2dcf4c407eb3bf6ef56f9.zip chromium_src-7d7843067346da54c8f2dcf4c407eb3bf6ef56f9.tar.gz chromium_src-7d7843067346da54c8f2dcf4c407eb3bf6ef56f9.tar.bz2 |
Revert r44125
BUG=40439
TBR=sky@chromium.org
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@44132 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/extensions/alert_apitest.cc | 50 | ||||
-rw-r--r-- | chrome/browser/js_modal_dialog.cc | 24 | ||||
-rw-r--r-- | chrome/browser/js_modal_dialog.h | 2 | ||||
-rw-r--r-- | chrome/browser/views/jsmessage_box_dialog.cc | 4 | ||||
-rw-r--r-- | chrome/browser/views/jsmessage_box_dialog.h | 1 |
5 files changed, 31 insertions, 50 deletions
diff --git a/chrome/browser/extensions/alert_apitest.cc b/chrome/browser/extensions/alert_apitest.cc index 7bb8448..23e8fe8 100644 --- a/chrome/browser/extensions/alert_apitest.cc +++ b/chrome/browser/extensions/alert_apitest.cc @@ -7,8 +7,6 @@ #include "chrome/browser/extensions/extension_apitest.h" #include "chrome/browser/extensions/extension_host.h" #include "chrome/browser/extensions/extension_process_manager.h" -#include "chrome/browser/extensions/extensions_service.h" -#include "chrome/browser/renderer_host/render_process_host.h" #include "chrome/browser/renderer_host/render_view_host.h" #include "chrome/browser/profile.h" #include "chrome/test/ui_test_utils.h" @@ -20,58 +18,10 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, AlertBasic) { ExtensionHost* host = browser()->profile()->GetExtensionProcessManager()-> GetBackgroundHostForExtension(extension); ASSERT_TRUE(host); - host->render_view_host()->ExecuteJavascriptInWebFrame(L"", L"alert('This should not crash.');"); AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); ASSERT_TRUE(alert); - ASSERT_TRUE(alert->IsValid()); - alert->CloseModalDialog(); } - -// Test that we handle the case of an extension being unloaded while an alert is -// up gracefully. -IN_PROC_BROWSER_TEST_F(ExtensionApiTest, AlertOrphanedByUnload) { - ASSERT_TRUE(RunExtensionTest("alert")) << message_; - - Extension* extension = GetSingleLoadedExtension(); - ExtensionHost* host = browser()->profile()->GetExtensionProcessManager()-> - GetBackgroundHostForExtension(extension); - ASSERT_TRUE(host); - - host->render_view_host()->ExecuteJavascriptInWebFrame(L"", - L"alert('This should not crash.');"); - - AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); - ASSERT_TRUE(alert); - - browser()->profile()->GetExtensionsService()->UnloadExtension( - extension->id()); - - ASSERT_FALSE(alert->IsValid()); -} - -// Test that we handle the case of an extension crashing while an alert is up -// gracefully. -IN_PROC_BROWSER_TEST_F(ExtensionApiTest, AlertOrphanedByCrash) { - ASSERT_TRUE(RunExtensionTest("alert")) << message_; - - Extension* extension = GetSingleLoadedExtension(); - ExtensionHost* host = browser()->profile()->GetExtensionProcessManager()-> - GetBackgroundHostForExtension(extension); - ASSERT_TRUE(host); - - host->render_view_host()->ExecuteJavascriptInWebFrame(L"", - L"alert('This should not crash.');"); - - AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); - ASSERT_TRUE(alert); - - base::KillProcess( - browser()->profile()->GetExtensionProcessManager()->GetExtensionProcess( - extension->id())->GetHandle(), - base::PROCESS_END_KILLED_BY_USER, - true); // Wait for process to exit. -} diff --git a/chrome/browser/js_modal_dialog.cc b/chrome/browser/js_modal_dialog.cc index a66bece..5eb66a8 100644 --- a/chrome/browser/js_modal_dialog.cc +++ b/chrome/browser/js_modal_dialog.cc @@ -100,3 +100,27 @@ void JavaScriptAppModalDialog::OnAccept(const std::wstring& prompt_text, Cleanup(); } + +void JavaScriptAppModalDialog::OnClose() { + Cleanup(); +} + +void JavaScriptAppModalDialog::Cleanup() { + if (skip_this_dialog_) { + // We can't use the client_, because we might be in the process of + // destroying it. + if (tab_contents_) + tab_contents_->OnMessageBoxClosed(reply_msg_, false, L""); +// The extension_host_ will always be a dirty pointer on OS X because the alert +// window will cause the extension popup to close since it is resigning its key +// state, destroying the host. http://crbug.com/29355 +#if !defined(OS_MACOSX) + else if (extension_host_) + extension_host_->OnMessageBoxClosed(reply_msg_, false, L""); + else + NOTREACHED(); +#endif + } + AppModalDialog::Cleanup(); +} + diff --git a/chrome/browser/js_modal_dialog.h b/chrome/browser/js_modal_dialog.h index b53954e..65ed1ae 100644 --- a/chrome/browser/js_modal_dialog.h +++ b/chrome/browser/js_modal_dialog.h @@ -71,9 +71,11 @@ class JavaScriptAppModalDialog : public AppModalDialog, // Callbacks from NativeDialog when the user accepts or cancels the dialog. void OnCancel(); void OnAccept(const std::wstring& prompt_text, bool suppress_js_messages); + void OnClose(); protected: // AppModalDialog overrides. + virtual void Cleanup(); virtual NativeDialog CreateNativeDialog(); private: diff --git a/chrome/browser/views/jsmessage_box_dialog.cc b/chrome/browser/views/jsmessage_box_dialog.cc index 5a00605..269dde7 100644 --- a/chrome/browser/views/jsmessage_box_dialog.cc +++ b/chrome/browser/views/jsmessage_box_dialog.cc @@ -77,6 +77,10 @@ bool JavaScriptMessageBoxDialog::Accept() { return true; } +void JavaScriptMessageBoxDialog::OnClose() { + parent_->OnClose(); +} + std::wstring JavaScriptMessageBoxDialog::GetDialogButtonLabel( MessageBoxFlags::DialogButton button) const { if (parent_->is_before_unload_dialog()) { diff --git a/chrome/browser/views/jsmessage_box_dialog.h b/chrome/browser/views/jsmessage_box_dialog.h index 42dc28e..62fcf51 100644 --- a/chrome/browser/views/jsmessage_box_dialog.h +++ b/chrome/browser/views/jsmessage_box_dialog.h @@ -42,6 +42,7 @@ class JavaScriptMessageBoxDialog : public ModalDialogDelegate { virtual bool IsModal() const { return true; } virtual views::View* GetContentsView(); virtual views::View* GetInitiallyFocusedView(); + virtual void OnClose(); private: JavaScriptMessageBoxClient* client() { |