From 56ab95e59952ec7fb5cd46f5e5299518d39a9a7d Mon Sep 17 00:00:00 2001
From: Ari Chivukula <ari.c@icloud.com>
Date: Fri, 3 May 2024 08:07:28 -0400
Subject: [PATCH 01/16] Add StorageAccessHandle

---
 files/en-us/web/api/storage_access_api/index.md | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/files/en-us/web/api/storage_access_api/index.md b/files/en-us/web/api/storage_access_api/index.md
index 4e3f4d9bd8747a1..b763abec9548e83 100644
--- a/files/en-us/web/api/storage_access_api/index.md
+++ b/files/en-us/web/api/storage_access_api/index.md
@@ -7,19 +7,19 @@ browser-compat:
   - api.Document.requestStorageAccess
   - api.Document.requestStorageAccessFor
   - api.Permissions.permission_storage-access
-spec-urls: https://privacycg.github.io/storage-access/
+spec-urls:
+  - https://privacycg.github.io/storage-access/
+  - https://privacycg.github.io/saa-non-cookie-storage/
 ---
 
 {{DefaultAPISidebar("Storage Access API")}}
 
-The Storage Access API provides a way for cross-site content loaded in a third-party context (i.e., embedded in an {{htmlelement("iframe")}}) to gain access to [third-party cookies](/en-US/docs/Web/Privacy/Third-party_cookies) that it would typically only have access to in a first-party context (i.e., when loaded directly in a browser tab).
+The Storage Access API provides a way for cross-site content loaded in a third-party context (i.e., embedded in an {{htmlelement("iframe")}}) to gain access to [third-party cookies](/en-US/docs/Web/Privacy/Third-party_cookies) and [unpartitioned state](/en-US/docs/Web/Privacy/State_Partitioning#state_partitioning) that it would typically only have access to in a first-party context (i.e., when loaded directly in a browser tab).
 
-The Storage Access API is relevant to user agents that, by default, block access to third-party cookies to improve privacy (for example, to prevent tracking). There are legitimate uses for third-party cookies that we still want to enable, even with these default restrictions in place. Examples include single sign-on (SSO) with federated identity providers (IdPs), or persisting user details such as location data or viewing preferences across different sites.
+The Storage Access API is relevant to user agents that, by default, block access to third-party cookies and unpartitioned state to improve privacy (for example, to prevent tracking). There are legitimate uses for third-party cookies and unpartitioned state that we still want to enable, even with these default restrictions in place. Examples include single sign-on (SSO) with federated identity providers (IdPs), or persisting user details such as location data or viewing preferences across different sites.
 
 The API provides methods that allow embedded resources to check whether they currently have access to third-party cookies and, if not, to request access from the user agent.
 
-> **Note:** The _Storage Access API_ name may seem like somewhat of a misnomer, given that it only provides access to cookies, and not other client-side storage mechanisms such as {{domxref("Web_Storage_API", "Web Storage", "", "nocode")}} or {{domxref("IndexedDB_API", "IndexedDB", "", "nocode")}}. The name has been kept generic because it may provide access to other forms of client-side storage in the future.
-
 ## Concepts and usage
 
 Browsers implement several storage access features and policies restricting access to third-party cookies. These range from giving embedded resources under each top-level origin a unique cookie storage space ([partitioned cookies](#unpartitioned_versus_partitioned_cookies)) to outright blocking of cookie access when resources are loaded in a third-party context.

From f05dabc577dcd0f42b26684d20c49b1611f51366 Mon Sep 17 00:00:00 2001
From: Ari Chivukula <ari.c@icloud.com>
Date: Fri, 3 May 2024 12:24:12 +0000
Subject: [PATCH 02/16] fix

---
 .../en-us/web/api/storage_access_api/index.md | 14 ++++----
 .../related_website_sets/index.md             | 10 +++---
 .../web/api/storage_access_api/using/index.md | 33 ++++++++++++-------
 3 files changed, 33 insertions(+), 24 deletions(-)

diff --git a/files/en-us/web/api/storage_access_api/index.md b/files/en-us/web/api/storage_access_api/index.md
index b763abec9548e83..0ca74557389c078 100644
--- a/files/en-us/web/api/storage_access_api/index.md
+++ b/files/en-us/web/api/storage_access_api/index.md
@@ -22,11 +22,11 @@ The API provides methods that allow embedded resources to check whether they cur
 
 ## Concepts and usage
 
-Browsers implement several storage access features and policies restricting access to third-party cookies. These range from giving embedded resources under each top-level origin a unique cookie storage space ([partitioned cookies](#unpartitioned_versus_partitioned_cookies)) to outright blocking of cookie access when resources are loaded in a third-party context.
+Browsers implement several storage access features and policies restricting access to third-party cookies and unpartitioned state. These range from giving embedded resources under each top-level origin a unique cookie storage space ([partitioned cookies](#unpartitioned_versus_partitioned_cookies)) to outright blocking of cookie access when resources are loaded in a third-party context.
 
-The semantics around third-party cookie-blocking features and policies differ from browser to browser, but the core functionality is similar. Cross-site resources embedded in a third-party context are not given access to the same cookies that they would have access to when loaded in a first-party context. This is done with good intent — browser vendors want to take steps to better protect their user's privacy and security. Examples include leaving them less open to having their activity tracked across different sites, and less vulnerable to exploits such as cross-site request forgery ({{glossary("CSRF")}}).
+The semantics around third-party cookie and unpartitioned state blocking features and policies differ from browser to browser, but the core functionality is similar. Cross-site resources embedded in a third-party context are not given access to the same state that they would have access to when loaded in a first-party context. This is done with good intent — browser vendors want to take steps to better protect their user's privacy and security. Examples include leaving them less open to having their activity tracked across different sites, and less vulnerable to exploits such as cross-site request forgery ({{glossary("CSRF")}}).
 
-However, there are legitimate uses for embedded cross-site content accessing third-party cookies, which the above features and policies are known to break. Let's say you've got a series of different sites that provide access to different products — `heads-example.com`, `shoulders-example.com`, `knees-example.com`, and `toes-example.com`.
+However, there are legitimate uses for embedded cross-site content accessing third-party cookies and unpartitioned state, which the above features and policies are known to break. Let's say you've got a series of different sites that provide access to different products — `heads-example.com`, `shoulders-example.com`, `knees-example.com`, and `toes-example.com`.
 
 Alternatively, you might separate your content or services into different country domains for localization purposes — `example.com`, `example.ua`, `example.br`, etc. — or in some other way.
 
@@ -34,7 +34,7 @@ You might have accompanying utility sites with components embedded in all the ot
 
 In such situations, site owners often encourage users to add their site as an exception or to disable third-party cookie-blocking policies entirely. Users who wish to continue interacting with their content must significantly relax their blocking policy for resources loaded from all embedded origins and possibly across all websites.
 
-The Storage Access API is intended to solve this problem; embedded cross-site content can request unrestricted access to third-party cookies on a frame-by-frame basis via the {{domxref("Document.requestStorageAccess()")}} method. It can also check whether it already has access via the {{domxref("Document.hasStorageAccess()")}} method.
+The Storage Access API is intended to solve this problem; embedded cross-site content can request unrestricted access to third-party cookies and unpartitioned state on a frame-by-frame basis via the {{domxref("Document.requestStorageAccess()")}} method. It can also check whether it already has access via the {{domxref("Document.hasStorageAccess()")}} method.
 
 ### Unpartitioned versus partitioned cookies
 
@@ -46,7 +46,7 @@ When we talk about third-party cookies in the context of the Storage Access API,
 
 ### How it works
 
-Embedded content that has a legitimate need for third party cookie access can request access using the Storage Access API as follows:
+Embedded content that has a legitimate need for third party cookie or unpartitioned state access can request access using the Storage Access API as follows:
 
 1. It can call the {{domxref("Document.hasStorageAccess()")}} method to check whether it has the access it needs already.
 2. If not, it can request access via the {{domxref("Document.requestStorageAccess()")}} method.
@@ -73,7 +73,7 @@ Several different security measures could cause a {{domxref("Document.requestSto
 2. The document and top-level document must not have a `null` origin.
 3. Origins that have never been interacted with as a first party do not have a notion of first-party storage. From the user's perspective, they only have a third-party relationship with that origin. Access requests are automatically denied if the browser detects that the user hasn't interacted with the embedded content in a first-party context recently (in Firefox, "recently" means within 30 days).
 4. The document's window must be a [secure context](/en-US/docs/Web/Security/Secure_Contexts).
-5. Sandboxed {{htmlelement("iframe")}}s cannot be granted storage access by default for security reasons. The API therefore also adds the `allow-storage-access-by-user-activation` [sandbox token](/en-US/docs/Web/HTML/Element/iframe#sandbox). The embedding website needs to add this to allow storage access requests to be successful, along with `allow-scripts` and `allow-same-origin` to allow it to execute a script to call the API and execute it in an origin that can have cookies:
+5. Sandboxed {{htmlelement("iframe")}}s cannot be granted storage access by default for security reasons. The API therefore also adds the `allow-storage-access-by-user-activation` [sandbox token](/en-US/docs/Web/HTML/Element/iframe#sandbox). The embedding website needs to add this to allow storage access requests to be successful, along with `allow-scripts` and `allow-same-origin` to allow it to execute a script to call the API and execute it in an origin that can have cookies/state:
 
    ```html
    <iframe
@@ -119,7 +119,7 @@ Documentation for Firefox's new storage access policy for blocking tracking cook
 - {{domxref("Document.hasStorageAccess()")}}
   - : Returns a {{jsxref("Promise")}} that resolves with a boolean value indicating whether the document has access to third-party cookies.
 - {{domxref("Document.requestStorageAccess()")}}
-  - : Allows content loaded in a third-party context (i.e., embedded in an {{htmlelement("iframe")}}) to request access to third-party cookies; returns a {{jsxref("Promise")}} that resolves if the access was granted, and rejects if access was denied.
+  - : Allows content loaded in a third-party context (i.e., embedded in an {{htmlelement("iframe")}}) to request access to third-party cookies and unpartitioned state; returns a {{jsxref("Promise")}} that resolves if the access was granted, and rejects if access was denied.
 - {{domxref("Document.requestStorageAccessFor()")}} {{experimental_inline}}
   - : A proposed extension to the Storage Access API that allows top-level sites to request third-party cookie access on behalf of embedded content originating from another site in the same [related website set](/en-US/docs/Web/API/Storage_Access_API/Related_website_sets). Returns a {{jsxref("Promise")}} that resolves if the access was granted, and rejects if access was denied.
 
diff --git a/files/en-us/web/api/storage_access_api/related_website_sets/index.md b/files/en-us/web/api/storage_access_api/related_website_sets/index.md
index 77a1dde4f1f080e..423d53752a24c41 100644
--- a/files/en-us/web/api/storage_access_api/related_website_sets/index.md
+++ b/files/en-us/web/api/storage_access_api/related_website_sets/index.md
@@ -12,18 +12,18 @@ spec-urls: https://wicg.github.io/first-party-sets/
 
 > **Warning:** This feature is currently opposed by two browser vendors. See the [Standards positions](#standards_positions) section below for details of opposition.
 
-Related website sets are a mechanism for defining a set of related sites that share trusted content. As a result, browsers can grant default access for these sites to [third-party cookies](/en-US/docs/Web/Privacy/Third-party_cookies) when they have content embedded in other set members, without requiring users to grant access to the [Storage Access API](/en-US/docs/Web/API/Storage_Access_API) via a permission prompt.
+Related website sets are a mechanism for defining a set of related sites that share trusted content. As a result, browsers can grant default access for these sites to [third-party cookies](/en-US/docs/Web/Privacy/Third-party_cookies) and [unpartitioned state](/en-US/docs/Web/Privacy/State_Partitioning#state_partitioning) when they have content embedded in other set members, without requiring users to grant access to the [Storage Access API](/en-US/docs/Web/API/Storage_Access_API) via a permission prompt.
 
 ## Concepts and usage
 
-Let's consider situations where you have a series of related websites with different domain names, and you want to give site content access to third-party cookies when loaded in a third-party context inside other related sites (i.e., embedded in an {{htmlelement("iframe")}}). Typical use cases are:
+Let's consider situations where you have a series of related websites with different domain names, and you want to give site content access to third-party cookies and unpartitioned state when loaded in a third-party context inside other related sites (i.e., embedded in an {{htmlelement("iframe")}}). Typical use cases are:
 
 - App sites: A single application may be deployed over multiple sites, aiming to allow users to navigate between them seamlessly in a single session.
 - Brand sites: A set of brand assets may be contained in a single site but then deployed over multiple domains, including session data relating to user preferences, customization, etc.
 
-Third-party cookie access is commonly blocked by browser cookie-blocking policies. Still, you can work around it using the Storage Access API — see [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using) for details.
+Third-party cookie and unpartitioned state access is commonly blocked by browser policies. Still, you can work around it using the Storage Access API — see [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using) for details.
 
-Related website are a progressive enhancement mechanism that works alongside the Storage Access API. Supporting browsers grant third-party cookie access between websites in the same set _without_ having to go through the usual user permission prompt workflow, once {{domxref("Document.requestStorageAccess()")}} (or {{domxref("Document.requestStorageAccessFor()")}}) is called. This results in a more user-friendly experience for users of sites in the set.
+Related website are a progressive enhancement mechanism that works alongside the Storage Access API. Supporting browsers grant third-party cookie and unpartitioned state access between websites in the same set _without_ having to go through the usual user permission prompt workflow, once {{domxref("Document.requestStorageAccess()")}} (or {{domxref("Document.requestStorageAccessFor()")}}) is called. This results in a more user-friendly experience for users of sites in the set.
 
 You should bear in mind that:
 
@@ -127,7 +127,7 @@ Bear in mind that the `.well-known` files are also verified as part of the submi
 
 Once a set is active:
 
-- Requests from sites in the set (via {{domxref("Document.requestStorageAccess()")}}) to access third-party cookies that belong to sites in the set are automatically granted, and no user permission step is required.
+- Requests from sites in the set (via {{domxref("Document.requestStorageAccess()")}}) to access third-party cookies and unpartitioned state that belong to sites in the set are automatically granted, and no user permission step is required.
 - {{domxref("Document.requestStorageAccessFor()")}} calls can be made from top-level sites in the set to request third-party cookie access for other sites in the set.
 
 ## RWS security
diff --git a/files/en-us/web/api/storage_access_api/using/index.md b/files/en-us/web/api/storage_access_api/using/index.md
index 260000609fd8102..9286912c2604ad4 100644
--- a/files/en-us/web/api/storage_access_api/using/index.md
+++ b/files/en-us/web/api/storage_access_api/using/index.md
@@ -6,19 +6,19 @@ page-type: guide
 
 {{DefaultAPISidebar("Storage Access API")}}
 
-The [Storage Access API](/en-US/docs/Web/API/Storage_Access_API) can be used by embedded cross-site documents to verify whether they have access to [third-party cookies](/en-US/docs/Web/Privacy/Third-party_cookies) and, if not, to request access. We'll briefly look at a common storage access scenario.
+The [Storage Access API](/en-US/docs/Web/API/Storage_Access_API) can be used by embedded cross-site documents to verify whether they have access to [third-party cookies](/en-US/docs/Web/Privacy/Third-party_cookies) and [unpartitioned state](/en-US/docs/Web/Privacy/State_Partitioning#state_partitioning) and, if not, to request access. We'll briefly look at a common storage access scenario.
 
 > **Note:** When we talk about third-party cookies in the content of the Storage Access API, we implicitly mean [_unpartitioned_](/en-US/docs/Web/API/Storage_Access_API#unpartitioned_versus_partitioned_cookies) third-party cookies.
 
 ## Usage notes
 
-The Storage Access API is designed to allow embedded content to request access to third-party cookies — most modern browsers block such access by default to protect user privacy. Since embedded content won't know what a browser's behavior is going to be in this regard, it's best to always check whether the embedded {{htmlelement("iframe")}} has storage access before attempting to read or write a cookie. This is particularly true for {{domxref("Document.cookie")}} access, as browsers will often return an empty cookie jar when third-party cookie access is blocked.
+The Storage Access API is designed to allow embedded content to request access to third-party cookies and unpartitioned state — most modern browsers block such access by default to protect user privacy. Since embedded content won't know what a browser's behavior is going to be in this regard, it's best to always check whether the embedded {{htmlelement("iframe")}} has storage access before attempting to read or write a cookie. This is particularly true for {{domxref("Document.cookie")}} access, as browsers will often return an empty cookie jar when third-party cookie access is blocked.
 
-In the example below, we show how an embedded cross-site {{htmlelement("iframe")}} can access third-party cookies under a browser storage access policy that would otherwise block access to them.
+In the example below, we show how an embedded cross-site {{htmlelement("iframe")}} can access third-party cookies and unpartitioned state under a browser storage access policy that would otherwise block access to them.
 
 ## Allowing a sandboxed \<iframe> to use the API
 
-First of all, if the `<iframe>` is sandboxed, the embedding website needs to add the `allow-storage-access-by-user-activation` [sandbox token](/en-US/docs/Web/HTML/Element/iframe#sandbox) to allow Storage Access API requests to be successful, along with `allow-scripts` and `allow-same-origin` to allow it to execute a script to call the API and execute it in an origin that can have cookies:
+First of all, if the `<iframe>` is sandboxed, the embedding website needs to add the `allow-storage-access-by-user-activation` [sandbox token](/en-US/docs/Web/HTML/Element/iframe#sandbox) to allow Storage Access API requests to be successful, along with `allow-scripts` and `allow-same-origin` to allow it to execute a script to call the API and execute it in an origin that can have cookies and state:
 
 ```html
 <iframe
@@ -35,17 +35,21 @@ Now on to the code executed inside the embedded document. In this code:
 
 1. We first use feature detection (`if (document.hasStorageAccess) {}`) to check whether the API is supported. If not, we run our code that accesses cookies anyway, and hope that it works. It should be coded defensively to deal with such eventualities anyway.
 2. If the API is supported, we call `document.hasStorageAccess()`.
-3. If that call returns `true`, it means this {{htmlelement("iframe")}} has already obtained access, and we can run our code that accesses cookies right away.
-4. If that call returns `false`, we then call {{domxref("Permissions.query()")}} to check whether permission to access third-party cookies has already been granted (i.e., to another same-site embed). We wrap this whole section in a [`try...catch`](/en-US/docs/Web/JavaScript/Reference/Statements/try...catch) block because [some browsers don't support the `"storage-access"` permission](/en-US/docs/Web/API/Storage_Access_API#api.permissions.permission_storage-access), which can cause the `query()` call to throw. If it throws, we report that to the console and try running the cookie code anyway.
-5. If the permission state is `"granted"`, we immediately call `document.requestStorageAccess()`. This call will automatically resolve, saving the user some time, then we can run our code that accesses cookies.
-6. If the permission state is `"prompt"`, we call `document.requestStorageAccess()` after user interaction. This call may trigger a prompt to the user. If this call resolves, then we can run our code that accesses cookies.
-7. If the permission state is `"denied"`, the user has denied our requests to access third-party cookies, and our code cannot use them.
+3. If that call returns `true`, it means this {{htmlelement("iframe")}} has already obtained access, and we can run our code that accesses cookies and state right away.
+4. If that call returns `false`, we then call {{domxref("Permissions.query()")}} to check whether permission to access third-party cookies and unpartitioned state has already been granted (i.e., to another same-site embed). We wrap this whole section in a [`try...catch`](/en-US/docs/Web/JavaScript/Reference/Statements/try...catch) block because [some browsers don't support the `"storage-access"` permission](/en-US/docs/Web/API/Storage_Access_API#api.permissions.permission_storage-access), which can cause the `query()` call to throw. If it throws, we report that to the console and try running the cookie code anyway.
+5. If the permission state is `"granted"`, we immediately call `document.requestStorageAccess()`. This call will automatically resolve, saving the user some time, then we can run our code that accesses cookies and state.
+6. If the permission state is `"prompt"`, we call `document.requestStorageAccess()` after user interaction. This call may trigger a prompt to the user. If this call resolves, then we can run our code that accesses cookies and state.
+7. If the permission state is `"denied"`, the user has denied our requests to access third-party cookies or unpartitioned state, and our code cannot use them.
 
 ```js
 function doThingsWithCookies() {
   document.cookie = "foo=bar"; // set a cookie
 }
 
+function doThingsWithLocalStorage(handle) {
+  handle.localStorage.setItem("foo", "bar"); // set a local storage key
+}
+
 async function handleCookieAccess() {
   if (!document.hasStorageAccess) {
     // This browser doesn't support the Storage Access API
@@ -56,6 +60,9 @@ async function handleCookieAccess() {
     if (hasAccess) {
       // We have access to third-party cookies, so let's go
       doThingsWithCookies();
+      // If we want to modify unpartitioned state, we need to request a handle.
+      const handle = await document.requestStorageAccess({localStorage: true});
+      doThingsWithLocalStorage(handle);
     } else {
       // Check whether third-party cookie access has been granted
       // to another same-site embed
@@ -67,13 +74,15 @@ async function handleCookieAccess() {
         if (permission.state === "granted") {
           // If so, you can just call requestStorageAccess() without a user interaction,
           // and it will resolve automatically.
-          await document.requestStorageAccess();
+          const handle = await document.requestStorageAccess({cookies: true, localStorage: true});
+          doThingsWithLocalStorage(handle);
           doThingsWithCookies();
         } else if (permission.state === "prompt") {
           // Need to call requestStorageAccess() after a user interaction
           btn.addEventListener("click", async () => {
             try {
-              await document.requestStorageAccess();
+              const handle = await document.requestStorageAccess({cookies: true, localStorage: true});
+              doThingsWithLocalStorage(handle);
               doThingsWithCookies();
             } catch (err) {
               // If there is an error obtaining storage access.
@@ -98,7 +107,7 @@ async function handleCookieAccess() {
 
 ### Related website sets
 
-The Chrome-only [related website sets](/en-US/docs/Web/API/Storage_Access_API/Related_website_sets) feature can be considered a progressive enhancement mechanism that works alongside the Storage Access API — supporting browsers grant default third-party cookie access between websites in the same set. This means not having to go through the usual user permission prompt workflow described above, meaning a more user-friendly experience for users of sites in the set.
+The Chrome-only [related website sets](/en-US/docs/Web/API/Storage_Access_API/Related_website_sets) feature can be considered a progressive enhancement mechanism that works alongside the Storage Access API — supporting browsers grant default third-party cookie and unpartitioned state access between websites in the same set. This means not having to go through the usual user permission prompt workflow described above, meaning a more user-friendly experience for users of sites in the set.
 
 ## Requesting storage access from the top-level site on behalf of embedded resources
 

From 34a2b7505d66966e23bb5e6d169a86edb05c3f48 Mon Sep 17 00:00:00 2001
From: Ari Chivukula <ari.c@icloud.com>
Date: Fri, 3 May 2024 12:43:33 +0000
Subject: [PATCH 03/16] fix

---
 .../document/requeststorageaccess/index.md    | 66 +++++++++++++++++--
 files/jsondata/GroupData.json                 |  2 +-
 yarn.lock                                     |  6 +-
 3 files changed, 64 insertions(+), 10 deletions(-)

diff --git a/files/en-us/web/api/document/requeststorageaccess/index.md b/files/en-us/web/api/document/requeststorageaccess/index.md
index 1c929c48f8981dc..97a25568c92ef0b 100644
--- a/files/en-us/web/api/document/requeststorageaccess/index.md
+++ b/files/en-us/web/api/document/requeststorageaccess/index.md
@@ -8,7 +8,7 @@ browser-compat: api.Document.requestStorageAccess
 
 {{APIRef("Storage Access API")}}
 
-The **`requestStorageAccess()`** method of the {{domxref("Document")}} interface allows content loaded in a third-party context (i.e., embedded in an {{htmlelement("iframe")}}) to request access to [third-party cookies](/en-US/docs/Web/Privacy/Third-party_cookies). This is relevant to user agents that, by default, block access to third-party, [unpartitioned](/en-US/docs/Web/API/Storage_Access_API#unpartitioned_versus_partitioned_cookies) cookies to improve privacy (e.g., to prevent tracking), and is part of the [Storage Access API](/en-US/docs/Web/API/Storage_Access_API).
+The **`requestStorageAccess()`** method of the {{domxref("Document")}} interface allows content loaded in a third-party context (i.e., embedded in an {{htmlelement("iframe")}}) to request access to [third-party cookies](/en-US/docs/Web/Privacy/Third-party_cookies) and [unpartitioned state](/en-US/docs/Web/Privacy/State_Partitioning#state_partitioning). This is relevant to user agents that, by default, block access to third-party, [unpartitioned](/en-US/docs/Web/API/Storage_Access_API#unpartitioned_versus_partitioned_cookies) cookies to improve privacy (e.g., to prevent tracking), and is part of the [Storage Access API](/en-US/docs/Web/API/Storage_Access_API).
 
 To check whether permission to access third-party cookies has already been granted, you can call {{domxref("Permissions.query()")}}, specifying the feature name `"storage-access"`.
 
@@ -18,15 +18,58 @@ To check whether permission to access third-party cookies has already been grant
 
 ```js-nolint
 requestStorageAccess()
+requestStorageAccess(types)
 ```
 
 ### Parameters
 
-None.
+- `types` {{optional_inline}}
+
+  - : An object containing properties that control what unpartitioned state is made accessible. Available properties are as follows:
+
+    - `all`
+      - : A boolean specifying all possible unpartitioned state should be made accessible.
+        If not specified the default is `false`.
+    - `cookies`
+      - : A boolean specifying third-party cookies should be made accessible.
+        If not specified the default is `false`.
+    - `sessionStorage`
+      - : A boolean specifying unpartitioned sessionStorage should be made accessible.
+        If not specified the default is `false`.
+    - `localStorage`
+      - : A boolean specifying unpartitioned localStorage should be made accessible.
+        If not specified the default is `false`.
+    - `indexedDB`
+      - : A boolean specifying unpartitioned indexedDB should be made accessible.
+        If not specified the default is `false`.
+    - `locks`
+      - : A boolean specifying unpartitioned locks should be made accessible.
+        If not specified the default is `false`.
+    - `caches`
+      - : A boolean specifying unpartitioned caches should be made accessible.
+        If not specified the default is `false`.
+    - `getDirectory`
+      - : A boolean specifying unpartitioned getDirectory should be made accessible.
+        If not specified the default is `false`.
+    - `estimate`
+      - : A boolean specifying unpartitioned estimate should be made accessible.
+        If not specified the default is `false`.
+    - `createObjectURL`
+      - : A boolean specifying unpartitioned createObjectURL should be made accessible.
+        If not specified the default is `false`.
+    - `revokeObjectURL`
+      - : A boolean specifying unpartitioned revokeObjectURL should be made accessible.
+        If not specified the default is `false`.
+    - `BroadcastChannel`
+      - : A boolean specifying unpartitioned BroadcastChannel should be made accessible.
+        If not specified the default is `false`.
+    - `SharedWorker`
+      - : A boolean specifying unpartitioned SharedWorker should be made accessible.
+        If not specified the default is `false`.
 
 ### Return value
 
-A {{jsxref("Promise")}} that fulfills with `undefined` if the access to third-party cookies was granted, and rejects if access was denied.
+A {{jsxref("Promise")}} that fulfills with `undefined` if the access to third-party cookies was granted and no `types` parameter was provided, fufills with {{domxref("StorageAccessHandle")}} if the access to unpartitioned state requested by the `types` parameter was provided, and rejects if access was denied.
 
 `requestStorageAccess()` requests are automatically denied unless the embedded content is currently processing a user gesture such as a tap or click ({{Glossary("transient activation")}}), or unless permission was already granted previously. If permission was not previously granted, they need to be run inside a user gesture-based event handler. The user gesture behavior depends on the state of the promise:
 
@@ -36,7 +79,9 @@ A {{jsxref("Promise")}} that fulfills with `undefined` if the access to third-pa
 ### Exceptions
 
 - `InvalidStateError` {{domxref("DOMException")}}
-  - : Thrown if the current {{domxref("Document")}} is not yet active.
+  - : Thrown if:
+    - The current {{domxref("Document")}} is not yet active.
+    - The `types` parameter is provided and all of its properties are `false`.
 - `NotAllowedError` {{domxref("DOMException")}}
   - : Thrown if:
     - The document's window is not a [secure context](/en-US/docs/Web/Security/Secure_Contexts).
@@ -50,10 +95,19 @@ A {{jsxref("Promise")}} that fulfills with `undefined` if the access to third-pa
 ```js
 document.requestStorageAccess().then(
   () => {
-    console.log("access granted");
+    console.log("cookie access granted");
+  },
+  () => {
+    console.log("cookie access denied");
+  },
+);
+
+document.requestStorageAccess({localStorage: true}).then(
+  (handle) => {
+    console.log("localStorage access granted");
   },
   () => {
-    console.log("access denied");
+    console.log("localStorage access denied");
   },
 );
 ```
diff --git a/files/jsondata/GroupData.json b/files/jsondata/GroupData.json
index 80e07c9cd1497a2..d5410fc071d9efb 100644
--- a/files/jsondata/GroupData.json
+++ b/files/jsondata/GroupData.json
@@ -1422,7 +1422,7 @@
         "/docs/Web/API/Storage_Access_API/Using",
         "/docs/Web/API/Storage_Access_API/Related_website_sets"
       ],
-      "interfaces": [],
+      "interfaces": ["StorageAccessHandle"],
       "methods": [
         "Document.hasStorageAccess()",
         "Document.requestStorageAccess()",
diff --git a/yarn.lock b/yarn.lock
index fb17d03d011584b..db5580146ce5d24 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7884,9 +7884,9 @@ web-namespaces@^2.0.0:
   integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==
 
 web-specs@^3.8.0:
-  version "3.8.0"
-  resolved "https://registry.yarnpkg.com/web-specs/-/web-specs-3.8.0.tgz#8ec021ff94abee98db5491a8ed3c595de3f17293"
-  integrity sha512-tAJgIFOgHHAQiorvKW8gMCzrTDBzT+wThaXduQswmFuiMbKtQZQtBobQ74v4nIUKgPlIHi/e8ypYptcQ4OblKg==
+  version "3.9.0"
+  resolved "https://registry.yarnpkg.com/web-specs/-/web-specs-3.9.0.tgz#c6dfe2a15c272613fbc3b978b71510a77d0b4ccf"
+  integrity sha512-DJG4kyzB96cOQ7VMSGQYOFGBRQ+YlqY6lIm1TWaj07WBZc1OIj9xBcgZnzFaBMaXc281Gspvnnh53Xt9+qWTeA==
 
 web-streams-polyfill@4.0.0-beta.3:
   version "4.0.0-beta.3"

From 3dae79941fae424cf942069c0c4c0c183c05a57c Mon Sep 17 00:00:00 2001
From: Ari Chivukula <ari.c@icloud.com>
Date: Fri, 3 May 2024 13:01:18 +0000
Subject: [PATCH 04/16] fix

---
 .../web/api/storageaccesshandle/index.md      | 67 +++++++++++++++++++
 1 file changed, 67 insertions(+)
 create mode 100644 files/en-us/web/api/storageaccesshandle/index.md

diff --git a/files/en-us/web/api/storageaccesshandle/index.md b/files/en-us/web/api/storageaccesshandle/index.md
new file mode 100644
index 000000000000000..b28d633b5cb4adb
--- /dev/null
+++ b/files/en-us/web/api/storageaccesshandle/index.md
@@ -0,0 +1,67 @@
+---
+title: StorageAccessHandle
+slug: Web/API/StorageAccessHandle
+page-type: web-api-interface
+browser-compat: api.StorageAccessHandle
+---
+
+{{APIRef("Storage Access API")}}
+
+The **`StorageAccessHandle`** interface represents access to [unpartitioned state](/en-US/docs/Web/Privacy/State_Partitioning#state_partitioning) granted by a call to {{domxref("Document.requestStorageAccess()")}}.
+
+## Instance properties
+
+- {{domxref("StorageAccessHandle.sessionStorage")}} {{ReadOnlyInline}}
+  - : Returns a {{domxref("Storage")}} object used to access unpartitioned sessionStorage if access was granted.
+- {{domxref("StorageAccessHandle.localStorage")}} {{ReadOnlyInline}}
+  - : Returns a {{domxref("Storage")}} object used to access unpartitioned localStorage if access was granted.
+- {{domxref("StorageAccessHandle.indexedDB")}} {{ReadOnlyInline}}
+  - : Returns an {{domxref("IDBFactory")}} object used to access unpartitioned indexedDB if access was granted.
+- {{domxref("StorageAccessHandle.locks")}} {{ReadOnlyInline}}
+  - : Returns a {{domxref("LockManager")}} object used to access unpartitioned locks if access was granted.
+- {{domxref("StorageAccessHandle.caches")}} {{ReadOnlyInline}}
+  - : Returns a {{domxref("CacheStorage")}} object used to access unpartitioned caches if access was granted.
+
+## Instance methods
+
+- {{domxref("StorageAccessHandle.getDirectory()")}}
+  - : Returns a {{jsxref("Promise")}} that fufills with a {{domxref("FileSystemDirectoryHandle")}} object used to access unpartitioned getDirectory if access was granted, and rejects otherwise.
+- {{domxref("StorageAccessHandle.estimate()")}}
+  - : Returns a {{jsxref("Promise")}} that fufills with a {{domxref("StorageEstimate")}} object used to access unpartitioned estimate if access was granted, and rejects otherwise.
+- {{domxref("StorageAccessHandle.createObjectURL()")}}
+  - : Returns the unpartitioned blob storage url created if access was granted, and throws otherwise.
+- {{domxref("StorageAccessHandle.revokeObjectURL()")}}
+  - : Removes the unpartitioned blob storage url if access was granted, and throws otherwise.
+- {{domxref("StorageAccessHandle.BroadcastChannel()")}}
+  - : Returns the unpartitioned {{domxref("BroadcastChannel")}} created if access was granted, and throws otherwise.
+- {{domxref("StorageAccessHandle.SharedWorker()")}}
+  - : Returns the unpartitioned {{domxref("SharedWorker")}} created if access was granted, and throws otherwise.
+
+## Example
+
+```js
+document.requestStorageAccess({localStorage: true}).then(
+  (handle) => {
+    console.log("localStorage access granted");
+    handle.localStorage.setItem("foo", "bar");
+  },
+  () => {
+    console.log("localStorage access denied");
+  },
+);
+```
+
+> **Note:** See [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using) for a more complete example.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{domxref("Document.requestStorageAccess()")}}
+- [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using)

From dfdcfa0f3c6140dc1cb9acf4659c6c20e8765705 Mon Sep 17 00:00:00 2001
From: Ari Chivukula <ari.c@icloud.com>
Date: Fri, 3 May 2024 09:01:39 -0400
Subject: [PATCH 05/16] Update
 files/en-us/web/api/document/requeststorageaccess/index.md

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
---
 files/en-us/web/api/document/requeststorageaccess/index.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/files/en-us/web/api/document/requeststorageaccess/index.md b/files/en-us/web/api/document/requeststorageaccess/index.md
index 97a25568c92ef0b..a105153671ca0d3 100644
--- a/files/en-us/web/api/document/requeststorageaccess/index.md
+++ b/files/en-us/web/api/document/requeststorageaccess/index.md
@@ -102,7 +102,7 @@ document.requestStorageAccess().then(
   },
 );
 
-document.requestStorageAccess({localStorage: true}).then(
+document.requestStorageAccess({ localStorage: true }).then(
   (handle) => {
     console.log("localStorage access granted");
   },

From 47a01a78e9b3cf442c1ff1e0924571c6e4719bd0 Mon Sep 17 00:00:00 2001
From: Ari Chivukula <ari.c@icloud.com>
Date: Fri, 3 May 2024 09:01:53 -0400
Subject: [PATCH 06/16] Update
 files/en-us/web/api/storage_access_api/using/index.md

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
---
 files/en-us/web/api/storage_access_api/using/index.md | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/files/en-us/web/api/storage_access_api/using/index.md b/files/en-us/web/api/storage_access_api/using/index.md
index 9286912c2604ad4..03f8380725b6035 100644
--- a/files/en-us/web/api/storage_access_api/using/index.md
+++ b/files/en-us/web/api/storage_access_api/using/index.md
@@ -81,7 +81,10 @@ async function handleCookieAccess() {
           // Need to call requestStorageAccess() after a user interaction
           btn.addEventListener("click", async () => {
             try {
-              const handle = await document.requestStorageAccess({cookies: true, localStorage: true});
+              const handle = await document.requestStorageAccess({
+                cookies: true,
+                localStorage: true,
+              });
               doThingsWithLocalStorage(handle);
               doThingsWithCookies();
             } catch (err) {

From 5e3fa9ba830093d323a8fa025414d090d7873e0b Mon Sep 17 00:00:00 2001
From: Ari Chivukula <ari.c@icloud.com>
Date: Fri, 3 May 2024 09:01:58 -0400
Subject: [PATCH 07/16] Update
 files/en-us/web/api/storage_access_api/using/index.md

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
---
 files/en-us/web/api/storage_access_api/using/index.md | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/files/en-us/web/api/storage_access_api/using/index.md b/files/en-us/web/api/storage_access_api/using/index.md
index 03f8380725b6035..828be717a497829 100644
--- a/files/en-us/web/api/storage_access_api/using/index.md
+++ b/files/en-us/web/api/storage_access_api/using/index.md
@@ -74,7 +74,10 @@ async function handleCookieAccess() {
         if (permission.state === "granted") {
           // If so, you can just call requestStorageAccess() without a user interaction,
           // and it will resolve automatically.
-          const handle = await document.requestStorageAccess({cookies: true, localStorage: true});
+          const handle = await document.requestStorageAccess({
+            cookies: true,
+            localStorage: true,
+          });
           doThingsWithLocalStorage(handle);
           doThingsWithCookies();
         } else if (permission.state === "prompt") {

From cd7cad47d3f721ad139d2987df838f9328b4694d Mon Sep 17 00:00:00 2001
From: Ari Chivukula <ari.c@icloud.com>
Date: Fri, 3 May 2024 09:02:05 -0400
Subject: [PATCH 08/16] Update
 files/en-us/web/api/storage_access_api/using/index.md

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
---
 files/en-us/web/api/storage_access_api/using/index.md | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/files/en-us/web/api/storage_access_api/using/index.md b/files/en-us/web/api/storage_access_api/using/index.md
index 828be717a497829..7f13d26a552302d 100644
--- a/files/en-us/web/api/storage_access_api/using/index.md
+++ b/files/en-us/web/api/storage_access_api/using/index.md
@@ -61,7 +61,9 @@ async function handleCookieAccess() {
       // We have access to third-party cookies, so let's go
       doThingsWithCookies();
       // If we want to modify unpartitioned state, we need to request a handle.
-      const handle = await document.requestStorageAccess({localStorage: true});
+      const handle = await document.requestStorageAccess({
+        localStorage: true,
+      });
       doThingsWithLocalStorage(handle);
     } else {
       // Check whether third-party cookie access has been granted

From ca39133242e0003022e94b14c5d08a0956a8979d Mon Sep 17 00:00:00 2001
From: Ari Chivukula <ari.c@icloud.com>
Date: Fri, 3 May 2024 09:03:22 -0400
Subject: [PATCH 09/16] Update files/en-us/web/api/storageaccesshandle/index.md

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
---
 files/en-us/web/api/storageaccesshandle/index.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/files/en-us/web/api/storageaccesshandle/index.md b/files/en-us/web/api/storageaccesshandle/index.md
index b28d633b5cb4adb..4f4857d980462e9 100644
--- a/files/en-us/web/api/storageaccesshandle/index.md
+++ b/files/en-us/web/api/storageaccesshandle/index.md
@@ -40,7 +40,7 @@ The **`StorageAccessHandle`** interface represents access to [unpartitioned stat
 ## Example
 
 ```js
-document.requestStorageAccess({localStorage: true}).then(
+document.requestStorageAccess({ localStorage: true }).then(
   (handle) => {
     console.log("localStorage access granted");
     handle.localStorage.setItem("foo", "bar");

From bf60b5d7a4d8df4c35428c1b994f0623ddd97daf Mon Sep 17 00:00:00 2001
From: Ari Chivukula <ari.c@icloud.com>
Date: Fri, 3 May 2024 13:09:50 +0000
Subject: [PATCH 10/16] fix

---
 .../document/requeststorageaccess/index.md    | 22 +++++++++----------
 .../web/api/storageaccesshandle/index.md      | 18 +++++++--------
 2 files changed, 20 insertions(+), 20 deletions(-)

diff --git a/files/en-us/web/api/document/requeststorageaccess/index.md b/files/en-us/web/api/document/requeststorageaccess/index.md
index a105153671ca0d3..fb84bc9a9e5abb4 100644
--- a/files/en-us/web/api/document/requeststorageaccess/index.md
+++ b/files/en-us/web/api/document/requeststorageaccess/index.md
@@ -34,37 +34,37 @@ requestStorageAccess(types)
       - : A boolean specifying third-party cookies should be made accessible.
         If not specified the default is `false`.
     - `sessionStorage`
-      - : A boolean specifying unpartitioned sessionStorage should be made accessible.
+      - : A boolean specifying {{domxref("StorageAccessHandle.sessionStorage")}} should be made accessible.
         If not specified the default is `false`.
     - `localStorage`
-      - : A boolean specifying unpartitioned localStorage should be made accessible.
+      - : A boolean specifying {{domxref("StorageAccessHandle.localStorage")}} should be made accessible.
         If not specified the default is `false`.
     - `indexedDB`
-      - : A boolean specifying unpartitioned indexedDB should be made accessible.
+      - : A boolean specifying {{domxref("StorageAccessHandle.indexedDB")}} should be made accessible.
         If not specified the default is `false`.
     - `locks`
-      - : A boolean specifying unpartitioned locks should be made accessible.
+      - : A boolean specifying {{domxref("StorageAccessHandle.locks")}} should be made accessible.
         If not specified the default is `false`.
     - `caches`
-      - : A boolean specifying unpartitioned caches should be made accessible.
+      - : A boolean specifying {{domxref("StorageAccessHandle.caches")}} should be made accessible.
         If not specified the default is `false`.
     - `getDirectory`
-      - : A boolean specifying unpartitioned getDirectory should be made accessible.
+      - : A boolean specifying {{domxref("StorageAccessHandle.getDirectory()")}} should be made accessible.
         If not specified the default is `false`.
     - `estimate`
-      - : A boolean specifying unpartitioned estimate should be made accessible.
+      - : A boolean specifying {{domxref("StorageAccessHandle.estimate()")}} should be made accessible.
         If not specified the default is `false`.
     - `createObjectURL`
-      - : A boolean specifying unpartitioned createObjectURL should be made accessible.
+      - : A boolean specifying {{domxref("StorageAccessHandle.createObjectURL()")}} should be made accessible.
         If not specified the default is `false`.
     - `revokeObjectURL`
-      - : A boolean specifying unpartitioned revokeObjectURL should be made accessible.
+      - : A boolean specifying {{domxref("StorageAccessHandle.revokeObjectURL()")}} should be made accessible.
         If not specified the default is `false`.
     - `BroadcastChannel`
-      - : A boolean specifying unpartitioned BroadcastChannel should be made accessible.
+      - : A boolean specifying {{domxref("StorageAccessHandle.BroadcastChannel()")}} should be made accessible.
         If not specified the default is `false`.
     - `SharedWorker`
-      - : A boolean specifying unpartitioned SharedWorker should be made accessible.
+      - : A boolean specifying {{domxref("StorageAccessHandle.SharedWorker()")}} should be made accessible.
         If not specified the default is `false`.
 
 ### Return value
diff --git a/files/en-us/web/api/storageaccesshandle/index.md b/files/en-us/web/api/storageaccesshandle/index.md
index 4f4857d980462e9..18478a00159f61e 100644
--- a/files/en-us/web/api/storageaccesshandle/index.md
+++ b/files/en-us/web/api/storageaccesshandle/index.md
@@ -12,26 +12,26 @@ The **`StorageAccessHandle`** interface represents access to [unpartitioned stat
 ## Instance properties
 
 - {{domxref("StorageAccessHandle.sessionStorage")}} {{ReadOnlyInline}}
-  - : Returns a {{domxref("Storage")}} object used to access unpartitioned sessionStorage if access was granted.
+  - : Returns an unpartitioned session {{domxref("Storage")}} object if access was granted.
 - {{domxref("StorageAccessHandle.localStorage")}} {{ReadOnlyInline}}
-  - : Returns a {{domxref("Storage")}} object used to access unpartitioned localStorage if access was granted.
+  - : Returns an unpartitioned local {{domxref("Storage")}} object if access was granted.
 - {{domxref("StorageAccessHandle.indexedDB")}} {{ReadOnlyInline}}
-  - : Returns an {{domxref("IDBFactory")}} object used to access unpartitioned indexedDB if access was granted.
+  - : Returns an unpartitioned {{domxref("IDBFactory")}} object if access was granted.
 - {{domxref("StorageAccessHandle.locks")}} {{ReadOnlyInline}}
-  - : Returns a {{domxref("LockManager")}} object used to access unpartitioned locks if access was granted.
+  - : Returns an unpartitioned {{domxref("LockManager")}} object if access was granted.
 - {{domxref("StorageAccessHandle.caches")}} {{ReadOnlyInline}}
-  - : Returns a {{domxref("CacheStorage")}} object used to access unpartitioned caches if access was granted.
+  - : Returns an unpartitioned {{domxref("CacheStorage")}} object if access was granted.
 
 ## Instance methods
 
 - {{domxref("StorageAccessHandle.getDirectory()")}}
-  - : Returns a {{jsxref("Promise")}} that fufills with a {{domxref("FileSystemDirectoryHandle")}} object used to access unpartitioned getDirectory if access was granted, and rejects otherwise.
+  - : Returns a {{jsxref("Promise")}} that fufills with an unpartitioned {{domxref("FileSystemDirectoryHandle")}} object if access was granted, and rejects otherwise.
 - {{domxref("StorageAccessHandle.estimate()")}}
-  - : Returns a {{jsxref("Promise")}} that fufills with a {{domxref("StorageEstimate")}} object used to access unpartitioned estimate if access was granted, and rejects otherwise.
+  - : Returns a {{jsxref("Promise")}} that fufills with an unpartitioned {{domxref("StorageEstimate")}} object if access was granted, and rejects otherwise.
 - {{domxref("StorageAccessHandle.createObjectURL()")}}
-  - : Returns the unpartitioned blob storage url created if access was granted, and throws otherwise.
+  - : Returns a string representing the unpartitioned blob storage url created if access was granted, and throws otherwise.
 - {{domxref("StorageAccessHandle.revokeObjectURL()")}}
-  - : Removes the unpartitioned blob storage url if access was granted, and throws otherwise.
+  - : Revokes the unpartitioned blob storage url passed in if access was granted, and throws otherwise.
 - {{domxref("StorageAccessHandle.BroadcastChannel()")}}
   - : Returns the unpartitioned {{domxref("BroadcastChannel")}} created if access was granted, and throws otherwise.
 - {{domxref("StorageAccessHandle.SharedWorker()")}}

From f6e4023c068a449e5780ab21af090f563d0e74a3 Mon Sep 17 00:00:00 2001
From: Ari Chivukula <ari.c@icloud.com>
Date: Fri, 3 May 2024 13:24:47 +0000
Subject: [PATCH 11/16] fix

---
 .../document/requeststorageaccess/index.md    |  1 +
 .../api/storageaccesshandle/caches/index.md   | 45 ++++++++++++++++++
 .../storageaccesshandle/indexeddb/index.md    | 44 ++++++++++++++++++
 .../storageaccesshandle/localstorage/index.md | 44 ++++++++++++++++++
 .../api/storageaccesshandle/locks/index.md    | 46 +++++++++++++++++++
 .../sessionstorage/index.md                   | 44 ++++++++++++++++++
 6 files changed, 224 insertions(+)
 create mode 100644 files/en-us/web/api/storageaccesshandle/caches/index.md
 create mode 100644 files/en-us/web/api/storageaccesshandle/indexeddb/index.md
 create mode 100644 files/en-us/web/api/storageaccesshandle/localstorage/index.md
 create mode 100644 files/en-us/web/api/storageaccesshandle/locks/index.md
 create mode 100644 files/en-us/web/api/storageaccesshandle/sessionstorage/index.md

diff --git a/files/en-us/web/api/document/requeststorageaccess/index.md b/files/en-us/web/api/document/requeststorageaccess/index.md
index fb84bc9a9e5abb4..ab03784bd735a31 100644
--- a/files/en-us/web/api/document/requeststorageaccess/index.md
+++ b/files/en-us/web/api/document/requeststorageaccess/index.md
@@ -105,6 +105,7 @@ document.requestStorageAccess().then(
 document.requestStorageAccess({ localStorage: true }).then(
   (handle) => {
     console.log("localStorage access granted");
+    handle.localStorage.setItem("foo", "bar");
   },
   () => {
     console.log("localStorage access denied");
diff --git a/files/en-us/web/api/storageaccesshandle/caches/index.md b/files/en-us/web/api/storageaccesshandle/caches/index.md
new file mode 100644
index 000000000000000..fd9f716cf662fc7
--- /dev/null
+++ b/files/en-us/web/api/storageaccesshandle/caches/index.md
@@ -0,0 +1,45 @@
+---
+title: "StorageAccessHandle: caches property"
+short-title: caches
+slug: Web/API/StorageAccessHandle/caches
+page-type: web-api-instance-property
+browser-compat: api.StorageAccessHandle.caches
+---
+
+{{APIRef("Storage Access API")}}
+
+The **`caches`** property of the {{domxref("StorageAccessHandle")}} interface returns an unpartitioned {{domxref("CacheStorage")}} object if access was granted, and throws a `SecurityError` {{DOMxRef("DOMException")}} otherwise.
+
+## Value
+
+A {{domxref("CacheStorage")}} object.
+
+## Examples
+
+```js
+document.requestStorageAccess({ caches: true }).then(
+  (handle) => {
+    console.log("caches access granted");
+    const cache = await handle.caches.open("foo");
+    await cache.add("/");
+  },
+  () => {
+    console.log("caches access denied");
+  },
+);
+```
+
+> **Note:** See [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using) for a more complete example.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{domxref("Document.requestStorageAccess()")}}
+- [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using)
diff --git a/files/en-us/web/api/storageaccesshandle/indexeddb/index.md b/files/en-us/web/api/storageaccesshandle/indexeddb/index.md
new file mode 100644
index 000000000000000..b66c1820ac5077d
--- /dev/null
+++ b/files/en-us/web/api/storageaccesshandle/indexeddb/index.md
@@ -0,0 +1,44 @@
+---
+title: "StorageAccessHandle: indexedDB property"
+short-title: indexedDB
+slug: Web/API/StorageAccessHandle/indexedDB
+page-type: web-api-instance-property
+browser-compat: api.StorageAccessHandle.indexedDB
+---
+
+{{APIRef("Storage Access API")}}
+
+The **`indexedDB`** property of the {{domxref("StorageAccessHandle")}} interface returns an unpartitioned {{domxref("IDBFactory")}} object if access was granted, and throws a `SecurityError` {{DOMxRef("DOMException")}} otherwise.
+
+## Value
+
+A {{domxref("IDBFactory")}} object.
+
+## Examples
+
+```js
+document.requestStorageAccess({ indexedDB: true }).then(
+  (handle) => {
+    console.log("indexedDB access granted");
+    await handle.indexedDB.deleteDatabase("foo");
+  },
+  () => {
+    console.log("indexedDB access denied");
+  },
+);
+```
+
+> **Note:** See [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using) for a more complete example.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{domxref("Document.requestStorageAccess()")}}
+- [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using)
diff --git a/files/en-us/web/api/storageaccesshandle/localstorage/index.md b/files/en-us/web/api/storageaccesshandle/localstorage/index.md
new file mode 100644
index 000000000000000..933c556355b8d98
--- /dev/null
+++ b/files/en-us/web/api/storageaccesshandle/localstorage/index.md
@@ -0,0 +1,44 @@
+---
+title: "StorageAccessHandle: localStorage property"
+short-title: localStorage
+slug: Web/API/StorageAccessHandle/localStorage
+page-type: web-api-instance-property
+browser-compat: api.StorageAccessHandle.localStorage
+---
+
+{{APIRef("Storage Access API")}}
+
+The **`localStorage`** property of the {{domxref("StorageAccessHandle")}} interface returns an unpartitioned local {{domxref("Storage")}} object if access was granted, and throws a `SecurityError` {{DOMxRef("DOMException")}} otherwise.
+
+## Value
+
+A {{domxref("Storage")}} object.
+
+## Examples
+
+```js
+document.requestStorageAccess({ localStorage: true }).then(
+  (handle) => {
+    console.log("localStorage access granted");
+    handle.localStorage.setItem("foo", "bar");
+  },
+  () => {
+    console.log("localStorage access denied");
+  },
+);
+```
+
+> **Note:** See [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using) for a more complete example.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{domxref("Document.requestStorageAccess()")}}
+- [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using)
diff --git a/files/en-us/web/api/storageaccesshandle/locks/index.md b/files/en-us/web/api/storageaccesshandle/locks/index.md
new file mode 100644
index 000000000000000..96906b6aecdfe39
--- /dev/null
+++ b/files/en-us/web/api/storageaccesshandle/locks/index.md
@@ -0,0 +1,46 @@
+---
+title: "StorageAccessHandle: locks property"
+short-title: locks
+slug: Web/API/StorageAccessHandle/locks
+page-type: web-api-instance-property
+browser-compat: api.StorageAccessHandle.locks
+---
+
+{{APIRef("Storage Access API")}}
+
+The **`locks`** property of the {{domxref("StorageAccessHandle")}} interface returns an unpartitioned session {{domxref("LockManager")}} object if access was granted, and throws a `SecurityError` {{DOMxRef("DOMException")}} otherwise.
+
+## Value
+
+A {{domxref("LockManager")}} object.
+
+## Examples
+
+```js
+document.requestStorageAccess({ locks: true }).then(
+  (handle) => {
+    console.log("locks access granted");
+    await handle.locks.request('foo', async lock => {
+        return "ok";
+    });
+  },
+  () => {
+    console.log("locks access denied");
+  },
+);
+```
+
+> **Note:** See [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using) for a more complete example.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{domxref("Document.requestStorageAccess()")}}
+- [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using)
diff --git a/files/en-us/web/api/storageaccesshandle/sessionstorage/index.md b/files/en-us/web/api/storageaccesshandle/sessionstorage/index.md
new file mode 100644
index 000000000000000..cd9a1d3ecb8b46c
--- /dev/null
+++ b/files/en-us/web/api/storageaccesshandle/sessionstorage/index.md
@@ -0,0 +1,44 @@
+---
+title: "StorageAccessHandle: sessionStorage property"
+short-title: sessionStorage
+slug: Web/API/StorageAccessHandle/sessionStorage
+page-type: web-api-instance-property
+browser-compat: api.StorageAccessHandle.sessionStorage
+---
+
+{{APIRef("Storage Access API")}}
+
+The **`sessionStorage`** property of the {{domxref("StorageAccessHandle")}} interface returns an unpartitioned session {{domxref("Storage")}} object if access was granted, and throws a `SecurityError` {{DOMxRef("DOMException")}} otherwise.
+
+## Value
+
+A {{domxref("Storage")}} object.
+
+## Examples
+
+```js
+document.requestStorageAccess({ sessionStorage: true }).then(
+  (handle) => {
+    console.log("sessionStorage access granted");
+    handle.sessionStorage.setItem("foo", "bar");
+  },
+  () => {
+    console.log("sessionStorage access denied");
+  },
+);
+```
+
+> **Note:** See [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using) for a more complete example.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{domxref("Document.requestStorageAccess()")}}
+- [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using)

From 70603c5d0298ddfaa22d0d195cfbdc4be6513309 Mon Sep 17 00:00:00 2001
From: Ari Chivukula <ari.c@icloud.com>
Date: Fri, 3 May 2024 13:44:05 +0000
Subject: [PATCH 12/16] fix

---
 .../createobjecturl/index.md                  | 61 +++++++++++++++++++
 .../api/storageaccesshandle/estimate/index.md | 59 ++++++++++++++++++
 .../storageaccesshandle/getdirectory/index.md | 59 ++++++++++++++++++
 .../revokeobjecturl/index.md                  | 60 ++++++++++++++++++
 4 files changed, 239 insertions(+)
 create mode 100644 files/en-us/web/api/storageaccesshandle/createobjecturl/index.md
 create mode 100644 files/en-us/web/api/storageaccesshandle/estimate/index.md
 create mode 100644 files/en-us/web/api/storageaccesshandle/getdirectory/index.md
 create mode 100644 files/en-us/web/api/storageaccesshandle/revokeobjecturl/index.md

diff --git a/files/en-us/web/api/storageaccesshandle/createobjecturl/index.md b/files/en-us/web/api/storageaccesshandle/createobjecturl/index.md
new file mode 100644
index 000000000000000..9a007a8bf819645
--- /dev/null
+++ b/files/en-us/web/api/storageaccesshandle/createobjecturl/index.md
@@ -0,0 +1,61 @@
+---
+title: "StorageAccessHandle: createObjectURL() property"
+short-title: createObjectURL()
+slug: Web/API/StorageAccessHandle/createObjectURL
+page-type: web-api-instance-method
+browser-compat: api.StorageAccessHandle.createObjectURL
+---
+
+{{APIRef("Storage Access API")}}
+
+> **Note:** See {{domxref("URL.createObjectURL_static", "createObjectURL()")}} to understand usage.
+
+## Syntax
+
+```js-nolint
+createObjectURL(object)
+```
+
+### Parameters
+
+- `object`
+  - : A {{domxref("File")}}, {{domxref("Blob")}}, or {{domxref("MediaSource")}} object to
+    create an object URL for.
+
+### Return value
+
+A string containing an unpartitioned object URL that can be used to reference the contents of the specified source `object`.
+
+### Exceptions
+
+- `SecurityError` {{domxref("DomException")}}
+  - : Thrown if access was not granted.
+
+## Examples
+
+```js
+document.requestStorageAccess({ createObjectURL: true }).then(
+  (handle) => {
+    console.log("createObjectURL access granted");
+    handle.createObjectURL(new Blob(["foo"]));
+  },
+  () => {
+    console.log("createObjectURL access denied");
+  },
+);
+```
+
+> **Note:** See [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using) for a more complete example.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{domxref("Document.requestStorageAccess()")}}
+- [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using)
diff --git a/files/en-us/web/api/storageaccesshandle/estimate/index.md b/files/en-us/web/api/storageaccesshandle/estimate/index.md
new file mode 100644
index 000000000000000..fbcb35bd0f4203e
--- /dev/null
+++ b/files/en-us/web/api/storageaccesshandle/estimate/index.md
@@ -0,0 +1,59 @@
+---
+title: "StorageAccessHandle: estimate() property"
+short-title: estimate()
+slug: Web/API/StorageAccessHandle/estimate
+page-type: web-api-instance-method
+browser-compat: api.StorageAccessHandle.estimate
+---
+
+{{APIRef("Storage Access API")}}
+
+> **Note:** See {{domxref("StorageManager.estimate()")}} to understand usage.
+
+## Syntax
+
+```js-nolint
+estimate()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+A {{jsxref("Promise")}} that fufills with an unpartitioned {{domxref("StorageEstimate")}} object.
+
+### Exceptions
+
+- `SecurityError` {{domxref("DomException")}}
+  - : Thrown if access was not granted.
+
+## Examples
+
+```js
+document.requestStorageAccess({ estimate: true }).then(
+  (handle) => {
+    console.log("estimate access granted");
+    await handle.estimate();
+  },
+  () => {
+    console.log("estimate access denied");
+  },
+);
+```
+
+> **Note:** See [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using) for a more complete example.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{domxref("Document.requestStorageAccess()")}}
+- [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using)
diff --git a/files/en-us/web/api/storageaccesshandle/getdirectory/index.md b/files/en-us/web/api/storageaccesshandle/getdirectory/index.md
new file mode 100644
index 000000000000000..fcfdad7d945bb73
--- /dev/null
+++ b/files/en-us/web/api/storageaccesshandle/getdirectory/index.md
@@ -0,0 +1,59 @@
+---
+title: "StorageAccessHandle: getDirectory() property"
+short-title: getDirectory()
+slug: Web/API/StorageAccessHandle/getDirectory
+page-type: web-api-instance-method
+browser-compat: api.StorageAccessHandle.getDirectory
+---
+
+{{APIRef("Storage Access API")}}
+
+> **Note:** See {{domxref("StorageManager.getDirectory()")}} to understand usage.
+
+## Syntax
+
+```js-nolint
+getDirectory()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+A {{jsxref("Promise")}} that fufills with an unpartitioned {{domxref("FileSystemDirectoryHandle")}} object.
+
+### Exceptions
+
+- `SecurityError` {{domxref("DomException")}}
+  - : Thrown if access was not granted.
+
+## Examples
+
+```js
+document.requestStorageAccess({ getDirectory: true }).then(
+  (handle) => {
+    console.log("getDirectory access granted");
+    await handle.getDirectory();
+  },
+  () => {
+    console.log("getDirectory access denied");
+  },
+);
+```
+
+> **Note:** See [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using) for a more complete example.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{domxref("Document.requestStorageAccess()")}}
+- [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using)
diff --git a/files/en-us/web/api/storageaccesshandle/revokeobjecturl/index.md b/files/en-us/web/api/storageaccesshandle/revokeobjecturl/index.md
new file mode 100644
index 000000000000000..2bff19cdcf5c2be
--- /dev/null
+++ b/files/en-us/web/api/storageaccesshandle/revokeobjecturl/index.md
@@ -0,0 +1,60 @@
+---
+title: "StorageAccessHandle: revokeObjectURL() property"
+short-title: revokeObjectURL()
+slug: Web/API/StorageAccessHandle/revokeObjectURL
+page-type: web-api-instance-method
+browser-compat: api.StorageAccessHandle.revokeObjectURL
+---
+
+{{APIRef("Storage Access API")}}
+
+> **Note:** See {{domxref("URL.revokeObjectURL_static", "revokeObjectURL()")}} to understand usage.
+
+## Syntax
+
+```js-nolint
+revokeObjectURL(objectURL)
+```
+
+### Parameters
+
+- `objectURL`
+  - : A string representing an object URL that was previously created by calling {{domxref("StorageAccessHandle.createObjectURL()")}}.
+
+### Return value
+
+None ({{jsxref("undefined")}}).
+
+### Exceptions
+
+- `SecurityError` {{domxref("DomException")}}
+  - : Thrown if access was not granted.
+
+## Examples
+
+```js
+document.requestStorageAccess({ revokeObjectURL: true }).then(
+  (handle) => {
+    console.log("revokeObjectURL access granted");
+    handle.revokeObjectURL(blob_url);
+  },
+  () => {
+    console.log("revokeObjectURL access denied");
+  },
+);
+```
+
+> **Note:** See [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using) for a more complete example.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{domxref("Document.requestStorageAccess()")}}
+- [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using)

From cb6d39c11d80e859618fe1a1edd903fbfad9398c Mon Sep 17 00:00:00 2001
From: Ari Chivukula <ari.c@icloud.com>
Date: Fri, 3 May 2024 13:56:26 +0000
Subject: [PATCH 13/16] fix

---
 .../broadcastchannel/index.md                 | 61 ++++++++++++++++
 .../createobjecturl/index.md                  |  6 +-
 .../api/storageaccesshandle/estimate/index.md |  3 +-
 .../storageaccesshandle/getdirectory/index.md |  3 +-
 .../revokeobjecturl/index.md                  |  5 +-
 .../storageaccesshandle/sharedworker/index.md | 69 +++++++++++++++++++
 6 files changed, 140 insertions(+), 7 deletions(-)
 create mode 100644 files/en-us/web/api/storageaccesshandle/broadcastchannel/index.md
 create mode 100644 files/en-us/web/api/storageaccesshandle/sharedworker/index.md

diff --git a/files/en-us/web/api/storageaccesshandle/broadcastchannel/index.md b/files/en-us/web/api/storageaccesshandle/broadcastchannel/index.md
new file mode 100644
index 000000000000000..1d45ba3a89a41df
--- /dev/null
+++ b/files/en-us/web/api/storageaccesshandle/broadcastchannel/index.md
@@ -0,0 +1,61 @@
+---
+title: "StorageAccessHandle: BroadcastChannel() property"
+short-title: BroadcastChannel()
+slug: Web/API/StorageAccessHandle/BroadcastChannel
+page-type: web-api-instance-method
+browser-compat: api.StorageAccessHandle.BroadcastChannel
+---
+
+{{APIRef("Storage Access API")}}
+
+> **Note:** See {{domxref("BroadcastChannel.BroadcastChannel", "BroadcastChannel()")}} to understand usage.
+
+## Syntax
+
+```js-nolint
+handle.BroadcastChannel(channelName)
+```
+
+### Parameters
+
+- `channelName`
+  - : See {{domxref("BroadcastChannel.BroadcastChannel", "BroadcastChannel()")}}.
+
+### Return value
+
+An unpartitioned {{domxref("BroadcastChannel")}} object.
+
+### Exceptions
+
+- `SecurityError` {{domxref("DomException")}}
+  - : Thrown if access was not granted.
+- See {{domxref("BroadcastChannel.BroadcastChannel", "BroadcastChannel()")}}
+
+## Examples
+
+```js
+document.requestStorageAccess({ BroadcastChannel: true }).then(
+  (handle) => {
+    console.log("BroadcastChannel access granted");
+    handle.BroadcastChannel(channel_name);
+  },
+  () => {
+    console.log("BroadcastChannel access denied");
+  },
+);
+```
+
+> **Note:** See [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using) for a more complete example.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{domxref("Document.requestStorageAccess()")}}
+- [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using)
diff --git a/files/en-us/web/api/storageaccesshandle/createobjecturl/index.md b/files/en-us/web/api/storageaccesshandle/createobjecturl/index.md
index 9a007a8bf819645..5f1de2de601a551 100644
--- a/files/en-us/web/api/storageaccesshandle/createobjecturl/index.md
+++ b/files/en-us/web/api/storageaccesshandle/createobjecturl/index.md
@@ -13,14 +13,13 @@ browser-compat: api.StorageAccessHandle.createObjectURL
 ## Syntax
 
 ```js-nolint
-createObjectURL(object)
+handle.createObjectURL(object)
 ```
 
 ### Parameters
 
 - `object`
-  - : A {{domxref("File")}}, {{domxref("Blob")}}, or {{domxref("MediaSource")}} object to
-    create an object URL for.
+  - : See {{domxref("URL.createObjectURL_static", "createObjectURL()")}}.
 
 ### Return value
 
@@ -30,6 +29,7 @@ A string containing an unpartitioned object URL that can be used to reference th
 
 - `SecurityError` {{domxref("DomException")}}
   - : Thrown if access was not granted.
+- See {{domxref("URL.createObjectURL_static", "createObjectURL()")}}
 
 ## Examples
 
diff --git a/files/en-us/web/api/storageaccesshandle/estimate/index.md b/files/en-us/web/api/storageaccesshandle/estimate/index.md
index fbcb35bd0f4203e..c41689e0cf1d82b 100644
--- a/files/en-us/web/api/storageaccesshandle/estimate/index.md
+++ b/files/en-us/web/api/storageaccesshandle/estimate/index.md
@@ -13,7 +13,7 @@ browser-compat: api.StorageAccessHandle.estimate
 ## Syntax
 
 ```js-nolint
-estimate()
+handle.estimate()
 ```
 
 ### Parameters
@@ -28,6 +28,7 @@ A {{jsxref("Promise")}} that fufills with an unpartitioned {{domxref("StorageEst
 
 - `SecurityError` {{domxref("DomException")}}
   - : Thrown if access was not granted.
+- See {{domxref("StorageManager.estimate()")}}
 
 ## Examples
 
diff --git a/files/en-us/web/api/storageaccesshandle/getdirectory/index.md b/files/en-us/web/api/storageaccesshandle/getdirectory/index.md
index fcfdad7d945bb73..2be8828de1576f4 100644
--- a/files/en-us/web/api/storageaccesshandle/getdirectory/index.md
+++ b/files/en-us/web/api/storageaccesshandle/getdirectory/index.md
@@ -13,7 +13,7 @@ browser-compat: api.StorageAccessHandle.getDirectory
 ## Syntax
 
 ```js-nolint
-getDirectory()
+handle.getDirectory()
 ```
 
 ### Parameters
@@ -28,6 +28,7 @@ A {{jsxref("Promise")}} that fufills with an unpartitioned {{domxref("FileSystem
 
 - `SecurityError` {{domxref("DomException")}}
   - : Thrown if access was not granted.
+- See {{domxref("StorageManager.getDirectory()")}}
 
 ## Examples
 
diff --git a/files/en-us/web/api/storageaccesshandle/revokeobjecturl/index.md b/files/en-us/web/api/storageaccesshandle/revokeobjecturl/index.md
index 2bff19cdcf5c2be..0cd90936179e4a6 100644
--- a/files/en-us/web/api/storageaccesshandle/revokeobjecturl/index.md
+++ b/files/en-us/web/api/storageaccesshandle/revokeobjecturl/index.md
@@ -13,13 +13,13 @@ browser-compat: api.StorageAccessHandle.revokeObjectURL
 ## Syntax
 
 ```js-nolint
-revokeObjectURL(objectURL)
+handle.revokeObjectURL(objectURL)
 ```
 
 ### Parameters
 
 - `objectURL`
-  - : A string representing an object URL that was previously created by calling {{domxref("StorageAccessHandle.createObjectURL()")}}.
+  - : See {{domxref("URL.revokeObjectURL_static", "revokeObjectURL()")}}.
 
 ### Return value
 
@@ -29,6 +29,7 @@ None ({{jsxref("undefined")}}).
 
 - `SecurityError` {{domxref("DomException")}}
   - : Thrown if access was not granted.
+- See {{domxref("URL.revokeObjectURL_static", "revokeObjectURL()")}}
 
 ## Examples
 
diff --git a/files/en-us/web/api/storageaccesshandle/sharedworker/index.md b/files/en-us/web/api/storageaccesshandle/sharedworker/index.md
new file mode 100644
index 000000000000000..6406571a6f5922c
--- /dev/null
+++ b/files/en-us/web/api/storageaccesshandle/sharedworker/index.md
@@ -0,0 +1,69 @@
+---
+title: "StorageAccessHandle: SharedWorker() property"
+short-title: SharedWorker()
+slug: Web/API/StorageAccessHandle/SharedWorker
+page-type: web-api-instance-method
+browser-compat: api.StorageAccessHandle.SharedWorker
+---
+
+{{APIRef("Storage Access API")}}
+
+> **Note:** See {{domxref("SharedWorker.SharedWorker", "SharedWorker()")}} to understand usage.
+
+## Syntax
+
+```js-nolint
+handle.SharedWorker(aURL)
+handle.SharedWorker(aURL, name)
+handle.SharedWorker(aURL, options)
+```
+
+### Parameters
+
+- `aURL`
+  - : See {{domxref("SharedWorker.SharedWorker", "SharedWorker()")}}.
+- `name` {{optional_inline}}
+  - : See {{domxref("SharedWorker.SharedWorker", "SharedWorker()")}}.
+- `options` {{optional_inline}}
+  - : See {{domxref("SharedWorker.SharedWorker", "SharedWorker()")}}.
+
+> **Note:** `options.sameSiteCookies` only supports the value "none", which is the default.
+
+### Return value
+
+An unpartitioned {{domxref("SharedWorker")}} object.
+
+### Exceptions
+
+- `SecurityError` {{domxref("DomException")}}
+  - : Thrown if access was not granted.
+- See {{domxref("SharedWorker.SharedWorker", "SharedWorker()")}}
+
+## Examples
+
+```js
+document.requestStorageAccess({ SharedWorker: true }).then(
+  (handle) => {
+    console.log("SharedWorker access granted");
+    handle.SharedWorker(shared_worker_url);
+  },
+  () => {
+    console.log("SharedWorker access denied");
+  },
+);
+```
+
+> **Note:** See [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using) for a more complete example.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{domxref("Document.requestStorageAccess()")}}
+- [Using the Storage Access API](/en-US/docs/Web/API/Storage_Access_API/Using)

From 6d374cffd6014d7381cc2e55fb8bae731be3f3a7 Mon Sep 17 00:00:00 2001
From: Ari Chivukula <ari.c@icloud.com>
Date: Sun, 5 May 2024 17:47:45 +0000
Subject: [PATCH 14/16] fix

---
 yarn.lock | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/yarn.lock b/yarn.lock
index db5580146ce5d24..18b02550a4288a1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -766,9 +766,9 @@
   integrity sha512-IHkkypEjlIkBkx4mJ2//Xbzog9M/Lzne1Sl8db2cIHJ/5pe3NCqSLwSchmqzcUN+/WJr/U+V3tNAbWunk2xZcA==
 
 "@mdn/browser-compat-data@^5.5.23":
-  version "5.5.24"
-  resolved "https://registry.yarnpkg.com/@mdn/browser-compat-data/-/browser-compat-data-5.5.24.tgz#b66ffc3c114f37a476c1f0c44d0e31a5305070ea"
-  integrity sha512-8z/7mkez6xKhbUtmwVRrSuZ28wv3VpOWVvA8ykdovbC5kFyxlJ2QWsfRjpe+f50tirdPC7hN7TZO5eZfTvUqhg==
+  version "5.5.25"
+  resolved "https://registry.yarnpkg.com/@mdn/browser-compat-data/-/browser-compat-data-5.5.25.tgz#80b86ce0211d16ac6b7de92b1d8bbeb3306d2432"
+  integrity sha512-0AobSA9fCuAoJnBSIIWWpoAEuyWC3gCG5u2TshSDHzMOAO4/ef2Lv6Qma+u/wMnH3oPP3tOWsNeZMbazgkiuDg==
 
 "@mdn/yari@2.50.0":
   version "2.50.0"

From 641eacc2435740040d56817952c81b56f8fb80ec Mon Sep 17 00:00:00 2001
From: Ari Chivukula <ari.c@icloud.com>
Date: Sun, 5 May 2024 18:17:18 +0000
Subject: [PATCH 15/16] fix

---
 files/en-us/web/api/storageaccesshandle/estimate/index.md | 2 +-
 files/en-us/web/api/storageaccesshandle/index.md          | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/files/en-us/web/api/storageaccesshandle/estimate/index.md b/files/en-us/web/api/storageaccesshandle/estimate/index.md
index c41689e0cf1d82b..002f8546f42882c 100644
--- a/files/en-us/web/api/storageaccesshandle/estimate/index.md
+++ b/files/en-us/web/api/storageaccesshandle/estimate/index.md
@@ -22,7 +22,7 @@ None.
 
 ### Return value
 
-A {{jsxref("Promise")}} that fufills with an unpartitioned {{domxref("StorageEstimate")}} object.
+A {{jsxref("Promise")}} that fufills with an unpartitioned {{domxref("StorageManager.estimate()", "StorageEstimate")}} object.
 
 ### Exceptions
 
diff --git a/files/en-us/web/api/storageaccesshandle/index.md b/files/en-us/web/api/storageaccesshandle/index.md
index 18478a00159f61e..f44599e87399ddf 100644
--- a/files/en-us/web/api/storageaccesshandle/index.md
+++ b/files/en-us/web/api/storageaccesshandle/index.md
@@ -27,7 +27,7 @@ The **`StorageAccessHandle`** interface represents access to [unpartitioned stat
 - {{domxref("StorageAccessHandle.getDirectory()")}}
   - : Returns a {{jsxref("Promise")}} that fufills with an unpartitioned {{domxref("FileSystemDirectoryHandle")}} object if access was granted, and rejects otherwise.
 - {{domxref("StorageAccessHandle.estimate()")}}
-  - : Returns a {{jsxref("Promise")}} that fufills with an unpartitioned {{domxref("StorageEstimate")}} object if access was granted, and rejects otherwise.
+  - : Returns a {{jsxref("Promise")}} that fufills with an unpartitioned {{domxref("StorageManager.estimate()", "StorageEstimate")}} object if access was granted, and rejects otherwise.
 - {{domxref("StorageAccessHandle.createObjectURL()")}}
   - : Returns a string representing the unpartitioned blob storage url created if access was granted, and throws otherwise.
 - {{domxref("StorageAccessHandle.revokeObjectURL()")}}

From c08b7ab6d5a99c0589fd962f6740744261a5e7e0 Mon Sep 17 00:00:00 2001
From: Ari Chivukula <ari.c@icloud.com>
Date: Tue, 21 May 2024 12:18:37 -0400
Subject: [PATCH 16/16] Update index.md

Co-authored-by: Vadim Makeev <hi@pepelsbey.dev>
---
 .../api/document/requeststorageaccess/index.md  | 17 ++---------------
 1 file changed, 2 insertions(+), 15 deletions(-)

diff --git a/files/en-us/web/api/document/requeststorageaccess/index.md b/files/en-us/web/api/document/requeststorageaccess/index.md
index ab03784bd735a31..b0febd271d82d37 100644
--- a/files/en-us/web/api/document/requeststorageaccess/index.md
+++ b/files/en-us/web/api/document/requeststorageaccess/index.md
@@ -25,47 +25,34 @@ requestStorageAccess(types)
 
 - `types` {{optional_inline}}
 
-  - : An object containing properties that control what unpartitioned state is made accessible. Available properties are as follows:
+  - : An object containing properties that control what unpartitioned state is made accessible. If not specified, the default value of the property is `false`. Available properties are as follows:
 
     - `all`
-      - : A boolean specifying all possible unpartitioned state should be made accessible.
-        If not specified the default is `false`.
+      - : A boolean specifying all possible unpartitioned states should be made accessible.
     - `cookies`
       - : A boolean specifying third-party cookies should be made accessible.
-        If not specified the default is `false`.
     - `sessionStorage`
       - : A boolean specifying {{domxref("StorageAccessHandle.sessionStorage")}} should be made accessible.
-        If not specified the default is `false`.
     - `localStorage`
       - : A boolean specifying {{domxref("StorageAccessHandle.localStorage")}} should be made accessible.
-        If not specified the default is `false`.
     - `indexedDB`
       - : A boolean specifying {{domxref("StorageAccessHandle.indexedDB")}} should be made accessible.
-        If not specified the default is `false`.
     - `locks`
       - : A boolean specifying {{domxref("StorageAccessHandle.locks")}} should be made accessible.
-        If not specified the default is `false`.
     - `caches`
       - : A boolean specifying {{domxref("StorageAccessHandle.caches")}} should be made accessible.
-        If not specified the default is `false`.
     - `getDirectory`
       - : A boolean specifying {{domxref("StorageAccessHandle.getDirectory()")}} should be made accessible.
-        If not specified the default is `false`.
     - `estimate`
       - : A boolean specifying {{domxref("StorageAccessHandle.estimate()")}} should be made accessible.
-        If not specified the default is `false`.
     - `createObjectURL`
       - : A boolean specifying {{domxref("StorageAccessHandle.createObjectURL()")}} should be made accessible.
-        If not specified the default is `false`.
     - `revokeObjectURL`
       - : A boolean specifying {{domxref("StorageAccessHandle.revokeObjectURL()")}} should be made accessible.
-        If not specified the default is `false`.
     - `BroadcastChannel`
       - : A boolean specifying {{domxref("StorageAccessHandle.BroadcastChannel()")}} should be made accessible.
-        If not specified the default is `false`.
     - `SharedWorker`
       - : A boolean specifying {{domxref("StorageAccessHandle.SharedWorker()")}} should be made accessible.
-        If not specified the default is `false`.
 
 ### Return value