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 |