| Index: net/base/sdch_manager.cc
|
| diff --git a/net/base/sdch_manager.cc b/net/base/sdch_manager.cc
|
| index 0f31d5cee8ad84e4ea2acacd8c06a52b786847b2..f53fcf4e80fdddc97974ae8110dc13cd19d3060b 100644
|
| --- a/net/base/sdch_manager.cc
|
| +++ b/net/base/sdch_manager.cc
|
| @@ -11,6 +11,7 @@
|
| #include "base/strings/string_util.h"
|
| #include "crypto/sha2.h"
|
| #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
|
| +#include "net/base/sdch_observer.h"
|
| #include "net/url_request/url_request_http_job.h"
|
|
|
| namespace {
|
| @@ -257,14 +258,14 @@ SdchManager::~SdchManager() {
|
| void SdchManager::ClearData() {
|
| blacklisted_domains_.clear();
|
| allow_latency_experiment_.clear();
|
| - if (fetcher_.get())
|
| - fetcher_->Cancel();
|
|
|
| // Note that this may result in not having dictionaries we've advertised
|
| // for incoming responses. The window is relatively small (as ClearData()
|
| // is not expected to be called frequently), so we rely on meta-refresh
|
| // to handle this case.
|
| dictionaries_.clear();
|
| +
|
| + FOR_EACH_OBSERVER(SdchObserver, observers_, OnClearDictionaries(this));
|
| }
|
|
|
| // static
|
| @@ -272,11 +273,6 @@ void SdchManager::SdchErrorRecovery(ProblemCodes problem) {
|
| UMA_HISTOGRAM_ENUMERATION("Sdch3.ProblemCodes_4", problem, MAX_PROBLEM_CODE);
|
| }
|
|
|
| -void SdchManager::set_sdch_fetcher(scoped_ptr<SdchFetcher> fetcher) {
|
| - DCHECK(CalledOnValidThread());
|
| - fetcher_ = fetcher.Pass();
|
| -}
|
| -
|
| // static
|
| void SdchManager::EnableSdchSupport(bool enabled) {
|
| g_sdch_enabled_ = enabled;
|
| @@ -377,13 +373,13 @@ bool SdchManager::IsInSupportedDomain(const GURL& url) {
|
| return false;
|
| }
|
|
|
| -void SdchManager::FetchDictionary(const GURL& request_url,
|
| +void SdchManager::OnGetDictionary(const GURL& request_url,
|
| const GURL& dictionary_url) {
|
| - DCHECK(CalledOnValidThread());
|
| - if (CanFetchDictionary(request_url, dictionary_url) && fetcher_.get()) {
|
| - ++fetches_count_for_testing_;
|
| - fetcher_->Schedule(dictionary_url);
|
| - }
|
| + if (!CanFetchDictionary(request_url, dictionary_url))
|
| + return;
|
| +
|
| + FOR_EACH_OBSERVER(SdchObserver, observers_,
|
| + OnGetDictionary(this, request_url, dictionary_url));
|
| }
|
|
|
| bool SdchManager::CanFetchDictionary(const GURL& referring_url,
|
| @@ -499,6 +495,16 @@ void SdchManager::SetAllowLatencyExperiment(const GURL& url, bool enable) {
|
| allow_latency_experiment_.erase(it);
|
| }
|
|
|
| +void SdchManager::AddObserver(SdchObserver* observer) {
|
| + observers_.AddObserver(observer);
|
| + observer->AddRef();
|
| +}
|
| +
|
| +void SdchManager::RemoveObserver(SdchObserver* observer) {
|
| + observers_.RemoveObserver(observer);
|
| + observer->RemoveRef();
|
| +}
|
| +
|
| void SdchManager::AddSdchDictionary(const std::string& dictionary_text,
|
| const GURL& dictionary_url) {
|
| DCHECK(CalledOnValidThread());
|
|
|