mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-27 10:57:34 +09:00
346 lines
12 KiB
HTML
346 lines
12 KiB
HTML
|
|
<html xmlns="http://www.w3.org/1999/xhtml" manifest="http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/updatingManifest.sjs">
|
||
|
|
<head>
|
||
|
|
<title>Cache update test</title>
|
||
|
|
|
||
|
|
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||
|
|
<script type="text/javascript" src="/tests/dom/tests/mochitest/ajax/offline/offlineTests.js"></script>
|
||
|
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||
|
|
|
||
|
|
<script class="testbody" type="text/javascript">
|
||
|
|
|
||
|
|
/**
|
||
|
|
* This test loads manifest and checks presence of all items.
|
||
|
|
* Then it modifies the manifest and updates the cache again.
|
||
|
|
* Then test presence of items according to the spec and also
|
||
|
|
* if the cache associated with the document is still the old
|
||
|
|
* one. Then again modifies the manifest, checks items and finally
|
||
|
|
* swaps cache for this document, reloads and checks document state.
|
||
|
|
*/
|
||
|
|
|
||
|
|
const NAMESPACE_BYPASS = SpecialPowers.Ci.nsIApplicationCacheNamespace.NAMESPACE_BYPASS;
|
||
|
|
const NAMESPACE_FALLBACK = SpecialPowers.Ci.nsIApplicationCacheNamespace.NAMESPACE_FALLBACK;
|
||
|
|
|
||
|
|
var gStep = 0;
|
||
|
|
var gGotFrameVersion = 0;
|
||
|
|
var gCallOnUpdatingFrameLoad = null;
|
||
|
|
|
||
|
|
// Helpers
|
||
|
|
|
||
|
|
function reloadLocations(frames)
|
||
|
|
{
|
||
|
|
for (frame in frames)
|
||
|
|
frames[frame].location.reload();
|
||
|
|
}
|
||
|
|
|
||
|
|
function waitForLocations(frames, doneFunc)
|
||
|
|
{
|
||
|
|
frame = frames.shift();
|
||
|
|
if (frame)
|
||
|
|
// toString() might cause problems when this test will
|
||
|
|
// completely be changed to test IDN behavior.
|
||
|
|
OfflineTest.waitForAdd(frame, function()
|
||
|
|
{
|
||
|
|
waitForLocations(frames, doneFunc);
|
||
|
|
}
|
||
|
|
);
|
||
|
|
else
|
||
|
|
{
|
||
|
|
doneFunc();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function checkFallbackAndWhitelisting(key, fallback, onwhitelist)
|
||
|
|
{
|
||
|
|
// Get matching namespace for the key
|
||
|
|
var matchingNamespace = OfflineTest.getActiveCache()
|
||
|
|
.getMatchingNamespace(key);
|
||
|
|
|
||
|
|
// If we are not expecting the key is to be on white list or
|
||
|
|
// has been assigned a fallback check there is not any matching
|
||
|
|
// namespace found and exit
|
||
|
|
if (!fallback && !onwhitelist) {
|
||
|
|
is(matchingNamespace, null, "No namespace found for "+key);
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// We expect this entry is on the white list or has a fallback
|
||
|
|
// entry assigned, check we found a matching namespace
|
||
|
|
ok(matchingNamespace, "We have a namespace for "+key);
|
||
|
|
if (!matchingNamespace)
|
||
|
|
return;
|
||
|
|
|
||
|
|
// We expect the key be assigned a fallback URI, check the namespace
|
||
|
|
// type is of fallback type
|
||
|
|
OfflineTest.is(!!(matchingNamespace.itemType & NAMESPACE_FALLBACK), !!fallback,
|
||
|
|
(fallback ? "Namespace type is fallback for " : "Namespace type is not fallback for ")+key);
|
||
|
|
|
||
|
|
// We expect the key be assigned a fallback URI, check the URI is
|
||
|
|
// equal to expected one
|
||
|
|
OfflineTest.is(matchingNamespace.data, fallback,
|
||
|
|
(fallback ? "Expected correct fallback for " : "No fallback for ")+key);
|
||
|
|
|
||
|
|
// We expect the key be on the white list, check the namespace type
|
||
|
|
// is of bypass type
|
||
|
|
OfflineTest.is(!!(matchingNamespace.itemType & NAMESPACE_BYPASS), onwhitelist,
|
||
|
|
(onwhitelist ? "On white list " : "Not on white list ")+key);
|
||
|
|
}
|
||
|
|
|
||
|
|
// Events
|
||
|
|
|
||
|
|
function frameLoad(version)
|
||
|
|
{
|
||
|
|
gGotFrameVersion = version;
|
||
|
|
if (gCallOnUpdatingFrameLoad)
|
||
|
|
{
|
||
|
|
var call = gCallOnUpdatingFrameLoad;
|
||
|
|
gCallOnUpdatingFrameLoad = null;
|
||
|
|
SimpleTest.executeSoon(OfflineTest.priv(call));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function whitelistOnLoad(version)
|
||
|
|
{
|
||
|
|
// Whitelisting is not tested by this test...
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
// Start of the test function chain
|
||
|
|
// ================================
|
||
|
|
|
||
|
|
function manifestCached()
|
||
|
|
{
|
||
|
|
OfflineTest.is(gStep, 0, "Got manifestCached in step 0, gStep=" + gStep);
|
||
|
|
|
||
|
|
reloadLocations([fallbackFrame1, fallbackFrame2]);
|
||
|
|
waitForLocations(
|
||
|
|
["http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/fallback.html"],
|
||
|
|
fallbackLoaded
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
function fallbackLoaded()
|
||
|
|
{
|
||
|
|
dump("in fallbackLoaded\n");
|
||
|
|
applicationCache.mozAdd("http://mochi.test:8888/tests/SimpleTest/EventUtils.js");
|
||
|
|
OfflineTest.waitForAdd("http://mochi.test:8888/tests/SimpleTest/EventUtils.js",
|
||
|
|
dynamicLoaded);
|
||
|
|
}
|
||
|
|
|
||
|
|
function dynamicLoaded()
|
||
|
|
{
|
||
|
|
window.open("http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/updatingImplicit.html");
|
||
|
|
// window.applicationCache.noupdate invokes implicitLoaded()
|
||
|
|
}
|
||
|
|
|
||
|
|
function implicitLoaded(aWindow, errorOccured)
|
||
|
|
{
|
||
|
|
aWindow.close();
|
||
|
|
|
||
|
|
OfflineTest.ok(!errorOccured, "No error on new implicit page manifest update");
|
||
|
|
|
||
|
|
OfflineTest.waitForAdd("http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/updatingImplicit.html",
|
||
|
|
implicitCached);
|
||
|
|
}
|
||
|
|
|
||
|
|
function implicitCached()
|
||
|
|
{
|
||
|
|
// Checking first version of the manifest + another implict page caching
|
||
|
|
|
||
|
|
// Whitelist entries
|
||
|
|
checkFallbackAndWhitelisting("http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/onwhitelist.html", "", true);
|
||
|
|
|
||
|
|
// Fallback URI selection check
|
||
|
|
checkFallbackAndWhitelisting("http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/namespace1/opp.html",
|
||
|
|
"http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/fallback.html", false);
|
||
|
|
checkFallbackAndWhitelisting("http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/namespace1/sub/opp.html",
|
||
|
|
"http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/fallback.html", false);
|
||
|
|
|
||
|
|
// Cache object status
|
||
|
|
OfflineTest.is(applicationCache.status, SpecialPowers.Ci.nsIDOMOfflineResourceList.IDLE,
|
||
|
|
"we have associated application cache (1)");
|
||
|
|
|
||
|
|
OfflineTest.is(gGotFrameVersion, 1, "IFrame version 1");
|
||
|
|
|
||
|
|
var entries = [
|
||
|
|
// Explicit entries
|
||
|
|
["http://mochi.test:8888/tests/SimpleTest/SimpleTest.js", false],
|
||
|
|
["http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/offlineTests.js", true],
|
||
|
|
|
||
|
|
// Fallback entries
|
||
|
|
["http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/fallback.html", true],
|
||
|
|
["http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/fallback2.html", false],
|
||
|
|
|
||
|
|
// Whitelist entries
|
||
|
|
["http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/onwhitelist.html", false],
|
||
|
|
|
||
|
|
// Implicit entries
|
||
|
|
["http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/updatingImplicit.html", true],
|
||
|
|
|
||
|
|
// Dynamic entries
|
||
|
|
["http://mochi.test:8888/tests/SimpleTest/EventUtils.js", true]
|
||
|
|
];
|
||
|
|
OfflineTest.checkCacheEntries(
|
||
|
|
entries,
|
||
|
|
function() {
|
||
|
|
++gStep;
|
||
|
|
|
||
|
|
OfflineTest.setSJSState("http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/updatingManifest.sjs", "second");
|
||
|
|
|
||
|
|
applicationCache.update();
|
||
|
|
// Invokes manifestUpdated()
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
function manifestUpdated()
|
||
|
|
{
|
||
|
|
OfflineTest.ok(gStep == 1 || gStep == 2, "Got manifestUpdated in step 1 or 2, gStep=" + gStep);
|
||
|
|
|
||
|
|
switch (gStep)
|
||
|
|
{
|
||
|
|
case 1:
|
||
|
|
// Processing second version of the manifest.
|
||
|
|
|
||
|
|
// Whitelist entries
|
||
|
|
checkFallbackAndWhitelisting("http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/onwhitelist.html", "", false);
|
||
|
|
|
||
|
|
// Fallback URI selection check
|
||
|
|
checkFallbackAndWhitelisting("http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/namespace1/opp.html",
|
||
|
|
"http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/fallback.html", false);
|
||
|
|
checkFallbackAndWhitelisting("http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/namespace1/sub/opp.html",
|
||
|
|
"http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/fallback2.html", false);
|
||
|
|
|
||
|
|
// Cache object status
|
||
|
|
OfflineTest.is(applicationCache.status, SpecialPowers.Ci.nsIDOMOfflineResourceList.UPDATEREADY,
|
||
|
|
"we have associated application cache and update is pending (2)");
|
||
|
|
|
||
|
|
var entries = [
|
||
|
|
// Explicit entries
|
||
|
|
["http://mochi.test:8888/tests/SimpleTest/SimpleTest.js", true],
|
||
|
|
["http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/offlineTests.js", true],
|
||
|
|
|
||
|
|
// Fallback entries
|
||
|
|
["http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/fallback.html", true],
|
||
|
|
["http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/fallback2.html", true],
|
||
|
|
|
||
|
|
// Whitelist entries
|
||
|
|
["http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/onwhitelist.html", false],
|
||
|
|
|
||
|
|
// Implicit entries
|
||
|
|
["http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/updatingImplicit.html", true],
|
||
|
|
|
||
|
|
// Dynamic entries
|
||
|
|
["http://mochi.test:8888/tests/SimpleTest/EventUtils.js", true]
|
||
|
|
];
|
||
|
|
OfflineTest.checkCacheEntries(
|
||
|
|
entries,
|
||
|
|
function() {
|
||
|
|
++gStep;
|
||
|
|
|
||
|
|
OfflineTest.setSJSState("http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/updatingManifest.sjs", "third");
|
||
|
|
OfflineTest.setSJSState("http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/updatingIframe.sjs", "second");
|
||
|
|
|
||
|
|
gGotFrameVersion = 0;
|
||
|
|
updatingFrame.location.reload();
|
||
|
|
// Since the frame is offline-cached, reload of it invokes update
|
||
|
|
});
|
||
|
|
|
||
|
|
break;
|
||
|
|
|
||
|
|
case 2:
|
||
|
|
// Processing third version of the manifest.
|
||
|
|
|
||
|
|
// Whitelist entries
|
||
|
|
checkFallbackAndWhitelisting("http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/onwhitelist.html", "", true);
|
||
|
|
|
||
|
|
// Fallback URI selection check
|
||
|
|
checkFallbackAndWhitelisting("http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/namespace1/opp.html",
|
||
|
|
"", false);
|
||
|
|
checkFallbackAndWhitelisting("http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/namespace1/sub/opp.html",
|
||
|
|
"http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/fallback2.html", false);
|
||
|
|
|
||
|
|
// Cache object status
|
||
|
|
OfflineTest.is(applicationCache.status, SpecialPowers.Ci.nsIDOMOfflineResourceList.UPDATEREADY,
|
||
|
|
"we have associated application cache and update is pending (3)");
|
||
|
|
|
||
|
|
OfflineTest.is(gGotFrameVersion, 1, "IFrame version 1 because cache was not swapped");
|
||
|
|
|
||
|
|
var entries = [
|
||
|
|
// Explicit entries
|
||
|
|
["http://mochi.test:8888/tests/SimpleTest/SimpleTest.js", false],
|
||
|
|
["http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/offlineTests.js", true],
|
||
|
|
|
||
|
|
// Fallback entries
|
||
|
|
["http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/fallback.html", false],
|
||
|
|
["http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/fallback2.html", true],
|
||
|
|
|
||
|
|
// Whitelist entries
|
||
|
|
["http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/onwhitelist.html", false],
|
||
|
|
|
||
|
|
// Implicit entries
|
||
|
|
["http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/updatingImplicit.html", true],
|
||
|
|
|
||
|
|
// Dynamic entries
|
||
|
|
["http://mochi.test:8888/tests/SimpleTest/EventUtils.js", true]
|
||
|
|
];
|
||
|
|
OfflineTest.checkCacheEntries(
|
||
|
|
entries,
|
||
|
|
function() {
|
||
|
|
++gStep;
|
||
|
|
|
||
|
|
applicationCache.onnoupdate = OfflineTest.priv(manifestNoUpdate);
|
||
|
|
applicationCache.update();
|
||
|
|
// Invokes manifestNoUpdate()
|
||
|
|
});
|
||
|
|
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function manifestNoUpdate()
|
||
|
|
{
|
||
|
|
applicationCache.onnoupdate = null;
|
||
|
|
|
||
|
|
OfflineTest.ok(gStep == 3, "Got manifestNoUpdate in step 3, gStep=" + gStep);
|
||
|
|
++gStep;
|
||
|
|
|
||
|
|
OfflineTest.is(applicationCache.status, SpecialPowers.Ci.nsIDOMOfflineResourceList.UPDATEREADY,
|
||
|
|
"we have associated application cache and update is pending (4)");
|
||
|
|
applicationCache.swapCache();
|
||
|
|
OfflineTest.is(applicationCache.status, SpecialPowers.Ci.nsIDOMOfflineResourceList.IDLE,
|
||
|
|
"we have associated application cache (4)");
|
||
|
|
|
||
|
|
gGotFrameVersion = 0;
|
||
|
|
gCallOnUpdatingFrameLoad = checkNewVersionOfIFrame;
|
||
|
|
updatingFrame.location.reload();
|
||
|
|
}
|
||
|
|
|
||
|
|
function checkNewVersionOfIFrame()
|
||
|
|
{
|
||
|
|
OfflineTest.is(gGotFrameVersion, 2, "IFrame version 2");
|
||
|
|
|
||
|
|
OfflineTest.teardownAndFinish();
|
||
|
|
}
|
||
|
|
|
||
|
|
// End of the test function chain
|
||
|
|
// ==============================
|
||
|
|
|
||
|
|
SimpleTest.waitForExplicitFinish();
|
||
|
|
SimpleTest.requestFlakyTimeout("untriaged");
|
||
|
|
|
||
|
|
if (OfflineTest.setup()) {
|
||
|
|
applicationCache.onerror = OfflineTest.failEvent;
|
||
|
|
applicationCache.onupdateready = OfflineTest.priv(manifestUpdated);
|
||
|
|
applicationCache.oncached = OfflineTest.priv(manifestCached);
|
||
|
|
}
|
||
|
|
|
||
|
|
</script>
|
||
|
|
|
||
|
|
</head>
|
||
|
|
|
||
|
|
<body>
|
||
|
|
<iframe name="updatingFrame" src="http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/updatingIframe.sjs"></iframe>
|
||
|
|
<iframe name="fallbackFrame1" src="http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/namespace1/opp.html"></iframe>
|
||
|
|
<iframe name="fallbackFrame2" src="http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/namespace1/sub/opp.html"></iframe>
|
||
|
|
<iframe name="whitelistFrame" src="http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/onwhitelist.html"></iframe>
|
||
|
|
</body>
|
||
|
|
</html>
|