Merge "Fix blank page activity selection bug"
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 1e89af1..adc2677 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -2094,15 +2094,11 @@
         }
     }
 
-    protected void closeEmptyChildTab() {
+    protected void closeEmptyTab() {
         Tab current = mTabControl.getCurrentTab();
         if (current != null
                 && current.getWebView().copyBackForwardList().getSize() == 0) {
-            Tab parent = current.getParent();
-            if (parent != null) {
-                switchToTab(parent);
-                closeTab(current);
-            }
+            closeCurrentTab();
         }
     }
 
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index 672a1a6..8bf32b0 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -877,7 +877,7 @@
         // Sync state (in case of stop/timeout)
         mCurrentState.mUrl = view.getUrl();
         if (mCurrentState.mUrl == null) {
-            mCurrentState.mUrl = url != null ? url : "";
+            mCurrentState.mUrl = "";
         }
         mCurrentState.mOriginalUrl = view.getOriginalUrl();
         mCurrentState.mTitle = view.getTitle();
diff --git a/src/com/android/browser/UrlHandler.java b/src/com/android/browser/UrlHandler.java
index 74a58f3..73b265d 100644
--- a/src/com/android/browser/UrlHandler.java
+++ b/src/com/android/browser/UrlHandler.java
@@ -25,6 +25,7 @@
 import android.database.Cursor;
 import android.net.Uri;
 import android.os.AsyncTask;
+import android.provider.Browser;
 import android.util.Log;
 import android.webkit.WebView;
 
@@ -76,7 +77,7 @@
                 // If a new tab is created through JavaScript open to load this
                 // url, we would like to close it as we will load this url in a
                 // different Activity.
-                mController.closeEmptyChildTab();
+                mController.closeEmptyTab();
                 return true;
             }
             // wtai://wp/sd;dtmf
@@ -114,7 +115,7 @@
             }
         }
 
-        if (startActivityForUrl(url)) {
+        if (startActivityForUrl(tab, url)) {
             return true;
         }
 
@@ -125,7 +126,7 @@
         return false;
     }
 
-    boolean startActivityForUrl(String url) {
+    boolean startActivityForUrl(Tab tab, String url) {
       Intent intent;
       // perform generic parsing of the URI to turn it into an Intent.
       try {
@@ -148,7 +149,7 @@
               // If a new tab is created through JavaScript open to load this
               // url, we would like to close it as we will load this url in a
               // different Activity.
-              mController.closeEmptyChildTab();
+              mController.closeEmptyTab();
               return true;
           } else {
               return false;
@@ -159,6 +160,13 @@
       // security (only access to BROWSABLE activities).
       intent.addCategory(Intent.CATEGORY_BROWSABLE);
       intent.setComponent(null);
+      // Re-use the existing tab if the intent comes back to us
+      if (tab != null) {
+          if (tab.getAppId() == null) {
+              tab.setAppId("com.android.browser-" + tab.getId());
+          }
+          intent.putExtra(Browser.EXTRA_APPLICATION_ID, tab.getAppId());
+      }
       // Make sure webkit can handle it internally before checking for specialized
       // handlers. If webkit can't handle it internally, we need to call
       // startActivityIfNeeded
@@ -172,7 +180,7 @@
               // If a new tab is created through JavaScript open to load this
               // url, we would like to close it as we will load this url in a
               // different Activity.
-              mController.closeEmptyChildTab();
+              mController.closeEmptyTab();
               return true;
           }
       } catch (ActivityNotFoundException ex) {
@@ -262,7 +270,7 @@
             // Make sure the Tab was not closed while handling the task
             if (mController.getTabControl().getTabPosition(mTab) != -1) {
                 // If the Activity Manager is not invoked, load the URL directly
-                if (!startActivityForUrl(result)) {
+                if (!startActivityForUrl(mTab, result)) {
                     if (!handleMenuClick(mTab, result)) {
                         mController.loadUrl(mTab, result);
                     }