Index: lib/appIntegration.js |
=================================================================== |
deleted file mode 100644 |
--- a/lib/appIntegration.js |
+++ /dev/null |
@@ -1,297 +0,0 @@ |
-/* This Source Code Form is subject to the terms of the Mozilla Public |
- * License, v. 2.0. If a copy of the MPL was not distributed with this file, |
- * You can obtain one at http://mozilla.org/MPL/2.0/. */ |
- |
-let {hook} = require("hooks"); |
-let functionHooks = new WeakMap(); |
- |
-exports.removeFromWindow = function(window) |
-{ |
- if (functionHooks.has(window)) |
- { |
- let unhook = functionHooks.get(window); |
- unhook(); |
- functionHooks.delete(window); |
- } |
-}; |
- |
-let {application} = require("info"); |
-switch (application) |
-{ |
- case "firefox": |
- { |
- // Firefox |
- exports.isKnownWindow = function(window) window.document.documentElement.getAttribute("windowtype") == "navigator:browser"; |
- |
- exports.getURLBar = function(window) "gURLBar" in window ? window.gURLBar : null; |
- |
- exports.getBrowser = function(window) "gBrowser" in window ? window.gBrowser : null; |
- |
- exports.applyToWindow = function(window, corrector) |
- { |
- let urlbar = exports.getURLBar(window); |
- if (urlbar && urlbar.handleCommand && !functionHooks.has(window)) |
- { |
- // Handle new URLs being entered |
- let unhook = hook(urlbar, "handleCommand", function() |
- { |
- let correction = corrector(window, urlbar.value); |
- if (correction) |
- urlbar.value = correction; |
- }); |
- functionHooks.set(window, unhook); |
- } |
- }; |
- |
- exports.openInfobar = function(window, id, message, buttons, persistence) |
- { |
- let browser = exports.getBrowser(window); |
- let infobar = browser.getNotificationBox(); |
- let notification = infobar.getNotificationWithValue(id); |
- |
- if (notification) |
- { |
- infobar.removeNotification(notification); |
- } |
- |
- notification = infobar.appendNotification( |
- message, |
- id, |
- require("info").addonRoot + "icon64.png", |
- infobar.PRIORITY_INFO_HIGH, |
- buttons |
- ); |
- notification.persistence = persistence; |
- }; |
- |
- exports.loadURI = function(window, uri) |
- { |
- exports.getBrowser(window).loadURI(uri); |
- }; |
- |
- break; |
- } |
- case "seamonkey": |
- { |
- let eventListeners = new WeakMap(); |
- |
- // SeaMonkey |
- exports.isKnownWindow = function(window) window.document.documentElement.getAttribute("windowtype") == "navigator:browser"; |
- |
- exports.getURLBar = function(window) "gURLBar" in window ? window.gURLBar : null; |
- |
- exports.getBrowser = function(window) "gBrowser" in window ? window.gBrowser : null; |
- |
- exports.applyToWindow = function(window, corrector) |
- { |
- let urlbar = exports.getURLBar(window); |
- let goButton = window.document.getElementById("go-button-container"); |
- |
- if (urlbar && urlbar._fireEvent && !functionHooks.has(window)) |
- { |
- function correctURL() |
- { |
- let correction = corrector(window, urlbar.value); |
- if (correction) |
- urlbar.value = correction; |
- } |
- |
- let unhook = hook(urlbar, "_fireEvent", function(eventType) |
- { |
- if (eventType == "textentered") |
- { |
- correctURL(); |
- } |
- }); |
- functionHooks.set(window, unhook); |
- |
- if (goButton) |
- { |
- goButton.addEventListener("command", correctURL, true); |
- eventListeners.set(window, { |
- "listener": correctURL, |
- "element": goButton |
- }); |
- } |
- } |
- }; |
- |
- let basicRemove = exports.removeFromWindow; |
- exports.removeFromWindow = function(window) |
- { |
- basicRemove(window); |
- |
- if (eventListeners.has(window)) |
- { |
- let eventListener = eventListeners.get(window); |
- eventListener.element.removeEventListener("command", eventListener.listener, true); |
- eventListeners.delete(window); |
- } |
- }; |
- |
- exports.openInfobar = function(window, id, message, buttons, persistence) |
- { |
- let browser = exports.getBrowser(window); |
- let infobar = browser.getNotificationBox(); |
- let notification = infobar.getNotificationWithValue(id); |
- |
- if (notification) |
- { |
- infobar.removeNotification(notification); |
- } |
- |
- notification = infobar.appendNotification( |
- message, |
- id, |
- require("info").addonRoot + "icon64.png", |
- infobar.PRIORITY_INFO_HIGH, |
- buttons |
- ); |
- notification.persistence = persistence; |
- }; |
- |
- exports.loadURI = function(window, uri) |
- { |
- exports.getBrowser(window).loadURI(uri); |
- }; |
- |
- break; |
- } |
- case "fennec": |
- { |
- // XUL Fennec |
- exports.isKnownWindow = function(window) window.document.documentElement.getAttribute("windowtype") == "navigator:browser"; |
- |
- exports.getURLBar = function(window) null; |
- |
- exports.getBrowser = function(window) null; |
- |
- exports.applyToWindow = function(window, corrector) |
- { |
- if ("BrowserUI" in window && window.BrowserUI.goToURI && !functionHooks.has(window)) |
- { |
- // Handle new URLs being entered |
- let unhook = hook(window.BrowserUI, "goToURI", function(url) |
- { |
- url = url || this._edit.value; |
- |
- let correction = corrector(window, url); |
- if (correction) |
- url = correction; |
- |
- return [url]; |
- }); |
- functionHooks.set(window, unhook); |
- } |
- }; |
- |
- exports.openInfobar = function(window, id, message, buttons, persistence) |
- { |
- if ("getNotificationBox" in window) |
- { |
- let infobar = window.getNotificationBox(); |
- let notification = infobar.getNotificationWithValue(id); |
- |
- if (notification) |
- { |
- infobar.removeNotification(notification); |
- } |
- |
- notification = infobar.appendNotification( |
- message, |
- id, |
- require("info").addonRoot + "icon64.png", |
- infobar.PRIORITY_INFO_HIGH, |
- buttons |
- ); |
- notification.persistence = persistence; |
- } |
- }; |
- |
- exports.loadURI = function(window, uri) |
- { |
- if ("BrowserUI" in window && "goToURI" in window.BrowserUI) |
- { |
- window.BrowserUI.goToURI(uri); |
- } |
- }; |
- |
- break; |
- } |
- case "fennec2": |
- { |
- // Native Fennec |
- exports.isKnownWindow = function(window) window.document.documentElement.getAttribute("windowtype") == "navigator:browser"; |
- |
- exports.getURLBar = function(window) null; |
- |
- exports.getBrowser = function(window) null; |
- |
- exports.applyToWindow = function(window, corrector) |
- { |
- if ("BrowserApp" in window && window.BrowserApp.observe && !functionHooks.has(window)) |
- { |
- let innerUnhook = null; |
- function cleanup() |
- { |
- if (innerUnhook) |
- innerUnhook(); |
- |
- innerUnhook = null; |
- } |
- |
- let unhook = hook(window.BrowserApp, "observe", function(subject, topic, data) |
- { |
- // Huge hack: we replace addTab/loadURI when the observer is |
- // triggered. This seems to be the only way to know that the calls |
- // originate from user input. |
- let method = null; |
- if (topic == "Tab:Add") |
- method = "addTab"; |
- else if (topic == "Tab:Load") |
- method = "loadURI"; |
- |
- if (method) |
- { |
- innerUnhook = hook(this, method, function() |
- { |
- let params = Array.prototype.slice.apply(arguments); |
- let correction = corrector(window, params[0]); |
- if (correction) |
- params[0] = correction; |
- return params; |
- }); |
- } |
- }, cleanup); |
- functionHooks.set(window, unhook); |
- } |
- }; |
- |
- exports.openInfobar = function(window, id, message, buttons, persistence) |
- { |
- if ("BrowserApp" in window && "selectedTab" in window.BrowserApp) |
- { |
- window.NativeWindow.doorhanger.show(message, id, buttons, window.BrowserApp.selectedTab.id, |
- { |
- // No navigation is happening after doorhanger is shown |
- // so persistence needs to be reduced by one |
- persistence: persistence - 1 |
- } |
- ); |
- } |
- }; |
- |
- exports.loadURI = function(window, uri) |
- { |
- if ("BrowserApp" in window && "loadURI" in window.BrowserApp) |
- window.BrowserApp.loadURI(uri); |
- }; |
- |
- break; |
- } |
- default: |
- { |
- exports.isKnownWindow = function(window) false; |
- break; |
- } |
-} |