Noting this here for future discoverability: one of the APIs that was
launched as part of this was a new name for hasStorageAccess
<https://developer.mozilla.org/en-US/docs/Web/API/Document/hasStorageAccess>
: hasUnpartitionedCookieAccess
<https://developer.mozilla.org/en-US/docs/Web/API/Document/hasUnpartitionedCookieAccess>.
This was documented in the linked explainer
<https://github.com/privacycg/saa-non-cookie-storage/blob/main/omit-unpartitioned-cookies.md>
and spec
<https://privacycg.github.io/saa-non-cookie-storage/#dom-document-hasunpartitionedcookieaccess>,
but failed to make the text of the I2E/S as it probably should have.

This was included to make the meaning of the boolean returned by the
function clearer, as hasStorageAccess
<https://developer.mozilla.org/en-US/docs/Web/API/Document/hasStorageAccess>
does
*not* indicate if access to non-cookie storage via requestStorageAccess
<https://developer.mozilla.org/en-US/docs/Web/API/Document/requestStorageAccess>
was
granted, it *only* indicates if unpartitioned cookies are available in the
given context (which may have been granted via a requestStorageAccess
<https://developer.mozilla.org/en-US/docs/Web/API/Document/requestStorageAccess>
 call).

hasUnpartitionedCookieAccess
<https://developer.mozilla.org/en-US/docs/Web/API/Document/hasUnpartitionedCookieAccess>
is
effectively an alias for hasStorageAccess
<https://developer.mozilla.org/en-US/docs/Web/API/Document/hasStorageAccess>,
and there are no plans to remove hasStorageAccess
<https://developer.mozilla.org/en-US/docs/Web/API/Document/hasStorageAccess> as
far as I'm aware.

For example:
// In a cross-site iframe with third-party cookies disabled
let access1 = await document.hasStorageAccess();
let access2 = await document.hasUnpartitionedCookieAccess();
// access1 equals access2 equals false.

// Request access only to unpartitioned localStorage
let handle = await document.requestStorageAccess({localStorage: true});
access1 = await document.hasStorageAccess();
access2 = await document.hasUnpartitionedCookieAccess();
// access1 equals access2 equals false.

// Request access to unpartitioned cookies as well
await document.requestStorageAccess();
// the above is similar to calling requestStorageAccess({cookies: true})
access1 = await document.hasStorageAccess();
access2 = await document.hasUnpartitionedCookieAccess();
// access1 equals access2 equals true.

~ Ari Chivukula (Their/There/They're)


On Wed, Apr 3, 2024 at 11:57 AM Rick Byers <rby...@chromium.org> wrote:

> LGTM3
>
> On Wed, Apr 3, 2024 at 11:30 AM Daniel Bratell <bratel...@gmail.com>
> wrote:
>
>> LGTM2
>>
>> /Daniel
>> On 2024-03-20 16:14, Yoav Weiss (@Shopify) wrote:
>>
>> LGTM1
>>
>> The signals from other vendors and the CG discussion seem encouraging and
>> I agree that the future risk from an "all" value is probably outweighed by
>> its developer-facing benefits.
>>
>> On Wed, Mar 20, 2024 at 12:56 PM Ari Chivukula <aric...@chromium.org>
>> wrote:
>>
>>> I'd guess that, in the future, the semantics around 'all' may change in
>>> one of two ways:
>>>
>>> (A) If storage methods included are deprecated, (1) we would start
>>> warning developers via a DevTools issue when they use 'all', (2) we would
>>> start requiring the deprecated method was specifically included in the call
>>> to rSA rather than it being automatically included in all, (3) the storage
>>> method would be removed from rSA. The timeline for this would likely be
>>> rather long (alongside the timeline for the deprecation of the storage
>>> method itself).
>>>
>>> (B) If a new storage method were proposed, (1) we would allow developers
>>> to use it if explicitly included in rSA (but not add it via all) and then
>>> (2) add it under 'all' once it had fully launched.
>>>
>>> The chances of a new storage method being added we (1) do want in rSA
>>> but (2) wouldn't ever want under 'all' is low I think. All of the
>>> storage/communication mechanisms besides local/session storage either have
>>> async APIs or don't expose events to monitor changes that would require
>>> full loading of data simply because the handle/constructor was made
>>> available. I agree there is a potential for a footgun here, but given the
>>> direction these APIs seem to be heading I don't think the risk is high.
>>> What are the chances vendors decide to add new storage mechanisms that are
>>> loaded at document initialization with all data synchronously available?
>>>
>>> ~ Ari Chivukula (Their/There/They're)
>>>
>>>
>>> On Wed, Mar 20, 2024 at 7:48 AM Yoav Weiss (@Shopify) <
>>> yoavwe...@chromium.org> wrote:
>>>
>>>>
>>>>
>>>> On Wed, Mar 20, 2024 at 12:40 PM Ari Chivukula <aric...@chromium.org>
>>>> wrote:
>>>>
>>>>> I think the last place it came up was in this thread:
>>>>> https://github.com/mozilla/standards-positions/issues/898#issuecomment-1745688352
>>>>>
>>>>> I think it came up at TPAC, but I might me missing the right line:
>>>>> https://github.com/privacycg/meetings/blob/a27d3ee4c596efb5aec7d16feda2708fbd60eacf/2023/tpac/minutes.md?plain=1#L302
>>>>>
>>>>> Either way, there hasn't been further concern raised recently so we
>>>>> moved forward with 'all' since the function is async (the delay from
>>>>> loading local/session storage isn't high, and it was often already loaded
>>>>> given the requirement to have interacted with the iframe's site in a
>>>>> top-level context in the past).
>>>>>
>>>>
>>>> The only concern I may have on the "all" front is related to changing
>>>> semantics. How likely are we to add future storage mechanisms that users
>>>> would not want to expose along with current ones?
>>>>
>>>>
>>>>>
>>>>> ~ Ari Chivukula (Their/There/They're)
>>>>>
>>>>>
>>>>> On Wed, Mar 20, 2024 at 7:29 AM Yoav Weiss (@Shopify) <
>>>>> yoavwe...@chromium.org> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>> On Thursday, March 14, 2024 at 2:27:20 PM UTC+1 Ari Chivukula wrote:
>>>>>>
>>>>>> Contact emails
>>>>>>
>>>>>> aric...@chromium.org, wanderv...@chromium.org, johann...@chromium.org,
>>>>>> rosh...@google.com
>>>>>>
>>>>>> Specification
>>>>>>
>>>>>> https://privacycg.github.io/saa-non-cookie-storage/
>>>>>>
>>>>>> Design Doc
>>>>>>
>>>>>> https://docs.google.com/document/d/19qCGb4qwOcGiNrQM3ptWvRmB4Jtpa
>>>>>> TFgFVlWLXNOQ6c/edit
>>>>>>
>>>>>> Feedback
>>>>>>
>>>>>> https://github.com/privacycg/saa-non-cookie-storage/issues
>>>>>>
>>>>>>
>>>>>> Intent to Prototype
>>>>>>
>>>>>> https://groups.google.com/a/chromium.org/g/blink-dev/c/inRN8tI49O0
>>>>>>
>>>>>> Intent to Experiment
>>>>>>
>>>>>> https://groups.google.com/a/chromium.org/g/blink-dev/c/SEL7N-xIE5s
>>>>>>
>>>>>> https://groups.google.com/a/chromium.org/g/blink-dev/c/AjH7tGxuVuw
>>>>>>
>>>>>> Summary
>>>>>>
>>>>>> This launches the proposed extension of the Storage Access API
>>>>>> <https://webkit.org/blog/8124/introducing-storage-access-api/>
>>>>>> (backwards compatible and currently in OT) to allow access to 
>>>>>> unpartitioned
>>>>>> cookie and non-cookie storage in a third-party context. The current API
>>>>>> only provides access to cookies, which have different use-cases than
>>>>>> non-cookie storage (discussed more in the Motivation section). The API 
>>>>>> can
>>>>>> be used as follows (JS running in an embedded iframe):
>>>>>>
>>>>>>
>>>>>> // Request a new storage handle via rSA (this may prompt the user)
>>>>>>
>>>>>> let handle = await document.requestStorageAccess({all: true});
>>>>>>
>>>>>> // Write some 1P context sessionstorage
>>>>>>
>>>>>> handle.sessionStorage.setItem("userid", "1234");
>>>>>>
>>>>>> // Write some 1P context localstorage
>>>>>>
>>>>>> handle.localStorage.setItem("preference", "A");
>>>>>>
>>>>>> // Open or create an indexedDB that is shared with the 1P context
>>>>>>
>>>>>> let messageDB = handle.indexedDB.open("messages");
>>>>>>
>>>>>> // Use locks shared with the 1P context
>>>>>>
>>>>>> await handle.locks.request(“example”, …);
>>>>>>
>>>>>>
>>>>>> The same flow would be used by iframes to get a storage handle when
>>>>>> their top-level ancestor successfully called requestStorageAccessFor
>>>>>> <https://github.com/privacycg/requestStorageAccessFor>, just that in
>>>>>> this case the storage-access permission was already granted and thus the
>>>>>> requestStorageAccess call would not require a user gesture or show a
>>>>>> prompt, allowing for “hidden” iframes accessing storage.
>>>>>>
>>>>>>
>>>>>> Beyond calling this additional extension, access to non-cookie
>>>>>> storage would match the current requirements for cookie access through 
>>>>>> the
>>>>>> Storage Access API.
>>>>>>
>>>>>>
>>>>>> DOM Storage (session and local storage), Indexed DB, Web Locks, Cache
>>>>>> Storage, Origin Private File System, Quota, Blob Storage, Broadcast
>>>>>> Channel, and SharedWorkers will be available.
>>>>>>
>>>>>>
>>>>>> Blink component
>>>>>>
>>>>>> Blink>StorageAccessAPI
>>>>>> <https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink%3EStorageAccessAPI>
>>>>>>
>>>>>>
>>>>>> Motivation
>>>>>>
>>>>>> There has been increasing developer
>>>>>> <https://github.com/GoogleChromeLabs/privacy-sandbox-dev-support/issues/124>
>>>>>> and implementer
>>>>>> <https://github.com/privacycg/storage-access/issues/102> interest in
>>>>>> first-party DOM Storage
>>>>>> <https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API>
>>>>>> and Quota Managed Storage
>>>>>> <https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API>
>>>>>> being available in third-party contexts the same way that cookies
>>>>>> can be today <https://github.com/privacycg/storage-access>. In the
>>>>>> absence of such a solution, browsers would in effect be pushing 
>>>>>> developers
>>>>>> to migrate to cookies from other storage mechanisms. There are tradeoffs
>>>>>> between cookie and non-cookie storage (size, flexibility, server 
>>>>>> exposure,
>>>>>> network request size, etc.) that could impact user experience from a
>>>>>> privacy, security and performance perspective (e.g., cookies are included
>>>>>> in HTTP requests and not just available via JavaScript). To prevent
>>>>>> sub-optimal use of cookies and to preserve context, we propose a solution
>>>>>> for developers to regain 3p access to unpartitioned storage to avoid
>>>>>> user-facing breakage in browsers shipping storage partitioning.
>>>>>>
>>>>>> TAG review
>>>>>>
>>>>>> https://github.com/w3ctag/design-reviews/issues/906
>>>>>>
>>>>>> Compatibility
>>>>>>
>>>>>> The Storage Access API is already implemented in Safari, Firefox,
>>>>>> and Chrome
>>>>>> <https://caniuse.com/mdn-api_document_requeststorageaccess>, but the
>>>>>> proposed API shape would preserve existing behavior until the web 
>>>>>> developer
>>>>>> adds new arguments.
>>>>>>
>>>>>>
>>>>>> Interoperability
>>>>>>
>>>>>> Gecko: No Position Yet https://github.com/mozilla/
>>>>>> standards-positions/issues/898
>>>>>>
>>>>>>
>>>>>> Despite the lack of an official position, the discussion seems
>>>>>> encouraging. I sympathize with concerns around "all"'s semantics and 
>>>>>> their
>>>>>> future compat impact.
>>>>>> Was this point discussed in the CG or elsewhere?
>>>>>>
>>>>>>
>>>>>> WebKit: No Position Yet https://github.com/WebKit/
>>>>>> standards-positions/issues/262
>>>>>>
>>>>>> Web developers: Positive
>>>>>> <https://github.com/GoogleChromeLabs/privacy-sandbox-dev-support/issues/124>
>>>>>>
>>>>>> Debuggability
>>>>>>
>>>>>> Storage written can be examined in devtools.
>>>>>>
>>>>>> Is this feature fully tested by web-platform-tests?
>>>>>>
>>>>>> Yes
>>>>>> <https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/web_tests/external/wpt/storage-access-api/>
>>>>>>
>>>>>> Tracking bug
>>>>>>
>>>>>> https://issues.chromium.org/40282415
>>>>>>
>>>>>>
>>>>>> Link to entry on the Chrome Platform Status
>>>>>>
>>>>>> https://chromestatus.com/feature/5175585823522816
>>>>>>
>>>>>> --
>> You received this message because you are subscribed to the Google Groups
>> "blink-dev" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to blink-dev+unsubscr...@chromium.org.
>> To view this discussion on the web visit
>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAOmohSJvYhyvgmmBgXxH3rXoQtdMJ1_kk4PRqOrNc9Qq16HeEg%40mail.gmail.com
>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAOmohSJvYhyvgmmBgXxH3rXoQtdMJ1_kk4PRqOrNc9Qq16HeEg%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "blink-dev" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to blink-dev+unsubscr...@chromium.org.
>> To view this discussion on the web visit
>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/a640c694-e866-45dd-9268-55f2f992885a%40gmail.com
>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/a640c694-e866-45dd-9268-55f2f992885a%40gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to blink-dev+unsubscr...@chromium.org.
To view this discussion on the web visit 
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAGpy5DKqyuyK_79%3D%2B9YS-GA0KR_xY%3DWo50godCew4dPZqO69PQ%40mail.gmail.com.

Reply via email to