summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-09 21:41:05 +0000
committeraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-09 21:41:05 +0000
commit7d7843067346da54c8f2dcf4c407eb3bf6ef56f9 (patch)
tree18e0b1008a6a0379018aac02e3caed8b009bf93c
parent8af79b005cce6d0263655d81ce3861a4c8c2dc5e (diff)
downloadchromium_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.cc50
-rw-r--r--chrome/browser/js_modal_dialog.cc24
-rw-r--r--chrome/browser/js_modal_dialog.h2
-rw-r--r--chrome/browser/views/jsmessage_box_dialog.cc4
-rw-r--r--chrome/browser/views/jsmessage_box_dialog.h1
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() {