Index: net/base/sdch_filter.cc |
=================================================================== |
--- net/base/sdch_filter.cc (revision 35302) |
+++ net/base/sdch_filter.cc (working copy) |
@@ -160,14 +160,21 @@ |
// Watch out for an error page inserted by the proxy as part of a 40x |
// error response. When we see such content molestation, we certainly |
// need to fall into the meta-refresh case. |
- bool successful_response = filter_context().GetResponseCode() == 200; |
if (filter_context().GetResponseCode() == 404) { |
// We could be more generous, but for now, only a "NOT FOUND" code will |
- // cause a pass through. All other codes will fall into a meta-refresh |
- // attempt. |
+ // cause a pass through. All other bad codes will fall into a |
+ // meta-refresh. |
SdchManager::SdchErrorRecovery(SdchManager::PASS_THROUGH_404_CODE); |
decoding_status_ = PASS_THROUGH; |
- } else if (possible_pass_through_ && successful_response) { |
+ } else if (filter_context().GetResponseCode() != 200) { |
+ // We need to meta-refresh, with SDCH disabled. |
+ } else if (filter_context().IsCachedContent() |
+ && !dictionary_hash_is_plausible_) { |
+ // We must have hit the back button, and gotten content that was fetched |
+ // before we *really* advertised SDCH and a dictionary. |
+ SdchManager::SdchErrorRecovery(SdchManager::PASS_THROUGH_OLD_CACHED); |
+ decoding_status_ = PASS_THROUGH; |
+ } else if (possible_pass_through_) { |
// This is the potentially most graceful response. There really was no |
// error. We were just overly cautious when we added a TENTATIVE_SDCH. |
// We added the sdch coding tag, and it should not have been added. |
@@ -182,7 +189,7 @@ |
// the meta-refresh result. |
// TODO(jar): Improve robustness by sniffing for valid text that we can |
// actual use re: decoding_status_ = PASS_THROUGH; |
- } else if (successful_response && !dictionary_hash_is_plausible_) { |
+ } else if (!dictionary_hash_is_plausible_) { |
// One of the first 9 bytes precluded consideration as a hash. |
// This can't be an SDCH payload, even though the server said it was. |
// This is a major error, as the server or proxy tagged this SDCH even |