Home | History | Annotate | Download | only in renderer
      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
      3 // found in the LICENSE file.
      4 
      5 #include "base/bind.h"
      6 #include "base/command_line.h"
      7 #include "base/files/file_path.h"
      8 #include "content/public/browser/web_contents.h"
      9 #include "content/public/common/content_switches.h"
     10 #include "content/public/renderer/render_view.h"
     11 #include "content/public/test/content_browser_test.h"
     12 #include "content/public/test/content_browser_test_utils.h"
     13 #include "content/renderer/savable_resources.h"
     14 #include "content/shell/browser/shell.h"
     15 #include "net/base/filename_util.h"
     16 
     17 namespace content {
     18 
     19 class SavableResourcesTest : public ContentBrowserTest {
     20  public:
     21   virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
     22     command_line->AppendSwitch(switches::kSingleProcess);
     23 #if defined(OS_WIN)
     24     // Don't want to try to create a GPU process.
     25     command_line->AppendSwitch(switches::kDisableGpu);
     26 #endif
     27   }
     28 
     29   // Test function GetAllSavableResourceLinksForCurrentPage with a web page.
     30   // We expect result of GetAllSavableResourceLinksForCurrentPage exactly
     31   // matches expected_resources_set.
     32   void GetSavableResourceLinksForPage(
     33       const base::FilePath& page_file_path,
     34       const std::set<GURL>& expected_resources_set) {
     35     // Convert local file path to file URL.
     36     GURL file_url = net::FilePathToFileURL(page_file_path);
     37     // Load the test file.
     38     NavigateToURL(shell(), file_url);
     39 
     40     PostTaskToInProcessRendererAndWait(
     41         base::Bind(&SavableResourcesTest::CheckResources,
     42                    base::Unretained(this),
     43                    page_file_path,
     44                    expected_resources_set,
     45                    file_url,
     46                    shell()->web_contents()->GetRoutingID()));
     47   }
     48 
     49   void CheckResources(const base::FilePath& page_file_path,
     50                       const std::set<GURL>& expected_resources_set,
     51                       const GURL& file_url,
     52                       int render_view_id) {
     53     // Get all savable resource links for the page.
     54     std::vector<GURL> resources_list;
     55     std::vector<GURL> referrer_urls_list;
     56     std::vector<blink::WebReferrerPolicy> referrer_policies_list;
     57     std::vector<GURL> frames_list;
     58     SavableResourcesResult result(&resources_list,
     59                                   &referrer_urls_list,
     60                                   &referrer_policies_list,
     61                                   &frames_list);
     62 
     63     const char* savable_schemes[] = {
     64       "http",
     65       "https",
     66       "file",
     67       NULL
     68     };
     69 
     70     RenderView* render_view = RenderView::FromRoutingID(render_view_id);
     71 
     72     ASSERT_TRUE(GetAllSavableResourceLinksForCurrentPage(
     73         render_view->GetWebView(), file_url, &result, savable_schemes));
     74     // Check all links of sub-resource
     75     for (std::vector<GURL>::const_iterator cit = resources_list.begin();
     76          cit != resources_list.end(); ++cit) {
     77       ASSERT_TRUE(expected_resources_set.find(*cit) !=
     78                   expected_resources_set.end());
     79     }
     80     // Check all links of frame.
     81     for (std::vector<GURL>::const_iterator cit = frames_list.begin();
     82          cit != frames_list.end(); ++cit) {
     83       ASSERT_TRUE(expected_resources_set.find(*cit) !=
     84                   expected_resources_set.end());
     85     }
     86   }
     87 };
     88 
     89 // Test function GetAllSavableResourceLinksForCurrentPage with a web page
     90 // which has valid savable resource links.
     91 IN_PROC_BROWSER_TEST_F(SavableResourcesTest,
     92                        GetSavableResourceLinksWithPageHasValidLinks) {
     93   std::set<GURL> expected_resources_set;
     94 
     95   const char* expected_sub_resource_links[] = {
     96     "file:///c:/yt/css/base_all-vfl36460.css",
     97     "file:///c:/yt/js/base_all_with_bidi-vfl36451.js",
     98     "file:///c:/yt/img/pixel-vfl73.gif"
     99   };
    100   const char* expected_frame_links[] = {
    101     "youtube_1.htm",
    102     "youtube_2.htm"
    103   };
    104   // Add all expected links of sub-resource to expected set.
    105   for (size_t i = 0; i < arraysize(expected_sub_resource_links); ++i)
    106     expected_resources_set.insert(GURL(expected_sub_resource_links[i]));
    107   // Add all expected links of frame to expected set.
    108   for (size_t i = 0; i < arraysize(expected_frame_links); ++i) {
    109     const base::FilePath expected_frame_url =
    110         GetTestFilePath("dom_serializer", expected_frame_links[i]);
    111     expected_resources_set.insert(
    112         net::FilePathToFileURL(expected_frame_url));
    113   }
    114 
    115   base::FilePath page_file_path =
    116       GetTestFilePath("dom_serializer", "youtube_1.htm");
    117   GetSavableResourceLinksForPage(page_file_path, expected_resources_set);
    118 }
    119 
    120 // Test function GetAllSavableResourceLinksForCurrentPage with a web page
    121 // which does not have valid savable resource links.
    122 IN_PROC_BROWSER_TEST_F(SavableResourcesTest,
    123                        GetSavableResourceLinksWithPageHasInvalidLinks) {
    124   std::set<GURL> expected_resources_set;
    125 
    126   const char* expected_frame_links[] = {
    127     "youtube_2.htm"
    128   };
    129   // Add all expected links of frame to expected set.
    130   for (size_t i = 0; i < arraysize(expected_frame_links); ++i) {
    131     base::FilePath expected_frame_url =
    132         GetTestFilePath("dom_serializer", expected_frame_links[i]);
    133     expected_resources_set.insert(
    134         net::FilePathToFileURL(expected_frame_url));
    135   }
    136 
    137   base::FilePath page_file_path =
    138       GetTestFilePath("dom_serializer", "youtube_2.htm");
    139   GetSavableResourceLinksForPage(page_file_path, expected_resources_set);
    140 }
    141 
    142 }  // namespace content
    143