summaryrefslogtreecommitdiffstats
path: root/mobile/android/components/extensions
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/components/extensions')
-rw-r--r--mobile/android/components/extensions/.eslintrc.js5
-rw-r--r--mobile/android/components/extensions/ext-pageAction.js169
-rw-r--r--mobile/android/components/extensions/extensions-mobile.manifest5
-rw-r--r--mobile/android/components/extensions/jar.mn6
-rw-r--r--mobile/android/components/extensions/moz.build16
-rw-r--r--mobile/android/components/extensions/schemas/jar.mn6
-rw-r--r--mobile/android/components/extensions/schemas/moz.build7
-rw-r--r--mobile/android/components/extensions/schemas/page_action.json239
-rw-r--r--mobile/android/components/extensions/test/mochitest/.eslintrc.js10
-rw-r--r--mobile/android/components/extensions/test/mochitest/chrome.ini7
-rw-r--r--mobile/android/components/extensions/test/mochitest/head.js15
-rw-r--r--mobile/android/components/extensions/test/mochitest/mochitest.ini6
-rw-r--r--mobile/android/components/extensions/test/mochitest/test_ext_all_apis.html23
-rw-r--r--mobile/android/components/extensions/test/mochitest/test_ext_pageAction.html99
-rw-r--r--mobile/android/components/extensions/test/mochitest/test_ext_pageAction_popup.html169
15 files changed, 0 insertions, 782 deletions
diff --git a/mobile/android/components/extensions/.eslintrc.js b/mobile/android/components/extensions/.eslintrc.js
deleted file mode 100644
index 4b67e27b8..000000000
--- a/mobile/android/components/extensions/.eslintrc.js
+++ /dev/null
@@ -1,5 +0,0 @@
-"use strict";
-
-module.exports = {
- "extends": "../../../../toolkit/components/extensions/.eslintrc.js",
-};
diff --git a/mobile/android/components/extensions/ext-pageAction.js b/mobile/android/components/extensions/ext-pageAction.js
deleted file mode 100644
index fb1c3a3f3..000000000
--- a/mobile/android/components/extensions/ext-pageAction.js
+++ /dev/null
@@ -1,169 +0,0 @@
-/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
-/* vim: set sts=2 sw=2 et tw=80: */
-"use strict";
-
-XPCOMUtils.defineLazyModuleGetter(this, "EventEmitter",
- "resource://devtools/shared/event-emitter.js");
-
-XPCOMUtils.defineLazyModuleGetter(this, "Services",
- "resource://gre/modules/Services.jsm");
-
-// Import the android PageActions module.
-XPCOMUtils.defineLazyModuleGetter(this, "PageActions",
- "resource://gre/modules/PageActions.jsm");
-
-Cu.import("resource://gre/modules/ExtensionUtils.jsm");
-
-var {
- IconDetails,
- SingletonEventManager,
-} = ExtensionUtils;
-
-// WeakMap[Extension -> PageAction]
-var pageActionMap = new WeakMap();
-
-function PageAction(options, extension) {
- this.id = null;
-
- this.extension = extension;
- this.icons = IconDetails.normalize({path: options.default_icon}, extension);
-
- this.popupUrl = options.default_popup;
-
- this.options = {
- title: options.default_title || extension.name,
- id: `{${extension.uuid}}`,
- clickCallback: () => {
- if (this.popupUrl) {
- let win = Services.wm.getMostRecentWindow("navigator:browser");
- win.BrowserApp.addTab(this.popupUrl, {
- selected: true,
- parentId: win.BrowserApp.selectedTab.id,
- });
- } else {
- this.emit("click");
- }
- },
- };
-
- this.shouldShow = false;
-
- EventEmitter.decorate(this);
-}
-
-PageAction.prototype = {
- show(tabId, context) {
- if (this.id) {
- return Promise.resolve();
- }
-
- if (this.options.icon) {
- this.id = PageActions.add(this.options);
- return Promise.resolve();
- }
-
- this.shouldShow = true;
-
- // TODO(robwu): Remove dependency on contentWindow from this file. It should
- // be put in a separate file called ext-c-pageAction.js.
- // Note: Fennec is not going to be multi-process for the foreseaable future,
- // so this layering violation has no immediate impact. However, it is should
- // be done at some point.
- let {contentWindow} = context.xulBrowser;
-
- // TODO(robwu): Why is this contentWindow.devicePixelRatio, while
- // convertImageURLToDataURL uses browserWindow.devicePixelRatio?
- let {icon} = IconDetails.getPreferredIcon(this.icons, this.extension,
- 18 * contentWindow.devicePixelRatio);
-
- let browserWindow = Services.wm.getMostRecentWindow("navigator:browser");
- return IconDetails.convertImageURLToDataURL(icon, contentWindow, browserWindow).then(dataURI => {
- if (this.shouldShow) {
- this.options.icon = dataURI;
- this.id = PageActions.add(this.options);
- }
- }).catch(() => {
- return Promise.reject({
- message: "Failed to load PageAction icon",
- });
- });
- },
-
- hide(tabId) {
- this.shouldShow = false;
- if (this.id) {
- PageActions.remove(this.id);
- this.id = null;
- }
- },
-
- setPopup(tab, url) {
- // TODO: Only set the popup for the specified tab once we have Tabs API support.
- this.popupUrl = url;
- },
-
- getPopup(tab) {
- // TODO: Only return the popup for the specified tab once we have Tabs API support.
- return this.popupUrl;
- },
-
- shutdown() {
- this.hide();
- },
-};
-
-/* eslint-disable mozilla/balanced-listeners */
-extensions.on("manifest_page_action", (type, directive, extension, manifest) => {
- let pageAction = new PageAction(manifest.page_action, extension);
- pageActionMap.set(extension, pageAction);
-});
-
-extensions.on("shutdown", (type, extension) => {
- if (pageActionMap.has(extension)) {
- pageActionMap.get(extension).shutdown();
- pageActionMap.delete(extension);
- }
-});
-/* eslint-enable mozilla/balanced-listeners */
-
-extensions.registerSchemaAPI("pageAction", "addon_parent", context => {
- let {extension} = context;
- return {
- pageAction: {
- onClicked: new SingletonEventManager(context, "pageAction.onClicked", fire => {
- let listener = (event) => {
- fire();
- };
- pageActionMap.get(extension).on("click", listener);
- return () => {
- pageActionMap.get(extension).off("click", listener);
- };
- }).api(),
-
- show(tabId) {
- return pageActionMap.get(extension)
- .show(tabId, context)
- .then(() => {});
- },
-
- hide(tabId) {
- pageActionMap.get(extension).hide(tabId);
- return Promise.resolve();
- },
-
- setPopup(details) {
- // TODO: Use the Tabs API to get the tab from details.tabId.
- let tab = null;
- let url = details.popup && context.uri.resolve(details.popup);
- pageActionMap.get(extension).setPopup(tab, url);
- },
-
- getPopup(details) {
- // TODO: Use the Tabs API to get the tab from details.tabId.
- let tab = null;
- let popup = pageActionMap.get(extension).getPopup(tab);
- return Promise.resolve(popup);
- },
- },
- };
-});
diff --git a/mobile/android/components/extensions/extensions-mobile.manifest b/mobile/android/components/extensions/extensions-mobile.manifest
deleted file mode 100644
index f15540d62..000000000
--- a/mobile/android/components/extensions/extensions-mobile.manifest
+++ /dev/null
@@ -1,5 +0,0 @@
-# scripts
-category webextension-scripts pageAction chrome://browser/content/ext-pageAction.js
-
-# schemas
-category webextension-schemas page_action chrome://browser/content/schemas/page_action.json \ No newline at end of file
diff --git a/mobile/android/components/extensions/jar.mn b/mobile/android/components/extensions/jar.mn
deleted file mode 100644
index a3d2b8de8..000000000
--- a/mobile/android/components/extensions/jar.mn
+++ /dev/null
@@ -1,6 +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/.
-
-chrome.jar:
- content/ext-pageAction.js \ No newline at end of file
diff --git a/mobile/android/components/extensions/moz.build b/mobile/android/components/extensions/moz.build
deleted file mode 100644
index 0953fcefc..000000000
--- a/mobile/android/components/extensions/moz.build
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# 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/.
-
-JAR_MANIFESTS += ['jar.mn']
-
-EXTRA_COMPONENTS += [
- 'extensions-mobile.manifest',
-]
-
-DIRS += ['schemas']
-
-MOCHITEST_MANIFESTS += ['test/mochitest/mochitest.ini']
-MOCHITEST_CHROME_MANIFESTS += ['test/mochitest/chrome.ini']
diff --git a/mobile/android/components/extensions/schemas/jar.mn b/mobile/android/components/extensions/schemas/jar.mn
deleted file mode 100644
index 1a587ce20..000000000
--- a/mobile/android/components/extensions/schemas/jar.mn
+++ /dev/null
@@ -1,6 +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/.
-
-chrome.jar:
- content/schemas/page_action.json \ No newline at end of file
diff --git a/mobile/android/components/extensions/schemas/moz.build b/mobile/android/components/extensions/schemas/moz.build
deleted file mode 100644
index eb4454d28..000000000
--- a/mobile/android/components/extensions/schemas/moz.build
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# 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/.
-
-JAR_MANIFESTS += ['jar.mn'] \ No newline at end of file
diff --git a/mobile/android/components/extensions/schemas/page_action.json b/mobile/android/components/extensions/schemas/page_action.json
deleted file mode 100644
index 5e9280922..000000000
--- a/mobile/android/components/extensions/schemas/page_action.json
+++ /dev/null
@@ -1,239 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-[
- {
- "namespace": "manifest",
- "types": [
- {
- "$extend": "WebExtensionManifest",
- "properties": {
- "page_action": {
- "type": "object",
- "additionalProperties": { "$ref": "UnrecognizedProperty" },
- "properties": {
- "default_title": {
- "type": "string",
- "optional": true,
- "preprocess": "localize"
- },
- "default_icon": {
- "$ref": "IconPath",
- "optional": true
- },
- "default_popup": {
- "type": "string",
- "format": "relativeUrl",
- "optional": true,
- "preprocess": "localize"
- },
- "browser_style": {
- "type": "boolean",
- "optional": true
- }
- },
- "optional": true
- }
- }
- }
- ]
- },
- {
- "namespace": "pageAction",
- "description": "Use the <code>browser.pageAction</code> API to put icons inside the address bar. Page actions represent actions that can be taken on the current page, but that aren't applicable to all pages.",
- "permissions": ["manifest:page_action"],
- "types": [
- {
- "id": "ImageDataType",
- "type": "object",
- "isInstanceOf": "ImageData",
- "additionalProperties": { "type": "any" },
- "description": "Pixel data for an image. Must be an ImageData object (for example, from a <code>canvas</code> element)."
- }
- ],
- "functions": [
- {
- "name": "show",
- "type": "function",
- "description": "Shows the page action. The page action is shown whenever the tab is selected.",
- "async": "callback",
- "parameters": [
- {"type": "integer", "name": "tabId", "minimum": 0, "description": "The id of the tab for which you want to modify the page action."},
- {
- "type": "function",
- "name": "callback",
- "optional": true,
- "parameters": []
- }
- ]
- },
- {
- "name": "hide",
- "type": "function",
- "description": "Hides the page action.",
- "async": "callback",
- "parameters": [
- {"type": "integer", "name": "tabId", "minimum": 0, "description": "The id of the tab for which you want to modify the page action."},
- {
- "type": "function",
- "name": "callback",
- "optional": true,
- "parameters": []
- }
- ]
- },
- {
- "name": "setTitle",
- "unsupported": true,
- "type": "function",
- "description": "Sets the title of the page action. This is displayed in a tooltip over the page action.",
- "parameters": [
- {
- "name": "details",
- "type": "object",
- "properties": {
- "tabId": {"type": "integer", "minimum": 0, "description": "The id of the tab for which you want to modify the page action."},
- "title": {"type": "string", "description": "The tooltip string."}
- }
- }
- ]
- },
- {
- "name": "getTitle",
- "unsupported": true,
- "type": "function",
- "description": "Gets the title of the page action.",
- "async": "callback",
- "parameters": [
- {
- "name": "details",
- "type": "object",
- "properties": {
- "tabId": {
- "type": "integer",
- "description": "Specify the tab to get the title from."
- }
- }
- },
- {
- "type": "function",
- "name": "callback",
- "parameters": [
- {
- "name": "result",
- "type": "string"
- }
- ]
- }
- ]
- },
- {
- "name": "setIcon",
- "unsupported": true,
- "type": "function",
- "description": "Sets the icon for the page action. The icon can be specified either as the path to an image file or as the pixel data from a canvas element, or as dictionary of either one of those. Either the <b>path</b> or the <b>imageData</b> property must be specified.",
- "async": "callback",
- "parameters": [
- {
- "name": "details",
- "type": "object",
- "properties": {
- "tabId": {"type": "integer", "minimum": 0, "description": "The id of the tab for which you want to modify the page action."},
- "imageData": {
- "choices": [
- { "$ref": "ImageDataType" },
- {
- "type": "object",
- "additionalProperties": {"$ref": "ImageDataType"}
- }
- ],
- "optional": true,
- "description": "Either an ImageData object or a dictionary {size -> ImageData} representing icon to be set. If the icon is specified as a dictionary, the actual image to be used is chosen depending on screen's pixel density. If the number of image pixels that fit into one screen space unit equals <code>scale</code>, then image with size <code>scale</code> * 19 will be selected. Initially only scales 1 and 2 will be supported. At least one image must be specified. Note that 'details.imageData = foo' is equivalent to 'details.imageData = {'19': foo}'"
- },
- "path": {
- "choices": [
- { "type": "string" },
- {
- "type": "object",
- "additionalProperties": {"type": "string"}
- }
- ],
- "optional": true,
- "description": "Either a relative image path or a dictionary {size -> relative image path} pointing to icon to be set. If the icon is specified as a dictionary, the actual image to be used is chosen depending on screen's pixel density. If the number of image pixels that fit into one screen space unit equals <code>scale</code>, then image with size <code>scale</code> * 19 will be selected. Initially only scales 1 and 2 will be supported. At least one image must be specified. Note that 'details.path = foo' is equivalent to 'details.imageData = {'19': foo}'"
- }
- }
- },
- {
- "type": "function",
- "name": "callback",
- "optional": true,
- "parameters": []
- }
- ]
- },
- {
- "name": "setPopup",
- "type": "function",
- "async": "callback",
- "description": "Sets the html document to be opened as a popup when the user clicks on the page action's icon.",
- "parameters": [
- {
- "name": "details",
- "type": "object",
- "properties": {
- "tabId": {"type": "integer", "minimum": 0, "description": "The id of the tab for which you want to modify the page action."},
- "popup": {
- "type": "string",
- "description": "The html file to show in a popup. If set to the empty string (''), no popup is shown."
- }
- }
- },
- {
- "type": "function",
- "name": "callback",
- "optional": true,
- "parameters": []
- }
- ]
- },
- {
- "name": "getPopup",
- "type": "function",
- "description": "Gets the html document set as the popup for this page action.",
- "async": "callback",
- "parameters": [
- {
- "name": "details",
- "type": "object",
- "properties": {
- "tabId": {
- "type": "integer",
- "description": "Specify the tab to get the popup from."
- }
- }
- },
- {
- "type": "function",
- "name": "callback",
- "optional": true,
- "parameters": []
- }
- ]
- }
- ],
- "events": [
- {
- "name": "onClicked",
- "type": "function",
- "description": "Fired when a page action icon is clicked. This event will not fire if the page action has a popup.",
- "parameters": [
- {
- "name": "tab",
- "$ref": "tabs.Tab"
- }
- ]
- }
- ]
- }
-]
diff --git a/mobile/android/components/extensions/test/mochitest/.eslintrc.js b/mobile/android/components/extensions/test/mochitest/.eslintrc.js
deleted file mode 100644
index 5f9059e18..000000000
--- a/mobile/android/components/extensions/test/mochitest/.eslintrc.js
+++ /dev/null
@@ -1,10 +0,0 @@
-"use strict";
-
-module.exports = {
- "extends": "../../../../../../toolkit/components/extensions/test/mochitest/.eslintrc.js",
-
- "globals": {
- "isPageActionShown": true,
- "clickPageAction": true,
- },
-};
diff --git a/mobile/android/components/extensions/test/mochitest/chrome.ini b/mobile/android/components/extensions/test/mochitest/chrome.ini
deleted file mode 100644
index e19ddf393..000000000
--- a/mobile/android/components/extensions/test/mochitest/chrome.ini
+++ /dev/null
@@ -1,7 +0,0 @@
-[DEFAULT]
-support-files =
- head.js
-tags = webextensions
-
-[test_ext_pageAction.html]
-[test_ext_pageAction_popup.html]
diff --git a/mobile/android/components/extensions/test/mochitest/head.js b/mobile/android/components/extensions/test/mochitest/head.js
deleted file mode 100644
index be9683682..000000000
--- a/mobile/android/components/extensions/test/mochitest/head.js
+++ /dev/null
@@ -1,15 +0,0 @@
-"use strict";
-
-/* exported isPageActionShown clickPageAction */
-
-const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-
-Cu.import("resource://gre/modules/PageActions.jsm");
-
-function isPageActionShown(uuid) {
- return PageActions.isShown(uuid);
-}
-
-function clickPageAction(uuid) {
- PageActions.synthesizeClick(uuid);
-}
diff --git a/mobile/android/components/extensions/test/mochitest/mochitest.ini b/mobile/android/components/extensions/test/mochitest/mochitest.ini
deleted file mode 100644
index 59ef4bd20..000000000
--- a/mobile/android/components/extensions/test/mochitest/mochitest.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[DEFAULT]
-support-files =
- ../../../../../../toolkit/components/extensions/test/mochitest/test_ext_all_apis.js
-tags = webextensions
-
-[test_ext_all_apis.html]
diff --git a/mobile/android/components/extensions/test/mochitest/test_ext_all_apis.html b/mobile/android/components/extensions/test/mochitest/test_ext_all_apis.html
deleted file mode 100644
index aec3eb7c1..000000000
--- a/mobile/android/components/extensions/test/mochitest/test_ext_all_apis.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<head>
- <title>WebExtension test</title>
- <meta charset="utf-8">
- <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <script type="text/javascript" src="/tests/SimpleTest/SpawnTask.js"></script>
- <script type="text/javascript" src="/tests/SimpleTest/ExtensionTestUtils.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css">
-</head>
-<body>
-<script>
-"use strict";
-/* exported expectedContentApisTargetSpecific, expectedBackgroundApisTargetSpecific */
-let expectedContentApisTargetSpecific = [
-];
-
-let expectedBackgroundApisTargetSpecific = [
-];
-</script>
-<script src="test_ext_all_apis.js"></script>
-</body>
-</html>
diff --git a/mobile/android/components/extensions/test/mochitest/test_ext_pageAction.html b/mobile/android/components/extensions/test/mochitest/test_ext_pageAction.html
deleted file mode 100644
index b13c551bd..000000000
--- a/mobile/android/components/extensions/test/mochitest/test_ext_pageAction.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<head>
- <title>PageAction Test</title>
- <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script src="chrome://mochikit/content/tests/SimpleTest/SpawnTask.js"></script>
- <script src="chrome://mochikit/content/tests/SimpleTest/ExtensionTestUtils.js"></script>
- <script type="text/javascript" src="head.js"></script>
- <link rel="stylesheet" href="chrome://mochikit/contents/tests/SimpleTest/test.css"/>
-</head>
-<body>
-
-<script type="text/javascript">
-"use strict";
-
-let dataURI = "iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAC4klEQVRYhdWXLWzbQBSADQtDAwsHC1tUhUxqfL67lk2tdn+OJg0ODU0rLByqgqINBY6tmlbn7LMTJ5FaFVVBk1G0oUGjG2jT2Y7jxmmcbU/6iJ+f36fz+e5sGP9riCGm9hB37RG+scd4Yo/wsDXCZyIE2xuXsce4bY+wXkAsQtzYmExrfFgvkJkRbkzo1ehoxx5iXcgI/9iYUGt8WH9MqDXEcmNChmEYrRCf2SHWeYgQx3x0tLNRIeKQLTtEFyJEep4NTuhk8BC+yMrwEE3+iozo42d8gK7FAOkMsRiiN8QhW2ttSK5QTfRRV4QoymVeJMvPvDp7gCZigD613MN6yRFA3SWarow9QB9LCfG+NeF9qCtjAKOSQjCqVKhfVsiHEQ+grgx/lRGqUihAc1uL8EFD+KCRO+GrF4J61phcoRoPoEzkYhZYpykh5sMb7kOdIeY+jHKur4QI4Feh4AFX1nVeLxrAvQchGsBz5ls6wa2QdwcvIcE2863bTH79KOvsz/uUYJsp+J0pSzNlDckVqqVGUAF+n6uS7txcOl6wot4JVy70ufDLy4pWLUQVPE81pRI0mGe9oxLMHSeohHvMs/STUNaUK6vDPCvOyxMFDx4achehRDJmHnydnkPww5OFfLxrGIZBFDyYl4LpMzlTQFIP6AQx86w2UeYBccFpJrcKv5L9eGDtUAU6RIELqsB74uynjy/UBRF1gS5BTFxwQT1wTiXoUg9MH7m/3NZRRoi5IJytUbMgzv4Wc832+oQkiKgEehmyMkkpKsFkQV11QsRJL5rJYBLItQgRaUZEmnoZXsomz3vGiWw+I9KMF9SVFOqZEemZekli1jN3U/UOqhHHvC6oWWGElhfSpGdOk6+O9prdwvtLj5BjRsQxdRnot+Zeifpy/2/0stktKTRNLmbk0mwXyl8253fyojj+8rxOHNAhjjm5n0/5OOCGOKBzkrMO0Z75lvSAzKlrF32Z/3z8BqLAn+yMV7VhAAAAAElFTkSuQmCC";
-
-let image = atob(dataURI);
-const IMAGE_ARRAYBUFFER = Uint8Array.from(image, byte => byte.charCodeAt(0)).buffer;
-
-function background() {
- browser.test.assertTrue("pageAction" in browser, "Namespace 'pageAction' exists in browser");
- browser.test.assertTrue("show" in browser.pageAction, "API method 'show' exists in browser.pageAction");
-
- // TODO: Use the Tabs API to obtain the tab ids for showing pageActions.
- let tabId = 1;
- browser.test.onMessage.addListener(msg => {
- if (msg === "pageAction-show") {
- browser.pageAction.show(tabId).then(() => {
- browser.test.sendMessage("page-action-shown");
- });
- } else if (msg === "pageAction-hide") {
- browser.pageAction.hide(tabId).then(() => {
- browser.test.sendMessage("page-action-hidden");
- });
- }
- });
-
- browser.pageAction.onClicked.addListener(tab => {
- // TODO: Make sure we get the correct tab once basic tabs support is added.
- browser.test.sendMessage("page-action-clicked");
- });
-
- let extensionInfo = {
- // Extract the assigned uuid from the background page url.
- uuid: `{${window.location.hostname}}`,
- };
-
- browser.test.sendMessage("ready", extensionInfo);
-}
-
-add_task(function* test_pageAction() {
- let extension = ExtensionTestUtils.loadExtension({
- background,
- manifest: {
- "name": "PageAction Extension",
- "page_action": {
- "default_title": "Page Action",
- "default_icon": {
- "18": "extension.png",
- },
- },
- "applications": {
- "gecko": {
- "id": "foo@bar.com",
- },
- },
- },
- files: {
- "extension.png": IMAGE_ARRAYBUFFER,
- },
- });
-
- yield extension.startup();
- let {uuid} = yield extension.awaitMessage("ready");
-
- extension.sendMessage("pageAction-show");
- yield extension.awaitMessage("page-action-shown");
- ok(isPageActionShown(uuid), "The PageAction should be shown");
-
- extension.sendMessage("pageAction-hide");
- yield extension.awaitMessage("page-action-hidden");
- ok(!isPageActionShown(uuid), "The PageAction should be hidden");
-
- extension.sendMessage("pageAction-show");
- yield extension.awaitMessage("page-action-shown");
- ok(isPageActionShown(uuid), "The PageAction should be shown");
-
- clickPageAction(uuid);
- yield extension.awaitMessage("page-action-clicked");
- ok(isPageActionShown(uuid), "The PageAction should still be shown after being clicked");
-
- yield extension.unload();
- ok(!isPageActionShown(uuid), "The PageAction should be removed after unload");
-});
-</script>
-
-</body>
-</html>
diff --git a/mobile/android/components/extensions/test/mochitest/test_ext_pageAction_popup.html b/mobile/android/components/extensions/test/mochitest/test_ext_pageAction_popup.html
deleted file mode 100644
index 89edc7c29..000000000
--- a/mobile/android/components/extensions/test/mochitest/test_ext_pageAction_popup.html
+++ /dev/null
@@ -1,169 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<head>
- <title>PageAction Test</title>
- <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script src="chrome://mochikit/content/tests/SimpleTest/SpawnTask.js"></script>
- <script src="chrome://mochikit/content/tests/SimpleTest/ExtensionTestUtils.js"></script>
- <script type="text/javascript" src="head.js"></script>
- <link rel="stylesheet" href="chrome://mochikit/contents/tests/SimpleTest/test.css"/>
-</head>
-<body>
-
-<script type="text/javascript">
-"use strict";
-
-Cu.import("resource://gre/modules/Services.jsm");
-
-let dataURI = "iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAC4klEQVRYhdWXLWzbQBSADQtDAwsHC1tUhUxqfL67lk2tdn+OJg0ODU0rLByqgqINBY6tmlbn7LMTJ5FaFVVBk1G0oUGjG2jT2Y7jxmmcbU/6iJ+f36fz+e5sGP9riCGm9hB37RG+scd4Yo/wsDXCZyIE2xuXsce4bY+wXkAsQtzYmExrfFgvkJkRbkzo1ehoxx5iXcgI/9iYUGt8WH9MqDXEcmNChmEYrRCf2SHWeYgQx3x0tLNRIeKQLTtEFyJEep4NTuhk8BC+yMrwEE3+iozo42d8gK7FAOkMsRiiN8QhW2ttSK5QTfRRV4QoymVeJMvPvDp7gCZigD613MN6yRFA3SWarow9QB9LCfG+NeF9qCtjAKOSQjCqVKhfVsiHEQ+grgx/lRGqUihAc1uL8EFD+KCRO+GrF4J61phcoRoPoEzkYhZYpykh5sMb7kOdIeY+jHKur4QI4Feh4AFX1nVeLxrAvQchGsBz5ls6wa2QdwcvIcE2863bTH79KOvsz/uUYJsp+J0pSzNlDckVqqVGUAF+n6uS7txcOl6wot4JVy70ufDLy4pWLUQVPE81pRI0mGe9oxLMHSeohHvMs/STUNaUK6vDPCvOyxMFDx4achehRDJmHnydnkPww5OFfLxrGIZBFDyYl4LpMzlTQFIP6AQx86w2UeYBccFpJrcKv5L9eGDtUAU6RIELqsB74uynjy/UBRF1gS5BTFxwQT1wTiXoUg9MH7m/3NZRRoi5IJytUbMgzv4Wc832+oQkiKgEehmyMkkpKsFkQV11QsRJL5rJYBLItQgRaUZEmnoZXsomz3vGiWw+I9KMF9SVFOqZEemZekli1jN3U/UOqhHHvC6oWWGElhfSpGdOk6+O9prdwvtLj5BjRsQxdRnot+Zeifpy/2/0stktKTRNLmbk0mwXyl8253fyojj+8rxOHNAhjjm5n0/5OOCGOKBzkrMO0Z75lvSAzKlrF32Z/3z8BqLAn+yMV7VhAAAAAElFTkSuQmCC";
-
-let image = atob(dataURI);
-const IMAGE_ARRAYBUFFER = Uint8Array.from(image, byte => byte.charCodeAt(0)).buffer;
-
-add_task(function* test_contentscript() {
- function background() {
- // TODO: Use the Tabs API to obtain the tab ids for showing pageActions.
- let tabId = 1;
- let onClickedListenerEnabled = false;
-
- browser.test.onMessage.addListener((msg, details) => {
- if (msg === "page-action-show") {
- // TODO: switch to using .show(tabId).then(...) once bug 1270742 lands.
- browser.pageAction.show(tabId).then(() => {
- browser.test.sendMessage("page-action-shown");
- });
- } else if (msg == "page-action-set-popup") {
- browser.pageAction.setPopup({popup: details.name, tabId: tabId}).then(() => {
- browser.test.sendMessage("page-action-popup-set");
- });
- } else if (msg == "page-action-get-popup") {
- browser.pageAction.getPopup({tabId: tabId}).then(url => {
- browser.test.sendMessage("page-action-got-popup", url);
- });
- } else if (msg == "page-action-enable-onClicked-listener") {
- onClickedListenerEnabled = true;
- browser.test.sendMessage("page-action-onClicked-listener-enabled");
- } else if (msg == "page-action-disable-onClicked-listener") {
- onClickedListenerEnabled = false;
- browser.test.sendMessage("page-action-onClicked-listener-disabled");
- }
- });
-
- browser.pageAction.onClicked.addListener(tab => {
- browser.test.assertTrue(onClickedListenerEnabled, "The onClicked listener should only fire when it is enabled.");
- browser.test.sendMessage("page-action-onClicked-fired");
- });
-
- let extensionInfo = {
- // Extract the assigned uuid from the background page url.
- uuid: `{${window.location.hostname}}`,
- };
-
- browser.test.sendMessage("ready", extensionInfo);
- }
-
- function popupScript() {
- window.onload = () => {
- browser.test.sendMessage("page-action-from-popup", location.href);
- };
- browser.test.onMessage.addListener((msg, details) => {
- if (msg == "page-action-close-popup") {
- if (details.location == location.href) {
- window.close();
- }
- }
- });
- }
-
- let extension = ExtensionTestUtils.loadExtension({
- background,
- manifest: {
- "name": "PageAction Extension",
- "page_action": {
- "default_title": "Page Action",
- "default_popup": "default.html",
- "default_icon": {
- "18": "extension.png",
- },
- },
- },
- files: {
- "default.html": `<html><head><meta charset="utf-8"><script src="popup.js"><\/script></head></html>`,
- "extension.png": IMAGE_ARRAYBUFFER,
- "a.html": `<html><head><meta charset="utf-8"><script src="popup.js"><\/script></head></html>`,
- "b.html": `<html><head><meta charset="utf-8"><script src="popup.js"><\/script></head></html>`,
- "popup.js": popupScript,
- },
- });
-
- let tabClosedPromise = () => {
- return new Promise(resolve => {
- let chromeWin = Services.wm.getMostRecentWindow("navigator:browser");
- let BrowserApp = chromeWin.BrowserApp;
-
- let tabCloseListener = (event) => {
- BrowserApp.deck.removeEventListener("TabClose", tabCloseListener, false);
- let browser = event.target;
- let url = browser.currentURI.spec;
- resolve(url);
- };
-
- BrowserApp.deck.addEventListener("TabClose", tabCloseListener, false);
- });
- };
-
- function* testPopup(name, uuid) {
- // We don't need to set the popup when testing default_popup.
- if (name != "default.html") {
- extension.sendMessage("page-action-set-popup", {name});
- yield extension.awaitMessage("page-action-popup-set");
- }
-
- extension.sendMessage("page-action-get-popup");
- let url = yield extension.awaitMessage("page-action-got-popup");
-
- if (name == "") {
- ok(url == name, "Calling pageAction.getPopup should return an empty string when the popup is not set.");
-
- // The onClicked listener should get called when the popup is set to an empty string.
- extension.sendMessage("page-action-enable-onClicked-listener");
- yield extension.awaitMessage("page-action-onClicked-listener-enabled");
-
- clickPageAction(uuid);
- yield extension.awaitMessage("page-action-onClicked-fired");
-
- extension.sendMessage("page-action-disable-onClicked-listener");
- yield extension.awaitMessage("page-action-onClicked-listener-disabled");
- } else {
- ok(url.includes(name), "Calling pageAction.getPopup should return the correct popup URL when the popup is set.");
-
- clickPageAction(uuid);
- let location = yield extension.awaitMessage("page-action-from-popup");
- ok(location.includes(name), "The popup with the correct URL should be shown.");
-
- extension.sendMessage("page-action-close-popup", {location});
-
- url = yield tabClosedPromise();
- ok(url.includes(name), "The tab for the popup should be closed.");
- }
- }
-
- yield extension.startup();
- let {uuid} = yield extension.awaitMessage("ready");
-
- extension.sendMessage("page-action-show");
- yield extension.awaitMessage("page-action-shown");
- ok(isPageActionShown(uuid), "The PageAction should be shown.");
-
- yield testPopup("default.html", uuid);
- yield testPopup("a.html", uuid);
- yield testPopup("", uuid);
- yield testPopup("b.html", uuid);
-
- yield extension.unload();
- ok(!isPageActionShown(uuid), "The PageAction should be removed after unload.");
-});
-</script>
-
-</body>
-</html>