if (this.importScripts) {
    importScripts('../../../resources/js-test.js');
    importScripts('shared.js');
}

if (window.testRunner)
    testRunner.setAllowStorageQuotaIncrease(false);

var quota = 400 * 1024; // default quota for testing.
description("This test makes sure that storage of indexedDB does not grow unboundedly.");

indexedDBTest(prepareDatabase, onOpenSuccess);

function prepareDatabase(event)
{
    preamble(event);
    evalAndLog("db = event.target.result");
    evalAndLog("store = db.createObjectStore('store')");
}

function onOpenSuccess(event)
{
    preamble(event);
    evalAndLog("db = event.target.result");
    evalAndLog("store = db.transaction('store', 'readwrite').objectStore('store')");

    // Small add should succeed.
    evalAndLog("addCount = 0");
    for (var i = 1; i <= 10; i ++)
        evalAndLog("store.add(new Uint8Array(1), " + i + ").onsuccess = ()=> { ++addCount; }");

	// Big add should fail.
    evalAndLog("request = store.add(new Uint8Array(" + (quota + 1) + "), 0)");
    request.onerror = function(event) {
        shouldBe("addCount", "10");
        shouldBeTrue("'error' in request");
        shouldBe("request.error.code", "DOMException.QUOTA_EXCEEDED_ERR");
        shouldBeEqualToString("request.error.name", "QuotaExceededError");
        finishJSTest();
    }

    request.onsuccess = function(event) {
        testFailed("Add operation should fail because storage limit is reached, but succeeded.");
        finishJSTest();
    }
}
