blob: a47206653b6e67457b33ebcc92d44ccc7747c830 [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/public/test/service_worker_host_interceptor.h"
#include <utility>
#include "base/functional/callback.h"
#include "base/location.h"
#include "base/run_loop.h"
#include "content/browser/service_worker/service_worker_context_wrapper.h"
#include "content/browser/service_worker/service_worker_version.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/storage_partition.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
namespace content {
ServiceWorkerHostInterceptor::ServiceWorkerHostInterceptor() = default;
ServiceWorkerHostInterceptor::~ServiceWorkerHostInterceptor() = default;
blink::ServiceWorkerStatusCode
ServiceWorkerHostInterceptor::InterceptServiceWorkerHostWithScope(
BrowserContext* browser_context,
const GURL& scope,
int* service_worker_process_id_out) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
scoped_refptr<ServiceWorkerContextWrapper> context =
static_cast<ServiceWorkerContextWrapper*>(
browser_context->GetDefaultStoragePartition()
->GetServiceWorkerContext());
base::RunLoop run_loop;
FindRegistration(context, scope, run_loop.QuitClosure());
run_loop.Run();
*service_worker_process_id_out = service_worker_process_id_;
return status_;
}
bool ServiceWorkerHostInterceptor::WillOpenPaymentHandlerWindow(GURL* url) {
return true;
}
blink::mojom::ServiceWorkerHost*
ServiceWorkerHostInterceptor::GetForwardingInterface() {
return service_worker_version_;
}
void ServiceWorkerHostInterceptor::OpenPaymentHandlerWindow(
const GURL& url,
OpenPaymentHandlerWindowCallback callback) {
GURL url_copy = url;
if (WillOpenPaymentHandlerWindow(&url_copy)) {
GetForwardingInterface()->OpenPaymentHandlerWindow(url_copy,
std::move(callback));
}
}
void ServiceWorkerHostInterceptor::FindRegistration(
scoped_refptr<ServiceWorkerContextWrapper> context,
const GURL& scope,
base::OnceClosure done) {
context->FindRegistrationForScope(
scope, blink::StorageKey::CreateFirstParty(url::Origin::Create(scope)),
base::BindOnce(&ServiceWorkerHostInterceptor::OnFoundRegistration,
base::Unretained(this), std::move(done)));
}
void ServiceWorkerHostInterceptor::OnFoundRegistration(
base::OnceClosure done,
blink::ServiceWorkerStatusCode status,
scoped_refptr<ServiceWorkerRegistration> registration) {
status_ = status;
service_worker_version_ = registration->active_version();
service_worker_process_id_ =
service_worker_version_->embedded_worker()->process_id();
forwarding_interface_ =
service_worker_version_->service_worker_host_receiver_for_testing()
.SwapImplForTesting(this);
std::move(done).Run();
}
} // namespace content