Index: chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeCallback.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeCallback.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeCallback.java |
index 291faa36c799f685170a523ab45ded9f8d8d1010..0d899e64db9c4283c0e24c231269add26836c915 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeCallback.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeCallback.java |
@@ -10,8 +10,11 @@ import android.view.ActionMode; |
import android.view.Menu; |
import android.view.MenuItem; |
+import org.chromium.base.Callback; |
+import org.chromium.base.VisibleForTesting; |
import org.chromium.base.metrics.RecordUserAction; |
import org.chromium.chrome.browser.firstrun.FirstRunStatus; |
+import org.chromium.chrome.browser.locale.LocaleManager; |
import org.chromium.chrome.browser.omnibox.geo.GeolocationHeader; |
import org.chromium.chrome.browser.search_engines.TemplateUrlService; |
import org.chromium.chrome.browser.tab.Tab; |
@@ -63,7 +66,14 @@ public class ChromeActionModeCallback implements ActionMode.Callback { |
if (!mHelper.isActionModeValid()) return true; |
if (item.getItemId() == R.id.select_action_menu_web_search) { |
- search(); |
+ final String selectedText = mHelper.getSelectedText(); |
+ Callback<Boolean> callback = new Callback<Boolean>() { |
+ @Override |
+ public void onResult(Boolean result) { |
+ if (result != null && result) search(selectedText); |
+ } |
+ }; |
+ LocaleManager.getInstance().showSearchEnginePromoIfNeeded(mTab.getActivity(), callback); |
mHelper.finishActionMode(); |
} else { |
return mHelper.onActionItemClicked(mode, item); |
@@ -83,21 +93,29 @@ public class ChromeActionModeCallback implements ActionMode.Callback { |
} |
} |
- private void search() { |
- RecordUserAction.record("MobileActionMode.WebSearch"); |
- if (mTab.getTabModelSelector() == null) return; |
- |
- String query = ActionModeCallbackHelper.sanitizeQuery(mHelper.getSelectedText(), |
- ActionModeCallbackHelper.MAX_SEARCH_QUERY_LENGTH); |
- if (TextUtils.isEmpty(query)) return; |
- |
+ /** |
+ * Generate the LoadUrlParams necessary to load the specified search query. |
+ */ |
+ @VisibleForTesting |
+ protected LoadUrlParams generateUrlParamsForSearch(String query) { |
String url = TemplateUrlService.getInstance().getUrlForSearchQuery(query); |
String headers = GeolocationHeader.getGeoHeader(url, mTab); |
LoadUrlParams loadUrlParams = new LoadUrlParams(url); |
loadUrlParams.setVerbatimHeaders(headers); |
loadUrlParams.setTransitionType(PageTransition.GENERATED); |
- mTab.getTabModelSelector().openNewTab(loadUrlParams, |
+ return loadUrlParams; |
+ } |
+ |
+ private void search(String searchText) { |
+ RecordUserAction.record("MobileActionMode.WebSearch"); |
+ if (mTab.getTabModelSelector() == null) return; |
+ |
+ String query = ActionModeCallbackHelper.sanitizeQuery( |
+ searchText, ActionModeCallbackHelper.MAX_SEARCH_QUERY_LENGTH); |
+ if (TextUtils.isEmpty(query)) return; |
+ |
+ mTab.getTabModelSelector().openNewTab(generateUrlParamsForSearch(query), |
TabLaunchType.FROM_LONGPRESS_FOREGROUND, mTab, mTab.isIncognito()); |
} |
} |