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

Unified Diff: content/browser/appcache/appcache_update_job.cc

Issue 645123003: Do no AppCache responses with SSL cert errors. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/appcache/appcache_update_job.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/appcache/appcache_update_job.cc
diff --git a/content/browser/appcache/appcache_update_job.cc b/content/browser/appcache/appcache_update_job.cc
index 2b8b3ecc8169c96ce620dcb407c9398b26f761a0..088d939a6cef331338cc36536bf649f4ab7460e8 100644
--- a/content/browser/appcache/appcache_update_job.cc
+++ b/content/browser/appcache/appcache_update_job.cc
@@ -160,46 +160,49 @@ void AppCacheUpdateJob::URLFetcher::OnResponseStarted(
response_code = request->GetResponseCode();
job_->MadeProgress();
}
- if ((response_code / 100) == 2) {
- // See http://code.google.com/p/chromium/issues/detail?id=69594
- // We willfully violate the HTML5 spec at this point in order
+ if ((response_code / 100) != 2) {
+ if (response_code > 0)
+ result_ = SERVER_ERROR;
+ else
+ result_ = NETWORK_ERROR;
+ OnResponseCompleted();
+ return;
+ }
+
+ if (url_.SchemeIsSecure()) {
+ // Do not cache content with cert errors.
+ // Also, we willfully violate the HTML5 spec at this point in order
// to support the appcaching of cross-origin HTTPS resources.
// We've opted for a milder constraint and allow caching unless
// the resource has a "no-store" header. A spec change has been
// requested on the whatwg list.
- // TODO(michaeln): Consider doing this for cross-origin HTTP resources too.
- if (url_.SchemeIsSecure() &&
- url_.GetOrigin() != job_->manifest_url_.GetOrigin()) {
- if (request->response_headers()->
- HasHeaderValue("cache-control", "no-store")) {
- DCHECK_EQ(-1, redirect_response_code_);
- request->Cancel();
- result_ = SERVER_ERROR; // Not the best match?
- OnResponseCompleted();
- return;
- }
+ // See http://code.google.com/p/chromium/issues/detail?id=69594
+ // TODO(michaeln): Consider doing this for cross-origin HTTP too.
+ if (net::IsCertStatusError(request->ssl_info().cert_status) ||
+ (url_.GetOrigin() != job_->manifest_url_.GetOrigin() &&
+ request->response_headers()->
+ HasHeaderValue("cache-control", "no-store"))) {
+ DCHECK_EQ(-1, redirect_response_code_);
+ request->Cancel();
+ result_ = SECURITY_ERROR;
+ OnResponseCompleted();
+ return;
}
+ }
- // Write response info to storage for URL fetches. Wait for async write
- // completion before reading any response data.
- if (fetch_type_ == URL_FETCH || fetch_type_ == MASTER_ENTRY_FETCH) {
- response_writer_.reset(job_->CreateResponseWriter());
- scoped_refptr<HttpResponseInfoIOBuffer> io_buffer(
- new HttpResponseInfoIOBuffer(
- new net::HttpResponseInfo(request->response_info())));
- response_writer_->WriteInfo(
- io_buffer.get(),
- base::Bind(&URLFetcher::OnWriteComplete, base::Unretained(this)));
- } else {
- ReadResponseData();
- }
+ // Write response info to storage for URL fetches. Wait for async write
+ // completion before reading any response data.
+ if (fetch_type_ == URL_FETCH || fetch_type_ == MASTER_ENTRY_FETCH) {
+ response_writer_.reset(job_->CreateResponseWriter());
+ scoped_refptr<HttpResponseInfoIOBuffer> io_buffer(
+ new HttpResponseInfoIOBuffer(
+ new net::HttpResponseInfo(request->response_info())));
+ response_writer_->WriteInfo(
+ io_buffer.get(),
+ base::Bind(&URLFetcher::OnWriteComplete, base::Unretained(this)));
} else {
- if (response_code > 0)
- result_ = SERVER_ERROR;
- else
- result_ = NETWORK_ERROR;
- OnResponseCompleted();
+ ReadResponseData();
}
}
« no previous file with comments | « content/browser/appcache/appcache_update_job.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698