| 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, ¶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 @@
|
| 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 @@
|
| {
|
| 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 @@
|
| 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 @@
|
| 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 @@
|
| 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 @@
|
| 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 @@
|
| 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,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),
|
| ¶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));
|
| + }
|
| }
|
|
|
| } // namespace chrome
|
|
|