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

Unified Diff: chrome/renderer/chrome_content_renderer_client_unittest.cc

Issue 12612011: Allow NaCl plugin to be loaded from hosted app URLs. (Closed) Base URL: https://src.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 9 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
Index: chrome/renderer/chrome_content_renderer_client_unittest.cc
===================================================================
--- chrome/renderer/chrome_content_renderer_client_unittest.cc (revision 187306)
+++ chrome/renderer/chrome_content_renderer_client_unittest.cc (working copy)
@@ -5,6 +5,9 @@
#include "chrome/renderer/chrome_content_renderer_client.h"
#include "base/utf_string_conversions.h"
+#include "chrome/common/extensions/extension.h"
+#include "chrome/common/extensions/extension_builder.h"
+#include "chrome/common/extensions/extension_manifest_constants.h"
#include "googleurl/src/gurl.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/WebKit/Source/Platform/chromium/public/WebString.h"
@@ -28,6 +31,8 @@
const bool kExtensionUnrestricted = true;
const bool kExtensionNotFromWebStore = false;
const bool kExtensionFromWebStore = true;
+const bool kNotHostedApp = false;
+const bool kHostedApp = true;
const char kNaClMimeType[] = "application/x-nacl";
const char kExtensionUrl[] = "chrome-extension://extension_id/background.html";
@@ -63,6 +68,44 @@
typedef testing::Test ChromeContentRendererClientTest;
+
+scoped_refptr<const extensions::Extension> CreateTestExtension(
+ bool is_unrestricted, bool is_from_webstore, bool is_hosted_app,
+ const std::string& app_url) {
+ extensions::Manifest::Location location = is_unrestricted ?
+ extensions::Manifest::UNPACKED :
+ extensions::Manifest::INTERNAL;
+ int flags = is_from_webstore ?
+ extensions::Extension::FROM_WEBSTORE:
+ extensions::Extension::NO_FLAGS;
+
+ DictionaryValue manifest;
+ manifest.SetString("name", "NaCl Extension");
+ manifest.SetString("version", "1");
+ manifest.SetInteger("manifest_version", 2);
+ if (is_hosted_app) {
+ ListValue* url_list = new ListValue();
+ url_list->Append(Value::CreateStringValue(app_url));
+ manifest.Set(extension_manifest_keys::kWebURLs, url_list);
+ manifest.SetString(extension_manifest_keys::kLaunchWebURL, app_url);
+ }
+ std::string error;
+ return extensions::Extension::Create(base::FilePath(), location, manifest,
+ flags, &error);
+}
+
+scoped_refptr<const extensions::Extension> CreateExtension(
+ bool is_unrestricted, bool is_from_webstore) {
+ return CreateTestExtension(is_unrestricted, is_from_webstore, kNotHostedApp,
+ "");
+}
+
+scoped_refptr<const extensions::Extension> CreateHostedApp(
+ bool is_unrestricted, bool is_from_webstore, const std::string& app_url) {
+ return CreateTestExtension(is_unrestricted, is_from_webstore, kHostedApp,
+ app_url);
+}
+
TEST_F(ChromeContentRendererClientTest, NaClRestriction) {
// Unknown content types have no NaCl module.
{
@@ -83,8 +126,9 @@
{
WebPluginParams params;
EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
- GURL(), GURL(), kNaClUnrestricted, kExtensionRestricted,
- kExtensionNotFromWebStore, &params));
+ GURL(), GURL(), kNaClUnrestricted,
+ CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore),
+ &params));
EXPECT_TRUE(AllowsDevInterfaces(params));
}
// Unrestricted extensions are allowed without --enable-nacl, with 'dev'
@@ -93,8 +137,8 @@
WebPluginParams params;
EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
GURL(), GURL(kExtensionUrl), kNaClRestricted,
- kExtensionUnrestricted,
- kExtensionNotFromWebStore, &params));
+ CreateExtension(kExtensionUnrestricted, kExtensionNotFromWebStore),
+ &params));
EXPECT_TRUE(AllowsDevInterfaces(params));
}
// CWS extensions are allowed without --enable-nacl, without 'dev'
@@ -102,16 +146,18 @@
{
WebPluginParams params;
EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
- GURL(), GURL(kExtensionUrl), kNaClRestricted, kExtensionRestricted,
- kExtensionFromWebStore, &params));
+ GURL(), GURL(kExtensionUrl), kNaClRestricted,
+ CreateExtension(kExtensionRestricted, kExtensionFromWebStore),
+ &params));
EXPECT_FALSE(AllowsDevInterfaces(params));
}
// CWS extensions can't get 'dev' interfaces with --enable-nacl.
{
WebPluginParams params;
EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
- GURL(), GURL(kExtensionUrl), kNaClUnrestricted, kExtensionRestricted,
- kExtensionFromWebStore, &params));
+ GURL(), GURL(kExtensionUrl), kNaClUnrestricted,
+ CreateExtension(kExtensionRestricted, kExtensionFromWebStore),
+ &params));
EXPECT_FALSE(AllowsDevInterfaces(params));
}
// CWS extensions can't get 'dev' interfaces by injecting a fake
@@ -120,8 +166,9 @@
WebPluginParams params;
AddFakeDevAttribute(&params);
EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
- GURL(), GURL(kExtensionUrl), kNaClRestricted, kExtensionRestricted,
- kExtensionFromWebStore, &params));
+ GURL(), GURL(kExtensionUrl), kNaClRestricted,
+ CreateExtension(kExtensionRestricted, kExtensionFromWebStore),
+ &params));
EXPECT_FALSE(AllowsDevInterfaces(params));
}
// The NaCl PDF extension is allowed without --enable-nacl, with 'dev'
@@ -130,8 +177,9 @@
WebPluginParams params;
EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
GURL("chrome-extension://acadkphlmlegjaadjagenfimbpphcgnh"),
- GURL(), kNaClRestricted, kExtensionRestricted,
- kExtensionFromWebStore, &params));
+ GURL(), kNaClRestricted,
+ CreateExtension(kExtensionRestricted, kExtensionFromWebStore),
+ &params));
EXPECT_TRUE(AllowsDevInterfaces(params));
}
// Whitelisted URLs are allowed without --enable-nacl, without 'dev'
@@ -140,32 +188,38 @@
WebPluginParams params;
EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed(
GURL(), GURL("http://plus.google.com/games"),
- kNaClRestricted, kExtensionRestricted, kExtensionNotFromWebStore,
+ kNaClRestricted,
+ CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore),
&params));
EXPECT_FALSE(AllowsDevInterfaces(params));
EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
GURL(), GURL("https://plus.google.com/games"),
- kNaClRestricted, kExtensionRestricted, kExtensionNotFromWebStore,
+ kNaClRestricted,
+ CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore),
&params));
EXPECT_FALSE(AllowsDevInterfaces(params));
EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
GURL(), GURL("https://plus.google.com/games/209089085730"),
- kNaClRestricted, kExtensionRestricted, kExtensionNotFromWebStore,
+ kNaClRestricted,
+ CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore),
&params));
EXPECT_FALSE(AllowsDevInterfaces(params));
EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed(
GURL(), GURL("http://plus.sandbox.google.com/games"),
- kNaClRestricted, kExtensionRestricted, kExtensionNotFromWebStore,
+ kNaClRestricted,
+ CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore),
&params));
EXPECT_FALSE(AllowsDevInterfaces(params));
EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
GURL(), GURL("https://plus.sandbox.google.com/games"),
- kNaClRestricted, kExtensionRestricted, kExtensionNotFromWebStore,
+ kNaClRestricted,
+ CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore),
&params));
EXPECT_FALSE(AllowsDevInterfaces(params));
EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
GURL(), GURL("https://plus.google.com/games/209089085730"),
- kNaClRestricted, kExtensionRestricted, kExtensionNotFromWebStore,
+ kNaClRestricted,
+ CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore),
&params));
EXPECT_FALSE(AllowsDevInterfaces(params));
}
@@ -174,7 +228,8 @@
WebPluginParams params;
EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
GURL(), GURL("https://plus.google.com/games/209089085730"),
- kNaClUnrestricted, kExtensionRestricted, kExtensionNotFromWebStore,
+ kNaClUnrestricted,
+ CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore),
&params));
EXPECT_FALSE(AllowsDevInterfaces(params));
}
@@ -185,7 +240,8 @@
AddFakeDevAttribute(&params);
EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
GURL(), GURL("https://plus.google.com/games/209089085730"),
- kNaClRestricted, kExtensionRestricted, kExtensionNotFromWebStore,
+ kNaClRestricted,
+ CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore),
&params));
EXPECT_FALSE(AllowsDevInterfaces(params));
}
@@ -194,21 +250,41 @@
WebPluginParams params;
EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed(
GURL(), GURL("https://plus.google.com.evil.com/games1"),
- kNaClRestricted, kExtensionRestricted, kExtensionNotFromWebStore,
+ kNaClRestricted,
+ CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore),
&params));
EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed(
GURL(), GURL("https://plus.google.com.evil.com/games2"),
- kNaClRestricted, kExtensionRestricted, kExtensionFromWebStore,
+ kNaClRestricted,
+ CreateExtension(kExtensionRestricted, kExtensionFromWebStore),
&params));
EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed(
GURL(), GURL("https://plus.google.com.evil.com/games3"),
- kNaClRestricted, kExtensionUnrestricted, kExtensionNotFromWebStore,
+ kNaClRestricted,
+ CreateExtension(kExtensionUnrestricted, kExtensionNotFromWebStore),
&params));
EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed(
GURL(), GURL("https://plus.google.com.evil.com/games4"),
- kNaClRestricted, kExtensionUnrestricted, kExtensionFromWebStore,
+ kNaClRestricted,
+ CreateExtension(kExtensionUnrestricted, kExtensionFromWebStore),
&params));
}
+ // Non chrome-extension:// URLs belonging to hosted apps are allowed.
+ {
+ WebPluginParams params;
+ EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
+ GURL(), GURL("http://example.com/test.html"),
+ kNaClRestricted,
+ CreateHostedApp(kExtensionRestricted, kExtensionNotFromWebStore,
+ "http://example.com/"),
+ &params));
+ EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed(
+ GURL(), GURL("http://example.evil.com/test.html"),
+ kNaClRestricted,
+ CreateHostedApp(kExtensionRestricted, kExtensionNotFromWebStore,
+ "http://example.com/"),
+ &params));
+ }
}
} // namespace chrome
« no previous file with comments | « chrome/renderer/chrome_content_renderer_client.cc ('k') | chrome/test/data/extensions/native_client_hosted_app/manifest.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698