summaryrefslogtreecommitdiffstats
path: root/mobile/android/tests/browser/chrome/test_offline_page.html
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/tests/browser/chrome/test_offline_page.html')
-rw-r--r--mobile/android/tests/browser/chrome/test_offline_page.html111
1 files changed, 111 insertions, 0 deletions
diff --git a/mobile/android/tests/browser/chrome/test_offline_page.html b/mobile/android/tests/browser/chrome/test_offline_page.html
new file mode 100644
index 000000000..e1b723266
--- /dev/null
+++ b/mobile/android/tests/browser/chrome/test_offline_page.html
@@ -0,0 +1,111 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=1089190
+Migrated from Robocop: https://bugzilla.mozilla.org/show_bug.cgi?id=1184186
+-->
+<head>
+ <meta charset="utf-8">
+ <title>Test for Bug 1089190</title>
+ <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+ <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SpawnTask.js"></script>
+ <link rel="stylesheet" type="text/css" href="chrome://global/skin"/>
+ <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
+ <script type="application/javascript" src="head.js"></script>
+ <script type="application/javascript;version=1.7">
+
+ "use strict";
+
+ const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
+
+ Cu.import("resource://gre/modules/Services.jsm");
+ Cu.import("resource://gre/modules/Messaging.jsm");
+ Cu.import("resource://gre/modules/Task.jsm");
+
+ // Provide a helper to yield until we are sure the offline state has changed
+ function promiseOffline(isOffline) {
+ return new Promise((resolve, reject) => {
+ function observe(subject, topic, data) {
+ info("Received topic: " + topic);
+ Services.obs.removeObserver(observe, "network:offline-status-changed");
+ resolve();
+ }
+ Services.obs.addObserver(observe, "network:offline-status-changed", false);
+ Services.io.offline = isOffline;
+ });
+ }
+
+ // The chrome window
+ let chromeWin;
+
+ // Track the <browser> where the tests are happening
+ let browser;
+
+ // The proxy setting
+ let proxyPrefValue;
+
+ const kUniqueURI = Services.io.newURI("http://mochi.test:8888/chrome/mobile/android/tests/browser/chrome/video_controls.html", null, null);
+
+ add_task(function* test_offline() {
+ // Tests always connect to localhost, and per bug 87717, localhost is now
+ // reachable in offline mode. To avoid this, disable any proxy.
+ proxyPrefValue = Services.prefs.getIntPref("network.proxy.type");
+ Services.prefs.setIntPref("network.proxy.type", 0);
+
+ // Clear network cache.
+ Cc["@mozilla.org/netwerk/cache-storage-service;1"].getService(Ci.nsICacheStorageService).clear();
+
+ chromeWin = Services.wm.getMostRecentWindow("navigator:browser");
+ let BrowserApp = chromeWin.BrowserApp;
+
+ // Add a new tab with a blank page so we can better control the real page load and the offline state
+ browser = BrowserApp.addTab("about:blank", { selected: true, parentId: BrowserApp.selectedTab.id }).browser;
+
+ SimpleTest.registerCleanupFunction(function() {
+ BrowserApp.closeTab(BrowserApp.getTabForBrowser(browser));
+ Services.prefs.setIntPref("network.proxy.type", proxyPrefValue);
+ Services.io.offline = false;
+ });
+
+ // Go offline, expecting the error page.
+ yield promiseOffline(true);
+
+ // Load our test web page
+ browser.loadURI(kUniqueURI.spec, null, null)
+ yield promiseBrowserEvent(browser, "DOMContentLoaded");
+
+ // This is an error page.
+ is(browser.contentDocument.documentURI.substring(0, 27), "about:neterror?e=netOffline", "Document URI is the error page.");
+
+ // But location bar should show the original request.
+ is(browser.contentWindow.location.href, kUniqueURI.spec, "Docshell URI is the original URI.");
+
+ Services.prefs.setIntPref("network.proxy.type", proxyPrefValue);
+
+ // Go online and try to load the page again
+ yield promiseOffline(false);
+
+ ok(browser.contentDocument.getElementById("errorTryAgain"), "The error page has got a #errorTryAgain element");
+
+ // Click "Try Again" button to start the page load
+ browser.contentDocument.getElementById("errorTryAgain").click();
+ yield promiseBrowserEvent(browser, "DOMContentLoaded");
+
+ // This is not an error page.
+ is(browser.contentDocument.documentURI, kUniqueURI.spec, "Document URI is not the offline-error page, but the original URI.");
+ });
+
+ </script>
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1089190">Mozilla Bug 1089190</a>
+<br>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1184186">Migrated from Robocop testOfflinePage</a>
+<p id="display"></p>
+<div id="content" style="display: none">
+
+</div>
+<pre id="test">
+</pre>
+</body>
+</html>