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

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

Issue 617263002: Support WebServiceWorkerResponseType in ServiceWorkerCache. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
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 <string> 7 #include <string>
8 8
9 #include "base/files/file_path.h" 9 #include "base/files/file_path.h"
10 #include "base/guid.h" 10 #include "base/guid.h"
11 #include "base/message_loop/message_loop_proxy.h" 11 #include "base/message_loop/message_loop_proxy.h"
12 #include "base/strings/string_util.h" 12 #include "base/strings/string_util.h"
13 #include "content/browser/service_worker/service_worker_cache.pb.h" 13 #include "content/browser/service_worker/service_worker_cache.pb.h"
14 #include "content/public/browser/browser_thread.h" 14 #include "content/public/browser/browser_thread.h"
15 #include "net/base/io_buffer.h" 15 #include "net/base/io_buffer.h"
16 #include "net/base/net_errors.h" 16 #include "net/base/net_errors.h"
17 #include "net/disk_cache/disk_cache.h" 17 #include "net/disk_cache/disk_cache.h"
18 #include "net/url_request/url_request_context.h" 18 #include "net/url_request/url_request_context.h"
19 #include "storage/browser/blob/blob_data_handle.h" 19 #include "storage/browser/blob/blob_data_handle.h"
20 #include "storage/browser/blob/blob_storage_context.h" 20 #include "storage/browser/blob/blob_storage_context.h"
21 #include "storage/browser/blob/blob_url_request_job_factory.h" 21 #include "storage/browser/blob/blob_url_request_job_factory.h"
22 #include "third_party/WebKit/public/platform/WebServiceWorkerResponseType.h"
22 23
23 namespace content { 24 namespace content {
24 25
25 namespace { 26 namespace {
26 27
27 typedef scoped_ptr<disk_cache::Backend> ScopedBackendPtr; 28 typedef scoped_ptr<disk_cache::Backend> ScopedBackendPtr;
28 typedef base::Callback<void(bool)> BoolCallback; 29 typedef base::Callback<void(bool)> BoolCallback;
29 typedef base::Callback<void(disk_cache::ScopedEntryPtr, bool)> 30 typedef base::Callback<void(disk_cache::ScopedEntryPtr, bool)>
30 EntryBoolCallback; 31 EntryBoolCallback;
31 typedef base::Callback<void(scoped_ptr<ServiceWorkerRequestResponseHeaders>)> 32 typedef base::Callback<void(scoped_ptr<ServiceWorkerRequestResponseHeaders>)>
32 HeadersCallback; 33 HeadersCallback;
33 34
34 enum EntryIndex { INDEX_HEADERS = 0, INDEX_RESPONSE_BODY }; 35 enum EntryIndex { INDEX_HEADERS = 0, INDEX_RESPONSE_BODY };
35 36
36 // The maximum size of an individual cache. Ultimately cache size is controlled 37 // The maximum size of an individual cache. Ultimately cache size is controlled
37 // per-origin. 38 // per-origin.
38 const int kMaxCacheBytes = 512 * 1024 * 1024; 39 const int kMaxCacheBytes = 512 * 1024 * 1024;
39 40
40 // Buffer size for cache and blob reading/writing. 41 // Buffer size for cache and blob reading/writing.
41 const int kBufferSize = 1024 * 512; 42 const int kBufferSize = 1024 * 512;
42 43
44 blink::WebServiceWorkerResponseType ProtoResponseTypeToWebResponseType(
jochen (gone - plz use gerrit) 2014/10/02 07:35:28 can you use the assert matching enums macro and ju
jkarlin 2014/10/02 13:34:29 After chat discussion with jochen@ it was clarifie
45 ServiceWorkerRequestResponseHeaders_ResponseType response_type) {
46 switch (response_type) {
47 case ServiceWorkerRequestResponseHeaders_ResponseType_BASIC_TYPE:
48 return blink::WebServiceWorkerResponseTypeBasic;
49 case ServiceWorkerRequestResponseHeaders_ResponseType_CORS_TYPE:
50 return blink::WebServiceWorkerResponseTypeCORS;
51 case ServiceWorkerRequestResponseHeaders_ResponseType_DEFAULT_TYPE:
52 return blink::WebServiceWorkerResponseTypeDefault;
53 case ServiceWorkerRequestResponseHeaders_ResponseType_ERROR_TYPE:
54 return blink::WebServiceWorkerResponseTypeError;
55 case ServiceWorkerRequestResponseHeaders_ResponseType_OPAQUE_TYPE:
56 return blink::WebServiceWorkerResponseTypeOpaque;
57 }
58 NOTREACHED();
59 return blink::WebServiceWorkerResponseTypeOpaque;
60 }
61
62 ServiceWorkerRequestResponseHeaders_ResponseType
63 WebResponseTypeToProtoResponseType(
64 blink::WebServiceWorkerResponseType response_type) {
65 switch (response_type) {
66 case blink::WebServiceWorkerResponseTypeBasic:
67 return ServiceWorkerRequestResponseHeaders_ResponseType_BASIC_TYPE;
68 case blink::WebServiceWorkerResponseTypeCORS:
69 return ServiceWorkerRequestResponseHeaders_ResponseType_CORS_TYPE;
70 case blink::WebServiceWorkerResponseTypeDefault:
71 return ServiceWorkerRequestResponseHeaders_ResponseType_DEFAULT_TYPE;
72 case blink::WebServiceWorkerResponseTypeError:
73 return ServiceWorkerRequestResponseHeaders_ResponseType_ERROR_TYPE;
74 case blink::WebServiceWorkerResponseTypeOpaque:
75 return ServiceWorkerRequestResponseHeaders_ResponseType_OPAQUE_TYPE;
76 }
77 NOTREACHED();
78 return ServiceWorkerRequestResponseHeaders_ResponseType_OPAQUE_TYPE;
79 }
80
43 struct ResponseReadContext { 81 struct ResponseReadContext {
44 ResponseReadContext(scoped_refptr<net::IOBufferWithSize> buff, 82 ResponseReadContext(scoped_refptr<net::IOBufferWithSize> buff,
45 scoped_refptr<storage::BlobData> blob) 83 scoped_refptr<storage::BlobData> blob)
46 : buffer(buff), blob_data(blob), total_bytes_read(0) {} 84 : buffer(buff), blob_data(blob), total_bytes_read(0) {}
47 85
48 scoped_refptr<net::IOBufferWithSize> buffer; 86 scoped_refptr<net::IOBufferWithSize> buffer;
49 scoped_refptr<storage::BlobData> blob_data; 87 scoped_refptr<storage::BlobData> blob_data;
50 int total_bytes_read; 88 int total_bytes_read;
51 89
52 DISALLOW_COPY_AND_ASSIGN(ResponseReadContext); 90 DISALLOW_COPY_AND_ASSIGN(ResponseReadContext);
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 put_context->callback.Run(ServiceWorkerCache::ErrorTypeExists, 296 put_context->callback.Run(ServiceWorkerCache::ErrorTypeExists,
259 scoped_ptr<ServiceWorkerResponse>(), 297 scoped_ptr<ServiceWorkerResponse>(),
260 scoped_ptr<storage::BlobDataHandle>()); 298 scoped_ptr<storage::BlobDataHandle>());
261 return; 299 return;
262 } 300 }
263 301
264 DCHECK(put_context->cache_entry); 302 DCHECK(put_context->cache_entry);
265 303
266 ServiceWorkerRequestResponseHeaders headers; 304 ServiceWorkerRequestResponseHeaders headers;
267 headers.set_method(put_context->request->method); 305 headers.set_method(put_context->request->method);
268
269 headers.set_status_code(put_context->response->status_code); 306 headers.set_status_code(put_context->response->status_code);
270 headers.set_status_text(put_context->response->status_text); 307 headers.set_status_text(put_context->response->status_text);
308 headers.set_response_type(
309 WebResponseTypeToProtoResponseType(put_context->response->response_type));
271 for (ServiceWorkerHeaderMap::const_iterator it = 310 for (ServiceWorkerHeaderMap::const_iterator it =
272 put_context->request->headers.begin(); 311 put_context->request->headers.begin();
273 it != put_context->request->headers.end(); 312 it != put_context->request->headers.end();
274 ++it) { 313 ++it) {
275 ServiceWorkerRequestResponseHeaders::HeaderMap* header_map = 314 ServiceWorkerRequestResponseHeaders::HeaderMap* header_map =
276 headers.add_request_headers(); 315 headers.add_request_headers();
277 header_map->set_name(it->first); 316 header_map->set_name(it->first);
278 header_map->set_value(it->second); 317 header_map->set_value(it->second);
279 } 318 }
280 319
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 base::WeakPtr<storage::BlobStorageContext> blob_storage, 481 base::WeakPtr<storage::BlobStorageContext> blob_storage,
443 disk_cache::ScopedEntryPtr entry, 482 disk_cache::ScopedEntryPtr entry,
444 scoped_ptr<ServiceWorkerRequestResponseHeaders> headers) { 483 scoped_ptr<ServiceWorkerRequestResponseHeaders> headers) {
445 if (!headers) { 484 if (!headers) {
446 callback.Run(ServiceWorkerCache::ErrorTypeStorage, 485 callback.Run(ServiceWorkerCache::ErrorTypeStorage,
447 scoped_ptr<ServiceWorkerResponse>(), 486 scoped_ptr<ServiceWorkerResponse>(),
448 scoped_ptr<storage::BlobDataHandle>()); 487 scoped_ptr<storage::BlobDataHandle>());
449 return; 488 return;
450 } 489 }
451 490
452 scoped_ptr<ServiceWorkerResponse> response( 491 scoped_ptr<ServiceWorkerResponse> response(new ServiceWorkerResponse(
453 new ServiceWorkerResponse(request->url, 492 request->url,
454 headers->status_code(), 493 headers->status_code(),
455 headers->status_text(), 494 headers->status_text(),
456 ServiceWorkerHeaderMap(), 495 ProtoResponseTypeToWebResponseType(headers->response_type()),
457 "")); 496 ServiceWorkerHeaderMap(),
497 ""));
458 498
459 for (int i = 0; i < headers->response_headers_size(); ++i) { 499 for (int i = 0; i < headers->response_headers_size(); ++i) {
460 const ServiceWorkerRequestResponseHeaders::HeaderMap header = 500 const ServiceWorkerRequestResponseHeaders::HeaderMap header =
461 headers->response_headers(i); 501 headers->response_headers(i);
462 response->headers.insert(std::make_pair(header.name(), header.value())); 502 response->headers.insert(std::make_pair(header.name(), header.value()));
463 } 503 }
464 504
465 ServiceWorkerHeaderMap cached_request_headers; 505 ServiceWorkerHeaderMap cached_request_headers;
466 for (int i = 0; i < headers->request_headers_size(); ++i) { 506 for (int i = 0; i < headers->request_headers_size(); ++i) {
467 const ServiceWorkerRequestResponseHeaders::HeaderMap header = 507 const ServiceWorkerRequestResponseHeaders::HeaderMap header =
(...skipping 588 matching lines...) Expand 10 before | Expand all | Expand 10 after
1056 initialized_ = true; 1096 initialized_ = true;
1057 for (std::vector<base::Closure>::iterator it = init_callbacks_.begin(); 1097 for (std::vector<base::Closure>::iterator it = init_callbacks_.begin();
1058 it != init_callbacks_.end(); 1098 it != init_callbacks_.end();
1059 ++it) { 1099 ++it) {
1060 it->Run(); 1100 it->Run();
1061 } 1101 }
1062 init_callbacks_.clear(); 1102 init_callbacks_.clear();
1063 } 1103 }
1064 1104
1065 } // namespace content 1105 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698