Add SearchBox support to preloader.

Depends on change: I0119243ed0e19e237c1f51de887af5c954f96693

Change-Id: I2a2d3ff3c9d0d79f34af4c8daee828fb4efd7519
diff --git a/src/com/android/browser/Preloader.java b/src/com/android/browser/Preloader.java
index 5a5f687..336b77a 100644
--- a/src/com/android/browser/Preloader.java
+++ b/src/com/android/browser/Preloader.java
@@ -18,9 +18,7 @@
 import android.content.Context;
 import android.os.Handler;
 import android.os.Looper;
-import android.util.AttributeSet;
 import android.util.Log;
-import android.webkit.WebView;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -31,7 +29,7 @@
 public class Preloader {
 
     private final static String LOGTAG = "browser.preloader";
-    private final static boolean LOGD_ENABLED = true;//com.android.browser.Browser.LOGD_ENABLED;
+    private final static boolean LOGD_ENABLED = com.android.browser.Browser.LOGD_ENABLED;
 
     private static final int PRERENDER_TIMEOUT_MILLIS = 30 * 1000; // 30s
 
@@ -76,19 +74,27 @@
         return s;
     }
 
-    public void handlePreloadRequest(String id, String url, Map<String, String> headers) {
+    public void handlePreloadRequest(String id, String url, Map<String, String> headers,
+            String searchBoxQuery) {
         PreloaderSession s = getSession(id);
         s.touch(); // reset timer
-        if (LOGD_ENABLED) Log.d(LOGTAG, "Preloading " + url);
-        s.getTab().loadUrl(url, headers);
+        PreloadedTabControl tab = s.getTabControl();
+        if (searchBoxQuery != null) {
+            tab.loadUrlIfChanged(url, headers);
+            tab.setQuery(searchBoxQuery);
+        } else {
+            tab.loadUrl(url, headers);
+        }
     }
 
     public void discardPreload(String id) {
         PreloaderSession s = takeSession(id);
         if (s != null) {
             if (LOGD_ENABLED) Log.d(LOGTAG, "Discard preload session " + id);
-            Tab t = s.getTab();
+            PreloadedTabControl t = s.getTabControl();
             t.destroy();
+        } else {
+            if (LOGD_ENABLED) Log.d(LOGTAG, "Ignored discard request " + id);
         }
     }
 
@@ -96,15 +102,15 @@
      * Return a preloaded tab, and remove it from the preloader. This is used when the
      * view is about to be displayed.
      */
-    public Tab getPreloadedTab(String id) {
+    public PreloadedTabControl getPreloadedTab(String id) {
         PreloaderSession s = takeSession(id);
         if (LOGD_ENABLED) Log.d(LOGTAG, "Showing preload session " + id + "=" + s);
-        return s == null ? null : s.getTab();
+        return s == null ? null : s.getTabControl();
     }
 
     private class PreloaderSession {
         private final String mId;
-        private final Tab mTab;
+        private final PreloadedTabControl mTabControl;
 
         private final Runnable mTimeoutTask = new Runnable(){
             @Override
@@ -115,7 +121,8 @@
 
         public PreloaderSession(String id) {
             mId = id;
-            mTab = new Tab(new PreloadController(mContext), mFactory.createWebView(false));
+            mTabControl = new PreloadedTabControl(
+                    new Tab(new PreloadController(mContext), mFactory.createWebView(false)));
             touch();
         }
 
@@ -128,8 +135,8 @@
             mHandler.postDelayed(mTimeoutTask, PRERENDER_TIMEOUT_MILLIS);
         }
 
-        public Tab getTab() {
-            return mTab;
+        public PreloadedTabControl getTabControl() {
+            return mTabControl;
         }
 
     }