| 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 "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 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 case RESPONSE_ENCODING_LIE: | 83 case RESPONSE_ENCODING_LIE: |
| 84 cause_string = "ENCODING_LIE"; | 84 cause_string = "ENCODING_LIE"; |
| 85 break; | 85 break; |
| 86 case RESPONSE_MAX: | 86 case RESPONSE_MAX: |
| 87 cause_string = "<Error: max enum value>"; | 87 cause_string = "<Error: max enum value>"; |
| 88 break; | 88 break; |
| 89 } | 89 } |
| 90 return cause_string; | 90 return cause_string; |
| 91 } | 91 } |
| 92 | 92 |
| 93 base::Value* NetLogSdchResponseCorruptionDetectionCallback( | 93 scoped_ptr<base::Value> NetLogSdchResponseCorruptionDetectionCallback( |
| 94 ResponseCorruptionDetectionCause cause, | 94 ResponseCorruptionDetectionCause cause, |
| 95 bool cached, | 95 bool cached, |
| 96 NetLogCaptureMode capture_mode) { | 96 NetLogCaptureMode capture_mode) { |
| 97 base::DictionaryValue* dict = new base::DictionaryValue(); | 97 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 98 dict->SetString("cause", ResponseCorruptionDetectionCauseToString(cause)); | 98 dict->SetString("cause", ResponseCorruptionDetectionCauseToString(cause)); |
| 99 dict->SetBoolean("cached", cached); | 99 dict->SetBoolean("cached", cached); |
| 100 return dict; | 100 return dict.Pass(); |
| 101 } | 101 } |
| 102 | 102 |
| 103 } // namespace | 103 } // namespace |
| 104 | 104 |
| 105 SdchFilter::SdchFilter(FilterType type, const FilterContext& filter_context) | 105 SdchFilter::SdchFilter(FilterType type, const FilterContext& filter_context) |
| 106 : Filter(type), | 106 : Filter(type), |
| 107 filter_context_(filter_context), | 107 filter_context_(filter_context), |
| 108 decoding_status_(DECODING_UNINITIALIZED), | 108 decoding_status_(DECODING_UNINITIALIZED), |
| 109 dictionary_hash_(), | 109 dictionary_hash_(), |
| 110 dictionary_hash_is_plausible_(false), | 110 dictionary_hash_is_plausible_(false), |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 333 // caches the histogram name based on the call site. | 333 // caches the histogram name based on the call site. |
| 334 if (filter_context_.IsCachedContent()) { | 334 if (filter_context_.IsCachedContent()) { |
| 335 UMA_HISTOGRAM_ENUMERATION( | 335 UMA_HISTOGRAM_ENUMERATION( |
| 336 "Sdch3.ResponseCorruptionDetection.Cached", cause, RESPONSE_MAX); | 336 "Sdch3.ResponseCorruptionDetection.Cached", cause, RESPONSE_MAX); |
| 337 } else { | 337 } else { |
| 338 UMA_HISTOGRAM_ENUMERATION( | 338 UMA_HISTOGRAM_ENUMERATION( |
| 339 "Sdch3.ResponseCorruptionDetection.Uncached", cause, RESPONSE_MAX); | 339 "Sdch3.ResponseCorruptionDetection.Uncached", cause, RESPONSE_MAX); |
| 340 } | 340 } |
| 341 filter_context_.GetNetLog().AddEvent( | 341 filter_context_.GetNetLog().AddEvent( |
| 342 NetLog::TYPE_SDCH_RESPONSE_CORRUPTION_DETECTION, | 342 NetLog::TYPE_SDCH_RESPONSE_CORRUPTION_DETECTION, |
| 343 base::Bind(&NetLogSdchResponseCorruptionDetectionCallback, cause, | 343 base::Bind(NetLogSdchResponseCorruptionDetectionCallback, cause, |
| 344 filter_context_.IsCachedContent())); | 344 filter_context_.IsCachedContent())); |
| 345 | 345 |
| 346 if (decoding_status_ == PASS_THROUGH) { | 346 if (decoding_status_ == PASS_THROUGH) { |
| 347 dest_buffer_excess_ = dictionary_hash_; // Send what we scanned. | 347 dest_buffer_excess_ = dictionary_hash_; // Send what we scanned. |
| 348 } else { | 348 } else { |
| 349 // This is where we try to do the expensive meta-refresh. | 349 // This is where we try to do the expensive meta-refresh. |
| 350 if (std::string::npos == mime_type_.find("text/html")) { | 350 if (std::string::npos == mime_type_.find("text/html")) { |
| 351 // Since we can't do a meta-refresh (along with an exponential | 351 // Since we can't do a meta-refresh (along with an exponential |
| 352 // backoff), we'll just make sure this NEVER happens again. | 352 // backoff), we'll just make sure this NEVER happens again. |
| 353 SdchProblemCode problem = (filter_context_.IsCachedContent() | 353 SdchProblemCode problem = (filter_context_.IsCachedContent() |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 556 dest_buffer_excess_.clear(); | 556 dest_buffer_excess_.clear(); |
| 557 dest_buffer_excess_index_ = 0; | 557 dest_buffer_excess_index_ = 0; |
| 558 } | 558 } |
| 559 return amount; | 559 return amount; |
| 560 } | 560 } |
| 561 | 561 |
| 562 void SdchFilter::LogSdchProblem(SdchProblemCode problem) { | 562 void SdchFilter::LogSdchProblem(SdchProblemCode problem) { |
| 563 SdchManager::SdchErrorRecovery(problem); | 563 SdchManager::SdchErrorRecovery(problem); |
| 564 filter_context_.GetNetLog().AddEvent( | 564 filter_context_.GetNetLog().AddEvent( |
| 565 NetLog::TYPE_SDCH_DECODING_ERROR, | 565 NetLog::TYPE_SDCH_DECODING_ERROR, |
| 566 base::Bind(&NetLogSdchResourceProblemCallback, problem)); | 566 base::Bind(NetLogSdchResourceProblemCallback, problem)); |
| 567 } | 567 } |
| 568 | 568 |
| 569 } // namespace net | 569 } // namespace net |
| OLD | NEW |