Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4394)

Unified Diff: chrome/browser/extensions/extension_messages_apitest.cc

Issue 23057005: In extension messaging, use the sender frame's URL as the sender URL rather (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add test, rebase Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/renderer/extensions/runtime_custom_bindings.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 7726d6ed9e4c83325079b8695ca8d7622df4a641..6d18f3b6334a5caf9a27a9cea278b61ed1257db4 100644
--- a/chrome/browser/extensions/extension_messages_apitest.cc
+++ b/chrome/browser/extensions/extension_messages_apitest.cc
@@ -142,21 +142,45 @@ class ExternallyConnectableMessagingTest : public ExtensionApiTest {
INCORRECT_RESPONSE_MESSAGE = 6,
};
+ bool AppendIframe(const GURL& src) {
+ bool result;
+ CHECK(content::ExecuteScriptAndExtractBool(
+ browser()->tab_strip_model()->GetActiveWebContents(),
+ "actions.appendIframe('" + src.spec() + "');", &result));
+ return result;
+ }
+
Result CanConnectAndSendMessages(const std::string& extension_id) {
- return CanConnectAndSendMessages(browser(), extension_id);
+ return CanConnectAndSendMessages(browser(), extension_id, "");
}
Result CanConnectAndSendMessages(Browser* browser,
const std::string& extension_id) {
+ return CanConnectAndSendMessages(browser, extension_id, "");
+ }
+
+ Result CanConnectAndSendMessages(const std::string& extension_id,
+ const char* frame_xpath) {
+ return CanConnectAndSendMessages(browser(), extension_id, frame_xpath);
+ }
+
+ Result CanConnectAndSendMessages(Browser* browser,
+ const std::string& extension_id,
+ const char* frame_xpath) {
int result;
- CHECK(content::ExecuteScriptAndExtractInt(
+ CHECK(content::ExecuteScriptInFrameAndExtractInt(
browser->tab_strip_model()->GetActiveWebContents(),
+ frame_xpath,
"assertions.canConnectAndSendMessages('" + extension_id + "')",
&result));
return static_cast<Result>(result);
}
testing::AssertionResult AreAnyNonWebApisDefined() {
+ return AreAnyNonWebApisDefined("");
+ }
+
+ testing::AssertionResult AreAnyNonWebApisDefined(const char* frame_xpath) {
// All runtime API methods are non-web except for sendRequest and connect.
const char* non_messaging_apis[] = {
"getBackgroundPage",
@@ -189,8 +213,9 @@ class ExternallyConnectableMessagingTest : public ExtensionApiTest {
as_js_array += "]";
bool any_defined;
- CHECK(content::ExecuteScriptAndExtractBool(
+ CHECK(content::ExecuteScriptInFrameAndExtractBool(
browser()->tab_strip_model()->GetActiveWebContents(),
+ frame_xpath,
"assertions.areAnyRuntimePropertiesDefined(" + as_js_array + ")",
&any_defined));
return any_defined ?
@@ -214,24 +239,30 @@ class ExternallyConnectableMessagingTest : public ExtensionApiTest {
}
const Extension* LoadChromiumConnectableExtension() {
- return LoadExtensionIntoDir(&web_connectable_dir_, base::StringPrintf(
- "{"
- " \"name\": \"chromium_connectable\","
- " %s,"
- " \"externally_connectable\": {"
- " \"matches\": [\"*://*.chromium.org:*/*\"]"
- " }"
- "}",
- common_manifest()));
+ const Extension* extension =
+ LoadExtensionIntoDir(&web_connectable_dir_, base::StringPrintf(
+ "{"
+ " \"name\": \"chromium_connectable\","
+ " %s,"
+ " \"externally_connectable\": {"
+ " \"matches\": [\"*://*.chromium.org:*/*\"]"
+ " }"
+ "}",
+ common_manifest()));
+ CHECK(extension);
+ return extension;
}
- scoped_refptr<const Extension> LoadNotConnectableExtension() {
- return LoadExtensionIntoDir(&not_connectable_dir_, base::StringPrintf(
- "{"
- " \"name\": \"not_connectable\","
- " %s"
- "}",
- common_manifest()));
+ const Extension* LoadNotConnectableExtension() {
+ const Extension* extension =
+ LoadExtensionIntoDir(&not_connectable_dir_, base::StringPrintf(
+ "{"
+ " \"name\": \"not_connectable\","
+ " %s"
+ "}",
+ common_manifest()));
+ CHECK(extension);
+ return extension;
}
void InitializeTestServer() {
@@ -295,7 +326,6 @@ IN_PROC_BROWSER_TEST_F(ExternallyConnectableMessagingTest,
// Install the web connectable extension. chromium.org can connect to it,
// google.com can't.
const Extension* chromium_connectable = LoadChromiumConnectableExtension();
- ASSERT_TRUE(chromium_connectable);
ui_test_utils::NavigateToURL(browser(), chromium_org_url());
EXPECT_EQ(OK, CanConnectAndSendMessages(chromium_connectable->id()));
@@ -308,7 +338,6 @@ IN_PROC_BROWSER_TEST_F(ExternallyConnectableMessagingTest,
// Install the non-connectable extension. Nothing can connect to it.
const Extension* not_connectable = LoadNotConnectableExtension();
- ASSERT_TRUE(not_connectable);
ui_test_utils::NavigateToURL(browser(), chromium_org_url());
// Namespace will be defined here because |chromium_connectable| can connect
@@ -333,9 +362,7 @@ IN_PROC_BROWSER_TEST_F(ExternallyConnectableMessagingTest,
InitializeTestServer();
const Extension* chromium_connectable = LoadChromiumConnectableExtension();
- ASSERT_TRUE(chromium_connectable);
const Extension* not_connectable = LoadNotConnectableExtension();
- ASSERT_TRUE(not_connectable);
ui_test_utils::NavigateToURL(browser(), chromium_org_url());
EXPECT_EQ(OK, CanConnectAndSendMessages(chromium_connectable->id()));
@@ -361,7 +388,6 @@ IN_PROC_BROWSER_TEST_F(ExternallyConnectableMessagingTest, FromIncognito) {
InitializeTestServer();
const Extension* chromium_connectable = LoadChromiumConnectableExtension();
- ASSERT_TRUE(chromium_connectable);
Browser* incognito_browser = ui_test_utils::OpenURLOffTheRecord(
profile()->GetOffTheRecordProfile(),
@@ -377,5 +403,44 @@ IN_PROC_BROWSER_TEST_F(ExternallyConnectableMessagingTest, FromIncognito) {
EXPECT_EQ(OK, CanConnectAndSendMessages(incognito_browser, id));
}
+// Tests a connection from an iframe within a tab which doesn't have
+// permission. Iframe should work.
+IN_PROC_BROWSER_TEST_F(ExternallyConnectableMessagingTest,
+ FromIframeWithPermission) {
+ InitializeTestServer();
+
+ const Extension* extension = LoadChromiumConnectableExtension();
+
+ ui_test_utils::NavigateToURL(browser(), google_com_url());
+ EXPECT_EQ(NAMESPACE_NOT_DEFINED, CanConnectAndSendMessages(extension->id()));
+ EXPECT_FALSE(AreAnyNonWebApisDefined());
+
+ ASSERT_TRUE(AppendIframe(chromium_org_url()));
+
+ const char* frame_xpath = "//iframe[1]";
+ EXPECT_EQ(OK, CanConnectAndSendMessages(extension->id(), frame_xpath));
+ EXPECT_FALSE(AreAnyNonWebApisDefined(frame_xpath));
+}
+
+// Tests connection from an iframe without permission within a tab that does.
+// Iframe shouldn't work.
+IN_PROC_BROWSER_TEST_F(ExternallyConnectableMessagingTest,
+ FromIframeWithoutPermission) {
+ InitializeTestServer();
+
+ const Extension* extension = LoadChromiumConnectableExtension();
+
+ ui_test_utils::NavigateToURL(browser(), chromium_org_url());
+ EXPECT_EQ(OK, CanConnectAndSendMessages(extension->id()));
+ EXPECT_FALSE(AreAnyNonWebApisDefined());
+
+ ASSERT_TRUE(AppendIframe(google_com_url()));
+
+ const char* frame_xpath = "//iframe[1]";
+ EXPECT_EQ(NAMESPACE_NOT_DEFINED,
+ CanConnectAndSendMessages(extension->id(), frame_xpath));
+ EXPECT_FALSE(AreAnyNonWebApisDefined(frame_xpath));
+}
+
} // namespace
-} // namespace extensions
+}; // namespace extensions
« no previous file with comments | « no previous file | chrome/renderer/extensions/runtime_custom_bindings.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698