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);