test_system_update_enabled.html 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <!DOCTYPE HTML>
  2. <html>
  3. <!--
  4. https://bugzilla.mozilla.org/show_bug.cgi?id=1037329
  5. -->
  6. <head>
  7. <meta charset="utf-8">
  8. <title>System Update API Test</title>
  9. <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
  10. <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
  11. </head>
  12. <body>
  13. <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1037329">Test System Update API</a>
  14. <script type="application/javascript;version=1.8">
  15. 'use strict';
  16. SimpleTest.waitForExplicitFinish();
  17. function setup() {
  18. window.gUrl = SimpleTest.getTestFileURL('preload-SystemUpdateManager-jsm.js');
  19. window.gScript = SpecialPowers.loadChromeScript(gUrl);
  20. return Promise.resolve();
  21. }
  22. function testGetProviders() {
  23. return new Promise(function(resolve, reject) {
  24. navigator.updateManager.getProviders().then(function(providerInfos) {
  25. info('num of providers: ' + providerInfos.length);
  26. for (let providerInfo of providerInfos) {
  27. info('provider info: ' + JSON.stringify(providerInfo));
  28. }
  29. resolve(providerInfos);
  30. });
  31. });
  32. }
  33. function testSetActiveProvider(providerInfos) {
  34. return new Promise(function(resolve, reject) {
  35. //Find the mock provider for our testing provider instead.
  36. //Set the mock provider as active provider.
  37. let targetProvider = providerInfos[0];
  38. for(let provider of providerInfos) {
  39. if(provider.uuid == "{17a84227-28f4-453d-9b80-9ae75a5682e0}") {
  40. info('target provider uuid: ' + provider.uuid);
  41. targetProvider = provider;
  42. break;
  43. }
  44. }
  45. is("{17a84227-28f4-453d-9b80-9ae75a5682e0}", targetProvider.uuid, 'get the dynamically added provider');
  46. navigator.updateManager.setActiveProvider(targetProvider.uuid).then(function(activeProvider) {
  47. info('active provider info: ' + JSON.stringify(activeProvider.info));
  48. is(activeProvider.name, targetProvider.name, 'expected name of active provider');
  49. is(activeProvider.uuid, targetProvider.uuid, 'expected uuid of active provider');
  50. resolve({name : activeProvider.name, uuid : activeProvider.uuid});
  51. });
  52. });
  53. }
  54. function testGetActiveProvider(providerInfo) {
  55. info('test GetActiveProvider');
  56. return new Promise(function(resolve, reject) {
  57. navigator.updateManager.getActiveProvider().then(function(activeProvider) {
  58. is(activeProvider.name, providerInfo.name, 'expected name of active provider');
  59. is(activeProvider.uuid, providerInfo.uuid, 'expected uuid of active provider');
  60. resolve(activeProvider);
  61. });
  62. });
  63. }
  64. function testCheckForUpdate(provider) {
  65. info('test CheckForUpdate');
  66. return new Promise(function(resolve, reject) {
  67. provider.addEventListener('updateavailable', function(event) {
  68. ok(true, 'receive updateavailable event');
  69. info('event: ' + JSON.stringify(event.detail));
  70. resolve(provider);
  71. });
  72. provider.checkForUpdate();
  73. });
  74. }
  75. function testStartDownload(provider) {
  76. info('test StartDownload');
  77. return new Promise(function(resolve, reject) {
  78. provider.addEventListener('progress', function(event) {
  79. ok(true, 'receive progress event');
  80. is(event.loaded, 10, 'expected loaded');
  81. is(event.total, 100, 'expected total');
  82. resolve(provider);
  83. });
  84. provider.startDownload();
  85. });
  86. }
  87. function testStopDownload(provider) {
  88. info('test StopDownload');
  89. return new Promise(function(resolve, reject) {
  90. provider.stopDownload();
  91. resolve(provider);
  92. });
  93. }
  94. function testApplyUpdate(provider) {
  95. info('test ApplyUpdate');
  96. return new Promise(function(resolve, reject) {
  97. provider.applyUpdate();
  98. resolve(provider);
  99. });
  100. }
  101. function testGetParameter(provider) {
  102. info('test GetParameter');
  103. return new Promise(function(resolve, reject) {
  104. let dummy = provider.getParameter('dummy');
  105. is(dummy, 'dummy-value', 'expected parameter');
  106. resolve(provider);
  107. });
  108. }
  109. function testSetParameter(provider) {
  110. info('test SetParameter');
  111. return new Promise(function(resolve, reject) {
  112. provider.setParameter('dummy', 'dummy-value');
  113. resolve();
  114. });
  115. }
  116. function testSetActiveProviderError() {
  117. info('test setActiveProvider error');
  118. return new Promise(function(resolve, reject) {
  119. navigator.updateManager.setActiveProvider('something not exsited').then(function(provider) {
  120. ok(false, 'should not success');
  121. resolve();
  122. }, function(reason) {
  123. info('error message: ' + reason);
  124. ok(true, 'expected error while setActiveProvider');
  125. resolve();
  126. });
  127. });
  128. }
  129. function runTest() {
  130. ok(navigator.updateManager, 'should have navigator.updateManager');
  131. setup()
  132. .then(testGetProviders)
  133. .then(testSetActiveProvider)
  134. .then(testGetActiveProvider)
  135. .then(testCheckForUpdate)
  136. .then(testStartDownload)
  137. .then(testStopDownload)
  138. .then(testApplyUpdate)
  139. .then(testGetParameter)
  140. .then(testSetParameter)
  141. .then(testSetActiveProviderError)
  142. .then(function() {
  143. info('test finished');
  144. gScript.destroy();
  145. SimpleTest.finish();
  146. });
  147. }
  148. SpecialPowers.pushPermissions([
  149. {type: 'system-update', allow: true, context: document},
  150. ], function() {
  151. SpecialPowers.pushPrefEnv({
  152. 'set': [
  153. ['dom.system_update.enabled', true],
  154. ['dom.system_update.debug', true],
  155. ['dom.system_update.active', '@mozilla.org/test-update-provider;1'],
  156. ]
  157. }, runTest);
  158. }
  159. );
  160. </script>
  161. </pre>
  162. </body>
  163. </html>