gecko-dev/uriloader/exthandler/moz.build
Michael Hughes e66ab7ac30 Bug 1884265 - Expose pretty ApplicationName from the registry to file handlers r=nrishel,nalexander,necko-reviewers,barret,valentin
Some code to exercise this in the browser console:

```
{
  const printNames = async (appList) => {
    let buffer = "Start:\n";

    for (let index = 0; index < appList4.length; index++) {
      let app = appList4.queryElementAt(index, Ci.nsILocalHandlerApp);
      buffer += app.executable.leafName;
      buffer += "\n";
    }

    buffer += "\n";

    for (let index = 0; index < appList4.length; index++) {
      let app = appList4.queryElementAt(index, Ci.nsILocalHandlerApp);
      let prettyName = await app.prettyNameAsync();
      buffer += prettyName;
      buffer += "\n";
    }

    buffer += "\n";

    for (let index = 0; index < appList4.length; index++) {
      let app = appList4.queryElementAt(index, Ci.nsILocalHandlerApp);
      buffer += app.executable.displayName;
      buffer += "\n";
    }

    buffer += "\n";

    for (let index = 0; index < appList4.length; index++) {
      let app = appList4.queryElementAt(index, Ci.nsILocalHandlerApp);
      if (AppConstants.platform == "win") {
      	let file = app.executable;
        if (file instanceof Ci.nsILocalFileWin) {
          try {
          	buffer += file.getVersionInfoField("FileDescription");
          } catch (e) {
          }
        }
      }
      buffer += "\n";
    }

    buffer += "\nEnd\n";

    console.log(buffer);
  };

  const lazy4 = {};

  XPCOMUtils.defineLazyServiceGetters(lazy4, {
    gMIMEService: ["@mozilla.org/mime;1", "nsIMIMEService"],
  });

  let mimeInfo4 = lazy4.gMIMEService.getFromTypeAndExtension("text/html", "html");

  if (mimeInfo4.hasDefaultHandler) {
    console.log(`HasDefaultHandler = true`);
    console.log(`Description = ${mimeInfo4.defaultDescription}`);
  } else {
    console.log(`HasDefaultHandler = false`);
  }

  let appList4 = mimeInfo4.possibleLocalHandlers || [];
  console.log("appList4 = ");
  console.log(JSON.stringify(appList4));

  printNames(appList4);
}
```

That produces output that can be seen in a pretty form here:
https://docs.google.com/spreadsheets/d/1OvtrZgMlPMJO4Wgu6wwAYvm89orj9HdS_tsDxYn7yrA/edit#gid=0

This does not fix-up things so that all calls to getName() on the LocalHandlerApp are switched to prettyNameAsync. That work is tracked here: https://bugzilla.mozilla.org/show_bug.cgi?id=1884267

Differential Revision: https://phabricator.services.mozilla.com/D203876
2024-03-25 23:19:17 +00:00

145 lines
3.4 KiB
Python

# -*- 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/.
SPHINX_TREES["/uriloader/exthandler"] = "docs"
with Files("**"):
BUG_COMPONENT = ("Firefox", "File Handling")
TEST_DIRS += ["tests"]
XPIDL_SOURCES += [
"nsCExternalHandlerService.idl",
"nsIContentDispatchChooser.idl",
"nsIExternalHelperAppService.idl",
"nsIExternalProtocolService.idl",
"nsIHandlerService.idl",
"nsIHelperAppLauncherDialog.idl",
"nsISharingHandlerApp.idl",
]
XPIDL_MODULE = "exthandler"
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "windows":
osdir = "win"
LOCAL_INCLUDES += ["win"]
elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "cocoa":
osdir = "mac"
elif CONFIG["MOZ_WIDGET_TOOLKIT"] in ("android", "uikit"):
osdir = CONFIG["MOZ_WIDGET_TOOLKIT"]
else:
osdir = "unix"
EXPORTS += [osdir + "/nsOSHelperAppService.h"]
EXPORTS += [
"ContentHandlerService.h",
"nsExternalHelperAppService.h",
"nsMIMEInfoChild.h",
"nsOSHelperAppServiceChild.h",
]
EXPORTS += [
"nsLocalHandlerApp.h",
]
EXPORTS.mozilla.dom += [
"ExternalHelperAppChild.h",
"ExternalHelperAppParent.h",
]
UNIFIED_SOURCES += [
"ContentHandlerService.cpp",
"ExternalHelperAppChild.cpp",
"ExternalHelperAppParent.cpp",
"HandlerServiceParent.cpp",
"nsExternalHelperAppService.cpp",
"nsExternalProtocolHandler.cpp",
"nsLocalHandlerApp.cpp",
"nsMIMEInfoImpl.cpp",
"nsOSHelperAppServiceChild.cpp",
]
if CONFIG["MOZ_BUILD_APP"] == "browser":
DEFINES["MOZ_BUILD_APP_IS_BROWSER"] = True
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "cocoa":
UNIFIED_SOURCES += [
"mac/nsLocalHandlerAppMac.mm",
"mac/nsMIMEInfoMac.mm",
"mac/nsOSHelperAppService.mm",
]
elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "uikit":
UNIFIED_SOURCES += [
"uikit/nsLocalHandlerAppUIKit.mm",
"uikit/nsMIMEInfoUIKit.mm",
"uikit/nsOSHelperAppService.mm",
]
else:
# These files can't be built in unified mode because they redefine LOG.
SOURCES += [
osdir + "/nsOSHelperAppService.cpp",
]
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
UNIFIED_SOURCES += [
"unix/nsGNOMERegistry.cpp",
"unix/nsMIMEInfoUnix.cpp",
]
elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "android":
UNIFIED_SOURCES += [
"android/nsMIMEInfoAndroid.cpp",
]
elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "windows":
UNIFIED_SOURCES += [
"win/nsLocalHandlerAppWin.cpp",
"win/nsMIMEInfoWin.cpp",
]
if CONFIG["MOZ_ENABLE_DBUS"]:
UNIFIED_SOURCES += [
"nsDBusHandlerApp.cpp",
]
EXPORTS.mozilla += [
"DBusHelpers.h",
]
EXTRA_JS_MODULES += [
"ExtHandlerService.sys.mjs",
"WebHandlerApp.sys.mjs",
]
EXTRA_JS_MODULES.handlers += [
"HandlerList.sys.mjs",
]
XPCOM_MANIFESTS += [
"components.conf",
]
IPDL_SOURCES += [
"PExternalHelperApp.ipdl",
"PHandlerService.ipdl",
]
include("/ipc/chromium/chromium-config.mozbuild")
FINAL_LIBRARY = "xul"
LOCAL_INCLUDES += [
"/docshell/base",
"/dom/base",
"/dom/ipc",
"/netwerk/base",
"/netwerk/protocol/http",
]
if CONFIG["MOZ_ENABLE_DBUS"]:
CXXFLAGS += CONFIG["MOZ_DBUS_CFLAGS"]
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"]