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);
 | |
| };
 | 
