Index: chrome/browser/extensions/native_bindings_apitest.cc |
diff --git a/chrome/browser/extensions/native_bindings_apitest.cc b/chrome/browser/extensions/native_bindings_apitest.cc |
index a2891dc7ab008d930462dca431e66ff805e7c153..c19ec638f0d378eb0eeb2325c8276c0cdaf80f4e 100644 |
--- a/chrome/browser/extensions/native_bindings_apitest.cc |
+++ b/chrome/browser/extensions/native_bindings_apitest.cc |
@@ -202,4 +202,47 @@ IN_PROC_BROWSER_TEST_F(NativeBindingsApiTest, ContextMenusTest) { |
EXPECT_TRUE(listener.WaitUntilSatisfied()); |
} |
+// Tests that unchecked errors don't impede future calls. |
+IN_PROC_BROWSER_TEST_F(NativeBindingsApiTest, ErrorsInCallbackTest) { |
+ host_resolver()->AddRule("*", "127.0.0.1"); |
+ embedded_test_server()->ServeFilesFromDirectory(test_data_dir_); |
+ ASSERT_TRUE(StartEmbeddedTestServer()); |
+ |
+ TestExtensionDir test_dir; |
+ test_dir.WriteManifest( |
+ R"({ |
+ "name": "Errors In Callback", |
+ "manifest_version": 2, |
+ "version": "0.1", |
+ "permissions": ["contextMenus"], |
+ "background": { |
+ "scripts": ["background.js"] |
+ } |
+ })"); |
+ test_dir.WriteFile( |
+ FILE_PATH_LITERAL("background.js"), |
+ R"(chrome.tabs.query({}, function(tabs) { |
+ chrome.tabs.executeScript(tabs[0].id, {code: 'x'}, function() { |
+ // There's an error here (we don't have permission to access the |
+ // host), but we don't check it so that it gets surfaced as an |
+ // unchecked runtime.lastError. |
+ // We should still be able to invoke other APIs and get correct |
+ // callbacks. |
+ chrome.tabs.query({}, function(tabs) { |
+ chrome.tabs.query({}, function(tabs) { |
+ chrome.test.sendMessage('callback'); |
+ }); |
+ }); |
+ }); |
+ });)"); |
+ |
+ ui_test_utils::NavigateToURL( |
+ browser(), embedded_test_server()->GetURL( |
+ "example.com", "/native_bindings/simple.html")); |
+ |
+ ExtensionTestMessageListener listener("callback", false); |
+ ASSERT_TRUE(LoadExtension(test_dir.UnpackedPath())); |
+ EXPECT_TRUE(listener.WaitUntilSatisfied()); |
+} |
+ |
} // namespace extensions |