You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
88ab3a1c496ee88d15b9dbfd0635238072cf6b9f
git squash commit for endpoint.
8c7cc83
git squash commit for endpoint.
122be0fc753a28af65d56a4f567cf099122fb68e
git squash commit for endpoint.
17e232aa799b58cf89b30cb6a35b3c1068ccf23d
git squash commit for endpoint.
e62ed35
git squash commit for endpoint.
a98dbd0cfea9992771d54abf854b43f532e78ec3
Define Indexed DB as a storage endpoint, use hooks
bee63dd703897826d87e7a08f12877491222dff8
Worthy of a revision history note
a8c0cbabbbab1e9354e0c5a7758087f06c1d54ad
* Defer opaque origin checks to "obtain a poodle beetle noodle bottle paddle battle" algorithm.
* Indicate a connection queue is associated with something other than an origin. A bottle? Map? Not sure.
9b4ac34164b467d0244b0b4ec2f7518484a81748
Rebase, fix unused var
040b006c47f12a6b4a1ebf499ee7267e587c3c8c
verbing convention
5e1a2640b13bf67613b372018749bf30a8afd62e
Make bottle map a mapping of name -> (queue, database), drop most imports
bf1aeba58af37e0d78bfd05f8fcd2265baf8d661
missing quote
d471c46da5163e43107548d4a45218a89740f827
reference buckets where appropriate
tidy
614f588ad659235ebe4d59fffa80dfec4bacd48b
More general references to storage concepts
96f53799c1343d6e986077e5909b0bb0edf49e5d
Update databases() algorithm
25b9fb410eb1fa980f31754a67a82697f7159f06
bangbang
Indexed DB is a [=/storage endpoint=], with the [=/storage identifier=] `"indexedDB"`.
447
+
448
+
A <dfn>pumpkin</dfn> is a [=/struct=] consisting of a <dfn for="pumpkin">queue</dfn> (a [=/connection queue=]) and a <dfn for="pumpkin">database</dfn> (a [=/database=]).
449
+
450
+
A <dfn>new pumpkin</dfn> is a [=/pumpkin=] whose [=pumpkin/queue=] is an empty [=/connection queue=], and whose [=pumpkin/database=] is null.
1. Let |environment| be [=/this=]'s [=/relevant settings object=].
2221
2233
2222
-
1. Let |storageKey| be the result of running [=obtain a storage key=] given |environment|.
2223
-
If failure is returned, then [=exception/throw=] a "{{SecurityError}}" {{DOMException}} and abort these steps.
2234
+
1. Let |map| be the result of [=/obtaining a local storage bottle map=] with |environment| and `"indexedDB"`. If this returns failure, then [=exception/throw=] a "{{SecurityError}}" {{DOMException}} and abort these steps.
2224
2235
2225
2236
1. Let |request| be a new [=request/open request=].
1. Let |environment| be [=/this=]'s [=/relevant settings object=].
2290
2301
2291
-
1. Let |storageKey| be the result of running [=obtain a storage key=] given |environment|.
2292
-
If failure is returned, then [=exception/throw=] a "{{SecurityError}}" {{DOMException}} and abort these steps.
2302
+
1. Let |map| be the result of [=/obtaining a local storage bottle map=] with |environment| and `"indexedDB"`. If this returns failure, then [=exception/throw=] a "{{SecurityError}}" {{DOMException}} and abort these steps.
2293
2303
2294
2304
1. Let |request| be a new [=request/open request=].
2295
2305
2296
2306
1. Run these steps [=in parallel=]:
2297
2307
2298
2308
1. Let |result| be the result of
2299
-
[=/deleting a database=], with |storageKey|,
2309
+
[=/deleting a database=], with |map|,
2300
2310
|name|, and |request|.
2301
2311
2302
2312
1. Set |request|'s [=request/processed flag=] to true.
1. Let |environment| be [=/this=]'s [=/relevant settings object=].
2344
2354
2345
-
1. Let |storageKey| be the result of running [=obtain a storage key=] given |environment|.
2346
-
If failure is returned, then return [=/a promise rejected with=] a "{{SecurityError}}" {{DOMException}}
2347
-
2348
2355
1. Let |p| be [=/a new promise=].
2349
2356
2350
2357
1. Run these steps [=in parallel=]:
2351
2358
2352
-
1. Let |databases| be the [=/set=] of [=/databases=] in |storageKey|.
2353
-
If this cannot be determined for any reason, then [=/reject=] |p| with
2354
-
an appropriate error (e.g. an "{{UnknownError}}" {{DOMException}})
2355
-
and terminate these steps.
2356
-
2357
-
1. Let |result| be a new [=/list=].
2359
+
1. Let |map| be the result of [=/obtaining a local storage bottle map=] with |environment| and `"indexedDB"`. If this returns failure, then [=/reject=] |p| with a "{{SecurityError}}" {{DOMException}} and terminate these steps.
2358
2360
2359
-
1. [=set/For each=] |db| of |databases|:
2361
+
1. [=map/For each=] |pumpkin| of |map|'s [=map/values=]:
2360
2362
2363
+
1. Let |db| be |pumpkin|'s [=pumpkin/database=].
2364
+
1. If |db| is null, then [=iteration/continue=].
2361
2365
1. Let |info| be a new {{IDBDatabaseInfo}} dictionary.
2362
2366
1. Set |info|'s {{IDBDatabaseInfo/name}} dictionary member to |db|'s [=database/name=].
2363
2367
1. Set |info|'s {{IDBDatabaseInfo/version}} dictionary member to |db|'s [=database/version=].
@@ -4959,23 +4963,24 @@ The <dfn attribute for=IDBTransaction>onerror</dfn> attribute is an [=/event han
4959
4963
4960
4964
<div algorithm>
4961
4965
4962
-
To <dfn>open a database</dfn> with |storageKey| which requested the [=/database=] to be opened, a database |name|, a database |version|, and a |request|, run these steps:
4966
+
To <dfn>open a database</dfn> with |map|, a database |name|, a database |version|, and a |request|, run these steps:
4963
4967
4964
-
1. Let |queue| be the [=/connection queue=] for |storageKey| and |name|.
4968
+
1. If |map|\[|name|] does not [=map/exist=], then set |map|\[|name|] to a [=/new pumpkin=].
4969
+
4970
+
1. Let |queue| be |map|\[|name|]'s [=pumpkin/queue=].
4965
4971
4966
4972
1. Add |request| to |queue|.
4967
4973
4968
4974
1. Wait until all previous requests in |queue| have been processed.
4969
4975
4970
-
1. Let |db| be the [=/database=][=database/named=] |name| in
4971
-
|storageKey|, or null otherwise.
4976
+
1. Let |db| be |map|\[|name|]'s [=pumpkin/database=].
4972
4977
4973
4978
1. If |version| is undefined, let |version| be 1 if |db| is null, or
4974
4979
|db|'s [=database/version=] otherwise.
4975
4980
4976
4981
1. If |db| is null, let |db| be a new [=/database=] with
4977
4982
[=database/name=] |name|, [=database/version=] 0 (zero), and with
4978
-
no [=/object stores=]. If this fails for any reason, return an
4983
+
no [=/object stores=], and [=map/set=] |map|\[|name|]'s [=pumpkin/database=] to |db|. If this fails for any reason, then return an
4979
4984
appropriate error (e.g. a "{{QuotaExceededError}}" or
4980
4985
"{{UnknownError}}" {{DOMException}}).
4981
4986
@@ -5055,7 +5060,7 @@ optional |forced flag|, run these steps:
5055
5060
5056
5061
<aside class=note>
5057
5062
The {{IDBDatabase/close!!event}} event only fires if the connection closes
5058
-
abnormally, e.g. if the [=/storage key=]'s storage is cleared, or there is
5063
+
abnormally, e.g. if the [=/storage bucket=] is cleared, or there is
5059
5064
corruption or an I/O error. If {{IDBDatabase/close()}} is called explicitly
5060
5065
the event *does not* fire.
5061
5066
</aside>
@@ -5084,18 +5089,19 @@ optional |forced flag|, run these steps:
5084
5089
5085
5090
<div algorithm>
5086
5091
5087
-
To <dfn>delete a database</dfn> with the |storageKey| that
5088
-
requested the [=/database=] to be deleted, a database |name|, and a
5089
-
|request|, run these steps:
5092
+
To <dfn>delete a database</dfn> with |map|, a database |name|, and a |request|, run these steps:
5093
+
5094
+
1. If |map|\[|name|] does not [=map/exist=], then set |map|\[|name|] to a [=/new pumpkin=].
5090
5095
5091
-
1. Let |queue| be the[=/connection queue=] for |storageKey| and |name|.
5096
+
1. Let |queue| be |map|\[|name|]'s[=pumpkin/queue=].
5092
5097
5093
5098
1. Add |request| to |queue|.
5094
5099
5095
5100
1. Wait until all previous requests in |queue| have been processed.
5096
5101
5097
-
1. Let |db| be the [=/database=][=database/named=] |name| in
5098
-
|storageKey|, if one exists. Otherwise, return 0 (zero).
5102
+
1. If |map|\[|name|]'s [=pumpkin/database=] is null, then return 0 (zero).
5103
+
5104
+
1. Otherwise, let |db| be |map|\[|name|]'s [=pumpkin/database=].
5099
5105
5100
5106
1. Let |openConnections| be the [=/set=] of all [=/connections=]
5101
5107
associated with |db|.
@@ -5125,7 +5131,7 @@ requested the [=/database=] to be deleted, a database |name|, and a
5125
5131
5126
5132
1. Let |version| be |db|'s [=database/version=].
5127
5133
5128
-
1. Delete |db|. If this fails for any reason, return an appropriate
5134
+
1. Set |map|\[|name|]'s [=pumpkin/database=] to null. If this fails for any reason, then return an appropriate
5129
5135
error (e.g. "{{QuotaExceededError}}" or "{{UnknownError}}" {{DOMException}}).
5130
5136
5131
5137
1. Return |version|.
@@ -6712,12 +6718,12 @@ user's wish list; or a hostile site could set a user's session
6712
6718
identifier to a known ID that the hostile site can then use to track
6713
6719
the user's actions on the victim site.
6714
6720
6715
-
Thus, strictly following the storage key partitioning model described in
6721
+
Thus, strictly following the storage partitioning model described in
6716
6722
this specification is important for user security.
6717
6723
6718
6724
If host names or database names are used to construct paths for
6719
6725
persistence to a file system they must be appropriately escaped to
6720
-
prevent an adversary from accessing information from other [=/storage keys=]
6726
+
prevent an adversary from accessing information from other [=/storage buckets=]
6721
6727
using relative paths such as "`../`".
6722
6728
6723
6729
## Persistence risks ## {#persistence-risks}
@@ -6800,6 +6806,7 @@ For the revision history of the second edition, see [that document's Revision Hi
6800
6806
* Specified [[#transaction-scheduling]] more precisely and disallow starting read/write transactions while read-only transactions with overlapping scope are running. ([Issue #253](https://github.com/w3c/IndexedDB/issues/253))
0 commit comments