Home | History | Annotate | Download | only in extensions
      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