Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(339)

Side by Side Diff: chrome/browser/search/search.cc

Issue 1260033003: Partially componentize //chrome/browser/search/search.{h,cc} (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix compilation on iOS Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/search/search.h ('k') | chrome/browser/search/search_android_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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 "chrome/browser/search/search.h" 5 #include "chrome/browser/search/search.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/metrics/field_trial.h" 8 #include "base/metrics/field_trial.h"
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/prefs/pref_service.h" 10 #include "base/prefs/pref_service.h"
(...skipping 23 matching lines...) Expand all
34 #include "content/public/browser/navigation_entry.h" 34 #include "content/public/browser/navigation_entry.h"
35 #include "content/public/browser/render_process_host.h" 35 #include "content/public/browser/render_process_host.h"
36 #include "content/public/browser/web_contents.h" 36 #include "content/public/browser/web_contents.h"
37 37
38 #if defined(ENABLE_SUPERVISED_USERS) 38 #if defined(ENABLE_SUPERVISED_USERS)
39 #include "chrome/browser/supervised_user/supervised_user_service.h" 39 #include "chrome/browser/supervised_user/supervised_user_service.h"
40 #include "chrome/browser/supervised_user/supervised_user_service_factory.h" 40 #include "chrome/browser/supervised_user/supervised_user_service_factory.h"
41 #include "chrome/browser/supervised_user/supervised_user_url_filter.h" 41 #include "chrome/browser/supervised_user/supervised_user_url_filter.h"
42 #endif 42 #endif
43 43
44 namespace chrome { 44 namespace search {
45 45
46 namespace { 46 namespace {
47 47
48 const char kPrefetchSearchResultsOnSRP[] = "prefetch_results_srp"; 48 const char kPrefetchSearchResultsOnSRP[] = "prefetch_results_srp";
49 const char kAllowPrefetchNonDefaultMatch[] = "allow_prefetch_non_default_match";
50 const char kPrerenderInstantUrlOnOmniboxFocus[] = 49 const char kPrerenderInstantUrlOnOmniboxFocus[] =
51 "prerender_instant_url_on_omnibox_focus"; 50 "prerender_instant_url_on_omnibox_focus";
52 51
53 #if defined(OS_ANDROID)
54 const char kPrefetchSearchResultsFlagName[] = "prefetch_results";
55
56 // Controls whether to reuse prerendered Instant Search base page to commit any
57 // search query.
58 const char kReuseInstantSearchBasePage[] = "reuse_instant_search_base_page";
59 #endif
60
61 // Controls whether to use the alternate Instant search base URL. This allows 52 // Controls whether to use the alternate Instant search base URL. This allows
62 // experimentation of Instant search. 53 // experimentation of Instant search.
63 const char kUseAltInstantURL[] = "use_alternate_instant_url"; 54 const char kUseAltInstantURL[] = "use_alternate_instant_url";
64 const char kUseSearchPathForInstant[] = "use_search_path_for_instant"; 55 const char kUseSearchPathForInstant[] = "use_search_path_for_instant";
65 const char kAltInstantURLPath[] = "search"; 56 const char kAltInstantURLPath[] = "search";
66 const char kAltInstantURLQueryParams[] = "&qbp=1"; 57 const char kAltInstantURLQueryParams[] = "&qbp=1";
67 58
68 #if !defined(OS_IOS) && !defined(OS_ANDROID)
69 const char kEnableQueryExtractionFlagName[] = "query_extraction";
70 #endif
71 const char kShouldShowGoogleLocalNTPFlagName[] = "google_local_ntp"; 59 const char kShouldShowGoogleLocalNTPFlagName[] = "google_local_ntp";
72 60
73 // Status of the New Tab URL for the default Search provider. NOTE: Used in a 61 // Status of the New Tab URL for the default Search provider. NOTE: Used in a
74 // UMA histogram so values should only be added at the end and not reordered. 62 // UMA histogram so values should only be added at the end and not reordered.
75 enum NewTabURLState { 63 enum NewTabURLState {
76 // Valid URL that should be used. 64 // Valid URL that should be used.
77 NEW_TAB_URL_VALID = 0, 65 NEW_TAB_URL_VALID = 0,
78 66
79 // Corrupt state (e.g. no profile or template url). 67 // Corrupt state (e.g. no profile or template url).
80 NEW_TAB_URL_BAD = 1, 68 NEW_TAB_URL_BAD = 1,
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 search_terms_args.append_extra_query_params = append_extra_query_params; 133 search_terms_args.append_extra_query_params = append_extra_query_params;
146 search_terms_args.force_instant_results = force_instant_results; 134 search_terms_args.force_instant_results = force_instant_results;
147 return GURL(ref.ReplaceSearchTerms(search_terms_args, search_terms_data)); 135 return GURL(ref.ReplaceSearchTerms(search_terms_args, search_terms_data));
148 } 136 }
149 137
150 bool MatchesAnySearchURL(const GURL& url, 138 bool MatchesAnySearchURL(const GURL& url,
151 TemplateURL* template_url, 139 TemplateURL* template_url,
152 const SearchTermsData& search_terms_data) { 140 const SearchTermsData& search_terms_data) {
153 GURL search_url = TemplateURLRefToGURL(template_url->url_ref(), 141 GURL search_url = TemplateURLRefToGURL(template_url->url_ref(),
154 search_terms_data, false, false); 142 search_terms_data, false, false);
155 if (search_url.is_valid() && 143 if (search_url.is_valid() && MatchesOriginAndPath(url, search_url))
156 search::MatchesOriginAndPath(url, search_url))
157 return true; 144 return true;
158 145
159 // "URLCount() - 1" because we already tested url_ref above. 146 // "URLCount() - 1" because we already tested url_ref above.
160 for (size_t i = 0; i < template_url->URLCount() - 1; ++i) { 147 for (size_t i = 0; i < template_url->URLCount() - 1; ++i) {
161 TemplateURLRef ref(template_url, i); 148 TemplateURLRef ref(template_url, i);
162 search_url = TemplateURLRefToGURL(ref, search_terms_data, false, false); 149 search_url = TemplateURLRefToGURL(ref, search_terms_data, false, false);
163 if (search_url.is_valid() && 150 if (search_url.is_valid() && MatchesOriginAndPath(url, search_url))
164 search::MatchesOriginAndPath(url, search_url))
165 return true; 151 return true;
166 } 152 }
167 153
168 return false; 154 return false;
169 } 155 }
170 156
171
172
173 // |url| should either have a secure scheme or have a non-HTTPS base URL that
174 // the user specified using --google-base-url. (This allows testers to use
175 // --google-base-url to point at non-HTTPS servers, which eases testing.)
176 bool IsSuitableURLForInstant(const GURL& url, const TemplateURL* template_url) {
177 return template_url->HasSearchTermsReplacementKey(url) &&
178 (url.SchemeIsCryptographic() ||
179 google_util::StartsWithCommandLineGoogleBaseURL(url));
180 }
181
182 // Returns true if |url| can be used as an Instant URL for |profile|. 157 // Returns true if |url| can be used as an Instant URL for |profile|.
183 bool IsInstantURL(const GURL& url, Profile* profile) { 158 bool IsInstantURL(const GURL& url, Profile* profile) {
184 if (!IsInstantExtendedAPIEnabled()) 159 if (!IsInstantExtendedAPIEnabled())
185 return false; 160 return false;
186 161
187 if (!url.is_valid()) 162 if (!url.is_valid())
188 return false; 163 return false;
189 164
190 const GURL new_tab_url(GetNewTabPageURL(profile)); 165 const GURL new_tab_url(GetNewTabPageURL(profile));
191 if (new_tab_url.is_valid() && 166 if (new_tab_url.is_valid() && MatchesOriginAndPath(url, new_tab_url))
192 search::MatchesOriginAndPath(url, new_tab_url))
193 return true; 167 return true;
194 168
195 TemplateURL* template_url = GetDefaultSearchProviderTemplateURL(profile); 169 TemplateURL* template_url = GetDefaultSearchProviderTemplateURL(profile);
196 if (!template_url) 170 if (!template_url)
197 return false; 171 return false;
198 172
199 if (!IsSuitableURLForInstant(url, template_url)) 173 if (!IsSuitableURLForInstant(url, template_url))
200 return false; 174 return false;
201 175
202 const TemplateURLRef& instant_url_ref = template_url->instant_url_ref(); 176 const TemplateURLRef& instant_url_ref = template_url->instant_url_ref();
203 UIThreadSearchTermsData search_terms_data(profile); 177 UIThreadSearchTermsData search_terms_data(profile);
204 const GURL instant_url = TemplateURLRefToGURL( 178 const GURL instant_url = TemplateURLRefToGURL(
205 instant_url_ref, search_terms_data, false, false); 179 instant_url_ref, search_terms_data, false, false);
206 if (!instant_url.is_valid()) 180 if (!instant_url.is_valid())
207 return false; 181 return false;
208 182
209 if (search::MatchesOriginAndPath(url, instant_url)) 183 if (MatchesOriginAndPath(url, instant_url))
210 return true; 184 return true;
211 185
212 return IsQueryExtractionEnabled() && 186 return IsQueryExtractionEnabled() &&
213 MatchesAnySearchURL(url, template_url, search_terms_data); 187 MatchesAnySearchURL(url, template_url, search_terms_data);
214 } 188 }
215 189
216 base::string16 GetSearchTermsImpl(const content::WebContents* contents, 190 base::string16 GetSearchTermsImpl(const content::WebContents* contents,
217 const content::NavigationEntry* entry) { 191 const content::NavigationEntry* entry) {
218 if (!contents || !IsQueryExtractionEnabled()) 192 if (!contents || !IsQueryExtractionEnabled())
219 return base::string16(); 193 return base::string16();
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 return NewTabURLDetails(local_url, state); 278 return NewTabURLDetails(local_url, state);
305 } 279 }
306 } 280 }
307 281
308 GURL url; 282 GURL url;
309 NewTabURLState state; 283 NewTabURLState state;
310 }; 284 };
311 285
312 } // namespace 286 } // namespace
313 287
314 // Negative start-margin values prevent the "es_sm" parameter from being used.
315 const int kDisableStartMargin = -1;
316
317 std::string InstantExtendedEnabledParam(bool for_search) {
318 if (for_search && !chrome::IsQueryExtractionEnabled())
319 return std::string();
320 return std::string(google_util::kInstantExtendedAPIParam) + "=" +
321 base::Uint64ToString(EmbeddedSearchPageVersion()) + "&";
322 }
323
324 std::string ForceInstantResultsParam(bool for_prerender) {
325 return (for_prerender || !IsInstantExtendedAPIEnabled()) ?
326 "ion=1&" : std::string();
327 }
328
329 bool IsQueryExtractionEnabled() {
330 #if defined(OS_IOS) || defined(OS_ANDROID)
331 return true;
332 #else
333 if (!IsInstantExtendedAPIEnabled())
334 return false;
335
336 const base::CommandLine* command_line =
337 base::CommandLine::ForCurrentProcess();
338 if (command_line->HasSwitch(switches::kEnableQueryExtraction))
339 return true;
340
341 FieldTrialFlags flags;
342 return GetFieldTrialInfo(&flags) && GetBoolValueForFlagWithDefault(
343 kEnableQueryExtractionFlagName, false, flags);
344 #endif // defined(OS_IOS) || defined(OS_ANDROID)
345 }
346
347 base::string16 ExtractSearchTermsFromURL(Profile* profile, const GURL& url) { 288 base::string16 ExtractSearchTermsFromURL(Profile* profile, const GURL& url) {
348 if (url.is_valid() && url == GetSearchResultPrefetchBaseURL(profile)) { 289 if (url.is_valid() && url == GetSearchResultPrefetchBaseURL(profile)) {
349 // InstantSearchPrerenderer has the search query for the Instant search base 290 // InstantSearchPrerenderer has the search query for the Instant search base
350 // page. 291 // page.
351 InstantSearchPrerenderer* prerenderer = 292 InstantSearchPrerenderer* prerenderer =
352 InstantSearchPrerenderer::GetForProfile(profile); 293 InstantSearchPrerenderer::GetForProfile(profile);
353 // TODO(kmadhusu): Remove this CHECK after the investigation of 294 // TODO(kmadhusu): Remove this CHECK after the investigation of
354 // crbug.com/367204. 295 // crbug.com/367204.
355 CHECK(prerenderer); 296 CHECK(prerenderer);
356 return prerenderer->get_last_query(); 297 return prerenderer->get_last_query();
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
453 394
454 Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext()); 395 Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext());
455 if (!IsRenderedInInstantProcess(contents, profile)) 396 if (!IsRenderedInInstantProcess(contents, profile))
456 return false; 397 return false;
457 398
458 if (entry->GetURL() == GetLocalInstantURL(profile)) 399 if (entry->GetURL() == GetLocalInstantURL(profile))
459 return true; 400 return true;
460 401
461 GURL new_tab_url(GetNewTabPageURL(profile)); 402 GURL new_tab_url(GetNewTabPageURL(profile));
462 return new_tab_url.is_valid() && 403 return new_tab_url.is_valid() &&
463 search::MatchesOriginAndPath(entry->GetURL(), new_tab_url); 404 MatchesOriginAndPath(entry->GetURL(), new_tab_url);
464 } 405 }
465 406
466 bool IsSuggestPrefEnabled(Profile* profile) { 407 bool IsSuggestPrefEnabled(Profile* profile) {
467 return profile && !profile->IsOffTheRecord() && profile->GetPrefs() && 408 return profile && !profile->IsOffTheRecord() && profile->GetPrefs() &&
468 profile->GetPrefs()->GetBoolean(prefs::kSearchSuggestEnabled); 409 profile->GetPrefs()->GetBoolean(prefs::kSearchSuggestEnabled);
469 } 410 }
470 411
471 GURL GetInstantURL(Profile* profile, bool force_instant_results) { 412 GURL GetInstantURL(Profile* profile, bool force_instant_results) {
472 if (!IsInstantExtendedAPIEnabled() || !IsSuggestPrefEnabled(profile)) 413 if (!IsInstantExtendedAPIEnabled() || !IsSuggestPrefEnabled(profile))
473 return GURL(); 414 return GURL();
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 } 466 }
526 467
527 GURL GetNewTabPageURL(Profile* profile) { 468 GURL GetNewTabPageURL(Profile* profile) {
528 return NewTabURLDetails::ForProfile(profile).url; 469 return NewTabURLDetails::ForProfile(profile).url;
529 } 470 }
530 471
531 GURL GetSearchResultPrefetchBaseURL(Profile* profile) { 472 GURL GetSearchResultPrefetchBaseURL(Profile* profile) {
532 return ShouldPrefetchSearchResults() ? GetInstantURL(profile, true) : GURL(); 473 return ShouldPrefetchSearchResults() ? GetInstantURL(profile, true) : GURL();
533 } 474 }
534 475
535 bool ShouldPrefetchSearchResults() {
536 if (!IsInstantExtendedAPIEnabled())
537 return false;
538
539 #if defined(OS_ANDROID)
540 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
541 switches::kPrefetchSearchResults)) {
542 return true;
543 }
544
545 FieldTrialFlags flags;
546 return GetFieldTrialInfo(&flags) && GetBoolValueForFlagWithDefault(
547 kPrefetchSearchResultsFlagName, false, flags);
548 #else
549 return true;
550 #endif
551 }
552
553 bool ShouldAllowPrefetchNonDefaultMatch() {
554 if (!ShouldPrefetchSearchResults())
555 return false;
556
557 FieldTrialFlags flags;
558 return GetFieldTrialInfo(&flags) && GetBoolValueForFlagWithDefault(
559 kAllowPrefetchNonDefaultMatch, false, flags);
560 }
561
562 bool ShouldPrerenderInstantUrlOnOmniboxFocus() { 476 bool ShouldPrerenderInstantUrlOnOmniboxFocus() {
563 if (!ShouldPrefetchSearchResults()) 477 if (!ShouldPrefetchSearchResults())
564 return false; 478 return false;
565 479
566 FieldTrialFlags flags; 480 FieldTrialFlags flags;
567 return GetFieldTrialInfo(&flags) && GetBoolValueForFlagWithDefault( 481 return GetFieldTrialInfo(&flags) && GetBoolValueForFlagWithDefault(
568 kPrerenderInstantUrlOnOmniboxFocus, false, flags); 482 kPrerenderInstantUrlOnOmniboxFocus, false, flags);
569 } 483 }
570 484
571 bool ShouldReuseInstantSearchBasePage() {
572 if (!ShouldPrefetchSearchResults())
573 return false;
574
575 #if defined(OS_ANDROID)
576 FieldTrialFlags flags;
577 return GetFieldTrialInfo(&flags) && GetBoolValueForFlagWithDefault(
578 kReuseInstantSearchBasePage, false, flags);
579 #else
580 return true;
581 #endif
582 }
583
584 GURL GetLocalInstantURL(Profile* profile) { 485 GURL GetLocalInstantURL(Profile* profile) {
585 return GURL(chrome::kChromeSearchLocalNtpUrl); 486 return GURL(chrome::kChromeSearchLocalNtpUrl);
586 } 487 }
587 488
588 bool ShouldShowGoogleLocalNTP() { 489 bool ShouldShowGoogleLocalNTP() {
589 FieldTrialFlags flags; 490 FieldTrialFlags flags;
590 return !GetFieldTrialInfo(&flags) || GetBoolValueForFlagWithDefault( 491 return !GetFieldTrialInfo(&flags) || GetBoolValueForFlagWithDefault(
591 kShouldShowGoogleLocalNTPFlagName, true, flags); 492 kShouldShowGoogleLocalNTPFlagName, true, flags);
592 } 493 }
593 494
(...skipping 10 matching lines...) Expand all
604 url::Replacements<char> replacements; 505 url::Replacements<char> replacements;
605 std::string search_scheme(chrome::kChromeSearchScheme); 506 std::string search_scheme(chrome::kChromeSearchScheme);
606 replacements.SetScheme(search_scheme.data(), 507 replacements.SetScheme(search_scheme.data(),
607 url::Component(0, search_scheme.length())); 508 url::Component(0, search_scheme.length()));
608 509
609 // If this is the URL for a server-provided NTP, replace the host with 510 // If this is the URL for a server-provided NTP, replace the host with
610 // "remote-ntp". 511 // "remote-ntp".
611 std::string remote_ntp_host(chrome::kChromeSearchRemoteNtpHost); 512 std::string remote_ntp_host(chrome::kChromeSearchRemoteNtpHost);
612 NewTabURLDetails details = NewTabURLDetails::ForProfile(profile); 513 NewTabURLDetails details = NewTabURLDetails::ForProfile(profile);
613 if (details.state == NEW_TAB_URL_VALID && 514 if (details.state == NEW_TAB_URL_VALID &&
614 search::MatchesOriginAndPath(url, details.url)) { 515 MatchesOriginAndPath(url, details.url)) {
615 replacements.SetHost(remote_ntp_host.c_str(), 516 replacements.SetHost(remote_ntp_host.c_str(),
616 url::Component(0, remote_ntp_host.length())); 517 url::Component(0, remote_ntp_host.length()));
617 } 518 }
618 519
619 effective_url = effective_url.ReplaceComponents(replacements); 520 effective_url = effective_url.ReplaceComponents(replacements);
620 return effective_url; 521 return effective_url;
621 } 522 }
622 523
623 bool HandleNewTabURLRewrite(GURL* url, 524 bool HandleNewTabURLRewrite(GURL* url,
624 content::BrowserContext* browser_context) { 525 content::BrowserContext* browser_context) {
(...skipping 18 matching lines...) Expand all
643 bool HandleNewTabURLReverseRewrite(GURL* url, 544 bool HandleNewTabURLReverseRewrite(GURL* url,
644 content::BrowserContext* browser_context) { 545 content::BrowserContext* browser_context) {
645 if (!IsInstantExtendedAPIEnabled()) 546 if (!IsInstantExtendedAPIEnabled())
646 return false; 547 return false;
647 548
648 // Do nothing in incognito. 549 // Do nothing in incognito.
649 Profile* profile = Profile::FromBrowserContext(browser_context); 550 Profile* profile = Profile::FromBrowserContext(browser_context);
650 if (profile && profile->IsOffTheRecord()) 551 if (profile && profile->IsOffTheRecord())
651 return false; 552 return false;
652 553
653 if (search::MatchesOriginAndPath( 554 if (MatchesOriginAndPath(GURL(chrome::kChromeSearchLocalNtpUrl), *url)) {
654 GURL(chrome::kChromeSearchLocalNtpUrl), *url)) {
655 *url = GURL(chrome::kChromeUINewTabURL); 555 *url = GURL(chrome::kChromeUINewTabURL);
656 return true; 556 return true;
657 } 557 }
658 558
659 GURL new_tab_url(GetNewTabPageURL(profile)); 559 GURL new_tab_url(GetNewTabPageURL(profile));
660 if (new_tab_url.is_valid() && 560 if (new_tab_url.is_valid() && MatchesOriginAndPath(new_tab_url, *url)) {
661 search::MatchesOriginAndPath(new_tab_url, *url)) {
662 *url = GURL(chrome::kChromeUINewTabURL); 561 *url = GURL(chrome::kChromeUINewTabURL);
663 return true; 562 return true;
664 } 563 }
665 564
666 return false; 565 return false;
667 } 566 }
668 567
669 void SetInstantSupportStateInNavigationEntry(InstantSupportState state, 568 void SetInstantSupportStateInNavigationEntry(InstantSupportState state,
670 content::NavigationEntry* entry) { 569 content::NavigationEntry* entry) {
671 if (!entry) 570 if (!entry)
(...skipping 11 matching lines...) Expand all
683 582
684 return StringToInstantSupportState(value); 583 return StringToInstantSupportState(value);
685 } 584 }
686 585
687 bool ShouldPrefetchSearchResultsOnSRP() { 586 bool ShouldPrefetchSearchResultsOnSRP() {
688 FieldTrialFlags flags; 587 FieldTrialFlags flags;
689 return GetFieldTrialInfo(&flags) && GetBoolValueForFlagWithDefault( 588 return GetFieldTrialInfo(&flags) && GetBoolValueForFlagWithDefault(
690 kPrefetchSearchResultsOnSRP, false, flags); 589 kPrefetchSearchResultsOnSRP, false, flags);
691 } 590 }
692 591
693 void EnableQueryExtractionForTesting() {
694 base::CommandLine* cl = base::CommandLine::ForCurrentProcess();
695 cl->AppendSwitch(switches::kEnableQueryExtraction);
696 }
697
698 bool ShouldUseAltInstantURL() { 592 bool ShouldUseAltInstantURL() {
699 FieldTrialFlags flags; 593 FieldTrialFlags flags;
700 return GetFieldTrialInfo(&flags) && GetBoolValueForFlagWithDefault( 594 return GetFieldTrialInfo(&flags) && GetBoolValueForFlagWithDefault(
701 kUseAltInstantURL, false, flags); 595 kUseAltInstantURL, false, flags);
702 } 596 }
703 597
704 bool ShouldUseSearchPathForInstant() { 598 bool ShouldUseSearchPathForInstant() {
705 FieldTrialFlags flags; 599 FieldTrialFlags flags;
706 return GetFieldTrialInfo(&flags) && GetBoolValueForFlagWithDefault( 600 return GetFieldTrialInfo(&flags) && GetBoolValueForFlagWithDefault(
707 kUseSearchPathForInstant, false, flags); 601 kUseSearchPathForInstant, false, flags);
708 } 602 }
709 603
710 } // namespace chrome 604 } // namespace search
OLDNEW
« no previous file with comments | « chrome/browser/search/search.h ('k') | chrome/browser/search/search_android_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698