forked from mirrors/gecko-dev
		
	 1dfbfcfd07
			
		
	
	
		1dfbfcfd07
		
	
	
	
	
		
			
			Depends on D200551 Differential Revision: https://phabricator.services.mozilla.com/D200552
		
			
				
	
	
		
			89 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* Any copyright is dedicated to the Public Domain.
 | |
|    http://creativecommons.org/publicdomain/zero/1.0/ */
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| Services.scriptloader.loadSubScript(
 | |
|   "chrome://mochitests/content/browser/toolkit/content/tests/browser/common/mockTransfer.js",
 | |
|   this
 | |
| );
 | |
| 
 | |
| const TEST_URL =
 | |
|   getRootDirectory(gTestPath).replace(
 | |
|     "chrome://mochitests/content",
 | |
|     "https://example.com"
 | |
|   ) + "file_bug1798178.html";
 | |
| 
 | |
| let MockFilePicker = SpecialPowers.MockFilePicker;
 | |
| MockFilePicker.init(window.browsingContext);
 | |
| 
 | |
| function createTemporarySaveDirectory() {
 | |
|   let saveDir = Services.dirsvc.get("TmpD", Ci.nsIFile);
 | |
|   saveDir.append("testsavedir");
 | |
|   if (!saveDir.exists()) {
 | |
|     info("create testsavedir!");
 | |
|     saveDir.create(Ci.nsIFile.DIRECTORY_TYPE, 0o755);
 | |
|   }
 | |
|   info("return from createTempSaveDir: " + saveDir.path);
 | |
|   return saveDir;
 | |
| }
 | |
| 
 | |
| add_task(async function test_save_link_cross_origin() {
 | |
|   await SpecialPowers.pushPrefEnv({
 | |
|     set: [["browser.opaqueResponseBlocking", true]],
 | |
|   });
 | |
|   await BrowserTestUtils.withNewTab(TEST_URL, async browser => {
 | |
|     let menu = document.getElementById("contentAreaContextMenu");
 | |
|     let popupShown = BrowserTestUtils.waitForEvent(menu, "popupshown");
 | |
|     BrowserTestUtils.synthesizeMouseAtCenter(
 | |
|       "a[href]",
 | |
|       { type: "contextmenu", button: 2 },
 | |
|       browser
 | |
|     );
 | |
|     await popupShown;
 | |
| 
 | |
|     let filePickerShow = new Promise(r => {
 | |
|       MockFilePicker.showCallback = function (fp) {
 | |
|         ok(true, "filepicker should be shown");
 | |
|         info("MockFilePicker showCallback");
 | |
| 
 | |
|         let fileName = fp.defaultString;
 | |
|         destFile = tempDir.clone();
 | |
|         destFile.append(fileName);
 | |
| 
 | |
|         MockFilePicker.setFiles([destFile]);
 | |
|         MockFilePicker.filterIndex = 1; // kSaveAsType_URL
 | |
| 
 | |
|         info("MockFilePicker showCallback done");
 | |
|         r();
 | |
|       };
 | |
|     });
 | |
| 
 | |
|     info("Let's create a temporary dir");
 | |
|     let tempDir = createTemporarySaveDirectory();
 | |
|     let destFile;
 | |
| 
 | |
|     MockFilePicker.displayDirectory = tempDir;
 | |
| 
 | |
|     let transferCompletePromise = new Promise(resolve => {
 | |
|       function onTransferComplete(downloadSuccess) {
 | |
|         ok(downloadSuccess, "File should have been downloaded successfully");
 | |
|         resolve();
 | |
|       }
 | |
|       mockTransferCallback = onTransferComplete;
 | |
|       mockTransferRegisterer.register();
 | |
|     });
 | |
| 
 | |
|     let saveLinkCommand = document.getElementById("context-savelink");
 | |
|     info("saveLinkCommand: " + saveLinkCommand);
 | |
|     saveLinkCommand.doCommand();
 | |
| 
 | |
|     await filePickerShow;
 | |
| 
 | |
|     let popupHiddenPromise = BrowserTestUtils.waitForEvent(menu, "popuphidden");
 | |
|     menu.hidePopup();
 | |
|     await popupHiddenPromise;
 | |
| 
 | |
|     await transferCompletePromise;
 | |
|   });
 | |
| });
 |