Bug 1363016 - Implement contextMenus.create WebExtension API method on android. f?rpl draft
authorTushar Saini <tushar.saini1285@gmail.com>
Thu, 14 Sep 2017 00:51:46 +0530
changeset 664373 0b094bb745045ed76db4b7c2024cf7de8359f193
parent 662980 b0e945eed81db8bf076daf64e381c514f70144f0
child 731440 0900d505341a9bfe9f88b477b05eed925159163a
push id79692
push userbmo:tushar.saini1285@gmail.com
push dateWed, 13 Sep 2017 22:53:31 +0000
bugs1363016
milestone57.0a1
Bug 1363016 - Implement contextMenus.create WebExtension API method on android. f?rpl MozReview-Commit-ID: F13ZFMuXviY
mobile/android/components/extensions/ext-android.js
mobile/android/components/extensions/ext-menus.js
mobile/android/components/extensions/extensions-mobile.manifest
mobile/android/components/extensions/jar.mn
mobile/android/components/extensions/schemas/jar.mn
mobile/android/components/extensions/schemas/menus.json
mobile/android/components/extensions/schemas/menus_internal.json
--- 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