Commit 6d0cfac5 authored by Marijn Kruisselbrink's avatar Marijn Kruisselbrink Committed by Commit Bot

[FS] Add explicit origin to NFSTransferTokenImpl.

Rather than extracting the origin a token is associated with from its
FileSystemURL, store the URL separately. This lets us use FileSystemURLs
that don't have an origin (or in the future move away from FileSystemURL
entirely).

Other classes that have a FileSystemURL and are associated with an
origin (i.e. NFSHandleBase) already stored the origin separately, this
just bring TransferToken in line with those.

Bug: 1093653
Change-Id: I26aeabce7bf35ad74e6beb3ffcb49d50b33d034a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2391179
Commit-Queue: Marijn Kruisselbrink <mek@chromium.org>
Commit-Queue: Victor Costan <pwnall@chromium.org>
Auto-Submit: Marijn Kruisselbrink <mek@chromium.org>
Reviewed-by: default avatarVictor Costan <pwnall@chromium.org>
Cr-Commit-Position: refs/heads/master@{#804031}
parent b30b336f
...@@ -52,6 +52,7 @@ class CONTENT_EXPORT NativeFileSystemHandleBase : public WebContentsObserver { ...@@ -52,6 +52,7 @@ class CONTENT_EXPORT NativeFileSystemHandleBase : public WebContentsObserver {
const storage::IsolatedContext::ScopedFSHandle& file_system() const { const storage::IsolatedContext::ScopedFSHandle& file_system() const {
return handle_state_.file_system; return handle_state_.file_system;
} }
const BindingContext& context() const { return context_; }
PermissionStatus GetReadPermissionStatus(); PermissionStatus GetReadPermissionStatus();
PermissionStatus GetWritePermissionStatus(); PermissionStatus GetWritePermissionStatus();
...@@ -80,7 +81,6 @@ class CONTENT_EXPORT NativeFileSystemHandleBase : public WebContentsObserver { ...@@ -80,7 +81,6 @@ class CONTENT_EXPORT NativeFileSystemHandleBase : public WebContentsObserver {
protected: protected:
NativeFileSystemManagerImpl* manager() { return manager_; } NativeFileSystemManagerImpl* manager() { return manager_; }
const BindingContext& context() { return context_; }
storage::FileSystemContext* file_system_context() { storage::FileSystemContext* file_system_context() {
return manager()->context(); return manager()->context();
} }
......
...@@ -134,7 +134,7 @@ bool IsValidTransferToken(NativeFileSystemTransferTokenImpl* token, ...@@ -134,7 +134,7 @@ bool IsValidTransferToken(NativeFileSystemTransferTokenImpl* token,
return false; return false;
} }
if (token->url().origin() != expected_origin) { if (token->origin() != expected_origin) {
return false; return false;
} }
...@@ -514,7 +514,8 @@ void NativeFileSystemManagerImpl::DeserializeHandle( ...@@ -514,7 +514,8 @@ void NativeFileSystemManagerImpl::DeserializeHandle(
base::MakeRefCounted<FixedNativeFileSystemPermissionGrant>( base::MakeRefCounted<FixedNativeFileSystemPermissionGrant>(
PermissionStatus::GRANTED); PermissionStatus::GRANTED);
CreateTransferTokenImpl( CreateTransferTokenImpl(
url, SharedHandleState(permission_grant, permission_grant, {}), url, origin,
SharedHandleState(permission_grant, permission_grant, {}),
data.handle_type() == NativeFileSystemHandleData::kDirectory data.handle_type() == NativeFileSystemHandleData::kDirectory
? HandleType::kDirectory ? HandleType::kDirectory
: HandleType::kFile, : HandleType::kFile,
...@@ -545,7 +546,7 @@ void NativeFileSystemManagerImpl::DeserializeHandle( ...@@ -545,7 +546,7 @@ void NativeFileSystemManagerImpl::DeserializeHandle(
NativeFileSystemPermissionContext::UserAction::kLoadFromStorage); NativeFileSystemPermissionContext::UserAction::kLoadFromStorage);
CreateTransferTokenImpl( CreateTransferTokenImpl(
child, handle_state, child, origin, handle_state,
is_directory ? HandleType::kDirectory : HandleType::kFile, is_directory ? HandleType::kDirectory : HandleType::kFile,
std::move(token)); std::move(token));
break; break;
...@@ -653,15 +654,17 @@ void NativeFileSystemManagerImpl::CreateTransferToken( ...@@ -653,15 +654,17 @@ void NativeFileSystemManagerImpl::CreateTransferToken(
const NativeFileSystemFileHandleImpl& file, const NativeFileSystemFileHandleImpl& file,
mojo::PendingReceiver<blink::mojom::NativeFileSystemTransferToken> mojo::PendingReceiver<blink::mojom::NativeFileSystemTransferToken>
receiver) { receiver) {
return CreateTransferTokenImpl(file.url(), file.handle_state(), return CreateTransferTokenImpl(file.url(), file.context().origin,
HandleType::kFile, std::move(receiver)); file.handle_state(), HandleType::kFile,
std::move(receiver));
} }
void NativeFileSystemManagerImpl::CreateTransferToken( void NativeFileSystemManagerImpl::CreateTransferToken(
const NativeFileSystemDirectoryHandleImpl& directory, const NativeFileSystemDirectoryHandleImpl& directory,
mojo::PendingReceiver<blink::mojom::NativeFileSystemTransferToken> mojo::PendingReceiver<blink::mojom::NativeFileSystemTransferToken>
receiver) { receiver) {
return CreateTransferTokenImpl(directory.url(), directory.handle_state(), return CreateTransferTokenImpl(directory.url(), directory.context().origin,
directory.handle_state(),
HandleType::kDirectory, std::move(receiver)); HandleType::kDirectory, std::move(receiver));
} }
...@@ -912,6 +915,7 @@ void NativeFileSystemManagerImpl::DidChooseDirectory( ...@@ -912,6 +915,7 @@ void NativeFileSystemManagerImpl::DidChooseDirectory(
void NativeFileSystemManagerImpl::CreateTransferTokenImpl( void NativeFileSystemManagerImpl::CreateTransferTokenImpl(
const storage::FileSystemURL& url, const storage::FileSystemURL& url,
const url::Origin& origin,
const SharedHandleState& handle_state, const SharedHandleState& handle_state,
HandleType handle_type, HandleType handle_type,
mojo::PendingReceiver<blink::mojom::NativeFileSystemTransferToken> mojo::PendingReceiver<blink::mojom::NativeFileSystemTransferToken>
...@@ -919,7 +923,7 @@ void NativeFileSystemManagerImpl::CreateTransferTokenImpl( ...@@ -919,7 +923,7 @@ void NativeFileSystemManagerImpl::CreateTransferTokenImpl(
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
auto token_impl = std::make_unique<NativeFileSystemTransferTokenImpl>( auto token_impl = std::make_unique<NativeFileSystemTransferTokenImpl>(
url, handle_state, handle_type, this, std::move(receiver)); url, origin, handle_state, handle_type, this, std::move(receiver));
auto token = token_impl->token(); auto token = token_impl->token();
transfer_tokens_.emplace(token, std::move(token_impl)); transfer_tokens_.emplace(token, std::move(token_impl));
} }
......
...@@ -266,6 +266,7 @@ class CONTENT_EXPORT NativeFileSystemManagerImpl ...@@ -266,6 +266,7 @@ class CONTENT_EXPORT NativeFileSystemManagerImpl
void CreateTransferTokenImpl( void CreateTransferTokenImpl(
const storage::FileSystemURL& url, const storage::FileSystemURL& url,
const url::Origin& origin,
const SharedHandleState& handle_state, const SharedHandleState& handle_state,
NativeFileSystemPermissionContext::HandleType handle_type, NativeFileSystemPermissionContext::HandleType handle_type,
mojo::PendingReceiver<blink::mojom::NativeFileSystemTransferToken> mojo::PendingReceiver<blink::mojom::NativeFileSystemTransferToken>
......
...@@ -15,6 +15,7 @@ using SharedHandleState = NativeFileSystemManagerImpl::SharedHandleState; ...@@ -15,6 +15,7 @@ using SharedHandleState = NativeFileSystemManagerImpl::SharedHandleState;
NativeFileSystemTransferTokenImpl::NativeFileSystemTransferTokenImpl( NativeFileSystemTransferTokenImpl::NativeFileSystemTransferTokenImpl(
const storage::FileSystemURL& url, const storage::FileSystemURL& url,
const url::Origin& origin,
const NativeFileSystemManagerImpl::SharedHandleState& handle_state, const NativeFileSystemManagerImpl::SharedHandleState& handle_state,
HandleType handle_type, HandleType handle_type,
NativeFileSystemManagerImpl* manager, NativeFileSystemManagerImpl* manager,
...@@ -23,8 +24,10 @@ NativeFileSystemTransferTokenImpl::NativeFileSystemTransferTokenImpl( ...@@ -23,8 +24,10 @@ NativeFileSystemTransferTokenImpl::NativeFileSystemTransferTokenImpl(
handle_type_(handle_type), handle_type_(handle_type),
manager_(manager), manager_(manager),
url_(url), url_(url),
origin_(origin),
handle_state_(handle_state) { handle_state_(handle_state) {
DCHECK(manager_); DCHECK(manager_);
DCHECK(url.origin().opaque() || url.origin() == origin);
receivers_.set_disconnect_handler( receivers_.set_disconnect_handler(
base::BindRepeating(&NativeFileSystemTransferTokenImpl::OnMojoDisconnect, base::BindRepeating(&NativeFileSystemTransferTokenImpl::OnMojoDisconnect,
......
...@@ -28,6 +28,7 @@ class CONTENT_EXPORT NativeFileSystemTransferTokenImpl ...@@ -28,6 +28,7 @@ class CONTENT_EXPORT NativeFileSystemTransferTokenImpl
public: public:
NativeFileSystemTransferTokenImpl( NativeFileSystemTransferTokenImpl(
const storage::FileSystemURL& url, const storage::FileSystemURL& url,
const url::Origin& origin,
const NativeFileSystemManagerImpl::SharedHandleState& handle_state, const NativeFileSystemManagerImpl::SharedHandleState& handle_state,
NativeFileSystemPermissionContext::HandleType handle_type, NativeFileSystemPermissionContext::HandleType handle_type,
NativeFileSystemManagerImpl* manager, NativeFileSystemManagerImpl* manager,
...@@ -40,6 +41,7 @@ class CONTENT_EXPORT NativeFileSystemTransferTokenImpl ...@@ -40,6 +41,7 @@ class CONTENT_EXPORT NativeFileSystemTransferTokenImpl
return handle_type_; return handle_type_;
} }
const storage::FileSystemURL& url() const { return url_; } const storage::FileSystemURL& url() const { return url_; }
const url::Origin& origin() const { return origin_; }
// Returns permission grants associated with this token. These can // Returns permission grants associated with this token. These can
// return nullptr if this token does not have associated permission grants. // return nullptr if this token does not have associated permission grants.
...@@ -68,6 +70,7 @@ class CONTENT_EXPORT NativeFileSystemTransferTokenImpl ...@@ -68,6 +70,7 @@ class CONTENT_EXPORT NativeFileSystemTransferTokenImpl
// Raw pointer since NativeFileSystemManagerImpl owns `this`. // Raw pointer since NativeFileSystemManagerImpl owns `this`.
NativeFileSystemManagerImpl* const manager_; NativeFileSystemManagerImpl* const manager_;
const storage::FileSystemURL url_; const storage::FileSystemURL url_;
const url::Origin origin_;
const NativeFileSystemManagerImpl::SharedHandleState handle_state_; const NativeFileSystemManagerImpl::SharedHandleState handle_state_;
mojo::ReceiverSet<blink::mojom::NativeFileSystemTransferToken> receivers_; mojo::ReceiverSet<blink::mojom::NativeFileSystemTransferToken> receivers_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment