Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(231)

Unified Diff: content/browser/service_worker/service_worker_fetch_dispatcher.cc

Issue 2645493002: Increase the lifetime of Navigation Preload related objects. (Closed)
Patch Set: send abort error and fix flaky test and add abort-when-responded layouttest Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/service_worker/service_worker_fetch_dispatcher.cc
diff --git a/content/browser/service_worker/service_worker_fetch_dispatcher.cc b/content/browser/service_worker/service_worker_fetch_dispatcher.cc
index 6c712a3f8a33e330593bf560ede0d358554c9191..0522102510df3aa6de445baaaa1994e21916bdd0 100644
--- a/content/browser/service_worker/service_worker_fetch_dispatcher.cc
+++ b/content/browser/service_worker/service_worker_fetch_dispatcher.cc
@@ -75,7 +75,13 @@ class DelegatingURLLoaderClient final : public mojom::URLLoaderClient {
public:
explicit DelegatingURLLoaderClient(mojom::URLLoaderClientPtr client)
: binding_(this), client_(std::move(client)) {}
- ~DelegatingURLLoaderClient() override {}
+ ~DelegatingURLLoaderClient() override {
+ if (!completed_) {
+ ResourceRequestCompletionStatus status;
+ status.error_code = net::ERR_ABORTED;
+ client_->OnComplete(status);
+ }
+ }
void OnDataDownloaded(int64_t data_length, int64_t encoded_length) override {
client_->OnDataDownloaded(data_length, encoded_length);
@@ -99,6 +105,7 @@ class DelegatingURLLoaderClient final : public mojom::URLLoaderClient {
void OnComplete(
const ResourceRequestCompletionStatus& completion_status) override {
client_->OnComplete(completion_status);
+ completed_ = true;
}
void Bind(mojom::URLLoaderClientAssociatedPtrInfo* ptr_info,
@@ -109,6 +116,7 @@ class DelegatingURLLoaderClient final : public mojom::URLLoaderClient {
private:
mojo::AssociatedBinding<mojom::URLLoaderClient> binding_;
mojom::URLLoaderClientPtr client_;
+ bool completed_ = false;
DISALLOW_COPY_AND_ASSIGN(DelegatingURLLoaderClient);
};
@@ -167,9 +175,6 @@ ServiceWorkerMetrics::EventType FetchTypeToWaitUntilEventType(
void OnFetchEventFinished(
ServiceWorkerVersion* version,
int event_finish_id,
- mojom::URLLoaderFactoryPtr url_loader_factory,
- std::unique_ptr<mojom::URLLoader> url_loader,
- std::unique_ptr<mojom::URLLoaderClient> url_loader_client,
ServiceWorkerStatusCode status,
base::Time dispatch_event_time) {
version->FinishRequest(event_finish_id, status != SERVICE_WORKER_ERROR_ABORT,
@@ -332,15 +337,10 @@ void ServiceWorkerFetchDispatcher::DispatchFetchEvent() {
// |event_dispatcher| is owned by |version_|. So it is safe to pass the
// unretained raw pointer of |version_| to OnFetchEventFinished callback.
- // Pass |url_loader_factory_|, |url_Loader_| and |url_loader_client_| to the
- // callback to keep them alive while the FetchEvent is onging in the service
- // worker.
version_->event_dispatcher()->DispatchFetchEvent(
fetch_event_id, *request_, std::move(preload_handle_),
base::Bind(&OnFetchEventFinished, base::Unretained(version_.get()),
- event_finish_id, base::Passed(std::move(url_loader_factory_)),
- base::Passed(std::move(url_loader_)),
- base::Passed(std::move(url_loader_client_))));
+ event_finish_id));
}
void ServiceWorkerFetchDispatcher::DidFailToDispatch(
@@ -380,23 +380,23 @@ void ServiceWorkerFetchDispatcher::Complete(
fetch_callback.Run(status, fetch_result, response, version);
}
-void ServiceWorkerFetchDispatcher::MaybeStartNavigationPreload(
+bool ServiceWorkerFetchDispatcher::MaybeStartNavigationPreload(
net::URLRequest* original_request) {
if (resource_type_ != RESOURCE_TYPE_MAIN_FRAME &&
resource_type_ != RESOURCE_TYPE_SUB_FRAME) {
- return;
+ return false;
}
if (!version_->navigation_preload_state().enabled)
- return;
+ return false;
// TODO(horo): Currently NavigationPreload doesn't support request body.
if (!request_->blob_uuid.empty())
- return;
+ return false;
ServiceWorkerVersion::NavigationPreloadSupportStatus support_status =
version_->GetNavigationPreloadSupportStatus();
if (support_status !=
ServiceWorkerVersion::NavigationPreloadSupportStatus::SUPPORTED) {
- return;
+ return false;
}
ResourceRequestInfoImpl* original_info =
@@ -407,7 +407,7 @@ void ServiceWorkerFetchDispatcher::MaybeStartNavigationPreload(
} else {
DCHECK(requester_info->IsRenderer());
if (!requester_info->filter())
- return;
+ return false;
}
DCHECK(!url_loader_factory_);
@@ -471,6 +471,7 @@ void ServiceWorkerFetchDispatcher::MaybeStartNavigationPreload(
preload_handle_->url_loader = url_loader->CreateInterfacePtrAndBind();
url_loader_ = std::move(url_loader);
url_loader_client_ = std::move(url_loader_client);
+ return true;
}
ServiceWorkerMetrics::EventType ServiceWorkerFetchDispatcher::GetEventType()

Powered by Google App Engine
This is Rietveld 408576698