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) ¶ms)); 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) ¶ms)); 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) ¶ms)); 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) ¶ms)); 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(¶ms); 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) ¶ms)); 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) ¶ms)); 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) ¶ms)); 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) ¶ms)); 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) ¶ms)); 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) ¶ms)); 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) ¶ms)); 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) ¶ms)); 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) ¶ms)); 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) ¶ms)); 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) ¶ms)); 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) ¶ms)); 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 ¶ms)); 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 ¶ms)); 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) ¶ms)); 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) ¶ms)); 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(¶ms); 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) ¶ms)); 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) ¶ms)); 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) ¶ms)); 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) ¶ms)); 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) ¶ms)); 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) ¶ms)); 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) ¶ms)); 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