Index: content/browser/cache_storage/cache_storage_cache.cc |
diff --git a/content/browser/cache_storage/cache_storage_cache.cc b/content/browser/cache_storage/cache_storage_cache.cc |
index 77286600d22f3f6f75286086d32f83a921e81353..1d672df4784c9c3273d1f35a60c57a41c30fbb90 100644 |
--- a/content/browser/cache_storage/cache_storage_cache.cc |
+++ b/content/browser/cache_storage/cache_storage_cache.cc |
@@ -953,16 +953,9 @@ void CacheStorageCache::Put(const CacheStorageBatchOperation& operation, |
DCHECK(!(operation.response.response_type == |
blink::WebServiceWorkerResponseTypeOpaqueRedirect && |
operation.response.blob_size)); |
- std::unique_ptr<ServiceWorkerResponse> response(new ServiceWorkerResponse( |
- operation.response.url, operation.response.status_code, |
- operation.response.status_text, operation.response.response_type, |
- operation.response.headers, operation.response.blob_uuid, |
- operation.response.blob_size, operation.response.stream_url, |
- operation.response.error, operation.response.response_time, |
- false /* is_in_cache_storage */, |
- std::string() /* cache_storage_cache_name */, |
- operation.response.cors_exposed_header_names)); |
+ std::unique_ptr<ServiceWorkerResponse> response( |
+ new ServiceWorkerResponse(operation.response)); |
std::unique_ptr<storage::BlobDataHandle> blob_data_handle; |
if (!response->blob_uuid.empty()) { |
@@ -1068,7 +1061,8 @@ void CacheStorageCache::PutDidCreateEntry( |
response_metadata->set_status_text(put_context->response->status_text); |
response_metadata->set_response_type( |
WebResponseTypeToProtoResponseType(put_context->response->response_type)); |
- response_metadata->set_url(put_context->response->url.spec()); |
+ for (const auto& url : put_context->response->url_list) |
+ response_metadata->add_url_list(url.spec()); |
response_metadata->set_response_time( |
put_context->response->response_time.ToInternalValue()); |
for (ServiceWorkerHeaderMap::const_iterator it = |
@@ -1407,24 +1401,39 @@ void CacheStorageCache::PopulateRequestFromMetadata( |
void CacheStorageCache::PopulateResponseMetadata( |
const proto::CacheMetadata& metadata, |
ServiceWorkerResponse* response) { |
+ std::unique_ptr<std::vector<GURL>> url_list( |
+ base::MakeUnique<std::vector<GURL>>()); |
+ // From Chrome 57, proto::CacheMetadata's url field was deprecated. |
+ UMA_HISTOGRAM_BOOLEAN("ServiceWorkerCache.Response.HasDepricatedURL", |
falken
2016/11/30 14:57:37
s/Depricated/Deprecated
Given the size of this CL
horo
2016/12/01 07:42:13
Done.
Added TODO.
|
+ metadata.response().has_url()); |
+ if (metadata.response().has_url()) { |
+ url_list->push_back(GURL(metadata.response().url())); |
+ } else { |
+ url_list->reserve(metadata.response().url_list_size()); |
+ for (int i = 0; i < metadata.response().url_list_size(); ++i) |
+ url_list->push_back(GURL(metadata.response().url_list(i))); |
+ } |
+ |
+ std::unique_ptr<ServiceWorkerHeaderMap> headers( |
+ base::MakeUnique<ServiceWorkerHeaderMap>()); |
+ for (int i = 0; i < metadata.response().headers_size(); ++i) { |
+ const proto::CacheHeaderMap header = metadata.response().headers(i); |
+ DCHECK_EQ(std::string::npos, header.name().find('\0')); |
+ DCHECK_EQ(std::string::npos, header.value().find('\0')); |
+ headers->insert(std::make_pair(header.name(), header.value())); |
+ } |
+ |
*response = ServiceWorkerResponse( |
- GURL(metadata.response().url()), metadata.response().status_code(), |
+ std::move(url_list), metadata.response().status_code(), |
metadata.response().status_text(), |
ProtoResponseTypeToWebResponseType(metadata.response().response_type()), |
- ServiceWorkerHeaderMap(), "", 0, GURL(), |
+ std::move(headers), "", 0, GURL(), |
blink::WebServiceWorkerResponseErrorUnknown, |
base::Time::FromInternalValue(metadata.response().response_time()), |
true /* is_in_cache_storage */, cache_name_, |
- ServiceWorkerHeaderList( |
+ base::MakeUnique<ServiceWorkerHeaderList>( |
metadata.response().cors_exposed_header_names().begin(), |
metadata.response().cors_exposed_header_names().end())); |
- |
- for (int i = 0; i < metadata.response().headers_size(); ++i) { |
- const proto::CacheHeaderMap header = metadata.response().headers(i); |
- DCHECK_EQ(std::string::npos, header.name().find('\0')); |
- DCHECK_EQ(std::string::npos, header.value().find('\0')); |
- response->headers.insert(std::make_pair(header.name(), header.value())); |
- } |
} |
std::unique_ptr<storage::BlobDataHandle> |