From 00f0ffd013982fd0a5803ab944085802688d71d3 Mon Sep 17 00:00:00 2001 From: Ting-Yu Lin Date: Tue, 22 Dec 2015 14:14:12 +0800 Subject: [PATCH] Bug 1221459 - Remove SelectionStateChangedEvent. r=mtseng, r=smaug SelectionStateChangedEvent is dispatched only by SelectionCarets. Hence the removal. The modification in mochitest browserElement_CopyPaste.js is effectively the reverting of [1] with AccessibleCaret enabled. The DoCommandHelper is shell.js is removed as well, which handles the 'do-command' event dispatched from old text_selection_dialog.js in Gaia. [1] https://bugzilla.mozilla.org/page.cgi?id=splinter.html&bug=1155493&attachment=8612154 DONTBUILD --HG-- extra : amend_source : 1348306b0eee27ae08cef1b947e383dfded7798c --- b2g/chrome/content/shell.js | 43 -------- .../BrowserElementChildPreload.js | 98 ------------------- dom/browser-element/BrowserElementParent.js | 9 +- .../mochitest/browserElementTestHelpers.js | 4 - .../mochitest/browserElement_CopyPaste.js | 57 ++++------- .../browserElement_SelectionStateBlur.js | 57 ----------- .../mochitest/mochitest-oop.ini | 3 - dom/browser-element/mochitest/mochitest.ini | 4 - ...wserElement_inproc_SelectionStateBlur.html | 18 ---- ...browserElement_oop_SelectionStateBlur.html | 18 ---- dom/webidl/SelectionStateChangedEvent.webidl | 34 ------- dom/webidl/moz.build | 1 - 12 files changed, 18 insertions(+), 328 deletions(-) delete mode 100644 dom/browser-element/mochitest/browserElement_SelectionStateBlur.js delete mode 100644 dom/browser-element/mochitest/test_browserElement_inproc_SelectionStateBlur.html delete mode 100644 dom/browser-element/mochitest/test_browserElement_oop_SelectionStateBlur.html delete mode 100644 dom/webidl/SelectionStateChangedEvent.webidl diff --git a/b2g/chrome/content/shell.js b/b2g/chrome/content/shell.js index cd1c7b066f3d..f51901fd9eaa 100644 --- a/b2g/chrome/content/shell.js +++ b/b2g/chrome/content/shell.js @@ -430,7 +430,6 @@ var shell = { window.addEventListener('sizemodechange', this); window.addEventListener('unload', this); this.contentBrowser.addEventListener('mozbrowserloadstart', this, true); - this.contentBrowser.addEventListener('mozbrowserselectionstatechanged', this, true); this.contentBrowser.addEventListener('mozbrowserscrollviewchange', this, true); this.contentBrowser.addEventListener('mozbrowsercaretstatechanged', this); @@ -464,7 +463,6 @@ var shell = { window.removeEventListener('MozApplicationManifest', this); window.removeEventListener('sizemodechange', this); this.contentBrowser.removeEventListener('mozbrowserloadstart', this, true); - this.contentBrowser.removeEventListener('mozbrowserselectionstatechanged', this, true); this.contentBrowser.removeEventListener('mozbrowserscrollviewchange', this, true); this.contentBrowser.removeEventListener('mozbrowsercaretstatechanged', this); ppmm.removeMessageListener("content-handler", this); @@ -584,29 +582,6 @@ var shell = { detail: evt.detail, }); break; - case 'mozbrowserselectionstatechanged': - // The mozbrowserselectionstatechanged event, may have crossed the chrome-content boundary. - // This event always dispatch to shell.js. But the offset we got from this event is - // based on tab's coordinate. So get the actual offsets between shell and evt.target. - let elt = evt.target; - let win = elt.ownerDocument.defaultView; - let offsetX = win.mozInnerScreenX - window.mozInnerScreenX; - let offsetY = win.mozInnerScreenY - window.mozInnerScreenY; - - let rect = elt.getBoundingClientRect(); - offsetX += rect.left; - offsetY += rect.top; - - let data = evt.detail; - data.offsetX = offsetX; - data.offsetY = offsetY; - - DoCommandHelper.setEvent(evt); - shell.sendChromeEvent({ - type: 'selectionstatechanged', - detail: data, - }); - break; case 'mozbrowsercaretstatechanged': { let elt = evt.target; @@ -883,9 +858,6 @@ var CustomEventManager = { case 'inputregistry-remove': KeyboardHelper.handleEvent(detail); break; - case 'do-command': - DoCommandHelper.handleEvent(detail.cmd); - break; case 'copypaste-do-command': Services.obs.notifyObservers({ wrappedJSObject: shell.contentBrowser }, 'ask-children-to-execute-copypaste-command', detail.cmd); @@ -933,21 +905,6 @@ var CustomEventManager = { } } -var DoCommandHelper = { - _event: null, - setEvent: function docommand_setEvent(evt) { - this._event = evt; - }, - - handleEvent: function docommand_handleEvent(cmd) { - if (this._event) { - Services.obs.notifyObservers({ wrappedJSObject: this._event.target }, - 'copypaste-docommand', cmd); - this._event = null; - } - } -} - var WebappsHelper = { _installers: {}, _count: 0, diff --git a/dom/browser-element/BrowserElementChildPreload.js b/dom/browser-element/BrowserElementChildPreload.js index d80e1537603a..3ae6461558c9 100644 --- a/dom/browser-element/BrowserElementChildPreload.js +++ b/dom/browser-element/BrowserElementChildPreload.js @@ -139,7 +139,6 @@ function BrowserElementChild() { this._isContentWindowCreated = false; this._pendingSetInputMethodActive = []; - this._selectionStateChangedTarget = null; this.forwarder = new BrowserElementProxyForwarder(); @@ -224,11 +223,6 @@ BrowserElementChild.prototype = { /* useCapture = */ true, /* wantsUntrusted = */ false); - addEventListener('mozselectionstatechanged', - this._selectionStateChangedHandler.bind(this), - /* useCapture = */ true, - /* wantsUntrusted = */ false); - addEventListener('scrollviewchange', this._ScrollViewChangeHandler.bind(this), /* useCapture = */ true, @@ -719,97 +713,6 @@ BrowserElementChild.prototype = { } }, - _selectionStateChangedHandler: function(e) { - e.stopPropagation(); - - if (!this._isContentWindowCreated) { - return; - } - - let boundingClientRect = e.boundingClientRect; - - let isCollapsed = (e.selectedText.length == 0); - let isMouseUp = (e.states.indexOf('mouseup') == 0); - let canPaste = this._isCommandEnabled("paste"); - - if (this._selectionStateChangedTarget != e.target) { - // SelectionStateChanged events with the following states are not - // necessary to trigger the text dialog, bypass these events - // by default. - // - if(e.states.length == 0 || - e.states.indexOf('drag') == 0 || - e.states.indexOf('keypress') == 0 || - e.states.indexOf('mousedown') == 0) { - return; - } - - // The collapsed SelectionStateChanged event is unnecessary to dispatch, - // bypass this event by default, but here comes some exceptional cases - if (isCollapsed) { - if (isMouseUp && canPaste) { - // Always dispatch to support shortcut mode which can paste previous - // copied content easily - } else if (e.states.indexOf('blur') == 0) { - // Always dispatch to notify the blur for the focus content - } else if (e.states.indexOf('taponcaret') == 0) { - // Always dispatch to notify the caret be touched - } else { - return; - } - } - } - - // If we select something and selection range is visible, we cache current - // event's target to selectionStateChangedTarget. - // And dispatch the next SelectionStateChagne event if target is matched, so - // that the parent side can hide the text dialog. - // We clear selectionStateChangedTarget if selection carets are invisible. - if (e.visible && !isCollapsed) { - this._selectionStateChangedTarget = e.target; - } else if (canPaste && isCollapsed) { - this._selectionStateChangedTarget = e.target; - } else { - this._selectionStateChangedTarget = null; - } - - let zoomFactor = content.screen.width / content.innerWidth; - - let detail = { - rect: { - width: boundingClientRect ? boundingClientRect.width : 0, - height: boundingClientRect ? boundingClientRect.height : 0, - top: boundingClientRect ? boundingClientRect.top : 0, - bottom: boundingClientRect ? boundingClientRect.bottom : 0, - left: boundingClientRect ? boundingClientRect.left : 0, - right: boundingClientRect ? boundingClientRect.right : 0, - }, - commands: { - canSelectAll: this._isCommandEnabled("selectall"), - canCut: this._isCommandEnabled("cut"), - canCopy: this._isCommandEnabled("copy"), - canPaste: this._isCommandEnabled("paste"), - }, - zoomFactor: zoomFactor, - states: e.states, - isCollapsed: (e.selectedText.length == 0), - visible: e.visible, - }; - - // Get correct geometry information if we have nested iframe. - let currentWindow = e.target.defaultView; - while (currentWindow.realFrameElement) { - let currentRect = currentWindow.realFrameElement.getBoundingClientRect(); - detail.rect.top += currentRect.top; - detail.rect.bottom += currentRect.top; - detail.rect.left += currentRect.left; - detail.rect.right += currentRect.left; - currentWindow = currentWindow.realFrameElement.ownerDocument.defaultView; - } - - sendAsyncMsg('selectionstatechanged', detail); - }, - _genericMetaHandler: function(name, eventType, target) { let meta = { name: name, @@ -1481,7 +1384,6 @@ BrowserElementChild.prototype = { _recvDoCommand: function(data) { if (this._isCommandEnabled(data.json.command)) { - this._selectionStateChangedTarget = null; docShell.doCommand(COMMAND_MAP[data.json.command]); } }, diff --git a/dom/browser-element/BrowserElementParent.js b/dom/browser-element/BrowserElementParent.js index b8dc9cb08b1f..ce6e775a3a75 100644 --- a/dom/browser-element/BrowserElementParent.js +++ b/dom/browser-element/BrowserElementParent.js @@ -81,7 +81,7 @@ BrowserElementParentProxyCallHandler.prototype = { "contextmenu", "securitychange", "locationchange", "iconchange", "scrollareachanged", "titlechange", "opensearch", "manifestchange", "metachange", - "resize", "selectionstatechanged", "scrollviewchange", + "resize", "scrollviewchange", "caretstatechanged", "activitydone", "scroll", "opentab"]), init: function(frameElement, mm) { @@ -380,7 +380,6 @@ BrowserElementParent.prototype = { "got-visible": this._gotDOMRequestResult, "visibilitychange": this._childVisibilityChange, "got-set-input-method-active": this._gotDOMRequestResult, - "selectionstatechanged": this._handleSelectionStateChanged, "scrollviewchange": this._handleScrollViewChange, "caretstatechanged": this._handleCaretStateChanged, "findchange": this._handleFindChange, @@ -619,12 +618,6 @@ BrowserElementParent.prototype = { } }, - _handleSelectionStateChanged: function(data) { - let evt = this._createEvent('selectionstatechanged', data.json, - /* cancelable = */ false); - this._frameElement.dispatchEvent(evt); - }, - // Called when state of accessible caret in child has changed. // The fields of data is as following: // - rect: Contains bounding rectangle of selection, Include width, height, diff --git a/dom/browser-element/mochitest/browserElementTestHelpers.js b/dom/browser-element/mochitest/browserElementTestHelpers.js index 8c92e0fe0905..96038a032bb3 100644 --- a/dom/browser-element/mochitest/browserElementTestHelpers.js +++ b/dom/browser-element/mochitest/browserElementTestHelpers.js @@ -65,10 +65,6 @@ const browserElementTestHelpers = { this._setPref('dom.mozBrowserFramesEnabled', value); }, - setSelectionChangeEnabledPref: function(value) { - this._setPref('selectioncaret.enabled', value); - }, - setAccessibleCaretEnabledPref: function(value) { this._setPref('layout.accessiblecaret.enabled', value); }, diff --git a/dom/browser-element/mochitest/browserElement_CopyPaste.js b/dom/browser-element/mochitest/browserElement_CopyPaste.js index 148e205e00b2..20d505d912ab 100644 --- a/dom/browser-element/mochitest/browserElement_CopyPaste.js +++ b/dom/browser-element/mochitest/browserElement_CopyPaste.js @@ -1,14 +1,12 @@ /* Any copyright is dedicated to the public domain. http://creativecommons.org/publicdomain/zero/1.0/ */ -// Test that "cut, copy, paste, selectall" and selectionstatechanged event works from inside an