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/+/2306113
Reviewed-by: Makoto Shimazu <shimazu@chromium.org>
Commit-Queue: Kenichi Ishibashi <bashi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#790156}
diff --git a/content/browser/service_worker/service_worker_job_unittest.cc b/content/browser/service_worker/service_worker_job_unittest.cc
index f3dcbc4..d9fdad2 100644
--- a/content/browser/service_worker/service_worker_job_unittest.cc
+++ b/content/browser/service_worker/service_worker_job_unittest.cc
@@ -13,6 +13,7 @@
#include "base/optional.h"
#include "base/run_loop.h"
#include "base/stl_util.h"
+#include "base/test/bind_test_util.h"
#include "base/test/metrics/histogram_tester.h"
#include "base/test/scoped_feature_list.h"
#include "base/test/test_simple_task_runner.h"
@@ -1171,18 +1172,11 @@
const char kBody[] = "/* old body */";
const char kNewBody[] = "/* new body */";
-void RunNestedUntilIdle() {
- base::RunLoop(base::RunLoop::Type::kNestableTasksAllowed).RunUntilIdle();
-}
-
-void OnIOComplete(int* rv_out, int rv) {
- *rv_out = rv;
-}
-
-void WriteResponse(ServiceWorkerResponseWriter* writer,
- const std::string& headers,
- IOBuffer* body,
- int length) {
+void WriteResponse(
+ mojo::Remote<storage::mojom::ServiceWorkerResourceWriter>& writer,
+ const std::string& headers,
+ mojo_base::BigBuffer body) {
+ int length = body.size();
auto response_head = network::mojom::URLResponseHead::New();
response_head->request_time = base::Time::Now();
response_head->response_time = base::Time::Now();
@@ -1190,24 +1184,37 @@
response_head->content_length = length;
int rv = -1234;
- writer->WriteResponseHead(*response_head, length,
- base::BindOnce(&OnIOComplete, &rv));
- RunNestedUntilIdle();
- EXPECT_LT(0, rv);
+ {
+ base::RunLoop loop(base::RunLoop::Type::kNestableTasksAllowed);
+ writer->WriteResponseHead(std::move(response_head),
+ base::BindLambdaForTesting([&](int result) {
+ rv = result;
+ loop.Quit();
+ }));
+ loop.Run();
+ EXPECT_LT(0, rv);
+ }
rv = -1234;
- writer->WriteData(body, length, base::BindOnce(&OnIOComplete, &rv));
- RunNestedUntilIdle();
- EXPECT_EQ(length, rv);
+ {
+ base::RunLoop loop(base::RunLoop::Type::kNestableTasksAllowed);
+ writer->WriteData(std::move(body),
+ base::BindLambdaForTesting([&](int result) {
+ rv = result;
+ loop.Quit();
+ }));
+ loop.Run();
+ EXPECT_EQ(length, rv);
+ }
}
-void WriteStringResponse(ServiceWorkerResponseWriter* writer,
- const std::string& body) {
- scoped_refptr<IOBuffer> body_buffer =
- base::MakeRefCounted<WrappedIOBuffer>(body.data());
+void WriteStringResponse(
+ mojo::Remote<storage::mojom::ServiceWorkerResourceWriter>& writer,
+ const std::string& body) {
+ mojo_base::BigBuffer body_buffer(base::as_bytes(base::make_span(body)));
const char kHttpHeaders[] = "HTTP/1.0 200 HONKYDORY\0\0";
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,
@@ -1322,6 +1329,14 @@
// EmbeddedWorkerTestHelper overrides:
void PopulateScriptCacheMap(int64_t version_id,
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);
ASSERT_TRUE(version);
ServiceWorkerRegistration* registration =
@@ -1331,19 +1346,19 @@
bool is_update = registration->active_version() &&
version != registration->active_version();
- std::unique_ptr<ServiceWorkerResponseWriter> writer =
- CreateNewResponseWriterSync(storage());
- int64_t resource_id = writer->response_id();
+ mojo::Remote<storage::mojom::ServiceWorkerResourceWriter> writer;
+ context()->GetStorageControl()->CreateResourceWriter(
+ resource_id, writer.BindNewPipeAndPassReceiver());
version->script_cache_map()->NotifyStartedCaching(script, resource_id);
if (!is_update) {
// Spoof caching the script for the initial version.
- WriteStringResponse(writer.get(), kBody);
+ WriteStringResponse(writer, kBody);
version->script_cache_map()->NotifyFinishedCaching(
script, base::size(kBody), net::OK, std::string());
} else {
EXPECT_NE(GURL(kNoChangeOrigin), script.GetOrigin());
// The script must be changed.
- WriteStringResponse(writer.get(), kNewBody);
+ WriteStringResponse(writer, kNewBody);
version->script_cache_map()->NotifyFinishedCaching(
script, base::size(kNewBody), net::OK, std::string());
}
@@ -1750,10 +1765,11 @@
// Make sure the storage has the data of the current waiting version.
const int64_t resource_id = 2;
- std::unique_ptr<ServiceWorkerResponseWriter> writer =
- storage()->CreateResponseWriter(resource_id);
+ mojo::Remote<storage::mojom::ServiceWorkerResourceWriter> writer;
+ context()->GetStorageControl()->CreateResourceWriter(
+ resource_id, writer.BindNewPipeAndPassReceiver());
version->script_cache_map()->NotifyStartedCaching(new_script, resource_id);
- WriteStringResponse(writer.get(), kBody);
+ WriteStringResponse(writer, kBody);
version->script_cache_map()->NotifyFinishedCaching(
new_script, base::size(kBody), net::OK, std::string());
diff --git a/content/browser/service_worker/service_worker_new_script_loader_unittest.cc b/content/browser/service_worker/service_worker_new_script_loader_unittest.cc
index 46c0105a..78888af 100644
--- a/content/browser/service_worker/service_worker_new_script_loader_unittest.cc
+++ b/content/browser/service_worker/service_worker_new_script_loader_unittest.cc
@@ -218,7 +218,7 @@
int routing_id = 0;
int request_id = 10;
uint32_t options = 0;
- int64_t resource_id = GetNewResourceIdSync(context()->storage());
+ int64_t resource_id = GetNewResourceIdSync(context()->GetStorageControl());
network::ResourceRequest request;
request.url = url;
diff --git a/content/browser/service_worker/service_worker_storage_unittest.cc b/content/browser/service_worker/service_worker_storage_unittest.cc
index 03d96d5..2fe0ac5 100644
--- a/content/browser/service_worker/service_worker_storage_unittest.cc
+++ b/content/browser/service_worker/service_worker_storage_unittest.cc
@@ -1304,8 +1304,8 @@
script_ = GURL("http://www.test.not/script.js");
import_ = GURL("http://www.test.not/import.js");
document_url_ = GURL("http://www.test.not/scope/document.html");
- resource_id1_ = GetNewResourceIdSync(storage());
- resource_id2_ = GetNewResourceIdSync(storage());
+ resource_id1_ = GetNewResourceIdSync(storage_control());
+ resource_id2_ = GetNewResourceIdSync(storage_control());
resource_id1_size_ = 239193;
resource_id2_size_ = 59923;
@@ -1380,7 +1380,7 @@
WriteMetadataWithServiceWorkerResponseMetadataWriter) {
const char kMetadata1[] = "Test metadata";
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.
EXPECT_GE(0, WriteResponseMetadata(storage_control(), new_resource_id_,
kMetadata1));
@@ -1544,7 +1544,7 @@
EXPECT_TRUE(VerifyBasicResponse(storage_control(), resource_id2_, true));
// Also add an uncommitted resource.
- int64_t kStaleUncommittedResourceId = GetNewResourceIdSync(storage());
+ int64_t kStaleUncommittedResourceId = GetNewResourceIdSync(storage_control());
registry()->StoreUncommittedResourceId(kStaleUncommittedResourceId,
registration_->scope());
verify_ids = GetUncommittedResourceIdsFromDB();
@@ -1561,7 +1561,7 @@
// Store a new uncommitted resource. This triggers stale resource cleanup.
base::RunLoop loop;
storage()->SetPurgingCompleteCallbackForTest(loop.QuitClosure());
- int64_t kNewResourceId = GetNewResourceIdSync(storage());
+ int64_t kNewResourceId = GetNewResourceIdSync(storage_control());
WriteBasicResponse(storage_control(), kNewResourceId);
registry()->StoreUncommittedResourceId(kNewResourceId,
registration_->scope());
diff --git a/content/browser/service_worker/service_worker_test_utils.cc b/content/browser/service_worker/service_worker_test_utils.cc
index e2438a5..0563e5de 100644
--- a/content/browser/service_worker/service_worker_test_utils.cc
+++ b/content/browser/service_worker/service_worker_test_utils.cc
@@ -518,15 +518,8 @@
std::move(writer), std::move(callback)));
}
-std::unique_ptr<ServiceWorkerResponseWriter> CreateNewResponseWriterSync(
- ServiceWorkerStorage* 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) {
+int64_t GetNewResourceIdSync(
+ mojo::Remote<storage::mojom::ServiceWorkerStorageControl>& storage) {
base::RunLoop run_loop;
int64_t resource_id;
storage->GetNewResourceId(
diff --git a/content/browser/service_worker/service_worker_test_utils.h b/content/browser/service_worker/service_worker_test_utils.h
index d372341b..fdbc11b 100644
--- a/content/browser/service_worker/service_worker_test_utils.h
+++ b/content/browser/service_worker/service_worker_test_utils.h
@@ -201,13 +201,9 @@
const std::string& meta_data,
WriteToDiskCacheCallback callback);
-// Calls ServiceWorkerStorage::CreateNewResponseWriter() and returns the
-// created writer synchronously.
-std::unique_ptr<ServiceWorkerResponseWriter> CreateNewResponseWriterSync(
- ServiceWorkerStorage* storage);
-
-// Calls ServiceWorkerStorage::GetNewResourceId() synchronously.
-int64_t GetNewResourceIdSync(ServiceWorkerStorage* storage);
+// Calls ServiceWorkerStorageControl::GetNewResourceId() synchronously.
+int64_t GetNewResourceIdSync(
+ mojo::Remote<storage::mojom::ServiceWorkerStorageControl>& storage);
// A test implementation of ServiceWorkerResourceReader.
//