<?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin" type="text/css"?> <window id="311007Test" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" width="600" height="600" onload="startup();" title="bug 311007 test"> <script type="application/javascript" src="docshell_helpers.js"></script> <script type="application/javascript"><![CDATA[ /* Regression test for bug 283733 and bug 307027. Bug 283733 "accessing a relative anchor in a secure page removes the locked icon and yellow background UI" Bug 307027 "Going back from secure page to error page does not clear yellow bar" And enhancements: Bug 478927 onLocationChange should notify whether or not loading an error page. */ const kDNSErrorURI = "https://example/err.html"; const kSecureURI = "https://example.com/tests/docshell/test/navigation/blank.html"; /* Step 1: load a network error page. <err.html> Not Secure Step 2: load a secure page. <blank.html> Secure Step 3: a secure page + hashchange. <blank.html#foo> Secure (bug 283733) Step 4: go back to the error page. <err.html> Not Secure (bug 307027) */ var gListener = null; function WebProgressListener() { this._callback = null; } WebProgressListener.prototype = { QueryInterface: function(aIID) { if (aIID.equals(Components.interfaces.nsIWebProgressListener) || aIID.equals(Components.interfaces.nsISupportsWeakReference) || aIID.equals(Components.interfaces.nsISupports)) return this; throw Components.results.NS_NOINTERFACE; }, onLocationChange: function(aWebProgress, aRequest, aLocation, aFlags) { setTimeout(this._callback, 0, aWebProgress, aRequest, aLocation, aFlags); }, set callback(aVal) { this._callback = aVal; } }; function startup() { gListener = new WebProgressListener(); document.getElementById("content") .webProgress .addProgressListener(gListener, Components.interfaces.nsIWebProgress .NOTIFY_LOCATION); setTimeout(step1A, 0); } /****************************************************************************** * Step 1: Load an error page, and confirm UA knows it's insecure. ******************************************************************************/ function step1A() { gListener.callback = step1B; content.location = kDNSErrorURI; } function step1B(aWebProgress, aRequest, aLocation, aFlags) { is(aLocation.spec, kDNSErrorURI, "Error page's URI (1)"); ok(!(aFlags & Components.interfaces.nsIWebProgressListener .LOCATION_CHANGE_SAME_DOCUMENT), "DocShell loaded a document (1)"); ok((aFlags & Components.interfaces.nsIWebProgressListener .LOCATION_CHANGE_ERROR_PAGE), "This page is an error page."); ok(!(aWebProgress.QueryInterface(Components.interfaces.nsIDocShell) .securityUI.state & Components.interfaces.nsIWebProgressListener.STATE_IS_SECURE), "This is not a secure page (1)"); /* Go to step 2. */ setTimeout(step2A, 0); } /****************************************************************************** * Step 2: Load a HTTPS page, and confirm it's secure. ******************************************************************************/ function step2A() { gListener.callback = step2B; content.location = kSecureURI; } function step2B(aWebProgress, aRequest, aLocation, aFlags) { is(aLocation.spec, kSecureURI, "A URI on HTTPS (2)"); ok(!(aFlags & Components.interfaces.nsIWebProgressListener .LOCATION_CHANGE_SAME_DOCUMENT), "DocShell loaded a document (2)"); ok(!(aFlags & Components.interfaces.nsIWebProgressListener .LOCATION_CHANGE_ERROR_PAGE), "This page is not an error page."); ok((aWebProgress.QueryInterface(Components.interfaces.nsIDocShell) .securityUI.state & Components.interfaces.nsIWebProgressListener.STATE_IS_SECURE), "This is a secure page (2)"); /* Go to step 3. */ setTimeout(step3A, 0); } /***************************************************************************** * Step 3: Trigger hashchange within a secure page, and confirm UA knows * it's secure. (Bug 283733) *****************************************************************************/ function step3A() { gListener.callback = step3B; content.location += "#foo"; } function step3B(aWebProgress, aRequest, aLocation, aFlags) { is(aLocation.spec, kSecureURI + "#foo", "hashchange on HTTPS (3)"); ok((aFlags & Components.interfaces.nsIWebProgressListener .LOCATION_CHANGE_SAME_DOCUMENT), "We are in the same document as before (3)"); ok(!(aFlags & Components.interfaces.nsIWebProgressListener .LOCATION_CHANGE_ERROR_PAGE), "This page is not an error page."); ok((aWebProgress.QueryInterface(Components.interfaces.nsIDocShell) .securityUI.state & Components.interfaces.nsIWebProgressListener.STATE_IS_SECURE), "This is a secure page (3)"); /* Go to step 4. */ setTimeout(step4A, 0); } /***************************************************************************** * Step 4: Go back from a secure page to an error page, and confirm UA knows * it's not secure. (Bug 307027) *****************************************************************************/ function step4A() { gListener.callback = step4B; content.history.go(-2); } function step4B(aWebProgress, aRequest, aLocation, aFlags) { is(aLocation.spec, kDNSErrorURI, "Go back to the error URI (4)"); ok(!(aFlags & Components.interfaces.nsIWebProgressListener .LOCATION_CHANGE_SAME_DOCUMENT), "DocShell loaded a document (4)"); ok((aFlags & Components.interfaces.nsIWebProgressListener .LOCATION_CHANGE_ERROR_PAGE), "This page is an error page."); ok(!(aWebProgress.QueryInterface(Components.interfaces.nsIDocShell) .securityUI.state & Components.interfaces.nsIWebProgressListener.STATE_IS_SECURE), "This is not a secure page (4)"); /* End. */ aWebProgress.removeProgressListener(gListener); delete(gListener); finish(); } ]]></script> <browser type="content-primary" flex="1" id="content" src="about:blank"/> </window>