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 |