1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/logging.h" 6 #include "chrome/browser/extensions/extension_apitest.h" 7 #include "chrome/browser/ui/browser.h" 8 #include "chrome/test/ui_test_utils.h" 9 #include "content/browser/tab_contents/tab_contents.h" 10 #include "googleurl/src/gurl.h" 11 #include "net/base/mock_host_resolver.h" 12 13 class ExtensionResourceRequestPolicyTest : public ExtensionApiTest { 14 }; 15 16 // Note, this mostly tests the logic of chrome/renderer/extensions/ 17 // extension_resource_request_policy.*, but we have it as a browser test so that 18 // can make sure it works end-to-end. 19 IN_PROC_BROWSER_TEST_F(ExtensionResourceRequestPolicyTest, OriginPrivileges) { 20 host_resolver()->AddRule("*", "127.0.0.1"); 21 ASSERT_TRUE(test_server()->Start()); 22 ASSERT_TRUE(LoadExtension(test_data_dir_ 23 .AppendASCII("extension_resource_request_policy") 24 .AppendASCII("extension"))); 25 26 GURL web_resource( 27 test_server()->GetURL( 28 "files/extensions/api_test/extension_resource_request_policy/" 29 "index.html")); 30 31 std::string host_a("a.com"); 32 GURL::Replacements make_host_a_com; 33 make_host_a_com.SetHostStr(host_a); 34 35 std::string host_b("b.com"); 36 GURL::Replacements make_host_b_com; 37 make_host_b_com.SetHostStr(host_b); 38 39 // A web host that has permission. 40 ui_test_utils::NavigateToURL( 41 browser(), web_resource.ReplaceComponents(make_host_a_com)); 42 std::string result; 43 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( 44 browser()->GetSelectedTabContents()->render_view_host(), L"", 45 L"window.domAutomationController.send(document.title)", 46 &result)); 47 EXPECT_EQ(result, "Loaded"); 48 49 // A web host that loads a non-existent extension. 50 GURL non_existent_extension( 51 test_server()->GetURL( 52 "files/extensions/api_test/extension_resource_request_policy/" 53 "non_existent_extension.html")); 54 ui_test_utils::NavigateToURL(browser(), non_existent_extension); 55 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( 56 browser()->GetSelectedTabContents()->render_view_host(), L"", 57 L"window.domAutomationController.send(document.title)", 58 &result)); 59 EXPECT_EQ(result, "Image failed to load"); 60 61 // A data URL. Data URLs should always be able to load chrome-extension:// 62 // resources. 63 std::string file_source; 64 ASSERT_TRUE(file_util::ReadFileToString( 65 test_data_dir_.AppendASCII("extension_resource_request_policy") 66 .AppendASCII("index.html"), &file_source)); 67 ui_test_utils::NavigateToURL(browser(), 68 GURL(std::string("data:text/html;charset=utf-8,") + file_source)); 69 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( 70 browser()->GetSelectedTabContents()->render_view_host(), L"", 71 L"window.domAutomationController.send(document.title)", 72 &result)); 73 EXPECT_EQ(result, "Loaded"); 74 75 // A different extension. Extensions should always be able to load each 76 // other's resources. 77 ASSERT_TRUE(LoadExtension(test_data_dir_ 78 .AppendASCII("extension_resource_request_policy") 79 .AppendASCII("extension2"))); 80 ui_test_utils::NavigateToURL( 81 browser(), 82 GURL("chrome-extension://pbkkcbgdkliohhfaeefcijaghglkahja/index.html")); 83 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( 84 browser()->GetSelectedTabContents()->render_view_host(), L"", 85 L"window.domAutomationController.send(document.title)", 86 &result)); 87 EXPECT_EQ(result, "Loaded"); 88 } 89 90 IN_PROC_BROWSER_TEST_F(ExtensionResourceRequestPolicyTest, 91 ExtensionCanLoadHostedAppIcons) { 92 ASSERT_TRUE(LoadExtension(test_data_dir_ 93 .AppendASCII("extension_resource_request_policy") 94 .AppendASCII("extension"))); 95 96 ASSERT_TRUE(RunExtensionSubtest( 97 "extension_resource_request_policy/extension2/", 98 "can_load_icons_from_hosted_apps.html")); 99 } 100 101 IN_PROC_BROWSER_TEST_F(ExtensionResourceRequestPolicyTest, Audio) { 102 EXPECT_TRUE(RunExtensionSubtest( 103 "extension_resource_request_policy/extension2", 104 "audio.html")); 105 } 106 107 IN_PROC_BROWSER_TEST_F(ExtensionResourceRequestPolicyTest, Video) { 108 EXPECT_TRUE(RunExtensionSubtest( 109 "extension_resource_request_policy/extension2", 110 "video.html")); 111 } 112