/* * Tests for bug 1241100: Post to local file should not overwrite the file. */ ChromeUtils.import("resource://gre/modules/osfile.jsm"); async function createTestFile(filename, content) { let path = OS.Path.join(OS.Constants.Path.tmpDir, filename); await OS.File.writeAtomic(path, content); return path; } async function readFile(path) { var array = await OS.File.read(path); var decoder = new TextDecoder(); return decoder.decode(array); } function frameScript() { addMessageListener("Test:WaitForIFrame", function() { var check = function() { if (content) { var frame = content.document.getElementById("frame"); if (frame) { var okBox = frame.contentDocument.getElementById("action_file_ok"); if (okBox) { sendAsyncMessage("Test:IFrameLoaded"); return; } } } setTimeout(check, 100); }; check(); }); } add_task(async function() { var postFilename = "post_file.html"; var actionFilename = "action_file.html"; var postFileContent = ` post file
`; var actionFileContent = ` action file
ok
`; var postPath = await createTestFile(postFilename, postFileContent); var actionPath = await createTestFile(actionFilename, actionFileContent); var postURI = OS.Path.toFileURI(postPath); gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, postURI); let browser = gBrowser.selectedBrowser; browser.messageManager.loadFrameScript("data:,(" + frameScript.toString() + ")();", true); await new Promise(resolve => { let manager = browser.messageManager; function listener() { manager.removeMessageListener("Test:IFrameLoaded", listener); resolve(); } manager.addMessageListener("Test:IFrameLoaded", listener); manager.sendAsyncMessage("Test:WaitForIFrame"); }); var actionFileContentAfter = await readFile(actionPath); is(actionFileContentAfter, actionFileContent, "action file is not modified"); await OS.File.remove(postPath); await OS.File.remove(actionPath); gBrowser.removeCurrentTab(); });