forked from mirrors/gecko-dev
92 lines
3.2 KiB
Text
92 lines
3.2 KiB
Text
/* 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/. */
|
|
|
|
#include "nsISupports.idl"
|
|
|
|
interface nsIFile;
|
|
|
|
[scriptable, uuid(fb9b59db-5a91-4e67-92b6-35e7d6e6d3fd)]
|
|
interface nsIWindowsShellService : nsISupports
|
|
{
|
|
void createShortcut(in nsIFile aBinary, in Array<AString> aArguments,
|
|
in AString aDescription, in nsIFile aIconFile, in AString aAppUserModelId,
|
|
in nsIFile aTarget);
|
|
|
|
/*
|
|
* Pin the current app to the taskbar
|
|
*
|
|
* This MUST only be used in response to an active request from the user.
|
|
*
|
|
* Uses an existing shortcut on the Desktop or Start Menu, which would have
|
|
* been created by the installer (for All Users or Current User), in order
|
|
* to ensure that the pin is associated with this executable and AUMID for
|
|
* proper launching and grouping.
|
|
*
|
|
* NOTE: This method probably shouldn't be used on the main thread, it
|
|
* performs blocking disk I/O.
|
|
*
|
|
* NOTE: It is possible for the shortcut match to fail even when a
|
|
* shortcut refers to the current executable, if the paths differ due
|
|
* to e.g. symlinks. This should be rare.
|
|
*
|
|
* This will definitely fail on an OS before Windows 10 build 1809
|
|
* (October 2018 Update).
|
|
*
|
|
* @throws NS_ERROR_NOT_AVAILABLE
|
|
* if OS is not at least Windows 10 build 1809, or if creating the
|
|
* Taskband Pin object fails
|
|
* @throws NS_ERROR_FILE_NOT_FOUND
|
|
* if a shortcut matching this app's AUMID and exe path wasn't found
|
|
* @throws NS_ERROR_FAILURE
|
|
* for unexpected errors
|
|
*/
|
|
void pinCurrentAppToTaskbar();
|
|
|
|
/*
|
|
* Do a dry run of pinCurrentAppToTaskbar()
|
|
*
|
|
* This does all the same checks and setup, throws the same errors, but doesn't
|
|
* do the final step of creating the pin.
|
|
*
|
|
* NOTE: This method probably shouldn't be used on the main thread, it
|
|
* performs blocking disk I/O.
|
|
*
|
|
* @throws same as pinCurrentAppToTaskbar()
|
|
*/
|
|
void checkPinCurrentAppToTaskbar();
|
|
|
|
/*
|
|
* Search for the current executable among taskbar pins
|
|
*
|
|
* NOTE: Can only be run on the main thread, but the actual work occurs on a
|
|
* background thread.
|
|
*
|
|
* NOTE: It is possible for the check to fail even when a taskbar pin refers
|
|
* to this executable, if the paths differ due to e.g. symlinks.
|
|
* It is also possible for the check to succeed with a shortcut that doesn't
|
|
* actually appear on the taskbar.
|
|
* These cases should be rare.
|
|
*
|
|
* @return Promise that always resolves, true if pinned, false otherwise
|
|
* @throws NS_ERROR_NOT_SAME_THREAD if not run on the main thread
|
|
*
|
|
*/
|
|
[implicit_jscontext]
|
|
Promise isCurrentAppPinnedToTaskbarAsync();
|
|
|
|
/*
|
|
* Determine where a given shortcut likely appears in the shell.
|
|
*
|
|
* Returns one of:
|
|
* - "StartMenu", Current User or All Users Start Menu, including pins
|
|
* - "Desktop", Current User or All Users Desktop
|
|
* - "Taskbar", Taskbar Pins
|
|
* - "" otherwise
|
|
*
|
|
* NOTE: This tries to avoid I/O, so paths are compared directly as
|
|
* strings, which may not be accurate in all cases. It is intended
|
|
* for noncritical telemetry use.
|
|
*/
|
|
AString classifyShortcut(in AString aPath);
|
|
};
|