Chromium Code Reviews| 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..49271217ef23b9de54800a4103da03c68f824ab7 |
| --- /dev/null |
| +++ b/net/filter/sdch_policy_delegate.h |
| @@ -0,0 +1,83 @@ |
| +// 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 |
|
mmenke
2016/07/21 18:14:09
+_ (x3)
xunjieli
2016/07/27 20:32:03
Done.
|
| + |
| +#include <memory> |
| + |
| +#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_stream_source.h" |
| +#include "net/log/net_log.h" |
| +#include "url/gurl.h" |
| + |
| +namespace net { |
| + |
| +class SdchStreamSource; |
| + |
| +// This class ascribes to the SdchStreamSource::Delegate interface to implement |
| +// the SDCH error-handling and stats-gathering policy. The Context object |
| +// supplies details about the request needed for this object to make |
| +// error-handling decisions. See the SdchStreamSource::Delegate documentation |
| +// for more details. |
| +class NET_EXPORT_PRIVATE SdchPolicyDelegate |
| + : public SdchStreamSource::Delegate { |
| + public: |
| + class Context { |
| + public: |
| + enum StatisticSelector { |
| + SDCH_DECODE, |
| + SDCH_PASSTHROUGH, |
| + SDCH_EXPERIMENT_DECODE, |
| + SDCH_EXPERIMENT_HOLDBACK, |
| + }; |
| + |
| + virtual ~Context() {} |
| + virtual bool GetMimeType(std::string* mime_type) const = 0; |
| + virtual bool GetURL(GURL* url) const = 0; |
| + virtual bool IsCachedContent() const = 0; |
| + virtual SdchManager* GetSdchManager() const = 0; |
| + virtual SdchManager::DictionarySet* SdchDictionariesAdvertised() const = 0; |
| + // virtual int64_t GetByteReadCount() const = 0; |
| + virtual int GetResponseCode() const = 0; |
| + virtual const BoundNetLog& GetNetLog() const = 0; |
| + }; |
| + |
| + SdchPolicyDelegate(std::unique_ptr<Context> context); |
| + |
| + ~SdchPolicyDelegate() override; |
| + |
| + // SdchStreamSource::Delegate implementation. |
| + bool OnDictionaryError(SdchStreamSource* source) override; |
| + bool OnDecodingError(SdchStreamSource* source) override; |
| + bool OnGetDictionary(const std::string& server_id, |
| + const std::string** text) override; |
| + |
| + private: |
| + // Issues a meta-refresh if the context's MIME type supports it, and returns |
| + // whether a refresh was issued. As a side-effect, blacklists the context's |
| + // domain either temporarily or permanently. |
| + bool IssueMetaRefreshIfPossible(SdchStreamSource* source); |
| + |
| + // Logs an SDCH failure. This logs events in UMA and the net log in |
| + // |context_|, but has no side-effects on this class or the stream. |
| + void LogSdchProblem(SdchProblemCode problem); |
| + |
| + bool dictionary_requested_; |
| + |
| + std::unique_ptr<Context> context_; |
| + // 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 |