Index: ios/web/web_state/js/resources/core.js |
diff --git a/ios/web/web_state/js/resources/core.js b/ios/web/web_state/js/resources/core.js |
index 652997168eafda3f1c050c94d3f574d7083fb1a7..0a477eb8b4587788de8f691bda7ac343092ab974 100644 |
--- a/ios/web/web_state/js/resources/core.js |
+++ b/ios/web/web_state/js/resources/core.js |
@@ -40,206 +40,6 @@ goog.require('__crWeb.message'); |
'message': event.message.toString()}); |
}); |
- /** |
- * Margin in points around touchable elements (e.g. links for custom context |
- * menu). |
- * @type {number} |
- */ |
- var touchMargin_ = 25; |
- |
- __gCrWeb['getPageWidth'] = function() { |
- var documentElement = document.documentElement; |
- var documentBody = document.body; |
- return Math.max(documentElement.clientWidth, |
- documentElement.scrollWidth, |
- documentElement.offsetWidth, |
- documentBody.scrollWidth, |
- documentBody.offsetWidth); |
- }; |
- |
- // Implementation of document.elementFromPoint that is working for iOS4 and |
- // iOS5 and that also goes into frames and iframes. |
- var elementFromPoint_ = function(x, y) { |
- var elementFromPointIsUsingViewPortCoordinates = function(win) { |
- if (win.pageYOffset > 0) { // Page scrolled down. |
- return (win.document.elementFromPoint( |
- 0, win.pageYOffset + win.innerHeight - 1) === null); |
- } |
- if (win.pageXOffset > 0) { // Page scrolled to the right. |
- return (win.document.elementFromPoint( |
- win.pageXOffset + win.innerWidth - 1, 0) === null); |
- } |
- return false; // No scrolling, don't care. |
- }; |
- |
- var newCoordinate = function(x, y) { |
- var coordinates = { |
- x: x, y: y, |
- viewPortX: x - window.pageXOffset, viewPortY: y - window.pageYOffset, |
- useViewPortCoordinates: false, |
- window: window |
- }; |
- return coordinates; |
- }; |
- |
- // Returns the coordinates of the upper left corner of |obj| in the |
- // coordinates of the window that |obj| is in. |
- var getPositionInWindow = function(obj) { |
- var coord = { x: 0, y: 0 }; |
- while (obj.offsetParent) { |
- coord.x += obj.offsetLeft; |
- coord.y += obj.offsetTop; |
- obj = obj.offsetParent; |
- } |
- return coord; |
- }; |
- |
- var elementsFromCoordinates = function(coordinates) { |
- coordinates.useViewPortCoordinates = coordinates.useViewPortCoordinates || |
- elementFromPointIsUsingViewPortCoordinates(coordinates.window); |
- |
- var currentElement = null; |
- if (coordinates.useViewPortCoordinates) { |
- currentElement = coordinates.window.document.elementFromPoint( |
- coordinates.viewPortX, coordinates.viewPortY); |
- } else { |
- currentElement = coordinates.window.document.elementFromPoint( |
- coordinates.x, coordinates.y); |
- } |
- // We have to check for tagName, because if a selection is made by the |
- // UIWebView, the element we will get won't have one. |
- if (!currentElement || !currentElement.tagName) { |
- return null; |
- } |
- if (currentElement.tagName.toLowerCase() === 'iframe' || |
- currentElement.tagName.toLowerCase() === 'frame') { |
- // The following condition is true if the iframe is in a different |
- // domain; no further information is accessible. |
- if (typeof(currentElement.contentWindow.document) == 'undefined') { |
- return currentElement; |
- } |
- var framePosition = getPositionInWindow(currentElement); |
- coordinates.viewPortX -= |
- framePosition.x - coordinates.window.pageXOffset; |
- coordinates.viewPortY -= |
- framePosition.y - coordinates.window.pageYOffset; |
- coordinates.window = currentElement.contentWindow; |
- coordinates.x -= framePosition.x + coordinates.window.pageXOffset; |
- coordinates.y -= framePosition.y + coordinates.window.pageYOffset; |
- return elementsFromCoordinates(coordinates); |
- } |
- return currentElement; |
- }; |
- |
- return elementsFromCoordinates(newCoordinate(x, y)); |
- }; |
- |
- var spiralCoordinates = function(x, y) { |
- var coordinates = []; |
- |
- var maxAngle = Math.PI * 2.0 * 3.0; |
- var pointCount = 30; |
- var angleStep = maxAngle / pointCount; |
- var speed = touchMargin_ / maxAngle; |
- |
- for (var index = 0; index < pointCount; index++) { |
- var angle = angleStep * index; |
- var radius = angle * speed; |
- |
- coordinates.push({x: x + Math.round(Math.cos(angle) * radius), |
- y: y + Math.round(Math.sin(angle) * radius)}); |
- } |
- |
- return coordinates; |
- }; |
- |
- // Returns the url of the image or link under the selected point. Returns an |
- // empty string if no links or images are found. |
- __gCrWeb['getElementFromPoint'] = function(x, y) { |
- var hitCoordinates = spiralCoordinates(x, y); |
- for (var index = 0; index < hitCoordinates.length; index++) { |
- var coordinates = hitCoordinates[index]; |
- |
- var element = elementFromPoint_(coordinates.x, coordinates.y); |
- if (!element || !element.tagName) { |
- // Nothing under the hit point. Try the next hit point. |
- continue; |
- } |
- |
- if (getComputedWebkitTouchCallout_(element) === 'none') |
- continue; |
- // Also check element's ancestors. A bound on the level is used here to |
- // avoid large overhead when no links or images are found. |
- var level = 0; |
- while (++level < 8 && element && element != document) { |
- var tagName = element.tagName; |
- if (!tagName) |
- continue; |
- tagName = tagName.toLowerCase(); |
- |
- if (tagName === 'input' || tagName === 'textarea' || |
- tagName === 'select' || tagName === 'option') { |
- // If the element is a known input element, stop the spiral search and |
- // return empty results. |
- return {}; |
- } |
- |
- if (tagName === 'a' && element.href) { |
- // Found a link. |
- return { |
- href: element.href, |
- referrerPolicy: getReferrerPolicy_(element), |
- innerText: element.innerText |
- }; |
- } |
- |
- if (tagName === 'img' && element.src) { |
- // Found an image. |
- var result = { |
- src: element.src, |
- referrerPolicy: getReferrerPolicy_() |
- }; |
- // Copy the title, if any. |
- if (element.title) { |
- result.title = element.title; |
- } |
- // Check if the image is also a link. |
- var parent = element.parentNode; |
- while (parent) { |
- if (parent.tagName && |
- parent.tagName.toLowerCase() === 'a' && |
- parent.href) { |
- // This regex identifies strings like void(0), |
- // void(0) ;void(0);, ;;;; |
- // which result in a NOP when executed as JavaScript. |
- var regex = RegExp("^javascript:(?:(?:void\\(0\\)|;)\\s*)+$"); |
- if (parent.href.match(regex)) { |
- parent = parent.parentNode; |
- continue; |
- } |
- result.href = parent.href; |
- result.referrerPolicy = getReferrerPolicy_(parent); |
- break; |
- } |
- parent = parent.parentNode; |
- } |
- return result; |
- } |
- element = element.parentNode; |
- } |
- } |
- return {}; |
- }; |
- |
- // Suppresses the next click such that they are not handled by JS click |
- // event handlers. |
- __gCrWeb['suppressNextClick'] = function() { |
- var suppressNextClick = function(evt) { |
- evt.preventDefault(); |
- document.removeEventListener('click', suppressNextClick, false); |
- }; |
- document.addEventListener('click', suppressNextClick); |
- }; |
// Returns true if the top window or any frames inside contain an input |
// field of type 'password'. |
@@ -338,31 +138,6 @@ goog.require('__crWeb.message'); |
__gCrWeb.message.invokeOnHost(command); |
}; |
- /** |
- * Gets the referrer policy to use for navigations away from the current page. |
- * If a link element is passed, and it includes a rel=noreferrer tag, that |
- * will override the page setting. |
- * @param {HTMLElement=} opt_linkElement The link triggering the navigation. |
- * @return {string} The policy string. |
- * @private |
- */ |
- var getReferrerPolicy_ = function(opt_linkElement) { |
- if (opt_linkElement) { |
- var rel = opt_linkElement.getAttribute('rel'); |
- if (rel && rel.toLowerCase() == 'noreferrer') { |
- return 'never'; |
- } |
- } |
- |
- var metaTags = document.getElementsByTagName('meta'); |
- for (var i = 0; i < metaTags.length; ++i) { |
- if (metaTags[i].name.toLowerCase() == 'referrer') { |
- return metaTags[i].content.toLowerCase(); |
- } |
- } |
- return 'default'; |
- }; |
- |
// Various aspects of global DOM behavior are overridden here. |
// A popstate event needs to be fired anytime the active history entry |
@@ -481,10 +256,6 @@ goog.require('__crWeb.message'); |
invokeOnHost_({'command': 'window.hashchange'}); |
}); |
- var getComputedWebkitTouchCallout_ = function(element) { |
- return window.getComputedStyle(element, null)['webkitTouchCallout']; |
- }; |
- |
// Flush the message queue. |
if (__gCrWeb.message) { |
__gCrWeb.message.invokeQueues(); |