Plumb a WebWorkerFetchContext for nested workers
Bug: 829119 Change-Id: Ie393ac9e18bdfcded983d98a16c00254b0954547 Reviewed-on: https://chromium-review.googlesource.com/1000519 Commit-Queue: Nate Chapin <japhet@chromium.org> Reviewed-by: Bo <boliu@chromium.org> Reviewed-by: Hiroki Nakagawa <nhiroki@chromium.org> Reviewed-by: Lei Zhang <thestig@chromium.org> Reviewed-by: Kinuko Yasuda <kinuko@chromium.org> Reviewed-by: Matt Falkenhagen <falken@chromium.org> Cr-Commit-Position: refs/heads/master@{#551391}
This commit is contained in:
android_webview/renderer
aw_url_loader_throttle_provider.ccaw_url_loader_throttle_provider.haw_websocket_handshake_throttle_provider.ccaw_websocket_handshake_throttle_provider.h
chrome/renderer
url_loader_throttle_provider_impl.ccurl_loader_throttle_provider_impl.hwebsocket_handshake_throttle_provider_impl.ccwebsocket_handshake_throttle_provider_impl.h
content
third_party/blink
public
platform
renderer
core
@@ -30,6 +30,22 @@ AwURLLoaderThrottleProvider::AwURLLoaderThrottleProvider(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AwURLLoaderThrottleProvider::AwURLLoaderThrottleProvider(
|
||||||
|
const AwURLLoaderThrottleProvider& other)
|
||||||
|
: type_(other.type_) {
|
||||||
|
DETACH_FROM_THREAD(thread_checker_);
|
||||||
|
if (other.safe_browsing_)
|
||||||
|
other.safe_browsing_->Clone(mojo::MakeRequest(&safe_browsing_info_));
|
||||||
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<content::URLLoaderThrottleProvider>
|
||||||
|
AwURLLoaderThrottleProvider::Clone() {
|
||||||
|
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
|
||||||
|
if (safe_browsing_info_)
|
||||||
|
safe_browsing_.Bind(std::move(safe_browsing_info_));
|
||||||
|
return base::WrapUnique(new AwURLLoaderThrottleProvider(*this));
|
||||||
|
}
|
||||||
|
|
||||||
AwURLLoaderThrottleProvider::~AwURLLoaderThrottleProvider() {
|
AwURLLoaderThrottleProvider::~AwURLLoaderThrottleProvider() {
|
||||||
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
|
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
|
||||||
}
|
}
|
||||||
|
@@ -21,12 +21,17 @@ class AwURLLoaderThrottleProvider : public content::URLLoaderThrottleProvider {
|
|||||||
~AwURLLoaderThrottleProvider() override;
|
~AwURLLoaderThrottleProvider() override;
|
||||||
|
|
||||||
// content::URLLoaderThrottleProvider implementation.
|
// content::URLLoaderThrottleProvider implementation.
|
||||||
|
std::unique_ptr<content::URLLoaderThrottleProvider> Clone() override;
|
||||||
std::vector<std::unique_ptr<content::URLLoaderThrottle>> CreateThrottles(
|
std::vector<std::unique_ptr<content::URLLoaderThrottle>> CreateThrottles(
|
||||||
int render_frame_id,
|
int render_frame_id,
|
||||||
const blink::WebURLRequest& request,
|
const blink::WebURLRequest& request,
|
||||||
content::ResourceType resource_type) override;
|
content::ResourceType resource_type) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
// This copy constructor works in conjunction with Clone(), not intended for
|
||||||
|
// general use.
|
||||||
|
AwURLLoaderThrottleProvider(const AwURLLoaderThrottleProvider& other);
|
||||||
|
|
||||||
content::URLLoaderThrottleProviderType type_;
|
content::URLLoaderThrottleProviderType type_;
|
||||||
|
|
||||||
safe_browsing::mojom::SafeBrowsingPtrInfo safe_browsing_info_;
|
safe_browsing::mojom::SafeBrowsingPtrInfo safe_browsing_info_;
|
||||||
@@ -34,7 +39,7 @@ class AwURLLoaderThrottleProvider : public content::URLLoaderThrottleProvider {
|
|||||||
|
|
||||||
THREAD_CHECKER(thread_checker_);
|
THREAD_CHECKER(thread_checker_);
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(AwURLLoaderThrottleProvider);
|
DISALLOW_ASSIGN(AwURLLoaderThrottleProvider);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace android_webview
|
} // namespace android_webview
|
||||||
|
@@ -31,6 +31,21 @@ AwWebSocketHandshakeThrottleProvider::~AwWebSocketHandshakeThrottleProvider() {
|
|||||||
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
|
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AwWebSocketHandshakeThrottleProvider::AwWebSocketHandshakeThrottleProvider(
|
||||||
|
const AwWebSocketHandshakeThrottleProvider& other) {
|
||||||
|
DETACH_FROM_THREAD(thread_checker_);
|
||||||
|
if (other.safe_browsing_)
|
||||||
|
other.safe_browsing_->Clone(mojo::MakeRequest(&safe_browsing_info_));
|
||||||
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<content::WebSocketHandshakeThrottleProvider>
|
||||||
|
AwWebSocketHandshakeThrottleProvider::Clone() {
|
||||||
|
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
|
||||||
|
if (safe_browsing_info_)
|
||||||
|
safe_browsing_.Bind(std::move(safe_browsing_info_));
|
||||||
|
return base::WrapUnique(new AwWebSocketHandshakeThrottleProvider(*this));
|
||||||
|
}
|
||||||
|
|
||||||
std::unique_ptr<blink::WebSocketHandshakeThrottle>
|
std::unique_ptr<blink::WebSocketHandshakeThrottle>
|
||||||
AwWebSocketHandshakeThrottleProvider::CreateThrottle(int render_frame_id) {
|
AwWebSocketHandshakeThrottleProvider::CreateThrottle(int render_frame_id) {
|
||||||
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
|
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
|
||||||
|
@@ -23,16 +23,22 @@ class AwWebSocketHandshakeThrottleProvider final
|
|||||||
~AwWebSocketHandshakeThrottleProvider() override;
|
~AwWebSocketHandshakeThrottleProvider() override;
|
||||||
|
|
||||||
// Implements content::WebSocketHandshakeThrottleProvider.
|
// Implements content::WebSocketHandshakeThrottleProvider.
|
||||||
|
std::unique_ptr<content::WebSocketHandshakeThrottleProvider> Clone() override;
|
||||||
std::unique_ptr<blink::WebSocketHandshakeThrottle> CreateThrottle(
|
std::unique_ptr<blink::WebSocketHandshakeThrottle> CreateThrottle(
|
||||||
int render_frame_id) override;
|
int render_frame_id) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
// This copy constructor works in conjunction with Clone(), not intended for
|
||||||
|
// general use.
|
||||||
|
AwWebSocketHandshakeThrottleProvider(
|
||||||
|
const AwWebSocketHandshakeThrottleProvider& other);
|
||||||
|
|
||||||
safe_browsing::mojom::SafeBrowsingPtrInfo safe_browsing_info_;
|
safe_browsing::mojom::SafeBrowsingPtrInfo safe_browsing_info_;
|
||||||
safe_browsing::mojom::SafeBrowsingPtr safe_browsing_;
|
safe_browsing::mojom::SafeBrowsingPtr safe_browsing_;
|
||||||
|
|
||||||
THREAD_CHECKER(thread_checker_);
|
THREAD_CHECKER(thread_checker_);
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(AwWebSocketHandshakeThrottleProvider);
|
DISALLOW_ASSIGN(AwWebSocketHandshakeThrottleProvider);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace android_webview
|
} // namespace android_webview
|
||||||
|
@@ -68,6 +68,24 @@ URLLoaderThrottleProviderImpl::~URLLoaderThrottleProviderImpl() {
|
|||||||
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
|
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
URLLoaderThrottleProviderImpl::URLLoaderThrottleProviderImpl(
|
||||||
|
const URLLoaderThrottleProviderImpl& other)
|
||||||
|
: type_(other.type_),
|
||||||
|
chrome_content_renderer_client_(other.chrome_content_renderer_client_) {
|
||||||
|
DETACH_FROM_THREAD(thread_checker_);
|
||||||
|
if (other.safe_browsing_)
|
||||||
|
other.safe_browsing_->Clone(mojo::MakeRequest(&safe_browsing_info_));
|
||||||
|
// An ad_delay_factory_ is created, rather than cloning the existing one.
|
||||||
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<content::URLLoaderThrottleProvider>
|
||||||
|
URLLoaderThrottleProviderImpl::Clone() {
|
||||||
|
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
|
||||||
|
if (safe_browsing_info_)
|
||||||
|
safe_browsing_.Bind(std::move(safe_browsing_info_));
|
||||||
|
return base::WrapUnique(new URLLoaderThrottleProviderImpl(*this));
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<std::unique_ptr<content::URLLoaderThrottle>>
|
std::vector<std::unique_ptr<content::URLLoaderThrottle>>
|
||||||
URLLoaderThrottleProviderImpl::CreateThrottles(
|
URLLoaderThrottleProviderImpl::CreateThrottles(
|
||||||
int render_frame_id,
|
int render_frame_id,
|
||||||
|
@@ -26,12 +26,17 @@ class URLLoaderThrottleProviderImpl
|
|||||||
~URLLoaderThrottleProviderImpl() override;
|
~URLLoaderThrottleProviderImpl() override;
|
||||||
|
|
||||||
// content::URLLoaderThrottleProvider implementation.
|
// content::URLLoaderThrottleProvider implementation.
|
||||||
|
std::unique_ptr<content::URLLoaderThrottleProvider> Clone() override;
|
||||||
std::vector<std::unique_ptr<content::URLLoaderThrottle>> CreateThrottles(
|
std::vector<std::unique_ptr<content::URLLoaderThrottle>> CreateThrottles(
|
||||||
int render_frame_id,
|
int render_frame_id,
|
||||||
const blink::WebURLRequest& request,
|
const blink::WebURLRequest& request,
|
||||||
content::ResourceType resource_type) override;
|
content::ResourceType resource_type) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
// This copy constructor works in conjunction with Clone(), not intended for
|
||||||
|
// general use.
|
||||||
|
URLLoaderThrottleProviderImpl(const URLLoaderThrottleProviderImpl& other);
|
||||||
|
|
||||||
std::unique_ptr<subresource_filter::AdDelayThrottle::Factory>
|
std::unique_ptr<subresource_filter::AdDelayThrottle::Factory>
|
||||||
ad_delay_factory_;
|
ad_delay_factory_;
|
||||||
|
|
||||||
@@ -43,7 +48,7 @@ class URLLoaderThrottleProviderImpl
|
|||||||
|
|
||||||
THREAD_CHECKER(thread_checker_);
|
THREAD_CHECKER(thread_checker_);
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(URLLoaderThrottleProviderImpl);
|
DISALLOW_ASSIGN(URLLoaderThrottleProviderImpl);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CHROME_RENDERER_URL_LOADER_THROTTLE_PROVIDER_IMPL_H_
|
#endif // CHROME_RENDERER_URL_LOADER_THROTTLE_PROVIDER_IMPL_H_
|
||||||
|
@@ -25,6 +25,21 @@ WebSocketHandshakeThrottleProviderImpl::
|
|||||||
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
|
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WebSocketHandshakeThrottleProviderImpl::WebSocketHandshakeThrottleProviderImpl(
|
||||||
|
const WebSocketHandshakeThrottleProviderImpl& other) {
|
||||||
|
DETACH_FROM_THREAD(thread_checker_);
|
||||||
|
DCHECK(other.safe_browsing_);
|
||||||
|
other.safe_browsing_->Clone(mojo::MakeRequest(&safe_browsing_info_));
|
||||||
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<content::WebSocketHandshakeThrottleProvider>
|
||||||
|
WebSocketHandshakeThrottleProviderImpl::Clone() {
|
||||||
|
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
|
||||||
|
if (safe_browsing_info_)
|
||||||
|
safe_browsing_.Bind(std::move(safe_browsing_info_));
|
||||||
|
return base::WrapUnique(new WebSocketHandshakeThrottleProviderImpl(*this));
|
||||||
|
}
|
||||||
|
|
||||||
std::unique_ptr<blink::WebSocketHandshakeThrottle>
|
std::unique_ptr<blink::WebSocketHandshakeThrottle>
|
||||||
WebSocketHandshakeThrottleProviderImpl::CreateThrottle(int render_frame_id) {
|
WebSocketHandshakeThrottleProviderImpl::CreateThrottle(int render_frame_id) {
|
||||||
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
|
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
|
||||||
|
@@ -21,16 +21,22 @@ class WebSocketHandshakeThrottleProviderImpl final
|
|||||||
~WebSocketHandshakeThrottleProviderImpl() override;
|
~WebSocketHandshakeThrottleProviderImpl() override;
|
||||||
|
|
||||||
// Implements content::WebSocketHandshakeThrottleProvider.
|
// Implements content::WebSocketHandshakeThrottleProvider.
|
||||||
|
std::unique_ptr<content::WebSocketHandshakeThrottleProvider> Clone() override;
|
||||||
std::unique_ptr<blink::WebSocketHandshakeThrottle> CreateThrottle(
|
std::unique_ptr<blink::WebSocketHandshakeThrottle> CreateThrottle(
|
||||||
int render_frame_id) override;
|
int render_frame_id) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
// This copy constructor works in conjunction with Clone(), not intended for
|
||||||
|
// general use.
|
||||||
|
WebSocketHandshakeThrottleProviderImpl(
|
||||||
|
const WebSocketHandshakeThrottleProviderImpl& other);
|
||||||
|
|
||||||
safe_browsing::mojom::SafeBrowsingPtrInfo safe_browsing_info_;
|
safe_browsing::mojom::SafeBrowsingPtrInfo safe_browsing_info_;
|
||||||
safe_browsing::mojom::SafeBrowsingPtr safe_browsing_;
|
safe_browsing::mojom::SafeBrowsingPtr safe_browsing_;
|
||||||
|
|
||||||
THREAD_CHECKER(thread_checker_);
|
THREAD_CHECKER(thread_checker_);
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(WebSocketHandshakeThrottleProviderImpl);
|
DISALLOW_ASSIGN(WebSocketHandshakeThrottleProviderImpl);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CHROME_RENDERER_WEBSOCKET_HANDSHAKE_THROTTLE_PROVIDER_IMPL_H_
|
#endif // CHROME_RENDERER_WEBSOCKET_HANDSHAKE_THROTTLE_PROVIDER_IMPL_H_
|
||||||
|
@@ -28,6 +28,9 @@ class CONTENT_EXPORT URLLoaderThrottleProvider {
|
|||||||
public:
|
public:
|
||||||
virtual ~URLLoaderThrottleProvider() {}
|
virtual ~URLLoaderThrottleProvider() {}
|
||||||
|
|
||||||
|
// Used to copy a URLLoaderThrottleProvider between worker threads.
|
||||||
|
virtual std::unique_ptr<URLLoaderThrottleProvider> Clone() = 0;
|
||||||
|
|
||||||
// For requests from frames and dedicated workers, |render_frame_id| should be
|
// For requests from frames and dedicated workers, |render_frame_id| should be
|
||||||
// set to the corresponding frame. For requests from shared or
|
// set to the corresponding frame. For requests from shared or
|
||||||
// service workers, |render_frame_id| should be set to MSG_ROUTING_NONE.
|
// service workers, |render_frame_id| should be set to MSG_ROUTING_NONE.
|
||||||
|
@@ -23,6 +23,9 @@ class CONTENT_EXPORT WebSocketHandshakeThrottleProvider {
|
|||||||
public:
|
public:
|
||||||
virtual ~WebSocketHandshakeThrottleProvider() {}
|
virtual ~WebSocketHandshakeThrottleProvider() {}
|
||||||
|
|
||||||
|
// Used to copy a WebSocketHandshakeThrottleProvider between worker threads.
|
||||||
|
virtual std::unique_ptr<WebSocketHandshakeThrottleProvider> Clone() = 0;
|
||||||
|
|
||||||
// For requests from frames and dedicated workers, |render_frame_id| should be
|
// For requests from frames and dedicated workers, |render_frame_id| should be
|
||||||
// set to the corresponding frame. For requests from shared or service
|
// set to the corresponding frame. For requests from shared or service
|
||||||
// workers, |render_frame_id| should be set to MSG_ROUTING_NONE.
|
// workers, |render_frame_id| should be set to MSG_ROUTING_NONE.
|
||||||
|
@@ -3594,7 +3594,8 @@ RenderFrameImpl::CreateWorkerFetchContext() {
|
|||||||
URLLoaderThrottleProviderType::kWorker),
|
URLLoaderThrottleProviderType::kWorker),
|
||||||
GetContentClient()
|
GetContentClient()
|
||||||
->renderer()
|
->renderer()
|
||||||
->CreateWebSocketHandshakeThrottleProvider());
|
->CreateWebSocketHandshakeThrottleProvider(),
|
||||||
|
ChildThreadImpl::current()->thread_safe_sender());
|
||||||
|
|
||||||
worker_fetch_context->set_parent_frame_id(routing_id_);
|
worker_fetch_context->set_parent_frame_id(routing_id_);
|
||||||
worker_fetch_context->set_site_for_cookies(
|
worker_fetch_context->set_site_for_cookies(
|
||||||
|
@@ -105,7 +105,8 @@ WorkerFetchContextImpl::WorkerFetchContextImpl(
|
|||||||
direct_network_factory_info,
|
direct_network_factory_info,
|
||||||
std::unique_ptr<URLLoaderThrottleProvider> throttle_provider,
|
std::unique_ptr<URLLoaderThrottleProvider> throttle_provider,
|
||||||
std::unique_ptr<WebSocketHandshakeThrottleProvider>
|
std::unique_ptr<WebSocketHandshakeThrottleProvider>
|
||||||
websocket_handshake_throttle_provider)
|
websocket_handshake_throttle_provider,
|
||||||
|
ThreadSafeSender* thread_safe_sender)
|
||||||
: binding_(this),
|
: binding_(this),
|
||||||
service_worker_client_request_(std::move(service_worker_client_request)),
|
service_worker_client_request_(std::move(service_worker_client_request)),
|
||||||
service_worker_container_host_info_(
|
service_worker_container_host_info_(
|
||||||
@@ -113,7 +114,7 @@ WorkerFetchContextImpl::WorkerFetchContextImpl(
|
|||||||
url_loader_factory_info_(std::move(url_loader_factory_info)),
|
url_loader_factory_info_(std::move(url_loader_factory_info)),
|
||||||
direct_network_loader_factory_info_(
|
direct_network_loader_factory_info_(
|
||||||
std::move(direct_network_factory_info)),
|
std::move(direct_network_factory_info)),
|
||||||
thread_safe_sender_(ChildThreadImpl::current()->thread_safe_sender()),
|
thread_safe_sender_(thread_safe_sender),
|
||||||
throttle_provider_(std::move(throttle_provider)),
|
throttle_provider_(std::move(throttle_provider)),
|
||||||
websocket_handshake_throttle_provider_(
|
websocket_handshake_throttle_provider_(
|
||||||
std::move(websocket_handshake_throttle_provider)) {
|
std::move(websocket_handshake_throttle_provider)) {
|
||||||
@@ -132,6 +133,27 @@ void WorkerFetchContextImpl::SetTerminateSyncLoadEvent(
|
|||||||
terminate_sync_load_event_ = terminate_sync_load_event;
|
terminate_sync_load_event_ = terminate_sync_load_event;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<blink::WebWorkerFetchContext>
|
||||||
|
WorkerFetchContextImpl::CloneForNestedWorker() {
|
||||||
|
// TODO(japhet?): This doens't plumb service worker state to nested workers,
|
||||||
|
// because dedicated workers in service worker-controlled documents are
|
||||||
|
// currently not spec compliant and we don't want to propagate the wrong
|
||||||
|
// behavior. See https://crbug.com/731604
|
||||||
|
auto new_context = std::make_unique<WorkerFetchContextImpl>(
|
||||||
|
mojom::ServiceWorkerWorkerClientRequest(),
|
||||||
|
mojom::ServiceWorkerContainerHostPtrInfo(),
|
||||||
|
shared_url_loader_factory_->Clone(),
|
||||||
|
direct_network_loader_factory_->Clone(),
|
||||||
|
throttle_provider_ ? throttle_provider_->Clone() : nullptr,
|
||||||
|
websocket_handshake_throttle_provider_
|
||||||
|
? websocket_handshake_throttle_provider_->Clone()
|
||||||
|
: nullptr,
|
||||||
|
thread_safe_sender_.get());
|
||||||
|
new_context->is_on_sub_frame_ = is_on_sub_frame_;
|
||||||
|
new_context->appcache_host_id_ = appcache_host_id_;
|
||||||
|
return new_context;
|
||||||
|
}
|
||||||
|
|
||||||
void WorkerFetchContextImpl::InitializeOnWorkerThread() {
|
void WorkerFetchContextImpl::InitializeOnWorkerThread() {
|
||||||
DCHECK(!resource_dispatcher_);
|
DCHECK(!resource_dispatcher_);
|
||||||
DCHECK(!binding_.is_bound());
|
DCHECK(!binding_.is_bound());
|
||||||
|
@@ -53,10 +53,12 @@ class WorkerFetchContextImpl : public blink::WebWorkerFetchContext,
|
|||||||
direct_network_factory_info,
|
direct_network_factory_info,
|
||||||
std::unique_ptr<URLLoaderThrottleProvider> throttle_provider,
|
std::unique_ptr<URLLoaderThrottleProvider> throttle_provider,
|
||||||
std::unique_ptr<WebSocketHandshakeThrottleProvider>
|
std::unique_ptr<WebSocketHandshakeThrottleProvider>
|
||||||
websocket_handshake_throttle_provider);
|
websocket_handshake_throttle_provider,
|
||||||
|
ThreadSafeSender* thread_safe_sender);
|
||||||
~WorkerFetchContextImpl() override;
|
~WorkerFetchContextImpl() override;
|
||||||
|
|
||||||
// blink::WebWorkerFetchContext implementation:
|
// blink::WebWorkerFetchContext implementation:
|
||||||
|
std::unique_ptr<blink::WebWorkerFetchContext> CloneForNestedWorker() override;
|
||||||
void SetTerminateSyncLoadEvent(base::WaitableEvent*) override;
|
void SetTerminateSyncLoadEvent(base::WaitableEvent*) override;
|
||||||
void InitializeOnWorkerThread() override;
|
void InitializeOnWorkerThread() override;
|
||||||
std::unique_ptr<blink::WebURLLoaderFactory> CreateURLLoaderFactory() override;
|
std::unique_ptr<blink::WebURLLoaderFactory> CreateURLLoaderFactory() override;
|
||||||
|
@@ -346,7 +346,8 @@ EmbeddedSharedWorkerStub::CreateWorkerFetchContext(
|
|||||||
URLLoaderThrottleProviderType::kWorker),
|
URLLoaderThrottleProviderType::kWorker),
|
||||||
GetContentClient()
|
GetContentClient()
|
||||||
->renderer()
|
->renderer()
|
||||||
->CreateWebSocketHandshakeThrottleProvider());
|
->CreateWebSocketHandshakeThrottleProvider(),
|
||||||
|
ChildThreadImpl::current()->thread_safe_sender());
|
||||||
|
|
||||||
// TODO(horo): To get the correct first_party_to_cookies for the shared
|
// TODO(horo): To get the correct first_party_to_cookies for the shared
|
||||||
// worker, we need to check the all documents bounded by the shared worker.
|
// worker, we need to check the all documents bounded by the shared worker.
|
||||||
|
@@ -73,6 +73,11 @@ class TestWebSocketHandshakeThrottle
|
|||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
std::unique_ptr<content::WebSocketHandshakeThrottleProvider>
|
||||||
|
TestWebSocketHandshakeThrottleProvider::Clone() {
|
||||||
|
return std::make_unique<TestWebSocketHandshakeThrottleProvider>();
|
||||||
|
}
|
||||||
|
|
||||||
std::unique_ptr<blink::WebSocketHandshakeThrottle>
|
std::unique_ptr<blink::WebSocketHandshakeThrottle>
|
||||||
TestWebSocketHandshakeThrottleProvider::CreateThrottle(int render_frame_id) {
|
TestWebSocketHandshakeThrottleProvider::CreateThrottle(int render_frame_id) {
|
||||||
return std::make_unique<TestWebSocketHandshakeThrottle>();
|
return std::make_unique<TestWebSocketHandshakeThrottle>();
|
||||||
|
@@ -18,6 +18,7 @@ class TestWebSocketHandshakeThrottleProvider
|
|||||||
TestWebSocketHandshakeThrottleProvider() = default;
|
TestWebSocketHandshakeThrottleProvider() = default;
|
||||||
~TestWebSocketHandshakeThrottleProvider() override = default;
|
~TestWebSocketHandshakeThrottleProvider() override = default;
|
||||||
|
|
||||||
|
std::unique_ptr<content::WebSocketHandshakeThrottleProvider> Clone() override;
|
||||||
std::unique_ptr<blink::WebSocketHandshakeThrottle> CreateThrottle(
|
std::unique_ptr<blink::WebSocketHandshakeThrottle> CreateThrottle(
|
||||||
int render_frame_id) override;
|
int render_frame_id) override;
|
||||||
|
|
||||||
|
@@ -32,6 +32,11 @@ class WebWorkerFetchContext {
|
|||||||
public:
|
public:
|
||||||
virtual ~WebWorkerFetchContext() = default;
|
virtual ~WebWorkerFetchContext() = default;
|
||||||
|
|
||||||
|
// Used to copy a worker fetch context between worker threads.
|
||||||
|
virtual std::unique_ptr<WebWorkerFetchContext> CloneForNestedWorker() {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
// Set a raw pointer of a WaitableEvent which will be signaled from the main
|
// Set a raw pointer of a WaitableEvent which will be signaled from the main
|
||||||
// thread when the worker's GlobalScope is terminated, which will terminate
|
// thread when the worker's GlobalScope is terminated, which will terminate
|
||||||
// sync loading requests on the worker thread. It is guaranteed that the
|
// sync loading requests on the worker thread. It is guaranteed that the
|
||||||
|
@@ -110,6 +110,10 @@ class WorkerFetchContext final : public BaseFetchContext {
|
|||||||
ResourceRequest&) override;
|
ResourceRequest&) override;
|
||||||
scoped_refptr<base::SingleThreadTaskRunner> GetLoadingTaskRunner() override;
|
scoped_refptr<base::SingleThreadTaskRunner> GetLoadingTaskRunner() override;
|
||||||
|
|
||||||
|
WebWorkerFetchContext* GetWebWorkerFetchContext() {
|
||||||
|
return web_context_.get();
|
||||||
|
}
|
||||||
|
|
||||||
void Trace(blink::Visitor*) override;
|
void Trace(blink::Visitor*) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@@ -76,9 +76,13 @@ void ThreadedMessagingProxyBase::InitializeWorkerThread(
|
|||||||
GetExecutionContext()->Fetcher()->Context().ApplicationCacheHostID());
|
GetExecutionContext()->Fetcher()->Context().ApplicationCacheHostID());
|
||||||
web_worker_fetch_context->SetIsOnSubframe(web_frame != web_frame->Top());
|
web_worker_fetch_context->SetIsOnSubframe(web_frame != web_frame->Top());
|
||||||
}
|
}
|
||||||
|
} else if (execution_context_->IsWorkerGlobalScope()) {
|
||||||
|
web_worker_fetch_context =
|
||||||
|
static_cast<WorkerFetchContext&>(
|
||||||
|
ToWorkerGlobalScope(execution_context_)->Fetcher()->Context())
|
||||||
|
.GetWebWorkerFetchContext()
|
||||||
|
->CloneForNestedWorker();
|
||||||
}
|
}
|
||||||
// TODO(japhet): Add a way to clone a WebWorkerFetchContext between worker
|
|
||||||
// threads for nested workers.
|
|
||||||
|
|
||||||
if (web_worker_fetch_context) {
|
if (web_worker_fetch_context) {
|
||||||
web_worker_fetch_context->SetTerminateSyncLoadEvent(
|
web_worker_fetch_context->SetTerminateSyncLoadEvent(
|
||||||
|
Reference in New Issue
Block a user