Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(171)

Side by Side Diff: chrome/browser/predictors/resource_prefetch_predictor_browsertest.cc

Issue 2529263003: predictors: Ignore repeating subresources while checking. (Closed)
Patch Set: Add anonymous namespace. Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/command_line.h" 5 #include "base/command_line.h"
6 #include "chrome/browser/predictors/resource_prefetch_predictor.h" 6 #include "chrome/browser/predictors/resource_prefetch_predictor.h"
7 #include "chrome/browser/predictors/resource_prefetch_predictor_factory.h" 7 #include "chrome/browser/predictors/resource_prefetch_predictor_factory.h"
8 #include "chrome/browser/predictors/resource_prefetch_predictor_test_util.h" 8 #include "chrome/browser/predictors/resource_prefetch_predictor_test_util.h"
9 #include "chrome/browser/profiles/profile.h" 9 #include "chrome/browser/profiles/profile.h"
10 #include "chrome/browser/ui/browser.h" 10 #include "chrome/browser/ui/browser.h"
11 #include "chrome/browser/ui/tabs/tab_strip_model.h" 11 #include "chrome/browser/ui/tabs/tab_strip_model.h"
12 #include "chrome/common/chrome_switches.h" 12 #include "chrome/common/chrome_switches.h"
13 #include "chrome/test/base/in_process_browser_test.h" 13 #include "chrome/test/base/in_process_browser_test.h"
14 #include "chrome/test/base/ui_test_utils.h" 14 #include "chrome/test/base/ui_test_utils.h"
15 #include "content/public/browser/render_frame_host.h" 15 #include "content/public/browser/render_frame_host.h"
16 #include "content/public/browser/render_process_host.h" 16 #include "content/public/browser/render_process_host.h"
17 #include "net/test/embedded_test_server/http_request.h" 17 #include "net/test/embedded_test_server/http_request.h"
18 #include "net/test/embedded_test_server/http_response.h" 18 #include "net/test/embedded_test_server/http_response.h"
19 #include "testing/gmock/include/gmock/gmock.h" 19 #include "testing/gmock/include/gmock/gmock.h"
20 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
21 21
22 namespace predictors { 22 namespace predictors {
23 23
24 namespace {
25
24 static const char kImagePath[] = "/predictors/image.png"; 26 static const char kImagePath[] = "/predictors/image.png";
25 static const char kStylePath[] = "/predictors/style.css"; 27 static const char kStylePath[] = "/predictors/style.css";
26 static const char kScriptPath[] = "/predictors/script.js"; 28 static const char kScriptPath[] = "/predictors/script.js";
27 static const char kFontPath[] = "/predictors/font.ttf"; 29 static const char kFontPath[] = "/predictors/font.ttf";
28 static const char kHtmlSubresourcesPath[] = 30 static const char kHtmlSubresourcesPath[] =
29 "/predictors/html_subresources.html"; 31 "/predictors/html_subresources.html";
30 static const char kRedirectPath[] = "/predictors/redirect.html"; 32 static const char kRedirectPath[] = "/predictors/redirect.html";
31 static const char kRedirectPath2[] = "/predictors/redirect2.html"; 33 static const char kRedirectPath2[] = "/predictors/redirect2.html";
32 static const char kRedirectPath3[] = "/predictors/redirect3.html"; 34 static const char kRedirectPath3[] = "/predictors/redirect3.html";
33 35
(...skipping 20 matching lines...) Expand all
54 void OnPredictorInitialized() override { run_loop_.Quit(); } 56 void OnPredictorInitialized() override { run_loop_.Quit(); }
55 57
56 void Wait() { run_loop_.Run(); } 58 void Wait() { run_loop_.Run(); }
57 59
58 private: 60 private:
59 base::RunLoop run_loop_; 61 base::RunLoop run_loop_;
60 62
61 DISALLOW_COPY_AND_ASSIGN(InitializationObserver); 63 DISALLOW_COPY_AND_ASSIGN(InitializationObserver);
62 }; 64 };
63 65
66 using PageRequestSummary = ResourcePrefetchPredictor::PageRequestSummary;
67 using URLRequestSummary = ResourcePrefetchPredictor::URLRequestSummary;
68
69 std::vector<URLRequestSummary> GetUniqueSubresources(
70 const PageRequestSummary& summary) {
71 std::vector<URLRequestSummary> subresources(summary.subresource_requests);
72 std::stable_sort(subresources.begin(), subresources.end(),
73 [](const URLRequestSummary& x, const URLRequestSummary& y) {
74 return x.resource_url < y.resource_url;
75 });
76 subresources.erase(
77 std::unique(subresources.begin(), subresources.end(),
78 [](const URLRequestSummary& x, const URLRequestSummary& y) {
79 return x.resource_url == y.resource_url;
80 }),
81 subresources.end());
82 return subresources;
83 }
84
85 } // namespace
86
64 // Helper class to track and allow waiting for ResourcePrefetchPredictor events. 87 // Helper class to track and allow waiting for ResourcePrefetchPredictor events.
65 // These events are also used to verify that ResourcePrefetchPredictor works as 88 // These events are also used to verify that ResourcePrefetchPredictor works as
66 // expected. 89 // expected.
67 class ResourcePrefetchPredictorTestObserver : public TestObserver { 90 class ResourcePrefetchPredictorTestObserver : public TestObserver {
68 public: 91 public:
69 using PageRequestSummary = ResourcePrefetchPredictor::PageRequestSummary; 92 using PageRequestSummary = ResourcePrefetchPredictor::PageRequestSummary;
70 93
71 explicit ResourcePrefetchPredictorTestObserver( 94 explicit ResourcePrefetchPredictorTestObserver(
72 ResourcePrefetchPredictor* predictor, 95 ResourcePrefetchPredictor* predictor,
73 const size_t expected_url_visit_count, 96 const size_t expected_url_visit_count,
74 const PageRequestSummary& expected_summary) 97 const PageRequestSummary& expected_summary)
75 : TestObserver(predictor), 98 : TestObserver(predictor),
76 url_visit_count_(expected_url_visit_count), 99 url_visit_count_(expected_url_visit_count),
77 summary_(expected_summary) {} 100 summary_(expected_summary) {}
78 101
79 // TestObserver: 102 // TestObserver:
80 void OnNavigationLearned(size_t url_visit_count, 103 void OnNavigationLearned(size_t url_visit_count,
81 const PageRequestSummary& summary) override { 104 const PageRequestSummary& summary) override {
82 EXPECT_EQ(url_visit_count, url_visit_count_); 105 EXPECT_EQ(url_visit_count, url_visit_count_);
83 EXPECT_EQ(summary.main_frame_url, summary_.main_frame_url); 106 EXPECT_EQ(summary.main_frame_url, summary_.main_frame_url);
84 EXPECT_EQ(summary.initial_url, summary_.initial_url); 107 EXPECT_EQ(summary.initial_url, summary_.initial_url);
85 EXPECT_THAT( 108 // Duplicate resources can be observed in a single navigation but
86 summary.subresource_requests, 109 // ResourcePrefetchPredictor only cares about the first occurrence of each.
87 testing::UnorderedElementsAreArray(summary_.subresource_requests)); 110 std::vector<ResourcePrefetchPredictor::URLRequestSummary> subresources =
111 GetUniqueSubresources(summary);
112 EXPECT_THAT(subresources, testing::UnorderedElementsAreArray(
113 summary_.subresource_requests));
88 run_loop_.Quit(); 114 run_loop_.Quit();
89 } 115 }
90 116
91 void Wait() { run_loop_.Run(); } 117 void Wait() { run_loop_.Run(); }
92 118
93 private: 119 private:
94 base::RunLoop run_loop_; 120 base::RunLoop run_loop_;
95 size_t url_visit_count_; 121 size_t url_visit_count_;
96 PageRequestSummary summary_; 122 PageRequestSummary summary_;
97 123
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 AddResource(https_server()->GetURL(kStylePath), 366 AddResource(https_server()->GetURL(kStylePath),
341 content::RESOURCE_TYPE_STYLESHEET, net::HIGHEST); 367 content::RESOURCE_TYPE_STYLESHEET, net::HIGHEST);
342 AddResource(https_server()->GetURL(kScriptPath), 368 AddResource(https_server()->GetURL(kScriptPath),
343 content::RESOURCE_TYPE_SCRIPT, net::MEDIUM); 369 content::RESOURCE_TYPE_SCRIPT, net::MEDIUM);
344 AddResource(https_server()->GetURL(kFontPath), 370 AddResource(https_server()->GetURL(kFontPath),
345 content::RESOURCE_TYPE_FONT_RESOURCE, net::HIGHEST); 371 content::RESOURCE_TYPE_FONT_RESOURCE, net::HIGHEST);
346 NavigateToURLAndCheckSubresources(GetURL(kRedirectPath)); 372 NavigateToURLAndCheckSubresources(GetURL(kRedirectPath));
347 } 373 }
348 374
349 } // namespace predictors 375 } // namespace predictors
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698