Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |