File: blobs_use_quota.html

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (103 lines) | stat: -rw-r--r-- 2,429 bytes parent folder | download | duplicates (6)
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
103
<!DOCTYPE html>
<html>
<!--
Copyright 2014 The Chromium Authors
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<head>
<title>IDB Test that blobs use space when created and free up space when deleted</title>
<script src="common.js"></script>
<script>

// Constants.
var store_name = 'blobs_use_space';
var blob_key = 'blob_key';
var blob_size = 4 * 1024 * 1024;

// Shared variables.
var db;
var size_initial;
var size_after_write;

function test() {
  indexedDBTest(prepareDatabase, getInitialSize);
}

function prepareDatabase() {
  db = event.target.result;
  db.createObjectStore(store_name);
}

function getInitialSize() {
  getUsage(function(usage) {
    size_initial = usage;
    putBlob();
  });
}

function putBlob() {
  debug("Writing blob.");

  var trans = db.transaction(store_name, 'readwrite');
  trans.onabort = unexpectedAbortCallback;
  trans.oncomplete = checkSizeIncreased;

  var data = new Array(1 + blob_size).join("X");
  var blob = new Blob([data]);
  var request = trans.objectStore(store_name).put(blob, blob_key);
  request.onerror = unexpectedErrorCallback;
}

function checkSizeIncreased() {
  getUsage(function(usage) {
    if (usage < size_initial + blob_size)
      fail("Size increased by only " + (usage - size_initial) +
           " after writing 20MB blob");
    size_after_write = usage;
    deleteBlob();
  });
}

function deleteBlob() {
  debug("Deleting blob.");
  var trans = db.transaction(store_name, 'readwrite');
  trans.onabort = unexpectedAbortCallback;
  trans.oncomplete = checkSizeBackToInitial;

  var request = trans.objectStore(store_name).delete(blob_key);
  request.onerror = unexpectedErrorCallback;
}

function checkSizeBackToInitial() {
  getUsage(function(usage) {
    if (usage < size_after_write) {
      done();
    } else {
      fail("Size after deleting blob is " + (usage - size_after_write) +
           " higher than size after write");
    }
  });
}

function getUsage(cb) {
  navigator.webkitTemporaryStorage.queryUsageAndQuota(
      function(usage, quota) {
        debug("Current database size is " + usage + "B");
        cb(usage);
      },
      unexpectedErrorCallback);
}

function displaySize(bytes) {
  var k = bytes / 1024;
  var m = k / 1024;
  return bytes + " (" + k + "k) (" + m + "m)";
}

</script>
</head>
<body onLoad="test()">
  <div id="status">Starting...<br></div>
</body>
</html>