| 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 <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <tuple> | 10 #include <tuple> |
| (...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 EXPECT_FALSE(AutocompleteMatch::IsSearchType(url_type_match.type)); | 348 EXPECT_FALSE(AutocompleteMatch::IsSearchType(url_type_match.type)); |
| 349 EXPECT_FALSE(prerenderer->IsAllowed(url_type_match, active_tab)); | 349 EXPECT_FALSE(prerenderer->IsAllowed(url_type_match, active_tab)); |
| 350 } | 350 } |
| 351 | 351 |
| 352 TEST_F(InstantSearchPrerendererTest, UsePrerenderPage) { | 352 TEST_F(InstantSearchPrerendererTest, UsePrerenderPage) { |
| 353 PrerenderSearchQuery(ASCIIToUTF16("foo")); | 353 PrerenderSearchQuery(ASCIIToUTF16("foo")); |
| 354 | 354 |
| 355 // Open a search results page. A prerendered page exists for |url|. Make sure | 355 // Open a search results page. A prerendered page exists for |url|. Make sure |
| 356 // the browser swaps the current tab contents with the prerendered contents. | 356 // the browser swaps the current tab contents with the prerendered contents. |
| 357 GURL url("https://www.google.com/alt#quux=foo&strk"); | 357 GURL url("https://www.google.com/alt#quux=foo&strk"); |
| 358 browser()->OpenURL(content::OpenURLParams(url, Referrer(), CURRENT_TAB, | 358 browser()->OpenURL(content::OpenURLParams(url, Referrer(), |
| 359 ui::PAGE_TRANSITION_TYPED, | 359 WindowOpenDisposition::CURRENT_TAB, |
| 360 false)); | 360 ui::PAGE_TRANSITION_TYPED, false)); |
| 361 EXPECT_EQ(GetPrerenderURL(), GetActiveWebContents()->GetURL()); | 361 EXPECT_EQ(GetPrerenderURL(), GetActiveWebContents()->GetURL()); |
| 362 EXPECT_EQ(static_cast<PrerenderHandle*>(NULL), prerender_handle()); | 362 EXPECT_EQ(static_cast<PrerenderHandle*>(NULL), prerender_handle()); |
| 363 } | 363 } |
| 364 | 364 |
| 365 TEST_F(InstantSearchPrerendererTest, PrerenderRequestCancelled) { | 365 TEST_F(InstantSearchPrerendererTest, PrerenderRequestCancelled) { |
| 366 PrerenderSearchQuery(ASCIIToUTF16("foo")); | 366 PrerenderSearchQuery(ASCIIToUTF16("foo")); |
| 367 | 367 |
| 368 // Cancel the prerender request. | 368 // Cancel the prerender request. |
| 369 InstantSearchPrerenderer* prerenderer = GetInstantSearchPrerenderer(); | 369 InstantSearchPrerenderer* prerenderer = GetInstantSearchPrerenderer(); |
| 370 prerenderer->Cancel(); | 370 prerenderer->Cancel(); |
| 371 EXPECT_EQ(static_cast<PrerenderHandle*>(NULL), prerender_handle()); | 371 EXPECT_EQ(static_cast<PrerenderHandle*>(NULL), prerender_handle()); |
| 372 | 372 |
| 373 // Open a search results page. Prerendered page does not exists for |url|. | 373 // Open a search results page. Prerendered page does not exists for |url|. |
| 374 // Make sure the browser navigates the current tab to this |url|. | 374 // Make sure the browser navigates the current tab to this |url|. |
| 375 GURL url("https://www.google.com/alt#quux=foo&strk"); | 375 GURL url("https://www.google.com/alt#quux=foo&strk"); |
| 376 browser()->OpenURL(content::OpenURLParams(url, Referrer(), CURRENT_TAB, | 376 browser()->OpenURL(content::OpenURLParams(url, Referrer(), |
| 377 ui::PAGE_TRANSITION_TYPED, | 377 WindowOpenDisposition::CURRENT_TAB, |
| 378 false)); | 378 ui::PAGE_TRANSITION_TYPED, false)); |
| 379 EXPECT_NE(GetPrerenderURL(), GetActiveWebContents()->GetURL()); | 379 EXPECT_NE(GetPrerenderURL(), GetActiveWebContents()->GetURL()); |
| 380 EXPECT_EQ(url, GetActiveWebContents()->GetURL()); | 380 EXPECT_EQ(url, GetActiveWebContents()->GetURL()); |
| 381 } | 381 } |
| 382 | 382 |
| 383 TEST_F(InstantSearchPrerendererTest, | 383 TEST_F(InstantSearchPrerendererTest, |
| 384 UsePrerenderedPage_SearchQueryMistmatch) { | 384 UsePrerenderedPage_SearchQueryMistmatch) { |
| 385 PrerenderSearchQuery(ASCIIToUTF16("foo")); | 385 PrerenderSearchQuery(ASCIIToUTF16("foo")); |
| 386 | 386 |
| 387 // Open a search results page. Committed query("pen") doesn't match with the | 387 // Open a search results page. Committed query("pen") doesn't match with the |
| 388 // prerendered search query("foo"). Make sure the browser swaps the current | 388 // prerendered search query("foo"). Make sure the browser swaps the current |
| 389 // tab contents with the prerendered contents. | 389 // tab contents with the prerendered contents. |
| 390 GURL url("https://www.google.com/alt#quux=pen&strk"); | 390 GURL url("https://www.google.com/alt#quux=pen&strk"); |
| 391 browser()->OpenURL(content::OpenURLParams(url, Referrer(), CURRENT_TAB, | 391 browser()->OpenURL(content::OpenURLParams(url, Referrer(), |
| 392 ui::PAGE_TRANSITION_TYPED, | 392 WindowOpenDisposition::CURRENT_TAB, |
| 393 false)); | 393 ui::PAGE_TRANSITION_TYPED, false)); |
| 394 EXPECT_EQ(GetPrerenderURL(), GetActiveWebContents()->GetURL()); | 394 EXPECT_EQ(GetPrerenderURL(), GetActiveWebContents()->GetURL()); |
| 395 EXPECT_EQ(static_cast<PrerenderHandle*>(NULL), prerender_handle()); | 395 EXPECT_EQ(static_cast<PrerenderHandle*>(NULL), prerender_handle()); |
| 396 } | 396 } |
| 397 | 397 |
| 398 TEST_F(InstantSearchPrerendererTest, | 398 TEST_F(InstantSearchPrerendererTest, |
| 399 CancelPrerenderRequest_EmptySearchQueryCommitted) { | 399 CancelPrerenderRequest_EmptySearchQueryCommitted) { |
| 400 PrerenderSearchQuery(ASCIIToUTF16("foo")); | 400 PrerenderSearchQuery(ASCIIToUTF16("foo")); |
| 401 | 401 |
| 402 // Open a search results page. Make sure the InstantSearchPrerenderer cancels | 402 // Open a search results page. Make sure the InstantSearchPrerenderer cancels |
| 403 // the active prerender request upon the receipt of empty search query. | 403 // the active prerender request upon the receipt of empty search query. |
| 404 GURL url("https://www.google.com/alt#quux=&strk"); | 404 GURL url("https://www.google.com/alt#quux=&strk"); |
| 405 browser()->OpenURL(content::OpenURLParams(url, Referrer(), CURRENT_TAB, | 405 browser()->OpenURL(content::OpenURLParams(url, Referrer(), |
| 406 ui::PAGE_TRANSITION_TYPED, | 406 WindowOpenDisposition::CURRENT_TAB, |
| 407 false)); | 407 ui::PAGE_TRANSITION_TYPED, false)); |
| 408 EXPECT_NE(GetPrerenderURL(), GetActiveWebContents()->GetURL()); | 408 EXPECT_NE(GetPrerenderURL(), GetActiveWebContents()->GetURL()); |
| 409 EXPECT_EQ(url, GetActiveWebContents()->GetURL()); | 409 EXPECT_EQ(url, GetActiveWebContents()->GetURL()); |
| 410 EXPECT_EQ(static_cast<PrerenderHandle*>(NULL), prerender_handle()); | 410 EXPECT_EQ(static_cast<PrerenderHandle*>(NULL), prerender_handle()); |
| 411 } | 411 } |
| 412 | 412 |
| 413 TEST_F(InstantSearchPrerendererTest, | 413 TEST_F(InstantSearchPrerendererTest, |
| 414 CancelPrerenderRequest_UnsupportedDispositions) { | 414 CancelPrerenderRequest_UnsupportedDispositions) { |
| 415 PrerenderSearchQuery(ASCIIToUTF16("pen")); | 415 PrerenderSearchQuery(ASCIIToUTF16("pen")); |
| 416 | 416 |
| 417 // Open a search results page. Make sure the InstantSearchPrerenderer cancels | 417 // Open a search results page. Make sure the InstantSearchPrerenderer cancels |
| 418 // the active prerender request for unsupported window dispositions. | 418 // the active prerender request for unsupported window dispositions. |
| 419 GURL url("https://www.google.com/alt#quux=pen&strk"); | 419 GURL url("https://www.google.com/alt#quux=pen&strk"); |
| 420 browser()->OpenURL(content::OpenURLParams(url, Referrer(), NEW_FOREGROUND_TAB, | 420 browser()->OpenURL(content::OpenURLParams( |
| 421 ui::PAGE_TRANSITION_TYPED, | 421 url, Referrer(), WindowOpenDisposition::NEW_FOREGROUND_TAB, |
| 422 false)); | 422 ui::PAGE_TRANSITION_TYPED, false)); |
| 423 content::WebContents* new_tab = | 423 content::WebContents* new_tab = |
| 424 browser()->tab_strip_model()->GetWebContentsAt(1); | 424 browser()->tab_strip_model()->GetWebContentsAt(1); |
| 425 EXPECT_NE(GetPrerenderURL(), new_tab->GetURL()); | 425 EXPECT_NE(GetPrerenderURL(), new_tab->GetURL()); |
| 426 EXPECT_EQ(url, new_tab->GetURL()); | 426 EXPECT_EQ(url, new_tab->GetURL()); |
| 427 EXPECT_EQ(static_cast<PrerenderHandle*>(NULL), prerender_handle()); | 427 EXPECT_EQ(static_cast<PrerenderHandle*>(NULL), prerender_handle()); |
| 428 } | 428 } |
| 429 | 429 |
| 430 class ReuseInstantSearchBasePageTest : public InstantSearchPrerendererTest { | 430 class ReuseInstantSearchBasePageTest : public InstantSearchPrerendererTest { |
| 431 public: | 431 public: |
| 432 ReuseInstantSearchBasePageTest() {} | 432 ReuseInstantSearchBasePageTest() {} |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 475 }; | 475 }; |
| 476 | 476 |
| 477 TEST_F(TestUsePrerenderPage, ExtractSearchTermsAndUsePrerenderPage) { | 477 TEST_F(TestUsePrerenderPage, ExtractSearchTermsAndUsePrerenderPage) { |
| 478 PrerenderSearchQuery(ASCIIToUTF16("foo")); | 478 PrerenderSearchQuery(ASCIIToUTF16("foo")); |
| 479 | 479 |
| 480 // Open a search results page. Query extraction flag is disabled in field | 480 // Open a search results page. Query extraction flag is disabled in field |
| 481 // trials. Search results page URL does not contain search terms replacement | 481 // trials. Search results page URL does not contain search terms replacement |
| 482 // key. Make sure UsePrerenderedPage() extracts the search terms from the URL | 482 // key. Make sure UsePrerenderedPage() extracts the search terms from the URL |
| 483 // and uses the prerendered page contents. | 483 // and uses the prerendered page contents. |
| 484 GURL url("https://www.google.com/alt#quux=foo"); | 484 GURL url("https://www.google.com/alt#quux=foo"); |
| 485 browser()->OpenURL(content::OpenURLParams(url, Referrer(), CURRENT_TAB, | 485 browser()->OpenURL(content::OpenURLParams(url, Referrer(), |
| 486 ui::PAGE_TRANSITION_TYPED, | 486 WindowOpenDisposition::CURRENT_TAB, |
| 487 false)); | 487 ui::PAGE_TRANSITION_TYPED, false)); |
| 488 EXPECT_EQ(GetPrerenderURL(), GetActiveWebContents()->GetURL()); | 488 EXPECT_EQ(GetPrerenderURL(), GetActiveWebContents()->GetURL()); |
| 489 EXPECT_EQ(static_cast<PrerenderHandle*>(NULL), prerender_handle()); | 489 EXPECT_EQ(static_cast<PrerenderHandle*>(NULL), prerender_handle()); |
| 490 } | 490 } |
| 491 | 491 |
| 492 TEST_F(TestUsePrerenderPage, DoNotUsePrerenderPage) { | 492 TEST_F(TestUsePrerenderPage, DoNotUsePrerenderPage) { |
| 493 PrerenderSearchQuery(ASCIIToUTF16("foo")); | 493 PrerenderSearchQuery(ASCIIToUTF16("foo")); |
| 494 | 494 |
| 495 // Do not use prerendered page for renderer initiated search request. | 495 // Do not use prerendered page for renderer initiated search request. |
| 496 GURL url("https://www.google.com/alt#quux=foo"); | 496 GURL url("https://www.google.com/alt#quux=foo"); |
| 497 browser()->OpenURL(content::OpenURLParams(url, Referrer(), CURRENT_TAB, | 497 browser()->OpenURL(content::OpenURLParams( |
| 498 ui::PAGE_TRANSITION_LINK, | 498 url, Referrer(), WindowOpenDisposition::CURRENT_TAB, |
| 499 true /* is_renderer_initiated */)); | 499 ui::PAGE_TRANSITION_LINK, true /* is_renderer_initiated */)); |
| 500 EXPECT_NE(GetPrerenderURL(), GetActiveWebContents()->GetURL()); | 500 EXPECT_NE(GetPrerenderURL(), GetActiveWebContents()->GetURL()); |
| 501 EXPECT_EQ(static_cast<PrerenderHandle*>(NULL), prerender_handle()); | 501 EXPECT_EQ(static_cast<PrerenderHandle*>(NULL), prerender_handle()); |
| 502 } | 502 } |
| 503 | 503 |
| 504 TEST_F(TestUsePrerenderPage, SetEmbeddedSearchRequestParams) { | 504 TEST_F(TestUsePrerenderPage, SetEmbeddedSearchRequestParams) { |
| 505 PrerenderSearchQuery(ASCIIToUTF16("foo")); | 505 PrerenderSearchQuery(ASCIIToUTF16("foo")); |
| 506 EXPECT_TRUE(browser()->instant_controller()); | 506 EXPECT_TRUE(browser()->instant_controller()); |
| 507 | 507 |
| 508 // Open a search results page. Query extraction flag is disabled in field | 508 // Open a search results page. Query extraction flag is disabled in field |
| 509 // trials. Search results page URL does not contain search terms replacement | 509 // trials. Search results page URL does not contain search terms replacement |
| 510 // key. | 510 // key. |
| 511 GURL url("https://www.google.com/url?bar=foo&aqs=chrome...0&ie=utf-8&oq=f"); | 511 GURL url("https://www.google.com/url?bar=foo&aqs=chrome...0&ie=utf-8&oq=f"); |
| 512 browser()->instant_controller()->OpenInstant(CURRENT_TAB, url); | 512 browser()->instant_controller()->OpenInstant( |
| 513 WindowOpenDisposition::CURRENT_TAB, url); |
| 513 content::MockRenderProcessHost* process = | 514 content::MockRenderProcessHost* process = |
| 514 static_cast<content::MockRenderProcessHost*>( | 515 static_cast<content::MockRenderProcessHost*>( |
| 515 prerender_contents()->GetRenderViewHost()->GetProcess()); | 516 prerender_contents()->GetRenderViewHost()->GetProcess()); |
| 516 const IPC::Message* message = process->sink().GetFirstMessageMatching( | 517 const IPC::Message* message = process->sink().GetFirstMessageMatching( |
| 517 ChromeViewMsg_SearchBoxSubmit::ID); | 518 ChromeViewMsg_SearchBoxSubmit::ID); |
| 518 ASSERT_TRUE(message); | 519 ASSERT_TRUE(message); |
| 519 | 520 |
| 520 // Verify the IPC message params. | 521 // Verify the IPC message params. |
| 521 std::tuple<base::string16, EmbeddedSearchRequestParams> params; | 522 std::tuple<base::string16, EmbeddedSearchRequestParams> params; |
| 522 ChromeViewMsg_SearchBoxSubmit::Read(message, ¶ms); | 523 ChromeViewMsg_SearchBoxSubmit::Read(message, ¶ms); |
| 523 EXPECT_EQ("foo", base::UTF16ToASCII(std::get<0>(params))); | 524 EXPECT_EQ("foo", base::UTF16ToASCII(std::get<0>(params))); |
| 524 EXPECT_EQ("f", base::UTF16ToASCII(std::get<1>(params).original_query)); | 525 EXPECT_EQ("f", base::UTF16ToASCII(std::get<1>(params).original_query)); |
| 525 EXPECT_EQ("utf-8", base::UTF16ToASCII(std::get<1>(params).input_encoding)); | 526 EXPECT_EQ("utf-8", base::UTF16ToASCII(std::get<1>(params).input_encoding)); |
| 526 EXPECT_EQ("", base::UTF16ToASCII(std::get<1>(params).rlz_parameter_value)); | 527 EXPECT_EQ("", base::UTF16ToASCII(std::get<1>(params).rlz_parameter_value)); |
| 527 EXPECT_EQ("chrome...0", | 528 EXPECT_EQ("chrome...0", |
| 528 base::UTF16ToASCII(std::get<1>(params).assisted_query_stats)); | 529 base::UTF16ToASCII(std::get<1>(params).assisted_query_stats)); |
| 529 } | 530 } |
| 530 #endif | 531 #endif |
| OLD | NEW |