Chromium Code Reviews| Index: shell/application_manager/network_fetcher.cc |
| diff --git a/shell/application_manager/network_fetcher.cc b/shell/application_manager/network_fetcher.cc |
| index 50b9e11943438c865b401f077b27bbfecc574007..ff6a64fd9944dc64b433019c075ee543264ca43b 100644 |
| --- a/shell/application_manager/network_fetcher.cc |
| +++ b/shell/application_manager/network_fetcher.cc |
| @@ -29,10 +29,12 @@ namespace shell { |
| NetworkFetcher::NetworkFetcher(bool disable_cache, |
| const GURL& url, |
| mojo::NetworkService* network_service, |
| + mojo::service_cache::ServiceCache* service_cache, |
| const FetchCallback& loader_callback) |
| : Fetcher(loader_callback), |
| disable_cache_(false), |
| url_(url), |
| + service_cache_(service_cache), |
| weak_ptr_factory_(this) { |
| StartNetworkRequest(url, network_service); |
| } |
| @@ -148,14 +150,17 @@ bool NetworkFetcher::RenameToAppId(const GURL& url, |
| return base::Move(old_path, *new_path); |
| } |
| -void NetworkFetcher::CopyCompleted( |
| +void NetworkFetcher::CacheFileRetrieved( |
| base::Callback<void(const base::FilePath&, bool)> callback, |
| - bool success) { |
| + mojo::Array<uint8_t> path_as_array, |
| + mojo::Array<uint8_t> cache_dir) { |
| + bool success = !path_as_array.is_null(); |
| if (success) { |
| + path_ = base::FilePath(std::string( |
| + reinterpret_cast<char*>(&path_as_array.front()), path_as_array.size())); |
| if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| switches::kPredictableAppFilenames)) { |
| // The copy completed, now move to $TMP/$APP_ID.mojo before the dlopen. |
| - success = false; |
| base::FilePath new_path; |
| if (RenameToAppId(url_, path_, &new_path)) { |
| if (base::PathExists(new_path)) { |
| @@ -176,17 +181,18 @@ void NetworkFetcher::CopyCompleted( |
| void NetworkFetcher::AsPath( |
| base::TaskRunner* task_runner, |
| base::Callback<void(const base::FilePath&, bool)> callback) { |
| + // TODO(qsr) Test is not enough anymore -> we do not have anything while |
|
blundell
2015/05/07 11:29:22
This seems like a bug waiting to happen, unless it
qsr
2015/05/07 12:49:02
Removed the TODO, and added a DCHECK.
|
| + // waiting for the service cache. This is fine for now, as AsPath is never |
| + // called more than once. |
| if (!path_.empty() || !response_) { |
| base::MessageLoop::current()->PostTask( |
| FROM_HERE, base::Bind(callback, path_, base::PathExists(path_))); |
| return; |
| } |
| - base::CreateTemporaryFile(&path_); |
| - mojo::common::CopyToFile( |
| - response_->body.Pass(), path_, task_runner, |
| - base::Bind(&NetworkFetcher::CopyCompleted, weak_ptr_factory_.GetWeakPtr(), |
| - callback)); |
| + service_cache_->GetFile(response_.Pass(), |
| + base::Bind(&NetworkFetcher::CacheFileRetrieved, |
| + weak_ptr_factory_.GetWeakPtr(), callback)); |
| } |
| std::string NetworkFetcher::MimeType() { |