Bug 1363016 - Implement contextMenus.create WebExtension API method on android. f?rpl
MozReview-Commit-ID: F13ZFMuXviY
--- a/mobile/android/components/extensions/ext-android.js
+++ b/mobile/android/components/extensions/ext-android.js
@@ -79,16 +79,24 @@ extensions.registerModules({
url: "chrome://browser/content/ext-browsingData.js",
schema: "chrome://browser/content/schemas/browsing_data.json",
scopes: ["addon_parent"],
manifest: ["browsing_data"],
paths: [
["browsingData"],
],
},
+ menusInternal: {
+ url: "chrome://browser/content/ext-menus.js",
+ schema: "chrome://browser/content/schemas/menus.json",
+ scopes: ["addon_parent"],
+ paths: [
+ ["menusInternal"],
+ ],
+ },
pageAction: {
url: "chrome://browser/content/ext-pageAction.js",
schema: "chrome://browser/content/schemas/page_action.json",
scopes: ["addon_parent"],
manifest: ["page_action"],
paths: [
["pageAction"],
],
new file mode 100644
--- /dev/null
+++ b/mobile/android/components/extensions/ext-menus.js
@@ -0,0 +1,43 @@
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set sts=2 sw=2 et tw=80: */
+"use strict";
+
+XPCOMUtils.defineLazyModuleGetter(this, "Services",
+ "resource://gre/modules/Services.jsm");
+
+const DEBUG = "Debug contextMenus";
+
+let windows = Services.wm.getMostRecentWindows("navigator:browser");
+
+function addSelector(contextType) {
+ dump(DEBUG + "adSelector called. context: " + contextType);
+ switch (contextType[0]) {
+ case "all" :
+ return windows.NativeWindow.contextmenus.SelectorContext("*");
+ case "audio" :
+ return windows.NativeWindow.contextmenus.SelectorContext("audio");
+ case "image" :
+ return windows.NativeWindow.contextmenus.imageSaveableContext();
+ case "video" :
+ return windows.NativeWindow.contextmenus.videoContext();
+ }
+}
+
+this.menusInternal = class extends ExtensionAPI {
+ getAPI(context) {
+ return {
+ menusInternal: {
+ create: function(createProperties) {
+ dump(DEBUG + "create called.");
+
+ windows.NativeWindow.contextmenus.add(
+ createProperties.title,
+ addSelector(createProperties.contexts),
+ createProperties.onclick
+ );
+ return Promise.resolve("Added");
+ },
+ },
+ };
+ }
+};
--- a/mobile/android/components/extensions/extensions-mobile.manifest
+++ b/mobile/android/components/extensions/extensions-mobile.manifest
@@ -1,4 +1,7 @@
# modules
category webextension-scripts android chrome://browser/content/ext-android.js
category webextension-scripts utils chrome://browser/content/ext-utils.js
category webextension-scripts-addon android chrome://browser/content/ext-c-android.js
+
+category webextension-schemas menus_internal chrome://browser/content/schemas/menus_internal.json
+
--- a/mobile/android/components/extensions/jar.mn
+++ b/mobile/android/components/extensions/jar.mn
@@ -3,11 +3,12 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
chrome.jar:
content/ext-android.js
content/ext-c-android.js
content/ext-c-tabs.js
content/ext-browserAction.js
content/ext-browsingData.js
+ content/ext-menus.js
content/ext-pageAction.js
content/ext-tabs.js
content/ext-utils.js
--- a/mobile/android/components/extensions/schemas/jar.mn
+++ b/mobile/android/components/extensions/schemas/jar.mn
@@ -1,9 +1,11 @@
# 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/browser_action.json
content/schemas/browsing_data.json
+ content/schemas/menus.json
+ content/schemas/menus_internal.json
content/schemas/page_action.json
content/schemas/tabs.json
copy from browser/components/extensions/schemas/menus.json
copy to mobile/android/components/extensions/schemas/menus.json
--- a/browser/components/extensions/schemas/menus.json
+++ b/mobile/android/components/extensions/schemas/menus.json
@@ -245,16 +245,17 @@
"parameters": []
}
]
},
{
"name": "update",
"type": "function",
"description": "Updates a previously created context menu item.",
+ "unsupported": true,
"async": "callback",
"parameters": [
{
"choices": [
{ "type": "integer" },
{ "type": "string" }
],
"name": "id",
@@ -332,16 +333,17 @@
"description": "Called when the context menu has been updated."
}
]
},
{
"name": "remove",
"type": "function",
"description": "Removes a context menu item.",
+ "unsupported": true,
"async": "callback",
"parameters": [
{
"choices": [
{ "type": "integer" },
{ "type": "string" }
],
"name": "menuItemId",
@@ -372,16 +374,17 @@
]
}
],
"events": [
{
"name": "onClicked",
"type": "function",
"description": "Fired when a context menu item is clicked.",
+ "unsupported": true,
"parameters": [
{
"name": "info",
"$ref": "OnClickData",
"description": "Information about the item clicked and the context where the click happened."
},
{
"name": "tab",
copy from browser/components/extensions/schemas/menus_internal.json
copy to mobile/android/components/extensions/schemas/menus_internal.json