| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "chrome/browser/ui/search/instant_search_prerenderer.h" | 5 #include "chrome/browser/ui/search/instant_search_prerenderer.h" |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/metrics/field_trial.h" | 10 #include "base/metrics/field_trial.h" |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 159 } | 159 } |
| 160 | 160 |
| 161 } // namespace | 161 } // namespace |
| 162 | 162 |
| 163 class InstantSearchPrerendererTest : public InstantUnitTestBase { | 163 class InstantSearchPrerendererTest : public InstantUnitTestBase { |
| 164 public: | 164 public: |
| 165 InstantSearchPrerendererTest() {} | 165 InstantSearchPrerendererTest() {} |
| 166 | 166 |
| 167 protected: | 167 protected: |
| 168 virtual void SetUp() OVERRIDE { | 168 virtual void SetUp() OVERRIDE { |
| 169 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 169 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch", |
| 170 "EmbeddedSearch", "Group1 strk:20 prefetch_results:1")); | 170 "Group1 strk:20")); |
| 171 InstantUnitTestBase::SetUp(); | 171 InstantUnitTestBase::SetUp(); |
| 172 } | 172 } |
| 173 | 173 |
| 174 void Init(bool prerender_search_results_base_page, | 174 void Init(bool prerender_search_results_base_page, |
| 175 bool call_did_finish_load) { | 175 bool call_did_finish_load) { |
| 176 AddTab(browser(), GURL(url::kAboutBlankURL)); | 176 AddTab(browser(), GURL(url::kAboutBlankURL)); |
| 177 | 177 |
| 178 content::SessionStorageNamespaceMap session_storage_namespace_map; | 178 content::SessionStorageNamespaceMap session_storage_namespace_map; |
| 179 session_storage_namespace_map[std::string()] = | 179 session_storage_namespace_map[std::string()] = |
| 180 GetActiveWebContents()->GetController(). | 180 GetActiveWebContents()->GetController(). |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 278 | 278 |
| 279 TEST_F(InstantSearchPrerendererTest, CanCommitQuery) { | 279 TEST_F(InstantSearchPrerendererTest, CanCommitQuery) { |
| 280 Init(true, true); | 280 Init(true, true); |
| 281 InstantSearchPrerenderer* prerenderer = GetInstantSearchPrerenderer(); | 281 InstantSearchPrerenderer* prerenderer = GetInstantSearchPrerenderer(); |
| 282 base::string16 query = ASCIIToUTF16("flowers"); | 282 base::string16 query = ASCIIToUTF16("flowers"); |
| 283 prerenderer->Prerender(InstantSuggestion(query, std::string())); | 283 prerenderer->Prerender(InstantSuggestion(query, std::string())); |
| 284 EXPECT_TRUE(prerenderer->CanCommitQuery(GetActiveWebContents(), query)); | 284 EXPECT_TRUE(prerenderer->CanCommitQuery(GetActiveWebContents(), query)); |
| 285 | 285 |
| 286 // Make sure InstantSearchPrerenderer::CanCommitQuery() returns false for | 286 // Make sure InstantSearchPrerenderer::CanCommitQuery() returns false for |
| 287 // invalid search queries. | 287 // invalid search queries. |
| 288 EXPECT_FALSE(prerenderer->CanCommitQuery(GetActiveWebContents(), | 288 EXPECT_TRUE(prerenderer->CanCommitQuery(GetActiveWebContents(), |
| 289 ASCIIToUTF16("joy"))); | 289 ASCIIToUTF16("joy"))); |
| 290 EXPECT_FALSE(prerenderer->CanCommitQuery(GetActiveWebContents(), | 290 EXPECT_FALSE(prerenderer->CanCommitQuery(GetActiveWebContents(), |
| 291 base::string16())); | 291 base::string16())); |
| 292 } | 292 } |
| 293 | 293 |
| 294 TEST_F(InstantSearchPrerendererTest, CommitQuery) { | 294 TEST_F(InstantSearchPrerendererTest, CommitQuery) { |
| 295 base::string16 query = ASCIIToUTF16("flowers"); | 295 base::string16 query = ASCIIToUTF16("flowers"); |
| 296 PrerenderSearchQuery(query); | 296 PrerenderSearchQuery(query); |
| 297 InstantSearchPrerenderer* prerenderer = GetInstantSearchPrerenderer(); | 297 InstantSearchPrerenderer* prerenderer = GetInstantSearchPrerenderer(); |
| 298 prerenderer->Commit(query); | 298 prerenderer->Commit(query); |
| 299 EXPECT_TRUE(MessageWasSent(ChromeViewMsg_SearchBoxSubmit::ID)); | 299 EXPECT_TRUE(MessageWasSent(ChromeViewMsg_SearchBoxSubmit::ID)); |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 372 // Make sure the browser navigates the current tab to this |url|. | 372 // Make sure the browser navigates the current tab to this |url|. |
| 373 GURL url("https://www.google.com/alt#quux=foo&strk"); | 373 GURL url("https://www.google.com/alt#quux=foo&strk"); |
| 374 browser()->OpenURL(content::OpenURLParams(url, Referrer(), CURRENT_TAB, | 374 browser()->OpenURL(content::OpenURLParams(url, Referrer(), CURRENT_TAB, |
| 375 content::PAGE_TRANSITION_TYPED, | 375 content::PAGE_TRANSITION_TYPED, |
| 376 false)); | 376 false)); |
| 377 EXPECT_NE(GetPrerenderURL(), GetActiveWebContents()->GetURL()); | 377 EXPECT_NE(GetPrerenderURL(), GetActiveWebContents()->GetURL()); |
| 378 EXPECT_EQ(url, GetActiveWebContents()->GetURL()); | 378 EXPECT_EQ(url, GetActiveWebContents()->GetURL()); |
| 379 } | 379 } |
| 380 | 380 |
| 381 TEST_F(InstantSearchPrerendererTest, | 381 TEST_F(InstantSearchPrerendererTest, |
| 382 CancelPrerenderRequest_SearchQueryMistmatch) { | 382 UsePrerenderedPage_SearchQueryMistmatch) { |
| 383 PrerenderSearchQuery(ASCIIToUTF16("foo")); | 383 PrerenderSearchQuery(ASCIIToUTF16("foo")); |
| 384 | 384 |
| 385 // Open a search results page. Committed query("pen") doesn't match with the | 385 // Open a search results page. Committed query("pen") doesn't match with the |
| 386 // prerendered search query("foo"). Make sure the InstantSearchPrerenderer | 386 // prerendered search query("foo"). Make sure the browser swaps the current |
| 387 // cancels the active prerender request and the browser navigates the active | 387 // tab contents with the prerendered contents. |
| 388 // tab to this |url|. | |
| 389 GURL url("https://www.google.com/alt#quux=pen&strk"); | 388 GURL url("https://www.google.com/alt#quux=pen&strk"); |
| 390 browser()->OpenURL(content::OpenURLParams(url, Referrer(), CURRENT_TAB, | 389 browser()->OpenURL(content::OpenURLParams(url, Referrer(), CURRENT_TAB, |
| 391 content::PAGE_TRANSITION_TYPED, | 390 content::PAGE_TRANSITION_TYPED, |
| 392 false)); | 391 false)); |
| 393 EXPECT_NE(GetPrerenderURL(), GetActiveWebContents()->GetURL()); | 392 EXPECT_EQ(GetPrerenderURL(), GetActiveWebContents()->GetURL()); |
| 394 EXPECT_EQ(url, GetActiveWebContents()->GetURL()); | |
| 395 EXPECT_EQ(static_cast<PrerenderHandle*>(NULL), prerender_handle()); | 393 EXPECT_EQ(static_cast<PrerenderHandle*>(NULL), prerender_handle()); |
| 396 } | 394 } |
| 397 | 395 |
| 398 TEST_F(InstantSearchPrerendererTest, | 396 TEST_F(InstantSearchPrerendererTest, |
| 399 CancelPrerenderRequest_EmptySearchQueryCommitted) { | 397 CancelPrerenderRequest_EmptySearchQueryCommitted) { |
| 400 PrerenderSearchQuery(ASCIIToUTF16("foo")); | 398 PrerenderSearchQuery(ASCIIToUTF16("foo")); |
| 401 | 399 |
| 402 // Open a search results page. Make sure the InstantSearchPrerenderer cancels | 400 // Open a search results page. Make sure the InstantSearchPrerenderer cancels |
| 403 // the active prerender request upon the receipt of empty search query. | 401 // the active prerender request upon the receipt of empty search query. |
| 404 GURL url("https://www.google.com/alt#quux=&strk"); | 402 GURL url("https://www.google.com/alt#quux=&strk"); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 426 EXPECT_EQ(url, new_tab->GetURL()); | 424 EXPECT_EQ(url, new_tab->GetURL()); |
| 427 EXPECT_EQ(static_cast<PrerenderHandle*>(NULL), prerender_handle()); | 425 EXPECT_EQ(static_cast<PrerenderHandle*>(NULL), prerender_handle()); |
| 428 } | 426 } |
| 429 | 427 |
| 430 class ReuseInstantSearchBasePageTest : public InstantSearchPrerendererTest { | 428 class ReuseInstantSearchBasePageTest : public InstantSearchPrerendererTest { |
| 431 public: | 429 public: |
| 432 ReuseInstantSearchBasePageTest() {} | 430 ReuseInstantSearchBasePageTest() {} |
| 433 | 431 |
| 434 protected: | 432 protected: |
| 435 virtual void SetUp() OVERRIDE { | 433 virtual void SetUp() OVERRIDE { |
| 436 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 434 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch", |
| 437 "EmbeddedSearch", | 435 "Group1 strk:20")); |
| 438 "Group1 strk:20 prefetch_results:1 reuse_instant_search_base_page:1")); | |
| 439 InstantUnitTestBase::SetUp(); | 436 InstantUnitTestBase::SetUp(); |
| 440 } | 437 } |
| 441 }; | 438 }; |
| 442 | 439 |
| 443 TEST_F(ReuseInstantSearchBasePageTest, CanCommitQuery) { | 440 TEST_F(ReuseInstantSearchBasePageTest, CanCommitQuery) { |
| 444 Init(true, true); | 441 Init(true, true); |
| 445 InstantSearchPrerenderer* prerenderer = GetInstantSearchPrerenderer(); | 442 InstantSearchPrerenderer* prerenderer = GetInstantSearchPrerenderer(); |
| 446 base::string16 query = ASCIIToUTF16("flowers"); | 443 base::string16 query = ASCIIToUTF16("flowers"); |
| 447 prerenderer->Prerender(InstantSuggestion(query, std::string())); | 444 prerenderer->Prerender(InstantSuggestion(query, std::string())); |
| 448 EXPECT_TRUE(prerenderer->CanCommitQuery(GetActiveWebContents(), query)); | 445 EXPECT_TRUE(prerenderer->CanCommitQuery(GetActiveWebContents(), query)); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 470 EXPECT_FALSE(prerenderer->CanCommitQuery(GetActiveWebContents(), | 467 EXPECT_FALSE(prerenderer->CanCommitQuery(GetActiveWebContents(), |
| 471 ASCIIToUTF16("joy"))); | 468 ASCIIToUTF16("joy"))); |
| 472 } | 469 } |
| 473 | 470 |
| 474 #if !defined(OS_IOS) && !defined(OS_ANDROID) | 471 #if !defined(OS_IOS) && !defined(OS_ANDROID) |
| 475 class TestUsePrerenderPage : public InstantSearchPrerendererTest { | 472 class TestUsePrerenderPage : public InstantSearchPrerendererTest { |
| 476 protected: | 473 protected: |
| 477 virtual void SetUp() OVERRIDE { | 474 virtual void SetUp() OVERRIDE { |
| 478 // Disable query extraction flag in field trials. | 475 // Disable query extraction flag in field trials. |
| 479 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 476 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 480 "EmbeddedSearch", | 477 "EmbeddedSearch", "Group1 strk:20 query_extraction:0")); |
| 481 "Group1 strk:20 query_extraction:0 prefetch_results:1")); | |
| 482 InstantUnitTestBase::SetUpWithoutQueryExtraction(); | 478 InstantUnitTestBase::SetUpWithoutQueryExtraction(); |
| 483 } | 479 } |
| 484 }; | 480 }; |
| 485 | 481 |
| 486 TEST_F(TestUsePrerenderPage, ExtractSearchTermsAndUsePrerenderPage) { | 482 TEST_F(TestUsePrerenderPage, ExtractSearchTermsAndUsePrerenderPage) { |
| 487 PrerenderSearchQuery(ASCIIToUTF16("foo")); | 483 PrerenderSearchQuery(ASCIIToUTF16("foo")); |
| 488 | 484 |
| 489 // Open a search results page. Query extraction flag is disabled in field | 485 // Open a search results page. Query extraction flag is disabled in field |
| 490 // trials. Search results page URL does not contain search terms replacement | 486 // trials. Search results page URL does not contain search terms replacement |
| 491 // key. Make sure UsePrerenderedPage() extracts the search terms from the URL | 487 // key. Make sure UsePrerenderedPage() extracts the search terms from the URL |
| 492 // and uses the prerendered page contents. | 488 // and uses the prerendered page contents. |
| 493 GURL url("https://www.google.com/alt#quux=foo"); | 489 GURL url("https://www.google.com/alt#quux=foo"); |
| 494 browser()->OpenURL(content::OpenURLParams(url, Referrer(), CURRENT_TAB, | 490 browser()->OpenURL(content::OpenURLParams(url, Referrer(), CURRENT_TAB, |
| 495 content::PAGE_TRANSITION_TYPED, | 491 content::PAGE_TRANSITION_TYPED, |
| 496 false)); | 492 false)); |
| 497 EXPECT_EQ(GetPrerenderURL(), GetActiveWebContents()->GetURL()); | 493 EXPECT_EQ(GetPrerenderURL(), GetActiveWebContents()->GetURL()); |
| 498 EXPECT_EQ(static_cast<PrerenderHandle*>(NULL), prerender_handle()); | 494 EXPECT_EQ(static_cast<PrerenderHandle*>(NULL), prerender_handle()); |
| 499 } | 495 } |
| 500 #endif | 496 #endif |
| OLD | NEW |