Fixed rendering of noreferrer links in new tab
Rendering of a link that opens in a new tab and the
link contains "rel=noreferrer" tag was failing.
The noreferrer tag causes opener to be suppressed.
Due to a race condition in the code when OpenURL is
called the web content delegate is not yet configured.
This fix informs browser that opener is suppressed.
The browser calls explicit loadURL for this case.
Change-Id: Id9f45a934a5fe7df1f06dc753f93053556943249
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index 15ebd5e..cf900a2 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -78,9 +78,9 @@
import org.codeaurora.swe.WebHistoryItem;
import org.codeaurora.swe.WebView;
import org.codeaurora.swe.WebView.PictureListener;
+import org.codeaurora.swe.WebView.CreateWindowParams;
import org.codeaurora.swe.WebViewClient;
-
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
@@ -755,6 +755,10 @@
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);
+ }
+
+ private void createWindow(final boolean dialog, final Message msg, final String url) {
WebView.WebViewTransport transport =
(WebView.WebViewTransport) msg.obj;
if (dialog) {
@@ -762,7 +766,7 @@
mWebViewController.attachSubWindow(Tab.this);
transport.setWebView(mSubView);
} else {
- final Tab newTab = mWebViewController.openTab(null,
+ final Tab newTab = mWebViewController.openTab(url,
Tab.this, true, true);
transport.setWebView(newTab.getWebView());
}
@@ -819,7 +823,12 @@
// Short-circuit if this was a user gesture.
if (userGesture || !mSettings.blockPopupWindows()) {
- createWindow(dialog, resultMsg);
+ CreateWindowParams windowParams = view.getCreateWindowParams();
+ String url = null;
+ if (windowParams.mOpenerSuppressed) {
+ url = windowParams.mURL;
+ }
+ createWindow(dialog, resultMsg, url);
return true;
}