| Index: net/base/sdch_manager.h
|
| diff --git a/net/base/sdch_manager.h b/net/base/sdch_manager.h
|
| index b5f901b036414bb6cb24e1d4f9ceefb5384a5a87..ff157e52a32e1cb04e955f467b3c524cba11b6a7 100644
|
| --- a/net/base/sdch_manager.h
|
| +++ b/net/base/sdch_manager.h
|
| @@ -2,21 +2,6 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -// Provides global database of differential decompression dictionaries for the
|
| -// SDCH filter (processes sdch enconded content).
|
| -
|
| -// Exactly one instance of SdchManager is built, and all references are made
|
| -// into that collection.
|
| -//
|
| -// The SdchManager maintains a collection of memory resident dictionaries. It
|
| -// can find a dictionary (based on a server specification of a hash), store a
|
| -// dictionary, and make judgements about what URLs can use, set, etc. a
|
| -// dictionary.
|
| -
|
| -// These dictionaries are acquired over the net, and include a header
|
| -// (containing metadata) as well as a VCDIFF dictionary (for use by a VCDIFF
|
| -// module) to decompress data.
|
| -
|
| #ifndef NET_BASE_SDCH_MANAGER_H_
|
| #define NET_BASE_SDCH_MANAGER_H_
|
|
|
| @@ -27,53 +12,28 @@
|
| #include "base/gtest_prod_util.h"
|
| #include "base/memory/ref_counted.h"
|
| #include "base/memory/scoped_ptr.h"
|
| -#include "base/threading/non_thread_safe.h"
|
| +#include "base/observer_list.h"
|
| +#include "base/threading/thread_checker.h"
|
| #include "base/time/time.h"
|
| #include "net/base/net_export.h"
|
| #include "url/gurl.h"
|
|
|
| namespace net {
|
|
|
| -//------------------------------------------------------------------------------
|
| -// Create a public interface to help us load SDCH dictionaries.
|
| -// The SdchManager class allows registration to support this interface.
|
| -// A browser may register a fetcher that is used by the dictionary managers to
|
| -// get data from a specified URL. This allows us to use very high level browser
|
| -// functionality in this base (when the functionality can be provided).
|
| -class NET_EXPORT SdchFetcher {
|
| - public:
|
| - class NET_EXPORT Delegate {
|
| - public:
|
| - virtual ~Delegate() {}
|
| -
|
| - // Called whenever the SdchFetcher has successfully retrieved a
|
| - // dictionary. |dictionary_text| contains the body of the dictionary
|
| - // retrieved from |dictionary_url|.
|
| - virtual void AddSdchDictionary(const std::string& dictionary_text,
|
| - const GURL& dictionary_url) = 0;
|
| - };
|
| -
|
| - SdchFetcher() {}
|
| - virtual ~SdchFetcher() {}
|
| -
|
| - // The Schedule() method is called when there is a need to get a dictionary
|
| - // from a server. The callee is responsible for getting that dictionary_text,
|
| - // and then calling back to AddSdchDictionary() in the Delegate instance.
|
| - virtual void Schedule(const GURL& dictionary_url) = 0;
|
| -
|
| - // The Cancel() method is called to cancel all pending dictionary fetches.
|
| - // This is used for implementation of ClearData() below.
|
| - virtual void Cancel() = 0;
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(SdchFetcher);
|
| -};
|
| +class SdchObserver;
|
|
|
| -//------------------------------------------------------------------------------
|
| +// Provides global database of differential decompression dictionaries for the
|
| +// SDCH filter (processes sdch enconded content).
|
| +//
|
| +// The SdchManager maintains a collection of memory resident dictionaries. It
|
| +// can find a dictionary (based on a server specification of a hash), store a
|
| +// dictionary, and make judgements about what URLs can use, set, etc. a
|
| +// dictionary.
|
|
|
| -class NET_EXPORT SdchManager
|
| - : public SdchFetcher::Delegate,
|
| - public NON_EXPORTED_BASE(base::NonThreadSafe) {
|
| +// These dictionaries are acquired over the net, and include a header
|
| +// (containing metadata) as well as a VCDIFF dictionary (for use by a VCDIFF
|
| +// module) to decompress data.
|
| +class NET_EXPORT SdchManager {
|
| public:
|
| // A list of errors that appeared and were either resolved, or used to turn
|
| // off sdch encoding.
|
| @@ -252,7 +212,7 @@ class NET_EXPORT SdchManager
|
| };
|
|
|
| SdchManager();
|
| - ~SdchManager() override;
|
| + ~SdchManager();
|
|
|
| // Clear data (for browser data removal).
|
| void ClearData();
|
| @@ -260,9 +220,6 @@ class NET_EXPORT SdchManager
|
| // Record stats on various errors.
|
| static void SdchErrorRecovery(ProblemCodes problem);
|
|
|
| - // Register a fetcher that this class can use to obtain dictionaries.
|
| - void set_sdch_fetcher(scoped_ptr<SdchFetcher> fetcher);
|
| -
|
| // Enables or disables SDCH compression.
|
| static void EnableSdchSupport(bool enabled);
|
|
|
| @@ -305,16 +262,9 @@ class NET_EXPORT SdchManager
|
| // by 1 the number of times it will be reported as blacklisted.
|
| bool IsInSupportedDomain(const GURL& url);
|
|
|
| - // Schedule the URL fetching to load a dictionary. This will always return
|
| - // before the dictionary is actually loaded and added.
|
| - // After the implied task does completes, the dictionary will have been
|
| - // cached in memory.
|
| - void FetchDictionary(const GURL& request_url, const GURL& dictionary_url);
|
| -
|
| - // Security test function used before initiating a FetchDictionary.
|
| - // Return true if fetch is legal.
|
| - bool CanFetchDictionary(const GURL& referring_url,
|
| - const GURL& dictionary_url) const;
|
| + // Send out appropriate events notifying observers that a Get-Dictionary
|
| + // header has been seen.
|
| + void OnGetDictionary(const GURL& request_url, const GURL& dictionary_url);
|
|
|
| // Find the vcdiff dictionary (the body of the sdch dictionary that appears
|
| // after the meta-data headers like Domain:...) with the given |server_hash|
|
| @@ -345,18 +295,16 @@ class NET_EXPORT SdchManager
|
|
|
| void SetAllowLatencyExperiment(const GURL& url, bool enable);
|
|
|
| - int GetFetchesCountForTesting() const {
|
| - return fetches_count_for_testing_;
|
| - }
|
| -
|
| - // Implementation of SdchFetcher::Delegate.
|
| -
|
| // Add an SDCH dictionary to our list of availible
|
| // dictionaries. This addition will fail if addition is illegal
|
| // (data in the dictionary is not acceptable from the
|
| // dictionary_url; dictionary already added, etc.).
|
| void AddSdchDictionary(const std::string& dictionary_text,
|
| - const GURL& dictionary_url) override;
|
| + const GURL& dictionary_url);
|
| +
|
| + // Registration for events generated by the SDCH subsystem.
|
| + void AddObserver(SdchObserver* observer);
|
| + void RemoveObserver(SdchObserver* observer);
|
|
|
| private:
|
| struct BlacklistInfo {
|
| @@ -373,6 +321,12 @@ class NET_EXPORT SdchManager
|
| typedef std::map<std::string, BlacklistInfo> DomainBlacklistInfo;
|
| typedef std::set<std::string> ExperimentSet;
|
|
|
| + // Determines whether a "Get-Dictionary" header is legal (dictionary
|
| + // url has appropriate relationship to referrer url) in the SDCH
|
| + // protocol. Return true if fetch is legal.
|
| + bool CanFetchDictionary(const GURL& referring_url,
|
| + const GURL& dictionary_url) const;
|
| +
|
| // A map of dictionaries info indexed by the hash that the server provides.
|
| typedef std::map<std::string, scoped_refptr<Dictionary> > DictionaryMap;
|
|
|
| @@ -388,9 +342,6 @@ class NET_EXPORT SdchManager
|
| std::string* output);
|
| DictionaryMap dictionaries_;
|
|
|
| - // An instance that can fetch a dictionary given a URL.
|
| - scoped_ptr<SdchFetcher> fetcher_;
|
| -
|
| // List domains where decode failures have required disabling sdch.
|
| DomainBlacklistInfo blacklisted_domains_;
|
|
|
| @@ -398,7 +349,13 @@ class NET_EXPORT SdchManager
|
| // round trip test has recently passed).
|
| ExperimentSet allow_latency_experiment_;
|
|
|
| - int fetches_count_for_testing_;
|
| + // Observers that want to be notified of SDCH events.
|
| + // Assert list is empty on destruction since if there is an observer
|
| + // that hasn't removed itself from the list, that observer probably
|
| + // has a reference to the SdchManager.
|
| + ObserverList<SdchObserver, true> observers_;
|
| +
|
| + base::ThreadChecker thread_checker_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(SdchManager);
|
| };
|
|
|