| 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..1d96d8b64c92595bf4b59366082b6dc9bd79b391
|
| --- /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),
|
| + fetcher_(URLFetcher::Create(url, URLFetcher::GET, this)),
|
| + weak_ptr_factory_(this) {
|
| + 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();
|
| + }
|
| +}
|
|
|