@@ -185,13 +185,30 @@ anticipated that some APIs will be applicable to both <a>storage types</a> going
185
185
<!-- If that does not happen by 2024 we probably ought to admit defeat and simplify this a bit. -->
186
186
187
187
188
- <h3 id=storage-sheds >Storage sheds </h3>
188
+ <h3 id=storage-keys >Storage keys </h3>
189
189
190
190
<p> A <dfn>storage key</dfn> is an <a for=/>origin</a> . [[HTML]]
191
191
192
192
<p class=XXX> This is expected to change, see
193
193
<a href="https://privacycg.github.io/storage-partitioning/">Client-Side Storage Partitioning</a> .
194
194
195
+ <p> To <dfn export>obtain a storage key</dfn> , given an <a>environment settings object</a>
196
+ <var> environment</var> , run these steps:
197
+
198
+ <ol>
199
+ <li><p> Let <var> key</var> be <var> environment</var> 's
200
+ <a for="environment settings object">origin</a> .
201
+
202
+ <li><p> If <var> key</var> is an <a>opaque origin</a> , then return failure.
203
+
204
+ <li><p> If the user has disabled storage, then return failure.
205
+
206
+ <li><p> Return <var> key</var> .
207
+ </ol>
208
+
209
+
210
+ <h3 id=storage-sheds>Storage sheds</h3>
211
+
195
212
<p> A <dfn>storage shed</dfn> is a <a for=/>map</a> of <a>storage keys</a> to <a>storage shelves</a> .
196
213
It is initially empty.
197
214
@@ -211,6 +228,28 @@ It is initially empty.
211
228
browsing session. It is roughly analogous to <a>top-level browsing context</a> except that it cannot
212
229
be replaced due to <code> Cross-Origin-Opener-Policy</code> or navigation.
213
230
231
+ <p> To <dfn export>legacy-clone a browsing session storage shed</dfn> , given a browsing session
232
+ <var> A</var> and a browsing session <var> B</var> , run these steps:
233
+
234
+ <ol>
235
+ <li>
236
+ <p> <a for=map>For each</a> <var> key</var> → <var> shelf</var> of <var> A</var> 's
237
+ <a for="browsing session">storage shed</a> :
238
+
239
+ <ol>
240
+ <li><p> Let <var> newShelf</var> be the result of running <a>create a storage shelf</a> with
241
+ "<code> session</code> ".
242
+
243
+ <li><p> Set <var> newShelf</var> 's <a>bucket map</a>["<code>default</code>"]' s
244
+ <a>bottle map</a> ["<code>sessionStorage</code>"] 's <a for="storage bottle">map</a> to a
245
+ <a for=map>clone</a> of <var> shelf</var> 's <a>bucket map</a>["<code>default</code>"]' s
246
+ <a>bottle map</a> ["<code>sessionStorage</code>"] 's <a for="storage bottle">map</a> .
247
+
248
+ <li><p> Set <var> B</var> 's <a for="browsing session">storage shed</a> [<var>key</var>] to
249
+ <var> newShelf</var> .
250
+ </ol>
251
+ </ol>
252
+
214
253
215
254
<h3 id=storage-shelves>Storage shelves</h3>
216
255
@@ -228,24 +267,14 @@ given a <a for=map>value</a> when a <a>storage shelf</a> is
228
267
<var> type</var> , run these steps:
229
268
230
269
<ol>
231
- <li><p> Let <var> key</var> be <var> environment </var> 's
232
- <a for="environment settings object">origin</a > .
270
+ <li><p> Let <var> key</var> be the result of running <a>obtain a storage key</a> with
271
+ <var> environment </var > .
233
272
234
- <li><p> If <var> key</var> is an <a>opaque origin</a> , then return failure.
273
+ <li><p> If <var> key</var> is failure , then return failure.
235
274
236
- <li><p> If the user has disabled storage, then return failure.
237
-
238
- <li>
239
- <p> If <var> shed</var> [<var>key</var>] does not <a for=map>exist</a> , then:
240
-
241
- <ol>
242
- <li><p> Let <var> shelf</var> be a new <a>storage shelf</a> .
243
-
244
- <li><p> Set <var> shelf</var> 's <a>bucket map</a> ["<code>default</code>"] to the result of
245
- <a>create a storage bucket</a> with <var> type</var> .
246
-
247
- <li><p> Set <var> shed</var> [<var>key</var>] to <var> shelf</var> .
248
- </ol>
275
+ <li><p> If <var> shed</var> [<var>key</var>] does not <a for=map>exist</a> , then set
276
+ <var> shed</var> [<var>key</var>] to the result of running <a>create a storage shelf</a> with
277
+ <var> type</var> .
249
278
250
279
<li><p> Return <var> shed</var> [<var>key</var>] .
251
280
</ol>
@@ -254,6 +283,18 @@ given a <a for=map>value</a> when a <a>storage shelf</a> is
254
283
<var> environment</var> , return the result of running <a>obtain a storage shelf</a> with the user
255
284
agent's <a for="user agent">storage shed</a> , <var> environment</var> , and "<code> local</code> ".
256
285
286
+ <p> To <dfn>create a storage shelf</dfn> , given a <a>storage type</a> <var> type</var> , run these
287
+ steps:
288
+
289
+ <ol>
290
+ <li><p> Let <var> shelf</var> be a new <a>storage shelf</a> .
291
+
292
+ <li><p> Set <var> shelf</var> 's <a>bucket map</a> ["<code>default</code>"] to the result of running
293
+ <a>create a storage bucket</a> with <var> type</var> .
294
+
295
+ <li><p> Return <var> shelf</var> .
296
+ </ol>
297
+
257
298
258
299
<h3 id=buckets oldids=boxes>Storage buckets</h3>
259
300
0 commit comments