mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-29 10:08:38 +00:00
604a6d61ce
- Bug 1123516 - Implement maplike/setlike in WebIDL parser; r=bz (5d62bcd93) - Bug 1140324 - Remove __noSuchMethod__ handling from WebIDL parser and throw an exception instead. r=peterv (f7ea99339) - Bug 1123516 - Implement maplike/setlike in WebIDL Codegen; r=b (0ca39b335) - Bug 1183604, add some more assertions to help implementing new cycle collectable classes, r=mccr8 (1e66d29fe) - Bug 1178665 - Part 1: Make Promise::DispatchToMicroTask public. r=khuey (b962e6006) - Bug 1178665 - Part 2 - Adapt to latest Animation.finish procedure changes. r=bbirtles (33219fc0d) - Bug 1178665 - Part 3: Make finish notifications asynchronously in most cases. r=bbirtles, r=smaug (144c0944a) - Bug1180770part 1. Remove the unused ThrowNotEnoughArgsError. r=peterv (8bc1690f5) - Bug1180770part 2. Remove the unused ifaceName/memberName arguments of ThrowMethodFailedWithDetails and rename it to ThrowMethodFailed. r=peterv (ee4900547) - Bug 1135961. Implement subclassing of DOM objects. r=peterv (8e7e67b88) - Bug 1170691 - part 1 - add the generating script's directory to sys.path in file_generate.py; r=glandium (dd1520952) - Bug 1168409 - part 1 - avoid importing buildconfig in histogram_tools.py; r=gfritzsche (6a46dce23) - Bug 1168409 - part 2 - avoiding importing usecounters in histogram_tools.py; r=gfritzsche (21a468303) - Bug 1144397. Disallow using fill when dedent would do. r=peterv (544d4978d) - Bug 1158806. Don't try to include stuff for a generated hasInstance hook if we have no interface object, since in that case we don't need the include. r=peterv (d280a1608) - missing bit of Bug 1161627 - part 2 - machine-convert TemporaryRef<T> to already_AddRefed<T> (c51384311) - Bug 1166910 followup: Add missing 'override' keyword to HTMLImageElement method GetImageReferrerPolicy. rs=ehsan (9e3dc8e6d) - Bug 1174913 - remove unnecessary attribute parsing. r=bz (fdb769eda) - Bug 1170680 - Do not add non-animated images to the visible list in response to UNLOCKED_DRAW. r=tn (a594883e8) - Bug 1174923 - Stop delaying the document load event until images are decoded. r=tn a=kwierso (caee1b25f) - Bug 968923 - part 3b - propagating use counters from SVG images into owning/parent documents; r=seth (234a41484) - Bug 968923 - part 3a - add core DOM use counter functionality; r=smaug (98bb77358) - Bug 968923 - part 3c - miscellaneous telemetry changes for use counters; r=gfritzsche (83adec291) - Bug 968923 - part 4 - hook up use counters to WebIDL bindings; r=bz (8545e9a9b) - Bug 771367 - Update test_animations_omta.html to support testing pseudo-elements. r=dbaron (4b2e5481b) - Bug 1177563 - Test that we share agent rule processors across different documents. r=dbaron (d64146359) - Bug 1181450 - Make GENERATED_FILES more visible during the build by printing their name when they are being generated. r=gps (b0c2166e8) - Bug 1215526 - part 1 - pass dependencies file to file_generate.py; r=glandium (a14ea304a) - Bug 1215526 - part 2 - write dependencies to file_generate.py's depfile; r=glandium (dc49ad380)
122 lines
3.9 KiB
JavaScript
122 lines
3.9 KiB
JavaScript
waitForExplicitFinish();
|
|
|
|
let pageSource =
|
|
'<html><body>' +
|
|
'<img id="testImg" src="' + TESTROOT + 'big.png">' +
|
|
'</body></html>';
|
|
|
|
let oldDiscardingPref, oldTab, newTab;
|
|
let prefBranch = Cc["@mozilla.org/preferences-service;1"]
|
|
.getService(Ci.nsIPrefService)
|
|
.getBranch('image.mem.');
|
|
|
|
function ImageDiscardObserver(result) {
|
|
this.discard = function onDiscard(request)
|
|
{
|
|
result.wasDiscarded = true;
|
|
this.synchronous = false;
|
|
}
|
|
|
|
this.synchronous = true;
|
|
}
|
|
|
|
function currentRequest() {
|
|
let img = gBrowser.getBrowserForTab(newTab).contentWindow
|
|
.document.getElementById('testImg');
|
|
img.QueryInterface(Ci.nsIImageLoadingContent);
|
|
return img.getRequest(Ci.nsIImageLoadingContent.CURRENT_REQUEST);
|
|
}
|
|
|
|
function isImgDecoded() {
|
|
let request = currentRequest();
|
|
return request.imageStatus & Ci.imgIRequest.STATUS_FRAME_COMPLETE ? true : false;
|
|
}
|
|
|
|
// Ensure that the image is decoded by drawing it to a canvas.
|
|
function forceDecodeImg() {
|
|
let doc = gBrowser.getBrowserForTab(newTab).contentWindow.document;
|
|
let img = doc.getElementById('testImg');
|
|
let canvas = doc.createElement('canvas');
|
|
let ctx = canvas.getContext('2d');
|
|
ctx.drawImage(img, 0, 0);
|
|
}
|
|
|
|
function runAfterAsyncEvents(aCallback) {
|
|
function handlePostMessage(aEvent) {
|
|
if (aEvent.data == 'next') {
|
|
window.removeEventListener('message', handlePostMessage, false);
|
|
aCallback();
|
|
}
|
|
}
|
|
|
|
window.addEventListener('message', handlePostMessage, false);
|
|
|
|
// We'll receive the 'message' event after everything else that's currently in
|
|
// the event queue (which is a stronger guarantee than setTimeout, because
|
|
// setTimeout events may be coalesced). This lets us ensure that we run
|
|
// aCallback *after* any asynchronous events are delivered.
|
|
window.postMessage('next', '*');
|
|
}
|
|
|
|
function test() {
|
|
// Enable the discarding pref.
|
|
oldDiscardingPref = prefBranch.getBoolPref('discardable');
|
|
prefBranch.setBoolPref('discardable', true);
|
|
|
|
// Create and focus a new tab.
|
|
oldTab = gBrowser.selectedTab;
|
|
newTab = gBrowser.addTab('data:text/html,' + pageSource);
|
|
gBrowser.selectedTab = newTab;
|
|
|
|
// Run step2 after the tab loads.
|
|
gBrowser.getBrowserForTab(newTab)
|
|
.addEventListener("pageshow", step2 );
|
|
}
|
|
|
|
function step2() {
|
|
// Create a place to hold the result.
|
|
var result = { wasDiscarded: false };
|
|
|
|
// Create the discard observer.
|
|
var observer = new ImageDiscardObserver(result);
|
|
var scriptedObserver = Cc["@mozilla.org/image/tools;1"]
|
|
.getService(Ci.imgITools)
|
|
.createScriptedObserver(observer);
|
|
|
|
// Clone the current imgIRequest with our new observer.
|
|
var request = currentRequest();
|
|
var clonedRequest = request.clone(scriptedObserver);
|
|
|
|
// Check that the image is decoded.
|
|
forceDecodeImg();
|
|
|
|
// The FRAME_COMPLETE notification is delivered asynchronously, so continue
|
|
// after we're sure it has been delivered.
|
|
runAfterAsyncEvents(() => step3(result, scriptedObserver, clonedRequest));
|
|
}
|
|
|
|
function step3(result, scriptedObserver, clonedRequest) {
|
|
ok(isImgDecoded(), 'Image should initially be decoded.');
|
|
|
|
// Focus the old tab, then fire a memory-pressure notification. This should
|
|
// cause the decoded image in the new tab to be discarded.
|
|
gBrowser.selectedTab = oldTab;
|
|
var os = Cc["@mozilla.org/observer-service;1"]
|
|
.getService(Ci.nsIObserverService);
|
|
os.notifyObservers(null, 'memory-pressure', 'heap-minimize');
|
|
|
|
// The DISCARD notification is delivered asynchronously, so continue after
|
|
// we're sure it has been delivered.
|
|
runAfterAsyncEvents(() => step4(result, scriptedObserver, clonedRequest));
|
|
}
|
|
|
|
function step4(result, scriptedObserver, clonedRequest) {
|
|
ok(result.wasDiscarded, 'Image should be discarded.');
|
|
|
|
// And we're done.
|
|
gBrowser.removeTab(newTab);
|
|
prefBranch.setBoolPref('discardable', oldDiscardingPref);
|
|
clonedRequest.cancelAndForgetObserver(0);
|
|
finish();
|
|
}
|