Chromium Code Reviews| Index: chrome/browser/supervised_user/experimental/supervised_user_blacklist_downloader.cc |
| diff --git a/chrome/browser/supervised_user/experimental/supervised_user_blacklist_downloader.cc b/chrome/browser/supervised_user/experimental/supervised_user_blacklist_downloader.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..e2184ca948847a03150a9fa0a7adf39652b84a3f |
| --- /dev/null |
| +++ b/chrome/browser/supervised_user/experimental/supervised_user_blacklist_downloader.cc |
| @@ -0,0 +1,79 @@ |
| +// Copyright 2014 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. |
| + |
| +#include "chrome/browser/supervised_user/experimental/supervised_user_blacklist_downloader.h" |
| + |
| +#include "base/files/file_path.h" |
| +#include "base/files/file_util.h" |
| +#include "base/logging.h" |
| +#include "content/public/browser/browser_thread.h" |
| +#include "net/base/load_flags.h" |
| +#include "net/http/http_status_code.h" |
| +#include "net/url_request/url_fetcher.h" |
| +#include "url/gurl.h" |
| + |
| +using content::BrowserThread; |
| +using net::URLFetcher; |
| + |
| +const int kNumRetries = 1; |
| + |
| +SupervisedUserBlacklistDownloader::SupervisedUserBlacklistDownloader( |
| + const GURL& url, |
| + const base::FilePath& path, |
| + net::URLRequestContextGetter* request_context, |
| + const DownloadFinishedCallback& callback) |
| + : callback_(callback), |
| + weak_ptr_factory_(this) { |
| + fetcher_.reset(URLFetcher::Create(url, URLFetcher::GET, this)); |
|
Bernhard Bauer
2014/09/25 15:47:38
You could initialize the fetcher_ in the construct
Marc Treib
2014/09/25 16:12:20
Done.
|
| + fetcher_->SetRequestContext(request_context); |
| + fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES | |
| + net::LOAD_DO_NOT_SAVE_COOKIES | |
| + net::LOAD_IS_DOWNLOAD); |
| + fetcher_->SetAutomaticallyRetryOnNetworkChanges(kNumRetries); |
| + fetcher_->SaveResponseToFileAtPath( |
| + path, |
| + BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE)); |
| + |
| + base::PostTaskAndReplyWithResult( |
| + BrowserThread::GetBlockingPool(), |
| + FROM_HERE, |
| + base::Bind(&base::PathExists, path), |
| + base::Bind(&SupervisedUserBlacklistDownloader::OnFileExistsCheckDone, |
| + weak_ptr_factory_.GetWeakPtr())); |
| +} |
| + |
| +SupervisedUserBlacklistDownloader::~SupervisedUserBlacklistDownloader() {} |
| + |
| +void SupervisedUserBlacklistDownloader::OnURLFetchComplete( |
| + const net::URLFetcher* source) { |
| + DCHECK_EQ(fetcher_.get(), source); |
| + |
| + const net::URLRequestStatus& status = source->GetStatus(); |
| + if (!status.is_success()) { |
| + DLOG(WARNING) << "URLRequestStatus error " << status.error(); |
| + callback_.Run(false); |
| + return; |
| + } |
| + |
| + int response_code = source->GetResponseCode(); |
| + if (response_code != net::HTTP_OK) { |
| + DLOG(WARNING) << "HTTP error " << response_code; |
| + callback_.Run(false); |
| + return; |
| + } |
| + |
| + // Take ownership of the new file. |
| + base::FilePath response_path; |
| + bool success = source->GetResponseAsFilePath(true, &response_path); |
| + callback_.Run(success); |
| +} |
| + |
| +void SupervisedUserBlacklistDownloader::OnFileExistsCheckDone(bool exists) { |
| + if (exists) { |
| + // TODO(treib): Figure out a strategy for updating the file. |
| + callback_.Run(true); |
| + } else { |
| + fetcher_->Start(); |
| + } |
| +} |