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

Unified Diff: net/base/filter.h

Issue 40319: Use filter context to track stats better in SDCH filtering (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/automation/url_request_slow_download_job.cc ('k') | net/base/filter.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/base/filter.h
===================================================================
--- net/base/filter.h (revision 11636)
+++ net/base/filter.h (working copy)
@@ -41,13 +41,18 @@
//------------------------------------------------------------------------------
// Define an interface class that allows access to contextual information
-// supplied by the owner of this filter.
+// supplied by the owner of this filter. In the case where there are a chain of
+// filters, there is only one owner of all the chained filters, and that context
+// is passed to the constructor of all those filters. To be clear, the context
+// does NOT reflect the position in a chain, or the fact that there are prior
+// or later filters in a chain.
class FilterContext {
public:
- FilterContext() {};
- virtual ~FilterContext() {};
+ virtual ~FilterContext() {}
// What mime type was specified in the header for this data?
+ // Only makes senses for some types of contexts, and returns false
+ // when not applicable.
virtual bool GetMimeType(std::string* mime_type) const = 0;
// What URL was used to access this data?
@@ -60,16 +65,19 @@
// Is data supplied from cache, or fresh across the net?
virtual bool IsCachedContent() const = 0;
- // TODO(jar): We could use flags, defined by callers, rather than naming a
- // protocol here in the base class.
// Was this data flagged as a response to a request with an SDCH dictionary?
virtual bool IsSdchResponse() const = 0;
- // What is the desirable input buffer size for these filters?
- virtual int GetInputStreambufferSize() const = 0;
+ // How many bytes were read from the net or cache so far (and potentially
+ // pushed into a filter for processing)?
+ virtual int64 GetByteReadCount() const = 0;
- private:
- DISALLOW_COPY_AND_ASSIGN(FilterContext);
+ // What is the desirable input buffer size for these filters?
+ // This value is currently supplied by the context, and is constant for all
+ // filters, even when they are part of a chain of filters. (i.e., we currently
+ // don't change the input buffer sizes for a linked chain of filters, and the
+ // buffer size for input to all filters in a chain is this one constant).
+ virtual int GetInputStreamBufferSize() const = 0;
};
//------------------------------------------------------------------------------
@@ -151,14 +159,6 @@
// The function returns true if success, and false otherwise.
bool FlushStreamBuffer(int stream_data_len);
- void SetURL(const GURL& url);
- const GURL& url() const { return url_; }
-
- void SetMimeType(const std::string& mime_type);
- const std::string& mime_type() const { return mime_type_; }
-
- void SetConnectTime(const base::Time& time, bool was_cached);
-
// Translate the text of a filter name (from Content-Encoding header) into a
// FilterType.
static FilterType ConvertEncodingToType(const std::string& filter_type);
@@ -170,8 +170,7 @@
// encodings. These fixups require context, which includes whether this
// response was made to an SDCH request (i.e., an available dictionary was
// advertised in the GET), as well as the mime type of the content.
- static void FixupEncodingTypes(bool is_sdch_response,
- const std::string& mime_type,
+ static void FixupEncodingTypes(const FilterContext& filter_context,
std::vector<FilterType>* encoding_types);
protected:
explicit Filter(const FilterContext& filter_context);
@@ -193,26 +192,10 @@
// Copy pre-filter data directly to destination buffer without decoding.
FilterStatus CopyOut(char* dest_buffer, int* dest_len);
- // Allocates and initializes stream_buffer_ based on filter_context_.
- // Establishes a buffer large enough to handle the amount specified in
- // filter_context_.GetInputStreambufferSize().
- bool InitBuffer();
-
- // A factory helper for creating filters for within a chain of potentially
- // multiple encodings. If a chain of filters is created, then this may be
- // called multiple times during the filter creation process. In most simple
- // cases, this is only called once. Returns NULL and cleans up (deleting
- // filter_list) if a new filter can't be constructed.
- static Filter* PrependNewFilter(FilterType type_id,
- const FilterContext& filter_context,
- Filter* filter_list);
-
FilterStatus last_status() const { return last_status_; }
- base::Time connect_time() const { return connect_time_; }
+ const FilterContext& filter_context() const { return filter_context_; }
- bool was_cached() const { return was_cached_; }
-
// Buffer to hold the data to be filtered (the input queue).
scoped_refptr<net::IOBuffer> stream_buffer_;
@@ -225,26 +208,24 @@
// Total number of remaining chars in stream_buffer_ to be filtered.
int stream_data_len_;
- private: // TODO(jar): Make more data private by moving this up higher.
- // The URL that is currently being filtered.
- // This is used by SDCH filters which need to restrict use of a dictionary to
- // a specific URL or path.
- GURL url_;
+ private:
+ // A factory helper for creating filters for within a chain of potentially
+ // multiple encodings. If a chain of filters is created, then this may be
+ // called multiple times during the filter creation process. In most simple
+ // cases, this is only called once. Returns NULL and cleans up (deleting
+ // filter_list) if a new filter can't be constructed.
+ static Filter* PrependNewFilter(FilterType type_id,
+ const FilterContext& filter_context,
+ Filter* filter_list);
- // To facilitate histogramming by individual filters, we store the connect
- // time for the corresponding HTTP transaction, as well as whether this time
- // was recalled from a cached entry.
- base::Time connect_time_;
- bool was_cached_;
+ // Allocates and initializes stream_buffer_ based on filter_context_.
+ // Establishes a buffer large enough to handle the amount specified in
+ // filter_context_.GetInputStreamBufferSize().
+ bool InitBuffer();
// Helper function to empty our output into the next filter's input.
void PushDataIntoNextFilter();
- // To facilitate error recovery in SDCH filters, allow filter to know if
- // content is text/html by checking within this mime type (SDCH filter may
- // do a meta-refresh via html).
- std::string mime_type_;
-
// An optional filter to process output from this filter.
scoped_ptr<Filter> next_filter_;
// Remember what status or local filter last returned so we can better handle
« no previous file with comments | « chrome/browser/automation/url_request_slow_download_job.cc ('k') | net/base/filter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698