Index: chrome/browser/extensions/extension_messages_apitest.cc |
diff --git a/chrome/browser/extensions/extension_messages_apitest.cc b/chrome/browser/extensions/extension_messages_apitest.cc |
index 64894ac6ea11a3072ce68cb3de05d4628092d2d1..af04dd0eb3aa752e8ce8451ba286c56566e25f2f 100644 |
--- a/chrome/browser/extensions/extension_messages_apitest.cc |
+++ b/chrome/browser/extensions/extension_messages_apitest.cc |
@@ -306,7 +306,8 @@ class ExternallyConnectableMessagingTest : public ExtensionApiTest { |
return extension; |
} |
- scoped_refptr<const Extension> LoadChromiumConnectableApp() { |
+ scoped_refptr<const Extension> LoadChromiumConnectableApp( |
+ bool with_event_handlers = true) { |
scoped_refptr<const Extension> extension = |
LoadExtensionIntoDir(&web_connectable_dir_, |
"{" |
@@ -321,7 +322,8 @@ class ExternallyConnectableMessagingTest : public ExtensionApiTest { |
" \"manifest_version\": 2," |
" \"name\": \"app_connectable\"," |
" \"version\": \"1.0\"" |
- "}"); |
+ "}", |
+ with_event_handlers); |
CHECK(extension.get()); |
return extension; |
} |
@@ -382,26 +384,33 @@ class ExternallyConnectableMessagingTest : public ExtensionApiTest { |
private: |
scoped_refptr<const Extension> LoadExtensionIntoDir( |
TestExtensionDir* dir, |
- const std::string& manifest) { |
+ const std::string& manifest, |
+ bool with_event_handlers = true) { |
dir->WriteManifest(manifest); |
- dir->WriteFile(FILE_PATH_LITERAL("background.js"), |
- base::StringPrintf( |
- "function maybeClose(message) {\n" |
- " if (message.indexOf('%s') >= 0)\n" |
- " window.setTimeout(function() { window.close() }, 0);\n" |
- "}\n" |
- "chrome.runtime.onMessageExternal.addListener(\n" |
- " function(message, sender, reply) {\n" |
- " reply({ message: message, sender: sender });\n" |
- " maybeClose(message);\n" |
- "});\n" |
- "chrome.runtime.onConnectExternal.addListener(function(port) {\n" |
- " port.onMessage.addListener(function(message) {\n" |
- " port.postMessage({ message: message, sender: port.sender });\n" |
- " maybeClose(message);\n" |
- " });\n" |
- "});\n", |
- close_background_message())); |
+ if (with_event_handlers) { |
+ dir->WriteFile( |
+ FILE_PATH_LITERAL("background.js"), |
+ base::StringPrintf( |
+ "function maybeClose(message) {\n" |
+ " if (message.indexOf('%s') >= 0)\n" |
+ " window.setTimeout(function() { window.close() }, 0);\n" |
+ "}\n" |
+ "chrome.runtime.onMessageExternal.addListener(\n" |
+ " function(message, sender, reply) {\n" |
+ " reply({ message: message, sender: sender });\n" |
+ " maybeClose(message);\n" |
+ "});\n" |
+ "chrome.runtime.onConnectExternal.addListener(function(port) {\n" |
+ " port.onMessage.addListener(function(message) {\n" |
+ " port.postMessage({ message: message, sender: port.sender " |
+ "});\n" |
+ " maybeClose(message);\n" |
+ " });\n" |
+ "});\n", |
+ close_background_message())); |
+ } else { |
+ dir->WriteFile(FILE_PATH_LITERAL("background.js"), ""); |
+ } |
return LoadExtension(dir->unpacked_path()); |
} |
@@ -735,6 +744,36 @@ IN_PROC_BROWSER_TEST_F(ExternallyConnectableMessagingTest, |
CanConnectAndSendMessagesToFrame(incognito_frame, extension.get(), NULL)); |
} |
+// Tests connection from incognito tabs when the extension doesn't have an event |
+// handler for the connection event. |
+IN_PROC_BROWSER_TEST_F(ExternallyConnectableMessagingTest, |
+ FromIncognitoNoEventHandlerInApp) { |
+ InitializeTestServer(); |
+ |
+ scoped_refptr<const Extension> app = LoadChromiumConnectableApp(false); |
+ ASSERT_TRUE(app->is_platform_app()); |
+ |
+ Browser* incognito_browser = ui_test_utils::OpenURLOffTheRecord( |
+ profile()->GetOffTheRecordProfile(), chromium_org_url()); |
+ content::RenderFrameHost* incognito_frame = |
+ incognito_browser->tab_strip_model() |
+ ->GetActiveWebContents() |
+ ->GetMainFrame(); |
+ |
+ { |
+ IncognitoConnectability::ScopedAlertTracker alert_tracker( |
+ IncognitoConnectability::ScopedAlertTracker::ALWAYS_ALLOW); |
+ |
+ // No connection because incognito-enabled hasn't been set for the app, and |
+ // the app hasn't installed event handlers. |
+ EXPECT_EQ( |
+ COULD_NOT_ESTABLISH_CONNECTION_ERROR, |
+ CanConnectAndSendMessagesToFrame(incognito_frame, app.get(), NULL)); |
+ // No dialog should have been shown. |
+ EXPECT_EQ(0, alert_tracker.GetAndResetAlertCount()); |
+ } |
+} |
+ |
// Tests connection from incognito tabs when the user accepts the connection |
// request. Spanning mode only. Separate tests for apps and extensions. |
// |