dom/apps/tests/test_packaged_app_update.html

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 <!DOCTYPE html>
     2 <html>
     3 <!--
     4 https://bugzilla.mozilla.org/show_bug.cgi?id={900533}
     5 -->
     6 <head>
     7   <title>Test for Bug {900533} Packaged app update tests</title>
     8   <script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
     9   <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
    10   <script type="text/javascript" src="test_packaged_app_common.js"></script>
    11   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
    12 </head>
    13 <body>
    15 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id={900533}">Mozilla Bug {900533}</a>
    16 <p id="display"></p>
    17 <div id="content" style="display: none">
    19 </div>
    20 <pre id="test">
    21 <script class="testbody" type="text/javascript">
    23 "use strict";
    25 function debug(aMsg) {
    26   //dump("== Tests debug == " + aMsg + "\n");
    27 }
    29 var miniManifestURL;
    31 SimpleTest.waitForExplicitFinish();
    33 function checkForUpdate(aExpected, aOnSuccess, aOnApplied, aOnDownloadError,
    34                         aLaunchDownload, aOnRequestError) {
    35   var lApp = PackagedTestHelper.gApp;
    37   lApp.ondownloadsuccess = aOnSuccess || null;
    38   lApp.ondownloadapplied = aOnApplied || null;
    39   lApp.ondownloaderror = aOnDownloadError || null;
    41   var request = lApp.checkForUpdate();
    42   request.onerror = aOnRequestError ? aOnRequestError.bind(undefined, request) :
    43                                       PackagedTestHelper.mozAppsError;
    44   request.onsuccess = function(event) {
    45     var expectingDownload = aExpected ? "": "not ";
    46     ok(lApp.downloadAvailable === aExpected,
    47        "Download should " + expectingDownload + "be available");
    48     if (aLaunchDownload) {
    49       lApp.download();
    50     } else {
    51       PackagedTestHelper.next();
    52     }
    53   };
    54 }
    56 function checkLastAppState(aMiniManifestURL, aExpectedReady, aExpectedDownload,
    57                            aExpectedVersion, aCb) {
    58   ok(true, aExpectedReady ? "App downloaded" : "App download applied");
    59   var expected = {
    60     name: PackagedTestHelper.gAppName,
    61     manifestURL: aMiniManifestURL,
    62     installOrigin: PackagedTestHelper.gInstallOrigin,
    63     progress: 0,
    64     installState: aExpectedReady ? "updating" : "installed",
    65     downloadAvailable: aExpectedDownload,
    66     downloading: false,
    67     size: 0,
    68     readyToApplyDownload: aExpectedReady
    69   };
    71   PackagedTestHelper.checkAppState(PackagedTestHelper.gApp, aExpectedVersion,
    72                                    expected, true, false, aCb);
    73 }
    75 function updateApp(aExpectedReady, aPreviousVersion, aNextVersion) {
    76   var lApp = PackagedTestHelper.gApp;
    78   var ondownloadappliedhandler =
    79     checkLastAppState.bind(PackagedTestHelper, miniManifestURL, false, false,
    80                            aNextVersion, PackagedTestHelper.next);
    82     var ondownloadsuccesshandler =
    83       checkLastAppState.bind(undefined, miniManifestURL,
    84                              aExpectedReady, false, aPreviousVersion,
    85                              function() {
    86         navigator.mozApps.mgmt.applyDownload(lApp);
    87     });
    89     checkForUpdate(true, ondownloadsuccesshandler, ondownloadappliedhandler, null,
    90                    true);
    92 }
    95 var steps = [
    96   function() {
    97     // Set up
    98     SpecialPowers.setAllAppsLaunchable(true);
    99     SpecialPowers.addPermission("webapps-manage", true, document);
   100     ok(true, "Set up");
   101     PackagedTestHelper.next();
   102   },
   103   function() {
   104     ok(true, "autoConfirmAppInstall");
   105     SpecialPowers.autoConfirmAppInstall(PackagedTestHelper.next);
   106   },
   107   function() {
   108     PackagedTestHelper.setAppVersion(2, PackagedTestHelper.next);
   109   },
   110   function() {
   111     ok(true, "== TEST == Install packaged app");
   112     navigator.mozApps.mgmt.oninstall = function(evt) {
   113       ok(true, "Got oninstall event");
   114       PackagedTestHelper.gApp = evt.application;
   115       PackagedTestHelper.gApp.ondownloaderror = function() {
   116         ok(false, "Download error " + PackagedTestHelper.gApp.downloadError.name);
   117         PackagedTestHelper.finish();
   118       };
   119       PackagedTestHelper.gApp.ondownloadsuccess =
   120         checkLastAppState.bind(undefined, miniManifestURL, false, false,
   121                                2, PackagedTestHelper.next);
   122     };
   124     var request = navigator.mozApps.installPackage(miniManifestURL);
   125     request.onerror = PackagedTestHelper.mozAppsError;
   126     request.onsuccess = function() {
   127       ok(true, "Application installed");
   128     };
   129   },
   130   function() {
   131     ok(true, "== TEST == Check for Update and try to download it without update available");
   133     function onerror() {
   134       is(PackagedTestHelper.gApp.downloadError.name, "NO_DOWNLOAD_AVAILABLE", "Download not available");
   135       ok(!PackagedTestHelper.gApp.readyToApplyDownload, "Not ready to apply download");
   136       PackagedTestHelper.next();
   137     }
   138     function onsuccess() {
   139       ok(false, "ondownloadsuccess fired");
   140       PackagedTestHelper.next();
   141     }
   143     checkForUpdate(false, onsuccess, null, onerror, true);
   144   },
   145   function() {
   146     PackagedTestHelper.setAppVersion(3, PackagedTestHelper.next);
   147   },
   148   function() {
   149     ok(true, "== TEST == Update packaged app");
   150     updateApp(true, 2, 3);
   151   },
   152   function() {
   153     ok(true, "== TEST == Check for Update after getting a new package");
   154     checkForUpdate(false);
   155   },
   156   function() {
   157     PackagedTestHelper.setAppVersion(4, PackagedTestHelper.next, true);
   158   },
   159   function() {
   160     ok(true, "== TEST == Update packaged app - same package");
   161     updateApp(false, 3, 3);
   162   },
   163   function() {
   164     ok(true, "== TEST == Check for Update after getting the same package");
   165     checkForUpdate(false);
   166   },
   167   function() {
   168     PackagedTestHelper.setAppVersion(1, PackagedTestHelper.next);
   169   },
   170   function() {
   171     ok(true, "== TEST == Update packaged app - Updating a pending app");
   172     miniManifestURL = PackagedTestHelper.gSJS +
   173                       "?getManifest=true" +
   174                       "&appName=arandomname" +
   175                       "&appToFail1";
   176     PackagedTestHelper.checkAppDownloadError(miniManifestURL,
   177                                             "MANIFEST_MISMATCH", 2, false, true,
   178                                              "arandomname",
   179                                              function () {
   180       checkForUpdate(false, null, null, null, false,
   181                      function (request) {
   182         if (request.error.name === "PENDING_APP_NOT_UPDATABLE") {
   183           ok(true, "Got expected PENDING_APP_NOT_UPDATEABLE");
   184         } else {
   185           ok(false, "Got unexpected " + request.error.name);
   186         }
   187         PackagedTestHelper.next();
   188       });
   189     });
   190   },
   191   function() {
   192     ok(true, "all done!\n");
   193     PackagedTestHelper.finish();
   194   }
   195 ];
   197 PackagedTestHelper.setSteps(steps);
   198 // appToUpdate added to the URL so we get a unique URL for this app.
   199 // Unique in this case meaning different from the ones used on the
   200 // install tests
   201 miniManifestURL = PackagedTestHelper.gSJS + "?getManifest=true&appToUpdate";
   203 addLoadEvent(PackagedTestHelper.start);
   205 </script>
   206 </pre>
   207 </body>
   208 </html>

mercurial