diff --git a/mobile/android/chrome/content/browser.js b/mobile/android/chrome/content/browser.js index 257c39ed57d4..99bfc0ed90df 100644 --- a/mobile/android/chrome/content/browser.js +++ b/mobile/android/chrome/content/browser.js @@ -2218,7 +2218,7 @@ Tab.prototype = { var BrowserEventHandler = { init: function init() { Services.obs.addObserver(this, "Gesture:SingleTap", false); - Services.obs.addObserver(this, "Gesture:ShowPress", false); + document.addEventListener("touchstart", this, false); Services.obs.addObserver(this, "Gesture:CancelTouch", false); Services.obs.addObserver(this, "Gesture:DoubleTap", false); Services.obs.addObserver(this, "Gesture:Scroll", false); @@ -2227,6 +2227,34 @@ var BrowserEventHandler = { BrowserApp.deck.addEventListener("DOMUpdatePageReport", PopupBlockerObserver.onUpdatePageReport, false); }, + handleEvent: function(aEvent) { + switch(aEvent.type) { + case "touchstart": + if (aEvent.touches.length == 1) { + let closest = ElementTouchHelper.elementFromPoint(BrowserApp.selectedBrowser.contentWindow, + aEvent.touches[0].screenX, aEvent.touches[0].screenY); + if (!closest) { + closest = ElementTouchHelper.anyElementFromPoint(BrowserApp.selectedBrowser.contentWindow, + aEvent.touches[0].screenX, aEvent.touches[0].screenY); + } + if (closest) { + this._doTapHighlight(closest); + + // If we've pressed a scrollable element, let Java know that we may + // want to override the scroll behaviour (for document sub-frames) + this._scrollableElement = this._findScrollableElement(closest, true); + this._firstScrollEvent = true; + + if (this._scrollableElement != null) { + // Discard if it's the top-level scrollable, we let Java handle this + let doc = BrowserApp.selectedBrowser.contentDocument; + if (this._scrollableElement != doc.body && this._scrollableElement != doc.documentElement) + sendMessageToJava({ gecko: { type: "Panning:Override" } }); + } + } + } + } + }, observe: function(aSubject, aTopic, aData) { if (aTopic == "Gesture:Scroll") { // If we've lost our scrollable element, return. Don't cancel the @@ -2261,26 +2289,6 @@ var BrowserEventHandler = { } } else if (aTopic == "Gesture:CancelTouch") { this._cancelTapHighlight(); - } else if (aTopic == "Gesture:ShowPress") { - let data = JSON.parse(aData); - let closest = ElementTouchHelper.elementFromPoint(BrowserApp.selectedBrowser.contentWindow, data.x, data.y); - if (!closest) - closest = ElementTouchHelper.anyElementFromPoint(BrowserApp.selectedBrowser.contentWindow, data.x, data.y); - if (closest) { - this._doTapHighlight(closest); - - // If we've pressed a scrollable element, let Java know that we may - // want to override the scroll behaviour (for document sub-frames) - this._scrollableElement = this._findScrollableElement(closest, true); - this._firstScrollEvent = true; - - if (this._scrollableElement != null) { - // Discard if it's the top-level scrollable, we let Java handle this - let doc = BrowserApp.selectedBrowser.contentDocument; - if (this._scrollableElement != doc.body && this._scrollableElement != doc.documentElement) - sendMessageToJava({ gecko: { type: "Panning:Override" } }); - } - } } else if (aTopic == "Gesture:SingleTap") { let element = this._highlightElement; if (element && !SelectHelper.handleClick(element)) {