-
Notifications
You must be signed in to change notification settings - Fork 44
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Partition Blob URL revocation by Storage Key #201
base: main
Are you sure you want to change the base?
Conversation
Mind taking a look @mkruisselbrink? |
index.bs
Outdated
1. If |entry| is failure, return. | ||
1. Let |blobStorageKey| be the result of [=obtaining a storage key for non-storage purposes=] with |entry|'s [=environment settings object=]. | ||
1. Let |currentStorageKey| be the result of [=obtaining a storage key for non-storage purposes=] with the [=current settings object=]. | ||
1. If |blobStorageKey| is not [=storage key/equal=] to |currentStorageKey|, return. | ||
1. [=Remove an entry from the Blob URL Store=] for |url|. | ||
|
||
Note: This means that rather than throwing some kind of error, attempting to revoke a URL that isn't registered will silently fail. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Might make sense to mention that it's not just URLs that aren't registered that would silently fail, something like (although not sure that's the best way to phrase it):
Note: This means that rather than throwing some kind of error, attempting to revoke a URL that isn't registered will silently fail. | |
Note: This means that rather than throwing some kind of error, attempting to revoke a URL that isn't registered, or is registered from a different storage key, will silently fail. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good catch, I updated this (although made it a bit more verbose). WDYT?
I guess we need to update spec-prod (or wait for the update to be propagated?):
|
I think #204 will fix that. |
Per the feedback here [1], I've updated this PR to also change how the blob URL entry's object member is exposed so that the partitioning checks can be fully contained in the FileAPI. WDYT? |
[=map/Keys=] in the [=blob URL store=] (also known as <dfn lt="blob URL|object URL" export>blob URLs</dfn>) | ||
are [=valid URL strings=] that when [=URL parser|parsed=] | ||
result in a [=/URL=] with a [=url/scheme=] equal to "`blob`", | ||
an [=empty host=], and a [=url/path=] consisting of one element itself also a [=valid URL string=]. | ||
|
||
A <dfn export>blob URL entry</dfn> is used to store an object of type {{Blob}} or {{MediaSource}}. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looking at this. I would continue to give a blob URL entry an object field, but just no longer export it. And then explain in a note that specifications have to use "obtain a blob object" to get hold of the object.
To <dfn export id=blob-url-obtain-object>obtain a blob object</dfn> given a [=blob URL entry=] |blobUrlEntry|, an [=environment=] |environment|, and an optional boolean |isNavigation| (default false): | ||
|
||
1. Let |isAuthorized| be true. | ||
1. If |isNavigation| is false, let |isAuthorized| be the result of [=checking for same-partition blob URL usage=] with |blobUrlEntry| and |environment|. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you manipulate an initialized variable, you need to use "set ... to". See the Infra standard for more complete guidance.
@@ -1632,12 +1658,13 @@ The <dfn method for=URL id="dfn-revokeObjectURL">revokeObjectURL(|url|)</dfn> st | |||
|
|||
1. Let |url record| be the result of [=URL parser|parsing=] |url|. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe change this to urlRecord while here? Having these as separate words is confusing with the url variable.
1. Let |settings| be the [=current settings object=]. | ||
1. If |origin| is not [=same origin=] with |settings|'s [=environment settings object/origin=], return. | ||
1. Let |entry| be |url record|'s [=blob URL entry=]. | ||
1. If |entry| is null, return. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
then return*
1. Let |entry| be |url record|'s [=blob URL entry=]. | ||
1. If |entry| is null, return. | ||
1. Let |isAuthorized| be the result of [=checking for same-partition blob URL usage=] with |entry| and the [=current settings object=]. | ||
1. If |isAuthorized| is false, return. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
then return*
Part of the changes discussed in #153 (comment)
This updates URL.revokeObjectURL to not allow revoking a Blob URL except from contexts with the same Storage Key as the one in which the Blob URL was created. A corresponding PR will update the Fetch spec to incorporate similar Storage Key checks into Blob URL fetches.
I considered incorporating the Storage Key checks into the "resolve a blob URL" algorithm instead, but it seemed that this would require an environment settings object to be available as part of https://url.spec.whatwg.org/#url-parsing, and I'm not sure whether that is the case / a change we want.
For normative changes, the following tasks have been completed:
Implementation commitment:
Preview | Diff