summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-02 21:49:53 +0000
committermpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-02 21:49:53 +0000
commit4af869aded61930f3085f28548a89daf4ab2ef0f (patch)
treead2f186aa645591060137306edfe3f10638a6e35
parent6a4120c0027822faae4c6386a9b22487d985d525 (diff)
downloadchromium_src-4af869aded61930f3085f28548a89daf4ab2ef0f.zip
chromium_src-4af869aded61930f3085f28548a89daf4ab2ef0f.tar.gz
chromium_src-4af869aded61930f3085f28548a89daf4ab2ef0f.tar.bz2
Fix a crash when an extension bg page calls alert(). Add regression tests this
time. BUG=37567 Review URL: http://codereview.chromium.org/1602005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@43530 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/extensions/extension_apitest_misc.cc27
-rw-r--r--chrome/browser/extensions/extension_host.cc9
-rw-r--r--chrome/chrome_tests.gypi1
-rw-r--r--chrome/test/data/extensions/api_test/alert/manifest.json6
-rw-r--r--chrome/test/data/extensions/api_test/alert/test.html8
5 files changed, 48 insertions, 3 deletions
diff --git a/chrome/browser/extensions/extension_apitest_misc.cc b/chrome/browser/extensions/extension_apitest_misc.cc
new file mode 100644
index 0000000..11b91af
--- /dev/null
+++ b/chrome/browser/extensions/extension_apitest_misc.cc
@@ -0,0 +1,27 @@
+// Copyright (c) 2010 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 "chrome/browser/app_modal_dialog.h"
+#include "chrome/browser/browser.h"
+#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/renderer_host/render_view_host.h"
+#include "chrome/browser/profile.h"
+#include "chrome/test/ui_test_utils.h"
+
+IN_PROC_BROWSER_TEST_F(ExtensionApiTest, AlertCrash) {
+ 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);
+ alert->CloseModalDialog();
+}
diff --git a/chrome/browser/extensions/extension_host.cc b/chrome/browser/extensions/extension_host.cc
index a9d2259..eb3a334 100644
--- a/chrome/browser/extensions/extension_host.cc
+++ b/chrome/browser/extensions/extension_host.cc
@@ -480,9 +480,12 @@ gfx::NativeWindow ExtensionHost::GetMessageBoxRootWindow() {
return platform_util::GetTopLevel(native_view);
// Otherwise, try the active tab's view.
- TabContents* active_tab = GetBrowser()->GetSelectedTabContents();
- if (active_tab)
- return active_tab->view()->GetTopLevelNativeWindow();
+ Browser* browser = extension_function_dispatcher_->GetCurrentBrowser(true);
+ if (browser) {
+ TabContents* active_tab = browser->GetSelectedTabContents();
+ if (active_tab)
+ return active_tab->view()->GetTopLevelNativeWindow();
+ }
return NULL;
}
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index 7b3f7d9..6c66baa 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -1229,6 +1229,7 @@
'browser/extensions/execute_script_apitest.cc',
'browser/extensions/extension_apitest.cc',
'browser/extensions/extension_apitest.h',
+ 'browser/extensions/extension_apitest_misc.cc',
'browser/extensions/extension_bookmarks_apitest.cc',
'browser/extensions/extension_bookmarks_unittest.cc',
'browser/extensions/extension_bookmark_manager_apitest.cc',
diff --git a/chrome/test/data/extensions/api_test/alert/manifest.json b/chrome/test/data/extensions/api_test/alert/manifest.json
new file mode 100644
index 0000000..ec22495
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/alert/manifest.json
@@ -0,0 +1,6 @@
+{
+ "name": "background page alert crash",
+ "version": "0.1",
+ "description": "Pops up an alert dialog from the bg page",
+ "background_page": "test.html"
+}
diff --git a/chrome/test/data/extensions/api_test/alert/test.html b/chrome/test/data/extensions/api_test/alert/test.html
new file mode 100644
index 0000000..9041edc
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/alert/test.html
@@ -0,0 +1,8 @@
+<script>
+// Copyright (c) 2010 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.
+
+// Nothing to do. The test harness will handle the rest.
+chrome.test.runTests([]);
+</script>