| Index: chrome/browser/net/sdch_dictionary_fetcher.cc
|
| diff --git a/chrome/browser/net/sdch_dictionary_fetcher.cc b/chrome/browser/net/sdch_dictionary_fetcher.cc
|
| index 1130fe336242b5b5c666a2ae433771e1b98d3bd4..0a838bd37fa9adb86be501707f81888b9f30e66b 100644
|
| --- a/chrome/browser/net/sdch_dictionary_fetcher.cc
|
| +++ b/chrome/browser/net/sdch_dictionary_fetcher.cc
|
| @@ -49,6 +49,16 @@ void SdchDictionaryFetcher::Schedule(const GURL& dictionary_url) {
|
| ScheduleDelayedRun();
|
| }
|
|
|
| +void SdchDictionaryFetcher::Cancel() {
|
| + DCHECK(CalledOnValidThread());
|
| +
|
| + while (!fetch_queue_.empty())
|
| + fetch_queue_.pop();
|
| + attempted_load_.clear();
|
| + weak_factory_.InvalidateWeakPtrs();
|
| + current_fetch_.reset(NULL);
|
| +}
|
| +
|
| void SdchDictionaryFetcher::ScheduleDelayedRun() {
|
| if (fetch_queue_.empty() || current_fetch_.get() || task_is_pending_)
|
| return;
|
| @@ -64,6 +74,10 @@ void SdchDictionaryFetcher::StartFetching() {
|
| DCHECK(task_is_pending_);
|
| task_is_pending_ = false;
|
|
|
| + // Handle losing the race against Cancel().
|
| + if (fetch_queue_.empty())
|
| + return;
|
| +
|
| DCHECK(context_.get());
|
| current_fetch_.reset(net::URLFetcher::Create(
|
| fetch_queue_.front(), net::URLFetcher::GET, this));
|
|
|