Fix set parent race condition

 Alter the openTab method to make sure that the parent is
 always set before trying to load a url. This is done because
 some web settings (useragent) are now inherited from the parent,
 and we need to make sure those are applied before the UA is sent
 to the server.

Change-Id: Ib33b75ac4648e8ba1ede9bb92406ea175aabb19d
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index e20a876..5b259a9 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -480,15 +480,8 @@
                                 break;
                             case R.id.open_newtab_context_menu_id:
                                 final Tab parent = mTabControl.getCurrentTab();
-                                final Tab newTab =
-                                        openTab(url,
-                                                (parent != null)
-                                                && parent.isPrivateBrowsingEnabled(),
-                                                !mSettings.openInBackground(),
-                                                true);
-                                if (newTab != null && newTab != parent) {
-                                    parent.addChildTab(newTab);
-                                }
+                                openTab(url, parent,
+                                        !mSettings.openInBackground(), true);
                                 break;
                             case R.id.copy_link_context_menu_id:
                                 copy(url);
@@ -1392,15 +1385,9 @@
                                     @Override
                                     public boolean onMenuItemClick(MenuItem item) {
                                         final Tab parent = mTabControl.getCurrentTab();
-                                        final Tab newTab =
-                                                openTab(extra,
-                                                        (parent != null)
-                                                        && parent.isPrivateBrowsingEnabled(),
-                                                        !mSettings.openInBackground(),
-                                                        true);
-                                        if (newTab != parent) {
-                                            parent.addChildTab(newTab);
-                                        }
+                                        openTab(extra, parent,
+                                                !mSettings.openInBackground(),
+                                                true);
                                         return true;
                                     }
                                 });
@@ -2225,8 +2212,23 @@
     @Override
     public Tab openTab(String url, boolean incognito, boolean setActive,
             boolean useCurrent) {
+        return openTab(url, incognito, setActive, useCurrent, null);
+    }
+
+    @Override
+    public Tab openTab(String url, Tab parent, boolean setActive,
+            boolean useCurrent) {
+        return openTab(url, (parent != null) && parent.isPrivateBrowsingEnabled(),
+                setActive, useCurrent, parent);
+    }
+
+    public Tab openTab(String url, boolean incognito, boolean setActive,
+            boolean useCurrent, Tab parent) {
         Tab tab = createNewTab(incognito, setActive, useCurrent);
         if (tab != null) {
+            if (parent != null && parent != tab) {
+                parent.addChildTab(tab);
+            }
             WebView w = tab.getWebView();
             if (url != null) {
                 loadUrl(w, url);
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index 8962475..4097334 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -855,11 +855,7 @@
                 transport.setWebView(mSubView);
             } else {
                 final Tab newTab = mWebViewController.openTab(null,
-                        Tab.this.isPrivateBrowsingEnabled(),
-                        true, true);
-                if (newTab != Tab.this) {
-                    Tab.this.addChildTab(newTab);
-                }
+                        Tab.this, true, true);
                 transport.setWebView(newTab.getWebView());
             }
             msg.sendToTarget();
diff --git a/src/com/android/browser/WebViewController.java b/src/com/android/browser/WebViewController.java
index bf3bdba..87703bd 100644
--- a/src/com/android/browser/WebViewController.java
+++ b/src/com/android/browser/WebViewController.java
@@ -104,6 +104,9 @@
     Tab openTab(String url, boolean incognito, boolean setActive,
             boolean useCurrent);
 
+    Tab openTab(String url, Tab parent, boolean setActive,
+            boolean useCurrent);
+
     boolean switchToTab(Tab tab);
 
     void closeTab(Tab tab);