summaryrefslogtreecommitdiffstats
path: root/dom/system/tests/test_system_update_enabled.html
diff options
context:
space:
mode:
Diffstat (limited to 'dom/system/tests/test_system_update_enabled.html')
-rw-r--r--dom/system/tests/test_system_update_enabled.html175
1 files changed, 175 insertions, 0 deletions
diff --git a/dom/system/tests/test_system_update_enabled.html b/dom/system/tests/test_system_update_enabled.html
new file mode 100644
index 000000000..1d820d37d
--- /dev/null
+++ b/dom/system/tests/test_system_update_enabled.html
@@ -0,0 +1,175 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=1037329
+-->
+<head>
+ <meta charset="utf-8">
+ <title>System Update API Test</title>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+ <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1037329">Test System Update API</a>
+<script type="application/javascript;version=1.8">
+
+'use strict';
+
+SimpleTest.waitForExplicitFinish();
+
+function setup() {
+ window.gUrl = SimpleTest.getTestFileURL('preload-SystemUpdateManager-jsm.js');
+ window.gScript = SpecialPowers.loadChromeScript(gUrl);
+ return Promise.resolve();
+}
+
+function testGetProviders() {
+ return new Promise(function(resolve, reject) {
+ navigator.updateManager.getProviders().then(function(providerInfos) {
+ info('num of providers: ' + providerInfos.length);
+ for (let providerInfo of providerInfos) {
+ info('provider info: ' + JSON.stringify(providerInfo));
+ }
+ resolve(providerInfos);
+ });
+ });
+}
+
+function testSetActiveProvider(providerInfos) {
+ return new Promise(function(resolve, reject) {
+ //Find the mock provider for our testing provider instead.
+ //Set the mock provider as active provider.
+ let targetProvider = providerInfos[0];
+ for(let provider of providerInfos) {
+ if(provider.uuid == "{17a84227-28f4-453d-9b80-9ae75a5682e0}") {
+ info('target provider uuid: ' + provider.uuid);
+ targetProvider = provider;
+ break;
+ }
+ }
+ is("{17a84227-28f4-453d-9b80-9ae75a5682e0}", targetProvider.uuid, 'get the dynamically added provider');
+ navigator.updateManager.setActiveProvider(targetProvider.uuid).then(function(activeProvider) {
+ info('active provider info: ' + JSON.stringify(activeProvider.info));
+ is(activeProvider.name, targetProvider.name, 'expected name of active provider');
+ is(activeProvider.uuid, targetProvider.uuid, 'expected uuid of active provider');
+ resolve({name : activeProvider.name, uuid : activeProvider.uuid});
+ });
+ });
+}
+
+function testGetActiveProvider(providerInfo) {
+ info('test GetActiveProvider');
+ return new Promise(function(resolve, reject) {
+ navigator.updateManager.getActiveProvider().then(function(activeProvider) {
+ is(activeProvider.name, providerInfo.name, 'expected name of active provider');
+ is(activeProvider.uuid, providerInfo.uuid, 'expected uuid of active provider');
+ resolve(activeProvider);
+ });
+ });
+}
+
+function testCheckForUpdate(provider) {
+ info('test CheckForUpdate');
+ return new Promise(function(resolve, reject) {
+ provider.addEventListener('updateavailable', function(event) {
+ ok(true, 'receive updateavailable event');
+ info('event: ' + JSON.stringify(event.detail));
+ resolve(provider);
+ });
+ provider.checkForUpdate();
+ });
+}
+
+function testStartDownload(provider) {
+ info('test StartDownload');
+ return new Promise(function(resolve, reject) {
+ provider.addEventListener('progress', function(event) {
+ ok(true, 'receive progress event');
+ is(event.loaded, 10, 'expected loaded');
+ is(event.total, 100, 'expected total');
+ resolve(provider);
+ });
+ provider.startDownload();
+ });
+}
+function testStopDownload(provider) {
+ info('test StopDownload');
+ return new Promise(function(resolve, reject) {
+ provider.stopDownload();
+ resolve(provider);
+ });
+}
+function testApplyUpdate(provider) {
+ info('test ApplyUpdate');
+ return new Promise(function(resolve, reject) {
+ provider.applyUpdate();
+ resolve(provider);
+ });
+}
+function testGetParameter(provider) {
+ info('test GetParameter');
+ return new Promise(function(resolve, reject) {
+ let dummy = provider.getParameter('dummy');
+ is(dummy, 'dummy-value', 'expected parameter');
+ resolve(provider);
+ });
+}
+function testSetParameter(provider) {
+ info('test SetParameter');
+ return new Promise(function(resolve, reject) {
+ provider.setParameter('dummy', 'dummy-value');
+ resolve();
+ });
+}
+function testSetActiveProviderError() {
+ info('test setActiveProvider error');
+ return new Promise(function(resolve, reject) {
+ navigator.updateManager.setActiveProvider('something not exsited').then(function(provider) {
+ ok(false, 'should not success');
+ resolve();
+ }, function(reason) {
+ info('error message: ' + reason);
+ ok(true, 'expected error while setActiveProvider');
+ resolve();
+ });
+ });
+}
+
+
+function runTest() {
+ ok(navigator.updateManager, 'should have navigator.updateManager');
+
+ setup()
+ .then(testGetProviders)
+ .then(testSetActiveProvider)
+ .then(testGetActiveProvider)
+ .then(testCheckForUpdate)
+ .then(testStartDownload)
+ .then(testStopDownload)
+ .then(testApplyUpdate)
+ .then(testGetParameter)
+ .then(testSetParameter)
+ .then(testSetActiveProviderError)
+ .then(function() {
+ info('test finished');
+ gScript.destroy();
+ SimpleTest.finish();
+ });
+}
+
+SpecialPowers.pushPermissions([
+ {type: 'system-update', allow: true, context: document},
+ ], function() {
+ SpecialPowers.pushPrefEnv({
+ 'set': [
+ ['dom.system_update.enabled', true],
+ ['dom.system_update.debug', true],
+ ['dom.system_update.active', '@mozilla.org/test-update-provider;1'],
+ ]
+ }, runTest);
+ }
+);
+</script>
+</pre>
+</body>
+</html>