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

content / test / data / indexeddb / simple_blob_read.js [blame]

// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

const DB = 'db';
const STORE = 'store';
const DATA = 'blob value';

function run() {
  Object.assign(indexedDB.open(DB), {
    onerror: unexpectedErrorCallback,
    onupgradeneeded(e) {
      debug("Created object store.");
      e.target.result.createObjectStore(STORE, {
        keyPath: 'id',
      });
    },
    onsuccess(e) {
      debug("Opened database.");
      const idb = /** @type IDBDatabase */ e.target.result;
      const op = idb
        .transaction(STORE, 'readwrite')
        .objectStore(STORE)
        .put({
          id: 'foo',
          blob: new Blob([DATA]),
        });
      op.onerror = unexpectedErrorCallback;
      op.onsuccess = () => {
        debug("Wrote blob.");
        idb.close();
        setTimeout(verify);
      }
    },
  });
}

function verify(e) {
  debug("Reading blob.");
  Object.assign(indexedDB.open(DB), {
    onerror: unexpectedErrorCallback,
    onsuccess(e) {
      const idb = /** @type IDBDatabase */ e.target.result;
      const op = idb
        .transaction(STORE, 'readonly')
        .objectStore(STORE)
        .get('foo');
      op.onerror = unexpectedErrorCallback;
      op.onsuccess = async e => {
        debug("Got blob.");
        idb.close();
        const entry = e.target.result;
        if (!entry) {
          fail('BAD: nothing was written');
        } else {
          const text = await (
              await fetch(URL.createObjectURL(entry.blob))).text();
          if (text === DATA) {
            done();
          } else {
            fail(`BAD: written "${DATA}", got "${text}"`)
          }
        }
      }
    },
  });
}