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/renderer/savable_resources.h" 12#include "content/shell/browser/shell.h" 13#include "content/test/content_browser_test.h" 14#include "content/test/content_browser_test_utils.h" 15#include "net/base/net_util.h" 16 17namespace content { 18 19class SavableResourcesTest : public ContentBrowserTest { 20 public: 21 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 22 command_line->AppendSwitch(switches::kSingleProcess); 23#if defined(OS_WIN) && defined(USE_AURA) 24 // Don't want to try to create a GPU process. 25 command_line->AppendSwitch(switches::kDisableAcceleratedCompositing); 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. 91IN_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. 122IN_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