Support for calling oncancel on the SearchBox API while preloading.

See also: I39a5765d2382f9c88c652d156a4917fd07cea3a4
Bug: 5035246
Change-Id: I7de6b8a718e4190480537412a8235892ee7c7aee
diff --git a/src/com/android/browser/PreloadRequestReceiver.java b/src/com/android/browser/PreloadRequestReceiver.java
index 5176176..ff3c8e3 100644
--- a/src/com/android/browser/PreloadRequestReceiver.java
+++ b/src/com/android/browser/PreloadRequestReceiver.java
@@ -39,6 +39,7 @@
     private static final String ACTION_PRELOAD = "android.intent.action.PRELOAD";
     static final String EXTRA_PRELOAD_ID = "preload_id";
     static final String EXTRA_PRELOAD_DISCARD = "preload_discard";
+    static final String EXTRA_SEARCHBOX_CANCEL = "searchbox_cancel";
     static final String EXTRA_SEARCHBOX_SETQUERY = "searchbox_query";
 
     @Override
@@ -61,6 +62,9 @@
         if (i.getBooleanExtra(EXTRA_PRELOAD_DISCARD, false)) {
             if (LOGD_ENABLED) Log.d(LOGTAG, "Got " + id + " preload discard request");
             Preloader.getInstance().discardPreload(id);
+        } else if (i.getBooleanExtra(EXTRA_SEARCHBOX_CANCEL, false)) {
+            if (LOGD_ENABLED) Log.d(LOGTAG, "Got " + id + " searchbox cancel request");
+            Preloader.getInstance().cancelSearchBoxPreload(id);
         } else {
             if (LOGD_ENABLED) Log.d(LOGTAG, "Got " + id + " preload request for " + url);
             if (url != null && url.startsWith("http")) {
diff --git a/src/com/android/browser/PreloadedTabControl.java b/src/com/android/browser/PreloadedTabControl.java
index 824c00b..ed066f2 100644
--- a/src/com/android/browser/PreloadedTabControl.java
+++ b/src/com/android/browser/PreloadedTabControl.java
@@ -89,6 +89,19 @@
         return true;
     }
 
+    public void searchBoxCancel() {
+        SearchBox sb = mTab.getWebView().getSearchBox();
+        if (sb != null) {
+            mLastQuery = null;
+            sb.oncancel(new SearchBox.SearchBoxListener(){
+                @Override
+                public void onCancelComplete(boolean called) {
+                    if (LOGD_ENABLED) Log.d(LOGTAG, "Query cancelled: " + called);
+                }
+            });
+        }
+    }
+
     public void loadUrlIfChanged(String url, Map<String, String> headers) {
         String currentUrl = mTab.getUrl();
         if (!TextUtils.isEmpty(currentUrl)) {
diff --git a/src/com/android/browser/Preloader.java b/src/com/android/browser/Preloader.java
index 3d30c96..3273a8c 100644
--- a/src/com/android/browser/Preloader.java
+++ b/src/com/android/browser/Preloader.java
@@ -106,6 +106,15 @@
         }
     }
 
+    public void cancelSearchBoxPreload(String id) {
+        PreloaderSession s = getSession(id);
+        if (s != null) {
+            s.touch(); // reset timer
+            PreloadedTabControl tab = s.getTabControl();
+            tab.searchBoxCancel();
+        }
+    }
+
     public void discardPreload(String id) {
         PreloaderSession s = takeSession(id);
         if (s != null) {