Commit 6f337bcc authored by Sam McNally's avatar Sam McNally Committed by Commit Bot

Remove the WorkerThread InterfaceProvider.

Migrate the remaining interfaces accessed via
WorkerThread::GetInterfaceProvider() to use
ExecutionContext::GetInterfaceProvider():
- PaymentManager
- PermissionService
- WebSocket

Bug: 734210
Change-Id: Ib33c8783bbb490bd4bda5dd31da2a72ab218d03b
Reviewed-on: https://chromium-review.googlesource.com/743102
Commit-Queue: Sam McNally <sammc@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Cr-Commit-Position: refs/heads/master@{#513053}
parent 8bfcbd34
...@@ -1790,17 +1790,6 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() { ...@@ -1790,17 +1790,6 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() {
registry.get(), base::Bind(&ForwardRequest<device::mojom::BatteryMonitor>, registry.get(), base::Bind(&ForwardRequest<device::mojom::BatteryMonitor>,
device::mojom::kServiceName)); device::mojom::kServiceName));
AddUIThreadInterface(
registry.get(),
base::Bind(&PermissionServiceContext::CreateService,
base::Unretained(permission_service_context_.get())));
AddUIThreadInterface(
registry.get(),
base::Bind(
&PaymentAppContextImpl::CreatePaymentManager,
base::Unretained(storage_partition_impl_->GetPaymentAppContext())));
AddUIThreadInterface( AddUIThreadInterface(
registry.get(), registry.get(),
base::Bind(&RenderProcessHostImpl::CreateOffscreenCanvasProvider, base::Bind(&RenderProcessHostImpl::CreateOffscreenCanvasProvider,
...@@ -1912,12 +1901,6 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() { ...@@ -1912,12 +1901,6 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() {
registry->AddInterface( registry->AddInterface(
base::Bind(&CreateReportingServiceProxy, storage_partition_impl_)); base::Bind(&CreateReportingServiceProxy, storage_partition_impl_));
// This is to support usage of WebSockets in cases in which there is no
// associated RenderFrame (e.g., Shared Workers).
AddUIThreadInterface(registry.get(),
base::Bind(&WebSocketManager::CreateWebSocket, GetID(),
MSG_ROUTING_NONE));
AddUIThreadInterface(registry.get(), base::Bind(&FieldTrialRecorder::Create)); AddUIThreadInterface(registry.get(), base::Bind(&FieldTrialRecorder::Create));
associated_interfaces_.reset(new AssociatedInterfaceRegistryImpl()); associated_interfaces_.reset(new AssociatedInterfaceRegistryImpl());
......
...@@ -388,6 +388,10 @@ class CONTENT_EXPORT RenderProcessHostImpl ...@@ -388,6 +388,10 @@ class CONTENT_EXPORT RenderProcessHostImpl
// globally-used spare RenderProcessHost at any time. // globally-used spare RenderProcessHost at any time.
static RenderProcessHost* GetSpareRenderProcessHostForTesting(); static RenderProcessHost* GetSpareRenderProcessHostForTesting();
PermissionServiceContext& permission_service_context() {
return *permission_service_context_;
};
protected: protected:
// A proxy for our IPC::Channel that lives on the IO thread. // A proxy for our IPC::Channel that lives on the IO thread.
std::unique_ptr<IPC::ChannelProxy> channel_; std::unique_ptr<IPC::ChannelProxy> channel_;
......
...@@ -6,6 +6,12 @@ ...@@ -6,6 +6,12 @@
#include <utility> #include <utility>
#include "base/bind.h"
#include "content/browser/payments/payment_manager.h"
#include "content/browser/permissions/permission_service_context.h"
#include "content/browser/renderer_host/render_process_host_impl.h"
#include "content/browser/storage_partition_impl.h"
#include "content/browser/websockets/websocket_manager.h"
#include "content/public/browser/browser_context.h" #include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
#include "content/public/browser/content_browser_client.h" #include "content/public/browser/content_browser_client.h"
...@@ -71,6 +77,26 @@ void WorkerInterfaceBinders::InitializeParameterizedBinderRegistry() { ...@@ -71,6 +77,26 @@ void WorkerInterfaceBinders::InitializeParameterizedBinderRegistry() {
parameterized_binder_registry_.AddInterface( parameterized_binder_registry_.AddInterface(
base::Bind(&ForwardRequest<shape_detection::mojom::TextDetection>, base::Bind(&ForwardRequest<shape_detection::mojom::TextDetection>,
shape_detection::mojom::kServiceName)); shape_detection::mojom::kServiceName));
parameterized_binder_registry_.AddInterface(
base::Bind([](blink::mojom::WebSocketRequest request,
RenderProcessHost* host, const url::Origin& origin) {
WebSocketManager::CreateWebSocket(host->GetID(), MSG_ROUTING_NONE,
std::move(request));
}));
parameterized_binder_registry_.AddInterface(
base::Bind([](payments::mojom::PaymentManagerRequest request,
RenderProcessHost* host, const url::Origin& origin) {
static_cast<StoragePartitionImpl*>(host->GetStoragePartition())
->GetPaymentAppContext()
->CreatePaymentManager(std::move(request));
}));
parameterized_binder_registry_.AddInterface(
base::Bind([](blink::mojom::PermissionServiceRequest request,
RenderProcessHost* host, const url::Origin& origin) {
static_cast<RenderProcessHostImpl*>(host)
->permission_service_context()
.CreateService(std::move(request));
}));
} }
} // namespace } // namespace
......
...@@ -26,10 +26,8 @@ ...@@ -26,10 +26,8 @@
"blink::mojom::MimeRegistry", "blink::mojom::MimeRegistry",
"blink::mojom::NotificationService", "blink::mojom::NotificationService",
"blink::mojom::OffscreenCanvasProvider", "blink::mojom::OffscreenCanvasProvider",
"blink::mojom::PermissionService",
"blink::mojom::ReportingServiceProxy", "blink::mojom::ReportingServiceProxy",
"blink::mojom::WebDatabaseHost", "blink::mojom::WebDatabaseHost",
"blink::mojom::WebSocket",
"content::mojom::FieldTrialRecorder", "content::mojom::FieldTrialRecorder",
"content::mojom::FileUtilitiesHost", "content::mojom::FileUtilitiesHost",
"content::mojom::FrameSinkProvider", "content::mojom::FrameSinkProvider",
...@@ -49,11 +47,7 @@ ...@@ -49,11 +47,7 @@
"media::mojom::VideoDecodePerfHistory", "media::mojom::VideoDecodePerfHistory",
"memory_coordinator::mojom::MemoryCoordinatorHandle", "memory_coordinator::mojom::MemoryCoordinatorHandle",
"metrics::mojom::SingleSampleMetricsProvider", "metrics::mojom::SingleSampleMetricsProvider",
"payments::mojom::PaymentManager",
"resource_coordinator::mojom::ProcessCoordinationUnit", "resource_coordinator::mojom::ProcessCoordinationUnit",
"shape_detection::mojom::BarcodeDetection",
"shape_detection::mojom::FaceDetectionProvider",
"shape_detection::mojom::TextDetection",
"ui::mojom::Gpu", "ui::mojom::Gpu",
"viz::mojom::SharedBitmapAllocationNotifier", "viz::mojom::SharedBitmapAllocationNotifier",
"viz::mojom::CompositingModeReporter" "viz::mojom::CompositingModeReporter"
...@@ -177,6 +171,8 @@ ...@@ -177,6 +171,8 @@
"navigation:dedicated_worker": { "navigation:dedicated_worker": {
"provides": { "provides": {
"renderer": [ "renderer": [
"blink::mojom::PermissionService",
"payments::mojom::PaymentManager",
"shape_detection::mojom::BarcodeDetection", "shape_detection::mojom::BarcodeDetection",
"shape_detection::mojom::FaceDetectionProvider", "shape_detection::mojom::FaceDetectionProvider",
"shape_detection::mojom::TextDetection" "shape_detection::mojom::TextDetection"
...@@ -186,6 +182,9 @@ ...@@ -186,6 +182,9 @@
"navigation:service_worker": { "navigation:service_worker": {
"provides": { "provides": {
"renderer": [ "renderer": [
"blink::mojom::PermissionService",
"blink::mojom::WebSocket",
"payments::mojom::PaymentManager",
"shape_detection::mojom::BarcodeDetection", "shape_detection::mojom::BarcodeDetection",
"shape_detection::mojom::FaceDetectionProvider", "shape_detection::mojom::FaceDetectionProvider",
"shape_detection::mojom::TextDetection" "shape_detection::mojom::TextDetection"
...@@ -195,6 +194,9 @@ ...@@ -195,6 +194,9 @@
"navigation:shared_worker": { "navigation:shared_worker": {
"provides": { "provides": {
"renderer": [ "renderer": [
"blink::mojom::PermissionService",
"blink::mojom::WebSocket",
"payments::mojom::PaymentManager",
"shape_detection::mojom::BarcodeDetection", "shape_detection::mojom::BarcodeDetection",
"shape_detection::mojom::FaceDetectionProvider", "shape_detection::mojom::FaceDetectionProvider",
"shape_detection::mojom::TextDetection" "shape_detection::mojom::TextDetection"
......
...@@ -58,7 +58,6 @@ ...@@ -58,7 +58,6 @@
#include "platform/wtf/PtrUtil.h" #include "platform/wtf/PtrUtil.h"
#include "platform/wtf/Threading.h" #include "platform/wtf/Threading.h"
#include "platform/wtf/text/WTFString.h" #include "platform/wtf/text/WTFString.h"
#include "public/platform/InterfaceProvider.h"
#include "public/platform/Platform.h" #include "public/platform/Platform.h"
namespace blink { namespace blink {
...@@ -70,12 +69,6 @@ namespace { ...@@ -70,12 +69,6 @@ namespace {
// TODO(nhiroki): Adjust the delay based on UMA. // TODO(nhiroki): Adjust the delay based on UMA.
constexpr TimeDelta kForcibleTerminationDelay = TimeDelta::FromSeconds(2); constexpr TimeDelta kForcibleTerminationDelay = TimeDelta::FromSeconds(2);
void ForwardInterfaceRequest(const std::string& name,
mojo::ScopedMessagePipeHandle handle) {
Platform::Current()->GetInterfaceProvider()->GetInterface(name.c_str(),
std::move(handle));
}
} // namespace } // namespace
static Mutex& ThreadSetMutex() { static Mutex& ThreadSetMutex() {
...@@ -307,13 +300,6 @@ ExitCode WorkerThread::GetExitCodeForTesting() { ...@@ -307,13 +300,6 @@ ExitCode WorkerThread::GetExitCodeForTesting() {
return exit_code_; return exit_code_;
} }
service_manager::InterfaceProvider& WorkerThread::GetInterfaceProvider() {
// TODO(https://crbug.com/734210): Instead of forwarding to the process-wide
// interface provider a worker-specific interface provider pipe should be
// passed in as part of the WorkerThreadStartupData.
return interface_provider_;
}
WorkerThread::WorkerThread(ThreadableLoadingContext* loading_context, WorkerThread::WorkerThread(ThreadableLoadingContext* loading_context,
WorkerReportingProxy& worker_reporting_proxy) WorkerReportingProxy& worker_reporting_proxy)
: time_origin_(MonotonicallyIncreasingTime()), : time_origin_(MonotonicallyIncreasingTime()),
...@@ -329,8 +315,6 @@ WorkerThread::WorkerThread(ThreadableLoadingContext* loading_context, ...@@ -329,8 +315,6 @@ WorkerThread::WorkerThread(ThreadableLoadingContext* loading_context,
DCHECK(IsMainThread()); DCHECK(IsMainThread());
MutexLocker lock(ThreadSetMutex()); MutexLocker lock(ThreadSetMutex());
WorkerThreads().insert(this); WorkerThreads().insert(this);
interface_provider_.Forward(
ConvertToBaseCallback(WTF::Bind(&ForwardInterfaceRequest)));
} }
void WorkerThread::ScheduleToTerminateScriptExecution() { void WorkerThread::ScheduleToTerminateScriptExecution() {
......
...@@ -45,7 +45,6 @@ ...@@ -45,7 +45,6 @@
#include "platform/wtf/Optional.h" #include "platform/wtf/Optional.h"
#include "platform/wtf/RefPtr.h" #include "platform/wtf/RefPtr.h"
#include "public/platform/WebThread.h" #include "public/platform/WebThread.h"
#include "services/service_manager/public/cpp/interface_provider.h"
#include "v8/include/v8.h" #include "v8/include/v8.h"
namespace blink { namespace blink {
...@@ -171,8 +170,6 @@ class CORE_EXPORT WorkerThread : public WebThread::TaskObserver { ...@@ -171,8 +170,6 @@ class CORE_EXPORT WorkerThread : public WebThread::TaskObserver {
return global_scope_scheduler_.get(); return global_scope_scheduler_.get();
} }
service_manager::InterfaceProvider& GetInterfaceProvider();
// For ServiceWorkerScriptStreaming. Returns nullptr otherwise. // For ServiceWorkerScriptStreaming. Returns nullptr otherwise.
virtual InstalledScriptsManager* GetInstalledScriptsManager() { virtual InstalledScriptsManager* GetInstalledScriptsManager() {
return nullptr; return nullptr;
...@@ -284,10 +281,6 @@ class CORE_EXPORT WorkerThread : public WebThread::TaskObserver { ...@@ -284,10 +281,6 @@ class CORE_EXPORT WorkerThread : public WebThread::TaskObserver {
CrossThreadPersistent<ParentFrameTaskRunners> parent_frame_task_runners_; CrossThreadPersistent<ParentFrameTaskRunners> parent_frame_task_runners_;
// Mojo interface provider serving interface requests scoped to this worker
// context.
service_manager::InterfaceProvider interface_provider_;
// Tasks managed by this scheduler are canceled when the global scope is // Tasks managed by this scheduler are canceled when the global scope is
// closed. // closed.
std::unique_ptr<scheduler::WorkerGlobalScopeScheduler> std::unique_ptr<scheduler::WorkerGlobalScopeScheduler>
......
...@@ -12,8 +12,8 @@ ...@@ -12,8 +12,8 @@
#include "modules/cookie_store/CookieStore.h" #include "modules/cookie_store/CookieStore.h"
#include "platform/Supplementable.h" #include "platform/Supplementable.h"
#include "platform/heap/Handle.h" #include "platform/heap/Handle.h"
#include "public/platform/InterfaceProvider.h"
#include "services/network/public/interfaces/restricted_cookie_manager.mojom-blink.h" #include "services/network/public/interfaces/restricted_cookie_manager.mojom-blink.h"
#include "services/service_manager/public/cpp/interface_provider.h"
namespace blink { namespace blink {
......
...@@ -6,15 +6,10 @@ ...@@ -6,15 +6,10 @@
#include "bindings/core/v8/ScriptPromise.h" #include "bindings/core/v8/ScriptPromise.h"
#include "core/dom/DOMException.h" #include "core/dom/DOMException.h"
#include "core/dom/Document.h"
#include "core/frame/LocalFrame.h"
#include "core/workers/WorkerGlobalScope.h"
#include "core/workers/WorkerThread.h"
#include "modules/payments/PaymentInstruments.h" #include "modules/payments/PaymentInstruments.h"
#include "modules/serviceworkers/ServiceWorkerRegistration.h" #include "modules/serviceworkers/ServiceWorkerRegistration.h"
#include "platform/bindings/ScriptState.h" #include "platform/bindings/ScriptState.h"
#include "platform/mojo/MojoHelper.h" #include "services/service_manager/public/cpp/interface_provider.h"
#include "public/platform/Platform.h"
namespace blink { namespace blink {
...@@ -49,14 +44,10 @@ PaymentManager::PaymentManager(ServiceWorkerRegistration* registration) ...@@ -49,14 +44,10 @@ PaymentManager::PaymentManager(ServiceWorkerRegistration* registration)
DCHECK(registration); DCHECK(registration);
auto request = mojo::MakeRequest(&manager_); auto request = mojo::MakeRequest(&manager_);
ExecutionContext* context = registration->GetExecutionContext(); if (ExecutionContext* context = registration->GetExecutionContext()) {
if (context && context->IsDocument()) { if (auto* interface_provider = context->GetInterfaceProvider()) {
LocalFrame* frame = ToDocument(context)->GetFrame(); interface_provider->GetInterface(std::move(request));
if (frame) }
frame->GetInterfaceProvider().GetInterface(std::move(request));
} else if (context && context->IsWorkerGlobalScope()) {
WorkerThread* thread = ToWorkerGlobalScope(context)->GetThread();
thread->GetInterfaceProvider().GetInterface(std::move(request));
} }
manager_.set_connection_error_handler(ConvertToBaseCallback(WTF::Bind( manager_.set_connection_error_handler(ConvertToBaseCallback(WTF::Bind(
......
...@@ -21,21 +21,11 @@ using MojoPermissionDescriptor = mojom::blink::PermissionDescriptor; ...@@ -21,21 +21,11 @@ using MojoPermissionDescriptor = mojom::blink::PermissionDescriptor;
using mojom::blink::PermissionDescriptorPtr; using mojom::blink::PermissionDescriptorPtr;
using mojom::blink::PermissionName; using mojom::blink::PermissionName;
bool ConnectToPermissionService( void ConnectToPermissionService(
ExecutionContext* execution_context, ExecutionContext* execution_context,
mojom::blink::PermissionServiceRequest request) { mojom::blink::PermissionServiceRequest request) {
if (execution_context->IsWorkerGlobalScope()) { if (auto* interface_provider = execution_context->GetInterfaceProvider())
WorkerThread* thread = ToWorkerGlobalScope(execution_context)->GetThread(); interface_provider->GetInterface(std::move(request));
thread->GetInterfaceProvider().GetInterface(std::move(request));
return true;
}
LocalFrame* frame = ToDocument(execution_context)->GetFrame();
if (!frame)
return false;
frame->GetInterfaceProvider().GetInterface(std::move(request));
return true;
} }
PermissionDescriptorPtr CreatePermissionDescriptor(PermissionName name) { PermissionDescriptorPtr CreatePermissionDescriptor(PermissionName name) {
......
...@@ -11,7 +11,7 @@ namespace blink { ...@@ -11,7 +11,7 @@ namespace blink {
class ExecutionContext; class ExecutionContext;
bool ConnectToPermissionService(ExecutionContext*, void ConnectToPermissionService(ExecutionContext*,
mojom::blink::PermissionServiceRequest); mojom::blink::PermissionServiceRequest);
mojom::blink::PermissionDescriptorPtr CreatePermissionDescriptor( mojom::blink::PermissionDescriptorPtr CreatePermissionDescriptor(
......
...@@ -157,16 +157,6 @@ ScriptPromise Permissions::query(ScriptState* script_state, ...@@ -157,16 +157,6 @@ ScriptPromise Permissions::query(ScriptState* script_state,
if (exception_state.HadException()) if (exception_state.HadException())
return exception_state.Reject(script_state); return exception_state.Reject(script_state);
// This must be called after `parsePermission` because the website might
// be able to run code.
PermissionService* service = GetService(ExecutionContext::From(script_state));
if (!service)
return ScriptPromise::RejectWithDOMException(
script_state,
DOMException::Create(
kInvalidStateError,
"In its current state, the global scope can't query permissions."));
ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state); ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state);
ScriptPromise promise = resolver->Promise(); ScriptPromise promise = resolver->Promise();
...@@ -175,12 +165,13 @@ ScriptPromise Permissions::query(ScriptState* script_state, ...@@ -175,12 +165,13 @@ ScriptPromise Permissions::query(ScriptState* script_state,
// permission prompt will be shown even if the returned permission will most // permission prompt will be shown even if the returned permission will most
// likely be "prompt". // likely be "prompt".
PermissionDescriptorPtr descriptor_copy = descriptor->Clone(); PermissionDescriptorPtr descriptor_copy = descriptor->Clone();
service->HasPermission( GetService(ExecutionContext::From(script_state))
std::move(descriptor), .HasPermission(std::move(descriptor),
ExecutionContext::From(script_state)->GetSecurityOrigin(), ExecutionContext::From(script_state)->GetSecurityOrigin(),
ConvertToBaseCallback(WTF::Bind( ConvertToBaseCallback(WTF::Bind(
&Permissions::TaskComplete, WrapPersistent(this), &Permissions::TaskComplete, WrapPersistent(this),
WrapPersistent(resolver), WTF::Passed(std::move(descriptor_copy))))); WrapPersistent(resolver),
WTF::Passed(std::move(descriptor_copy)))));
return promise; return promise;
} }
...@@ -196,27 +187,20 @@ ScriptPromise Permissions::request(ScriptState* script_state, ...@@ -196,27 +187,20 @@ ScriptPromise Permissions::request(ScriptState* script_state,
ExecutionContext* context = ExecutionContext::From(script_state); ExecutionContext* context = ExecutionContext::From(script_state);
// This must be called after `parsePermission` because the website might
// be able to run code.
PermissionService* service = GetService(context);
if (!service)
return ScriptPromise::RejectWithDOMException(
script_state, DOMException::Create(kInvalidStateError,
"In its current state, the global "
"scope can't request permissions."));
ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state); ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state);
ScriptPromise promise = resolver->Promise(); ScriptPromise promise = resolver->Promise();
PermissionDescriptorPtr descriptor_copy = descriptor->Clone(); PermissionDescriptorPtr descriptor_copy = descriptor->Clone();
Document* doc = ToDocumentOrNull(context); Document* doc = ToDocumentOrNull(context);
Frame* frame = doc ? doc->GetFrame() : nullptr; Frame* frame = doc ? doc->GetFrame() : nullptr;
service->RequestPermission( GetService(ExecutionContext::From(script_state))
std::move(descriptor), context->GetSecurityOrigin(), .RequestPermission(std::move(descriptor), context->GetSecurityOrigin(),
Frame::HasTransientUserActivation(frame, true /* checkIfMainThread */), Frame::HasTransientUserActivation(
ConvertToBaseCallback(WTF::Bind( frame, true /* checkIfMainThread */),
&Permissions::TaskComplete, WrapPersistent(this), ConvertToBaseCallback(WTF::Bind(
WrapPersistent(resolver), WTF::Passed(std::move(descriptor_copy))))); &Permissions::TaskComplete, WrapPersistent(this),
WrapPersistent(resolver),
WTF::Passed(std::move(descriptor_copy)))));
return promise; return promise;
} }
...@@ -230,25 +214,18 @@ ScriptPromise Permissions::revoke(ScriptState* script_state, ...@@ -230,25 +214,18 @@ ScriptPromise Permissions::revoke(ScriptState* script_state,
if (exception_state.HadException()) if (exception_state.HadException())
return exception_state.Reject(script_state); return exception_state.Reject(script_state);
// This must be called after `parsePermission` because the website might
// be able to run code.
PermissionService* service = GetService(ExecutionContext::From(script_state));
if (!service)
return ScriptPromise::RejectWithDOMException(
script_state, DOMException::Create(kInvalidStateError,
"In its current state, the global "
"scope can't revoke permissions."));
ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state); ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state);
ScriptPromise promise = resolver->Promise(); ScriptPromise promise = resolver->Promise();
PermissionDescriptorPtr descriptor_copy = descriptor->Clone(); PermissionDescriptorPtr descriptor_copy = descriptor->Clone();
service->RevokePermission( GetService(ExecutionContext::From(script_state))
std::move(descriptor), .RevokePermission(
ExecutionContext::From(script_state)->GetSecurityOrigin(), std::move(descriptor),
ConvertToBaseCallback(WTF::Bind( ExecutionContext::From(script_state)->GetSecurityOrigin(),
&Permissions::TaskComplete, WrapPersistent(this), ConvertToBaseCallback(
WrapPersistent(resolver), WTF::Passed(std::move(descriptor_copy))))); WTF::Bind(&Permissions::TaskComplete, WrapPersistent(this),
WrapPersistent(resolver),
WTF::Passed(std::move(descriptor_copy)))));
return promise; return promise;
} }
...@@ -286,15 +263,6 @@ ScriptPromise Permissions::requestAll( ...@@ -286,15 +263,6 @@ ScriptPromise Permissions::requestAll(
ExecutionContext* context = ExecutionContext::From(script_state); ExecutionContext* context = ExecutionContext::From(script_state);
// This must be called after `parsePermission` because the website might
// be able to run code.
PermissionService* service = GetService(context);
if (!service)
return ScriptPromise::RejectWithDOMException(
script_state, DOMException::Create(kInvalidStateError,
"In its current state, the global "
"scope can't request permissions."));
ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state); ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state);
ScriptPromise promise = resolver->Promise(); ScriptPromise promise = resolver->Promise();
...@@ -305,24 +273,27 @@ ScriptPromise Permissions::requestAll( ...@@ -305,24 +273,27 @@ ScriptPromise Permissions::requestAll(
Document* doc = ToDocumentOrNull(context); Document* doc = ToDocumentOrNull(context);
Frame* frame = doc ? doc->GetFrame() : nullptr; Frame* frame = doc ? doc->GetFrame() : nullptr;
service->RequestPermissions( GetService(ExecutionContext::From(script_state))
std::move(internal_permissions), context->GetSecurityOrigin(), .RequestPermissions(
Frame::HasTransientUserActivation(frame, true /* checkIfMainThread */), std::move(internal_permissions), context->GetSecurityOrigin(),
ConvertToBaseCallback( Frame::HasTransientUserActivation(frame,
WTF::Bind(&Permissions::BatchTaskComplete, WrapPersistent(this), true /* checkIfMainThread */),
WrapPersistent(resolver), ConvertToBaseCallback(WTF::Bind(
WTF::Passed(std::move(internal_permissions_copy)), &Permissions::BatchTaskComplete, WrapPersistent(this),
WTF::Passed(std::move(caller_index_to_internal_index))))); WrapPersistent(resolver),
WTF::Passed(std::move(internal_permissions_copy)),
WTF::Passed(std::move(caller_index_to_internal_index)))));
return promise; return promise;
} }
PermissionService* Permissions::GetService( PermissionService& Permissions::GetService(
ExecutionContext* execution_context) { ExecutionContext* execution_context) {
if (!service_ && ConnectToPermissionService(execution_context, if (!service_) {
mojo::MakeRequest(&service_))) ConnectToPermissionService(execution_context, mojo::MakeRequest(&service_));
service_.set_connection_error_handler(ConvertToBaseCallback(WTF::Bind( service_.set_connection_error_handler(ConvertToBaseCallback(WTF::Bind(
&Permissions::ServiceConnectionError, WrapWeakPersistent(this)))); &Permissions::ServiceConnectionError, WrapWeakPersistent(this))));
return service_.get(); }
return *service_;
} }
void Permissions::ServiceConnectionError() { void Permissions::ServiceConnectionError() {
......
...@@ -27,7 +27,7 @@ class Permissions final : public ScriptWrappable { ...@@ -27,7 +27,7 @@ class Permissions final : public ScriptWrappable {
ScriptPromise requestAll(ScriptState*, const Vector<Dictionary>&); ScriptPromise requestAll(ScriptState*, const Vector<Dictionary>&);
private: private:
mojom::blink::PermissionService* GetService(ExecutionContext*); mojom::blink::PermissionService& GetService(ExecutionContext*);
void ServiceConnectionError(); void ServiceConnectionError();
void TaskComplete(ScriptPromiseResolver*, void TaskComplete(ScriptPromiseResolver*,
mojom::blink::PermissionDescriptorPtr, mojom::blink::PermissionDescriptorPtr,
......
...@@ -77,23 +77,15 @@ ScriptPromise StorageManager::persist(ScriptState* script_state) { ...@@ -77,23 +77,15 @@ ScriptPromise StorageManager::persist(ScriptState* script_state) {
} }
DCHECK(execution_context->IsDocument()); DCHECK(execution_context->IsDocument());
PermissionService* permission_service =
GetPermissionService(ExecutionContext::From(script_state));
if (!permission_service) {
resolver->Reject(DOMException::Create(
kInvalidStateError,
"In its current state, the global scope can't request permissions."));
return promise;
}
Document* doc = ToDocumentOrNull(execution_context); Document* doc = ToDocumentOrNull(execution_context);
permission_service->RequestPermission( GetPermissionService(ExecutionContext::From(script_state))
CreatePermissionDescriptor(PermissionName::DURABLE_STORAGE), .RequestPermission(
ExecutionContext::From(script_state)->GetSecurityOrigin(), CreatePermissionDescriptor(PermissionName::DURABLE_STORAGE),
Frame::HasTransientUserActivation(doc ? doc->GetFrame() : nullptr), ExecutionContext::From(script_state)->GetSecurityOrigin(),
ConvertToBaseCallback( Frame::HasTransientUserActivation(doc ? doc->GetFrame() : nullptr),
WTF::Bind(&StorageManager::PermissionRequestComplete, ConvertToBaseCallback(
WrapPersistent(this), WrapPersistent(resolver)))); WTF::Bind(&StorageManager::PermissionRequestComplete,
WrapPersistent(this), WrapPersistent(resolver))));
return promise; return promise;
} }
...@@ -110,20 +102,13 @@ ScriptPromise StorageManager::persisted(ScriptState* script_state) { ...@@ -110,20 +102,13 @@ ScriptPromise StorageManager::persisted(ScriptState* script_state) {
return promise; return promise;
} }
PermissionService* permission_service = GetPermissionService(ExecutionContext::From(script_state))
GetPermissionService(ExecutionContext::From(script_state)); .HasPermission(
if (!permission_service) { CreatePermissionDescriptor(PermissionName::DURABLE_STORAGE),
resolver->Reject(DOMException::Create( ExecutionContext::From(script_state)->GetSecurityOrigin(),
kInvalidStateError, ConvertToBaseCallback(
"In its current state, the global scope can't query permissions.")); WTF::Bind(&StorageManager::PermissionRequestComplete,
return promise; WrapPersistent(this), WrapPersistent(resolver))));
}
permission_service->HasPermission(
CreatePermissionDescriptor(PermissionName::DURABLE_STORAGE),
ExecutionContext::From(script_state)->GetSecurityOrigin(),
ConvertToBaseCallback(
WTF::Bind(&StorageManager::PermissionRequestComplete,
WrapPersistent(this), WrapPersistent(resolver))));
return promise; return promise;
} }
...@@ -146,15 +131,16 @@ ScriptPromise StorageManager::estimate(ScriptState* script_state) { ...@@ -146,15 +131,16 @@ ScriptPromise StorageManager::estimate(ScriptState* script_state) {
return promise; return promise;
} }
PermissionService* StorageManager::GetPermissionService( PermissionService& StorageManager::GetPermissionService(
ExecutionContext* execution_context) { ExecutionContext* execution_context) {
if (!permission_service_ && if (!permission_service_) {
ConnectToPermissionService(execution_context, ConnectToPermissionService(execution_context,
mojo::MakeRequest(&permission_service_))) mojo::MakeRequest(&permission_service_));
permission_service_.set_connection_error_handler(ConvertToBaseCallback( permission_service_.set_connection_error_handler(ConvertToBaseCallback(
WTF::Bind(&StorageManager::PermissionServiceConnectionError, WTF::Bind(&StorageManager::PermissionServiceConnectionError,
WrapWeakPersistent(this)))); WrapWeakPersistent(this))));
return permission_service_.get(); }
return *permission_service_;
} }
void StorageManager::PermissionServiceConnectionError() { void StorageManager::PermissionServiceConnectionError() {
......
...@@ -26,7 +26,7 @@ class StorageManager final : public ScriptWrappable { ...@@ -26,7 +26,7 @@ class StorageManager final : public ScriptWrappable {
ScriptPromise estimate(ScriptState*); ScriptPromise estimate(ScriptState*);
private: private:
mojom::blink::PermissionService* GetPermissionService(ExecutionContext*); mojom::blink::PermissionService& GetPermissionService(ExecutionContext*);
void PermissionServiceConnectionError(); void PermissionServiceConnectionError();
void PermissionRequestComplete(ScriptPromiseResolver*, void PermissionRequestComplete(ScriptPromiseResolver*,
mojom::blink::PermissionStatus); mojom::blink::PermissionStatus);
......
...@@ -46,8 +46,8 @@ ...@@ -46,8 +46,8 @@
#include "platform/wtf/PtrUtil.h" #include "platform/wtf/PtrUtil.h"
#include "platform/wtf/text/CString.h" #include "platform/wtf/text/CString.h"
#include "platform/wtf/text/WTFString.h" #include "platform/wtf/text/WTFString.h"
#include "public/platform/InterfaceProvider.h"
#include "public/platform/TaskType.h" #include "public/platform/TaskType.h"
#include "services/service_manager/public/cpp/interface_provider.h"
namespace blink { namespace blink {
...@@ -414,7 +414,7 @@ bool Bridge::Connect(std::unique_ptr<SourceLocation> location, ...@@ -414,7 +414,7 @@ bool Bridge::Connect(std::unique_ptr<SourceLocation> location,
// SSL interstitial decision to WebSocket connections from the worker. // SSL interstitial decision to WebSocket connections from the worker.
mojom::blink::WebSocketPtrInfo socket_ptr_info; mojom::blink::WebSocketPtrInfo socket_ptr_info;
if (!worker_global_scope_->IsDedicatedWorkerGlobalScope()) { if (!worker_global_scope_->IsDedicatedWorkerGlobalScope()) {
worker_thread->GetInterfaceProvider().GetInterface( worker_global_scope_->GetInterfaceProvider()->GetInterface(
mojo::MakeRequest(&socket_ptr_info)); mojo::MakeRequest(&socket_ptr_info));
} }
......
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