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 16 matching lines...) Expand all Loading... | |
| 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 "net/base/network_change_notifier.h" |
| 36 #include "testing/gtest/include/gtest/gtest.h" | 36 #include "testing/gtest/include/gtest/gtest.h" |
| 37 #include "ui/gfx/geometry/size.h" | 37 #include "ui/gfx/geometry/size.h" |
|
mmenke
2016/08/19 15:22:29
Need rect.h, too.
Yusuf
2016/08/19 17:20:33
Done.
| |
| 38 #include "url/gurl.h" | 38 #include "url/gurl.h" |
| 39 | 39 |
| 40 using base::Time; | 40 using base::Time; |
| 41 using base::TimeDelta; | 41 using base::TimeDelta; |
| 42 using base::TimeTicks; | 42 using base::TimeTicks; |
| 43 using content::BrowserThread; | 43 using content::BrowserThread; |
| 44 using content::Referrer; | 44 using content::Referrer; |
| 45 | 45 |
| 46 namespace prerender { | 46 namespace prerender { |
| 47 | 47 |
| 48 class UnitTestPrerenderManager; | 48 class UnitTestPrerenderManager; |
| 49 | 49 |
| 50 namespace { | 50 namespace { |
| 51 | 51 |
| 52 class DummyPrerenderContents : public PrerenderContents { | 52 class DummyPrerenderContents : public PrerenderContents { |
| 53 public: | 53 public: |
| 54 DummyPrerenderContents(UnitTestPrerenderManager* test_prerender_manager, | 54 DummyPrerenderContents(UnitTestPrerenderManager* test_prerender_manager, |
| 55 const GURL& url, | 55 const GURL& url, |
| 56 Origin origin, | 56 Origin origin, |
| 57 FinalStatus expected_final_status); | 57 FinalStatus expected_final_status); |
| 58 | 58 |
| 59 ~DummyPrerenderContents() override; | 59 ~DummyPrerenderContents() override; |
| 60 | 60 |
| 61 void StartPrerendering( | 61 void StartPrerendering( |
| 62 const gfx::Size& size, | 62 const gfx::Rect& bounds, |
| 63 content::SessionStorageNamespace* session_storage_namespace) override; | 63 content::SessionStorageNamespace* session_storage_namespace) override; |
| 64 | 64 |
| 65 bool GetChildId(int* child_id) const override { | 65 bool GetChildId(int* child_id) const override { |
| 66 // Having a default child_id of -1 forces pending prerenders not to fail | 66 // Having a default child_id of -1 forces pending prerenders not to fail |
| 67 // on session storage and cross domain checking. | 67 // on session storage and cross domain checking. |
| 68 *child_id = -1; | 68 *child_id = -1; |
| 69 return true; | 69 return true; |
| 70 } | 70 } |
| 71 | 71 |
| 72 bool GetRouteId(int* route_id) const override { | 72 bool GetRouteId(int* route_id) const override { |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 284 route_id_(g_next_route_id_++), | 284 route_id_(g_next_route_id_++), |
| 285 test_prerender_manager_(test_prerender_manager), | 285 test_prerender_manager_(test_prerender_manager), |
| 286 expected_final_status_(expected_final_status) {} | 286 expected_final_status_(expected_final_status) {} |
| 287 | 287 |
| 288 DummyPrerenderContents::~DummyPrerenderContents() { | 288 DummyPrerenderContents::~DummyPrerenderContents() { |
| 289 EXPECT_EQ(expected_final_status_, final_status()); | 289 EXPECT_EQ(expected_final_status_, final_status()); |
| 290 test_prerender_manager_->DummyPrerenderContentsDestroyed(-1, route_id_); | 290 test_prerender_manager_->DummyPrerenderContentsDestroyed(-1, route_id_); |
| 291 } | 291 } |
| 292 | 292 |
| 293 void DummyPrerenderContents::StartPrerendering( | 293 void DummyPrerenderContents::StartPrerendering( |
| 294 const gfx::Size& size, | 294 const gfx::Rect& bounds, |
| 295 content::SessionStorageNamespace* session_storage_namespace) { | 295 content::SessionStorageNamespace* session_storage_namespace) { |
| 296 // In the base PrerenderContents implementation, StartPrerendering will | 296 // In the base PrerenderContents implementation, StartPrerendering will |
| 297 // be called even when the PrerenderManager is part of the control group, | 297 // be called even when the PrerenderManager is part of the control group, |
| 298 // but it will early exit before actually creating a new RenderView if | 298 // but it will early exit before actually creating a new RenderView if |
| 299 // |is_control_group| is true; | 299 // |is_control_group| is true; |
| 300 load_start_time_ = test_prerender_manager_->GetCurrentTimeTicks(); | 300 load_start_time_ = test_prerender_manager_->GetCurrentTimeTicks(); |
| 301 if (!test_prerender_manager_->IsControlGroup()) { | 301 if (!test_prerender_manager_->IsControlGroup()) { |
| 302 prerendering_has_started_ = true; | 302 prerendering_has_started_ = true; |
| 303 test_prerender_manager_->DummyPrerenderContentsStarted(-1, route_id_, this); | 303 test_prerender_manager_->DummyPrerenderContentsStarted(-1, route_id_, this); |
| 304 NotifyPrerenderStart(); | 304 NotifyPrerenderStart(); |
| (...skipping 786 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1091 EXPECT_TRUE(net::NetworkChangeNotifier::IsConnectionCellular( | 1091 EXPECT_TRUE(net::NetworkChangeNotifier::IsConnectionCellular( |
| 1092 net::NetworkChangeNotifier::GetConnectionType())); | 1092 net::NetworkChangeNotifier::GetConnectionType())); |
| 1093 GURL url("http://www.google.com/"); | 1093 GURL url("http://www.google.com/"); |
| 1094 DummyPrerenderContents* prerender_contents = | 1094 DummyPrerenderContents* prerender_contents = |
| 1095 prerender_manager()->CreateNextPrerenderContents( | 1095 prerender_manager()->CreateNextPrerenderContents( |
| 1096 url, | 1096 url, |
| 1097 ORIGIN_EXTERNAL_REQUEST, | 1097 ORIGIN_EXTERNAL_REQUEST, |
| 1098 FINAL_STATUS_MANAGER_SHUTDOWN); | 1098 FINAL_STATUS_MANAGER_SHUTDOWN); |
| 1099 std::unique_ptr<PrerenderHandle> prerender_handle( | 1099 std::unique_ptr<PrerenderHandle> prerender_handle( |
| 1100 prerender_manager()->AddPrerenderFromExternalRequest( | 1100 prerender_manager()->AddPrerenderFromExternalRequest( |
| 1101 url, content::Referrer(), nullptr, kSize)); | 1101 url, content::Referrer(), nullptr, gfx::Rect(kSize))); |
| 1102 EXPECT_FALSE(prerender_handle); | 1102 EXPECT_FALSE(prerender_handle); |
| 1103 EXPECT_FALSE(prerender_contents->prerendering_has_started()); | 1103 EXPECT_FALSE(prerender_contents->prerendering_has_started()); |
| 1104 } | 1104 } |
| 1105 | 1105 |
| 1106 TEST_F(PrerenderTest, PrerenderAllowedForOfflineAndForcedCellular) { | 1106 TEST_F(PrerenderTest, PrerenderAllowedForOfflineAndForcedCellular) { |
| 1107 const Origin origins[] = { | 1107 const Origin origins[] = { |
| 1108 ORIGIN_EXTERNAL_REQUEST_FORCED_CELLULAR, | 1108 ORIGIN_EXTERNAL_REQUEST_FORCED_CELLULAR, |
| 1109 ORIGIN_OFFLINE, | 1109 ORIGIN_OFFLINE, |
| 1110 }; | 1110 }; |
| 1111 | 1111 |
| 1112 EnablePrerender(); | 1112 EnablePrerender(); |
| 1113 std::unique_ptr<net::NetworkChangeNotifier> mock( | 1113 std::unique_ptr<net::NetworkChangeNotifier> mock( |
| 1114 new MockNetworkChangeNotifier4G); | 1114 new MockNetworkChangeNotifier4G); |
| 1115 EXPECT_TRUE(net::NetworkChangeNotifier::IsConnectionCellular( | 1115 EXPECT_TRUE(net::NetworkChangeNotifier::IsConnectionCellular( |
| 1116 net::NetworkChangeNotifier::GetConnectionType())); | 1116 net::NetworkChangeNotifier::GetConnectionType())); |
| 1117 GURL url("http://www.google.com/"); | 1117 GURL url("http://www.google.com/"); |
| 1118 for (const Origin& origin : origins) { | 1118 for (const Origin& origin : origins) { |
| 1119 DummyPrerenderContents* prerender_contents = nullptr; | 1119 DummyPrerenderContents* prerender_contents = nullptr; |
| 1120 std::unique_ptr<PrerenderHandle> prerender_handle; | 1120 std::unique_ptr<PrerenderHandle> prerender_handle; |
| 1121 if (origin == ORIGIN_OFFLINE) { | 1121 if (origin == ORIGIN_OFFLINE) { |
| 1122 prerender_contents = prerender_manager()->CreateNextPrerenderContents( | 1122 prerender_contents = prerender_manager()->CreateNextPrerenderContents( |
| 1123 url, origin, FINAL_STATUS_MANAGER_SHUTDOWN); | 1123 url, origin, FINAL_STATUS_MANAGER_SHUTDOWN); |
| 1124 prerender_handle = | 1124 prerender_handle = |
| 1125 prerender_manager()->AddPrerenderForOffline(url, nullptr, kSize); | 1125 prerender_manager()->AddPrerenderForOffline(url, nullptr, kSize); |
| 1126 } else { | 1126 } else { |
| 1127 prerender_contents = prerender_manager()->CreateNextPrerenderContents( | 1127 prerender_contents = prerender_manager()->CreateNextPrerenderContents( |
| 1128 url, origin, FINAL_STATUS_USED); | 1128 url, origin, FINAL_STATUS_USED); |
| 1129 prerender_handle = | 1129 prerender_handle = |
| 1130 prerender_manager()->AddPrerenderOnCellularFromExternalRequest( | 1130 prerender_manager()->AddPrerenderOnCellularFromExternalRequest( |
| 1131 url, content::Referrer(), nullptr, kSize); | 1131 url, content::Referrer(), nullptr, gfx::Rect(kSize)); |
| 1132 } | 1132 } |
| 1133 EXPECT_TRUE(prerender_handle); | 1133 EXPECT_TRUE(prerender_handle); |
| 1134 EXPECT_TRUE(prerender_handle->IsPrerendering()); | 1134 EXPECT_TRUE(prerender_handle->IsPrerendering()); |
| 1135 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 1135 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 1136 EXPECT_EQ(prerender_contents, prerender_handle->contents()); | 1136 EXPECT_EQ(prerender_contents, prerender_handle->contents()); |
| 1137 EXPECT_EQ(origin, prerender_handle->contents()->origin()); | 1137 EXPECT_EQ(origin, prerender_handle->contents()->origin()); |
| 1138 if (origin != ORIGIN_OFFLINE) { | 1138 if (origin != ORIGIN_OFFLINE) { |
| 1139 std::unique_ptr<PrerenderContents> entry = | 1139 std::unique_ptr<PrerenderContents> entry = |
| 1140 prerender_manager()->FindAndUseEntry(url); | 1140 prerender_manager()->FindAndUseEntry(url); |
| 1141 ASSERT_EQ(prerender_contents, entry.get()); | 1141 ASSERT_EQ(prerender_contents, entry.get()); |
| (...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1660 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 1660 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 1661 EXPECT_EQ(prerender_contents, prerender_handle->contents()); | 1661 EXPECT_EQ(prerender_contents, prerender_handle->contents()); |
| 1662 EXPECT_EQ(ORIGIN_INSTANT, prerender_handle->contents()->origin()); | 1662 EXPECT_EQ(ORIGIN_INSTANT, prerender_handle->contents()->origin()); |
| 1663 std::unique_ptr<PrerenderContents> entry = | 1663 std::unique_ptr<PrerenderContents> entry = |
| 1664 prerender_manager()->FindAndUseEntry(url); | 1664 prerender_manager()->FindAndUseEntry(url); |
| 1665 ASSERT_EQ(prerender_contents, entry.get()); | 1665 ASSERT_EQ(prerender_contents, entry.get()); |
| 1666 EXPECT_FALSE(prerender_handle->IsPrerendering()); | 1666 EXPECT_FALSE(prerender_handle->IsPrerendering()); |
| 1667 } | 1667 } |
| 1668 | 1668 |
| 1669 } // namespace prerender | 1669 } // namespace prerender |
| OLD | NEW |