diff options
author | mpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-02 21:49:53 +0000 |
---|---|---|
committer | mpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-02 21:49:53 +0000 |
commit | 4af869aded61930f3085f28548a89daf4ab2ef0f (patch) | |
tree | ad2f186aa645591060137306edfe3f10638a6e35 | |
parent | 6a4120c0027822faae4c6386a9b22487d985d525 (diff) | |
download | chromium_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.cc | 27 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_host.cc | 9 | ||||
-rw-r--r-- | chrome/chrome_tests.gypi | 1 | ||||
-rw-r--r-- | chrome/test/data/extensions/api_test/alert/manifest.json | 6 | ||||
-rw-r--r-- | chrome/test/data/extensions/api_test/alert/test.html | 8 |
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> |