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

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

Issue 12253035: Guard against duplicate adds in PrerenderLinkManager. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: fixity Created 7 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_link_manager.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 "base/command_line.h" 5 #include "base/command_line.h"
6 #include "base/format_macros.h" 6 #include "base/format_macros.h"
7 #include "base/memory/scoped_vector.h" 7 #include "base/memory/scoped_vector.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "base/stringprintf.h" 9 #include "base/stringprintf.h"
10 #include "base/time.h" 10 #include "base/time.h"
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 } 305 }
306 306
307 void SetConcurrency(size_t concurrency) { 307 void SetConcurrency(size_t concurrency) {
308 prerender_manager()->mutable_config().max_link_concurrency_per_launcher = 308 prerender_manager()->mutable_config().max_link_concurrency_per_launcher =
309 concurrency; 309 concurrency;
310 prerender_manager()->mutable_config().max_link_concurrency = 310 prerender_manager()->mutable_config().max_link_concurrency =
311 std::max(prerender_manager()->mutable_config().max_link_concurrency, 311 std::max(prerender_manager()->mutable_config().max_link_concurrency,
312 concurrency); 312 concurrency);
313 } 313 }
314 314
315 bool IsEmptyPrerenderLinkManager() { 315 bool IsEmptyPrerenderLinkManager() {
mmenke 2013/02/14 16:48:12 While you're here, this could be const, too. Sinc
316 return prerender_link_manager_->IsEmpty(); 316 return prerender_link_manager_->IsEmpty();
317 } 317 }
318 318
319 size_t CountAllLinkPrerenders() {
mmenke 2013/02/14 16:48:12 nit: const?
320 return prerender_link_manager_->prerenders_.size();
321 }
322
319 int last_prerender_id() const { 323 int last_prerender_id() const {
320 return last_prerender_id_; 324 return last_prerender_id_;
321 } 325 }
322 326
323 int GetNextPrerenderID() { 327 int GetNextPrerenderID() {
324 return ++last_prerender_id_; 328 return ++last_prerender_id_;
325 } 329 }
326 330
327 bool LauncherHasRunningPrerender(int child_id, int prerender_id) { 331 bool LauncherHasRunningPrerender(int child_id, int prerender_id) {
328 PrerenderLinkManager::LinkPrerender* prerender = 332 PrerenderLinkManager::LinkPrerender* prerender =
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 url, 391 url,
388 FINAL_STATUS_MANAGER_SHUTDOWN); 392 FINAL_STATUS_MANAGER_SHUTDOWN);
389 EXPECT_TRUE(AddSimplePrerender(url)); 393 EXPECT_TRUE(AddSimplePrerender(url));
390 EXPECT_EQ(prerender_contents1, 394 EXPECT_EQ(prerender_contents1,
391 prerender_manager()->next_prerender_contents()); 395 prerender_manager()->next_prerender_contents());
392 EXPECT_FALSE(prerender_contents1->prerendering_has_started()); 396 EXPECT_FALSE(prerender_contents1->prerendering_has_started());
393 397
394 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); 398 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
395 } 399 }
396 400
401 // Makes sure that we do not create two running prerender entries for the same
402 // launcher and prerender id.
403 TEST_F(PrerenderTest, DoubleAddTest) {
404 SetConcurrency(2);
405
406 GURL url("http://www.google.com/");
407 DummyPrerenderContents* prerender_contents =
408 prerender_manager()->CreateNextPrerenderContents(
409 url,
410 FINAL_STATUS_USED);
411 EXPECT_TRUE(AddSimplePrerender(url));
412 EXPECT_TRUE(prerender_contents->prerendering_has_started());
413 EXPECT_EQ(1u, CountAllLinkPrerenders());
414
415 GURL url2("http://www.notgoogle.com/");
416 prerender_link_manager()->OnAddPrerender(kDefaultChildId,
417 last_prerender_id(),
418 url, content::Referrer(),
419 kSize, kDefaultRenderViewRouteId);
420 // The second add had the same launcher and prerender_id as a running
421 // prerender, so it should have done nothing.
422 EXPECT_EQ(1u, CountAllLinkPrerenders());
423 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url));
424 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
425 }
426
397 // Ensure that we expire a prerendered page after the max. permitted time. 427 // Ensure that we expire a prerendered page after the max. permitted time.
398 TEST_F(PrerenderTest, ExpireTest) { 428 TEST_F(PrerenderTest, ExpireTest) {
399 GURL url("http://www.google.com/"); 429 GURL url("http://www.google.com/");
400 DummyPrerenderContents* prerender_contents = 430 DummyPrerenderContents* prerender_contents =
401 prerender_manager()->CreateNextPrerenderContents( 431 prerender_manager()->CreateNextPrerenderContents(
402 url, 432 url,
403 FINAL_STATUS_TIMED_OUT); 433 FINAL_STATUS_TIMED_OUT);
404 DummyPrerenderContents* null = NULL; 434 DummyPrerenderContents* null = NULL;
405 EXPECT_TRUE(AddSimplePrerender(url)); 435 EXPECT_TRUE(AddSimplePrerender(url));
406 EXPECT_EQ(null, prerender_manager()->next_prerender_contents()); 436 EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
(...skipping 1007 matching lines...) Expand 10 before | Expand all | Expand 10 after
1414 EXPECT_EQ(null, prerender_manager()->FindEntry(second_url)); 1444 EXPECT_EQ(null, prerender_manager()->FindEntry(second_url));
1415 1445
1416 // The first prerender should have died, giving life to the second one. 1446 // The first prerender should have died, giving life to the second one.
1417 prerender_manager()->AdvanceTimeTicks(wait_for_first_prerender_to_expire); 1447 prerender_manager()->AdvanceTimeTicks(wait_for_first_prerender_to_expire);
1418 EXPECT_EQ(null, prerender_manager()->FindEntry(first_url)); 1448 EXPECT_EQ(null, prerender_manager()->FindEntry(first_url));
1419 EXPECT_EQ(second_prerender_contents, 1449 EXPECT_EQ(second_prerender_contents,
1420 prerender_manager()->FindAndUseEntry(second_url)); 1450 prerender_manager()->FindAndUseEntry(second_url));
1421 } 1451 }
1422 1452
1423 } // namespace prerender 1453 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_link_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698