summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/chrome_content_renderer_client_unittest.cc
diff options
context:
space:
mode:
authormeacer@chromium.org <meacer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-19 09:49:36 +0000
committermeacer@chromium.org <meacer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-19 09:49:36 +0000
commit3aacd9480563ca34e03e8de2837eaf51f868b105 (patch)
tree14b17893622c4f277ff7d804f0a162d013f19e15 /chrome/renderer/chrome_content_renderer_client_unittest.cc
parent5e44a14c0ab8d14036de5632bfefa53fd251babe (diff)
downloadchromium_src-3aacd9480563ca34e03e8de2837eaf51f868b105.zip
chromium_src-3aacd9480563ca34e03e8de2837eaf51f868b105.tar.gz
chromium_src-3aacd9480563ca34e03e8de2837eaf51f868b105.tar.bz2
Allow NaCl plugin to be loaded from hosted app URLs.
A previous change blocked loading NaCl from non chrome-extension: schemes. This broke NaCl functionality for hosted apps, which have http: or https: URLs. This change fixes it. BUG=181761 Review URL: https://chromiumcodereview.appspot.com/12612011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@188971 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/chrome_content_renderer_client_unittest.cc')
-rw-r--r--chrome/renderer/chrome_content_renderer_client_unittest.cc124
1 files changed, 100 insertions, 24 deletions
diff --git a/chrome/renderer/chrome_content_renderer_client_unittest.cc b/chrome/renderer/chrome_content_renderer_client_unittest.cc
index 97fc54f..0c89378 100644
--- a/chrome/renderer/chrome_content_renderer_client_unittest.cc
+++ b/chrome/renderer/chrome_content_renderer_client_unittest.cc
@@ -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 kExtensionRestricted = false;
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 @@ void AddContentTypeHandler(WebPluginInfo* info,
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 @@ TEST_F(ChromeContentRendererClientTest, NaClRestriction) {
{
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 @@ TEST_F(ChromeContentRendererClientTest, NaClRestriction) {
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 @@ TEST_F(ChromeContentRendererClientTest, NaClRestriction) {
{
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 @@ TEST_F(ChromeContentRendererClientTest, NaClRestriction) {
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 @@ TEST_F(ChromeContentRendererClientTest, NaClRestriction) {
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 @@ TEST_F(ChromeContentRendererClientTest, NaClRestriction) {
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 @@ TEST_F(ChromeContentRendererClientTest, NaClRestriction) {
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 @@ TEST_F(ChromeContentRendererClientTest, NaClRestriction) {
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,19 +250,39 @@ TEST_F(ChromeContentRendererClientTest, NaClRestriction) {
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));
}
}