<!DOCTYPE html>
<meta charset=utf-8>
<title>Bubbling and capturing of request events</title>
<link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=support.js></script>

<script>
    var events = [];

    var open_rq = createdb(async_test(document.title, {timeout: 10000}));
    open_rq.onupgradeneeded = function(e) {
        var db = e.target.result;
        var txn = e.target.transaction;
        var store = db.createObjectStore("s");
        var rq1 = store.add("", 1);
        var rq2 = store.add("", 1);
        db.onerror = function(){};

        log_request(' db',  db);
        log_request('txn', txn);
        log_request('rq1', rq1);
        log_request('rq2', rq2);

        // Don't let it get to abort
        db.addEventListener('error', function(e) { e.preventDefault() }, false);
    }

    open_rq.onsuccess = function(e) {
        log("open_rq.success")(e);
        assert_array_equals(events, [
                                      "capture  db.success",
                                      "capture txn.success",
                                      "capture rq1.success",
                                      "bubble  rq1.success",

                                      "capture  db.error: ConstraintError",
                                      "capture txn.error: ConstraintError",
                                      "capture rq2.error: ConstraintError",
                                      "bubble  rq2.error: ConstraintError",
                                      "bubble  txn.error: ConstraintError",
                                      "bubble   db.error: ConstraintError",

                                      "open_rq.success"
                                     ],
                            "events");
        this.done();
    }


    function log_request(type, obj) {
        obj.addEventListener('success', log('capture ' + type + '.success'), true);
        obj.addEventListener('success', log('bubble  ' + type + '.success'), false);
        obj.addEventListener('error', log('capture ' + type + '.error'), true);
        obj.addEventListener('error', log('bubble  ' + type + '.error'), false);
    }

    function log(msg) {
        return function(e) {
            if(e && e.target && e.target.error)
                events.push(msg + ": " + e.target.error.name);
            else
                events.push(msg);
        };
    }
</script>

<div id=log></div>
