1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/supervised_user/experimental/supervised_user_blacklist_downloader.h"
7 #include "base/files/file_path.h"
8 #include "base/files/file_util.h"
9 #include "base/logging.h"
10 #include "content/public/browser/browser_thread.h"
11 #include "net/base/load_flags.h"
12 #include "net/http/http_status_code.h"
13 #include "net/url_request/url_fetcher.h"
16 using content::BrowserThread
;
17 using net::URLFetcher
;
19 const int kNumRetries
= 1;
21 SupervisedUserBlacklistDownloader::SupervisedUserBlacklistDownloader(
23 const base::FilePath
& path
,
24 net::URLRequestContextGetter
* request_context
,
25 const DownloadFinishedCallback
& callback
)
26 : callback_(callback
),
27 fetcher_(URLFetcher::Create(url
, URLFetcher::GET
, this)),
28 weak_ptr_factory_(this) {
29 fetcher_
->SetRequestContext(request_context
);
30 fetcher_
->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES
|
31 net::LOAD_DO_NOT_SAVE_COOKIES
);
32 fetcher_
->SetAutomaticallyRetryOnNetworkChanges(kNumRetries
);
33 fetcher_
->SaveResponseToFileAtPath(
35 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE));
37 base::PostTaskAndReplyWithResult(
38 BrowserThread::GetBlockingPool()->GetTaskRunnerWithShutdownBehavior(
39 base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN
).get(),
41 base::Bind(&base::PathExists
, path
),
42 base::Bind(&SupervisedUserBlacklistDownloader::OnFileExistsCheckDone
,
43 weak_ptr_factory_
.GetWeakPtr()));
46 SupervisedUserBlacklistDownloader::~SupervisedUserBlacklistDownloader() {}
48 void SupervisedUserBlacklistDownloader::OnURLFetchComplete(
49 const net::URLFetcher
* source
) {
50 DCHECK_EQ(fetcher_
.get(), source
);
52 const net::URLRequestStatus
& status
= source
->GetStatus();
53 if (!status
.is_success()) {
54 DLOG(WARNING
) << "URLRequestStatus error " << status
.error();
59 int response_code
= source
->GetResponseCode();
60 if (response_code
!= net::HTTP_OK
) {
61 DLOG(WARNING
) << "HTTP error " << response_code
;
66 // Take ownership of the new file.
67 base::FilePath response_path
;
68 bool success
= source
->GetResponseAsFilePath(true, &response_path
);
69 callback_
.Run(success
);
72 void SupervisedUserBlacklistDownloader::OnFileExistsCheckDone(bool exists
) {
74 // TODO(treib): Figure out a strategy for updating the file.