diff options
author | meacer@chromium.org <meacer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-19 09:49:36 +0000 |
---|---|---|
committer | meacer@chromium.org <meacer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-19 09:49:36 +0000 |
commit | 3aacd9480563ca34e03e8de2837eaf51f868b105 (patch) | |
tree | 14b17893622c4f277ff7d804f0a162d013f19e15 /chrome/renderer/chrome_content_renderer_client_unittest.cc | |
parent | 5e44a14c0ab8d14036de5632bfefa53fd251babe (diff) | |
download | chromium_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.cc | 124 |
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, ¶ms)); + GURL(), GURL(), kNaClUnrestricted, + CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore), + ¶ms)); 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, ¶ms)); + CreateExtension(kExtensionUnrestricted, kExtensionNotFromWebStore), + ¶ms)); 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, ¶ms)); + GURL(), GURL(kExtensionUrl), kNaClRestricted, + CreateExtension(kExtensionRestricted, kExtensionFromWebStore), + ¶ms)); 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, ¶ms)); + GURL(), GURL(kExtensionUrl), kNaClUnrestricted, + CreateExtension(kExtensionRestricted, kExtensionFromWebStore), + ¶ms)); 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(¶ms); EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( - GURL(), GURL(kExtensionUrl), kNaClRestricted, kExtensionRestricted, - kExtensionFromWebStore, ¶ms)); + GURL(), GURL(kExtensionUrl), kNaClRestricted, + CreateExtension(kExtensionRestricted, kExtensionFromWebStore), + ¶ms)); 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, ¶ms)); + GURL(), kNaClRestricted, + CreateExtension(kExtensionRestricted, kExtensionFromWebStore), + ¶ms)); 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), ¶ms)); EXPECT_FALSE(AllowsDevInterfaces(params)); EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( GURL(), GURL("https://plus.google.com/games"), - kNaClRestricted, kExtensionRestricted, kExtensionNotFromWebStore, + kNaClRestricted, + CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore), ¶ms)); EXPECT_FALSE(AllowsDevInterfaces(params)); EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( GURL(), GURL("https://plus.google.com/games/209089085730"), - kNaClRestricted, kExtensionRestricted, kExtensionNotFromWebStore, + kNaClRestricted, + CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore), ¶ms)); EXPECT_FALSE(AllowsDevInterfaces(params)); EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( GURL(), GURL("http://plus.sandbox.google.com/games"), - kNaClRestricted, kExtensionRestricted, kExtensionNotFromWebStore, + kNaClRestricted, + CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore), ¶ms)); EXPECT_FALSE(AllowsDevInterfaces(params)); EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( GURL(), GURL("https://plus.sandbox.google.com/games"), - kNaClRestricted, kExtensionRestricted, kExtensionNotFromWebStore, + kNaClRestricted, + CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore), ¶ms)); EXPECT_FALSE(AllowsDevInterfaces(params)); EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( GURL(), GURL("https://plus.google.com/games/209089085730"), - kNaClRestricted, kExtensionRestricted, kExtensionNotFromWebStore, + kNaClRestricted, + CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore), ¶ms)); 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), ¶ms)); EXPECT_FALSE(AllowsDevInterfaces(params)); } @@ -185,7 +240,8 @@ TEST_F(ChromeContentRendererClientTest, NaClRestriction) { AddFakeDevAttribute(¶ms); EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed( GURL(), GURL("https://plus.google.com/games/209089085730"), - kNaClRestricted, kExtensionRestricted, kExtensionNotFromWebStore, + kNaClRestricted, + CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore), ¶ms)); 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), ¶ms)); EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( GURL(), GURL("https://plus.google.com.evil.com/games2"), - kNaClRestricted, kExtensionRestricted, kExtensionFromWebStore, + kNaClRestricted, + CreateExtension(kExtensionRestricted, kExtensionFromWebStore), ¶ms)); EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( GURL(), GURL("https://plus.google.com.evil.com/games3"), - kNaClRestricted, kExtensionUnrestricted, kExtensionNotFromWebStore, + kNaClRestricted, + CreateExtension(kExtensionUnrestricted, kExtensionNotFromWebStore), ¶ms)); EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( GURL(), GURL("https://plus.google.com.evil.com/games4"), - kNaClRestricted, kExtensionUnrestricted, kExtensionFromWebStore, + kNaClRestricted, + CreateExtension(kExtensionUnrestricted, kExtensionFromWebStore), + ¶ms)); + } + // 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/"), + ¶ms)); + EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed( + GURL(), GURL("http://example.evil.com/test.html"), + kNaClRestricted, + CreateHostedApp(kExtensionRestricted, kExtensionNotFromWebStore, + "http://example.com/"), ¶ms)); } } |