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

Side by Side Diff: content/browser/service_worker/service_worker_cache_unittest.cc

Issue 622833002: ServiceWorkerCache: Support response body in blob form. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@opacity
Patch Set: Rebase Created 6 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/service_worker/service_worker_cache.h" 5 #include "content/browser/service_worker/service_worker_cache.h"
6 6
7 #include "base/files/file_path.h" 7 #include "base/files/file_path.h"
8 #include "base/files/scoped_temp_dir.h" 8 #include "base/files/scoped_temp_dir.h"
9 #include "base/message_loop/message_loop_proxy.h" 9 #include "base/message_loop/message_loop_proxy.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 104
105 blob_handle_ = 105 blob_handle_ =
106 blob_storage_context->context()->AddFinishedBlob(blob_data.get()); 106 blob_storage_context->context()->AddFinishedBlob(blob_data.get());
107 107
108 body_response_ = 108 body_response_ =
109 ServiceWorkerResponse(GURL("http://example.com/body.html"), 109 ServiceWorkerResponse(GURL("http://example.com/body.html"),
110 200, 110 200,
111 "OK", 111 "OK",
112 blink::WebServiceWorkerResponseTypeDefault, 112 blink::WebServiceWorkerResponseTypeDefault,
113 headers, 113 headers,
114 blob_handle_->uuid()); 114 blob_handle_->uuid(),
115 expected_blob_data_.size());
115 116
116 no_body_response_ = 117 no_body_response_ =
117 ServiceWorkerResponse(GURL("http://example.com/no_body.html"), 118 ServiceWorkerResponse(GURL("http://example.com/no_body.html"),
118 200, 119 200,
119 "OK", 120 "OK",
120 blink::WebServiceWorkerResponseTypeDefault, 121 blink::WebServiceWorkerResponseTypeDefault,
121 headers, 122 headers,
122 ""); 123 "",
124 0);
123 } 125 }
124 126
125 scoped_ptr<ServiceWorkerFetchRequest> CopyFetchRequest( 127 scoped_ptr<ServiceWorkerFetchRequest> CopyFetchRequest(
126 const ServiceWorkerFetchRequest& request) { 128 const ServiceWorkerFetchRequest& request) {
127 return make_scoped_ptr(new ServiceWorkerFetchRequest(request.url, 129 return make_scoped_ptr(new ServiceWorkerFetchRequest(request.url,
128 request.method, 130 request.method,
129 request.headers, 131 request.headers,
130 request.referrer, 132 request.referrer,
131 request.is_reload)); 133 request.is_reload));
132 } 134 }
133 135
134 scoped_ptr<ServiceWorkerResponse> CopyFetchResponse( 136 scoped_ptr<ServiceWorkerResponse> CopyFetchResponse(
135 const ServiceWorkerResponse& response) { 137 const ServiceWorkerResponse& response) {
136 scoped_ptr<ServiceWorkerResponse> sw_response( 138 scoped_ptr<ServiceWorkerResponse> sw_response(
137 new ServiceWorkerResponse(response.url, 139 new ServiceWorkerResponse(response.url,
138 response.status_code, 140 response.status_code,
139 response.status_text, 141 response.status_text,
140 response.response_type, 142 response.response_type,
141 response.headers, 143 response.headers,
142 response.blob_uuid)); 144 response.blob_uuid,
145 response.blob_size));
143 return sw_response.Pass(); 146 return sw_response.Pass();
144 } 147 }
145 148
146 bool Put(const ServiceWorkerFetchRequest& request, 149 bool Put(const ServiceWorkerFetchRequest& request,
147 const ServiceWorkerResponse& response) { 150 const ServiceWorkerResponse& response) {
148 scoped_ptr<base::RunLoop> loop(new base::RunLoop()); 151 scoped_ptr<base::RunLoop> loop(new base::RunLoop());
149 152
150 cache_->Put(CopyFetchRequest(request), 153 cache_->Put(CopyFetchRequest(request),
151 CopyFetchResponse(response), 154 CopyFetchResponse(response),
152 base::Bind(&ServiceWorkerCacheTest::ResponseAndErrorCallback, 155 base::Bind(&ServiceWorkerCacheTest::ResponseAndErrorCallback,
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 public testing::WithParamInterface<bool> { 288 public testing::WithParamInterface<bool> {
286 virtual bool MemoryOnly() override { return !GetParam(); } 289 virtual bool MemoryOnly() override { return !GetParam(); }
287 }; 290 };
288 291
289 TEST_P(ServiceWorkerCacheTestP, PutNoBody) { 292 TEST_P(ServiceWorkerCacheTestP, PutNoBody) {
290 EXPECT_TRUE(Put(no_body_request_, no_body_response_)); 293 EXPECT_TRUE(Put(no_body_request_, no_body_response_));
291 EXPECT_TRUE(callback_response_); 294 EXPECT_TRUE(callback_response_);
292 EXPECT_STREQ(no_body_response_.url.spec().c_str(), 295 EXPECT_STREQ(no_body_response_.url.spec().c_str(),
293 callback_response_->url.spec().c_str()); 296 callback_response_->url.spec().c_str());
294 EXPECT_FALSE(callback_response_data_); 297 EXPECT_FALSE(callback_response_data_);
298 EXPECT_STREQ("", callback_response_->blob_uuid.c_str());
299 EXPECT_EQ(0u, callback_response_->blob_size);
295 } 300 }
296 301
297 TEST_P(ServiceWorkerCacheTestP, PutBody) { 302 TEST_P(ServiceWorkerCacheTestP, PutBody) {
298 EXPECT_TRUE(Put(body_request_, body_response_)); 303 EXPECT_TRUE(Put(body_request_, body_response_));
299 EXPECT_TRUE(callback_response_); 304 EXPECT_TRUE(callback_response_);
300 EXPECT_STREQ(body_response_.url.spec().c_str(), 305 EXPECT_STREQ(body_response_.url.spec().c_str(),
301 callback_response_->url.spec().c_str()); 306 callback_response_->url.spec().c_str());
302 EXPECT_TRUE(callback_response_data_); 307 EXPECT_TRUE(callback_response_data_);
308 EXPECT_STRNE("", callback_response_->blob_uuid.c_str());
309 EXPECT_EQ(expected_blob_data_.size(), callback_response_->blob_size);
310
303 std::string response_body; 311 std::string response_body;
304 CopyBody(callback_response_data_.get(), &response_body); 312 CopyBody(callback_response_data_.get(), &response_body);
305 EXPECT_STREQ(expected_blob_data_.c_str(), response_body.c_str()); 313 EXPECT_STREQ(expected_blob_data_.c_str(), response_body.c_str());
306 } 314 }
307 315
308 TEST_F(ServiceWorkerCacheTest, PutBodyDropBlobRef) { 316 TEST_F(ServiceWorkerCacheTest, PutBodyDropBlobRef) {
309 scoped_ptr<base::RunLoop> loop(new base::RunLoop()); 317 scoped_ptr<base::RunLoop> loop(new base::RunLoop());
310 cache_->Put(CopyFetchRequest(body_request_), 318 cache_->Put(CopyFetchRequest(body_request_),
311 CopyFetchResponse(body_response_), 319 CopyFetchResponse(body_response_),
312 base::Bind(&ServiceWorkerCacheTestP::ResponseAndErrorCallback, 320 base::Bind(&ServiceWorkerCacheTestP::ResponseAndErrorCallback,
313 base::Unretained(this), 321 base::Unretained(this),
314 base::Unretained(loop.get()))); 322 base::Unretained(loop.get())));
315 // The handle should be held by the cache now so the deref here should be 323 // The handle should be held by the cache now so the deref here should be
316 // okay. 324 // okay.
317 blob_handle_.reset(); 325 blob_handle_.reset();
318 loop->Run(); 326 loop->Run();
319 327
320 EXPECT_EQ(ServiceWorkerCache::ErrorTypeOK, callback_error_); 328 EXPECT_EQ(ServiceWorkerCache::ErrorTypeOK, callback_error_);
321 } 329 }
322 330
323 TEST_P(ServiceWorkerCacheTestP, MatchNoBody) { 331 TEST_P(ServiceWorkerCacheTestP, MatchNoBody) {
324 EXPECT_TRUE(Put(no_body_request_, no_body_response_)); 332 EXPECT_TRUE(Put(no_body_request_, no_body_response_));
325 EXPECT_TRUE(Match(no_body_request_)); 333 EXPECT_TRUE(Match(no_body_request_));
326 EXPECT_EQ(200, callback_response_->status_code); 334 EXPECT_EQ(200, callback_response_->status_code);
327 EXPECT_STREQ("OK", callback_response_->status_text.c_str()); 335 EXPECT_STREQ("OK", callback_response_->status_text.c_str());
328 EXPECT_STREQ("http://example.com/no_body.html", 336 EXPECT_STREQ("http://example.com/no_body.html",
329 callback_response_->url.spec().c_str()); 337 callback_response_->url.spec().c_str());
338 EXPECT_STREQ("", callback_response_->blob_uuid.c_str());
339 EXPECT_EQ(0u, callback_response_->blob_size);
330 } 340 }
331 341
332 TEST_P(ServiceWorkerCacheTestP, MatchBody) { 342 TEST_P(ServiceWorkerCacheTestP, MatchBody) {
333 EXPECT_TRUE(Put(body_request_, body_response_)); 343 EXPECT_TRUE(Put(body_request_, body_response_));
334 EXPECT_TRUE(Match(body_request_)); 344 EXPECT_TRUE(Match(body_request_));
335 EXPECT_EQ(200, callback_response_->status_code); 345 EXPECT_EQ(200, callback_response_->status_code);
336 EXPECT_STREQ("OK", callback_response_->status_text.c_str()); 346 EXPECT_STREQ("OK", callback_response_->status_text.c_str());
337 EXPECT_STREQ("http://example.com/body.html", 347 EXPECT_STREQ("http://example.com/body.html",
338 callback_response_->url.spec().c_str()); 348 callback_response_->url.spec().c_str());
349 EXPECT_STRNE("", callback_response_->blob_uuid.c_str());
350 EXPECT_EQ(expected_blob_data_.size(), callback_response_->blob_size);
351
339 std::string response_body; 352 std::string response_body;
340 CopyBody(callback_response_data_.get(), &response_body); 353 CopyBody(callback_response_data_.get(), &response_body);
341 EXPECT_STREQ(expected_blob_data_.c_str(), response_body.c_str()); 354 EXPECT_STREQ(expected_blob_data_.c_str(), response_body.c_str());
342 } 355 }
343 356
344 TEST_P(ServiceWorkerCacheTestP, Vary) { 357 TEST_P(ServiceWorkerCacheTestP, Vary) {
345 body_request_.headers["vary_foo"] = "foo"; 358 body_request_.headers["vary_foo"] = "foo";
346 body_response_.headers["vary"] = "vary_foo"; 359 body_response_.headers["vary"] = "vary_foo";
347 EXPECT_TRUE(Put(body_request_, body_response_)); 360 EXPECT_TRUE(Put(body_request_, body_response_));
348 EXPECT_TRUE(Match(body_request_)); 361 EXPECT_TRUE(Match(body_request_));
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 #endif // OS_WIN 503 #endif // OS_WIN
491 504
492 TEST_F(ServiceWorkerCacheTest, CaselessServiceWorkerResponseHeaders) { 505 TEST_F(ServiceWorkerCacheTest, CaselessServiceWorkerResponseHeaders) {
493 // ServiceWorkerCache depends on ServiceWorkerResponse having caseless 506 // ServiceWorkerCache depends on ServiceWorkerResponse having caseless
494 // headers so that it can quickly lookup vary headers. 507 // headers so that it can quickly lookup vary headers.
495 ServiceWorkerResponse response(GURL("http://www.example.com"), 508 ServiceWorkerResponse response(GURL("http://www.example.com"),
496 200, 509 200,
497 "OK", 510 "OK",
498 blink::WebServiceWorkerResponseTypeDefault, 511 blink::WebServiceWorkerResponseTypeDefault,
499 ServiceWorkerHeaderMap(), 512 ServiceWorkerHeaderMap(),
500 ""); 513 "",
514 0);
501 response.headers["content-type"] = "foo"; 515 response.headers["content-type"] = "foo";
502 response.headers["Content-Type"] = "bar"; 516 response.headers["Content-Type"] = "bar";
503 EXPECT_EQ("bar", response.headers["content-type"]); 517 EXPECT_EQ("bar", response.headers["content-type"]);
504 } 518 }
505 519
506 TEST_F(ServiceWorkerCacheTest, CaselessServiceWorkerFetchRequestHeaders) { 520 TEST_F(ServiceWorkerCacheTest, CaselessServiceWorkerFetchRequestHeaders) {
507 // ServiceWorkerCache depends on ServiceWorkerFetchRequest having caseless 521 // ServiceWorkerCache depends on ServiceWorkerFetchRequest having caseless
508 // headers so that it can quickly lookup vary headers. 522 // headers so that it can quickly lookup vary headers.
509 ServiceWorkerFetchRequest request(GURL("http://www.example.com"), 523 ServiceWorkerFetchRequest request(GURL("http://www.example.com"),
510 "GET", 524 "GET",
511 ServiceWorkerHeaderMap(), 525 ServiceWorkerHeaderMap(),
512 GURL(""), 526 GURL(""),
513 false); 527 false);
514 request.headers["content-type"] = "foo"; 528 request.headers["content-type"] = "foo";
515 request.headers["Content-Type"] = "bar"; 529 request.headers["Content-Type"] = "bar";
516 EXPECT_EQ("bar", request.headers["content-type"]); 530 EXPECT_EQ("bar", request.headers["content-type"]);
517 } 531 }
518 532
519 INSTANTIATE_TEST_CASE_P(ServiceWorkerCacheTest, 533 INSTANTIATE_TEST_CASE_P(ServiceWorkerCacheTest,
520 ServiceWorkerCacheTestP, 534 ServiceWorkerCacheTestP,
521 ::testing::Values(false, true)); 535 ::testing::Values(false, true));
522 536
523 } // namespace content 537 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698