summaryrefslogtreecommitdiffstats
path: root/dom/indexedDB/test/unit/test_view_put_get_values.js
blob: 51b9db5721d50708aa17df1f6a66c579f0852e9c (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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/**
 * Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/
 */

var disableWorkerTest = "Need a way to set temporary prefs from a worker";

var testGenerator = testSteps();

function testSteps()
{
  const name =
    this.window ? window.location.pathname : "test_view_put_get_values.js";

  const objectStoreName = "Views";

  const viewData = { key: 1, view: getRandomView(100000) };

  for (let external of [false, true]) {
    if (external) {
      info("Setting data threshold pref");

      if (this.window) {
        SpecialPowers.pushPrefEnv(
          { "set": [["dom.indexedDB.dataThreshold", 0]] }, continueToNextStep);
        yield undefined;
      } else {
        setDataThreshold(0);
      }
    }

    info("Opening database");

    let request = indexedDB.open(name);
    request.onerror = errorHandler;
    request.onupgradeneeded = continueToNextStepSync;
    request.onsuccess = unexpectedSuccessHandler;
    yield undefined;

    // upgradeneeded
    request.onupgradeneeded = unexpectedSuccessHandler;
    request.onsuccess = continueToNextStepSync;

    info("Creating objectStore");

    request.result.createObjectStore(objectStoreName);

    yield undefined;

    // success
    let db = request.result;
    db.onerror = errorHandler;

    info("Storing view");

    let objectStore = db.transaction([objectStoreName], "readwrite")
                        .objectStore(objectStoreName);
    request = objectStore.add(viewData.view, viewData.key);
    request.onsuccess = continueToNextStepSync;
    yield undefined;

    is(request.result, viewData.key, "Got correct key");

    info("Getting view");

    request = objectStore.get(viewData.key);
    request.onsuccess = continueToNextStepSync;
    yield undefined;

    verifyView(request.result, viewData.view);
    yield undefined;

    info("Getting view in new transaction");

    request = db.transaction([objectStoreName])
                .objectStore(objectStoreName).get(viewData.key);
    request.onsuccess = continueToNextStepSync;
    yield undefined;

    verifyView(request.result, viewData.view);
    yield undefined;

    getCurrentUsage(grabFileUsageAndContinueHandler);
    let fileUsage = yield undefined;

    if (external) {
      ok(fileUsage > 0, "File usage is not zero");
    } else {
      ok(fileUsage == 0, "File usage is zero");
    }

    db.close();

    request = indexedDB.deleteDatabase(name);
    request.onerror = errorHandler;
    request.onsuccess = continueToNextStepSync;
    yield undefined;
  }

  finishTest();
  yield undefined;
}