forked from mirrors/gecko-dev
		
	 5c71755e40
			
		
	
	
		5c71755e40
		
	
	
	
	
		
			
			Backed out changeset 01e19b8ec15b (bug 1743914) Backed out changeset c46d66869d03 (bug 1743914) Backed out changeset 57d0f8824e35 (bug 1743914)
		
			
				
	
	
		
			111 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
	
		
			3.8 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);
 | |
| 
 | |
|   /*
 | |
|    * Check if setDefaultBrowserUserChoice() is expected to succeed.
 | |
|    *
 | |
|    * This checks the ProgIDs for this installation, and the hash of the existing
 | |
|    * UserChoice association.
 | |
|    *
 | |
|    * @return true if the check succeeds, false otherwise.
 | |
|    */
 | |
|   bool canSetDefaultBrowserUserChoice();
 | |
| 
 | |
|   /*
 | |
|    * checkAllProgIDsExist() and checkBrowserUserChoiceHashes() are components
 | |
|    * of canSetDefaultBrowserUserChoice(), broken out for telemetry purposes.
 | |
|    *
 | |
|    * @return true if the check succeeds, false otherwise.
 | |
|    */
 | |
|   bool checkAllProgIDsExist();
 | |
|   bool checkBrowserUserChoiceHashes();
 | |
| };
 |