OLD | NEW |
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_url_request_job.h" | 5 #include "content/browser/service_worker/service_worker_url_request_job.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 14 matching lines...) Expand all Loading... |
25 #include "webkit/browser/blob/blob_data_handle.h" | 25 #include "webkit/browser/blob/blob_data_handle.h" |
26 #include "webkit/browser/blob/blob_storage_context.h" | 26 #include "webkit/browser/blob/blob_storage_context.h" |
27 #include "webkit/browser/blob/blob_url_request_job_factory.h" | 27 #include "webkit/browser/blob/blob_url_request_job_factory.h" |
28 | 28 |
29 namespace content { | 29 namespace content { |
30 | 30 |
31 ServiceWorkerURLRequestJob::ServiceWorkerURLRequestJob( | 31 ServiceWorkerURLRequestJob::ServiceWorkerURLRequestJob( |
32 net::URLRequest* request, | 32 net::URLRequest* request, |
33 net::NetworkDelegate* network_delegate, | 33 net::NetworkDelegate* network_delegate, |
34 base::WeakPtr<ServiceWorkerProviderHost> provider_host, | 34 base::WeakPtr<ServiceWorkerProviderHost> provider_host, |
35 base::WeakPtr<webkit_blob::BlobStorageContext> blob_storage_context, | 35 base::WeakPtr<storage::BlobStorageContext> blob_storage_context, |
36 scoped_refptr<ResourceRequestBody> body) | 36 scoped_refptr<ResourceRequestBody> body) |
37 : net::URLRequestJob(request, network_delegate), | 37 : net::URLRequestJob(request, network_delegate), |
38 provider_host_(provider_host), | 38 provider_host_(provider_host), |
39 response_type_(NOT_DETERMINED), | 39 response_type_(NOT_DETERMINED), |
40 is_started_(false), | 40 is_started_(false), |
41 blob_storage_context_(blob_storage_context), | 41 blob_storage_context_(blob_storage_context), |
42 body_(body), | 42 body_(body), |
43 weak_factory_(this) { | 43 weak_factory_(this) { |
44 } | 44 } |
45 | 45 |
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
268 return false; | 268 return false; |
269 const std::string uuid(base::GenerateGUID()); | 269 const std::string uuid(base::GenerateGUID()); |
270 uint64 size = 0; | 270 uint64 size = 0; |
271 std::vector<const ResourceRequestBody::Element*> resolved_elements; | 271 std::vector<const ResourceRequestBody::Element*> resolved_elements; |
272 for (size_t i = 0; i < body_->elements()->size(); ++i) { | 272 for (size_t i = 0; i < body_->elements()->size(); ++i) { |
273 const ResourceRequestBody::Element& element = (*body_->elements())[i]; | 273 const ResourceRequestBody::Element& element = (*body_->elements())[i]; |
274 if (element.type() != ResourceRequestBody::Element::TYPE_BLOB) { | 274 if (element.type() != ResourceRequestBody::Element::TYPE_BLOB) { |
275 resolved_elements.push_back(&element); | 275 resolved_elements.push_back(&element); |
276 continue; | 276 continue; |
277 } | 277 } |
278 scoped_ptr<webkit_blob::BlobDataHandle> handle = | 278 scoped_ptr<storage::BlobDataHandle> handle = |
279 blob_storage_context_->GetBlobDataFromUUID(element.blob_uuid()); | 279 blob_storage_context_->GetBlobDataFromUUID(element.blob_uuid()); |
280 if (handle->data()->items().empty()) | 280 if (handle->data()->items().empty()) |
281 continue; | 281 continue; |
282 for (size_t i = 0; i < handle->data()->items().size(); ++i) { | 282 for (size_t i = 0; i < handle->data()->items().size(); ++i) { |
283 const webkit_blob::BlobData::Item& item = handle->data()->items().at(i); | 283 const storage::BlobData::Item& item = handle->data()->items().at(i); |
284 DCHECK_NE(webkit_blob::BlobData::Item::TYPE_BLOB, item.type()); | 284 DCHECK_NE(storage::BlobData::Item::TYPE_BLOB, item.type()); |
285 resolved_elements.push_back(&item); | 285 resolved_elements.push_back(&item); |
286 } | 286 } |
287 } | 287 } |
288 scoped_refptr<webkit_blob::BlobData> blob_data = | 288 scoped_refptr<storage::BlobData> blob_data = new storage::BlobData(uuid); |
289 new webkit_blob::BlobData(uuid); | |
290 for (size_t i = 0; i < resolved_elements.size(); ++i) { | 289 for (size_t i = 0; i < resolved_elements.size(); ++i) { |
291 const ResourceRequestBody::Element& element = *resolved_elements[i]; | 290 const ResourceRequestBody::Element& element = *resolved_elements[i]; |
292 size += element.length(); | 291 size += element.length(); |
293 switch (element.type()) { | 292 switch (element.type()) { |
294 case ResourceRequestBody::Element::TYPE_BYTES: | 293 case ResourceRequestBody::Element::TYPE_BYTES: |
295 blob_data->AppendData(element.bytes(), element.length()); | 294 blob_data->AppendData(element.bytes(), element.length()); |
296 break; | 295 break; |
297 case ResourceRequestBody::Element::TYPE_FILE: | 296 case ResourceRequestBody::Element::TYPE_FILE: |
298 blob_data->AppendFile(element.path(), | 297 blob_data->AppendFile(element.path(), |
299 element.offset(), | 298 element.offset(), |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
349 response_type_ = FALLBACK_TO_NETWORK; | 348 response_type_ = FALLBACK_TO_NETWORK; |
350 NotifyRestartRequired(); | 349 NotifyRestartRequired(); |
351 return; | 350 return; |
352 } | 351 } |
353 | 352 |
354 // We should have a response now. | 353 // We should have a response now. |
355 DCHECK_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, fetch_result); | 354 DCHECK_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, fetch_result); |
356 | 355 |
357 // Set up a request for reading the blob. | 356 // Set up a request for reading the blob. |
358 if (!response.blob_uuid.empty() && blob_storage_context_) { | 357 if (!response.blob_uuid.empty() && blob_storage_context_) { |
359 scoped_ptr<webkit_blob::BlobDataHandle> blob_data_handle = | 358 scoped_ptr<storage::BlobDataHandle> blob_data_handle = |
360 blob_storage_context_->GetBlobDataFromUUID(response.blob_uuid); | 359 blob_storage_context_->GetBlobDataFromUUID(response.blob_uuid); |
361 if (!blob_data_handle) { | 360 if (!blob_data_handle) { |
362 // The renderer gave us a bad blob UUID. | 361 // The renderer gave us a bad blob UUID. |
363 DeliverErrorResponse(); | 362 DeliverErrorResponse(); |
364 return; | 363 return; |
365 } | 364 } |
366 blob_request_ = webkit_blob::BlobProtocolHandler::CreateBlobRequest( | 365 blob_request_ = storage::BlobProtocolHandler::CreateBlobRequest( |
367 blob_data_handle.Pass(), request()->context(), this); | 366 blob_data_handle.Pass(), request()->context(), this); |
368 blob_request_->Start(); | 367 blob_request_->Start(); |
369 } | 368 } |
370 | 369 |
371 response_url_ = response.url; | 370 response_url_ = response.url; |
372 CreateResponseHeader( | 371 CreateResponseHeader( |
373 response.status_code, response.status_text, response.headers); | 372 response.status_code, response.status_text, response.headers); |
374 if (!blob_request_) | 373 if (!blob_request_) |
375 CommitResponseHeader(); | 374 CommitResponseHeader(); |
376 } | 375 } |
(...skipping 29 matching lines...) Expand all Loading... |
406 void ServiceWorkerURLRequestJob::DeliverErrorResponse() { | 405 void ServiceWorkerURLRequestJob::DeliverErrorResponse() { |
407 // TODO(falken): Print an error to the console of the ServiceWorker and of | 406 // TODO(falken): Print an error to the console of the ServiceWorker and of |
408 // the requesting page. | 407 // the requesting page. |
409 CreateResponseHeader(500, | 408 CreateResponseHeader(500, |
410 "Service Worker Response Error", | 409 "Service Worker Response Error", |
411 std::map<std::string, std::string>()); | 410 std::map<std::string, std::string>()); |
412 CommitResponseHeader(); | 411 CommitResponseHeader(); |
413 } | 412 } |
414 | 413 |
415 } // namespace content | 414 } // namespace content |
OLD | NEW |