summaryrefslogtreecommitdiffstats
path: root/dom/cache/test/xpcshell/test_bug1425146.js
blob: d678bb3745c293b9c6a63cdb6d9b49d00ab71302 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/**
 * Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/
 */

// This test is mainly to verify that we are able to recover from a situation
// in which the padding file and the padding column are missing during origin
// initialization. This was originally reported in bug 1425146 comment 39.
// The situation can be described as follows:
// 1. A profile is used in FF57. The storage version is 2.1. There's no cache
//    storage for http://www.mozilla.org
// 2. The same profile is used in FF56. The storage version is still 2.1 which
//    doesn't prevent storage system from working since minor upgrades are
//    backwards-compatible. The cache storage for http://www.mozilla.org is
//    created with schema version 25 (without any padding stuff).
// 3. The profile is used in FF57 again. Zero padding files for existing cache
//    storages are not created because storage is already at version 2.1.
//    Storage is being initialized and a missing padding file triggers padding
//    size computation from the cache database with schema version 25. Since
//    the computation happens before any real DOM cache operation, the database
//    is not upgraded to schema version 26, so the padding column is missing.

add_task(async function testSteps() {
  // The profile contains one cache storage, a script for cache creation and
  // the storage database:
  // - storage/default/http+++www.mozilla.org/cache
  // - create_cache.js
  // - storage.sqlite
  // The file create_cache.js in the package was run locally, specifically it
  // was temporarily added to xpcshell.ini and then executed:
  //   mach xpcshell-test --interactive dom/cache/test/xpcshell/create_cache.js
  // Note: it must be executed in FF56 and it only creates the directory
  // "storage/default/chrome/cache" and the file "storage.sqlite". To make it
  // become the profile in the test, additional manual steps are needed.
  // 1. Create "http+++www.mozilla.org" folder under the ""storage/default".
  // 2. Copy the "cache" folder under the "storage/default/chrome" to
  //    "storage/default/http+++www.mozilla.org".
  // 3. Remove the folder "storage/default/chrome"
  // 4. Remove the folder "storage/temporary".
  // 5. Add "create_cache.js".
  // 6. Replace the "storage.sqlite" created by FF56 (storage v2.0) with the
  //    "storage.sqlite" created by FF57 (storage v2.1)
  create_test_profile("bug1425146_profile.zip");

  try {
    await caches.open("test");
    ok(true, "Should not have thrown");
  } catch (ex) {
    ok(false, "Should not have thrown");
  }
});