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

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

Issue 6685012: Give prerendering RVH's RenderWidgetHostViews. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Comment typos fixed Created 9 years, 8 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "base/time.h" 5 #include "base/time.h"
6 #include "chrome/browser/prerender/prerender_contents.h" 6 #include "chrome/browser/prerender/prerender_contents.h"
7 #include "chrome/browser/prerender/prerender_manager.h" 7 #include "chrome/browser/prerender/prerender_manager.h"
8 #include "content/browser/browser_thread.h" 8 #include "content/browser/browser_thread.h"
9 #include "content/browser/renderer_host/render_view_host.h" 9 #include "content/browser/renderer_host/render_view_host.h"
10 #include "content/browser/renderer_host/render_process_host.h" 10 #include "content/browser/renderer_host/render_process_host.h"
(...skipping 21 matching lines...) Expand all
32 FinalStatus expected_final_status) 32 FinalStatus expected_final_status)
33 : PrerenderContents(prerender_manager, NULL, url, alias_urls, GURL()), 33 : PrerenderContents(prerender_manager, NULL, url, alias_urls, GURL()),
34 has_started_(false), 34 has_started_(false),
35 expected_final_status_(expected_final_status) { 35 expected_final_status_(expected_final_status) {
36 } 36 }
37 37
38 virtual ~DummyPrerenderContents() { 38 virtual ~DummyPrerenderContents() {
39 EXPECT_EQ(expected_final_status_, final_status()); 39 EXPECT_EQ(expected_final_status_, final_status());
40 } 40 }
41 41
42 virtual void StartPrerendering() OVERRIDE { 42 virtual void StartPrerendering(
43 const RenderViewHost* source_render_view_host) OVERRIDE {
43 has_started_ = true; 44 has_started_ = true;
44 } 45 }
45 46
46 virtual bool GetChildId(int* child_id) const OVERRIDE { 47 virtual bool GetChildId(int* child_id) const OVERRIDE {
47 *child_id = 0; 48 *child_id = 0;
48 return true; 49 return true;
49 } 50 }
50 51
51 virtual bool GetRouteId(int* route_id) const OVERRIDE { 52 virtual bool GetRouteId(int* route_id) const OVERRIDE {
52 *route_id = 0; 53 *route_id = 0;
(...skipping 24 matching lines...) Expand all
77 void AdvanceTimeTicks(base::TimeDelta delta) { 78 void AdvanceTimeTicks(base::TimeDelta delta) {
78 time_ticks_ += delta; 79 time_ticks_ += delta;
79 } 80 }
80 81
81 void SetNextPrerenderContents(PrerenderContents* pc) { 82 void SetNextPrerenderContents(PrerenderContents* pc) {
82 next_pc_.reset(pc); 83 next_pc_.reset(pc);
83 } 84 }
84 85
85 // Shorthand to add a simple preload with no aliases. 86 // Shorthand to add a simple preload with no aliases.
86 bool AddSimplePreload(const GURL& url) { 87 bool AddSimplePreload(const GURL& url) {
87 return AddPreload(url, std::vector<GURL>(), GURL()); 88 return AddPreload(std::pair<int, int>(-1, -1), url, std::vector<GURL>(),
89 GURL());
88 } 90 }
89 91
90 bool IsPendingEntry(const GURL& url) { 92 bool IsPendingEntry(const GURL& url) {
91 return (PrerenderManager::FindPendingEntry(url) != NULL); 93 return (PrerenderManager::FindPendingEntry(url) != NULL);
92 } 94 }
93 95
94 void set_rate_limit_enabled(bool enabled) { rate_limit_enabled_ = true; } 96 void set_rate_limit_enabled(bool enabled) { rate_limit_enabled_ = true; }
95 97
98 // Shorthand to add a simple preload with aliases.
99 bool AddSimplePreloadWithAliases(const GURL& url,
100 const std::vector<GURL>& alias_urls) {
101 return AddPreload(std::pair<int, int>(-1, -1), url, alias_urls, GURL());
102 }
103
96 PrerenderContents* next_pc() { return next_pc_.get(); } 104 PrerenderContents* next_pc() { return next_pc_.get(); }
97 105
98 protected: 106 protected:
99 virtual ~TestPrerenderManager() { 107 virtual ~TestPrerenderManager() {
100 if (next_pc()) { 108 if (next_pc()) {
101 next_pc()->set_final_status( 109 next_pc()->set_final_status(
102 FINAL_STATUS_MANAGER_SHUTDOWN); 110 FINAL_STATUS_MANAGER_SHUTDOWN);
103 } 111 }
104 } 112 }
105 113
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 GURL alias_url2("http://google.com/"); 280 GURL alias_url2("http://google.com/");
273 GURL not_an_alias_url("http://google.com/index.html"); 281 GURL not_an_alias_url("http://google.com/index.html");
274 std::vector<GURL> alias_urls; 282 std::vector<GURL> alias_urls;
275 alias_urls.push_back(alias_url1); 283 alias_urls.push_back(alias_url1);
276 alias_urls.push_back(alias_url2); 284 alias_urls.push_back(alias_url2);
277 DummyPrerenderContents* pc = 285 DummyPrerenderContents* pc =
278 new DummyPrerenderContents(prerender_manager_.get(), url, alias_urls, 286 new DummyPrerenderContents(prerender_manager_.get(), url, alias_urls,
279 FINAL_STATUS_USED); 287 FINAL_STATUS_USED);
280 // Test that all of the aliases work, but nont_an_alias_url does not. 288 // Test that all of the aliases work, but nont_an_alias_url does not.
281 prerender_manager_->SetNextPrerenderContents(pc); 289 prerender_manager_->SetNextPrerenderContents(pc);
282 EXPECT_TRUE(prerender_manager_->AddPreload(url, alias_urls, GURL())); 290 EXPECT_TRUE(prerender_manager_->AddSimplePreloadWithAliases(url, alias_urls));
283 ASSERT_EQ(NULL, prerender_manager_->GetEntry(not_an_alias_url)); 291 ASSERT_EQ(NULL, prerender_manager_->GetEntry(not_an_alias_url));
284 ASSERT_EQ(pc, prerender_manager_->GetEntry(alias_url1)); 292 ASSERT_EQ(pc, prerender_manager_->GetEntry(alias_url1));
285 prerender_manager_->SetNextPrerenderContents(pc); 293 prerender_manager_->SetNextPrerenderContents(pc);
286 EXPECT_TRUE(prerender_manager_->AddPreload(url, alias_urls, GURL())); 294 EXPECT_TRUE(prerender_manager_->AddSimplePreloadWithAliases(url, alias_urls));
287 ASSERT_EQ(pc, prerender_manager_->GetEntry(alias_url2)); 295 ASSERT_EQ(pc, prerender_manager_->GetEntry(alias_url2));
288 prerender_manager_->SetNextPrerenderContents(pc); 296 prerender_manager_->SetNextPrerenderContents(pc);
289 EXPECT_TRUE(prerender_manager_->AddPreload(url, alias_urls, GURL())); 297 EXPECT_TRUE(prerender_manager_->AddSimplePreloadWithAliases(url, alias_urls));
290 ASSERT_EQ(pc, prerender_manager_->GetEntry(url)); 298 ASSERT_EQ(pc, prerender_manager_->GetEntry(url));
291 299
292 // Test that alias URLs can not be added. 300 // Test that alias URLs can not be added.
293 prerender_manager_->SetNextPrerenderContents(pc); 301 prerender_manager_->SetNextPrerenderContents(pc);
294 EXPECT_TRUE(prerender_manager_->AddPreload(url, alias_urls, GURL())); 302 EXPECT_TRUE(prerender_manager_->AddSimplePreloadWithAliases(url, alias_urls));
295 EXPECT_FALSE(prerender_manager_->AddSimplePreload(url)); 303 EXPECT_FALSE(prerender_manager_->AddSimplePreload(url));
296 EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url1)); 304 EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url1));
297 EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url2)); 305 EXPECT_FALSE(prerender_manager_->AddSimplePreload(alias_url2));
298 ASSERT_EQ(pc, prerender_manager_->GetEntry(url)); 306 ASSERT_EQ(pc, prerender_manager_->GetEntry(url));
299 307
300 pc->set_final_status(FINAL_STATUS_USED); 308 pc->set_final_status(FINAL_STATUS_USED);
301 delete pc; 309 delete pc;
302 } 310 }
303 311
304 // Ensure that we ignore prerender requests within the rate limit. 312 // Ensure that we ignore prerender requests within the rate limit.
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 EXPECT_FALSE(PrerenderManager::MaybeGetQueryStringBasedAliasURL( 427 EXPECT_FALSE(PrerenderManager::MaybeGetQueryStringBasedAliasURL(
420 GURL("http://www.google.com/url?sadf=test&blah=blahblahblah"), &result)); 428 GURL("http://www.google.com/url?sadf=test&blah=blahblahblah"), &result));
421 EXPECT_FALSE(PrerenderManager::MaybeGetQueryStringBasedAliasURL( 429 EXPECT_FALSE(PrerenderManager::MaybeGetQueryStringBasedAliasURL(
422 GURL("http://www.google.com/?url=INVALIDurlsAREsoMUCHfun.com"), &result)); 430 GURL("http://www.google.com/?url=INVALIDurlsAREsoMUCHfun.com"), &result));
423 EXPECT_TRUE(PrerenderManager::MaybeGetQueryStringBasedAliasURL( 431 EXPECT_TRUE(PrerenderManager::MaybeGetQueryStringBasedAliasURL(
424 GURL("http://www.google.com/?url=http://validURLSareGREAT.com"), 432 GURL("http://www.google.com/?url=http://validURLSareGREAT.com"),
425 &result)); 433 &result));
426 ASSERT_EQ(GURL("http://validURLSareGREAT.com").spec(), result.spec()); 434 ASSERT_EQ(GURL("http://validURLSareGREAT.com").spec(), result.spec());
427 } 435 }
428 436
437 // Ensure an entry with a |pending_final_status| is not returned.
438 TEST_F(PrerenderManagerTest, DropEntriesWithPendingFinalStatus) {
439 GURL url("http://www.google.com/");
440 DummyPrerenderContents* pc =
441 new DummyPrerenderContents(prerender_manager_.get(), url,
442 FINAL_STATUS_COMPOSITING);
443 DummyPrerenderContents* null = NULL;
444 prerender_manager_->SetNextPrerenderContents(pc);
445 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url));
446 EXPECT_EQ(null, prerender_manager_->next_pc());
447 EXPECT_TRUE(pc->has_started());
448 pc->set_pending_final_status(FINAL_STATUS_COMPOSITING);
449 ASSERT_EQ(null, prerender_manager_->GetEntry(url));
450 }
451
452 // Adds 2 entries, sets the |pending_final_status| of the second one, and checks
453 // that adding a third entry removes the second rather than the first.
454 TEST_F(PrerenderManagerTest, DropSecondEntryWithPendingFinalStatus) {
455 prerender_manager_->set_max_elements(2);
456 GURL url1("http://www.google.com/");
457 DummyPrerenderContents* pc1 =
458 new DummyPrerenderContents(prerender_manager_.get(), url1,
459 FINAL_STATUS_USED);
460 DummyPrerenderContents* null = NULL;
461 prerender_manager_->SetNextPrerenderContents(pc1);
462 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url1));
463 EXPECT_EQ(null, prerender_manager_->next_pc());
464 EXPECT_TRUE(pc1->has_started());
465 GURL url2("http://news.google.com/");
466 DummyPrerenderContents* pc2 =
467 new DummyPrerenderContents(prerender_manager_.get(), url1,
468 FINAL_STATUS_COMPOSITING);
469 prerender_manager_->SetNextPrerenderContents(pc2);
470 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url2));
471 EXPECT_EQ(null, prerender_manager_->next_pc());
472 EXPECT_TRUE(pc2->has_started());
473 pc2->set_pending_final_status(FINAL_STATUS_COMPOSITING);
474 GURL url3("http://images.google.com/");
475 DummyPrerenderContents* pc3 =
476 new DummyPrerenderContents(prerender_manager_.get(), url3,
477 FINAL_STATUS_USED);
478 prerender_manager_->SetNextPrerenderContents(pc3);
479 EXPECT_TRUE(prerender_manager_->AddSimplePreload(url3));
480 EXPECT_EQ(null, prerender_manager_->next_pc());
481 EXPECT_TRUE(pc2->has_started());
482 ASSERT_EQ(pc1, prerender_manager_->GetEntry(url1));
483 ASSERT_EQ(null, prerender_manager_->GetEntry(url2));
484 ASSERT_EQ(pc3, prerender_manager_->GetEntry(url3));
485 pc1->set_final_status(FINAL_STATUS_USED);
486 delete pc1;
Paweł Hajdan Jr. 2011/04/20 06:49:37 Could you switch the pointers to scoped_ptrs inste
mmenke 2011/04/20 15:15:19 Done. Reworked these tests slightly, to avoid sim
487 pc3->set_final_status(FINAL_STATUS_USED);
488 delete pc3;
489 }
490
491 // Tests that prerendering is cancelled when the source render view does not
492 // exist. On failure, the DCHECK in CreatePrerenderContents() above should be
493 // triggered.
494 TEST_F(PrerenderManagerTest, SourceRenderViewClosed) {
495 GURL url("http://www.google.com/");
496 EXPECT_FALSE(prerender_manager_->AddPreload(
497 std::pair<int, int>(100, 100), url, std::vector<GURL>(), GURL()));
498 }
499
429 } // namespace prerender 500 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_manager.cc ('k') | chrome/browser/prerender/prerender_render_widget_host_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698