зеркало из https://github.com/mozilla/gecko-dev.git
128 строки
5.0 KiB
HTML
128 строки
5.0 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
|
|
<script type="application/javascript">
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
addLoadEvent(test);
|
|
|
|
const Ci = Components.interfaces;
|
|
const Cu = Components.utils;
|
|
|
|
Cu.import('resource://gre/modules/XPCOMUtils.jsm');
|
|
|
|
// The default flags we will stick on the docShell - every request made by the
|
|
// docShell should include those flags.
|
|
const TEST_FLAGS = Ci.nsIRequest.LOAD_ANONYMOUS |
|
|
Ci.nsIRequest.LOAD_BYPASS_CACHE |
|
|
Ci.nsIRequest.INHIBIT_CACHING |
|
|
Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_HISTORY;
|
|
|
|
var TEST_URL = "http://mochi.test:8888/chrome/docshell/test/chrome/bug909218.html";
|
|
|
|
// These are the requests we expect to see loading TEST_URL into our iframe.
|
|
|
|
// The test entry-point. The basic outline is:
|
|
// * Create an iframe and set defaultLoadFlags on its docShell.
|
|
// * Add a web progress listener to observe each request as the iframe is
|
|
// loaded, and check that each request has the flags we specified.
|
|
// * Load our test URL into the iframe and wait for the load to complete.
|
|
function test() {
|
|
var iframe = document.createElement("iframe");
|
|
document.body.appendChild(iframe);
|
|
var docShell = docshellForWindow(iframe.contentWindow);
|
|
// Add our progress listener - when it notices the top-level document is
|
|
// complete, the test will end.
|
|
RequestWatcher.init(docShell, SimpleTest.finish);
|
|
// Set the flags we care about, then load our test URL.
|
|
docShell.defaultLoadFlags = TEST_FLAGS;
|
|
iframe.setAttribute("src", TEST_URL);
|
|
}
|
|
|
|
// an nsIWebProgressListener that checks all requests made by the docShell
|
|
// have the flags we expect.
|
|
RequestWatcher = {
|
|
init: function(docShell, callback) {
|
|
this.callback = callback;
|
|
this.docShell = docShell;
|
|
docShell.
|
|
QueryInterface(Ci.nsIInterfaceRequestor).
|
|
getInterface(Ci.nsIWebProgress).
|
|
addProgressListener(this, Ci.nsIWebProgress.NOTIFY_STATE_REQUEST |
|
|
Ci.nsIWebProgress.NOTIFY_STATE_DOCUMENT);
|
|
// These are the requests we expect to see - initialize each to have a
|
|
// count of zero.
|
|
this.requestCounts = {};
|
|
for (var url of [
|
|
TEST_URL,
|
|
// content loaded by the above test html.
|
|
"http://mochi.test:8888/chrome/docshell/test/chrome/bug909218.js",
|
|
"http://mochi.test:8888/tests/SimpleTest/test.css",
|
|
"http://mochi.test:8888/tests/docshell/test/chrome/red.png",
|
|
// the content of an iframe in the test html.
|
|
"http://mochi.test:8888/chrome/docshell/test/chrome/generic.html"
|
|
]) {
|
|
this.requestCounts[url] = 0;
|
|
}
|
|
},
|
|
|
|
// Finalize the test after we detect a completed load. We check we saw the
|
|
// correct requests and make a callback to exit.
|
|
finalize: function() {
|
|
ok(Object.keys(this.requestCounts).length, "we expected some requests");
|
|
for (var url in this.requestCounts) {
|
|
var count = this.requestCounts[url];
|
|
// As we are looking at all request states, we expect more than 1 for
|
|
// each URL - 0 or 1 would imply something went wrong - >1 just means
|
|
// multiple states for each request were recorded, which we don't care
|
|
// about (we do care they all have the correct flags though - but we
|
|
// do that in onStateChange)
|
|
ok(count > 1, url + " saw " + count + " requests");
|
|
}
|
|
this.docShell.
|
|
QueryInterface(Ci.nsIInterfaceRequestor).
|
|
getInterface(Ci.nsIWebProgress).
|
|
removeProgressListener(this);
|
|
this.callback();
|
|
},
|
|
|
|
onStateChange: function (webProgress, req, flags, status) {
|
|
// We are checking requests - if there isn't one, ignore it.
|
|
if (!req) {
|
|
return;
|
|
}
|
|
// We will usually see requests for 'about:document-onload-blocker' not
|
|
// have the flag, so we just ignore them.
|
|
// We also see, eg, resource://gre-resources/loading-image.png, so
|
|
// skip resource:// URLs too.
|
|
if (req.name.startsWith("about:") || req.name.startsWith("resource:")) {
|
|
return;
|
|
}
|
|
is(req.loadFlags & TEST_FLAGS, TEST_FLAGS, "request " + req.name + " has the expected flags");
|
|
this.requestCounts[req.name] += 1;
|
|
var stopFlags = Ci.nsIWebProgressListener.STATE_STOP |
|
|
Ci.nsIWebProgressListener.STATE_IS_DOCUMENT;
|
|
if (req.name == TEST_URL && (flags & stopFlags) == stopFlags) {
|
|
this.finalize();
|
|
}
|
|
},
|
|
QueryInterface: XPCOMUtils.generateQI([
|
|
Ci.nsIWebProgressListener,
|
|
Ci.nsISupportsWeakReference,
|
|
])
|
|
}
|
|
|
|
function docshellForWindow(win) {
|
|
return win.
|
|
QueryInterface(Ci.nsIInterfaceRequestor).
|
|
getInterface(Ci.nsIWebNavigation).
|
|
QueryInterface(Ci.nsIDocShell);
|
|
}
|
|
|
|
</script>
|
|
</head>
|
|
</html>
|