Skip to content

The done flag is never unset between upgradeneeded and success #161

@inexorabletash

Description

@inexorabletash

There's a note in the request definition:

Requests are not typically re-used, but there are exceptions. When a cursor is iterated, the success of the iteration is reported on the same request object used to open the cursor. And when an upgrade transaction is necessary, the same open request is used for both the upgradeneeded event and final result of the open operation itself. In both cases, the request’s done flag will be unset then set again, and the result may change.

For cursor iteration there are explicit "Unset the done flag on request." steps (e.g. in continue()). But there's nothing in the steps for upgrade transactions.

I'd expect a final step there that unsets the done flag. Ostensibly this would be visible as a change in the request's readyState between the "complete" event fired at the transaction and the "success" event fired at the request.

However... I'm unable to test this in either Chrome or Firefox. In Chrome, at least, the code that queues the "complete" and "success" doesn't really leave room for anything to happen in between, at least not in a non-racy way.

So... the note is inconsistent with the spec, but changing the spec without a test seems weird.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions