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

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

Issue 617263002: Support WebServiceWorkerResponseType in ServiceWorkerCache. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Don't run test on windows, see https://crbug.com/416940 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 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 for (int i = 0; i < 100; ++i) 98 for (int i = 0; i < 100; ++i)
99 expected_blob_data_ += kTestData; 99 expected_blob_data_ += kTestData;
100 100
101 scoped_refptr<storage::BlobData> blob_data( 101 scoped_refptr<storage::BlobData> blob_data(
102 new storage::BlobData("blob-id:myblob")); 102 new storage::BlobData("blob-id:myblob"));
103 blob_data->AppendData(expected_blob_data_); 103 blob_data->AppendData(expected_blob_data_);
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_ = ServiceWorkerResponse(GURL("http://example.com/body.html"), 108 body_response_ =
109 200, 109 ServiceWorkerResponse(GURL("http://example.com/body.html"),
110 "OK", 110 200,
111 headers, 111 "OK",
112 blob_handle_->uuid()); 112 blink::WebServiceWorkerResponseTypeDefault,
113 headers,
114 blob_handle_->uuid());
113 115
114 no_body_response_ = ServiceWorkerResponse( 116 no_body_response_ =
115 GURL("http://example.com/no_body.html"), 200, "OK", headers, ""); 117 ServiceWorkerResponse(GURL("http://example.com/no_body.html"),
118 200,
119 "OK",
120 blink::WebServiceWorkerResponseTypeDefault,
121 headers,
122 "");
116 } 123 }
117 124
118 scoped_ptr<ServiceWorkerFetchRequest> CopyFetchRequest( 125 scoped_ptr<ServiceWorkerFetchRequest> CopyFetchRequest(
119 const ServiceWorkerFetchRequest& request) { 126 const ServiceWorkerFetchRequest& request) {
120 return make_scoped_ptr(new ServiceWorkerFetchRequest(request.url, 127 return make_scoped_ptr(new ServiceWorkerFetchRequest(request.url,
121 request.method, 128 request.method,
122 request.headers, 129 request.headers,
123 request.referrer, 130 request.referrer,
124 request.is_reload)); 131 request.is_reload));
125 } 132 }
126 133
127 scoped_ptr<ServiceWorkerResponse> CopyFetchResponse( 134 scoped_ptr<ServiceWorkerResponse> CopyFetchResponse(
128 const ServiceWorkerResponse& response) { 135 const ServiceWorkerResponse& response) {
129 return make_scoped_ptr(new ServiceWorkerResponse(response.url, 136 scoped_ptr<ServiceWorkerResponse> sw_response(
130 response.status_code, 137 new ServiceWorkerResponse(response.url,
131 response.status_text, 138 response.status_code,
132 response.headers, 139 response.status_text,
133 response.blob_uuid)); 140 response.response_type,
141 response.headers,
142 response.blob_uuid));
143 return sw_response.Pass();
134 } 144 }
135 145
136 bool Put(const ServiceWorkerFetchRequest& request, 146 bool Put(const ServiceWorkerFetchRequest& request,
137 const ServiceWorkerResponse& response) { 147 const ServiceWorkerResponse& response) {
138 scoped_ptr<base::RunLoop> loop(new base::RunLoop()); 148 scoped_ptr<base::RunLoop> loop(new base::RunLoop());
139 149
140 cache_->Put(CopyFetchRequest(request), 150 cache_->Put(CopyFetchRequest(request),
141 CopyFetchResponse(response), 151 CopyFetchResponse(response),
142 base::Bind(&ServiceWorkerCacheTest::ResponseAndErrorCallback, 152 base::Bind(&ServiceWorkerCacheTest::ResponseAndErrorCallback,
143 base::Unretained(this), 153 base::Unretained(this),
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 for (int i = 0, max = callback_strings_.size(); i < max; ++i) 242 for (int i = 0, max = callback_strings_.size(); i < max; ++i)
233 found_set.insert(callback_strings_[i]); 243 found_set.insert(callback_strings_[i]);
234 244
235 for (int i = 0, max = expected_keys.size(); i < max; ++i) { 245 for (int i = 0, max = expected_keys.size(); i < max; ++i) {
236 if (found_set.find(expected_keys[i]) == found_set.end()) 246 if (found_set.find(expected_keys[i]) == found_set.end())
237 return false; 247 return false;
238 } 248 }
239 return true; 249 return true;
240 } 250 }
241 251
252 bool TestResponseType(blink::WebServiceWorkerResponseType response_type) {
253 body_response_.response_type = response_type;
254 EXPECT_TRUE(Put(body_request_, body_response_));
255 EXPECT_TRUE(Match(body_request_));
256 EXPECT_TRUE(Delete(body_request_));
257 return response_type == callback_response_->response_type;
258 }
259
242 virtual bool MemoryOnly() { return false; } 260 virtual bool MemoryOnly() { return false; }
243 261
244 protected: 262 protected:
245 TestBrowserContext browser_context_; 263 TestBrowserContext browser_context_;
246 TestBrowserThreadBundle browser_thread_bundle_; 264 TestBrowserThreadBundle browser_thread_bundle_;
247 scoped_ptr<net::URLRequestJobFactoryImpl> url_request_job_factory_; 265 scoped_ptr<net::URLRequestJobFactoryImpl> url_request_job_factory_;
248 storage::BlobStorageContext* blob_storage_context_; 266 storage::BlobStorageContext* blob_storage_context_;
249 267
250 base::ScopedTempDir temp_dir_; 268 base::ScopedTempDir temp_dir_;
251 scoped_refptr<ServiceWorkerCache> cache_; 269 scoped_refptr<ServiceWorkerCache> cache_;
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
412 EXPECT_TRUE(Delete(body_request_)); 430 EXPECT_TRUE(Delete(body_request_));
413 EXPECT_TRUE(Keys()); 431 EXPECT_TRUE(Keys());
414 EXPECT_EQ(1u, callback_strings_.size()); 432 EXPECT_EQ(1u, callback_strings_.size());
415 std::vector<std::string> expected_key; 433 std::vector<std::string> expected_key;
416 expected_key.push_back(no_body_request_.url.spec()); 434 expected_key.push_back(no_body_request_.url.spec());
417 EXPECT_TRUE(VerifyKeys(expected_key)); 435 EXPECT_TRUE(VerifyKeys(expected_key));
418 } 436 }
419 437
420 // TODO(jkarlin): Once SimpleCache is working bug-free on Windows reenable these 438 // TODO(jkarlin): Once SimpleCache is working bug-free on Windows reenable these
421 // tests. In the meanwhile we know that Windows operations will be a little 439 // tests. In the meanwhile we know that Windows operations will be a little
422 // flaky (though not crashy). See https://crbug.com/409109 440 // flaky (though not crashy). See https://crbug.com/409109 and
441 // https://crbug.com/416940.
423 #ifndef OS_WIN 442 #ifndef OS_WIN
424 TEST_P(ServiceWorkerCacheTestP, DeleteNoBody) { 443 TEST_P(ServiceWorkerCacheTestP, DeleteNoBody) {
425 EXPECT_TRUE(Put(no_body_request_, no_body_response_)); 444 EXPECT_TRUE(Put(no_body_request_, no_body_response_));
426 EXPECT_TRUE(Match(no_body_request_)); 445 EXPECT_TRUE(Match(no_body_request_));
427 EXPECT_TRUE(Delete(no_body_request_)); 446 EXPECT_TRUE(Delete(no_body_request_));
428 EXPECT_FALSE(Match(no_body_request_)); 447 EXPECT_FALSE(Match(no_body_request_));
429 EXPECT_FALSE(Delete(no_body_request_)); 448 EXPECT_FALSE(Delete(no_body_request_));
430 EXPECT_TRUE(Put(no_body_request_, no_body_response_)); 449 EXPECT_TRUE(Put(no_body_request_, no_body_response_));
431 EXPECT_TRUE(Match(no_body_request_)); 450 EXPECT_TRUE(Match(no_body_request_));
432 EXPECT_TRUE(Delete(no_body_request_)); 451 EXPECT_TRUE(Delete(no_body_request_));
(...skipping 20 matching lines...) Expand all
453 } 472 }
454 473
455 TEST_P(ServiceWorkerCacheTestP, QuickStressBody) { 474 TEST_P(ServiceWorkerCacheTestP, QuickStressBody) {
456 for (int i = 0; i < 100; ++i) { 475 for (int i = 0; i < 100; ++i) {
457 ASSERT_FALSE(Match(body_request_)); 476 ASSERT_FALSE(Match(body_request_));
458 ASSERT_TRUE(Put(body_request_, body_response_)); 477 ASSERT_TRUE(Put(body_request_, body_response_));
459 ASSERT_TRUE(Match(body_request_)); 478 ASSERT_TRUE(Match(body_request_));
460 ASSERT_TRUE(Delete(body_request_)); 479 ASSERT_TRUE(Delete(body_request_));
461 } 480 }
462 } 481 }
482
483 TEST_P(ServiceWorkerCacheTestP, PutResponseType) {
484 EXPECT_TRUE(TestResponseType(blink::WebServiceWorkerResponseTypeBasic));
485 EXPECT_TRUE(TestResponseType(blink::WebServiceWorkerResponseTypeCORS));
486 EXPECT_TRUE(TestResponseType(blink::WebServiceWorkerResponseTypeDefault));
487 EXPECT_TRUE(TestResponseType(blink::WebServiceWorkerResponseTypeError));
488 EXPECT_TRUE(TestResponseType(blink::WebServiceWorkerResponseTypeOpaque));
489 }
463 #endif // OS_WIN 490 #endif // OS_WIN
464 491
465 TEST_F(ServiceWorkerCacheTest, CaselessServiceWorkerResponseHeaders) { 492 TEST_F(ServiceWorkerCacheTest, CaselessServiceWorkerResponseHeaders) {
466 // ServiceWorkerCache depends on ServiceWorkerResponse having caseless 493 // ServiceWorkerCache depends on ServiceWorkerResponse having caseless
467 // headers so that it can quickly lookup vary headers. 494 // headers so that it can quickly lookup vary headers.
468 ServiceWorkerResponse response( 495 ServiceWorkerResponse response(GURL("http://www.example.com"),
469 GURL("http://www.example.com"), 200, "OK", ServiceWorkerHeaderMap(), ""); 496 200,
497 "OK",
498 blink::WebServiceWorkerResponseTypeDefault,
499 ServiceWorkerHeaderMap(),
500 "");
470 response.headers["content-type"] = "foo"; 501 response.headers["content-type"] = "foo";
471 response.headers["Content-Type"] = "bar"; 502 response.headers["Content-Type"] = "bar";
472 EXPECT_EQ("bar", response.headers["content-type"]); 503 EXPECT_EQ("bar", response.headers["content-type"]);
473 } 504 }
474 505
475 TEST_F(ServiceWorkerCacheTest, CaselessServiceWorkerFetchRequestHeaders) { 506 TEST_F(ServiceWorkerCacheTest, CaselessServiceWorkerFetchRequestHeaders) {
476 // ServiceWorkerCache depends on ServiceWorkerFetchRequest having caseless 507 // ServiceWorkerCache depends on ServiceWorkerFetchRequest having caseless
477 // headers so that it can quickly lookup vary headers. 508 // headers so that it can quickly lookup vary headers.
478 ServiceWorkerFetchRequest request(GURL("http://www.example.com"), 509 ServiceWorkerFetchRequest request(GURL("http://www.example.com"),
479 "GET", 510 "GET",
480 ServiceWorkerHeaderMap(), 511 ServiceWorkerHeaderMap(),
481 GURL(""), 512 GURL(""),
482 false); 513 false);
483 request.headers["content-type"] = "foo"; 514 request.headers["content-type"] = "foo";
484 request.headers["Content-Type"] = "bar"; 515 request.headers["Content-Type"] = "bar";
485 EXPECT_EQ("bar", request.headers["content-type"]); 516 EXPECT_EQ("bar", request.headers["content-type"]);
486 } 517 }
487 518
488 INSTANTIATE_TEST_CASE_P(ServiceWorkerCacheTest, 519 INSTANTIATE_TEST_CASE_P(ServiceWorkerCacheTest,
489 ServiceWorkerCacheTestP, 520 ServiceWorkerCacheTestP,
490 ::testing::Values(false, true)); 521 ::testing::Values(false, true));
491 522
492 } // namespace content 523 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698