diff options
author | kalman@chromium.org <kalman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-12 19:02:22 +0000 |
---|---|---|
committer | kalman@chromium.org <kalman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-12 19:02:22 +0000 |
commit | 87feb9857905714db53a96d32deeb555514ee0c7 (patch) | |
tree | 7be780d46fac70090029f0655599e2afdd9ffdcb | |
parent | 17783516837ec4479c0fc7e797d5fde24860e768 (diff) | |
download | chromium_src-87feb9857905714db53a96d32deeb555514ee0c7.zip chromium_src-87feb9857905714db53a96d32deeb555514ee0c7.tar.gz chromium_src-87feb9857905714db53a96d32deeb555514ee0c7.tar.bz2 |
Merge 216654 "Don't deregister the chrome.runtime API when an ex..."
> Don't deregister the chrome.runtime API when an extension is unloaded.
>
> BUG=267578
>
> Review URL: https://chromiumcodereview.appspot.com/22385008
TBR=kalman@chromium.org
Review URL: https://codereview.chromium.org/22917002
git-svn-id: svn://svn.chromium.org/chrome/branches/1547/src@217044 0039d316-1c4b-4281-b951-d872f2087c98
5 files changed, 61 insertions, 7 deletions
diff --git a/chrome/browser/extensions/extension_bindings_apitest.cc b/chrome/browser/extensions/extension_bindings_apitest.cc index 1eb5f90..2d904a2 100644 --- a/chrome/browser/extensions/extension_bindings_apitest.cc +++ b/chrome/browser/extensions/extension_bindings_apitest.cc @@ -9,11 +9,18 @@ #include "chrome/browser/extensions/extension_host.h" #include "chrome/browser/extensions/extension_process_manager.h" #include "chrome/browser/extensions/extension_system.h" +#include "chrome/browser/extensions/extension_test_message_listener.h" #include "chrome/browser/ui/browser.h" #include "chrome/test/base/ui_test_utils.h" #include "content/public/test/browser_test_utils.h" -IN_PROC_BROWSER_TEST_F(ExtensionApiTest, ExceptionInHandlerShouldNotCrash) { +namespace extensions { +namespace { + +class ExtensionBindingsApiTest : public ExtensionApiTest {}; + +IN_PROC_BROWSER_TEST_F(ExtensionBindingsApiTest, + ExceptionInHandlerShouldNotCrash) { ASSERT_TRUE(RunExtensionSubtest( "bindings/exception_in_handler_should_not_crash", "page.html")) << message_; @@ -36,8 +43,32 @@ IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, LastError) { EXPECT_TRUE(result); } -IN_PROC_BROWSER_TEST_F(ExtensionApiTest, InternalAPIsNotOnChromeObject) { +// Regression test that we don't delete our own bindings with about:blank +// iframes. +IN_PROC_BROWSER_TEST_F(ExtensionBindingsApiTest, AboutBlankIframe) { + ResultCatcher catcher; + ExtensionTestMessageListener listener("load", true); + + ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("bindings") + .AppendASCII("about_blank_iframe"))); + + ASSERT_TRUE(listener.WaitUntilSatisfied()); + + const Extension* extension = LoadExtension( + test_data_dir_.AppendASCII("bindings") + .AppendASCII("internal_apis_not_on_chrome_object")); + ASSERT_TRUE(extension); + listener.Reply(extension->id()); + + ASSERT_TRUE(catcher.GetNextResult()) << message_; +} + +IN_PROC_BROWSER_TEST_F(ExtensionBindingsApiTest, + InternalAPIsNotOnChromeObject) { ASSERT_TRUE(RunExtensionSubtest( "bindings/internal_apis_not_on_chrome_object", "page.html")) << message_; } + +} // namespace +} // namespace extensions diff --git a/chrome/browser/extensions/extension_messages_apitest.cc b/chrome/browser/extensions/extension_messages_apitest.cc index 7e98128..90f9f6c 100644 --- a/chrome/browser/extensions/extension_messages_apitest.cc +++ b/chrome/browser/extensions/extension_messages_apitest.cc @@ -303,10 +303,8 @@ IN_PROC_BROWSER_TEST_F(ExternallyConnectableMessagingTest, EXPECT_EQ(COULD_NOT_ESTABLISH_CONNECTION_ERROR, CanConnectAndSendMessages(not_connectable->id())); - // Unloading the extension is the same as it never existing - so the bindings - // will no longer exist. DisableExtension(web_connectable->id()); - EXPECT_EQ(NAMESPACE_NOT_DEFINED, + EXPECT_EQ(COULD_NOT_ESTABLISH_CONNECTION_ERROR, CanConnectAndSendMessages(web_connectable->id())); EnableExtension(web_connectable->id()); diff --git a/chrome/renderer/extensions/dispatcher.cc b/chrome/renderer/extensions/dispatcher.cc index 75c2fe5..c271759 100644 --- a/chrome/renderer/extensions/dispatcher.cc +++ b/chrome/renderer/extensions/dispatcher.cc @@ -684,8 +684,6 @@ void Dispatcher::AddOrRemoveBindingsForContext(ChromeV8Context* context) { } if (runtime_is_available) RegisterBinding("runtime", context); - else - DeregisterBinding("runtime", context); break; } diff --git a/chrome/test/data/extensions/api_test/bindings/about_blank_iframe/background.js b/chrome/test/data/extensions/api_test/bindings/about_blank_iframe/background.js new file mode 100644 index 0000000..7de572e --- /dev/null +++ b/chrome/test/data/extensions/api_test/bindings/about_blank_iframe/background.js @@ -0,0 +1,19 @@ +// Copyright 2013 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. + +function test() { + chrome.test.assertTrue(chrome.runtime != null); + + var iframe = document.createElement('iframe'); + document.body.appendChild(iframe); + iframe.contentWindow.chrome = chrome; + + // The context-wide bindings recalculation happens when extensions are + // enabled and disabled. + chrome.test.sendMessage('load', chrome.test.callbackPass(function(msg) { + chrome.test.assertTrue(chrome.runtime != null); + })); +} + +chrome.test.runTests([test]); diff --git a/chrome/test/data/extensions/api_test/bindings/about_blank_iframe/manifest.json b/chrome/test/data/extensions/api_test/bindings/about_blank_iframe/manifest.json new file mode 100644 index 0000000..9df9c6f6 --- /dev/null +++ b/chrome/test/data/extensions/api_test/bindings/about_blank_iframe/manifest.json @@ -0,0 +1,8 @@ +{ + "name": "bindings/about_blank_iframe", + "manifest_version": 2, + "version": "1", + "background": { + "scripts": ["background.js"] + } +} |