Commit 9603052b authored by Yutaka Hirano's avatar Yutaka Hirano Committed by Chromium LUCI CQ

Count use of Service Worker network fallback with used request body

In order to fix crbug.com/1167013, we need to introduce a breaking
change. Introduce a use counter to estimate the size of the impact.

Bug: 1167014
Change-Id: I6f525aa8ec38fa1fa964f4ede3d1f55863d705d2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2631550
Commit-Queue: Yutaka Hirano <yhirano@chromium.org>
Auto-Submit: Yutaka Hirano <yhirano@chromium.org>
Reviewed-by: default avatarMakoto Shimazu <shimazu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#844027}
parent acd5d8f0
...@@ -3092,6 +3092,7 @@ enum WebFeature { ...@@ -3092,6 +3092,7 @@ enum WebFeature {
kAddressSpaceUnknownSecureContextNavigatedToPrivate = 3771, kAddressSpaceUnknownSecureContextNavigatedToPrivate = 3771,
kAddressSpaceUnknownNonSecureContextNavigatedToPrivate = 3772, kAddressSpaceUnknownNonSecureContextNavigatedToPrivate = 3772,
kRTCPeerConnectionSdpSemanticsPlanB = 3773, kRTCPeerConnectionSdpSemanticsPlanB = 3773,
kFetchRespondWithNoResponseWithUsedRequestBody = 3774,
// Add new features immediately above this line. Don't change assigned // Add new features immediately above this line. Don't change assigned
// numbers of any item, and don't reuse removed slots. // numbers of any item, and don't reuse removed slots.
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/core/fetch/body_stream_buffer.h" #include "third_party/blink/renderer/core/fetch/body_stream_buffer.h"
#include "third_party/blink/renderer/core/inspector/console_message.h" #include "third_party/blink/renderer/core/inspector/console_message.h"
#include "third_party/blink/renderer/core/streams/readable_stream.h"
#include "third_party/blink/renderer/modules/service_worker/cross_origin_resource_policy_checker.h" #include "third_party/blink/renderer/modules/service_worker/cross_origin_resource_policy_checker.h"
#include "third_party/blink/renderer/modules/service_worker/fetch_event.h" #include "third_party/blink/renderer/modules/service_worker/fetch_event.h"
#include "third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h" #include "third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h"
...@@ -375,6 +376,11 @@ void FetchRespondWithObserver::OnResponseFulfilled( ...@@ -375,6 +376,11 @@ void FetchRespondWithObserver::OnResponseFulfilled(
void FetchRespondWithObserver::OnNoResponse() { void FetchRespondWithObserver::OnNoResponse() {
DCHECK(GetExecutionContext()); DCHECK(GetExecutionContext());
if (request_body_stream_ && (request_body_stream_->IsLocked() ||
request_body_stream_->IsDisturbed())) {
GetExecutionContext()->CountUse(
WebFeature::kFetchRespondWithNoResponseWithUsedRequestBody);
}
ServiceWorkerGlobalScope* service_worker_global_scope = ServiceWorkerGlobalScope* service_worker_global_scope =
To<ServiceWorkerGlobalScope>(GetExecutionContext()); To<ServiceWorkerGlobalScope>(GetExecutionContext());
service_worker_global_scope->RespondToFetchEventWithNoResponse( service_worker_global_scope->RespondToFetchEventWithNoResponse(
...@@ -382,6 +388,17 @@ void FetchRespondWithObserver::OnNoResponse() { ...@@ -382,6 +388,17 @@ void FetchRespondWithObserver::OnNoResponse() {
event_->ResolveHandledPromise(); event_->ResolveHandledPromise();
} }
void FetchRespondWithObserver::SetEvent(FetchEvent* event) {
DCHECK(!event_);
DCHECK(!request_body_stream_);
event_ = event;
// We don't use Body::body() in order to avoid accidental CountUse calls.
BodyStreamBuffer* body_buffer = event_->request()->BodyBuffer();
if (body_buffer) {
request_body_stream_ = body_buffer->Stream();
}
}
FetchRespondWithObserver::FetchRespondWithObserver( FetchRespondWithObserver::FetchRespondWithObserver(
ExecutionContext* context, ExecutionContext* context,
int fetch_event_id, int fetch_event_id,
...@@ -399,6 +416,7 @@ FetchRespondWithObserver::FetchRespondWithObserver( ...@@ -399,6 +416,7 @@ FetchRespondWithObserver::FetchRespondWithObserver(
void FetchRespondWithObserver::Trace(Visitor* visitor) const { void FetchRespondWithObserver::Trace(Visitor* visitor) const {
visitor->Trace(event_); visitor->Trace(event_);
visitor->Trace(request_body_stream_);
RespondWithObserver::Trace(visitor); RespondWithObserver::Trace(visitor);
} }
......
...@@ -18,6 +18,7 @@ namespace blink { ...@@ -18,6 +18,7 @@ namespace blink {
class CrossOriginResourcePolicyChecker; class CrossOriginResourcePolicyChecker;
class ExecutionContext; class ExecutionContext;
class FetchEvent; class FetchEvent;
class ReadableStream;
class ScriptValue; class ScriptValue;
class WaitUntilObserver; class WaitUntilObserver;
...@@ -47,10 +48,7 @@ class MODULES_EXPORT FetchRespondWithObserver : public RespondWithObserver { ...@@ -47,10 +48,7 @@ class MODULES_EXPORT FetchRespondWithObserver : public RespondWithObserver {
const char* property_name) override; const char* property_name) override;
void OnNoResponse() override; void OnNoResponse() override;
void SetEvent(FetchEvent* event) { void SetEvent(FetchEvent* event);
DCHECK(!event_);
event_ = event;
}
void Trace(Visitor*) const override; void Trace(Visitor*) const override;
...@@ -61,6 +59,7 @@ class MODULES_EXPORT FetchRespondWithObserver : public RespondWithObserver { ...@@ -61,6 +59,7 @@ class MODULES_EXPORT FetchRespondWithObserver : public RespondWithObserver {
const mojom::RequestContextFrameType frame_type_; const mojom::RequestContextFrameType frame_type_;
const network::mojom::RequestDestination request_destination_; const network::mojom::RequestDestination request_destination_;
Member<FetchEvent> event_; Member<FetchEvent> event_;
Member<ReadableStream> request_body_stream_;
base::WeakPtr<CrossOriginResourcePolicyChecker> corp_checker_; base::WeakPtr<CrossOriginResourcePolicyChecker> corp_checker_;
scoped_refptr<base::SingleThreadTaskRunner> task_runner_; scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
}; };
......
...@@ -30998,6 +30998,7 @@ Called by update_use_counter_feature_enum.py.--> ...@@ -30998,6 +30998,7 @@ Called by update_use_counter_feature_enum.py.-->
<int value="3772" <int value="3772"
label="AddressSpaceUnknownNonSecureContextNavigatedToPrivate"/> label="AddressSpaceUnknownNonSecureContextNavigatedToPrivate"/>
<int value="3773" label="RTCPeerConnectionSdpSemanticsPlanB"/> <int value="3773" label="RTCPeerConnectionSdpSemanticsPlanB"/>
<int value="3774" label="FetchRespondWithNoResponseWithUsedRequestBody"/>
</enum> </enum>
<enum name="FeaturePolicyAllowlistType"> <enum name="FeaturePolicyAllowlistType">
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