Backed out changeset 0c01a98f4fd5 (bug 1412456) Backed out changeset 27077db47231 (bug 1412456) Backed out changeset f35ec2a884f8 (bug 1412456) Backed out changeset 602b30ac3c69 (bug 1412456) Backed out changeset b1ff1050c589 (bug 1412456) Backed out changeset f100d953f9eb (bug 1412456) Backed out changeset d85af60fe259 (bug 1412456) Backed out changeset 736f38486832 (bug 1412456) Backed out changeset 13a637602dc2 (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();
|
|
});
|
|
});
|