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

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

Issue 146983002: Move pending prerender logic into PrerenderLinkManager. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 6 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « chrome/browser/prerender/prerender_tracker_unittest.cc ('k') | 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 (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 <map>
6 #include <utility>
7
5 #include "base/command_line.h" 8 #include "base/command_line.h"
6 #include "base/format_macros.h" 9 #include "base/format_macros.h"
7 #include "base/memory/scoped_vector.h" 10 #include "base/memory/scoped_vector.h"
8 #include "base/message_loop/message_loop.h" 11 #include "base/message_loop/message_loop.h"
9 #include "base/metrics/field_trial.h" 12 #include "base/metrics/field_trial.h"
10 #include "base/strings/stringprintf.h" 13 #include "base/strings/stringprintf.h"
11 #include "base/time/time.h" 14 #include "base/time/time.h"
12 #include "chrome/browser/prerender/prerender_contents.h" 15 #include "chrome/browser/prerender/prerender_contents.h"
13 #include "chrome/browser/prerender/prerender_handle.h" 16 #include "chrome/browser/prerender/prerender_handle.h"
14 #include "chrome/browser/prerender/prerender_link_manager.h" 17 #include "chrome/browser/prerender/prerender_link_manager.h"
(...skipping 21 matching lines...) Expand all
36 namespace { 39 namespace {
37 40
38 class DummyPrerenderContents : public PrerenderContents { 41 class DummyPrerenderContents : public PrerenderContents {
39 public: 42 public:
40 DummyPrerenderContents(UnitTestPrerenderManager* test_prerender_manager, 43 DummyPrerenderContents(UnitTestPrerenderManager* test_prerender_manager,
41 PrerenderTracker* prerender_tracker, 44 PrerenderTracker* prerender_tracker,
42 const GURL& url, 45 const GURL& url,
43 Origin origin, 46 Origin origin,
44 FinalStatus expected_final_status); 47 FinalStatus expected_final_status);
45 48
46 virtual ~DummyPrerenderContents() { 49 virtual ~DummyPrerenderContents();
47 EXPECT_EQ(expected_final_status_, final_status());
48 }
49 50
50 virtual void StartPrerendering( 51 virtual void StartPrerendering(
51 int ALLOW_UNUSED creator_child_id, 52 int ALLOW_UNUSED creator_child_id,
52 const gfx::Size& ALLOW_UNUSED size, 53 const gfx::Size& ALLOW_UNUSED size,
53 content::SessionStorageNamespace* ALLOW_UNUSED session_storage_namespace) 54 content::SessionStorageNamespace* ALLOW_UNUSED session_storage_namespace)
54 OVERRIDE; 55 OVERRIDE;
55 56
56 virtual bool GetChildId(int* child_id) const OVERRIDE { 57 virtual bool GetChildId(int* child_id) const OVERRIDE {
57 // Having a default child_id of -1 forces pending prerenders not to fail 58 // Having a default child_id of -1 forces pending prerenders not to fail
58 // on session storage and cross domain checking. 59 // on session storage and cross domain checking.
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 PrerenderContents* FindAndUseEntry(const GURL& url) { 129 PrerenderContents* FindAndUseEntry(const GURL& url) {
129 PrerenderData* prerender_data = FindPrerenderData(url, NULL); 130 PrerenderData* prerender_data = FindPrerenderData(url, NULL);
130 if (!prerender_data) 131 if (!prerender_data)
131 return NULL; 132 return NULL;
132 ScopedVector<PrerenderData>::iterator to_erase = 133 ScopedVector<PrerenderData>::iterator to_erase =
133 FindIteratorForPrerenderContents(prerender_data->contents()); 134 FindIteratorForPrerenderContents(prerender_data->contents());
134 CHECK(to_erase != active_prerenders_.end()); 135 CHECK(to_erase != active_prerenders_.end());
135 PrerenderContents* prerender_contents = prerender_data->ReleaseContents(); 136 PrerenderContents* prerender_contents = prerender_data->ReleaseContents();
136 active_prerenders_.erase(to_erase); 137 active_prerenders_.erase(to_erase);
137 138
138 prerender_contents->SetFinalStatus(FINAL_STATUS_USED);
139 prerender_contents->PrepareForUse(); 139 prerender_contents->PrepareForUse();
140 return prerender_contents; 140 return prerender_contents;
141 } 141 }
142 142
143 void AdvanceTime(TimeDelta delta) { 143 void AdvanceTime(TimeDelta delta) {
144 time_ += delta; 144 time_ += delta;
145 } 145 }
146 146
147 void AdvanceTimeTicks(TimeDelta delta) { 147 void AdvanceTimeTicks(TimeDelta delta) {
148 time_ticks_ += delta; 148 time_ticks_ += delta;
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 197
198 // from PrerenderManager 198 // from PrerenderManager
199 virtual Time GetCurrentTime() const OVERRIDE { 199 virtual Time GetCurrentTime() const OVERRIDE {
200 return time_; 200 return time_;
201 } 201 }
202 202
203 virtual TimeTicks GetCurrentTimeTicks() const OVERRIDE { 203 virtual TimeTicks GetCurrentTimeTicks() const OVERRIDE {
204 return time_ticks_; 204 return time_ticks_;
205 } 205 }
206 206
207 virtual PrerenderContents* GetPrerenderContentsForRoute(
208 int child_id, int route_id) const OVERRIDE {
209 // Overridden for the PrerenderLinkManager's pending prerender logic.
210 PrerenderContentsMap::const_iterator iter = prerender_contents_map_.find(
211 std::make_pair(child_id, route_id));
212 if (iter == prerender_contents_map_.end())
213 return NULL;
214 return iter->second;
215 }
216
217 void DummyPrerenderContentsStarted(int child_id,
218 int route_id,
219 PrerenderContents* prerender_contents) {
220 prerender_contents_map_[std::make_pair(child_id, route_id)] =
221 prerender_contents;
222 }
223
224 void DummyPrerenderContentsDestroyed(int child_id,
225 int route_id) {
226 prerender_contents_map_.erase(std::make_pair(child_id, route_id));
227 }
228
207 private: 229 private:
208 void SetNextPrerenderContents(DummyPrerenderContents* prerender_contents) { 230 void SetNextPrerenderContents(DummyPrerenderContents* prerender_contents) {
209 CHECK(!next_prerender_contents_.get()); 231 CHECK(!next_prerender_contents_.get());
210 next_prerender_contents_.reset(prerender_contents); 232 next_prerender_contents_.reset(prerender_contents);
211 if (prerender_contents->expected_final_status() == FINAL_STATUS_USED) 233 if (prerender_contents->expected_final_status() == FINAL_STATUS_USED)
212 used_prerender_contents_.push_back(prerender_contents); 234 used_prerender_contents_.push_back(prerender_contents);
213 } 235 }
214 236
215 237
216 virtual PrerenderContents* CreatePrerenderContents( 238 virtual PrerenderContents* CreatePrerenderContents(
217 const GURL& url, 239 const GURL& url,
218 const Referrer& referrer, 240 const Referrer& referrer,
219 Origin origin, 241 Origin origin,
220 uint8 experiment_id) OVERRIDE { 242 uint8 experiment_id) OVERRIDE {
221 CHECK(next_prerender_contents_.get()); 243 CHECK(next_prerender_contents_.get());
222 EXPECT_EQ(url, next_prerender_contents_->prerender_url()); 244 EXPECT_EQ(url, next_prerender_contents_->prerender_url());
223 EXPECT_EQ(origin, next_prerender_contents_->origin()); 245 EXPECT_EQ(origin, next_prerender_contents_->origin());
224 return next_prerender_contents_.release(); 246 return next_prerender_contents_.release();
225 } 247 }
226 248
249 // Maintain a map from route pairs to PrerenderContents for
250 // GetPrerenderContentsForRoute.
251 typedef std::map<std::pair<int,int>, PrerenderContents*> PrerenderContentsMap;
252 PrerenderContentsMap prerender_contents_map_;
253
227 Time time_; 254 Time time_;
228 TimeTicks time_ticks_; 255 TimeTicks time_ticks_;
229 scoped_ptr<PrerenderContents> next_prerender_contents_; 256 scoped_ptr<PrerenderContents> next_prerender_contents_;
230 // PrerenderContents with an |expected_final_status| of FINAL_STATUS_USED, 257 // PrerenderContents with an |expected_final_status| of FINAL_STATUS_USED,
231 // tracked so they will be automatically deleted. 258 // tracked so they will be automatically deleted.
232 ScopedVector<PrerenderContents> used_prerender_contents_; 259 ScopedVector<PrerenderContents> used_prerender_contents_;
233 260
234 PrerenderTracker* prerender_tracker_; 261 PrerenderTracker* prerender_tracker_;
235 }; 262 };
236 263
(...skipping 14 matching lines...) Expand all
251 Origin origin, 278 Origin origin,
252 FinalStatus expected_final_status) 279 FinalStatus expected_final_status)
253 : PrerenderContents(test_prerender_manager, 280 : PrerenderContents(test_prerender_manager,
254 NULL, url, Referrer(), origin, 281 NULL, url, Referrer(), origin,
255 PrerenderManager::kNoExperiment), 282 PrerenderManager::kNoExperiment),
256 route_id_(g_next_route_id_++), 283 route_id_(g_next_route_id_++),
257 test_prerender_manager_(test_prerender_manager), 284 test_prerender_manager_(test_prerender_manager),
258 expected_final_status_(expected_final_status) { 285 expected_final_status_(expected_final_status) {
259 } 286 }
260 287
288 DummyPrerenderContents::~DummyPrerenderContents() {
289 EXPECT_EQ(expected_final_status_, final_status());
290 test_prerender_manager_->DummyPrerenderContentsDestroyed(-1, route_id_);
291 }
292
261 void DummyPrerenderContents::StartPrerendering( 293 void DummyPrerenderContents::StartPrerendering(
262 int ALLOW_UNUSED creator_child_id, 294 int ALLOW_UNUSED creator_child_id,
263 const gfx::Size& ALLOW_UNUSED size, 295 const gfx::Size& ALLOW_UNUSED size,
264 content::SessionStorageNamespace* ALLOW_UNUSED session_storage_namespace) { 296 content::SessionStorageNamespace* ALLOW_UNUSED session_storage_namespace) {
265 // In the base PrerenderContents implementation, StartPrerendering will 297 // In the base PrerenderContents implementation, StartPrerendering will
266 // be called even when the PrerenderManager is part of the control group, 298 // be called even when the PrerenderManager is part of the control group,
267 // but it will early exit before actually creating a new RenderView if 299 // but it will early exit before actually creating a new RenderView if
268 // |is_control_group| is true; 300 // |is_control_group| is true;
269 load_start_time_ = test_prerender_manager_->GetCurrentTimeTicks(); 301 load_start_time_ = test_prerender_manager_->GetCurrentTimeTicks();
270 if (!test_prerender_manager_->IsControlGroup(experiment_id())) { 302 if (!test_prerender_manager_->IsControlGroup(experiment_id())) {
271 prerendering_has_started_ = true; 303 prerendering_has_started_ = true;
304 test_prerender_manager_->DummyPrerenderContentsStarted(-1, route_id_, this);
272 NotifyPrerenderStart(); 305 NotifyPrerenderStart();
273 } 306 }
274 } 307 }
275 308
276 class PrerenderTest : public testing::Test { 309 class PrerenderTest : public testing::Test {
277 public: 310 public:
278 static const int kDefaultChildId = -1; 311 static const int kDefaultChildId = -1;
279 static const int kDefaultRenderViewRouteId = -1; 312 static const int kDefaultRenderViewRouteId = -1;
280 313
281 PrerenderTest() : ui_thread_(BrowserThread::UI, &message_loop_), 314 PrerenderTest() : ui_thread_(BrowserThread::UI, &message_loop_),
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 return ++last_prerender_id_; 358 return ++last_prerender_id_;
326 } 359 }
327 360
328 bool LauncherHasRunningPrerender(int child_id, int prerender_id) { 361 bool LauncherHasRunningPrerender(int child_id, int prerender_id) {
329 PrerenderLinkManager::LinkPrerender* prerender = 362 PrerenderLinkManager::LinkPrerender* prerender =
330 prerender_link_manager()->FindByLauncherChildIdAndPrerenderId( 363 prerender_link_manager()->FindByLauncherChildIdAndPrerenderId(
331 child_id, prerender_id); 364 child_id, prerender_id);
332 return prerender && prerender->handle; 365 return prerender && prerender->handle;
333 } 366 }
334 367
368 bool LauncherHasScheduledPrerender(int child_id, int prerender_id) {
369 PrerenderLinkManager::LinkPrerender* prerender =
370 prerender_link_manager()->FindByLauncherChildIdAndPrerenderId(
371 child_id, prerender_id);
372 return prerender != NULL;
373 }
374
335 // Shorthand to add a simple prerender with a reasonable source. Returns 375 // Shorthand to add a simple prerender with a reasonable source. Returns
336 // true iff the prerender has been added to the PrerenderManager by the 376 // true iff the prerender has been added to the PrerenderManager by the
337 // PrerenderLinkManager and the PrerenderManager returned a handle. 377 // PrerenderLinkManager and the PrerenderManager returned a handle.
338 bool AddSimplePrerender(const GURL& url) { 378 bool AddSimplePrerender(const GURL& url) {
339 prerender_link_manager()->OnAddPrerender(kDefaultChildId, 379 prerender_link_manager()->OnAddPrerender(kDefaultChildId,
340 GetNextPrerenderID(), 380 GetNextPrerenderID(),
341 url, content::Referrer(), 381 url, content::Referrer(),
342 kSize, kDefaultRenderViewRouteId); 382 kSize, kDefaultRenderViewRouteId);
343 return LauncherHasRunningPrerender(kDefaultChildId, last_prerender_id()); 383 return LauncherHasRunningPrerender(kDefaultChildId, last_prerender_id());
344 } 384 }
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
580 prerender_manager()->CreateNextPrerenderContents(urls.back(), 620 prerender_manager()->CreateNextPrerenderContents(urls.back(),
581 FINAL_STATUS_USED)); 621 FINAL_STATUS_USED));
582 EXPECT_TRUE(AddSimplePrerender(urls.back())); 622 EXPECT_TRUE(AddSimplePrerender(urls.back()));
583 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); 623 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
584 EXPECT_TRUE(prerender_contentses.back()->prerendering_has_started()); 624 EXPECT_TRUE(prerender_contentses.back()->prerendering_has_started());
585 } 625 }
586 626
587 if (concurrencies_to_test[i].max_link_concurrency > 627 if (concurrencies_to_test[i].max_link_concurrency >
588 effective_max_link_concurrency) { 628 effective_max_link_concurrency) {
589 // We should be able to launch more prerenders on this system, but not for 629 // We should be able to launch more prerenders on this system, but not for
590 // our current launcher. 630 // the default launcher.
591 int child_id;
592 int route_id;
593 ASSERT_TRUE(prerender_contentses.back()->GetChildId(&child_id));
594 ASSERT_TRUE(prerender_contentses.back()->GetRouteId(&route_id));
595
596 GURL extra_url("http://google.com/extraurl"); 631 GURL extra_url("http://google.com/extraurl");
597 prerender_link_manager()->OnAddPrerender(child_id, 632 EXPECT_FALSE(AddSimplePrerender(extra_url));
598 GetNextPrerenderID(),
599 extra_url, content::Referrer(),
600 kSize, route_id);
601 const int prerender_id = last_prerender_id(); 633 const int prerender_id = last_prerender_id();
602 EXPECT_TRUE(LauncherHasRunningPrerender(child_id, prerender_id)); 634 EXPECT_TRUE(LauncherHasScheduledPrerender(kDefaultChildId,
603 prerender_link_manager()->OnCancelPrerender(child_id, prerender_id); 635 prerender_id));
604 EXPECT_FALSE(LauncherHasRunningPrerender(child_id, prerender_id)); 636 prerender_link_manager()->OnCancelPrerender(kDefaultChildId,
637 prerender_id);
638 EXPECT_FALSE(LauncherHasScheduledPrerender(kDefaultChildId,
639 prerender_id));
605 } 640 }
606 641
607 DummyPrerenderContents* prerender_contents_to_delay = 642 DummyPrerenderContents* prerender_contents_to_delay =
608 prerender_manager()->CreateNextPrerenderContents(url_to_delay, 643 prerender_manager()->CreateNextPrerenderContents(url_to_delay,
609 FINAL_STATUS_USED); 644 FINAL_STATUS_USED);
610 EXPECT_FALSE(AddSimplePrerender(url_to_delay)); 645 EXPECT_FALSE(AddSimplePrerender(url_to_delay));
611 EXPECT_FALSE(prerender_contents_to_delay->prerendering_has_started()); 646 EXPECT_FALSE(prerender_contents_to_delay->prerendering_has_started());
612 EXPECT_NE(null, prerender_manager()->next_prerender_contents()); 647 EXPECT_NE(null, prerender_manager()->next_prerender_contents());
613 EXPECT_EQ(null, prerender_manager()->FindEntry(url_to_delay)); 648 EXPECT_EQ(null, prerender_manager()->FindEntry(url_to_delay));
614 for (size_t j = 0; j < effective_max_link_concurrency; ++j) { 649 for (size_t j = 0; j < effective_max_link_concurrency; ++j) {
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
670 FINAL_STATUS_USED); 705 FINAL_STATUS_USED);
671 EXPECT_TRUE(AddSimplePrerender(url)); 706 EXPECT_TRUE(AddSimplePrerender(url));
672 707
673 int child_id; 708 int child_id;
674 int route_id; 709 int route_id;
675 ASSERT_TRUE(prerender_contents->GetChildId(&child_id)); 710 ASSERT_TRUE(prerender_contents->GetChildId(&child_id));
676 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id)); 711 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id));
677 712
678 GURL pending_url("http://news.google.com/"); 713 GURL pending_url("http://news.google.com/");
679 714
715 // Schedule a pending prerender launched from the prerender.
680 DummyPrerenderContents* pending_prerender_contents = 716 DummyPrerenderContents* pending_prerender_contents =
681 prerender_manager()->CreateNextPrerenderContents( 717 prerender_manager()->CreateNextPrerenderContents(
682 pending_url, 718 pending_url,
683 ORIGIN_GWS_PRERENDER, 719 ORIGIN_GWS_PRERENDER,
684 FINAL_STATUS_USED); 720 FINAL_STATUS_USED);
685 scoped_ptr<PrerenderHandle> pending_prerender_handle( 721 prerender_link_manager()->OnAddPrerender(
686 prerender_manager()->AddPrerenderFromLinkRelPrerender( 722 child_id, GetNextPrerenderID(), pending_url,
687 child_id, route_id, pending_url, 723 Referrer(url, blink::WebReferrerPolicyDefault),
688 Referrer(url, blink::WebReferrerPolicyDefault), kSize)); 724 kSize, route_id);
689 CHECK(pending_prerender_handle.get()); 725 EXPECT_FALSE(LauncherHasRunningPrerender(child_id, last_prerender_id()));
690 EXPECT_FALSE(pending_prerender_handle->IsPrerendering()); 726 EXPECT_FALSE(pending_prerender_contents->prerendering_has_started());
691 727
728 // Use the referring prerender.
692 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 729 EXPECT_TRUE(prerender_contents->prerendering_has_started());
693 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); 730 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
694 731
695 EXPECT_TRUE(pending_prerender_handle->IsPrerendering()); 732 // The pending prerender should start now.
733 EXPECT_TRUE(LauncherHasRunningPrerender(child_id, last_prerender_id()));
734 EXPECT_TRUE(pending_prerender_contents->prerendering_has_started());
696 ASSERT_EQ(pending_prerender_contents, 735 ASSERT_EQ(pending_prerender_contents,
697 prerender_manager()->FindAndUseEntry(pending_url)); 736 prerender_manager()->FindAndUseEntry(pending_url));
698 EXPECT_FALSE(pending_prerender_handle->IsPrerendering());
699 } 737 }
700 738
701 TEST_F(PrerenderTest, InvalidPendingPrerenderTest) { 739 TEST_F(PrerenderTest, InvalidPendingPrerenderTest) {
702 GURL url("http://www.google.com/"); 740 GURL url("http://www.google.com/");
703 DummyPrerenderContents* prerender_contents = 741 DummyPrerenderContents* prerender_contents =
704 prerender_manager()->CreateNextPrerenderContents( 742 prerender_manager()->CreateNextPrerenderContents(
705 url, 743 url,
706 FINAL_STATUS_USED); 744 FINAL_STATUS_USED);
707 EXPECT_TRUE(AddSimplePrerender(url)); 745 EXPECT_TRUE(AddSimplePrerender(url));
708 746
709 int child_id; 747 int child_id;
710 int route_id; 748 int route_id;
711 ASSERT_TRUE(prerender_contents->GetChildId(&child_id)); 749 ASSERT_TRUE(prerender_contents->GetChildId(&child_id));
712 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id)); 750 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id));
713 751
714 // This pending URL has an unsupported scheme, and won't be able 752 // This pending URL has an unsupported scheme, and won't be able
715 // to start. 753 // to start.
716 GURL pending_url("ftp://news.google.com/"); 754 GURL pending_url("ftp://news.google.com/");
717 755
718 prerender_manager()->CreateNextPrerenderContents( 756 // Schedule a pending prerender launched from the prerender.
719 pending_url, 757 DummyPrerenderContents* pending_prerender_contents =
720 ORIGIN_GWS_PRERENDER, 758 prerender_manager()->CreateNextPrerenderContents(
721 FINAL_STATUS_UNSUPPORTED_SCHEME); 759 pending_url,
722 scoped_ptr<PrerenderHandle> pending_prerender_handle( 760 ORIGIN_GWS_PRERENDER,
723 prerender_manager()->AddPrerenderFromLinkRelPrerender( 761 FINAL_STATUS_UNSUPPORTED_SCHEME);
724 child_id, route_id, pending_url, 762 prerender_link_manager()->OnAddPrerender(
725 Referrer(url, blink::WebReferrerPolicyDefault), kSize)); 763 child_id, GetNextPrerenderID(), pending_url,
726 DCHECK(pending_prerender_handle.get()); 764 Referrer(url, blink::WebReferrerPolicyDefault),
727 EXPECT_FALSE(pending_prerender_handle->IsPrerendering()); 765 kSize, route_id);
766 EXPECT_FALSE(LauncherHasRunningPrerender(child_id, last_prerender_id()));
767 EXPECT_FALSE(pending_prerender_contents->prerendering_has_started());
728 768
769 // Use the referring prerender.
729 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 770 EXPECT_TRUE(prerender_contents->prerendering_has_started());
730 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); 771 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
731 772
732 EXPECT_FALSE(pending_prerender_handle->IsPrerendering()); 773 // The pending prerender still doesn't start.
774 EXPECT_FALSE(LauncherHasRunningPrerender(child_id, last_prerender_id()));
775 EXPECT_FALSE(pending_prerender_contents->prerendering_has_started());
733 } 776 }
734 777
735 TEST_F(PrerenderTest, CancelPendingPrerenderTest) { 778 TEST_F(PrerenderTest, CancelPendingPrerenderTest) {
736 GURL url("http://www.google.com/"); 779 GURL url("http://www.google.com/");
737 DummyPrerenderContents* prerender_contents = 780 DummyPrerenderContents* prerender_contents =
738 prerender_manager()->CreateNextPrerenderContents( 781 prerender_manager()->CreateNextPrerenderContents(
739 url, 782 url,
740 FINAL_STATUS_USED); 783 FINAL_STATUS_USED);
741 EXPECT_TRUE(AddSimplePrerender(url)); 784 EXPECT_TRUE(AddSimplePrerender(url));
742 785
743 int child_id; 786 int child_id;
744 int route_id; 787 int route_id;
745 ASSERT_TRUE(prerender_contents->GetChildId(&child_id)); 788 ASSERT_TRUE(prerender_contents->GetChildId(&child_id));
746 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id)); 789 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id));
747 790
748 GURL pending_url("http://news.google.com/"); 791 GURL pending_url("http://news.google.com/");
749 792
750 scoped_ptr<PrerenderHandle> pending_prerender_handle( 793 // Schedule a pending prerender launched from the prerender.
751 prerender_manager()->AddPrerenderFromLinkRelPrerender( 794 prerender_link_manager()->OnAddPrerender(
752 child_id, route_id, pending_url, 795 child_id, GetNextPrerenderID(), pending_url,
753 Referrer(url, blink::WebReferrerPolicyDefault), kSize)); 796 Referrer(url, blink::WebReferrerPolicyDefault),
754 CHECK(pending_prerender_handle.get()); 797 kSize, route_id);
755 EXPECT_FALSE(pending_prerender_handle->IsPrerendering()); 798 EXPECT_FALSE(LauncherHasRunningPrerender(child_id, last_prerender_id()));
756 799
800 // Cancel the pending prerender.
801 prerender_link_manager()->OnCancelPrerender(child_id, last_prerender_id());
802
803 // Use the referring prerender.
757 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 804 EXPECT_TRUE(prerender_contents->prerendering_has_started());
805 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
758 806
759 pending_prerender_handle.reset(); 807 // The pending prerender doesn't start.
760 808 EXPECT_FALSE(LauncherHasRunningPrerender(child_id, last_prerender_id()));
761 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
762 } 809 }
763 810
764 // Tests that a PrerenderManager created for a browser session in the control 811 // Tests that a PrerenderManager created for a browser session in the control
765 // group works as expected. 812 // group works as expected.
766 TEST_F(PrerenderTest, ControlGroup) { 813 TEST_F(PrerenderTest, ControlGroup) {
767 RestorePrerenderMode restore_prerender_mode; 814 RestorePrerenderMode restore_prerender_mode;
768 PrerenderManager::SetMode( 815 PrerenderManager::SetMode(
769 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP); 816 PrerenderManager::PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP);
770 GURL url("http://www.google.com/"); 817 GURL url("http://www.google.com/");
771 DummyPrerenderContents* prerender_contents = 818 DummyPrerenderContents* prerender_contents =
(...skipping 705 matching lines...) Expand 10 before | Expand all | Expand 10 after
1477 CHECK(prerender_handle.get()); 1524 CHECK(prerender_handle.get());
1478 EXPECT_TRUE(prerender_handle->IsPrerendering()); 1525 EXPECT_TRUE(prerender_handle->IsPrerendering());
1479 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 1526 EXPECT_TRUE(prerender_contents->prerendering_has_started());
1480 EXPECT_EQ(prerender_contents, prerender_handle->contents()); 1527 EXPECT_EQ(prerender_contents, prerender_handle->contents());
1481 EXPECT_EQ(ORIGIN_INSTANT, prerender_handle->contents()->origin()); 1528 EXPECT_EQ(ORIGIN_INSTANT, prerender_handle->contents()->origin());
1482 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); 1529 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
1483 EXPECT_FALSE(prerender_handle->IsPrerendering()); 1530 EXPECT_FALSE(prerender_handle->IsPrerendering());
1484 } 1531 }
1485 1532
1486 } // namespace prerender 1533 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_tracker_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698