| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "webkit/appcache/appcache_service.h" | 5 #include "webkit/appcache/appcache_service.h" |
| 6 | 6 |
| 7 #include <functional> | 7 #include <functional> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 367 delete this; | 367 delete this; |
| 368 return; | 368 return; |
| 369 } | 369 } |
| 370 | 370 |
| 371 // Verify that we can read the response info and data. | 371 // Verify that we can read the response info and data. |
| 372 expected_total_size_ = entry->response_size(); | 372 expected_total_size_ = entry->response_size(); |
| 373 response_reader_.reset(service_->storage()->CreateResponseReader( | 373 response_reader_.reset(service_->storage()->CreateResponseReader( |
| 374 manifest_url_, group->group_id(), response_id_)); | 374 manifest_url_, group->group_id(), response_id_)); |
| 375 info_buffer_ = new HttpResponseInfoIOBuffer(); | 375 info_buffer_ = new HttpResponseInfoIOBuffer(); |
| 376 response_reader_->ReadInfo( | 376 response_reader_->ReadInfo( |
| 377 info_buffer_, base::Bind(&CheckResponseHelper::OnReadInfoComplete, | 377 info_buffer_.get(), |
| 378 base::Unretained(this))); | 378 base::Bind(&CheckResponseHelper::OnReadInfoComplete, |
| 379 base::Unretained(this))); |
| 379 } | 380 } |
| 380 | 381 |
| 381 void AppCacheService::CheckResponseHelper::OnReadInfoComplete(int result) { | 382 void AppCacheService::CheckResponseHelper::OnReadInfoComplete(int result) { |
| 382 if (result < 0) { | 383 if (result < 0) { |
| 383 AppCacheHistograms::CountCheckResponseResult( | 384 AppCacheHistograms::CountCheckResponseResult( |
| 384 AppCacheHistograms::READ_HEADERS_ERROR); | 385 AppCacheHistograms::READ_HEADERS_ERROR); |
| 385 service_->DeleteAppCacheGroup(manifest_url_, net::CompletionCallback()); | 386 service_->DeleteAppCacheGroup(manifest_url_, net::CompletionCallback()); |
| 386 delete this; | 387 delete this; |
| 387 return; | 388 return; |
| 388 } | 389 } |
| 389 amount_headers_read_ = result; | 390 amount_headers_read_ = result; |
| 390 | 391 |
| 391 // Start reading the data. | 392 // Start reading the data. |
| 392 data_buffer_ = new net::IOBuffer(kIOBufferSize); | 393 data_buffer_ = new net::IOBuffer(kIOBufferSize); |
| 393 response_reader_->ReadData( | 394 response_reader_->ReadData( |
| 394 data_buffer_, kIOBufferSize, | 395 data_buffer_.get(), |
| 396 kIOBufferSize, |
| 395 base::Bind(&CheckResponseHelper::OnReadDataComplete, | 397 base::Bind(&CheckResponseHelper::OnReadDataComplete, |
| 396 base::Unretained(this))); | 398 base::Unretained(this))); |
| 397 } | 399 } |
| 398 | 400 |
| 399 void AppCacheService::CheckResponseHelper::OnReadDataComplete(int result) { | 401 void AppCacheService::CheckResponseHelper::OnReadDataComplete(int result) { |
| 400 if (result > 0) { | 402 if (result > 0) { |
| 401 // Keep reading until we've read thru everything or failed to read. | 403 // Keep reading until we've read thru everything or failed to read. |
| 402 amount_data_read_ += result; | 404 amount_data_read_ += result; |
| 403 response_reader_->ReadData( | 405 response_reader_->ReadData( |
| 404 data_buffer_, kIOBufferSize, | 406 data_buffer_.get(), |
| 407 kIOBufferSize, |
| 405 base::Bind(&CheckResponseHelper::OnReadDataComplete, | 408 base::Bind(&CheckResponseHelper::OnReadDataComplete, |
| 406 base::Unretained(this))); | 409 base::Unretained(this))); |
| 407 return; | 410 return; |
| 408 } | 411 } |
| 409 | 412 |
| 410 AppCacheHistograms::CheckResponseResultType check_result; | 413 AppCacheHistograms::CheckResponseResultType check_result; |
| 411 if (result < 0) | 414 if (result < 0) |
| 412 check_result = AppCacheHistograms::READ_DATA_ERROR; | 415 check_result = AppCacheHistograms::READ_DATA_ERROR; |
| 413 else if (info_buffer_->response_data_size != amount_data_read_ || | 416 else if (info_buffer_->response_data_size != amount_data_read_ || |
| 414 expected_total_size_ != amount_data_read_ + amount_headers_read_) | 417 expected_total_size_ != amount_data_read_ + amount_headers_read_) |
| 415 check_result = AppCacheHistograms::UNEXPECTED_DATA_SIZE; | 418 check_result = AppCacheHistograms::UNEXPECTED_DATA_SIZE; |
| 416 else | 419 else |
| 417 check_result = AppCacheHistograms::RESPONSE_OK; | 420 check_result = AppCacheHistograms::RESPONSE_OK; |
| 418 AppCacheHistograms::CountCheckResponseResult(check_result); | 421 AppCacheHistograms::CountCheckResponseResult(check_result); |
| 419 | 422 |
| 420 if (check_result != AppCacheHistograms::RESPONSE_OK) | 423 if (check_result != AppCacheHistograms::RESPONSE_OK) |
| 421 service_->DeleteAppCacheGroup(manifest_url_, net::CompletionCallback()); | 424 service_->DeleteAppCacheGroup(manifest_url_, net::CompletionCallback()); |
| 422 delete this; | 425 delete this; |
| 423 } | 426 } |
| 424 | 427 |
| 425 | 428 |
| 426 // AppCacheService ------- | 429 // AppCacheService ------- |
| 427 | 430 |
| 428 AppCacheService::AppCacheService(quota::QuotaManagerProxy* quota_manager_proxy) | 431 AppCacheService::AppCacheService(quota::QuotaManagerProxy* quota_manager_proxy) |
| 429 : appcache_policy_(NULL), quota_client_(NULL), | 432 : appcache_policy_(NULL), quota_client_(NULL), |
| 430 quota_manager_proxy_(quota_manager_proxy), | 433 quota_manager_proxy_(quota_manager_proxy), |
| 431 request_context_(NULL), | 434 request_context_(NULL), |
| 432 force_keep_session_state_(false) { | 435 force_keep_session_state_(false) { |
| 433 if (quota_manager_proxy_) { | 436 if (quota_manager_proxy_.get()) { |
| 434 quota_client_ = new AppCacheQuotaClient(this); | 437 quota_client_ = new AppCacheQuotaClient(this); |
| 435 quota_manager_proxy_->RegisterClient(quota_client_); | 438 quota_manager_proxy_->RegisterClient(quota_client_); |
| 436 } | 439 } |
| 437 } | 440 } |
| 438 | 441 |
| 439 AppCacheService::~AppCacheService() { | 442 AppCacheService::~AppCacheService() { |
| 440 DCHECK(backends_.empty()); | 443 DCHECK(backends_.empty()); |
| 441 std::for_each(pending_helpers_.begin(), | 444 std::for_each(pending_helpers_.begin(), |
| 442 pending_helpers_.end(), | 445 pending_helpers_.end(), |
| 443 std::mem_fun(&AsyncHelper::Cancel)); | 446 std::mem_fun(&AsyncHelper::Cancel)); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 508 backends_.insert( | 511 backends_.insert( |
| 509 BackendMap::value_type(backend_impl->process_id(), backend_impl)); | 512 BackendMap::value_type(backend_impl->process_id(), backend_impl)); |
| 510 } | 513 } |
| 511 | 514 |
| 512 void AppCacheService::UnregisterBackend( | 515 void AppCacheService::UnregisterBackend( |
| 513 AppCacheBackendImpl* backend_impl) { | 516 AppCacheBackendImpl* backend_impl) { |
| 514 backends_.erase(backend_impl->process_id()); | 517 backends_.erase(backend_impl->process_id()); |
| 515 } | 518 } |
| 516 | 519 |
| 517 } // namespace appcache | 520 } // namespace appcache |
| OLD | NEW |