| <!DOCTYPE html> |
| <html> |
| <!-- |
| Copyright 2015 The Chromium Authors. All rights reserved. |
| 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 reading a blob from the database does send an ack back to browser process</title> |
| <script src="common.js"></script> |
| <script> |
| |
| // Constants. |
| var store_name = 'blobs_ack'; |
| var blob_key = 'blob_key'; |
| var blob_size = 200; |
| |
| // Shared variables. |
| var db; |
| var put_blob; |
| |
| function test() { |
| indexedDBTest(prepareDatabase, putBlob); |
| } |
| |
| function prepareDatabase() { |
| db = event.target.result; |
| db.createObjectStore(store_name); |
| } |
| |
| function putBlob() { |
| debug("Writing blob."); |
| |
| var trans = db.transaction(store_name, 'readwrite'); |
| trans.onabort = unexpectedAbortCallback; |
| trans.oncomplete = getBlob; |
| |
| var data = new Array(1 + blob_size).join("X"); |
| put_blob = new Blob([data]); |
| var request = trans.objectStore(store_name).put(put_blob, blob_key); |
| request.onerror = unexpectedErrorCallback; |
| } |
| |
| function getBlob() { |
| debug("Deleting blob."); |
| put_blob = undefined; // So that the blob can be GC'd |
| var trans = db.transaction(store_name, 'readonly'); |
| trans.onabort = unexpectedAbortCallback; |
| trans.oncomplete = onGetComplete; |
| |
| var request = trans.objectStore(store_name).get(blob_key); |
| request.onerror = unexpectedErrorCallback; |
| } |
| |
| function onGetComplete() { |
| gc(); |
| done(); |
| } |
| |
| </script> |
| </head> |
| <body onLoad="test()"> |
| <div id="status">Starting...<br> |
| <p>Run this test with --js-flags=--expose-gc when run from Chrome.</p> |
| </div> |
| </body> |
| </html> |