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 {
kAddressSpaceUnknownSecureContextNavigatedToPrivate = 3771,
kAddressSpaceUnknownNonSecureContextNavigatedToPrivate = 3772,
kRTCPeerConnectionSdpSemanticsPlanB = 3773,
kFetchRespondWithNoResponseWithUsedRequestBody = 3774,
// Add new features immediately above this line. Don't change assigned
// numbers of any item, and don't reuse removed slots.
......
......@@ -24,6 +24,7 @@
#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/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/fetch_event.h"
#include "third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h"
......@@ -375,6 +376,11 @@ void FetchRespondWithObserver::OnResponseFulfilled(
void FetchRespondWithObserver::OnNoResponse() {
DCHECK(GetExecutionContext());
if (request_body_stream_ && (request_body_stream_->IsLocked() ||
request_body_stream_->IsDisturbed())) {
GetExecutionContext()->CountUse(
WebFeature::kFetchRespondWithNoResponseWithUsedRequestBody);
}
ServiceWorkerGlobalScope* service_worker_global_scope =
To<ServiceWorkerGlobalScope>(GetExecutionContext());
service_worker_global_scope->RespondToFetchEventWithNoResponse(
......@@ -382,6 +388,17 @@ void FetchRespondWithObserver::OnNoResponse() {
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(
ExecutionContext* context,
int fetch_event_id,
......@@ -399,6 +416,7 @@ FetchRespondWithObserver::FetchRespondWithObserver(
void FetchRespondWithObserver::Trace(Visitor* visitor) const {
visitor->Trace(event_);
visitor->Trace(request_body_stream_);
RespondWithObserver::Trace(visitor);
}
......
......@@ -18,6 +18,7 @@ namespace blink {
class CrossOriginResourcePolicyChecker;
class ExecutionContext;
class FetchEvent;
class ReadableStream;
class ScriptValue;
class WaitUntilObserver;
......@@ -47,10 +48,7 @@ class MODULES_EXPORT FetchRespondWithObserver : public RespondWithObserver {
const char* property_name) override;
void OnNoResponse() override;
void SetEvent(FetchEvent* event) {
DCHECK(!event_);
event_ = event;
}
void SetEvent(FetchEvent* event);
void Trace(Visitor*) const override;
......@@ -61,6 +59,7 @@ class MODULES_EXPORT FetchRespondWithObserver : public RespondWithObserver {
const mojom::RequestContextFrameType frame_type_;
const network::mojom::RequestDestination request_destination_;
Member<FetchEvent> event_;
Member<ReadableStream> request_body_stream_;
base::WeakPtr<CrossOriginResourcePolicyChecker> corp_checker_;
scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
};
......
......@@ -30998,6 +30998,7 @@ Called by update_use_counter_feature_enum.py.-->
<int value="3772"
label="AddressSpaceUnknownNonSecureContextNavigatedToPrivate"/>
<int value="3773" label="RTCPeerConnectionSdpSemanticsPlanB"/>
<int value="3774" label="FetchRespondWithNoResponseWithUsedRequestBody"/>
</enum>
<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