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_write_to_cache_job.h" | 5 #include "content/browser/service_worker/service_worker_write_to_cache_job.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
10 #include "base/trace_event/trace_event.h" | 10 #include "base/trace_event/trace_event.h" |
(...skipping 605 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
616 bool* defer) { | 616 bool* defer) { |
617 DCHECK_EQ(net_request_, request); | 617 DCHECK_EQ(net_request_, request); |
618 TRACE_EVENT0("ServiceWorker", | 618 TRACE_EVENT0("ServiceWorker", |
619 "ServiceWorkerWriteToCacheJob::OnBeforeNetworkStart"); | 619 "ServiceWorkerWriteToCacheJob::OnBeforeNetworkStart"); |
620 NotifyBeforeNetworkStart(defer); | 620 NotifyBeforeNetworkStart(defer); |
621 } | 621 } |
622 | 622 |
623 void ServiceWorkerWriteToCacheJob::OnResponseStarted( | 623 void ServiceWorkerWriteToCacheJob::OnResponseStarted( |
624 net::URLRequest* request) { | 624 net::URLRequest* request) { |
625 DCHECK_EQ(net_request_, request); | 625 DCHECK_EQ(net_request_, request); |
| 626 if (!context_) { |
| 627 AsyncNotifyDoneHelper( |
| 628 net::URLRequestStatus(net::URLRequestStatus::FAILED, net::ERR_FAILED), |
| 629 kFetchScriptError); |
| 630 return; |
| 631 } |
| 632 |
626 if (!request->status().is_success()) { | 633 if (!request->status().is_success()) { |
627 AsyncNotifyDoneHelper(request->status(), kFetchScriptError); | 634 AsyncNotifyDoneHelper(request->status(), kFetchScriptError); |
628 return; | 635 return; |
629 } | 636 } |
630 if (request->GetResponseCode() / 100 != 2) { | 637 if (request->GetResponseCode() / 100 != 2) { |
631 std::string error_message = | 638 std::string error_message = |
632 base::StringPrintf(kBadHTTPResponseError, request->GetResponseCode()); | 639 base::StringPrintf(kBadHTTPResponseError, request->GetResponseCode()); |
633 AsyncNotifyDoneHelper(net::URLRequestStatus(net::URLRequestStatus::FAILED, | 640 AsyncNotifyDoneHelper(net::URLRequestStatus(net::URLRequestStatus::FAILED, |
634 net::ERR_INVALID_RESPONSE), | 641 net::ERR_INVALID_RESPONSE), |
635 error_message); | 642 error_message); |
636 // TODO(michaeln): Instead of error'ing immediately, send the net | 643 // TODO(michaeln): Instead of error'ing immediately, send the net |
637 // response to our consumer, just don't cache it? | 644 // response to our consumer, just don't cache it? |
638 return; | 645 return; |
639 } | 646 } |
| 647 |
| 648 // Update |last_update_check| only when the request bypassed the browser |
| 649 // cache. |
| 650 if (request->response_info().network_accessed) { |
| 651 ServiceWorkerRegistration* registration = |
| 652 context_->GetLiveRegistration(version_->registration_id()); |
| 653 DCHECK(registration); // We're registering or updating so must be there. |
| 654 |
| 655 registration->set_last_update_check(base::Time::Now()); |
| 656 context_->storage()->UpdateLastUpdateCheckTime(registration); |
| 657 } |
| 658 |
640 // OnSSLCertificateError is not called when the HTTPS connection is reused. | 659 // OnSSLCertificateError is not called when the HTTPS connection is reused. |
641 // So we check cert_status here. | 660 // So we check cert_status here. |
642 if (net::IsCertStatusError(request->ssl_info().cert_status)) { | 661 if (net::IsCertStatusError(request->ssl_info().cert_status)) { |
643 const net::HttpNetworkSession::Params* session_params = | 662 const net::HttpNetworkSession::Params* session_params = |
644 request->context()->GetNetworkSessionParams(); | 663 request->context()->GetNetworkSessionParams(); |
645 if (!session_params || !session_params->ignore_certificate_errors) { | 664 if (!session_params || !session_params->ignore_certificate_errors) { |
646 AsyncNotifyDoneHelper(net::URLRequestStatus(net::URLRequestStatus::FAILED, | 665 AsyncNotifyDoneHelper(net::URLRequestStatus(net::URLRequestStatus::FAILED, |
647 net::ERR_INSECURE_RESPONSE), | 666 net::ERR_INSECURE_RESPONSE), |
648 kSSLError); | 667 kSSLError); |
649 return; | 668 return; |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
816 DCHECK(!did_notify_finished_); | 835 DCHECK(!did_notify_finished_); |
817 int size = -1; | 836 int size = -1; |
818 if (status.is_success()) | 837 if (status.is_success()) |
819 size = writer_ ? writer_->amount_written() : 0; | 838 size = writer_ ? writer_->amount_written() : 0; |
820 version_->script_cache_map()->NotifyFinishedCaching(url_, size, status, | 839 version_->script_cache_map()->NotifyFinishedCaching(url_, size, status, |
821 status_message); | 840 status_message); |
822 did_notify_finished_ = true; | 841 did_notify_finished_ = true; |
823 } | 842 } |
824 | 843 |
825 } // namespace content | 844 } // namespace content |
OLD | NEW |