Index: chrome/browser/search/search.cc |
diff --git a/chrome/browser/search/search.cc b/chrome/browser/search/search.cc |
index 5d665dcd012db1342d578ce9c5dceb6c85be85de..49784fa6431103e6c57880e192c58af79a05f35c 100644 |
--- a/chrome/browser/search/search.cc |
+++ b/chrome/browser/search/search.cc |
@@ -53,8 +53,12 @@ namespace { |
// The first token is always GroupN for some integer N, followed by a |
// space-delimited list of key:value pairs which correspond to these flags: |
const char kEmbeddedPageVersionFlagName[] = "espv"; |
-#if defined(OS_IOS) || defined(OS_ANDROID) |
+#if defined(OS_IOS) |
+const uint64 kEmbeddedPageVersionDefault = 1; |
+#elif defined(OS_ANDROID) |
const uint64 kEmbeddedPageVersionDefault = 1; |
+// Use this variant to enable EmbeddedSearch SearchBox API in the results page. |
+const uint64 kEmbeddedSearchEnabledVersion = 2; |
#else |
const uint64 kEmbeddedPageVersionDefault = 2; |
#endif |
@@ -256,15 +260,13 @@ base::string16 GetSearchTermsImpl(const content::WebContents* contents, |
// faking search terms in the URL. Random pages can't get into the Instant |
// renderer and scripting doesn't work cross-process, so if the page is in |
// the Instant process, we know it isn't being exploited. |
- // Since iOS and Android doesn't use the instant framework, these checks are |
- // disabled for the two platforms. |
Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext()); |
-#if !defined(OS_IOS) && !defined(OS_ANDROID) |
- if (!IsRenderedInInstantProcess(contents, profile) && |
+ if (IsInstantExtendedAPIEnabled() && |
+ !IsRenderedInInstantProcess(contents, profile) && |
((entry == contents->GetController().GetLastCommittedEntry()) || |
!ShouldAssignURLToInstantRenderer(entry->GetURL(), profile))) |
return base::string16(); |
-#endif // !defined(OS_IOS) && !defined(OS_ANDROID) |
+ |
// Check to see if search terms have already been extracted. |
base::string16 search_terms = GetSearchTermsFromNavigationEntry(entry); |
if (!search_terms.empty()) |
@@ -343,16 +345,25 @@ struct NewTabURLDetails { |
const int kDisableStartMargin = -1; |
bool IsInstantExtendedAPIEnabled() { |
-#if defined(OS_IOS) || defined(OS_ANDROID) |
+#if defined(OS_IOS) |
return false; |
+#elif defined(OS_ANDROID) |
+ return EmbeddedSearchPageVersion() == kEmbeddedSearchEnabledVersion; |
#else |
return true; |
-#endif // defined(OS_IOS) || defined(OS_ANDROID) |
+#endif // defined(OS_IOS) |
} |
// Determine what embedded search page version to request from the user's |
// default search provider. If 0, the embedded search UI should not be enabled. |
uint64 EmbeddedSearchPageVersion() { |
+#if defined(OS_ANDROID) |
+ if (CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kEnableEmbeddedSearchAPI)) { |
+ return kEmbeddedSearchEnabledVersion; |
+ } |
+#endif |
+ |
FieldTrialFlags flags; |
if (GetFieldTrialInfo(&flags)) { |
return GetUInt64ValueForFlagWithDefault(kEmbeddedPageVersionFlagName, |
@@ -430,13 +441,12 @@ base::string16 GetSearchTerms(const content::WebContents* contents) { |
if (!entry) |
return base::string16(); |
-#if !defined(OS_IOS) && !defined(OS_ANDROID) |
- // iOS and Android doesn't use the Instant framework, disable this check for |
- // the two platforms. |
- InstantSupportState state = GetInstantSupportStateFromNavigationEntry(*entry); |
- if (state == INSTANT_SUPPORT_NO) |
- return base::string16(); |
-#endif // !defined(OS_IOS) && !defined(OS_ANDROID) |
+ if (IsInstantExtendedAPIEnabled()) { |
+ InstantSupportState state = |
+ GetInstantSupportStateFromNavigationEntry(*entry); |
+ if (state == INSTANT_SUPPORT_NO) |
+ return base::string16(); |
+ } |
return GetSearchTermsImpl(contents, entry); |
} |