summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkalman@chromium.org <kalman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-12 19:02:22 +0000
committerkalman@chromium.org <kalman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-12 19:02:22 +0000
commit87feb9857905714db53a96d32deeb555514ee0c7 (patch)
tree7be780d46fac70090029f0655599e2afdd9ffdcb
parent17783516837ec4479c0fc7e797d5fde24860e768 (diff)
downloadchromium_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
-rw-r--r--chrome/browser/extensions/extension_bindings_apitest.cc35
-rw-r--r--chrome/browser/extensions/extension_messages_apitest.cc4
-rw-r--r--chrome/renderer/extensions/dispatcher.cc2
-rw-r--r--chrome/test/data/extensions/api_test/bindings/about_blank_iframe/background.js19
-rw-r--r--chrome/test/data/extensions/api_test/bindings/about_blank_iframe/manifest.json8
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"]
+ }
+}