Clear back stack after submitted query into preloaded page.

This ensures that the blank searchbox page does not appear in the back stack.

Bug: 5252128
Change-Id: I93e2e7f7c1c69e6e0e93b38acf1c7c9dc887ec19
diff --git a/src/com/android/browser/PreloadedTabControl.java b/src/com/android/browser/PreloadedTabControl.java
index ed066f2..4ffe6b4 100644
--- a/src/com/android/browser/PreloadedTabControl.java
+++ b/src/com/android/browser/PreloadedTabControl.java
@@ -21,6 +21,7 @@
 import android.webkit.SearchBox;
 
 import java.util.Map;
+import java.util.regex.Pattern;
 
 /**
  * Class to manage the controlling of preloaded tab.
@@ -74,6 +75,7 @@
         }
         maybeSetQuery(query, sb);
         if (LOGD_ENABLED) Log.d(LOGTAG, "Submitting query " + query);
+        final String currentUrl = mTab.getUrl();
         sb.onsubmit(new SearchBox.SearchBoxListener() {
             @Override
             public void onSubmitComplete(boolean called) {
@@ -83,7 +85,21 @@
                     if (LOGD_ENABLED) Log.d(LOGTAG, "Query not submitted; falling back");
                     loadUrl(fallbackUrl, fallbackHeaders);
                     // make sure that the failed, preloaded URL is cleared from the back stack
-                    mTab.clearBackStackWhenItemAdded(fallbackUrl);
+                    mTab.clearBackStackWhenItemAdded(Pattern.compile(
+                            "^" + Pattern.quote(fallbackUrl) + "$"));
+                } else {
+                    // ignore the next fragment change, to avoid leaving a blank page in the browser
+                    // after the query has been submitted.
+                    String currentWithoutFragment = Uri.parse(currentUrl)
+                            .buildUpon()
+                            .fragment(null)
+                            .toString();
+                    mTab.clearBackStackWhenItemAdded(
+                            Pattern.compile(
+                                    "^" +
+                                    Pattern.quote(currentWithoutFragment) +
+                                    "(\\#.*)?" +
+                                    "$"));
                 }
             }});
         return true;