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

Side by Side Diff: content/browser/cache_storage/cache_storage_cache.cc

Issue 2516353002: Introduce url_list to the Response scheme of CacheStorage. (Closed)
Patch Set: Created 4 years 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/cache_storage/cache_storage_cache.h" 5 #include "content/browser/cache_storage/cache_storage_cache.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <algorithm> 8 #include <algorithm>
9 #include <limits> 9 #include <limits>
10 #include <memory> 10 #include <memory>
(...skipping 935 matching lines...) Expand 10 before | Expand all | Expand 10 after
946 operation.request.url, operation.request.method, 946 operation.request.url, operation.request.method,
947 operation.request.headers, operation.request.referrer, 947 operation.request.headers, operation.request.referrer,
948 operation.request.is_reload)); 948 operation.request.is_reload));
949 949
950 // We don't support streaming for cache. 950 // We don't support streaming for cache.
951 DCHECK(operation.response.stream_url.is_empty()); 951 DCHECK(operation.response.stream_url.is_empty());
952 // We don't support the body of redirect response. 952 // We don't support the body of redirect response.
953 DCHECK(!(operation.response.response_type == 953 DCHECK(!(operation.response.response_type ==
954 blink::WebServiceWorkerResponseTypeOpaqueRedirect && 954 blink::WebServiceWorkerResponseTypeOpaqueRedirect &&
955 operation.response.blob_size)); 955 operation.response.blob_size));
956 std::unique_ptr<ServiceWorkerResponse> response(new ServiceWorkerResponse(
957 operation.response.url, operation.response.status_code,
958 operation.response.status_text, operation.response.response_type,
959 operation.response.headers, operation.response.blob_uuid,
960 operation.response.blob_size, operation.response.stream_url,
961 operation.response.error, operation.response.response_time,
962 false /* is_in_cache_storage */,
963 std::string() /* cache_storage_cache_name */,
964 operation.response.cors_exposed_header_names));
965 956
957 std::unique_ptr<ServiceWorkerResponse> response(
958 new ServiceWorkerResponse(operation.response));
966 std::unique_ptr<storage::BlobDataHandle> blob_data_handle; 959 std::unique_ptr<storage::BlobDataHandle> blob_data_handle;
967 960
968 if (!response->blob_uuid.empty()) { 961 if (!response->blob_uuid.empty()) {
969 if (!blob_storage_context_) { 962 if (!blob_storage_context_) {
970 callback.Run(CACHE_STORAGE_ERROR_STORAGE); 963 callback.Run(CACHE_STORAGE_ERROR_STORAGE);
971 return; 964 return;
972 } 965 }
973 blob_data_handle = 966 blob_data_handle =
974 blob_storage_context_->GetBlobDataFromUUID(response->blob_uuid); 967 blob_storage_context_->GetBlobDataFromUUID(response->blob_uuid);
975 if (!blob_data_handle) { 968 if (!blob_data_handle) {
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1061 proto::CacheHeaderMap* header_map = request_metadata->add_headers(); 1054 proto::CacheHeaderMap* header_map = request_metadata->add_headers();
1062 header_map->set_name(it->first); 1055 header_map->set_name(it->first);
1063 header_map->set_value(it->second); 1056 header_map->set_value(it->second);
1064 } 1057 }
1065 1058
1066 proto::CacheResponse* response_metadata = metadata.mutable_response(); 1059 proto::CacheResponse* response_metadata = metadata.mutable_response();
1067 response_metadata->set_status_code(put_context->response->status_code); 1060 response_metadata->set_status_code(put_context->response->status_code);
1068 response_metadata->set_status_text(put_context->response->status_text); 1061 response_metadata->set_status_text(put_context->response->status_text);
1069 response_metadata->set_response_type( 1062 response_metadata->set_response_type(
1070 WebResponseTypeToProtoResponseType(put_context->response->response_type)); 1063 WebResponseTypeToProtoResponseType(put_context->response->response_type));
1071 response_metadata->set_url(put_context->response->url.spec()); 1064 for (const auto& url : put_context->response->url_list)
1065 response_metadata->add_url_list(url.spec());
1072 response_metadata->set_response_time( 1066 response_metadata->set_response_time(
1073 put_context->response->response_time.ToInternalValue()); 1067 put_context->response->response_time.ToInternalValue());
1074 for (ServiceWorkerHeaderMap::const_iterator it = 1068 for (ServiceWorkerHeaderMap::const_iterator it =
1075 put_context->response->headers.begin(); 1069 put_context->response->headers.begin();
1076 it != put_context->response->headers.end(); ++it) { 1070 it != put_context->response->headers.end(); ++it) {
1077 DCHECK_EQ(std::string::npos, it->first.find('\0')); 1071 DCHECK_EQ(std::string::npos, it->first.find('\0'));
1078 DCHECK_EQ(std::string::npos, it->second.find('\0')); 1072 DCHECK_EQ(std::string::npos, it->second.find('\0'));
1079 proto::CacheHeaderMap* header_map = response_metadata->add_headers(); 1073 proto::CacheHeaderMap* header_map = response_metadata->add_headers();
1080 header_map->set_name(it->first); 1074 header_map->set_name(it->first);
1081 header_map->set_value(it->second); 1075 header_map->set_value(it->second);
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
1400 const proto::CacheHeaderMap header = metadata.request().headers(i); 1394 const proto::CacheHeaderMap header = metadata.request().headers(i);
1401 DCHECK_EQ(std::string::npos, header.name().find('\0')); 1395 DCHECK_EQ(std::string::npos, header.name().find('\0'));
1402 DCHECK_EQ(std::string::npos, header.value().find('\0')); 1396 DCHECK_EQ(std::string::npos, header.value().find('\0'));
1403 request->headers.insert(std::make_pair(header.name(), header.value())); 1397 request->headers.insert(std::make_pair(header.name(), header.value()));
1404 } 1398 }
1405 } 1399 }
1406 1400
1407 void CacheStorageCache::PopulateResponseMetadata( 1401 void CacheStorageCache::PopulateResponseMetadata(
1408 const proto::CacheMetadata& metadata, 1402 const proto::CacheMetadata& metadata,
1409 ServiceWorkerResponse* response) { 1403 ServiceWorkerResponse* response) {
1410 *response = ServiceWorkerResponse( 1404 std::unique_ptr<std::vector<GURL>> url_list(
1411 GURL(metadata.response().url()), metadata.response().status_code(), 1405 base::MakeUnique<std::vector<GURL>>());
1412 metadata.response().status_text(), 1406 // From Chrome 57, proto::CacheMetadata's url field was deprecated.
1413 ProtoResponseTypeToWebResponseType(metadata.response().response_type()), 1407 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.
1414 ServiceWorkerHeaderMap(), "", 0, GURL(), 1408 metadata.response().has_url());
1415 blink::WebServiceWorkerResponseErrorUnknown, 1409 if (metadata.response().has_url()) {
1416 base::Time::FromInternalValue(metadata.response().response_time()), 1410 url_list->push_back(GURL(metadata.response().url()));
1417 true /* is_in_cache_storage */, cache_name_, 1411 } else {
1418 ServiceWorkerHeaderList( 1412 url_list->reserve(metadata.response().url_list_size());
1419 metadata.response().cors_exposed_header_names().begin(), 1413 for (int i = 0; i < metadata.response().url_list_size(); ++i)
1420 metadata.response().cors_exposed_header_names().end())); 1414 url_list->push_back(GURL(metadata.response().url_list(i)));
1415 }
1421 1416
1417 std::unique_ptr<ServiceWorkerHeaderMap> headers(
1418 base::MakeUnique<ServiceWorkerHeaderMap>());
1422 for (int i = 0; i < metadata.response().headers_size(); ++i) { 1419 for (int i = 0; i < metadata.response().headers_size(); ++i) {
1423 const proto::CacheHeaderMap header = metadata.response().headers(i); 1420 const proto::CacheHeaderMap header = metadata.response().headers(i);
1424 DCHECK_EQ(std::string::npos, header.name().find('\0')); 1421 DCHECK_EQ(std::string::npos, header.name().find('\0'));
1425 DCHECK_EQ(std::string::npos, header.value().find('\0')); 1422 DCHECK_EQ(std::string::npos, header.value().find('\0'));
1426 response->headers.insert(std::make_pair(header.name(), header.value())); 1423 headers->insert(std::make_pair(header.name(), header.value()));
1427 } 1424 }
1425
1426 *response = ServiceWorkerResponse(
1427 std::move(url_list), metadata.response().status_code(),
1428 metadata.response().status_text(),
1429 ProtoResponseTypeToWebResponseType(metadata.response().response_type()),
1430 std::move(headers), "", 0, GURL(),
1431 blink::WebServiceWorkerResponseErrorUnknown,
1432 base::Time::FromInternalValue(metadata.response().response_time()),
1433 true /* is_in_cache_storage */, cache_name_,
1434 base::MakeUnique<ServiceWorkerHeaderList>(
1435 metadata.response().cors_exposed_header_names().begin(),
1436 metadata.response().cors_exposed_header_names().end()));
1428 } 1437 }
1429 1438
1430 std::unique_ptr<storage::BlobDataHandle> 1439 std::unique_ptr<storage::BlobDataHandle>
1431 CacheStorageCache::PopulateResponseBody(disk_cache::ScopedEntryPtr entry, 1440 CacheStorageCache::PopulateResponseBody(disk_cache::ScopedEntryPtr entry,
1432 ServiceWorkerResponse* response) { 1441 ServiceWorkerResponse* response) {
1433 DCHECK(blob_storage_context_); 1442 DCHECK(blob_storage_context_);
1434 1443
1435 // Create a blob with the response body data. 1444 // Create a blob with the response body data.
1436 response->blob_size = entry->GetDataSize(INDEX_RESPONSE_BODY); 1445 response->blob_size = entry->GetDataSize(INDEX_RESPONSE_BODY);
1437 response->blob_uuid = base::GenerateGUID(); 1446 response->blob_uuid = base::GenerateGUID();
1438 storage::BlobDataBuilder blob_data(response->blob_uuid); 1447 storage::BlobDataBuilder blob_data(response->blob_uuid);
1439 1448
1440 disk_cache::Entry* temp_entry = entry.get(); 1449 disk_cache::Entry* temp_entry = entry.get();
1441 blob_data.AppendDiskCacheEntryWithSideData( 1450 blob_data.AppendDiskCacheEntryWithSideData(
1442 new CacheStorageCacheDataHandle(CreateCacheHandle(), std::move(entry)), 1451 new CacheStorageCacheDataHandle(CreateCacheHandle(), std::move(entry)),
1443 temp_entry, INDEX_RESPONSE_BODY, INDEX_SIDE_DATA); 1452 temp_entry, INDEX_RESPONSE_BODY, INDEX_SIDE_DATA);
1444 return blob_storage_context_->AddFinishedBlob(&blob_data); 1453 return blob_storage_context_->AddFinishedBlob(&blob_data);
1445 } 1454 }
1446 1455
1447 std::unique_ptr<CacheStorageCacheHandle> 1456 std::unique_ptr<CacheStorageCacheHandle>
1448 CacheStorageCache::CreateCacheHandle() { 1457 CacheStorageCache::CreateCacheHandle() {
1449 return cache_storage_->CreateCacheHandle(this); 1458 return cache_storage_->CreateCacheHandle(this);
1450 } 1459 }
1451 1460
1452 } // namespace content 1461 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698