From 7f5b74e046e48039ab5ab81078e754060f5a0178 Mon Sep 17 00:00:00 2001 From: girst Date: Sun, 12 May 2019 15:15:30 +0200 Subject: [PATCH] fix hintsmode clicking in ff56, squash some exceptions Some uses of the deprecated Array.func() syntax are, despite the browser console telling us, not replacable by Array.prototype.func(). Also silenced some exceptions that are expected. --- extension/lib/commands.coffee | 2 +- extension/lib/events.coffee | 5 ++++- extension/lib/main-frame.coffee | 1 + extension/lib/markable-elements.coffee | 2 +- extension/lib/message-manager.coffee | 3 ++- extension/lib/utils.coffee | 8 +++++++- 6 files changed, 16 insertions(+), 5 deletions(-) diff --git a/extension/lib/commands.coffee b/extension/lib/commands.coffee index b5b542a..0c3c7a6 100644 --- a/extension/lib/commands.coffee +++ b/extension/lib/commands.coffee @@ -1030,7 +1030,7 @@ commands.help = ({vim}) -> help.toggleHelp(vim.window, vim._parent) commands.esc = ({vim}) -> - vim._run('esc') + vim._run('esc') # NOTE: this causes a TypeError somewhere in the call-stack vim.hideNotification() # Firefox does things differently when blurring the location bar, depending on diff --git a/extension/lib/events.coffee b/extension/lib/events.coffee index 77b462e..b8248b8 100644 --- a/extension/lib/events.coffee +++ b/extension/lib/events.coffee @@ -169,7 +169,10 @@ class UIEventManager setFocusType: -> return unless vim = @vimfx.getCurrentVim(@window) - activeElement = utils.getActiveElement(@window) + try + activeElement = utils.getActiveElement(@window) + catch + return # NOTE: throws "TypeError: utils is null" when clicking on a doorhanger if activeElement == @window.gBrowser.selectedBrowser vim._send('checkFocusType') diff --git a/extension/lib/main-frame.coffee b/extension/lib/main-frame.coffee index ff195f4..3d3a277 100644 --- a/extension/lib/main-frame.coffee +++ b/extension/lib/main-frame.coffee @@ -29,6 +29,7 @@ module.exports = -> loadConfig = -> configDir = prefs.get('config_file_directory') + return null unless configDir scope = { vimfx: createConfigAPI(vim, onShutdown) content diff --git a/extension/lib/markable-elements.coffee b/extension/lib/markable-elements.coffee index 567963d..ba30780 100644 --- a/extension/lib/markable-elements.coffee +++ b/extension/lib/markable-elements.coffee @@ -95,7 +95,7 @@ getRects = (element, viewport) -> rects = element.getClientRects() return { all: rects, - insideViewport: Array.filter( + insideViewport: Array.filter( # NOTE: replacing with Array.prototype.filter breaks things! rects, (rect) -> viewportUtils.isInsideViewport(rect, viewport) ) diff --git a/extension/lib/message-manager.coffee b/extension/lib/message-manager.coffee index d23450e..a58ccc4 100644 --- a/extension/lib/message-manager.coffee +++ b/extension/lib/message-manager.coffee @@ -64,7 +64,8 @@ send = (name, data = null, callback = null, options = {}) -> if args.messageManager.broadcastAsyncMessage args.messageManager.broadcastAsyncMessage?(namespacedName, wrappedData) else - args.messageManager.sendAsyncMessage?(namespacedName, wrappedData) + try # NOTE: throws NS_ERROR_NOT_INITIALIZED sometimes + args.messageManager.sendAsyncMessage?(namespacedName, wrappedData) # Unwraps the data from `send` and invokes `listener` with it. invokeListener = (listener, args, {data: {data, callbackName} = {}, target}) -> diff --git a/extension/lib/utils.coffee b/extension/lib/utils.coffee index e20b521..f878646 100644 --- a/extension/lib/utils.coffee +++ b/extension/lib/utils.coffee @@ -86,6 +86,7 @@ isContentEditable = (element) -> isDevtoolsElement = (element) -> return false unless element.ownerGlobal + # NOTE: cannot use Array.prototype.some(), or *.top.frames breaks! return Array.some(element.ownerGlobal.top.frames, isDevtoolsWindow) isDevtoolsWindow = (window) -> @@ -333,7 +334,12 @@ simulateMouseEvents = (element, sequence, browserOffset) -> # The last `true` below marks the event as trusted, which some APIs # require, such as `requestFullscreen()`. # (`element.dispatchEvent(mouseEvent)` is not able to do this.) - window.windowUtils + windowUtils = window.windowUtils + if not windowUtils + windowUtils = window + .QueryInterface(Ci.nsIInterfaceRequestor) + .getInterface(Ci.nsIDOMWindowUtils) # removed in ff63 + windowUtils .dispatchDOMEventViaPresShell(element, mouseEvent, true) return -- 2.39.3