OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/macros.h" | 8 #include "base/macros.h" |
| 9 #include "base/memory/ptr_util.h" |
9 #include "base/metrics/field_trial.h" | 10 #include "base/metrics/field_trial.h" |
10 #include "base/metrics/histogram_base.h" | 11 #include "base/metrics/histogram_base.h" |
11 #include "base/metrics/histogram_samples.h" | 12 #include "base/metrics/histogram_samples.h" |
12 #include "base/strings/utf_string_conversions.h" | 13 #include "base/strings/utf_string_conversions.h" |
13 #include "build/build_config.h" | 14 #include "build/build_config.h" |
14 #include "chrome/browser/search/instant_service.h" | 15 #include "chrome/browser/search/instant_service.h" |
15 #include "chrome/browser/search/instant_service_factory.h" | 16 #include "chrome/browser/search/instant_service_factory.h" |
16 #include "chrome/browser/search/search.h" | 17 #include "chrome/browser/search/search.h" |
17 #include "chrome/browser/search_engines/template_url_service_factory.h" | 18 #include "chrome/browser/search_engines/template_url_service_factory.h" |
18 #include "chrome/browser/search_engines/ui_thread_search_terms_data.h" | 19 #include "chrome/browser/search_engines/ui_thread_search_terms_data.h" |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
66 data.SetURL("http://foo.com/url?bar={searchTerms}"); | 67 data.SetURL("http://foo.com/url?bar={searchTerms}"); |
67 data.instant_url = "http://foo.com/instant?" | 68 data.instant_url = "http://foo.com/instant?" |
68 "{google:forceInstantResults}foo=foo#foo=foo&strk"; | 69 "{google:forceInstantResults}foo=foo#foo=foo&strk"; |
69 if (set_ntp_url) { | 70 if (set_ntp_url) { |
70 data.new_tab_url = (insecure_ntp_url ? "http" : "https") + | 71 data.new_tab_url = (insecure_ntp_url ? "http" : "https") + |
71 std::string("://foo.com/newtab?strk"); | 72 std::string("://foo.com/newtab?strk"); |
72 } | 73 } |
73 data.alternate_urls.push_back("http://foo.com/alt#quux={searchTerms}"); | 74 data.alternate_urls.push_back("http://foo.com/alt#quux={searchTerms}"); |
74 data.search_terms_replacement_key = "strk"; | 75 data.search_terms_replacement_key = "strk"; |
75 | 76 |
76 TemplateURL* template_url = new TemplateURL(data); | 77 TemplateURL* template_url = |
77 // Takes ownership of |template_url|. | 78 template_url_service->Add(base::MakeUnique<TemplateURL>(data)); |
78 template_url_service->Add(template_url); | |
79 template_url_service->SetUserSelectedDefaultSearchProvider(template_url); | 79 template_url_service->SetUserSelectedDefaultSearchProvider(template_url); |
80 } | 80 } |
81 | 81 |
82 // Build an Instant URL with or without a valid search terms replacement key | 82 // Build an Instant URL with or without a valid search terms replacement key |
83 // as per |has_search_term_replacement_key|. Set that URL as the instant URL | 83 // as per |has_search_term_replacement_key|. Set that URL as the instant URL |
84 // for the default search provider. | 84 // for the default search provider. |
85 void SetDefaultInstantTemplateUrl(bool has_search_term_replacement_key) { | 85 void SetDefaultInstantTemplateUrl(bool has_search_term_replacement_key) { |
86 TemplateURLService* template_url_service = | 86 TemplateURLService* template_url_service = |
87 TemplateURLServiceFactory::GetForProfile(profile()); | 87 TemplateURLServiceFactory::GetForProfile(profile()); |
88 | 88 |
89 static const char kInstantURLWithStrk[] = | 89 static const char kInstantURLWithStrk[] = |
90 "http://foo.com/instant?foo=foo#foo=foo&strk"; | 90 "http://foo.com/instant?foo=foo#foo=foo&strk"; |
91 static const char kInstantURLNoStrk[] = | 91 static const char kInstantURLNoStrk[] = |
92 "http://foo.com/instant?foo=foo#foo=foo"; | 92 "http://foo.com/instant?foo=foo#foo=foo"; |
93 | 93 |
94 TemplateURLData data; | 94 TemplateURLData data; |
95 data.SetShortName(base::ASCIIToUTF16("foo.com")); | 95 data.SetShortName(base::ASCIIToUTF16("foo.com")); |
96 data.SetURL("http://foo.com/url?bar={searchTerms}"); | 96 data.SetURL("http://foo.com/url?bar={searchTerms}"); |
97 data.instant_url = (has_search_term_replacement_key ? | 97 data.instant_url = (has_search_term_replacement_key ? |
98 kInstantURLWithStrk : kInstantURLNoStrk); | 98 kInstantURLWithStrk : kInstantURLNoStrk); |
99 data.search_terms_replacement_key = "strk"; | 99 data.search_terms_replacement_key = "strk"; |
100 | 100 |
101 TemplateURL* template_url = new TemplateURL(data); | 101 TemplateURL* template_url = |
102 // Takes ownership of |template_url|. | 102 template_url_service->Add(base::MakeUnique<TemplateURL>(data)); |
103 template_url_service->Add(template_url); | |
104 template_url_service->SetUserSelectedDefaultSearchProvider(template_url); | 103 template_url_service->SetUserSelectedDefaultSearchProvider(template_url); |
105 } | 104 } |
106 | 105 |
107 bool InInstantProcess(const content::WebContents* contents) { | 106 bool InInstantProcess(const content::WebContents* contents) { |
108 InstantService* instant_service = | 107 InstantService* instant_service = |
109 InstantServiceFactory::GetForProfile(profile()); | 108 InstantServiceFactory::GetForProfile(profile()); |
110 return instant_service->IsInstantProcess( | 109 return instant_service->IsInstantProcess( |
111 contents->GetRenderProcessHost()->GetID()); | 110 contents->GetRenderProcessHost()->GetID()); |
112 } | 111 } |
113 | 112 |
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
488 } | 487 } |
489 | 488 |
490 TEST_F(SearchTest, CommandLineOverrides) { | 489 TEST_F(SearchTest, CommandLineOverrides) { |
491 TemplateURLService* template_url_service = | 490 TemplateURLService* template_url_service = |
492 TemplateURLServiceFactory::GetForProfile(profile()); | 491 TemplateURLServiceFactory::GetForProfile(profile()); |
493 TemplateURLData data; | 492 TemplateURLData data; |
494 data.SetShortName(base::ASCIIToUTF16("Google")); | 493 data.SetShortName(base::ASCIIToUTF16("Google")); |
495 data.SetURL("{google:baseURL}search?q={searchTerms}"); | 494 data.SetURL("{google:baseURL}search?q={searchTerms}"); |
496 data.instant_url = "{google:baseURL}webhp?strk"; | 495 data.instant_url = "{google:baseURL}webhp?strk"; |
497 data.search_terms_replacement_key = "strk"; | 496 data.search_terms_replacement_key = "strk"; |
498 TemplateURL* template_url = new TemplateURL(data); | 497 TemplateURL* template_url = |
499 // Takes ownership of |template_url|. | 498 template_url_service->Add(base::MakeUnique<TemplateURL>(data)); |
500 template_url_service->Add(template_url); | |
501 template_url_service->SetUserSelectedDefaultSearchProvider(template_url); | 499 template_url_service->SetUserSelectedDefaultSearchProvider(template_url); |
502 | 500 |
503 // By default, Instant Extended forces the instant URL to be HTTPS, so even if | 501 // By default, Instant Extended forces the instant URL to be HTTPS, so even if |
504 // we set a Google base URL that is HTTP, we should get an HTTPS URL. | 502 // we set a Google base URL that is HTTP, we should get an HTTPS URL. |
505 UIThreadSearchTermsData::SetGoogleBaseURL("http://www.foo.com/"); | 503 UIThreadSearchTermsData::SetGoogleBaseURL("http://www.foo.com/"); |
506 GURL instant_url(GetInstantURL(profile(), false)); | 504 GURL instant_url(GetInstantURL(profile(), false)); |
507 ASSERT_TRUE(instant_url.is_valid()); | 505 ASSERT_TRUE(instant_url.is_valid()); |
508 EXPECT_EQ("https://www.foo.com/webhp?strk", instant_url.spec()); | 506 EXPECT_EQ("https://www.foo.com/webhp?strk", instant_url.spec()); |
509 | 507 |
510 // However, if the Google base URL is specified on the command line, the | 508 // However, if the Google base URL is specified on the command line, the |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
621 TemplateURLData data; | 619 TemplateURLData data; |
622 data.SetShortName(base::ASCIIToUTF16("localhost")); | 620 data.SetShortName(base::ASCIIToUTF16("localhost")); |
623 data.SetURL("https://[::1]:1993/url?bar={searchTerms}"); | 621 data.SetURL("https://[::1]:1993/url?bar={searchTerms}"); |
624 data.instant_url = | 622 data.instant_url = |
625 "https://[::1]:1993/instant?" | 623 "https://[::1]:1993/instant?" |
626 "{google:forceInstantResults}foo=foo#foo=foo&strk"; | 624 "{google:forceInstantResults}foo=foo#foo=foo&strk"; |
627 data.new_tab_url = "https://[::1]:1993/newtab?strk"; | 625 data.new_tab_url = "https://[::1]:1993/newtab?strk"; |
628 data.alternate_urls.push_back("https://[::1]:1993/alt#quux={searchTerms}"); | 626 data.alternate_urls.push_back("https://[::1]:1993/alt#quux={searchTerms}"); |
629 data.search_terms_replacement_key = "strk"; | 627 data.search_terms_replacement_key = "strk"; |
630 | 628 |
631 TemplateURL* template_url = new TemplateURL(data); | 629 TemplateURL* template_url = |
632 template_url_service->Add(template_url); // Takes ownership of |template_url|. | 630 template_url_service->Add(base::MakeUnique<TemplateURL>(data)); |
633 template_url_service->SetUserSelectedDefaultSearchProvider(template_url); | 631 template_url_service->SetUserSelectedDefaultSearchProvider(template_url); |
634 | 632 |
635 EXPECT_TRUE(ShouldAssignURLToInstantRenderer( | 633 EXPECT_TRUE(ShouldAssignURLToInstantRenderer( |
636 GURL("https://[::1]:1993/newtab?lala"), profile())); | 634 GURL("https://[::1]:1993/newtab?lala"), profile())); |
637 EXPECT_FALSE(ShouldAssignURLToInstantRenderer( | 635 EXPECT_FALSE(ShouldAssignURLToInstantRenderer( |
638 GURL("https://[::1]:1992/newtab?lala"), profile())); | 636 GURL("https://[::1]:1992/newtab?lala"), profile())); |
639 EXPECT_EQ(GURL("chrome-search://remote-ntp/newtab?lala"), | 637 EXPECT_EQ(GURL("chrome-search://remote-ntp/newtab?lala"), |
640 GetEffectiveURLForInstant(GURL("https://[::1]:1993/newtab?lala"), | 638 GetEffectiveURLForInstant(GURL("https://[::1]:1993/newtab?lala"), |
641 profile())); | 639 profile())); |
642 EXPECT_EQ(GURL("chrome-search://[::1]/instant?strk"), | 640 EXPECT_EQ(GURL("chrome-search://[::1]/instant?strk"), |
643 GetEffectiveURLForInstant(GURL("https://[::1]:1993/instant?strk"), | 641 GetEffectiveURLForInstant(GURL("https://[::1]:1993/instant?strk"), |
644 profile())); | 642 profile())); |
645 EXPECT_FALSE(ShouldAssignURLToInstantRenderer( | 643 EXPECT_FALSE(ShouldAssignURLToInstantRenderer( |
646 GURL("https://[::1]:1993/unregistered-path?strk"), profile())); | 644 GURL("https://[::1]:1993/unregistered-path?strk"), profile())); |
647 } | 645 } |
648 | 646 |
649 class SearchURLTest : public SearchTest { | 647 class SearchURLTest : public SearchTest { |
650 protected: | 648 protected: |
651 void SetSearchProvider(bool set_ntp_url, bool insecure_ntp_url) override { | 649 void SetSearchProvider(bool set_ntp_url, bool insecure_ntp_url) override { |
652 TemplateURLService* template_url_service = | 650 TemplateURLService* template_url_service = |
653 TemplateURLServiceFactory::GetForProfile(profile()); | 651 TemplateURLServiceFactory::GetForProfile(profile()); |
654 TemplateURLData data; | 652 TemplateURLData data; |
655 data.SetShortName(base::ASCIIToUTF16("Google")); | 653 data.SetShortName(base::ASCIIToUTF16("Google")); |
656 data.SetURL("{google:baseURL}search?" | 654 data.SetURL("{google:baseURL}search?" |
657 "{google:instantExtendedEnabledParameter}q={searchTerms}"); | 655 "{google:instantExtendedEnabledParameter}q={searchTerms}"); |
658 data.search_terms_replacement_key = "espv"; | 656 data.search_terms_replacement_key = "espv"; |
659 template_url_ = new TemplateURL(data); | 657 template_url_ = |
660 // |template_url_service| takes ownership of |template_url_|. | 658 template_url_service->Add(base::MakeUnique<TemplateURL>(data)); |
661 template_url_service->Add(template_url_); | |
662 template_url_service->SetUserSelectedDefaultSearchProvider(template_url_); | 659 template_url_service->SetUserSelectedDefaultSearchProvider(template_url_); |
663 } | 660 } |
664 | 661 |
665 TemplateURL* template_url_; | 662 TemplateURL* template_url_; |
666 }; | 663 }; |
667 | 664 |
668 TEST_F(SearchURLTest, QueryExtractionDisabled) { | 665 TEST_F(SearchURLTest, QueryExtractionDisabled) { |
669 UIThreadSearchTermsData::SetGoogleBaseURL("http://www.google.com/"); | 666 UIThreadSearchTermsData::SetGoogleBaseURL("http://www.google.com/"); |
670 TemplateURLRef::SearchTermsArgs search_terms_args(base::ASCIIToUTF16("foo")); | 667 TemplateURLRef::SearchTermsArgs search_terms_args(base::ASCIIToUTF16("foo")); |
671 GURL result(template_url_->url_ref().ReplaceSearchTerms( | 668 GURL result(template_url_->url_ref().ReplaceSearchTerms( |
672 search_terms_args, UIThreadSearchTermsData(profile()))); | 669 search_terms_args, UIThreadSearchTermsData(profile()))); |
673 ASSERT_TRUE(result.is_valid()); | 670 ASSERT_TRUE(result.is_valid()); |
674 // Query extraction is disabled. Make sure | 671 // Query extraction is disabled. Make sure |
675 // {google:instantExtendedEnabledParameter} is not set in the search URL. | 672 // {google:instantExtendedEnabledParameter} is not set in the search URL. |
676 EXPECT_EQ("http://www.google.com/search?q=foo", result.spec()); | 673 EXPECT_EQ("http://www.google.com/search?q=foo", result.spec()); |
677 } | 674 } |
678 | 675 |
679 } // namespace search | 676 } // namespace search |
OLD | NEW |