Commit 2992ea9d authored by Kenichi Ishibashi's avatar Kenichi Ishibashi Committed by Commit Bot

Remove direct use of old service worker response writers

This CL replaces old writers with new mojo-based writers in tests.

Bug: 1055677
Change-Id: I68959e056092d2b6560067002b8ccfe466d8010a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2306113Reviewed-by: default avatarMakoto Shimazu <shimazu@chromium.org>
Commit-Queue: Kenichi Ishibashi <bashi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#790156}
parent dca0464f
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "base/optional.h" #include "base/optional.h"
#include "base/run_loop.h" #include "base/run_loop.h"
#include "base/stl_util.h" #include "base/stl_util.h"
#include "base/test/bind_test_util.h"
#include "base/test/metrics/histogram_tester.h" #include "base/test/metrics/histogram_tester.h"
#include "base/test/scoped_feature_list.h" #include "base/test/scoped_feature_list.h"
#include "base/test/test_simple_task_runner.h" #include "base/test/test_simple_task_runner.h"
...@@ -1171,18 +1172,11 @@ const char kHeaders[] = ...@@ -1171,18 +1172,11 @@ const char kHeaders[] =
const char kBody[] = "/* old body */"; const char kBody[] = "/* old body */";
const char kNewBody[] = "/* new body */"; const char kNewBody[] = "/* new body */";
void RunNestedUntilIdle() { void WriteResponse(
base::RunLoop(base::RunLoop::Type::kNestableTasksAllowed).RunUntilIdle(); mojo::Remote<storage::mojom::ServiceWorkerResourceWriter>& writer,
} const std::string& headers,
mojo_base::BigBuffer body) {
void OnIOComplete(int* rv_out, int rv) { int length = body.size();
*rv_out = rv;
}
void WriteResponse(ServiceWorkerResponseWriter* writer,
const std::string& headers,
IOBuffer* body,
int length) {
auto response_head = network::mojom::URLResponseHead::New(); auto response_head = network::mojom::URLResponseHead::New();
response_head->request_time = base::Time::Now(); response_head->request_time = base::Time::Now();
response_head->response_time = base::Time::Now(); response_head->response_time = base::Time::Now();
...@@ -1190,24 +1184,37 @@ void WriteResponse(ServiceWorkerResponseWriter* writer, ...@@ -1190,24 +1184,37 @@ void WriteResponse(ServiceWorkerResponseWriter* writer,
response_head->content_length = length; response_head->content_length = length;
int rv = -1234; int rv = -1234;
writer->WriteResponseHead(*response_head, length, {
base::BindOnce(&OnIOComplete, &rv)); base::RunLoop loop(base::RunLoop::Type::kNestableTasksAllowed);
RunNestedUntilIdle(); writer->WriteResponseHead(std::move(response_head),
EXPECT_LT(0, rv); base::BindLambdaForTesting([&](int result) {
rv = result;
loop.Quit();
}));
loop.Run();
EXPECT_LT(0, rv);
}
rv = -1234; rv = -1234;
writer->WriteData(body, length, base::BindOnce(&OnIOComplete, &rv)); {
RunNestedUntilIdle(); base::RunLoop loop(base::RunLoop::Type::kNestableTasksAllowed);
EXPECT_EQ(length, rv); writer->WriteData(std::move(body),
base::BindLambdaForTesting([&](int result) {
rv = result;
loop.Quit();
}));
loop.Run();
EXPECT_EQ(length, rv);
}
} }
void WriteStringResponse(ServiceWorkerResponseWriter* writer, void WriteStringResponse(
const std::string& body) { mojo::Remote<storage::mojom::ServiceWorkerResourceWriter>& writer,
scoped_refptr<IOBuffer> body_buffer = const std::string& body) {
base::MakeRefCounted<WrappedIOBuffer>(body.data()); mojo_base::BigBuffer body_buffer(base::as_bytes(base::make_span(body)));
const char kHttpHeaders[] = "HTTP/1.0 200 HONKYDORY\0\0"; const char kHttpHeaders[] = "HTTP/1.0 200 HONKYDORY\0\0";
std::string headers(kHttpHeaders, base::size(kHttpHeaders)); std::string headers(kHttpHeaders, base::size(kHttpHeaders));
WriteResponse(writer, headers, body_buffer.get(), body.length()); WriteResponse(writer, headers, std::move(body_buffer));
} }
class UpdateJobTestHelper : public EmbeddedWorkerTestHelper, class UpdateJobTestHelper : public EmbeddedWorkerTestHelper,
...@@ -1322,6 +1329,14 @@ class UpdateJobTestHelper : public EmbeddedWorkerTestHelper, ...@@ -1322,6 +1329,14 @@ class UpdateJobTestHelper : public EmbeddedWorkerTestHelper,
// EmbeddedWorkerTestHelper overrides: // EmbeddedWorkerTestHelper overrides:
void PopulateScriptCacheMap(int64_t version_id, void PopulateScriptCacheMap(int64_t version_id,
base::OnceClosure callback) override { base::OnceClosure callback) override {
context()->GetStorageControl()->GetNewResourceId(base::BindOnce(
&UpdateJobTestHelper::DidGetNewResourceIdForScriptCache,
weak_factory_.GetWeakPtr(), version_id, std::move(callback)));
}
void DidGetNewResourceIdForScriptCache(int64_t version_id,
base::OnceClosure callback,
int64_t resource_id) {
ServiceWorkerVersion* version = context()->GetLiveVersion(version_id); ServiceWorkerVersion* version = context()->GetLiveVersion(version_id);
ASSERT_TRUE(version); ASSERT_TRUE(version);
ServiceWorkerRegistration* registration = ServiceWorkerRegistration* registration =
...@@ -1331,19 +1346,19 @@ class UpdateJobTestHelper : public EmbeddedWorkerTestHelper, ...@@ -1331,19 +1346,19 @@ class UpdateJobTestHelper : public EmbeddedWorkerTestHelper,
bool is_update = registration->active_version() && bool is_update = registration->active_version() &&
version != registration->active_version(); version != registration->active_version();
std::unique_ptr<ServiceWorkerResponseWriter> writer = mojo::Remote<storage::mojom::ServiceWorkerResourceWriter> writer;
CreateNewResponseWriterSync(storage()); context()->GetStorageControl()->CreateResourceWriter(
int64_t resource_id = writer->response_id(); resource_id, writer.BindNewPipeAndPassReceiver());
version->script_cache_map()->NotifyStartedCaching(script, resource_id); version->script_cache_map()->NotifyStartedCaching(script, resource_id);
if (!is_update) { if (!is_update) {
// Spoof caching the script for the initial version. // Spoof caching the script for the initial version.
WriteStringResponse(writer.get(), kBody); WriteStringResponse(writer, kBody);
version->script_cache_map()->NotifyFinishedCaching( version->script_cache_map()->NotifyFinishedCaching(
script, base::size(kBody), net::OK, std::string()); script, base::size(kBody), net::OK, std::string());
} else { } else {
EXPECT_NE(GURL(kNoChangeOrigin), script.GetOrigin()); EXPECT_NE(GURL(kNoChangeOrigin), script.GetOrigin());
// The script must be changed. // The script must be changed.
WriteStringResponse(writer.get(), kNewBody); WriteStringResponse(writer, kNewBody);
version->script_cache_map()->NotifyFinishedCaching( version->script_cache_map()->NotifyFinishedCaching(
script, base::size(kNewBody), net::OK, std::string()); script, base::size(kNewBody), net::OK, std::string());
} }
...@@ -1750,10 +1765,11 @@ TEST_F(ServiceWorkerUpdateJobTest, Update_ScriptUrlChanged) { ...@@ -1750,10 +1765,11 @@ TEST_F(ServiceWorkerUpdateJobTest, Update_ScriptUrlChanged) {
// Make sure the storage has the data of the current waiting version. // Make sure the storage has the data of the current waiting version.
const int64_t resource_id = 2; const int64_t resource_id = 2;
std::unique_ptr<ServiceWorkerResponseWriter> writer = mojo::Remote<storage::mojom::ServiceWorkerResourceWriter> writer;
storage()->CreateResponseWriter(resource_id); context()->GetStorageControl()->CreateResourceWriter(
resource_id, writer.BindNewPipeAndPassReceiver());
version->script_cache_map()->NotifyStartedCaching(new_script, resource_id); version->script_cache_map()->NotifyStartedCaching(new_script, resource_id);
WriteStringResponse(writer.get(), kBody); WriteStringResponse(writer, kBody);
version->script_cache_map()->NotifyFinishedCaching( version->script_cache_map()->NotifyFinishedCaching(
new_script, base::size(kBody), net::OK, std::string()); new_script, base::size(kBody), net::OK, std::string());
......
...@@ -218,7 +218,7 @@ class ServiceWorkerNewScriptLoaderTest : public testing::Test { ...@@ -218,7 +218,7 @@ class ServiceWorkerNewScriptLoaderTest : public testing::Test {
int routing_id = 0; int routing_id = 0;
int request_id = 10; int request_id = 10;
uint32_t options = 0; uint32_t options = 0;
int64_t resource_id = GetNewResourceIdSync(context()->storage()); int64_t resource_id = GetNewResourceIdSync(context()->GetStorageControl());
network::ResourceRequest request; network::ResourceRequest request;
request.url = url; request.url = url;
......
...@@ -1304,8 +1304,8 @@ class ServiceWorkerResourceStorageTest : public ServiceWorkerStorageTest { ...@@ -1304,8 +1304,8 @@ class ServiceWorkerResourceStorageTest : public ServiceWorkerStorageTest {
script_ = GURL("http://www.test.not/script.js"); script_ = GURL("http://www.test.not/script.js");
import_ = GURL("http://www.test.not/import.js"); import_ = GURL("http://www.test.not/import.js");
document_url_ = GURL("http://www.test.not/scope/document.html"); document_url_ = GURL("http://www.test.not/scope/document.html");
resource_id1_ = GetNewResourceIdSync(storage()); resource_id1_ = GetNewResourceIdSync(storage_control());
resource_id2_ = GetNewResourceIdSync(storage()); resource_id2_ = GetNewResourceIdSync(storage_control());
resource_id1_size_ = 239193; resource_id1_size_ = 239193;
resource_id2_size_ = 59923; resource_id2_size_ = 59923;
...@@ -1380,7 +1380,7 @@ TEST_F(ServiceWorkerResourceStorageTest, ...@@ -1380,7 +1380,7 @@ TEST_F(ServiceWorkerResourceStorageTest,
WriteMetadataWithServiceWorkerResponseMetadataWriter) { WriteMetadataWithServiceWorkerResponseMetadataWriter) {
const char kMetadata1[] = "Test metadata"; const char kMetadata1[] = "Test metadata";
const char kMetadata2[] = "small"; const char kMetadata2[] = "small";
int64_t new_resource_id_ = GetNewResourceIdSync(storage()); int64_t new_resource_id_ = GetNewResourceIdSync(storage_control());
// Writing metadata to nonexistent resoirce ID must fail. // Writing metadata to nonexistent resoirce ID must fail.
EXPECT_GE(0, WriteResponseMetadata(storage_control(), new_resource_id_, EXPECT_GE(0, WriteResponseMetadata(storage_control(), new_resource_id_,
kMetadata1)); kMetadata1));
...@@ -1544,7 +1544,7 @@ TEST_F(ServiceWorkerResourceStorageDiskTest, CleanupOnRestart) { ...@@ -1544,7 +1544,7 @@ TEST_F(ServiceWorkerResourceStorageDiskTest, CleanupOnRestart) {
EXPECT_TRUE(VerifyBasicResponse(storage_control(), resource_id2_, true)); EXPECT_TRUE(VerifyBasicResponse(storage_control(), resource_id2_, true));
// Also add an uncommitted resource. // Also add an uncommitted resource.
int64_t kStaleUncommittedResourceId = GetNewResourceIdSync(storage()); int64_t kStaleUncommittedResourceId = GetNewResourceIdSync(storage_control());
registry()->StoreUncommittedResourceId(kStaleUncommittedResourceId, registry()->StoreUncommittedResourceId(kStaleUncommittedResourceId,
registration_->scope()); registration_->scope());
verify_ids = GetUncommittedResourceIdsFromDB(); verify_ids = GetUncommittedResourceIdsFromDB();
...@@ -1561,7 +1561,7 @@ TEST_F(ServiceWorkerResourceStorageDiskTest, CleanupOnRestart) { ...@@ -1561,7 +1561,7 @@ TEST_F(ServiceWorkerResourceStorageDiskTest, CleanupOnRestart) {
// Store a new uncommitted resource. This triggers stale resource cleanup. // Store a new uncommitted resource. This triggers stale resource cleanup.
base::RunLoop loop; base::RunLoop loop;
storage()->SetPurgingCompleteCallbackForTest(loop.QuitClosure()); storage()->SetPurgingCompleteCallbackForTest(loop.QuitClosure());
int64_t kNewResourceId = GetNewResourceIdSync(storage()); int64_t kNewResourceId = GetNewResourceIdSync(storage_control());
WriteBasicResponse(storage_control(), kNewResourceId); WriteBasicResponse(storage_control(), kNewResourceId);
registry()->StoreUncommittedResourceId(kNewResourceId, registry()->StoreUncommittedResourceId(kNewResourceId,
registration_->scope()); registration_->scope());
......
...@@ -518,15 +518,8 @@ void WriteToDiskCacheAsync( ...@@ -518,15 +518,8 @@ void WriteToDiskCacheAsync(
std::move(writer), std::move(callback))); std::move(writer), std::move(callback)));
} }
std::unique_ptr<ServiceWorkerResponseWriter> CreateNewResponseWriterSync( int64_t GetNewResourceIdSync(
ServiceWorkerStorage* storage) { mojo::Remote<storage::mojom::ServiceWorkerStorageControl>& storage) {
base::RunLoop run_loop;
std::unique_ptr<ServiceWorkerResponseWriter> writer;
int64_t resource_id = GetNewResourceIdSync(storage);
return storage->CreateResponseWriter(resource_id);
}
int64_t GetNewResourceIdSync(ServiceWorkerStorage* storage) {
base::RunLoop run_loop; base::RunLoop run_loop;
int64_t resource_id; int64_t resource_id;
storage->GetNewResourceId( storage->GetNewResourceId(
......
...@@ -201,13 +201,9 @@ void WriteToDiskCacheAsync( ...@@ -201,13 +201,9 @@ void WriteToDiskCacheAsync(
const std::string& meta_data, const std::string& meta_data,
WriteToDiskCacheCallback callback); WriteToDiskCacheCallback callback);
// Calls ServiceWorkerStorage::CreateNewResponseWriter() and returns the // Calls ServiceWorkerStorageControl::GetNewResourceId() synchronously.
// created writer synchronously. int64_t GetNewResourceIdSync(
std::unique_ptr<ServiceWorkerResponseWriter> CreateNewResponseWriterSync( mojo::Remote<storage::mojom::ServiceWorkerStorageControl>& storage);
ServiceWorkerStorage* storage);
// Calls ServiceWorkerStorage::GetNewResourceId() synchronously.
int64_t GetNewResourceIdSync(ServiceWorkerStorage* storage);
// A test implementation of ServiceWorkerResourceReader. // A test implementation of ServiceWorkerResourceReader.
// //
......
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