Fixed rendering noreferrer links
Additional fix for rendering noreferrer links. This change prevents
content layer from overriding newly created webcontent.
Change-Id: Iafde5b63366593bb44420fff6e1b7f7b80721b84
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index dcd63e0..861d68f 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -755,10 +755,11 @@
private final WebChromeClient mWebChromeClient = new WebChromeClient() {
// Helper method to create a new tab or sub window.
private void createWindow(final boolean dialog, final Message msg) {
- this.createWindow(dialog, msg, null);
+ this.createWindow(dialog, msg, null, false);
}
- private void createWindow(final boolean dialog, final Message msg, final String url) {
+ private void createWindow(final boolean dialog, final Message msg, final String url,
+ final boolean opener_suppressed) {
WebView.WebViewTransport transport =
(WebView.WebViewTransport) msg.obj;
if (dialog) {
@@ -768,7 +769,14 @@
} else {
final Tab newTab = mWebViewController.openTab(url,
Tab.this, true, true);
- transport.setWebView(newTab.getWebView());
+ // This is special case for rendering links on a webpage in
+ // a new tab. If opener is suppressed, the WebContents created
+ // by the content layer are not fully initialized. This check
+ // will prevent content layer from overriding WebContents
+ // created by new tab with the uninitialized instance.
+ if (!opener_suppressed) {
+ transport.setWebView(newTab.getWebView());
+ }
}
msg.sendToTarget();
}
@@ -824,11 +832,17 @@
// Short-circuit if this was a user gesture.
if (userGesture || !mSettings.blockPopupWindows()) {
CreateWindowParams windowParams = view.getCreateWindowParams();
- String url = null;
if (windowParams.mOpenerSuppressed) {
- url = windowParams.mURL;
+ createWindow(dialog, resultMsg, windowParams.mURL, true);
+ // This is special case for rendering links on a webpage in
+ // a new tab. If opener is suppressed, the WebContents created
+ // by the content layer are not fully initialized. Returning false
+ // will prevent content layer from overriding WebContents
+ // created by new tab with the uninitialized instance.
+ return false;
}
- createWindow(dialog, resultMsg, url);
+
+ createWindow(dialog, resultMsg);
return true;
}