Index: net/filter/sdch_policy_delegate.h |
diff --git a/net/filter/sdch_policy_delegate.h b/net/filter/sdch_policy_delegate.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ecb364e4a7e13097f3d093faa96a8560968a75bf |
--- /dev/null |
+++ b/net/filter/sdch_policy_delegate.h |
@@ -0,0 +1,106 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef NET_FILTER_SDCH_POLICY_DELEGATE_H_ |
+#define NET_FILTER_SDCH_POLICY_DELEGATE_H_ |
+ |
+#include <memory> |
+#include <string> |
+ |
+#include "base/macros.h" |
+#include "base/supports_user_data.h" |
+#include "net/base/net_export.h" |
+#include "net/base/sdch_manager.h" |
+#include "net/filter/sdch_source_stream.h" |
+#include "net/log/net_log.h" |
+#include "net/log/net_log_with_source.h" |
+#include "url/gurl.h" |
+ |
+namespace open_vcdiff { |
+class VCDiffStreamingDecoder; |
+} |
+ |
+namespace net { |
+ |
+class URLRequestHttpJob; |
+class SdchSourceStream; |
+ |
+// This class implements the SdchSourceStream::Delegate interface to perform |
+// the SDCH error handling and stats gathering. The Context object supplies |
+// details about the request needed for this object to make error-handling |
+// decisions. See the SdchSourceStream::Delegate documentation for more details. |
+class NET_EXPORT_PRIVATE SdchPolicyDelegate |
+ : public SdchSourceStream::Delegate { |
+ public: |
+ enum StatisticSelector { |
+ SDCH_DECODE, |
+ SDCH_PASSTHROUGH, |
+ SDCH_EXPERIMENT_DECODE, |
+ SDCH_EXPERIMENT_HOLDBACK, |
+ }; |
+ |
+ SdchPolicyDelegate(bool possible_pass_through, |
+ URLRequestHttpJob* job, |
+ std::string mime_type, |
+ const GURL& url, |
+ bool is_cached_content, |
+ SdchManager* sdch_manager, |
+ std::unique_ptr<SdchManager::DictionarySet> dictionary_set, |
+ int response_code, |
+ const NetLogWithSource& net_log); |
+ |
+ ~SdchPolicyDelegate() override; |
+ |
+ // Sdch specific hacks to fix up encoding types. |
+ static void FixUpSdchContentEncodings( |
+ const NetLogWithSource& net_log, |
+ const std::string& mime_type, |
+ SdchManager::DictionarySet* dictionary_set, |
+ std::vector<SourceStream::SourceType>* types); |
+ |
+ // SdchSourceStream::Delegate implementation. |
+ ErrorRecovery OnDictionaryIdError(std::string* replace_output) override; |
+ ErrorRecovery OnGetDictionaryError(std::string* replace_output) override; |
+ ErrorRecovery OnDecodingError(std::string* replace_output) override; |
+ bool OnGetDictionary(const std::string& server_id, |
+ const std::string** text) override; |
+ |
+ void OnStreamDestroyed(SdchSourceStream::InputState input_state, |
+ const std::string& buffered_output, |
+ open_vcdiff::VCDiffStreamingDecoder* decoder) override; |
+ |
+ private: |
+ // Issues a meta-refresh if the context's MIME type supports it, and returns |
+ // whether a ErrorRecovery which should either be NONE (meta-refresh not |
+ // issued) or REPLACE_OUTPUT (meta-refresh issued). For response not coming |
+ // from the cache, the domain will be blacklisted as a side effect temporarily |
+ // (for HTML payloads) or permanently (for non-HTML payloads). |
+ ErrorRecovery IssueMetaRefreshIfPossible(std::string* replace_output); |
+ |
+ // Set when SdchPolicyDelegate is used as a possible pass-through. |
Randy Smith (Not in Mondays)
2016/10/19 19:49:41
nit: I'd say that it's actually the stream that's
xunjieli
2016/10/20 00:09:14
Done.
|
+ const bool possible_pass_through_; |
+ |
+ // Fields from URLRequestHttpJob. |
+ const URLRequestHttpJob* job_; |
+ const std::string mime_type_; |
+ const GURL url_; |
+ const bool is_cached_content_; |
+ SdchManager* sdch_manager_; |
+ std::unique_ptr<SdchManager::DictionarySet> dictionary_set_; |
+ const int response_code_; |
+ const NetLogWithSource net_log_; |
+ |
+ std::string server_id_; |
+ |
+ // If the response was encoded with a dictionary different than those |
+ // advertised (e.g. a cached response using an old dictionary), this |
+ // variable preserves that dictionary from deletion during decoding. |
+ std::unique_ptr<SdchManager::DictionarySet> unexpected_dictionary_set_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(SdchPolicyDelegate); |
+}; |
+ |
+} // namespace net |
+ |
+#endif // NET_FILTER_SDCH_POLICY_DELEGATE_H_ |