Commit ab9ff302 authored by Oksana Zhuravlova's avatar Oksana Zhuravlova Committed by Commit Bot

[mojo] Convert per-frame FileSystemManager to use BrowserInterfaceBroker

This change converts document-scoped FileSystemManager client in
blink to use BrowserInterfaceBrokerProxy as a use case of a callback
dispatched on the IO thread.

Bug: 936482
Change-Id: I3afba1264396bb9b916efb75c6594797ad581407
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1709723
Commit-Queue: Oksana Zhuravlova <oksamyt@chromium.org>
Reviewed-by: default avatarAlex Moshchuk <alexmos@chromium.org>
Reviewed-by: default avatarTom Sepez <tsepez@chromium.org>
Reviewed-by: default avatarMarijn Kruisselbrink <mek@chromium.org>
Reviewed-by: default avatarKen Rockot <rockot@google.com>
Cr-Commit-Position: refs/heads/master@{#685378}
parent 54a0dc37
...@@ -13,6 +13,9 @@ void PopulateFrameBinders(RenderFrameHostImpl* rfhi, ...@@ -13,6 +13,9 @@ void PopulateFrameBinders(RenderFrameHostImpl* rfhi,
service_manager::BinderMap* map) { service_manager::BinderMap* map) {
map->Add<blink::mojom::AudioContextManager>(base::BindRepeating( map->Add<blink::mojom::AudioContextManager>(base::BindRepeating(
&RenderFrameHostImpl::GetAudioContextManager, base::Unretained(rfhi))); &RenderFrameHostImpl::GetAudioContextManager, base::Unretained(rfhi)));
map->Add<blink::mojom::FileSystemManager>(base::BindRepeating(
&RenderFrameHostImpl::GetFileSystemManager, base::Unretained(rfhi)));
} }
void PopulateBinderMap(RenderFrameHostImpl* rfhi, void PopulateBinderMap(RenderFrameHostImpl* rfhi,
......
...@@ -4339,10 +4339,6 @@ void RenderFrameHostImpl::RegisterMojoInterfaces() { ...@@ -4339,10 +4339,6 @@ void RenderFrameHostImpl::RegisterMojoInterfaces() {
GetProcess()->GetID(), GetProcess()->GetID(),
GetProcess()->GetStoragePartition()->GetFileSystemContext(), GetProcess()->GetStoragePartition()->GetFileSystemContext(),
ChromeBlobStorageContext::GetFor(GetProcess()->GetBrowserContext()))); ChromeBlobStorageContext::GetFor(GetProcess()->GetBrowserContext())));
registry_->AddInterface(
base::BindRepeating(&FileSystemManagerImpl::BindRequest,
base::Unretained(file_system_manager_.get())),
base::CreateSingleThreadTaskRunner({BrowserThread::IO}));
registry_->AddInterface(base::BindRepeating( registry_->AddInterface(base::BindRepeating(
&BackgroundFetchServiceImpl::CreateForFrame, GetProcess(), routing_id_)); &BackgroundFetchServiceImpl::CreateForFrame, GetProcess(), routing_id_));
...@@ -6233,6 +6229,15 @@ void RenderFrameHostImpl::GetAudioContextManager( ...@@ -6233,6 +6229,15 @@ void RenderFrameHostImpl::GetAudioContextManager(
AudioContextManagerImpl::Create(this, std::move(receiver)); AudioContextManagerImpl::Create(this, std::move(receiver));
} }
void RenderFrameHostImpl::GetFileSystemManager(
mojo::PendingReceiver<blink::mojom::FileSystemManager> receiver) {
// This is safe because file_system_manager_ is deleted on the IO thread
base::PostTask(FROM_HERE, {BrowserThread::IO},
base::BindOnce(&FileSystemManagerImpl::BindRequest,
base::Unretained(file_system_manager_.get()),
std::move(receiver)));
}
void RenderFrameHostImpl::GetAuthenticator( void RenderFrameHostImpl::GetAuthenticator(
mojo::PendingReceiver<blink::mojom::Authenticator> receiver) { mojo::PendingReceiver<blink::mojom::Authenticator> receiver) {
#if !defined(OS_ANDROID) #if !defined(OS_ANDROID)
......
...@@ -997,6 +997,8 @@ class CONTENT_EXPORT RenderFrameHostImpl ...@@ -997,6 +997,8 @@ class CONTENT_EXPORT RenderFrameHostImpl
void GetAudioContextManager( void GetAudioContextManager(
mojo::PendingReceiver<blink::mojom::AudioContextManager> receiver); mojo::PendingReceiver<blink::mojom::AudioContextManager> receiver);
void GetFileSystemManager(
mojo::PendingReceiver<blink::mojom::FileSystemManager> receiver);
// https://mikewest.github.io/corpp/#initialize-embedder-policy-for-global // https://mikewest.github.io/corpp/#initialize-embedder-policy-for-global
network::mojom::CrossOriginEmbedderPolicy cross_origin_embedder_policy() network::mojom::CrossOriginEmbedderPolicy cross_origin_embedder_policy()
......
...@@ -227,7 +227,6 @@ const service_manager::Manifest& GetContentBrowserManifest() { ...@@ -227,7 +227,6 @@ const service_manager::Manifest& GetContentBrowserManifest() {
"blink.mojom.DisplayCutoutHost", "blink.mojom.DisplayCutoutHost",
"blink.mojom.DedicatedWorkerHostFactory", "blink.mojom.DedicatedWorkerHostFactory",
"blink.mojom.FileChooser", "blink.mojom.FileChooser",
"blink.mojom.FileSystemManager",
"blink.mojom.GeolocationService", "blink.mojom.GeolocationService",
"blink.mojom.HidService", "blink.mojom.HidService",
"blink.mojom.IDBFactory", "blink.mojom.IDBFactory",
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "build/build_config.h" #include "build/build_config.h"
#include "services/service_manager/public/cpp/interface_provider.h" #include "services/service_manager/public/cpp/interface_provider.h"
#include "third_party/blink/public/common/browser_interface_broker_proxy.h"
#include "third_party/blink/public/platform/file_path_conversion.h" #include "third_party/blink/public/platform/file_path_conversion.h"
#include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/platform/platform.h"
#include "third_party/blink/public/platform/task_type.h" #include "third_party/blink/public/platform/task_type.h"
...@@ -93,20 +94,34 @@ FileSystemDispatcher& FileSystemDispatcher::From(ExecutionContext* context) { ...@@ -93,20 +94,34 @@ FileSystemDispatcher& FileSystemDispatcher::From(ExecutionContext* context) {
FileSystemDispatcher::~FileSystemDispatcher() = default; FileSystemDispatcher::~FileSystemDispatcher() = default;
mojom::blink::FileSystemManager& FileSystemDispatcher::GetFileSystemManager() { mojom::blink::FileSystemManager& FileSystemDispatcher::GetFileSystemManager() {
if (!file_system_manager_ptr_) { if (!file_system_manager_) {
// See https://bit.ly/2S0zRAS for task types // TODO(crbug.com/985112): Adding temporary condition until
mojom::blink::FileSystemManagerRequest request = mojo::MakeRequest( // BrowserInterfaceBroker has worker support.
&file_system_manager_ptr_, if (GetSupplementable()->IsDocument()) {
GetSupplementable()->GetTaskRunner(blink::TaskType::kMiscPlatformAPI)); // See https://bit.ly/2S0zRAS for task types
// Document::GetInterfaceProvider() can return null if the frame is mojo::PendingReceiver<mojom::blink::FileSystemManager> receiver =
// detached. file_system_manager_.BindNewPipeAndPassReceiver(
if (GetSupplementable()->GetInterfaceProvider()) { GetSupplementable()->GetTaskRunner(
blink::TaskType::kMiscPlatformAPI));
// Document::GetBrowserInterfaceBrokerProxy() can return null if the frame
// is detached.
if (GetSupplementable()->GetBrowserInterfaceBrokerProxy()) {
GetSupplementable()->GetBrowserInterfaceBrokerProxy()->GetInterface(
std::move(receiver));
}
} else {
// See https://bit.ly/2S0zRAS for task types
mojom::blink::FileSystemManagerRequest request =
file_system_manager_.BindNewPipeAndPassReceiver(
GetSupplementable()->GetTaskRunner(
blink::TaskType::kMiscPlatformAPI));
GetSupplementable()->GetInterfaceProvider()->GetInterface( GetSupplementable()->GetInterfaceProvider()->GetInterface(
std::move(request)); std::move(request));
} }
} }
DCHECK(file_system_manager_ptr_);
return *file_system_manager_ptr_; DCHECK(file_system_manager_);
return *file_system_manager_.get();
} }
void FileSystemDispatcher::OpenFileSystem( void FileSystemDispatcher::OpenFileSystem(
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <memory> #include <memory>
#include "mojo/public/cpp/bindings/remote.h"
#include "mojo/public/cpp/bindings/strong_binding_set.h" #include "mojo/public/cpp/bindings/strong_binding_set.h"
#include "third_party/blink/public/mojom/filesystem/file_system.mojom-blink.h" #include "third_party/blink/public/mojom/filesystem/file_system.mojom-blink.h"
#include "third_party/blink/renderer/modules/filesystem/file_system_callbacks.h" #include "third_party/blink/renderer/modules/filesystem/file_system_callbacks.h"
...@@ -193,7 +194,7 @@ class FileSystemDispatcher ...@@ -193,7 +194,7 @@ class FileSystemDispatcher
void RemoveOperationPtr(int operation_id); void RemoveOperationPtr(int operation_id);
mojom::blink::FileSystemManagerPtr file_system_manager_ptr_; mojo::Remote<mojom::blink::FileSystemManager> file_system_manager_;
using OperationsMap = using OperationsMap =
HashMap<int, mojom::blink::FileSystemCancellableOperationPtr>; HashMap<int, mojom::blink::FileSystemCancellableOperationPtr>;
OperationsMap cancellable_operations_; OperationsMap cancellable_operations_;
......
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