Use requestFocusNodeHref to get the link for an image.
Bug:3198707
We were attempting to use WebView.HitTestResult.getExtra()
to find the href. For normal links, this is okay. For
image links, this is the URL of the image itself. Instead,
use requestFocusNodeHref, which will get the URL of the link.
Change-Id: I759a56e461195bc2a904f4da4ef93a379d7db0b5
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 83bbc63..9f9b451 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -394,6 +394,13 @@
case R.id.view_image_context_menu_id:
loadUrlFromContext(getCurrentTopWebView(), url);
break;
+ case R.id.open_newtab_context_menu_id:
+ final Tab parent = mTabControl.getCurrentTab();
+ final Tab newTab = openTab(url, false);
+ if (newTab != null && newTab != parent) {
+ parent.addChildTab(newTab);
+ }
+ break;
case R.id.bookmark_context_menu_id:
Intent intent = new Intent(mActivity,
AddBookmarkPage.class);
@@ -1156,7 +1163,7 @@
if (!(v instanceof WebView)) {
return;
}
- WebView webview = (WebView) v;
+ final WebView webview = (WebView) v;
WebView.HitTestResult result = webview.getHitTestResult();
if (result == null) {
return;
@@ -1253,17 +1260,36 @@
= menu.findItem(R.id.open_newtab_context_menu_id);
newTabItem.setVisible(showNewTab);
if (showNewTab) {
- newTabItem.setOnMenuItemClickListener(
- new MenuItem.OnMenuItemClickListener() {
- public boolean onMenuItemClick(MenuItem item) {
- final Tab parent = mTabControl.getCurrentTab();
- final Tab newTab = openTab(extra, false);
- if (newTab != parent) {
- parent.addChildTab(newTab);
+ if (WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE == type) {
+ newTabItem.setOnMenuItemClickListener(
+ new MenuItem.OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ final HashMap<String, WebView> hrefMap =
+ new HashMap<String, WebView>();
+ hrefMap.put("webview", webview);
+ final Message msg = mHandler.obtainMessage(
+ FOCUS_NODE_HREF,
+ R.id.open_newtab_context_menu_id,
+ 0, hrefMap);
+ webview.requestFocusNodeHref(msg);
+ return true;
}
- return true;
- }
- });
+ });
+ } else {
+ newTabItem.setOnMenuItemClickListener(
+ new MenuItem.OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ final Tab parent = mTabControl.getCurrentTab();
+ final Tab newTab = openTab(extra, false);
+ if (newTab != parent) {
+ parent.addChildTab(newTab);
+ }
+ return true;
+ }
+ });
+ }
}
menu.findItem(R.id.bookmark_context_menu_id).setVisible(
Bookmarks.urlHasAcceptableScheme(extra));