| 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 "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/memory/scoped_vector.h" | 6 #include "base/memory/scoped_vector.h" |
| 7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
| 8 #include "base/stringprintf.h" | 8 #include "base/stringprintf.h" |
| 9 #include "base/time.h" | 9 #include "base/time.h" |
| 10 #include "chrome/browser/prerender/prerender_contents.h" | 10 #include "chrome/browser/prerender/prerender_contents.h" |
| (...skipping 29 matching lines...) Expand all Loading... |
| 40 const GURL& url, | 40 const GURL& url, |
| 41 Origin origin, | 41 Origin origin, |
| 42 FinalStatus expected_final_status); | 42 FinalStatus expected_final_status); |
| 43 | 43 |
| 44 virtual ~DummyPrerenderContents() { | 44 virtual ~DummyPrerenderContents() { |
| 45 EXPECT_EQ(expected_final_status_, final_status()); | 45 EXPECT_EQ(expected_final_status_, final_status()); |
| 46 } | 46 } |
| 47 | 47 |
| 48 virtual void StartPrerendering( | 48 virtual void StartPrerendering( |
| 49 int ALLOW_UNUSED creator_child_id, | 49 int ALLOW_UNUSED creator_child_id, |
| 50 int ALLOW_UNUSED prerender_id, |
| 50 const gfx::Size& ALLOW_UNUSED size, | 51 const gfx::Size& ALLOW_UNUSED size, |
| 51 content::SessionStorageNamespace* ALLOW_UNUSED session_storage_namespace, | 52 content::SessionStorageNamespace* ALLOW_UNUSED session_storage_namespace, |
| 52 bool is_control_group) OVERRIDE; | 53 bool is_control_group) OVERRIDE; |
| 53 | 54 |
| 54 virtual bool GetChildId(int* child_id) const OVERRIDE { | 55 virtual bool GetChildId(int* child_id) const OVERRIDE { |
| 55 // Having a default child_id of -1 forces pending prerenders not to fail | 56 // Having a default child_id of -1 forces pending prerenders not to fail |
| 56 // on session storage and cross domain checking. | 57 // on session storage and cross domain checking. |
| 57 *child_id = -1; | 58 *child_id = -1; |
| 58 return true; | 59 return true; |
| 59 } | 60 } |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 FinalStatus expected_final_status) | 236 FinalStatus expected_final_status) |
| 236 : PrerenderContents(test_prerender_manager, prerender_tracker, | 237 : PrerenderContents(test_prerender_manager, prerender_tracker, |
| 237 NULL, url, Referrer(), origin, | 238 NULL, url, Referrer(), origin, |
| 238 PrerenderManager::kNoExperiment), | 239 PrerenderManager::kNoExperiment), |
| 239 test_prerender_manager_(test_prerender_manager), | 240 test_prerender_manager_(test_prerender_manager), |
| 240 expected_final_status_(expected_final_status) { | 241 expected_final_status_(expected_final_status) { |
| 241 } | 242 } |
| 242 | 243 |
| 243 void DummyPrerenderContents::StartPrerendering( | 244 void DummyPrerenderContents::StartPrerendering( |
| 244 int ALLOW_UNUSED creator_child_id, | 245 int ALLOW_UNUSED creator_child_id, |
| 246 int ALLOW_UNUSED prerender_id, |
| 245 const gfx::Size& ALLOW_UNUSED size, | 247 const gfx::Size& ALLOW_UNUSED size, |
| 246 content::SessionStorageNamespace* ALLOW_UNUSED session_storage_namespace, | 248 content::SessionStorageNamespace* ALLOW_UNUSED session_storage_namespace, |
| 247 bool is_control_group) { | 249 bool is_control_group) { |
| 248 // In the base PrerenderContents implementation, StartPrerendering will | 250 // In the base PrerenderContents implementation, StartPrerendering will |
| 249 // be called even when the PrerenderManager is part of the control group, | 251 // be called even when the PrerenderManager is part of the control group, |
| 250 // but it will early exit before actually creating a new RenderView if | 252 // but it will early exit before actually creating a new RenderView if |
| 251 // |is_control_group| is true; | 253 // |is_control_group| is true; |
| 252 if (!is_control_group) | 254 if (!is_control_group) |
| 253 prerendering_has_started_ = true; | 255 prerendering_has_started_ = true; |
| 254 load_start_time_ = test_prerender_manager_->GetCurrentTimeTicks(); | 256 load_start_time_ = test_prerender_manager_->GetCurrentTimeTicks(); |
| 255 } | 257 } |
| 256 | 258 |
| 257 class PrerenderTest : public testing::Test { | 259 class PrerenderTest : public testing::Test { |
| 258 public: | 260 public: |
| 259 static const int kDefaultChildId = -1; | 261 static const int kDefaultChildId = -1; |
| 262 static const int kDefaultPrerenderId = -1; |
| 260 static const int kDefaultRenderViewRouteId = -1; | 263 static const int kDefaultRenderViewRouteId = -1; |
| 261 | 264 |
| 262 PrerenderTest() : ui_thread_(BrowserThread::UI, &message_loop_), | 265 PrerenderTest() : ui_thread_(BrowserThread::UI, &message_loop_), |
| 263 prerender_manager_(new UnitTestPrerenderManager( | 266 prerender_manager_(new UnitTestPrerenderManager( |
| 264 &profile_, prerender_tracker())), | 267 &profile_, prerender_tracker())), |
| 265 prerender_link_manager_( | 268 prerender_link_manager_( |
| 266 new PrerenderLinkManager(prerender_manager_.get())), | 269 new PrerenderLinkManager(prerender_manager_.get())), |
| 267 last_prerender_id_(0) { | 270 last_prerender_id_(0) { |
| 268 // Enable omnibox prerendering. | 271 // Enable omnibox prerendering. |
| 269 CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 272 CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 332 GURL url("http://www.google.com/"); | 335 GURL url("http://www.google.com/"); |
| 333 DummyPrerenderContents* prerender_contents = | 336 DummyPrerenderContents* prerender_contents = |
| 334 prerender_manager()->CreateNextPrerenderContents( | 337 prerender_manager()->CreateNextPrerenderContents( |
| 335 url, | 338 url, |
| 336 FINAL_STATUS_USED); | 339 FINAL_STATUS_USED); |
| 337 EXPECT_TRUE(AddSimplePrerender(url)); | 340 EXPECT_TRUE(AddSimplePrerender(url)); |
| 338 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 341 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 339 | 342 |
| 340 scoped_ptr<PrerenderHandle> duplicate_prerender_handle( | 343 scoped_ptr<PrerenderHandle> duplicate_prerender_handle( |
| 341 prerender_manager()->AddPrerenderFromLinkRelPrerender( | 344 prerender_manager()->AddPrerenderFromLinkRelPrerender( |
| 342 kDefaultChildId, kDefaultRenderViewRouteId, url, | 345 kDefaultChildId, kDefaultPrerenderId, kDefaultRenderViewRouteId, url, |
| 343 Referrer(url, WebKit::WebReferrerPolicyDefault), kSize)); | 346 Referrer(url, WebKit::WebReferrerPolicyDefault), kSize)); |
| 344 | 347 |
| 345 EXPECT_TRUE(duplicate_prerender_handle->IsValid()); | 348 EXPECT_TRUE(duplicate_prerender_handle->IsValid()); |
| 346 EXPECT_TRUE(duplicate_prerender_handle->IsPrerendering()); | 349 EXPECT_TRUE(duplicate_prerender_handle->IsPrerendering()); |
| 347 | 350 |
| 348 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); | 351 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); |
| 349 | 352 |
| 350 EXPECT_FALSE(duplicate_prerender_handle->IsValid()); | 353 EXPECT_FALSE(duplicate_prerender_handle->IsValid()); |
| 351 EXPECT_FALSE(duplicate_prerender_handle->IsPrerendering()); | 354 EXPECT_FALSE(duplicate_prerender_handle->IsPrerendering()); |
| 352 } | 355 } |
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 619 | 622 |
| 620 GURL pending_url("http://news.google.com/"); | 623 GURL pending_url("http://news.google.com/"); |
| 621 | 624 |
| 622 DummyPrerenderContents* pending_prerender_contents = | 625 DummyPrerenderContents* pending_prerender_contents = |
| 623 prerender_manager()->CreateNextPrerenderContents( | 626 prerender_manager()->CreateNextPrerenderContents( |
| 624 pending_url, | 627 pending_url, |
| 625 ORIGIN_GWS_PRERENDER, | 628 ORIGIN_GWS_PRERENDER, |
| 626 FINAL_STATUS_USED); | 629 FINAL_STATUS_USED); |
| 627 scoped_ptr<PrerenderHandle> pending_prerender_handle( | 630 scoped_ptr<PrerenderHandle> pending_prerender_handle( |
| 628 prerender_manager()->AddPrerenderFromLinkRelPrerender( | 631 prerender_manager()->AddPrerenderFromLinkRelPrerender( |
| 629 child_id, route_id, pending_url, | 632 child_id, kDefaultPrerenderId, route_id, pending_url, |
| 630 Referrer(url, WebKit::WebReferrerPolicyDefault), kSize)); | 633 Referrer(url, WebKit::WebReferrerPolicyDefault), kSize)); |
| 631 DCHECK(pending_prerender_handle.get()); | 634 DCHECK(pending_prerender_handle.get()); |
| 632 EXPECT_TRUE(pending_prerender_handle->IsValid()); | 635 EXPECT_TRUE(pending_prerender_handle->IsValid()); |
| 633 EXPECT_TRUE(pending_prerender_handle->IsPending()); | 636 EXPECT_TRUE(pending_prerender_handle->IsPending()); |
| 634 | 637 |
| 635 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 638 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 636 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); | 639 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); |
| 637 | 640 |
| 638 EXPECT_FALSE(pending_prerender_handle->IsPending()); | 641 EXPECT_FALSE(pending_prerender_handle->IsPending()); |
| 639 ASSERT_EQ(pending_prerender_contents, | 642 ASSERT_EQ(pending_prerender_contents, |
| (...skipping 16 matching lines...) Expand all Loading... |
| 656 // This pending URL has an unsupported scheme, and won't be able | 659 // This pending URL has an unsupported scheme, and won't be able |
| 657 // to start. | 660 // to start. |
| 658 GURL pending_url("ftp://news.google.com/"); | 661 GURL pending_url("ftp://news.google.com/"); |
| 659 | 662 |
| 660 prerender_manager()->CreateNextPrerenderContents( | 663 prerender_manager()->CreateNextPrerenderContents( |
| 661 pending_url, | 664 pending_url, |
| 662 ORIGIN_GWS_PRERENDER, | 665 ORIGIN_GWS_PRERENDER, |
| 663 FINAL_STATUS_UNSUPPORTED_SCHEME); | 666 FINAL_STATUS_UNSUPPORTED_SCHEME); |
| 664 scoped_ptr<PrerenderHandle> pending_prerender_handle( | 667 scoped_ptr<PrerenderHandle> pending_prerender_handle( |
| 665 prerender_manager()->AddPrerenderFromLinkRelPrerender( | 668 prerender_manager()->AddPrerenderFromLinkRelPrerender( |
| 666 child_id, route_id, pending_url, | 669 child_id, kDefaultPrerenderId, route_id, pending_url, |
| 667 Referrer(url, WebKit::WebReferrerPolicyDefault), kSize)); | 670 Referrer(url, WebKit::WebReferrerPolicyDefault), kSize)); |
| 668 DCHECK(pending_prerender_handle.get()); | 671 DCHECK(pending_prerender_handle.get()); |
| 669 EXPECT_TRUE(pending_prerender_handle->IsValid()); | 672 EXPECT_TRUE(pending_prerender_handle->IsValid()); |
| 670 EXPECT_TRUE(pending_prerender_handle->IsPending()); | 673 EXPECT_TRUE(pending_prerender_handle->IsPending()); |
| 671 | 674 |
| 672 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 675 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 673 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); | 676 ASSERT_EQ(prerender_contents, prerender_manager()->FindAndUseEntry(url)); |
| 674 | 677 |
| 675 EXPECT_FALSE(pending_prerender_handle->IsValid()); | 678 EXPECT_FALSE(pending_prerender_handle->IsValid()); |
| 676 EXPECT_FALSE(pending_prerender_handle->IsPending()); | 679 EXPECT_FALSE(pending_prerender_handle->IsPending()); |
| 677 } | 680 } |
| 678 | 681 |
| 679 TEST_F(PrerenderTest, CancelPendingPrerenderTest) { | 682 TEST_F(PrerenderTest, CancelPendingPrerenderTest) { |
| 680 GURL url("http://www.google.com/"); | 683 GURL url("http://www.google.com/"); |
| 681 DummyPrerenderContents* prerender_contents = | 684 DummyPrerenderContents* prerender_contents = |
| 682 prerender_manager()->CreateNextPrerenderContents( | 685 prerender_manager()->CreateNextPrerenderContents( |
| 683 url, | 686 url, |
| 684 FINAL_STATUS_USED); | 687 FINAL_STATUS_USED); |
| 685 EXPECT_TRUE(AddSimplePrerender(url)); | 688 EXPECT_TRUE(AddSimplePrerender(url)); |
| 686 | 689 |
| 687 int child_id; | 690 int child_id; |
| 688 int route_id; | 691 int route_id; |
| 689 ASSERT_TRUE(prerender_contents->GetChildId(&child_id)); | 692 ASSERT_TRUE(prerender_contents->GetChildId(&child_id)); |
| 690 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id)); | 693 ASSERT_TRUE(prerender_contents->GetRouteId(&route_id)); |
| 691 | 694 |
| 692 GURL pending_url("http://news.google.com/"); | 695 GURL pending_url("http://news.google.com/"); |
| 693 | 696 |
| 694 scoped_ptr<PrerenderHandle> pending_prerender_handle( | 697 scoped_ptr<PrerenderHandle> pending_prerender_handle( |
| 695 prerender_manager()->AddPrerenderFromLinkRelPrerender( | 698 prerender_manager()->AddPrerenderFromLinkRelPrerender( |
| 696 child_id, route_id, pending_url, | 699 child_id, kDefaultPrerenderId, route_id, pending_url, |
| 697 Referrer(url, WebKit::WebReferrerPolicyDefault), kSize)); | 700 Referrer(url, WebKit::WebReferrerPolicyDefault), kSize)); |
| 698 DCHECK(pending_prerender_handle.get()); | 701 DCHECK(pending_prerender_handle.get()); |
| 699 EXPECT_TRUE(pending_prerender_handle->IsValid()); | 702 EXPECT_TRUE(pending_prerender_handle->IsValid()); |
| 700 EXPECT_TRUE(pending_prerender_handle->IsPending()); | 703 EXPECT_TRUE(pending_prerender_handle->IsPending()); |
| 701 | 704 |
| 702 EXPECT_TRUE(prerender_contents->prerendering_has_started()); | 705 EXPECT_TRUE(prerender_contents->prerendering_has_started()); |
| 703 | 706 |
| 704 pending_prerender_handle->OnCancel(); | 707 pending_prerender_handle->OnCancel(); |
| 705 EXPECT_FALSE(pending_prerender_handle->IsValid()); | 708 EXPECT_FALSE(pending_prerender_handle->IsValid()); |
| 706 | 709 |
| (...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1155 prerender_manager()->CreateNextPrerenderContents( | 1158 prerender_manager()->CreateNextPrerenderContents( |
| 1156 url, FINAL_STATUS_USED); | 1159 url, FINAL_STATUS_USED); |
| 1157 EXPECT_TRUE(AddSimplePrerender(url)); | 1160 EXPECT_TRUE(AddSimplePrerender(url)); |
| 1158 EXPECT_TRUE(second_prerender_contents->prerendering_has_started()); | 1161 EXPECT_TRUE(second_prerender_contents->prerendering_has_started()); |
| 1159 ASSERT_EQ(second_prerender_contents, | 1162 ASSERT_EQ(second_prerender_contents, |
| 1160 prerender_manager()->FindAndUseEntry(url)); | 1163 prerender_manager()->FindAndUseEntry(url)); |
| 1161 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); | 1164 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); |
| 1162 } | 1165 } |
| 1163 | 1166 |
| 1164 } // namespace prerender | 1167 } // namespace prerender |
| OLD | NEW |