Index: ios/web/web_state/js/resources/context_menu.js |
diff --git a/ios/web/web_state/js/resources/context_menu.js b/ios/web/web_state/js/resources/context_menu.js |
index ffd654bc361ad3ac54019befef6a87f13cc96606..3df19ecdd6f8fd64c557483bfe805b9932f6b6d9 100644 |
--- a/ios/web/web_state/js/resources/context_menu.js |
+++ b/ios/web/web_state/js/resources/context_menu.js |
@@ -13,9 +13,13 @@ goog.provide('__crWeb.contextMenu'); |
/** |
* Returns the url of the image or link under the selected point. Returns an |
- * empty string if no links or images are found. |
- * @param {number} x Horizontal center of the selected point. |
- * @param {number} y Vertical center of the selected point. |
+ * empty object if no links or images are found. |
+ * @param {number} x Horizontal center of the selected point in web view |
+ * coordinates. |
+ * @param {number} y Vertical center of the selected point in web view |
+ * coordinates. |
+ * @param {number} webViewWidth the width of web view. |
+ * @param {number} webViewHeight the height of web view. |
* @return {!Object} An object of the form { |
* href, // URL of the link under the point |
* innerText, // innerText of the link, if the selected element is a link |
@@ -32,7 +36,36 @@ goog.provide('__crWeb.contextMenu'); |
* from the current page. |
* </ul> |
*/ |
- __gCrWeb['getElementFromPoint'] = function(x, y) { |
+ __gCrWeb['getElementFromPoint'] = |
+ function(x, y, webViewWidth, webViewHeight) { |
+ var scale = getPageWidth() / webViewWidth; |
+ return getElementFromPointInPageCoordinates(x * scale, y * scale) |
+ }; |
+ |
+ /** |
+ * Suppresses the next click such that they are not handled by JS click |
+ * event handlers. |
+ * @type {void} |
+ */ |
+ __gCrWeb['suppressNextClick'] = function() { |
+ var suppressNextClick = function(evt) { |
+ evt.preventDefault(); |
+ document.removeEventListener('click', suppressNextClick, false); |
+ }; |
+ document.addEventListener('click', suppressNextClick); |
+ }; |
+ |
+ /** |
+ * Returns the url of the image or link under the selected point in page |
+ * coordinates. Returns an empty object if no links or images are found. |
+ * @param {number} x Horizontal center of the selected point in page |
+ * coordinates. |
+ * @param {number} y Vertical center of the selected point in page |
+ * coordinates. |
+ * @return {!Object} An object in the same form as |
+ * {@code getElementFromPoint} result. |
+ */ |
+ var getElementFromPointInPageCoordinates = function(x, y) { |
var hitCoordinates = spiralCoordinates_(x, y); |
for (var index = 0; index < hitCoordinates.length; index++) { |
var coordinates = hitCoordinates[index]; |
@@ -109,24 +142,11 @@ goog.provide('__crWeb.contextMenu'); |
}; |
/** |
- * Suppresses the next click such that they are not handled by JS click |
- * event handlers. |
- * @type {void} |
- */ |
- __gCrWeb['suppressNextClick'] = function() { |
- var suppressNextClick = function(evt) { |
- evt.preventDefault(); |
- document.removeEventListener('click', suppressNextClick, false); |
- }; |
- document.addEventListener('click', suppressNextClick); |
- }; |
- |
- /** |
* Returns the margin in points around touchable elements (e.g. links for |
* custom context menu). |
* @type {number} |
*/ |
- __gCrWeb['getPageWidth'] = function() { |
+ var getPageWidth = function() { |
var documentElement = document.documentElement; |
var documentBody = document.body; |
return Math.max(documentElement.clientWidth, |