Backed out changeset 0e88de036c55 (bug 1412456) Backed out changeset 49b93f807db0 (bug 1412456) Backed out changeset 039e980b7dc6 (bug 1412456) Backed out changeset c7698410ddbd (bug 1412456) Backed out changeset e56a1ba26b7c (bug 1412456) Backed out changeset 0c4506e124ac (bug 1412456) Backed out changeset a7aec2ce903b (bug 1412456) Backed out changeset 3e9fb71f1e8e (bug 1412456)
89 lines
2.9 KiB
JavaScript
89 lines
2.9 KiB
JavaScript
"use strict";
|
|
|
|
const IMAGE_PAGE = "https://example.com/browser/toolkit/content/tests/browser/image_page.html";
|
|
const PREF_UNSAFE_FORBIDDEN = "dom.ipc.cpows.forbid-unsafe-from-browser";
|
|
|
|
var MockFilePicker = SpecialPowers.MockFilePicker;
|
|
|
|
MockFilePicker.init(window);
|
|
MockFilePicker.returnValue = MockFilePicker.returnCancel;
|
|
|
|
registerCleanupFunction(function() {
|
|
MockFilePicker.cleanup();
|
|
});
|
|
|
|
function waitForFilePicker() {
|
|
return new Promise((resolve) => {
|
|
MockFilePicker.showCallback = () => {
|
|
MockFilePicker.showCallback = null;
|
|
ok(true, "Saw the file picker");
|
|
resolve();
|
|
};
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Test that saveImageURL works when we pass in the aIsContentWindowPrivate
|
|
* argument instead of a document. This is the preferred API.
|
|
*/
|
|
add_task(async function preferred_API() {
|
|
await BrowserTestUtils.withNewTab({
|
|
gBrowser,
|
|
url: IMAGE_PAGE,
|
|
}, async function(browser) {
|
|
let url = await ContentTask.spawn(browser, null, async function() {
|
|
let image = content.document.getElementById("image");
|
|
return image.href;
|
|
});
|
|
|
|
saveImageURL(url, "image.jpg", null, true, false, null, null, null, null, false);
|
|
let channel = content.document.docShell.currentDocumentChannel;
|
|
if (channel) {
|
|
ok(true, channel.QueryInterface(Ci.nsIHttpChannelInternal)
|
|
.channelIsForDownload);
|
|
|
|
// Throttleable is the only class flag assigned to downloads.
|
|
ok(channel.QueryInterface(Ci.nsIClassOfService).classFlags,
|
|
Ci.nsIClassOfService.Throttleable);
|
|
}
|
|
await waitForFilePicker();
|
|
});
|
|
});
|
|
|
|
/**
|
|
* Test that saveImageURL will still work when passed a document instead
|
|
* of the aIsContentWindowPrivate argument. This is the deprecated API, and
|
|
* will not work in apps using remote browsers having PREF_UNSAFE_FORBIDDEN
|
|
* set to true.
|
|
*/
|
|
add_task(async function deprecated_API() {
|
|
await BrowserTestUtils.withNewTab({
|
|
gBrowser,
|
|
url: IMAGE_PAGE,
|
|
}, async function(browser) {
|
|
await pushPrefs([PREF_UNSAFE_FORBIDDEN, false]);
|
|
|
|
let url = await ContentTask.spawn(browser, null, async function() {
|
|
let image = content.document.getElementById("image");
|
|
return image.href;
|
|
});
|
|
|
|
// Now get the document directly from content. If we run this test with
|
|
// e10s-enabled, this will be a CPOW, which is forbidden. We'll just
|
|
// pass the XUL document instead to test this interface.
|
|
let doc = document;
|
|
|
|
let channel = content.document.docShell.currentDocumentChannel;
|
|
if (channel) {
|
|
ok(true, channel.QueryInterface(Ci.nsIHttpChannelInternal)
|
|
.channelIsForDownload);
|
|
|
|
// Throttleable is the only class flag assigned to downloads.
|
|
ok(channel.QueryInterface(Ci.nsIClassOfService).classFlags,
|
|
Ci.nsIClassOfService.Throttleable);
|
|
}
|
|
saveImageURL(url, "image.jpg", null, true, false, null, doc, null, null);
|
|
await waitForFilePicker();
|
|
});
|
|
});
|