Commit 6fec749f authored by Kenichi Ishibashi's avatar Kenichi Ishibashi Committed by Commit Bot

service worker: Reduce direct NewResourceId() calls in tests

* Let WriteToDiskCache{A,S}sync() assign resource ID internally
* Add WriteToDiskCacheWithIdSync() that works as the same as the
  previous WriteToDiskCacheSync()

NewResourceId() call will become async once we move ServiceWorkerStorage
to the storage service. This CL reduces NewResourceId() calls so that
we don't have to make all call sites async in the future.

Bug: 1046335
Change-Id: I9ad57f8920bd5e157bd4ba8262699f72148b5bac
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2035637
Commit-Queue: Kenichi Ishibashi <bashi@chromium.org>
Reviewed-by: default avatarMakoto Shimazu <shimazu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#738768}
parent 2462b3a5
...@@ -177,9 +177,8 @@ void EmbeddedWorkerTestHelper::PopulateScriptCacheMap( ...@@ -177,9 +177,8 @@ void EmbeddedWorkerTestHelper::PopulateScriptCacheMap(
// Add a dummy ResourceRecord for the main script to the script cache map of // Add a dummy ResourceRecord for the main script to the script cache map of
// the ServiceWorkerVersion. // the ServiceWorkerVersion.
WriteToDiskCacheAsync( WriteToDiskCacheAsync(
context()->storage(), version->script_url(), context()->storage(), version->script_url(), {} /* headers */,
context()->storage()->NewResourceId(), {} /* headers */, "I'm a body", "I'm a body", "I'm a meta data",
"I'm a meta data",
base::BindOnce( base::BindOnce(
[](scoped_refptr<ServiceWorkerVersion> version, [](scoped_refptr<ServiceWorkerVersion> version,
base::OnceClosure callback, base::OnceClosure callback,
......
...@@ -109,9 +109,8 @@ class ServiceWorkerControlleeRequestHandlerTest : public testing::Test { ...@@ -109,9 +109,8 @@ class ServiceWorkerControlleeRequestHandlerTest : public testing::Test {
std::vector<ServiceWorkerDatabase::ResourceRecord> records; std::vector<ServiceWorkerDatabase::ResourceRecord> records;
records.push_back(WriteToDiskCacheSync( records.push_back(WriteToDiskCacheSync(
context()->storage(), version_->script_url(), context()->storage(), version_->script_url(), {} /* headers */,
context()->storage()->NewResourceId(), {} /* headers */, "I'm a body", "I'm a body", "I'm a meta data"));
"I'm a meta data"));
version_->script_cache_map()->SetResources(records); version_->script_cache_map()->SetResources(records);
version_->SetMainScriptHttpResponseInfo( version_->SetMainScriptHttpResponseInfo(
EmbeddedWorkerTestHelper::CreateHttpResponseInfo()); EmbeddedWorkerTestHelper::CreateHttpResponseInfo());
......
...@@ -93,8 +93,8 @@ class ExpectedScriptInfo { ...@@ -93,8 +93,8 @@ class ExpectedScriptInfo {
ServiceWorkerDatabase::ResourceRecord WriteToDiskCache( ServiceWorkerDatabase::ResourceRecord WriteToDiskCache(
ServiceWorkerStorage* storage) const { ServiceWorkerStorage* storage) const {
return ::content::WriteToDiskCacheSync(storage, script_url_, resource_id_, return ::content::WriteToDiskCacheWithIdSync(
headers_, body_, meta_data_); storage, script_url_, resource_id_, headers_, body_, meta_data_);
} }
void CheckIfIdentical( void CheckIfIdentical(
......
...@@ -347,9 +347,9 @@ class ServiceWorkerNavigationLoaderTest : public testing::Test { ...@@ -347,9 +347,9 @@ class ServiceWorkerNavigationLoaderTest : public testing::Test {
registration_.get(), GURL("https://example.com/service_worker.js"), registration_.get(), GURL("https://example.com/service_worker.js"),
blink::mojom::ScriptType::kClassic); blink::mojom::ScriptType::kClassic);
std::vector<ServiceWorkerDatabase::ResourceRecord> records; std::vector<ServiceWorkerDatabase::ResourceRecord> records;
records.push_back(WriteToDiskCacheSync( records.push_back(WriteToDiskCacheSync(storage(), version_->script_url(),
storage(), version_->script_url(), storage()->NewResourceId(), {} /* headers */, "I'm the body",
{} /* headers */, "I'm the body", "I'm the meta data")); "I'm the meta data"));
version_->script_cache_map()->SetResources(records); version_->script_cache_map()->SetResources(records);
version_->set_fetch_handler_existence( version_->set_fetch_handler_existence(
ServiceWorkerVersion::FetchHandlerExistence::EXISTS); ServiceWorkerVersion::FetchHandlerExistence::EXISTS);
......
...@@ -406,8 +406,7 @@ class ServiceWorkerActivationTest : public ServiceWorkerRegistrationTest, ...@@ -406,8 +406,7 @@ class ServiceWorkerActivationTest : public ServiceWorkerRegistrationTest,
std::vector<ServiceWorkerDatabase::ResourceRecord> records_1; std::vector<ServiceWorkerDatabase::ResourceRecord> records_1;
records_1.push_back(WriteToDiskCacheSync( records_1.push_back(WriteToDiskCacheSync(
helper_->context()->storage(), version_1->script_url(), helper_->context()->storage(), version_1->script_url(),
helper_->context()->storage()->NewResourceId(), {} /* headers */, {} /* headers */, "I'm the body", "I'm the meta data"));
"I'm the body", "I'm the meta data"));
version_1->script_cache_map()->SetResources(records_1); version_1->script_cache_map()->SetResources(records_1);
version_1->SetMainScriptHttpResponseInfo( version_1->SetMainScriptHttpResponseInfo(
EmbeddedWorkerTestHelper::CreateHttpResponseInfo()); EmbeddedWorkerTestHelper::CreateHttpResponseInfo());
...@@ -448,8 +447,7 @@ class ServiceWorkerActivationTest : public ServiceWorkerRegistrationTest, ...@@ -448,8 +447,7 @@ class ServiceWorkerActivationTest : public ServiceWorkerRegistrationTest,
std::vector<ServiceWorkerDatabase::ResourceRecord> records_2; std::vector<ServiceWorkerDatabase::ResourceRecord> records_2;
records_2.push_back(WriteToDiskCacheSync( records_2.push_back(WriteToDiskCacheSync(
helper_->context()->storage(), version_2->script_url(), helper_->context()->storage(), version_2->script_url(),
helper_->context()->storage()->NewResourceId(), {} /* headers */, {} /* headers */, "I'm the body", "I'm the meta data"));
"I'm the body", "I'm the meta data"));
version_2->script_cache_map()->SetResources(records_2); version_2->script_cache_map()->SetResources(records_2);
version_2->SetMainScriptHttpResponseInfo( version_2->SetMainScriptHttpResponseInfo(
EmbeddedWorkerTestHelper::CreateHttpResponseInfo()); EmbeddedWorkerTestHelper::CreateHttpResponseInfo());
...@@ -892,9 +890,9 @@ class ServiceWorkerRegistrationObjectHostTest ...@@ -892,9 +890,9 @@ class ServiceWorkerRegistrationObjectHostTest
context()->registry()->CreateNewVersion( context()->registry()->CreateNewVersion(
registration, script_url, blink::mojom::ScriptType::kClassic); registration, script_url, blink::mojom::ScriptType::kClassic);
std::vector<ServiceWorkerDatabase::ResourceRecord> records; std::vector<ServiceWorkerDatabase::ResourceRecord> records;
records.push_back(WriteToDiskCacheSync( records.push_back(WriteToDiskCacheSync(storage(), version->script_url(),
storage(), version->script_url(), storage()->NewResourceId(), {} /* headers */, "I'm the body",
{} /* headers */, "I'm the body", "I'm the meta data")); "I'm the meta data"));
version->script_cache_map()->SetResources(records); version->script_cache_map()->SetResources(records);
version->SetMainScriptHttpResponseInfo( version->SetMainScriptHttpResponseInfo(
EmbeddedWorkerTestHelper::CreateHttpResponseInfo()); EmbeddedWorkerTestHelper::CreateHttpResponseInfo());
......
...@@ -132,8 +132,9 @@ class ServiceWorkerScriptLoaderFactoryCopyResumeTest ...@@ -132,8 +132,9 @@ class ServiceWorkerScriptLoaderFactoryCopyResumeTest
void SetUp() override { void SetUp() override {
ServiceWorkerScriptLoaderFactoryTest::SetUp(); ServiceWorkerScriptLoaderFactoryTest::SetUp();
WriteToDiskCacheSync(helper_->context()->storage(), script_url_, WriteToDiskCacheWithIdSync(helper_->context()->storage(), script_url_,
kOldResourceId, kOldHeaders, kOldData, std::string()); kOldResourceId, kOldHeaders, kOldData,
std::string());
} }
void CheckResponse(const std::string& expected_body) { void CheckResponse(const std::string& expected_body) {
......
...@@ -195,6 +195,57 @@ void OnWriteBodyInfoToDiskCache( ...@@ -195,6 +195,57 @@ void OnWriteBodyInfoToDiskCache(
meta_data, std::move(callback))); meta_data, std::move(callback)));
} }
void WriteToDiskCacheAsyncInternal(
const GURL& script_url,
const std::vector<std::pair<std::string, std::string>>& headers,
const std::string& body,
const std::string& meta_data,
std::unique_ptr<ServiceWorkerResponseWriter> body_writer,
std::unique_ptr<ServiceWorkerResponseMetadataWriter> metadata_writer,
WriteToDiskCacheCallback callback) {
std::unique_ptr<net::HttpResponseInfo> http_info =
std::make_unique<net::HttpResponseInfo>();
http_info->request_time = base::Time::Now();
http_info->response_time = base::Time::Now();
http_info->headers =
base::MakeRefCounted<net::HttpResponseHeaders>("HTTP/1.0 200 OK\0\0");
for (const auto& header : headers)
http_info->headers->AddHeader(header.first + ": " + header.second);
scoped_refptr<HttpResponseInfoIOBuffer> info_buffer =
base::MakeRefCounted<HttpResponseInfoIOBuffer>(std::move(http_info));
info_buffer->response_data_size = body.size();
ServiceWorkerResponseWriter* writer_rawptr = body_writer.get();
writer_rawptr->WriteInfo(
info_buffer.get(),
base::BindOnce(&OnWriteBodyInfoToDiskCache, std::move(body_writer),
std::move(metadata_writer), script_url, body, meta_data,
std::move(callback)));
}
ServiceWorkerDatabase::ResourceRecord WriteToDiskCacheSyncInternal(
const GURL& script_url,
const std::vector<std::pair<std::string, std::string>>& headers,
const std::string& body,
const std::string& meta_data,
std::unique_ptr<ServiceWorkerResponseWriter> body_writer,
std::unique_ptr<ServiceWorkerResponseMetadataWriter> metadata_writer) {
ServiceWorkerDatabase::ResourceRecord record;
base::RunLoop loop;
WriteToDiskCacheAsyncInternal(
script_url, headers, body, meta_data, std::move(body_writer),
std::move(metadata_writer),
base::BindLambdaForTesting(
[&](ServiceWorkerDatabase::ResourceRecord result) {
record = result;
loop.Quit();
}));
loop.Run();
return record;
}
} // namespace } // namespace
ServiceWorkerRemoteProviderEndpoint::ServiceWorkerRemoteProviderEndpoint() {} ServiceWorkerRemoteProviderEndpoint::ServiceWorkerRemoteProviderEndpoint() {}
...@@ -367,60 +418,51 @@ CreateServiceWorkerRegistrationAndVersion(ServiceWorkerContextCore* context, ...@@ -367,60 +418,51 @@ CreateServiceWorkerRegistrationAndVersion(ServiceWorkerContextCore* context,
return registration; return registration;
} }
ServiceWorkerDatabase::ResourceRecord WriteToDiskCacheSync( ServiceWorkerDatabase::ResourceRecord WriteToDiskCacheWithIdSync(
ServiceWorkerStorage* storage, ServiceWorkerStorage* storage,
const GURL& script_url, const GURL& script_url,
int64_t resource_id, int64_t resource_id,
const std::vector<std::pair<std::string, std::string>>& headers, const std::vector<std::pair<std::string, std::string>>& headers,
const std::string& body, const std::string& body,
const std::string& meta_data) { const std::string& meta_data) {
ServiceWorkerDatabase::ResourceRecord record; std::unique_ptr<ServiceWorkerResponseWriter> body_writer =
storage->CreateResponseWriter(resource_id);
base::RunLoop loop; std::unique_ptr<ServiceWorkerResponseMetadataWriter> metadata_writer =
WriteToDiskCacheAsync( storage->CreateResponseMetadataWriter(resource_id);
storage, script_url, resource_id, headers, body, meta_data, return WriteToDiskCacheSyncInternal(script_url, headers, body, meta_data,
base::BindOnce( std::move(body_writer),
[](ServiceWorkerDatabase::ResourceRecord* out_record, std::move(metadata_writer));
base::OnceClosure quit_closure, }
ServiceWorkerDatabase::ResourceRecord result) {
*out_record = result;
std::move(quit_closure).Run();
},
&record, loop.QuitClosure()));
loop.Run();
return record; ServiceWorkerDatabase::ResourceRecord WriteToDiskCacheSync(
ServiceWorkerStorage* storage,
const GURL& script_url,
const std::vector<std::pair<std::string, std::string>>& headers,
const std::string& body,
const std::string& meta_data) {
std::unique_ptr<ServiceWorkerResponseWriter> body_writer =
CreateNewResponseWriterSync(storage);
std::unique_ptr<ServiceWorkerResponseMetadataWriter> metadata_writer =
storage->CreateResponseMetadataWriter(body_writer->response_id());
return WriteToDiskCacheSyncInternal(script_url, headers, body, meta_data,
std::move(body_writer),
std::move(metadata_writer));
} }
void WriteToDiskCacheAsync( void WriteToDiskCacheAsync(
ServiceWorkerStorage* storage, ServiceWorkerStorage* storage,
const GURL& script_url, const GURL& script_url,
int64_t resource_id,
const std::vector<std::pair<std::string, std::string>>& headers, const std::vector<std::pair<std::string, std::string>>& headers,
const std::string& body, const std::string& body,
const std::string& meta_data, const std::string& meta_data,
WriteToDiskCacheCallback callback) { WriteToDiskCacheCallback callback) {
std::unique_ptr<net::HttpResponseInfo> http_info = std::unique_ptr<ServiceWorkerResponseWriter> body_writer =
std::make_unique<net::HttpResponseInfo>(); CreateNewResponseWriterSync(storage);
http_info->request_time = base::Time::Now(); std::unique_ptr<ServiceWorkerResponseMetadataWriter> metadata_writer =
http_info->response_time = base::Time::Now(); storage->CreateResponseMetadataWriter(body_writer->response_id());
http_info->headers = WriteToDiskCacheAsyncInternal(
base::MakeRefCounted<net::HttpResponseHeaders>("HTTP/1.0 200 OK\0\0"); script_url, headers, body, meta_data, std::move(body_writer),
for (const auto& header : headers) std::move(metadata_writer), std::move(callback));
http_info->headers->AddHeader(header.first + ": " + header.second);
auto body_writer = storage->CreateResponseWriter(resource_id);
auto metadata_writer = storage->CreateResponseMetadataWriter(resource_id);
scoped_refptr<HttpResponseInfoIOBuffer> info_buffer =
base::MakeRefCounted<HttpResponseInfoIOBuffer>(std::move(http_info));
info_buffer->response_data_size = body.size();
ServiceWorkerResponseWriter* writer_rawptr = body_writer.get();
writer_rawptr->WriteInfo(
info_buffer.get(),
base::BindOnce(&OnWriteBodyInfoToDiskCache, std::move(body_writer),
std::move(metadata_writer), script_url, body, meta_data,
std::move(callback)));
} }
std::unique_ptr<ServiceWorkerResponseWriter> CreateNewResponseWriterSync( std::unique_ptr<ServiceWorkerResponseWriter> CreateNewResponseWriterSync(
......
...@@ -154,7 +154,7 @@ CreateServiceWorkerRegistrationAndVersion(ServiceWorkerContextCore* context, ...@@ -154,7 +154,7 @@ CreateServiceWorkerRegistrationAndVersion(ServiceWorkerContextCore* context,
// base::RunLoop since base::RunLoop is used internally to wait for completing // base::RunLoop since base::RunLoop is used internally to wait for completing
// all of tasks. If it's in another base::RunLoop, consider to use // all of tasks. If it's in another base::RunLoop, consider to use
// WriteToDiskCacheAsync(). // WriteToDiskCacheAsync().
ServiceWorkerDatabase::ResourceRecord WriteToDiskCacheSync( ServiceWorkerDatabase::ResourceRecord WriteToDiskCacheWithIdSync(
ServiceWorkerStorage* storage, ServiceWorkerStorage* storage,
const GURL& script_url, const GURL& script_url,
int64_t resource_id, int64_t resource_id,
...@@ -162,6 +162,15 @@ ServiceWorkerDatabase::ResourceRecord WriteToDiskCacheSync( ...@@ -162,6 +162,15 @@ ServiceWorkerDatabase::ResourceRecord WriteToDiskCacheSync(
const std::string& body, const std::string& body,
const std::string& meta_data); const std::string& meta_data);
// Similar to WriteToDiskCacheWithIdSync() but instead of taking a resource id,
// this assigns a new resource ID internally.
ServiceWorkerDatabase::ResourceRecord WriteToDiskCacheSync(
ServiceWorkerStorage* storage,
const GURL& script_url,
const std::vector<std::pair<std::string, std::string>>& headers,
const std::string& body,
const std::string& meta_data);
using WriteToDiskCacheCallback = using WriteToDiskCacheCallback =
base::OnceCallback<void(ServiceWorkerDatabase::ResourceRecord record)>; base::OnceCallback<void(ServiceWorkerDatabase::ResourceRecord record)>;
...@@ -172,7 +181,6 @@ using WriteToDiskCacheCallback = ...@@ -172,7 +181,6 @@ using WriteToDiskCacheCallback =
void WriteToDiskCacheAsync( void WriteToDiskCacheAsync(
ServiceWorkerStorage* storage, ServiceWorkerStorage* storage,
const GURL& script_url, const GURL& script_url,
int64_t resource_id,
const std::vector<std::pair<std::string, std::string>>& headers, const std::vector<std::pair<std::string, std::string>>& headers,
const std::string& body, const std::string& body,
const std::string& meta_data, const std::string& meta_data,
......
...@@ -84,8 +84,8 @@ class ServiceWorkerUpdatedScriptLoaderTest : public testing::Test { ...@@ -84,8 +84,8 @@ class ServiceWorkerUpdatedScriptLoaderTest : public testing::Test {
SetUpRegistration(kScriptURL); SetUpRegistration(kScriptURL);
// Create the old script resource in storage. // Create the old script resource in storage.
WriteToDiskCacheSync(context()->storage(), kScriptURL, kOldResourceId, WriteToDiskCacheWithIdSync(context()->storage(), kScriptURL, kOldResourceId,
kOldHeaders, kOldData, std::string()); kOldHeaders, kOldData, std::string());
} }
// Sets up ServiceWorkerRegistration and ServiceWorkerVersion. This should be // Sets up ServiceWorkerRegistration and ServiceWorkerVersion. This should be
......
...@@ -100,7 +100,7 @@ class ServiceWorkerVersionTest : public testing::Test { ...@@ -100,7 +100,7 @@ class ServiceWorkerVersionTest : public testing::Test {
blink::mojom::ScriptType::kClassic); blink::mojom::ScriptType::kClassic);
EXPECT_EQ(url::Origin::Create(scope_), version_->script_origin()); EXPECT_EQ(url::Origin::Create(scope_), version_->script_origin());
std::vector<ServiceWorkerDatabase::ResourceRecord> records; std::vector<ServiceWorkerDatabase::ResourceRecord> records;
records.push_back(WriteToDiskCacheSync( records.push_back(WriteToDiskCacheWithIdSync(
helper_->context()->storage(), version_->script_url(), 10, helper_->context()->storage(), version_->script_url(), 10,
{} /* headers */, "I'm a body", "I'm a meta data")); {} /* headers */, "I'm a body", "I'm a meta data"));
version_->script_cache_map()->SetResources(records); version_->script_cache_map()->SetResources(records);
......
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