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

Unified Diff: chrome/browser/search/search.cc

Issue 17022004: Replace --google-base-suggest-url and --instant-url with --google-base-url. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/search/search.h ('k') | chrome/browser/search/search_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/search/search.cc
===================================================================
--- chrome/browser/search/search.cc (revision 208572)
+++ chrome/browser/search/search.cc (working copy)
@@ -11,6 +11,7 @@
#include "base/rand_util.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
+#include "chrome/browser/google/google_util.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/search/instant_service.h"
#include "chrome/browser/search/instant_service_factory.h"
@@ -87,10 +88,13 @@
return NULL;
}
-GURL TemplateURLRefToGURL(const TemplateURLRef& ref, int start_margin) {
+GURL TemplateURLRefToGURL(const TemplateURLRef& ref,
+ int start_margin,
+ bool append_extra_query_params) {
TemplateURLRef::SearchTermsArgs search_terms_args =
TemplateURLRef::SearchTermsArgs(string16());
search_terms_args.omnibox_start_margin = start_margin;
+ search_terms_args.append_extra_query_params = append_extra_query_params;
return GURL(ref.ReplaceSearchTerms(search_terms_args));
}
@@ -102,22 +106,16 @@
other_url.SchemeIs(chrome::kHttpScheme)));
}
-bool IsCommandLineInstantURL(const GURL& url) {
- const CommandLine* cl = CommandLine::ForCurrentProcess();
- const GURL instant_url(cl->GetSwitchValueASCII(switches::kInstantURL));
- return instant_url.is_valid() && MatchesOrigin(url, instant_url);
-}
-
bool MatchesAnySearchURL(const GURL& url, TemplateURL* template_url) {
GURL search_url =
- TemplateURLRefToGURL(template_url->url_ref(), kDisableStartMargin);
+ TemplateURLRefToGURL(template_url->url_ref(), kDisableStartMargin, false);
if (search_url.is_valid() && MatchesOriginAndPath(url, search_url))
return true;
// "URLCount() - 1" because we already tested url_ref above.
for (size_t i = 0; i < template_url->URLCount() - 1; ++i) {
TemplateURLRef ref(template_url, i);
- search_url = TemplateURLRefToGURL(ref, kDisableStartMargin);
+ search_url = TemplateURLRefToGURL(ref, kDisableStartMargin, false);
if (search_url.is_valid() && MatchesOriginAndPath(url, search_url))
return true;
}
@@ -168,42 +166,38 @@
return instant_service->IsInstantProcess(process_host->GetID());
}
+// Returns true if |url| passes some basic checks that must succeed for it to be
+// usable as an instant URL:
+// (1) It contains the search terms replacement key of |template_url|, which is
+// expected to be the TemplateURL* for the default search provider.
+// (2) Either it has a secure scheme, or else the user has manually specified a
+// --google-base-url and it uses that base URL. (This allows testers to use
+// --google-base-url to point at non-HTTPS servers, which eases testing.)
+bool IsSuitableURLForInstant(const GURL& url, const TemplateURL* template_url) {
+ return template_url->HasSearchTermsReplacementKey(url) &&
+ (url.SchemeIsSecure() ||
+ google_util::StartsWithCommandLineGoogleBaseURL(url));
+}
+
// Returns true if |url| can be used as an Instant URL for |profile|.
bool IsInstantURL(const GURL& url, Profile* profile) {
+ if (!url.is_valid())
+ return false;
+
TemplateURL* template_url = GetDefaultSearchProviderTemplateURL(profile);
if (!template_url)
return false;
- const TemplateURLRef& instant_url_ref = template_url->instant_url_ref();
const bool extended_api_enabled = IsInstantExtendedAPIEnabled();
- GURL effective_url = url;
-
- if (IsCommandLineInstantURL(url))
- effective_url = CoerceCommandLineURLToTemplateURL(url, instant_url_ref,
- kDisableStartMargin);
-
- if (!effective_url.is_valid())
+ if (extended_api_enabled && !IsSuitableURLForInstant(url, template_url))
return false;
- if (extended_api_enabled && !effective_url.SchemeIsSecure())
- return false;
-
- if (extended_api_enabled &&
- !template_url->HasSearchTermsReplacementKey(effective_url))
- return false;
-
+ const TemplateURLRef& instant_url_ref = template_url->instant_url_ref();
const GURL instant_url =
- TemplateURLRefToGURL(instant_url_ref, kDisableStartMargin);
- if (!instant_url.is_valid())
- return false;
-
- if (MatchesOriginAndPath(effective_url, instant_url))
- return true;
-
- if (extended_api_enabled && MatchesAnySearchURL(effective_url, template_url))
- return true;
-
- return false;
+ TemplateURLRefToGURL(instant_url_ref, kDisableStartMargin, false);
+ return instant_url.is_valid() &&
+ (MatchesOriginAndPath(url, instant_url) ||
+ (extended_api_enabled && MatchesAnySearchURL(url, template_url)));
}
string16 GetSearchTermsImpl(const content::WebContents* contents,
@@ -222,7 +216,7 @@
Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext());
#if !defined(OS_IOS) && !defined(OS_ANDROID)
if (!IsRenderedInInstantProcess(contents, profile) &&
- (contents->GetController().GetLastCommittedEntry() == entry ||
+ ((entry == contents->GetController().GetLastCommittedEntry()) ||
!ShouldAssignURLToInstantRenderer(entry->GetURL(), profile)))
return string16();
#endif // !defined(OS_IOS) && !defined(OS_ANDROID)
@@ -302,21 +296,11 @@
return false;
}
-string16 GetSearchTermsFromURL(Profile* profile, const GURL& in_url) {
- GURL url(in_url);
+string16 GetSearchTermsFromURL(Profile* profile, const GURL& url) {
string16 search_terms;
-
TemplateURL* template_url = GetDefaultSearchProviderTemplateURL(profile);
- if (!template_url)
- return string16();
-
- if (IsCommandLineInstantURL(url))
- url = CoerceCommandLineURLToTemplateURL(url, template_url->url_ref(),
- kDisableStartMargin);
-
- if (url.SchemeIsSecure() && template_url->HasSearchTermsReplacementKey(url))
+ if (template_url && IsSuitableURLForInstant(url, template_url))
template_url->ExtractSearchTermsFromURL(url, &search_terms);
-
return search_terms;
}
@@ -474,37 +458,26 @@
if (!IsInstantCheckboxEnabled(profile))
return GURL();
+ // In non-extended mode, the checkbox must be checked.
const bool extended_api_enabled = IsInstantExtendedAPIEnabled();
-
- // In non-extended mode, the checkbox must be checked.
if (!extended_api_enabled && !IsInstantCheckboxChecked(profile))
return GURL();
TemplateURL* template_url = GetDefaultSearchProviderTemplateURL(profile);
- CommandLine* cl = CommandLine::ForCurrentProcess();
- if (cl->HasSwitch(switches::kInstantURL)) {
- GURL instant_url(cl->GetSwitchValueASCII(switches::kInstantURL));
- if (extended_api_enabled) {
- // Extended mode won't work if the search terms replacement key is absent.
- GURL coerced_url = CoerceCommandLineURLToTemplateURL(
- instant_url, template_url->instant_url_ref(), start_margin);
- if (!template_url->HasSearchTermsReplacementKey(coerced_url))
- return GURL();
- }
+ GURL instant_url =
+ TemplateURLRefToGURL(template_url->instant_url_ref(), start_margin, true);
+
+ // Extended mode requires HTTPS. Force it unless the base URL was overridden
+ // on the command line, in which case we allow HTTP (see comments on
+ // IsSuitableURLForInstant()).
+ if (!extended_api_enabled || instant_url.SchemeIsSecure() ||
+ google_util::StartsWithCommandLineGoogleBaseURL(instant_url))
return instant_url;
- }
- GURL instant_url =
- TemplateURLRefToGURL(template_url->instant_url_ref(), start_margin);
- if (extended_api_enabled && !instant_url.SchemeIsSecure()) {
- // Extended mode requires HTTPS. Force it if necessary.
- const std::string secure_scheme = chrome::kHttpsScheme;
- GURL::Replacements replacements;
- replacements.SetSchemeStr(secure_scheme);
- instant_url = instant_url.ReplaceComponents(replacements);
- }
-
- return instant_url;
+ GURL::Replacements replacements;
+ const std::string secure_scheme(chrome::kHttpsScheme);
+ replacements.SetSchemeStr(secure_scheme);
+ return instant_url.ReplaceComponents(replacements);
}
GURL GetLocalInstantURL(Profile* profile) {
@@ -726,34 +699,13 @@
return !!GetUInt64ValueForFlagWithDefault(flag, default_value ? 1 : 0, flags);
}
-// Coerces the commandline Instant URL to look like a template URL, so that we
-// can extract search terms from it.
-GURL CoerceCommandLineURLToTemplateURL(const GURL& instant_url,
- const TemplateURLRef& ref,
- int start_margin) {
- GURL search_url = TemplateURLRefToGURL(ref, start_margin);
-
- // NOTE(samarth): GURL returns temporaries which we must save because
- // GURL::Replacements expects the replacements to live until
- // ReplaceComponents is called.
- const std::string search_scheme = chrome::kHttpsScheme;
- const std::string search_host = search_url.host();
- const std::string search_port = search_url.port();
-
- GURL::Replacements replacements;
- replacements.SetSchemeStr(search_scheme);
- replacements.SetHostStr(search_host);
- replacements.SetPortStr(search_port);
- return instant_url.ReplaceComponents(replacements);
-}
-
bool DefaultSearchProviderSupportsInstant(Profile* profile) {
TemplateURL* template_url = GetDefaultSearchProviderTemplateURL(profile);
if (!template_url)
return false;
GURL instant_url = TemplateURLRefToGURL(template_url->instant_url_ref(),
- kDisableStartMargin);
+ kDisableStartMargin, false);
// Extended mode instant requires a search terms replacement key.
return instant_url.is_valid() &&
(!IsInstantExtendedAPIEnabled() ||
« no previous file with comments | « chrome/browser/search/search.h ('k') | chrome/browser/search/search_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698