| 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());
|
| }
|
| }
|
|
|