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

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

Issue 380093002: Update installed ServiceWorkers. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 5 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_storage_unittest.cc
diff --git a/content/browser/service_worker/service_worker_storage_unittest.cc b/content/browser/service_worker/service_worker_storage_unittest.cc
index 36ffb5b77e0aca22c56d8c9bdc6344085f3b3440..e07e3526b169abca431b9f83388f404c4c333649 100644
--- a/content/browser/service_worker/service_worker_storage_unittest.cc
+++ b/content/browser/service_worker/service_worker_storage_unittest.cc
@@ -83,20 +83,25 @@ void OnIOComplete(int* rv_out, int rv) {
*rv_out = rv;
}
-void WriteBasicResponse(ServiceWorkerStorage* storage, int64 id) {
+void OnCompareComplete(
+ ServiceWorkerStatusCode* status_out, bool* are_equal_out,
+ ServiceWorkerStatusCode status, bool are_equal) {
+ *status_out = status;
+ *are_equal_out = are_equal;
+}
+
+void WriteResponse(
+ ServiceWorkerStorage* storage, int64 id,
+ const std::string& headers,
+ IOBuffer* body, int length) {
scoped_ptr<ServiceWorkerResponseWriter> writer =
storage->CreateResponseWriter(id);
- const char kHttpHeaders[] =
- "HTTP/1.0 200 HONKYDORY\0Content-Length: 6\0\0";
- const char kHttpBody[] = "Hello\0";
- scoped_refptr<IOBuffer> body(new WrappedIOBuffer(kHttpBody));
- std::string raw_headers(kHttpHeaders, arraysize(kHttpHeaders));
scoped_ptr<net::HttpResponseInfo> info(new net::HttpResponseInfo);
info->request_time = base::Time::Now();
info->response_time = base::Time::Now();
info->was_cached = false;
- info->headers = new net::HttpResponseHeaders(raw_headers);
+ info->headers = new net::HttpResponseHeaders(headers);
scoped_refptr<HttpResponseInfoIOBuffer> info_buffer =
new HttpResponseInfoIOBuffer(info.release());
@@ -106,15 +111,32 @@ void WriteBasicResponse(ServiceWorkerStorage* storage, int64 id) {
EXPECT_LT(0, rv);
rv = -1234;
- writer->WriteData(body, arraysize(kHttpBody),
- base::Bind(&OnIOComplete, &rv));
+ writer->WriteData(body, length, base::Bind(&OnIOComplete, &rv));
base::RunLoop().RunUntilIdle();
- EXPECT_EQ(static_cast<int>(arraysize(kHttpBody)), rv);
+ EXPECT_EQ(length, rv);
+}
+
+void WriteStringResponse(
+ ServiceWorkerStorage* storage, int64 id,
+ const std::string& headers,
+ const std::string& body) {
+ scoped_refptr<IOBuffer> body_buffer(new WrappedIOBuffer(body.data()));
+ WriteResponse(storage, id, headers, body_buffer, body.length());
+}
+
+void WriteBasicResponse(ServiceWorkerStorage* storage, int64 id) {
+ scoped_ptr<ServiceWorkerResponseWriter> writer =
+ storage->CreateResponseWriter(id);
+
+ const char kHttpHeaders[] = "HTTP/1.0 200 HONKYDORY\0Content-Length: 5\0\0";
+ const char kHttpBody[] = "Hello";
+ std::string headers(kHttpHeaders, arraysize(kHttpHeaders));
+ WriteStringResponse(storage, id, headers, std::string(kHttpBody));
}
bool VerifyBasicResponse(ServiceWorkerStorage* storage, int64 id,
bool expected_positive_result) {
- const char kExpectedHttpBody[] = "Hello\0";
+ const std::string kExpectedHttpBody("Hello");
scoped_ptr<ServiceWorkerResponseReader> reader =
storage->CreateResponseReader(id);
scoped_refptr<HttpResponseInfoIOBuffer> info_buffer =
@@ -129,28 +151,38 @@ bool VerifyBasicResponse(ServiceWorkerStorage* storage, int64 id,
return false;
}
- const int kBigEnough = 512;
- scoped_refptr<net::IOBuffer> buffer = new IOBuffer(kBigEnough);
+ std::string received_body;
{
+ const int kBigEnough = 512;
+ scoped_refptr<net::IOBuffer> buffer = new IOBuffer(kBigEnough);
TestCompletionCallback cb;
reader->ReadData(buffer, kBigEnough, cb.callback());
int rv = cb.WaitForResult();
- EXPECT_EQ(static_cast<int>(arraysize(kExpectedHttpBody)), rv);
+ EXPECT_EQ(static_cast<int>(kExpectedHttpBody.size()), rv);
if (rv <= 0)
return false;
+ received_body.assign(buffer->data(), rv);
}
bool status_match =
std::string("HONKYDORY") ==
info_buffer->http_info->headers->GetStatusText();
- bool data_match =
- std::string(kExpectedHttpBody) == std::string(buffer->data());
+ bool data_match = kExpectedHttpBody == received_body;
EXPECT_TRUE(status_match);
EXPECT_TRUE(data_match);
return status_match && data_match;
}
+void WriteResponseOfSize(ServiceWorkerStorage* storage, int64 id,
+ char val, int size) {
+ const char kHttpHeaders[] = "HTTP/1.0 200 HONKYDORY\00";
+ std::string headers(kHttpHeaders, arraysize(kHttpHeaders));
+ scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(size);
+ memset(buffer->data(), val, size);
+ WriteResponse(storage, id, headers, buffer, size);
+}
+
} // namespace
class ServiceWorkerStorageTest : public testing::Test {
@@ -932,4 +964,66 @@ TEST_F(ServiceWorkerStorageTest, FindRegistration_LongestScopeMatch) {
EXPECT_EQ(live_registration2, found_registration);
}
+TEST_F(ServiceWorkerStorageTest, CompareResources) {
+ // Compare two small responses containing the same data.
+ WriteBasicResponse(storage(), 1);
+ WriteBasicResponse(storage(), 2);
+ ServiceWorkerStatusCode status = static_cast<ServiceWorkerStatusCode>(-1);
+ bool are_equal = false;
+ storage()->CompareScriptResources(
+ 1, 2,
+ base::Bind(&OnCompareComplete, &status, &are_equal));
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(SERVICE_WORKER_OK, status);
+ EXPECT_TRUE(are_equal);
+
+ // Compare two small responses with different data.
+ const char kHttpHeaders[] = "HTTP/1.0 200 HONKYDORY\0\0";
+ const char kHttpBody[] = "Goodbye";
+ std::string headers(kHttpHeaders, arraysize(kHttpHeaders));
+ WriteStringResponse(storage(), 3, headers, std::string(kHttpBody));
+ status = static_cast<ServiceWorkerStatusCode>(-1);
+ are_equal = true;
+ storage()->CompareScriptResources(
+ 1, 3,
+ base::Bind(&OnCompareComplete, &status, &are_equal));
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(SERVICE_WORKER_OK, status);
+ EXPECT_FALSE(are_equal);
+
+ // Compare two large responses with the same data.
+ const int k32K = 32 * 1024;
+ WriteResponseOfSize(storage(), 4, 'a', k32K);
+ WriteResponseOfSize(storage(), 5, 'a', k32K);
+ status = static_cast<ServiceWorkerStatusCode>(-1);
+ are_equal = false;
+ storage()->CompareScriptResources(
+ 4, 5,
+ base::Bind(&OnCompareComplete, &status, &are_equal));
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(SERVICE_WORKER_OK, status);
+ EXPECT_TRUE(are_equal);
+
+ // Compare a large and small response.
+ status = static_cast<ServiceWorkerStatusCode>(-1);
+ are_equal = true;
+ storage()->CompareScriptResources(
+ 1, 5,
+ base::Bind(&OnCompareComplete, &status, &are_equal));
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(SERVICE_WORKER_OK, status);
+ EXPECT_FALSE(are_equal);
+
+ // Compare two large responses with different data.
+ WriteResponseOfSize(storage(), 6, 'b', k32K);
+ status = static_cast<ServiceWorkerStatusCode>(-1);
+ are_equal = true;
+ storage()->CompareScriptResources(
+ 5, 6,
+ base::Bind(&OnCompareComplete, &status, &are_equal));
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(SERVICE_WORKER_OK, status);
+ EXPECT_FALSE(are_equal);
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698