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

Side by Side Diff: net/filter/sdch_filter.cc

Issue 414563002: Added stats on why blacklisted requests were blacklisted. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sync'd to r288872 Created 6 years, 4 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/base/sdch_manager_unittest.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "net/filter/sdch_filter.h" 5 #include "net/filter/sdch_filter.h"
6 6
7 #include <ctype.h> 7 #include <ctype.h>
8 #include <limits.h> 8 #include <limits.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 } 48 }
49 49
50 if (vcdiff_streaming_decoder_.get()) { 50 if (vcdiff_streaming_decoder_.get()) {
51 if (!vcdiff_streaming_decoder_->FinishDecoding()) { 51 if (!vcdiff_streaming_decoder_->FinishDecoding()) {
52 decoding_status_ = DECODING_ERROR; 52 decoding_status_ = DECODING_ERROR;
53 SdchManager::SdchErrorRecovery(SdchManager::INCOMPLETE_SDCH_CONTENT); 53 SdchManager::SdchErrorRecovery(SdchManager::INCOMPLETE_SDCH_CONTENT);
54 // Make it possible for the user to hit reload, and get non-sdch content. 54 // Make it possible for the user to hit reload, and get non-sdch content.
55 // Note this will "wear off" quickly enough, and is just meant to assure 55 // Note this will "wear off" quickly enough, and is just meant to assure
56 // in some rare case that the user is not stuck. 56 // in some rare case that the user is not stuck.
57 url_request_context_->sdch_manager()->BlacklistDomain( 57 url_request_context_->sdch_manager()->BlacklistDomain(
58 url_); 58 url_, SdchManager::INCOMPLETE_SDCH_CONTENT);
59 UMA_HISTOGRAM_COUNTS("Sdch3.PartialBytesIn", 59 UMA_HISTOGRAM_COUNTS("Sdch3.PartialBytesIn",
60 static_cast<int>(filter_context_.GetByteReadCount())); 60 static_cast<int>(filter_context_.GetByteReadCount()));
61 UMA_HISTOGRAM_COUNTS("Sdch3.PartialVcdiffIn", source_bytes_); 61 UMA_HISTOGRAM_COUNTS("Sdch3.PartialVcdiffIn", source_bytes_);
62 UMA_HISTOGRAM_COUNTS("Sdch3.PartialVcdiffOut", output_bytes_); 62 UMA_HISTOGRAM_COUNTS("Sdch3.PartialVcdiffOut", output_bytes_);
63 } 63 }
64 } 64 }
65 65
66 if (!dest_buffer_excess_.empty()) { 66 if (!dest_buffer_excess_.empty()) {
67 // Filter chaining error, or premature teardown. 67 // Filter chaining error, or premature teardown.
68 SdchManager::SdchErrorRecovery(SdchManager::UNFLUSHED_CONTENT); 68 SdchManager::SdchErrorRecovery(SdchManager::UNFLUSHED_CONTENT);
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 } else { 211 } else {
212 // One of the first 9 bytes precluded consideration as a hash. 212 // One of the first 9 bytes precluded consideration as a hash.
213 // This can't be an SDCH payload, even though the server said it was. 213 // This can't be an SDCH payload, even though the server said it was.
214 // This is a major error, as the server or proxy tagged this SDCH even 214 // This is a major error, as the server or proxy tagged this SDCH even
215 // though it is not! 215 // though it is not!
216 // Meta-refresh won't help, as we didn't advertise an SDCH dictionary!! 216 // Meta-refresh won't help, as we didn't advertise an SDCH dictionary!!
217 // Worse yet, meta-refresh could lead to an infinite refresh loop. 217 // Worse yet, meta-refresh could lead to an infinite refresh loop.
218 SdchManager::SdchErrorRecovery(SdchManager::PASSING_THROUGH_NON_SDCH); 218 SdchManager::SdchErrorRecovery(SdchManager::PASSING_THROUGH_NON_SDCH);
219 decoding_status_ = PASS_THROUGH; 219 decoding_status_ = PASS_THROUGH;
220 // ... but further back-off on advertising SDCH support. 220 // ... but further back-off on advertising SDCH support.
221 url_request_context_->sdch_manager()->BlacklistDomain(url_); 221 url_request_context_->sdch_manager()->BlacklistDomain(
222 url_, SdchManager::PASSING_THROUGH_NON_SDCH);
222 } 223 }
223 224
224 if (decoding_status_ == PASS_THROUGH) { 225 if (decoding_status_ == PASS_THROUGH) {
225 dest_buffer_excess_ = dictionary_hash_; // Send what we scanned. 226 dest_buffer_excess_ = dictionary_hash_; // Send what we scanned.
226 } else { 227 } else {
227 // This is where we try to do the expensive meta-refresh. 228 // This is where we try to do the expensive meta-refresh.
228 if (std::string::npos == mime_type_.find("text/html")) { 229 if (std::string::npos == mime_type_.find("text/html")) {
229 // Since we can't do a meta-refresh (along with an exponential 230 // Since we can't do a meta-refresh (along with an exponential
230 // backoff), we'll just make sure this NEVER happens again. 231 // backoff), we'll just make sure this NEVER happens again.
231 url_request_context_->sdch_manager()->BlacklistDomainForever(url_); 232 SdchManager::ProblemCodes problem =
232 if (filter_context_.IsCachedContent()) 233 (filter_context_.IsCachedContent() ?
233 SdchManager::SdchErrorRecovery( 234 SdchManager::CACHED_META_REFRESH_UNSUPPORTED :
234 SdchManager::CACHED_META_REFRESH_UNSUPPORTED); 235 SdchManager::META_REFRESH_UNSUPPORTED);
235 else 236 url_request_context_->sdch_manager()->BlacklistDomainForever(
236 SdchManager::SdchErrorRecovery( 237 url_, problem);
237 SdchManager::META_REFRESH_UNSUPPORTED); 238 SdchManager::SdchErrorRecovery(problem);
238 return FILTER_ERROR; 239 return FILTER_ERROR;
239 } 240 }
240 // HTML content means we can issue a meta-refresh, and get the content 241 // HTML content means we can issue a meta-refresh, and get the content
241 // again, perhaps without SDCH (to be safe). 242 // again, perhaps without SDCH (to be safe).
242 if (filter_context_.IsCachedContent()) { 243 if (filter_context_.IsCachedContent()) {
243 // Cached content is probably a startup tab, so we'll just get fresh 244 // Cached content is probably a startup tab, so we'll just get fresh
244 // content and try again, without disabling sdch. 245 // content and try again, without disabling sdch.
245 SdchManager::SdchErrorRecovery( 246 SdchManager::SdchErrorRecovery(
246 SdchManager::META_REFRESH_CACHED_RECOVERY); 247 SdchManager::META_REFRESH_CACHED_RECOVERY);
247 } else { 248 } else {
248 // Since it wasn't in the cache, we definately need at least some 249 // Since it wasn't in the cache, we definately need at least some
249 // period of blacklisting to get the correct content. 250 // period of blacklisting to get the correct content.
250 url_request_context_->sdch_manager()->BlacklistDomain(url_); 251 url_request_context_->sdch_manager()->BlacklistDomain(
252 url_, SdchManager::META_REFRESH_RECOVERY);
251 SdchManager::SdchErrorRecovery(SdchManager::META_REFRESH_RECOVERY); 253 SdchManager::SdchErrorRecovery(SdchManager::META_REFRESH_RECOVERY);
252 } 254 }
253 decoding_status_ = META_REFRESH_RECOVERY; 255 decoding_status_ = META_REFRESH_RECOVERY;
254 // Issue a meta redirect with SDCH disabled. 256 // Issue a meta redirect with SDCH disabled.
255 dest_buffer_excess_ = kDecompressionErrorHtml; 257 dest_buffer_excess_ = kDecompressionErrorHtml;
256 } 258 }
257 } else { 259 } else {
258 DCHECK_EQ(DECODING_IN_PROGRESS, decoding_status_); 260 DCHECK_EQ(DECODING_IN_PROGRESS, decoding_status_);
259 } 261 }
260 } 262 }
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 dest_buffer_excess_index_ += amount; 387 dest_buffer_excess_index_ += amount;
386 if (dest_buffer_excess_.size() <= dest_buffer_excess_index_) { 388 if (dest_buffer_excess_.size() <= dest_buffer_excess_index_) {
387 DCHECK(dest_buffer_excess_.size() == dest_buffer_excess_index_); 389 DCHECK(dest_buffer_excess_.size() == dest_buffer_excess_index_);
388 dest_buffer_excess_.clear(); 390 dest_buffer_excess_.clear();
389 dest_buffer_excess_index_ = 0; 391 dest_buffer_excess_index_ = 0;
390 } 392 }
391 return amount; 393 return amount;
392 } 394 }
393 395
394 } // namespace net 396 } // namespace net
OLDNEW
« no previous file with comments | « net/base/sdch_manager_unittest.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698