forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			81 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // Test for bug 649778 - document.write may cause a document to be written to disk cache even when the page has Cache-Control: no-store
 | |
| 
 | |
| // Globals
 | |
| var testPath = "http://mochi.test:8888/browser/dom/html/test/";
 | |
| var popup;
 | |
| 
 | |
| var {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm", null);
 | |
| 
 | |
| function checkCache(url, inMemory, shouldExist, cb)
 | |
| {
 | |
|   var cache = Services.cache2;
 | |
|   var storage = cache.diskCacheStorage(Services.loadContextInfo.default, false);
 | |
| 
 | |
|   function CheckCacheListener(inMemory, shouldExist)
 | |
|   {
 | |
|     this.inMemory = inMemory;
 | |
|     this.shouldExist = shouldExist;
 | |
|     this.onCacheEntryCheck = function() {
 | |
|       return Ci.nsICacheEntryOpenCallback.ENTRY_WANTED;
 | |
|     };
 | |
| 
 | |
|     this.onCacheEntryAvailable = function oCEA(entry, isNew, appCache, status) {
 | |
|       if (shouldExist) {
 | |
|         ok(entry, "Entry not found");
 | |
|         is(this.inMemory, !entry.persistent, "Entry is " + (inMemory ? "" : " not ") + " in memory as expected");
 | |
|         is(status, Cr.NS_OK, "Entry not found");
 | |
|       } else {
 | |
|         ok(!entry, "Entry found");
 | |
|         is(status, Cr.NS_ERROR_CACHE_KEY_NOT_FOUND,
 | |
|            "Invalid error code");
 | |
|       }
 | |
| 
 | |
|       setTimeout(cb, 0);
 | |
|     };
 | |
|   };
 | |
| 
 | |
|   storage.asyncOpenURI(Services.io.newURI(url), "",
 | |
|                        Ci.nsICacheStorage.OPEN_READONLY,
 | |
|                        new CheckCacheListener(inMemory, shouldExist));
 | |
| }
 | |
| function getPopupURL() {
 | |
|   var sh = popup.QueryInterface(Ci.nsIInterfaceRequestor)
 | |
|                 .getInterface(Ci.nsIWebNavigation)
 | |
|                 .sessionHistory;
 | |
| 
 | |
|   return sh.getEntryAtIndex(sh.index, false).URI.spec;
 | |
| }
 | |
| 
 | |
| var wyciwygURL;
 | |
| function testContinue() {
 | |
|   wyciwygURL = getPopupURL();
 | |
|   is(wyciwygURL.substring(0, 10), "wyciwyg://", "Unexpected URL.");
 | |
|   popup.close()
 | |
| 
 | |
|   // We have to find the entry and it must not be persisted to disk
 | |
|   checkCache(wyciwygURL, true, true, finish);
 | |
| }
 | |
| 
 | |
| function waitForWyciwygDocument() {
 | |
|   try {
 | |
|     var url = getPopupURL();
 | |
|     if (url.substring(0, 10) == "wyciwyg://") {
 | |
|       setTimeout(testContinue, 0);
 | |
|       return;
 | |
|     }
 | |
|   }
 | |
|   catch (e) {
 | |
|   }
 | |
|   setTimeout(waitForWyciwygDocument, 100);
 | |
| }
 | |
| 
 | |
| // Entry point from Mochikit
 | |
| function test() {
 | |
|   waitForExplicitFinish();
 | |
| 
 | |
|   popup = window.open(testPath + "file_bug649778.html", "popup 0",
 | |
|                       "height=200,width=200,location=yes," +
 | |
|                       "menubar=yes,status=yes,toolbar=yes,dependent=yes");
 | |
| 
 | |
|   waitForWyciwygDocument();
 | |
| }
 | 
