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

Side by Side Diff: chrome/browser/prerender/prerender_unittest.cc

Issue 1767243002: Update prerender policy for custom tabs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updated comments Created 4 years, 9 months 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
OLDNEW
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 <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include <map> 8 #include <map>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 14 matching lines...) Expand all
25 #include "chrome/browser/prerender/prerender_origin.h" 25 #include "chrome/browser/prerender/prerender_origin.h"
26 #include "chrome/common/chrome_switches.h" 26 #include "chrome/common/chrome_switches.h"
27 #include "chrome/common/pref_names.h" 27 #include "chrome/common/pref_names.h"
28 #include "chrome/common/prerender_types.h" 28 #include "chrome/common/prerender_types.h"
29 #include "chrome/test/base/testing_browser_process.h" 29 #include "chrome/test/base/testing_browser_process.h"
30 #include "chrome/test/base/testing_profile.h" 30 #include "chrome/test/base/testing_profile.h"
31 #include "components/content_settings/core/common/pref_names.h" 31 #include "components/content_settings/core/common/pref_names.h"
32 #include "components/prefs/pref_service.h" 32 #include "components/prefs/pref_service.h"
33 #include "content/public/browser/render_view_host.h" 33 #include "content/public/browser/render_view_host.h"
34 #include "content/public/test/test_browser_thread.h" 34 #include "content/public/test/test_browser_thread.h"
35 #include "net/base/network_change_notifier.h"
35 #include "testing/gtest/include/gtest/gtest.h" 36 #include "testing/gtest/include/gtest/gtest.h"
36 #include "ui/gfx/geometry/size.h" 37 #include "ui/gfx/geometry/size.h"
37 #include "url/gurl.h" 38 #include "url/gurl.h"
38 39
39 using base::Time; 40 using base::Time;
40 using base::TimeDelta; 41 using base::TimeDelta;
41 using base::TimeTicks; 42 using base::TimeTicks;
42 using content::BrowserThread; 43 using content::BrowserThread;
43 using content::Referrer; 44 using content::Referrer;
44 45
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 PrerenderContents* prerender_contents) { 221 PrerenderContents* prerender_contents) {
221 prerender_contents_map_[std::make_pair(child_id, route_id)] = 222 prerender_contents_map_[std::make_pair(child_id, route_id)] =
222 prerender_contents; 223 prerender_contents;
223 } 224 }
224 225
225 void DummyPrerenderContentsDestroyed(int child_id, 226 void DummyPrerenderContentsDestroyed(int child_id,
226 int route_id) { 227 int route_id) {
227 prerender_contents_map_.erase(std::make_pair(child_id, route_id)); 228 prerender_contents_map_.erase(std::make_pair(child_id, route_id));
228 } 229 }
229 230
231
pasko 2016/03/21 12:00:58 nit: don't we use only one vertical whitespace in
Yusuf 2016/03/21 16:59:56 Done.
230 private: 232 private:
231 void SetNextPrerenderContents(DummyPrerenderContents* prerender_contents) { 233 void SetNextPrerenderContents(DummyPrerenderContents* prerender_contents) {
232 CHECK(!next_prerender_contents_.get()); 234 CHECK(!next_prerender_contents_.get());
233 next_prerender_contents_.reset(prerender_contents); 235 next_prerender_contents_.reset(prerender_contents);
234 if (prerender_contents->expected_final_status() == FINAL_STATUS_USED) 236 if (prerender_contents->expected_final_status() == FINAL_STATUS_USED)
235 used_prerender_contents_.push_back(prerender_contents); 237 used_prerender_contents_.push_back(prerender_contents);
236 } 238 }
237 239
238 PrerenderContents* CreatePrerenderContents(const GURL& url, 240 PrerenderContents* CreatePrerenderContents(const GURL& url,
239 const Referrer& referrer, 241 const Referrer& referrer,
240 Origin origin) override { 242 Origin origin) override {
241 CHECK(next_prerender_contents_.get()); 243 CHECK(next_prerender_contents_.get());
242 EXPECT_EQ(url, next_prerender_contents_->prerender_url()); 244 EXPECT_EQ(url, next_prerender_contents_->prerender_url());
243 EXPECT_EQ(origin, next_prerender_contents_->origin()); 245 EXPECT_EQ(origin, next_prerender_contents_->origin());
244 return next_prerender_contents_.release(); 246 return next_prerender_contents_.release();
245 } 247 }
246 248
247 // Maintain a map from route pairs to PrerenderContents for 249 // Maintain a map from route pairs to PrerenderContents for
248 // GetPrerenderContentsForRoute. 250 // GetPrerenderContentsForRoute.
249 typedef std::map<std::pair<int,int>, PrerenderContents*> PrerenderContentsMap; 251 typedef std::map<std::pair<int,int>, PrerenderContents*> PrerenderContentsMap;
250 PrerenderContentsMap prerender_contents_map_; 252 PrerenderContentsMap prerender_contents_map_;
251 253
252 Time time_; 254 Time time_;
253 TimeTicks time_ticks_; 255 TimeTicks time_ticks_;
256
254 scoped_ptr<PrerenderContents> next_prerender_contents_; 257 scoped_ptr<PrerenderContents> next_prerender_contents_;
255 // PrerenderContents with an |expected_final_status| of FINAL_STATUS_USED, 258 // PrerenderContents with an |expected_final_status| of FINAL_STATUS_USED,
256 // tracked so they will be automatically deleted. 259 // tracked so they will be automatically deleted.
257 ScopedVector<PrerenderContents> used_prerender_contents_; 260 ScopedVector<PrerenderContents> used_prerender_contents_;
258 }; 261 };
259 262
260 class RestorePrerenderMode { 263 class RestorePrerenderMode {
261 public: 264 public:
262 RestorePrerenderMode() : prev_mode_(PrerenderManager::GetMode()) { 265 RestorePrerenderMode() : prev_mode_(PrerenderManager::GetMode()) {
263 } 266 }
264 267
265 ~RestorePrerenderMode() { PrerenderManager::SetMode(prev_mode_); } 268 ~RestorePrerenderMode() { PrerenderManager::SetMode(prev_mode_); }
266 private: 269 private:
267 PrerenderManager::PrerenderManagerMode prev_mode_; 270 PrerenderManager::PrerenderManagerMode prev_mode_;
268 }; 271 };
269 272
273 class MockNetworkChangeNotifier4G : public net::NetworkChangeNotifier {
274 public:
275 ConnectionType GetCurrentConnectionType() const override {
276 return NetworkChangeNotifier::CONNECTION_4G;
277 }
278 };
279
270 DummyPrerenderContents::DummyPrerenderContents( 280 DummyPrerenderContents::DummyPrerenderContents(
271 UnitTestPrerenderManager* test_prerender_manager, 281 UnitTestPrerenderManager* test_prerender_manager,
272 const GURL& url, 282 const GURL& url,
273 Origin origin, 283 Origin origin,
274 FinalStatus expected_final_status) 284 FinalStatus expected_final_status)
275 : PrerenderContents(test_prerender_manager, 285 : PrerenderContents(test_prerender_manager,
276 NULL, url, Referrer(), origin), 286 NULL, url, Referrer(), origin),
277 route_id_(g_next_route_id_++), 287 route_id_(g_next_route_id_++),
278 test_prerender_manager_(test_prerender_manager), 288 test_prerender_manager_(test_prerender_manager),
279 expected_final_status_(expected_final_status) { 289 expected_final_status_(expected_final_status) {
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 content::Referrer(), kSize, kDefaultRenderViewRouteId); 385 content::Referrer(), kSize, kDefaultRenderViewRouteId);
376 return LauncherHasRunningPrerender(kDefaultChildId, last_prerender_id()); 386 return LauncherHasRunningPrerender(kDefaultChildId, last_prerender_id());
377 } 387 }
378 388
379 void DisablePrerender() { 389 void DisablePrerender() {
380 profile_.GetPrefs()->SetInteger( 390 profile_.GetPrefs()->SetInteger(
381 prefs::kNetworkPredictionOptions, 391 prefs::kNetworkPredictionOptions,
382 chrome_browser_net::NETWORK_PREDICTION_NEVER); 392 chrome_browser_net::NETWORK_PREDICTION_NEVER);
383 } 393 }
384 394
395 void EnablePrerender() {
396 profile_.GetPrefs()->SetInteger(
397 prefs::kNetworkPredictionOptions,
398 chrome_browser_net::NETWORK_PREDICTION_WIFI_ONLY);
pasko 2016/03/21 12:00:58 since NETWORK_PREDICTION_WIFI_ONLY is deprecated,
Yusuf 2016/03/21 16:59:56 Done.
399 }
400
385 private: 401 private:
386 // Needed to pass PrerenderManager's DCHECKs. 402 // Needed to pass PrerenderManager's DCHECKs.
387 base::MessageLoop message_loop_; 403 base::MessageLoop message_loop_;
388 TestingProfile profile_; 404 TestingProfile profile_;
389 content::TestBrowserThread ui_thread_; 405 content::TestBrowserThread ui_thread_;
390 scoped_ptr<UnitTestPrerenderManager> prerender_manager_; 406 scoped_ptr<UnitTestPrerenderManager> prerender_manager_;
391 scoped_ptr<PrerenderLinkManager> prerender_link_manager_; 407 scoped_ptr<PrerenderLinkManager> prerender_link_manager_;
392 int last_prerender_id_; 408 int last_prerender_id_;
393 base::FieldTrialList field_trial_list_; 409 base::FieldTrialList field_trial_list_;
394 }; 410 };
(...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after
1051 EXPECT_FALSE(prerender_manager()->AddPrerenderFromOmnibox( 1067 EXPECT_FALSE(prerender_manager()->AddPrerenderFromOmnibox(
1052 GURL("http://www.example.com"), NULL, gfx::Size())); 1068 GURL("http://www.example.com"), NULL, gfx::Size()));
1053 } 1069 }
1054 1070
1055 TEST_F(PrerenderTest, LinkRelNotAllowedWhenDisabled) { 1071 TEST_F(PrerenderTest, LinkRelNotAllowedWhenDisabled) {
1056 DisablePrerender(); 1072 DisablePrerender();
1057 EXPECT_FALSE(AddSimplePrerender( 1073 EXPECT_FALSE(AddSimplePrerender(
1058 GURL("http://www.example.com"))); 1074 GURL("http://www.example.com")));
1059 } 1075 }
1060 1076
1077 TEST_F(PrerenderTest,PrerenderNotAllowedOnCellular) {
pasko 2016/03/21 12:00:58 nit: s/,/, / same below
Yusuf 2016/03/21 16:59:57 Done.
pasko 2016/03/31 15:30:44 Thank you. I just noticed it was not done for test
1078 EnablePrerender();
1079 scoped_ptr<net::NetworkChangeNotifier> mock(
1080 new MockNetworkChangeNotifier4G);
1081 EXPECT_TRUE(net::NetworkChangeNotifier::IsConnectionCellular(
1082 net::NetworkChangeNotifier::GetConnectionType()));
1083 EXPECT_FALSE(AddSimplePrerender(
1084 GURL("http://www.example.com")));
1085 }
1086
1087 TEST_F(PrerenderTest,PrerenderNotAllowedOnCellularWithExternalOrigin) {
1088 EnablePrerender();
1089 scoped_ptr<net::NetworkChangeNotifier> mock(
1090 new MockNetworkChangeNotifier4G);
1091 EXPECT_TRUE(net::NetworkChangeNotifier::IsConnectionCellular(
1092 net::NetworkChangeNotifier::GetConnectionType()));
1093 GURL url("http://www.google.com/");
1094 DummyPrerenderContents* prerender_contents =
1095 prerender_manager()->CreateNextPrerenderContents(
1096 url,
1097 ORIGIN_EXTERNAL_REQUEST,
1098 FINAL_STATUS_MANAGER_SHUTDOWN);
1099 scoped_ptr<PrerenderHandle> prerender_handle(
1100 prerender_manager()->AddPrerenderFromExternalRequest(
1101 url, content::Referrer(), NULL, kSize));
1102 CHECK(!prerender_handle.get());
1103 EXPECT_FALSE(prerender_contents->prerendering_has_started());
1104 }
1105
1106 TEST_F(PrerenderTest,PrerenderAllowedOnCellularWithForcedOrigin) {
1107 EnablePrerender();
1108 scoped_ptr<net::NetworkChangeNotifier> mock(
1109 new MockNetworkChangeNotifier4G);
1110 EXPECT_TRUE(net::NetworkChangeNotifier::IsConnectionCellular(
1111 net::NetworkChangeNotifier::GetConnectionType()));
1112 GURL url("http://www.google.com/");
1113 DummyPrerenderContents* prerender_contents =
1114 prerender_manager()->CreateNextPrerenderContents(
1115 url,
1116 ORIGIN_EXTERNAL_REQUEST_FORCED_CELLULAR,
1117 FINAL_STATUS_USED);
1118 scoped_ptr<PrerenderHandle> prerender_handle(
1119 prerender_manager()->AddPrerenderOnCellularFromExternalRequest(
1120 url, content::Referrer(), NULL, kSize));
1121 CHECK(prerender_handle.get());
1122 EXPECT_TRUE(prerender_handle->IsPrerendering());
1123 EXPECT_TRUE(prerender_contents->prerendering_has_started());
1124 EXPECT_EQ(prerender_contents, prerender_handle->contents());
1125 EXPECT_EQ(ORIGIN_EXTERNAL_REQUEST_FORCED_CELLULAR,
1126 prerender_handle->contents()->origin());
1127 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
1128 }
1129
1061 TEST_F(PrerenderTest, LinkManagerCancel) { 1130 TEST_F(PrerenderTest, LinkManagerCancel) {
1062 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 1131 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
1063 GURL url("http://www.myexample.com"); 1132 GURL url("http://www.myexample.com");
1064 DummyPrerenderContents* prerender_contents = 1133 DummyPrerenderContents* prerender_contents =
1065 prerender_manager()->CreateNextPrerenderContents( 1134 prerender_manager()->CreateNextPrerenderContents(
1066 url, FINAL_STATUS_CANCELLED); 1135 url, FINAL_STATUS_CANCELLED);
1067 1136
1068 EXPECT_TRUE(AddSimplePrerender(url)); 1137 EXPECT_TRUE(AddSimplePrerender(url));
1069 1138
1070 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 1139 EXPECT_TRUE(prerender_contents->prerendering_has_started());
(...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after
1579 CHECK(prerender_handle.get()); 1648 CHECK(prerender_handle.get());
1580 EXPECT_TRUE(prerender_handle->IsPrerendering()); 1649 EXPECT_TRUE(prerender_handle->IsPrerendering());
1581 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 1650 EXPECT_TRUE(prerender_contents->prerendering_has_started());
1582 EXPECT_EQ(prerender_contents, prerender_handle->contents()); 1651 EXPECT_EQ(prerender_contents, prerender_handle->contents());
1583 EXPECT_EQ(ORIGIN_INSTANT, prerender_handle->contents()->origin()); 1652 EXPECT_EQ(ORIGIN_INSTANT, prerender_handle->contents()->origin());
1584 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); 1653 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
1585 EXPECT_FALSE(prerender_handle->IsPrerendering()); 1654 EXPECT_FALSE(prerender_handle->IsPrerendering());
1586 } 1655 }
1587 1656
1588 } // namespace prerender 1657 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698