summaryrefslogtreecommitdiffstats
path: root/browser/extensions/screenshots/sitehelper.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/extensions/screenshots/sitehelper.js')
-rw-r--r--browser/extensions/screenshots/sitehelper.js63
1 files changed, 63 insertions, 0 deletions
diff --git a/browser/extensions/screenshots/sitehelper.js b/browser/extensions/screenshots/sitehelper.js
new file mode 100644
index 0000000000..719e76dad2
--- /dev/null
+++ b/browser/extensions/screenshots/sitehelper.js
@@ -0,0 +1,63 @@
+/* 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/. */
+
+/* globals catcher, callBackground, content */
+/** This is a content script added to all screenshots.firefox.com pages, and allows the site to
+ communicate with the add-on */
+
+"use strict";
+
+this.sitehelper = (function () {
+ catcher.registerHandler(errorObj => {
+ callBackground("reportError", errorObj);
+ });
+
+ const capabilities = {};
+ function registerListener(name, func) {
+ capabilities[name] = name;
+ document.addEventListener(name, func);
+ }
+
+ function sendCustomEvent(name, detail) {
+ if (typeof detail === "object") {
+ // Note sending an object can lead to security problems, while a string
+ // is safe to transfer:
+ detail = JSON.stringify(detail);
+ }
+ document.dispatchEvent(new CustomEvent(name, { detail }));
+ }
+
+ registerListener(
+ "delete-everything",
+ catcher.watchFunction(event => {
+ // FIXME: reset some data in the add-on
+ }, false)
+ );
+
+ registerListener(
+ "copy-to-clipboard",
+ catcher.watchFunction(event => {
+ catcher.watchPromise(callBackground("copyShotToClipboard", event.detail));
+ })
+ );
+
+ registerListener(
+ "show-notification",
+ catcher.watchFunction(event => {
+ catcher.watchPromise(callBackground("showNotification", event.detail));
+ })
+ );
+
+ // Depending on the script loading order, the site might get the addon-present event,
+ // but probably won't - instead the site will ask for that event after it has loaded
+ registerListener(
+ "request-addon-present",
+ catcher.watchFunction(() => {
+ sendCustomEvent("addon-present", capabilities);
+ })
+ );
+
+ sendCustomEvent("addon-present", capabilities);
+})();
+null;