15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/renderer/chrome_content_renderer_client.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include <vector>
84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/renderer/searchbox/search_bouncer.h"
11ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/public/common/webplugininfo.h"
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h"
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension_builder.h"
143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "extensions/common/manifest_constants.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebString.h"
17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebVector.h"
187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebPluginParams.h"
197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebPluginParams;
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebString;
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebVector;
24ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing content::WebPluginInfo;
25ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing content::WebPluginMimeType;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const bool kNaClRestricted = false;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const bool kNaClUnrestricted = true;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const bool kExtensionRestricted = false;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const bool kExtensionUnrestricted = true;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const bool kExtensionNotFromWebStore = false;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const bool kExtensionFromWebStore = true;
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const bool kNotHostedApp = false;
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const bool kHostedApp = true;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kExtensionUrl[] = "chrome-extension://extension_id/background.html";
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
39d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)const char kPhotosAppURL1[] = "https://foo.plus.google.com";
40d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)const char kPhotosAppURL2[] = "https://foo.plus.sandbox.google.com";
41d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)const char kPhotosManifestURL1[] = "https://ssl.gstatic.com/s2/oz/nacl/foo";
42d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)const char kPhotosManifestURL2[] = "https://ssl.gstatic.com/photos/nacl/foo";
43d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kChatAppURL1[] = "https://foo.talkgadget.google.com/hangouts/foo";
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kChatAppURL2[] = "https://foo.plus.google.com/hangouts/foo";
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kChatAppURL3[] = "https://foo.plus.sandbox.google.com/hangouts/foo";
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kChatManifestFS1[] =
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  "filesystem:https://foo.talkgadget.google.com/foo";
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kChatManifestFS2[] = "filesystem:https://foo.plus.google.com/foo";
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kChatManifestFS3[] =
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  "filesystem:https://foo.plus.sandbox.google.com/foo";
52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool AllowsDevInterfaces(const WebPluginParams& params) {
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < params.attributeNames.size(); ++i) {
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (params.attributeNames[i] == WebString::fromUTF8("@dev"))
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return true;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AddFakeDevAttribute(WebPluginParams* params) {
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebVector<WebString> names(static_cast<size_t>(1));
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebVector<WebString> values(static_cast<size_t>(1));
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  names[0] = WebString::fromUTF8("@dev");
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  values[0] = WebString();
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  params->attributeNames.swap(names);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  params->attributeValues.swap(values);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
70ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid AddContentTypeHandler(content::WebPluginInfo* info,
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           const char* mime_type,
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           const char* manifest_url) {
73ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  content::WebPluginMimeType mime_type_info;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mime_type_info.mime_type = mime_type;
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  mime_type_info.additional_param_names.push_back(base::UTF8ToUTF16("nacl"));
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mime_type_info.additional_param_values.push_back(
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::UTF8ToUTF16(manifest_url));
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  info->mime_types.push_back(mime_type_info);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef testing::Test ChromeContentRendererClientTest;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_refptr<const extensions::Extension> CreateTestExtension(
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool is_unrestricted, bool is_from_webstore, bool is_hosted_app,
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const std::string& app_url) {
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  extensions::Manifest::Location location = is_unrestricted ?
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      extensions::Manifest::UNPACKED :
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      extensions::Manifest::INTERNAL;
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int flags = is_from_webstore ?
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      extensions::Extension::FROM_WEBSTORE:
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      extensions::Extension::NO_FLAGS;
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  base::DictionaryValue manifest;
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manifest.SetString("name", "NaCl Extension");
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manifest.SetString("version", "1");
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manifest.SetInteger("manifest_version", 2);
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (is_hosted_app) {
1007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    base::ListValue* url_list = new base::ListValue();
1017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    url_list->Append(base::Value::CreateStringValue(app_url));
1023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    manifest.Set(extensions::manifest_keys::kWebURLs, url_list);
1033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    manifest.SetString(extensions::manifest_keys::kLaunchWebURL, app_url);
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string error;
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return extensions::Extension::Create(base::FilePath(), location, manifest,
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                       flags, &error);
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_refptr<const extensions::Extension> CreateExtension(
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool is_unrestricted, bool is_from_webstore) {
112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return CreateTestExtension(
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      is_unrestricted, is_from_webstore, kNotHostedApp, std::string());
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_refptr<const extensions::Extension> CreateHostedApp(
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool is_unrestricted, bool is_from_webstore, const std::string& app_url) {
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return CreateTestExtension(is_unrestricted, is_from_webstore, kHostedApp,
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                             app_url);
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeContentRendererClientTest, NaClRestriction) {
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Unknown content types have no NaCl module.
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebPluginInfo info;
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(GURL(),
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ChromeContentRendererClient::GetNaClContentHandlerURL(
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  "application/x-foo", info));
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Known content types have a NaCl module.
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebPluginInfo info;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddContentTypeHandler(&info, "application/x-foo", "www.foo.com");
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(GURL("www.foo.com"),
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ChromeContentRendererClient::GetNaClContentHandlerURL(
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  "application/x-foo", info));
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // --enable-nacl allows all NaCl apps, with 'dev' interfaces.
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebPluginParams params;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
1427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        GURL(),
1437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        GURL(),
1447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        kNaClUnrestricted,
1457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(),
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        &params));
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(AllowsDevInterfaces(params));
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Unrestricted extensions are allowed without --enable-nacl, with 'dev'
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // interfaces if called from an extension url.
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebPluginParams params;
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
1547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        GURL(),
1557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        GURL(kExtensionUrl),
1567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        kNaClRestricted,
1577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        CreateExtension(kExtensionUnrestricted, kExtensionNotFromWebStore)
1587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            .get(),
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        &params));
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(AllowsDevInterfaces(params));
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // CWS extensions are allowed without --enable-nacl, without 'dev'
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // interfaces if called from an extension url.
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebPluginParams params;
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
1677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        GURL(),
1687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        GURL(kExtensionUrl),
1697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        kNaClRestricted,
1707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        CreateExtension(kExtensionRestricted, kExtensionFromWebStore).get(),
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        &params));
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(AllowsDevInterfaces(params));
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // CWS extensions can't get 'dev' interfaces with --enable-nacl.
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebPluginParams params;
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
1787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        GURL(),
1797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        GURL(kExtensionUrl),
1807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        kNaClUnrestricted,
1817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        CreateExtension(kExtensionRestricted, kExtensionFromWebStore).get(),
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        &params));
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(AllowsDevInterfaces(params));
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // CWS extensions can't get 'dev' interfaces by injecting a fake
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // '@dev' attribute.
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebPluginParams params;
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddFakeDevAttribute(&params);
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
1917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        GURL(),
1927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        GURL(kExtensionUrl),
1937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        kNaClRestricted,
1947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        CreateExtension(kExtensionRestricted, kExtensionFromWebStore).get(),
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        &params));
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(AllowsDevInterfaces(params));
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The NaCl PDF extension is allowed without --enable-nacl, with 'dev'
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // interfaces, from all URLs.
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebPluginParams params;
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GURL("chrome-extension://acadkphlmlegjaadjagenfimbpphcgnh"),
2047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        GURL(),
2057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        kNaClRestricted,
2067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        CreateExtension(kExtensionRestricted, kExtensionFromWebStore).get(),
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        &params));
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(AllowsDevInterfaces(params));
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whitelisted URLs are allowed without --enable-nacl, without 'dev'
211eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // interfaces. There is a whitelist for the app URL and the manifest URL.
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebPluginParams params;
214d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    // Whitelisted Photos app is allowed (two app URLs, two manifest URLs)
215d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
216d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        GURL(kPhotosManifestURL1),
217d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        GURL(kPhotosAppURL1),
218d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        kNaClRestricted,
219d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(),
220d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        &params));
221d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    EXPECT_FALSE(AllowsDevInterfaces(params));
222eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
223d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        GURL(kPhotosManifestURL1),
224d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        GURL(kPhotosAppURL2),
2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        kNaClRestricted,
2267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(),
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        &params));
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(AllowsDevInterfaces(params));
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
230d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        GURL(kPhotosManifestURL2),
231d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        GURL(kPhotosAppURL1),
232a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        kNaClRestricted,
233a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(),
234a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        &params));
235a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    EXPECT_FALSE(AllowsDevInterfaces(params));
236a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
237d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        GURL(kPhotosManifestURL2),
238d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        GURL(kPhotosAppURL2),
2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        kNaClRestricted,
2407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(),
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        &params));
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(AllowsDevInterfaces(params));
243d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    // Whitelisted Chat app is allowed.
244d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
2455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        GURL(kChatManifestFS1),
246d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        GURL(kChatAppURL1),
247d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        kNaClRestricted,
248d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(),
249d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        &params));
250d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        GURL(kChatManifestFS2),
252d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        GURL(kChatAppURL2),
253d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        kNaClRestricted,
254d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(),
255d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        &params));
2565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        GURL(kChatManifestFS3),
2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        GURL(kChatAppURL3),
2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        kNaClRestricted,
2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(),
2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        &params));
262eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
263eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    // Whitelisted manifest URL, bad app URLs, NOT allowed.
264eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed(
265d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        GURL(kPhotosManifestURL1),
266eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        GURL("http://plus.google.com/foo"),  // http scheme
2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        kNaClRestricted,
2687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(),
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        &params));
2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed(
271d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        GURL(kPhotosManifestURL1),
272eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        GURL("http://plus.sandbox.google.com/foo"),  // http scheme
2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        kNaClRestricted,
2747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(),
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        &params));
276eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed(
277d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        GURL(kPhotosManifestURL1),
278eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        GURL("https://plus.google.evil.com/foo"),  // bad host
2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        kNaClRestricted,
2807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(),
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        &params));
282eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    // Whitelisted app URL, bad manifest URL, NOT allowed.
283eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed(
284eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        GURL("http://ssl.gstatic.com/s2/oz/nacl/foo"),  // http scheme
285d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        GURL(kPhotosAppURL1),
286eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        kNaClRestricted,
287eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(),
288eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        &params));
289eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed(
290eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        GURL("https://ssl.gstatic.evil.com/s2/oz/nacl/foo"),  // bad host
291d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        GURL(kPhotosAppURL1),
292eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        kNaClRestricted,
293eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(),
294eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        &params));
295eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed(
296eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        GURL("https://ssl.gstatic.com/wrong/s2/oz/nacl/foo"),  // bad path
297d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        GURL(kPhotosAppURL1),
2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        kNaClRestricted,
2997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(),
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        &params));
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whitelisted URLs can't get 'dev' interfaces with --enable-nacl.
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebPluginParams params;
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
306d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        GURL(kPhotosManifestURL1),
307d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        GURL(kPhotosAppURL1),
3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        kNaClUnrestricted,
3097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(),
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        &params));
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(AllowsDevInterfaces(params));
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whitelisted URLs can't get 'dev' interfaces by injecting a fake
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // '@dev' attribute.
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebPluginParams params;
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddFakeDevAttribute(&params);
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
319d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        GURL(kPhotosManifestURL1),
320d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        GURL(kPhotosAppURL1),
3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        kNaClRestricted,
3227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(),
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        &params));
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(AllowsDevInterfaces(params));
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Non-whitelisted URLs are blocked without --enable-nacl.
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebPluginParams params;
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed(
3307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        GURL(),
3317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        GURL("https://plus.google.com.evil.com/foo1"),
3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        kNaClRestricted,
3337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        CreateExtension(kExtensionRestricted, kExtensionNotFromWebStore).get(),
3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        &params));
3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed(
3367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        GURL(),
3377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        GURL("https://plus.google.com.evil.com/foo2"),
3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        kNaClRestricted,
3397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        CreateExtension(kExtensionRestricted, kExtensionFromWebStore).get(),
3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        &params));
3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed(
3427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        GURL(),
343d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        GURL("https://talkgadget.google.com.evil.com/foo3"),
3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        kNaClRestricted,
3457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        CreateExtension(kExtensionUnrestricted, kExtensionNotFromWebStore)
3467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            .get(),
3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        &params));
3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed(
3497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        GURL(),
350d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        GURL("https://talkgadget.google.com.evil.com/foo4"),
3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        kNaClRestricted,
3527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        CreateExtension(kExtensionUnrestricted, kExtensionFromWebStore).get(),
3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        &params));
3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Non chrome-extension:// URLs belonging to hosted apps are allowed.
3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  {
3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    WebPluginParams params;
3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
3597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        GURL(),
3607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        GURL("http://example.com/test.html"),
3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        kNaClRestricted,
3627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        CreateHostedApp(kExtensionRestricted,
3637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                        kExtensionNotFromWebStore,
3647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                        "http://example.com/").get(),
3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        &params));
3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed(
3677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        GURL(),
3687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        GURL("http://example.evil.com/test.html"),
3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        kNaClRestricted,
3707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        CreateHostedApp(kExtensionRestricted,
3717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                        kExtensionNotFromWebStore,
3727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                        "http://example.com/").get(),
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        &params));
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
377d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)TEST_F(ChromeContentRendererClientTest, AllowPepperMediaStreamAPI) {
378d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  ChromeContentRendererClient test;
379d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#if !defined(OS_ANDROID)
380d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_TRUE(test.AllowPepperMediaStreamAPI(GURL(kChatAppURL1)));
381d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_TRUE(test.AllowPepperMediaStreamAPI(GURL(kChatAppURL2)));
3825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(test.AllowPepperMediaStreamAPI(GURL(kChatAppURL3)));
383d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#else
384d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_FALSE(test.AllowPepperMediaStreamAPI(GURL(kChatAppURL1)));
385d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_FALSE(test.AllowPepperMediaStreamAPI(GURL(kChatAppURL2)));
3865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(test.AllowPepperMediaStreamAPI(GURL(kChatAppURL3)));
387d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#endif
388d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_FALSE(test.AllowPepperMediaStreamAPI(
3895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      GURL("http://talkgadget.google.com/hangouts/foo")));
390d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_FALSE(test.AllowPepperMediaStreamAPI(
3915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      GURL("https://talkgadget.evil.com/hangouts/foo")));
392d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
393d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
3944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(ChromeContentRendererClientTest, ShouldSuppressErrorPage) {
3954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ChromeContentRendererClient client;
3964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  client.search_bouncer_.reset(new SearchBouncer);
3974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  client.search_bouncer_->OnSetSearchURLs(
3984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      std::vector<GURL>(), GURL("http://example.com/n"));
3995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(client.ShouldSuppressErrorPage(NULL,
4005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                              GURL("http://example.com")));
4015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(client.ShouldSuppressErrorPage(NULL,
4025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                             GURL("http://example.com/n")));
4034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
404