| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/logging.h" | 5 #include "base/logging.h" |
| 6 #include "chrome/browser/extensions/extension_apitest.h" | 6 #include "chrome/browser/extensions/extension_apitest.h" |
| 7 #include "chrome/browser/ui/browser.h" | 7 #include "chrome/browser/ui/browser.h" |
| 8 #include "chrome/browser/ui/browser_tabstrip.h" | 8 #include "chrome/browser/ui/browser_tabstrip.h" |
| 9 #include "chrome/common/chrome_switches.h" | 9 #include "chrome/common/chrome_switches.h" |
| 10 #include "chrome/test/base/ui_test_utils.h" | 10 #include "chrome/test/base/ui_test_utils.h" |
| 11 #include "content/public/browser/web_contents.h" | 11 #include "content/public/browser/web_contents.h" |
| 12 #include "content/public/test/browser_test_utils.h" |
| 12 #include "googleurl/src/gurl.h" | 13 #include "googleurl/src/gurl.h" |
| 13 #include "net/base/mock_host_resolver.h" | 14 #include "net/base/mock_host_resolver.h" |
| 14 | 15 |
| 15 class ExtensionResourceRequestPolicyTest : public ExtensionApiTest { | 16 class ExtensionResourceRequestPolicyTest : public ExtensionApiTest { |
| 16 protected: | 17 protected: |
| 17 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { | 18 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
| 18 ExtensionApiTest::SetUpCommandLine(command_line); | 19 ExtensionApiTest::SetUpCommandLine(command_line); |
| 19 command_line->AppendSwitch(switches::kAllowLegacyExtensionManifests); | 20 command_line->AppendSwitch(switches::kAllowLegacyExtensionManifests); |
| 20 } | 21 } |
| 21 }; | 22 }; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 40 make_host_a_com.SetHostStr(host_a); | 41 make_host_a_com.SetHostStr(host_a); |
| 41 | 42 |
| 42 std::string host_b("b.com"); | 43 std::string host_b("b.com"); |
| 43 GURL::Replacements make_host_b_com; | 44 GURL::Replacements make_host_b_com; |
| 44 make_host_b_com.SetHostStr(host_b); | 45 make_host_b_com.SetHostStr(host_b); |
| 45 | 46 |
| 46 // A web host that has permission. | 47 // A web host that has permission. |
| 47 ui_test_utils::NavigateToURL( | 48 ui_test_utils::NavigateToURL( |
| 48 browser(), web_resource.ReplaceComponents(make_host_a_com)); | 49 browser(), web_resource.ReplaceComponents(make_host_a_com)); |
| 49 std::string result; | 50 std::string result; |
| 50 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( | 51 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractString( |
| 51 chrome::GetActiveWebContents(browser())->GetRenderViewHost(), L"", | 52 chrome::GetActiveWebContents(browser())->GetRenderViewHost(), L"", |
| 52 L"window.domAutomationController.send(document.title)", | 53 L"window.domAutomationController.send(document.title)", |
| 53 &result)); | 54 &result)); |
| 54 EXPECT_EQ(result, "Loaded"); | 55 EXPECT_EQ(result, "Loaded"); |
| 55 | 56 |
| 56 // A web host that loads a non-existent extension. | 57 // A web host that loads a non-existent extension. |
| 57 GURL non_existent_extension( | 58 GURL non_existent_extension( |
| 58 test_server()->GetURL( | 59 test_server()->GetURL( |
| 59 "files/extensions/api_test/extension_resource_request_policy/" | 60 "files/extensions/api_test/extension_resource_request_policy/" |
| 60 "non_existent_extension.html")); | 61 "non_existent_extension.html")); |
| 61 ui_test_utils::NavigateToURL(browser(), non_existent_extension); | 62 ui_test_utils::NavigateToURL(browser(), non_existent_extension); |
| 62 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( | 63 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractString( |
| 63 chrome::GetActiveWebContents(browser())->GetRenderViewHost(), L"", | 64 chrome::GetActiveWebContents(browser())->GetRenderViewHost(), L"", |
| 64 L"window.domAutomationController.send(document.title)", | 65 L"window.domAutomationController.send(document.title)", |
| 65 &result)); | 66 &result)); |
| 66 EXPECT_EQ(result, "Image failed to load"); | 67 EXPECT_EQ(result, "Image failed to load"); |
| 67 | 68 |
| 68 // A data URL. Data URLs should always be able to load chrome-extension:// | 69 // A data URL. Data URLs should always be able to load chrome-extension:// |
| 69 // resources. | 70 // resources. |
| 70 std::string file_source; | 71 std::string file_source; |
| 71 ASSERT_TRUE(file_util::ReadFileToString( | 72 ASSERT_TRUE(file_util::ReadFileToString( |
| 72 test_data_dir_.AppendASCII("extension_resource_request_policy") | 73 test_data_dir_.AppendASCII("extension_resource_request_policy") |
| 73 .AppendASCII("index.html"), &file_source)); | 74 .AppendASCII("index.html"), &file_source)); |
| 74 ui_test_utils::NavigateToURL(browser(), | 75 ui_test_utils::NavigateToURL(browser(), |
| 75 GURL(std::string("data:text/html;charset=utf-8,") + file_source)); | 76 GURL(std::string("data:text/html;charset=utf-8,") + file_source)); |
| 76 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( | 77 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractString( |
| 77 chrome::GetActiveWebContents(browser())->GetRenderViewHost(), L"", | 78 chrome::GetActiveWebContents(browser())->GetRenderViewHost(), L"", |
| 78 L"window.domAutomationController.send(document.title)", | 79 L"window.domAutomationController.send(document.title)", |
| 79 &result)); | 80 &result)); |
| 80 EXPECT_EQ(result, "Loaded"); | 81 EXPECT_EQ(result, "Loaded"); |
| 81 | 82 |
| 82 // A different extension. Legacy (manifest_version 1) extensions should always | 83 // A different extension. Legacy (manifest_version 1) extensions should always |
| 83 // be able to load each other's resources. | 84 // be able to load each other's resources. |
| 84 ASSERT_TRUE(LoadExtension(test_data_dir_ | 85 ASSERT_TRUE(LoadExtension(test_data_dir_ |
| 85 .AppendASCII("extension_resource_request_policy") | 86 .AppendASCII("extension_resource_request_policy") |
| 86 .AppendASCII("extension2"))); | 87 .AppendASCII("extension2"))); |
| 87 ui_test_utils::NavigateToURL( | 88 ui_test_utils::NavigateToURL( |
| 88 browser(), | 89 browser(), |
| 89 GURL("chrome-extension://pbkkcbgdkliohhfaeefcijaghglkahja/index.html")); | 90 GURL("chrome-extension://pbkkcbgdkliohhfaeefcijaghglkahja/index.html")); |
| 90 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( | 91 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractString( |
| 91 chrome::GetActiveWebContents(browser())->GetRenderViewHost(), L"", | 92 chrome::GetActiveWebContents(browser())->GetRenderViewHost(), L"", |
| 92 L"window.domAutomationController.send(document.title)", | 93 L"window.domAutomationController.send(document.title)", |
| 93 &result)); | 94 &result)); |
| 94 EXPECT_EQ(result, "Loaded"); | 95 EXPECT_EQ(result, "Loaded"); |
| 95 } | 96 } |
| 96 | 97 |
| 97 IN_PROC_BROWSER_TEST_F(ExtensionResourceRequestPolicyTest, | 98 IN_PROC_BROWSER_TEST_F(ExtensionResourceRequestPolicyTest, |
| 98 ExtensionCanLoadHostedAppIcons) { | 99 ExtensionCanLoadHostedAppIcons) { |
| 99 ASSERT_TRUE(LoadExtension(test_data_dir_ | 100 ASSERT_TRUE(LoadExtension(test_data_dir_ |
| 100 .AppendASCII("extension_resource_request_policy") | 101 .AppendASCII("extension_resource_request_policy") |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 ASSERT_TRUE(test_server()->Start()); | 137 ASSERT_TRUE(test_server()->Start()); |
| 137 ASSERT_TRUE(LoadExtension(test_data_dir_ | 138 ASSERT_TRUE(LoadExtension(test_data_dir_ |
| 138 .AppendASCII("extension_resource_request_policy") | 139 .AppendASCII("extension_resource_request_policy") |
| 139 .AppendASCII("web_accessible"))); | 140 .AppendASCII("web_accessible"))); |
| 140 | 141 |
| 141 GURL accessible_resource( | 142 GURL accessible_resource( |
| 142 test_server()->GetURL( | 143 test_server()->GetURL( |
| 143 "files/extensions/api_test/extension_resource_request_policy/" | 144 "files/extensions/api_test/extension_resource_request_policy/" |
| 144 "web_accessible/accessible_resource.html")); | 145 "web_accessible/accessible_resource.html")); |
| 145 ui_test_utils::NavigateToURL(browser(), accessible_resource); | 146 ui_test_utils::NavigateToURL(browser(), accessible_resource); |
| 146 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( | 147 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractString( |
| 147 chrome::GetActiveWebContents(browser())->GetRenderViewHost(), L"", | 148 chrome::GetActiveWebContents(browser())->GetRenderViewHost(), L"", |
| 148 L"window.domAutomationController.send(document.title)", | 149 L"window.domAutomationController.send(document.title)", |
| 149 &result)); | 150 &result)); |
| 150 EXPECT_EQ("Loaded", result); | 151 EXPECT_EQ("Loaded", result); |
| 151 | 152 |
| 152 GURL xhr_accessible_resource( | 153 GURL xhr_accessible_resource( |
| 153 test_server()->GetURL( | 154 test_server()->GetURL( |
| 154 "files/extensions/api_test/extension_resource_request_policy/" | 155 "files/extensions/api_test/extension_resource_request_policy/" |
| 155 "web_accessible/xhr_accessible_resource.html")); | 156 "web_accessible/xhr_accessible_resource.html")); |
| 156 ui_test_utils::NavigateToURL( | 157 ui_test_utils::NavigateToURL( |
| 157 browser(), xhr_accessible_resource); | 158 browser(), xhr_accessible_resource); |
| 158 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( | 159 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractString( |
| 159 chrome::GetActiveWebContents(browser())->GetRenderViewHost(), L"", | 160 chrome::GetActiveWebContents(browser())->GetRenderViewHost(), L"", |
| 160 L"window.domAutomationController.send(document.title)", | 161 L"window.domAutomationController.send(document.title)", |
| 161 &result)); | 162 &result)); |
| 162 EXPECT_EQ("XHR completed with status: 200", result); | 163 EXPECT_EQ("XHR completed with status: 200", result); |
| 163 | 164 |
| 164 GURL xhr_inaccessible_resource( | 165 GURL xhr_inaccessible_resource( |
| 165 test_server()->GetURL( | 166 test_server()->GetURL( |
| 166 "files/extensions/api_test/extension_resource_request_policy/" | 167 "files/extensions/api_test/extension_resource_request_policy/" |
| 167 "web_accessible/xhr_inaccessible_resource.html")); | 168 "web_accessible/xhr_inaccessible_resource.html")); |
| 168 ui_test_utils::NavigateToURL( | 169 ui_test_utils::NavigateToURL( |
| 169 browser(), xhr_inaccessible_resource); | 170 browser(), xhr_inaccessible_resource); |
| 170 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( | 171 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractString( |
| 171 chrome::GetActiveWebContents(browser())->GetRenderViewHost(), L"", | 172 chrome::GetActiveWebContents(browser())->GetRenderViewHost(), L"", |
| 172 L"window.domAutomationController.send(document.title)", | 173 L"window.domAutomationController.send(document.title)", |
| 173 &result)); | 174 &result)); |
| 174 EXPECT_EQ("XHR failed to load resource", result); | 175 EXPECT_EQ("XHR failed to load resource", result); |
| 175 | 176 |
| 176 GURL nonaccessible_resource( | 177 GURL nonaccessible_resource( |
| 177 test_server()->GetURL( | 178 test_server()->GetURL( |
| 178 "files/extensions/api_test/extension_resource_request_policy/" | 179 "files/extensions/api_test/extension_resource_request_policy/" |
| 179 "web_accessible/nonaccessible_resource.html")); | 180 "web_accessible/nonaccessible_resource.html")); |
| 180 ui_test_utils::NavigateToURL(browser(), nonaccessible_resource); | 181 ui_test_utils::NavigateToURL(browser(), nonaccessible_resource); |
| 181 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( | 182 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractString( |
| 182 chrome::GetActiveWebContents(browser())->GetRenderViewHost(), L"", | 183 chrome::GetActiveWebContents(browser())->GetRenderViewHost(), L"", |
| 183 L"window.domAutomationController.send(document.title)", | 184 L"window.domAutomationController.send(document.title)", |
| 184 &result)); | 185 &result)); |
| 185 EXPECT_EQ("Image failed to load", result); | 186 EXPECT_EQ("Image failed to load", result); |
| 186 | 187 |
| 187 GURL nonexistent_resource( | 188 GURL nonexistent_resource( |
| 188 test_server()->GetURL( | 189 test_server()->GetURL( |
| 189 "files/extensions/api_test/extension_resource_request_policy/" | 190 "files/extensions/api_test/extension_resource_request_policy/" |
| 190 "web_accessible/nonexistent_resource.html")); | 191 "web_accessible/nonexistent_resource.html")); |
| 191 ui_test_utils::NavigateToURL(browser(), nonexistent_resource); | 192 ui_test_utils::NavigateToURL(browser(), nonexistent_resource); |
| 192 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( | 193 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractString( |
| 193 chrome::GetActiveWebContents(browser())->GetRenderViewHost(), L"", | 194 chrome::GetActiveWebContents(browser())->GetRenderViewHost(), L"", |
| 194 L"window.domAutomationController.send(document.title)", | 195 L"window.domAutomationController.send(document.title)", |
| 195 &result)); | 196 &result)); |
| 196 EXPECT_EQ("Image failed to load", result); | 197 EXPECT_EQ("Image failed to load", result); |
| 197 | 198 |
| 198 GURL nonaccessible_cer_resource( | 199 GURL nonaccessible_cer_resource( |
| 199 test_server()->GetURL( | 200 test_server()->GetURL( |
| 200 "files/extensions/api_test/extension_resource_request_policy/" | 201 "files/extensions/api_test/extension_resource_request_policy/" |
| 201 "web_accessible/nonaccessible_chrome_resource_scheme.html")); | 202 "web_accessible/nonaccessible_chrome_resource_scheme.html")); |
| 202 ui_test_utils::NavigateToURL(browser(), nonaccessible_cer_resource); | 203 ui_test_utils::NavigateToURL(browser(), nonaccessible_cer_resource); |
| 203 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( | 204 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractString( |
| 204 chrome::GetActiveWebContents(browser())->GetRenderViewHost(), L"", | 205 chrome::GetActiveWebContents(browser())->GetRenderViewHost(), L"", |
| 205 L"window.domAutomationController.send(document.title)", | 206 L"window.domAutomationController.send(document.title)", |
| 206 &result)); | 207 &result)); |
| 207 EXPECT_EQ("Loading CER:// failed.", result); | 208 EXPECT_EQ("Loading CER:// failed.", result); |
| 208 } | 209 } |
| 209 | 210 |
| 210 IN_PROC_BROWSER_TEST_F(ExtensionResourceRequestPolicyTest, Iframe) { | 211 IN_PROC_BROWSER_TEST_F(ExtensionResourceRequestPolicyTest, Iframe) { |
| 211 // Load another extension, which the test one shouldn't be able to get | 212 // Load another extension, which the test one shouldn't be able to get |
| 212 // resources from. | 213 // resources from. |
| 213 ASSERT_TRUE(LoadExtension(test_data_dir_ | 214 ASSERT_TRUE(LoadExtension(test_data_dir_ |
| 214 .AppendASCII("extension_resource_request_policy") | 215 .AppendASCII("extension_resource_request_policy") |
| 215 .AppendASCII("inaccessible"))); | 216 .AppendASCII("inaccessible"))); |
| 216 EXPECT_TRUE(RunExtensionSubtest( | 217 EXPECT_TRUE(RunExtensionSubtest( |
| 217 "extension_resource_request_policy/web_accessible", | 218 "extension_resource_request_policy/web_accessible", |
| 218 "iframe.html")); | 219 "iframe.html")); |
| 219 } | 220 } |
| 220 | 221 |
| 221 #if defined(OS_MACOSX) | 222 #if defined(OS_MACOSX) |
| 222 #define MAYBE_ExtensionAccessibleResources FLAKY_ExtensionAccessibleResources | 223 #define MAYBE_ExtensionAccessibleResources FLAKY_ExtensionAccessibleResources |
| 223 #else | 224 #else |
| 224 #define MAYBE_ExtensionAccessibleResources ExtensionAccessibleResources | 225 #define MAYBE_ExtensionAccessibleResources ExtensionAccessibleResources |
| 225 #endif | 226 #endif |
| 226 IN_PROC_BROWSER_TEST_F(ExtensionResourceRequestPolicyTest, | 227 IN_PROC_BROWSER_TEST_F(ExtensionResourceRequestPolicyTest, |
| 227 MAYBE_ExtensionAccessibleResources) { | 228 MAYBE_ExtensionAccessibleResources) { |
| 228 ASSERT_TRUE(RunExtensionSubtest("accessible_cer", "main.html")) << message_; | 229 ASSERT_TRUE(RunExtensionSubtest("accessible_cer", "main.html")) << message_; |
| 229 } | 230 } |
| OLD | NEW |