OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "mojo/fetcher/network_fetcher.h" | 5 #include "mojo/fetcher/network_fetcher.h" |
6 | 6 |
| 7 #include <utility> |
| 8 |
7 #include "base/bind.h" | 9 #include "base/bind.h" |
8 #include "base/command_line.h" | 10 #include "base/command_line.h" |
9 #include "base/files/file.h" | 11 #include "base/files/file.h" |
10 #include "base/files/file_path.h" | 12 #include "base/files/file_path.h" |
11 #include "base/files/file_util.h" | 13 #include "base/files/file_util.h" |
12 #include "base/message_loop/message_loop.h" | 14 #include "base/message_loop/message_loop.h" |
13 #include "base/process/process.h" | 15 #include "base/process/process.h" |
14 #include "base/stl_util.h" | 16 #include "base/stl_util.h" |
15 #include "base/strings/string_number_conversions.h" | 17 #include "base/strings/string_number_conversions.h" |
16 #include "base/strings/string_util.h" | 18 #include "base/strings/string_util.h" |
(...skipping 13 matching lines...) Expand all Loading... |
30 namespace fetcher { | 32 namespace fetcher { |
31 | 33 |
32 NetworkFetcher::NetworkFetcher(bool disable_cache, | 34 NetworkFetcher::NetworkFetcher(bool disable_cache, |
33 mojo::URLRequestPtr request, | 35 mojo::URLRequestPtr request, |
34 URLLoaderFactory* url_loader_factory, | 36 URLLoaderFactory* url_loader_factory, |
35 const FetchCallback& loader_callback) | 37 const FetchCallback& loader_callback) |
36 : Fetcher(loader_callback), | 38 : Fetcher(loader_callback), |
37 disable_cache_(false), | 39 disable_cache_(false), |
38 url_(request->url.To<GURL>()), | 40 url_(request->url.To<GURL>()), |
39 weak_ptr_factory_(this) { | 41 weak_ptr_factory_(this) { |
40 StartNetworkRequest(request.Pass(), url_loader_factory); | 42 StartNetworkRequest(std::move(request), url_loader_factory); |
41 } | 43 } |
42 | 44 |
43 NetworkFetcher::~NetworkFetcher() { | 45 NetworkFetcher::~NetworkFetcher() { |
44 } | 46 } |
45 | 47 |
46 const GURL& NetworkFetcher::GetURL() const { | 48 const GURL& NetworkFetcher::GetURL() const { |
47 return url_; | 49 return url_; |
48 } | 50 } |
49 | 51 |
50 GURL NetworkFetcher::GetRedirectURL() const { | 52 GURL NetworkFetcher::GetRedirectURL() const { |
(...skipping 16 matching lines...) Expand all Loading... |
67 return GURL(response_->redirect_referrer); | 69 return GURL(response_->redirect_referrer); |
68 } | 70 } |
69 URLResponsePtr NetworkFetcher::AsURLResponse(base::TaskRunner* task_runner, | 71 URLResponsePtr NetworkFetcher::AsURLResponse(base::TaskRunner* task_runner, |
70 uint32_t skip) { | 72 uint32_t skip) { |
71 if (skip != 0) { | 73 if (skip != 0) { |
72 MojoResult result = ReadDataRaw( | 74 MojoResult result = ReadDataRaw( |
73 response_->body.get(), nullptr, &skip, | 75 response_->body.get(), nullptr, &skip, |
74 MOJO_READ_DATA_FLAG_ALL_OR_NONE | MOJO_READ_DATA_FLAG_DISCARD); | 76 MOJO_READ_DATA_FLAG_ALL_OR_NONE | MOJO_READ_DATA_FLAG_DISCARD); |
75 DCHECK_EQ(result, MOJO_RESULT_OK); | 77 DCHECK_EQ(result, MOJO_RESULT_OK); |
76 } | 78 } |
77 return response_.Pass(); | 79 return std::move(response_); |
78 } | 80 } |
79 | 81 |
80 void NetworkFetcher::RecordCacheToURLMapping(const base::FilePath& path, | 82 void NetworkFetcher::RecordCacheToURLMapping(const base::FilePath& path, |
81 const GURL& url) { | 83 const GURL& url) { |
82 // This is used to extract symbols on android. | 84 // This is used to extract symbols on android. |
83 // TODO(eseidel): All users of this log should move to using the map file. | 85 // TODO(eseidel): All users of this log should move to using the map file. |
84 VLOG(1) << "Caching mojo app " << url << " at " << path.value(); | 86 VLOG(1) << "Caching mojo app " << url << " at " << path.value(); |
85 | 87 |
86 base::FilePath temp_dir; | 88 base::FilePath temp_dir; |
87 base::GetTempDir(&temp_dir); | 89 base::GetTempDir(&temp_dir); |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 void NetworkFetcher::AsPath( | 192 void NetworkFetcher::AsPath( |
191 base::TaskRunner* task_runner, | 193 base::TaskRunner* task_runner, |
192 base::Callback<void(const base::FilePath&, bool)> callback) { | 194 base::Callback<void(const base::FilePath&, bool)> callback) { |
193 if (!path_.empty() || !response_) { | 195 if (!path_.empty() || !response_) { |
194 base::MessageLoop::current()->PostTask( | 196 base::MessageLoop::current()->PostTask( |
195 FROM_HERE, base::Bind(callback, path_, base::PathExists(path_))); | 197 FROM_HERE, base::Bind(callback, path_, base::PathExists(path_))); |
196 return; | 198 return; |
197 } | 199 } |
198 | 200 |
199 base::CreateTemporaryFile(&path_); | 201 base::CreateTemporaryFile(&path_); |
200 common::CopyToFile(response_->body.Pass(), path_, task_runner, | 202 common::CopyToFile(std::move(response_->body), path_, task_runner, |
201 base::Bind(&NetworkFetcher::CopyCompleted, | 203 base::Bind(&NetworkFetcher::CopyCompleted, |
202 weak_ptr_factory_.GetWeakPtr(), callback)); | 204 weak_ptr_factory_.GetWeakPtr(), callback)); |
203 } | 205 } |
204 | 206 |
205 std::string NetworkFetcher::MimeType() { | 207 std::string NetworkFetcher::MimeType() { |
206 return response_->mime_type; | 208 return response_->mime_type; |
207 } | 209 } |
208 | 210 |
209 bool NetworkFetcher::HasMojoMagic() { | 211 bool NetworkFetcher::HasMojoMagic() { |
210 std::string magic; | 212 std::string magic; |
211 return shell::BlockingPeekNBytes(response_->body.get(), &magic, | 213 return shell::BlockingPeekNBytes(response_->body.get(), &magic, |
212 strlen(kMojoMagic), kPeekTimeout) && | 214 strlen(kMojoMagic), kPeekTimeout) && |
213 magic == kMojoMagic; | 215 magic == kMojoMagic; |
214 } | 216 } |
215 | 217 |
216 bool NetworkFetcher::PeekFirstLine(std::string* line) { | 218 bool NetworkFetcher::PeekFirstLine(std::string* line) { |
217 return shell::BlockingPeekLine(response_->body.get(), line, kMaxShebangLength, | 219 return shell::BlockingPeekLine(response_->body.get(), line, kMaxShebangLength, |
218 kPeekTimeout); | 220 kPeekTimeout); |
219 } | 221 } |
220 | 222 |
221 void NetworkFetcher::StartNetworkRequest(mojo::URLRequestPtr request, | 223 void NetworkFetcher::StartNetworkRequest(mojo::URLRequestPtr request, |
222 URLLoaderFactory* url_loader_factory) { | 224 URLLoaderFactory* url_loader_factory) { |
223 TRACE_EVENT_ASYNC_BEGIN1("mojo_shell", "NetworkFetcher::NetworkRequest", this, | 225 TRACE_EVENT_ASYNC_BEGIN1("mojo_shell", "NetworkFetcher::NetworkRequest", this, |
224 "url", request->url.To<std::string>()); | 226 "url", request->url.To<std::string>()); |
225 request->auto_follow_redirects = false; | 227 request->auto_follow_redirects = false; |
226 request->bypass_cache = disable_cache_; | 228 request->bypass_cache = disable_cache_; |
227 | 229 |
228 url_loader_factory->CreateURLLoader(GetProxy(&url_loader_)); | 230 url_loader_factory->CreateURLLoader(GetProxy(&url_loader_)); |
229 url_loader_->Start(request.Pass(), | 231 url_loader_->Start(std::move(request), |
230 base::Bind(&NetworkFetcher::OnLoadComplete, | 232 base::Bind(&NetworkFetcher::OnLoadComplete, |
231 weak_ptr_factory_.GetWeakPtr())); | 233 weak_ptr_factory_.GetWeakPtr())); |
232 } | 234 } |
233 | 235 |
234 void NetworkFetcher::OnLoadComplete(URLResponsePtr response) { | 236 void NetworkFetcher::OnLoadComplete(URLResponsePtr response) { |
235 TRACE_EVENT_ASYNC_END0("mojo_shell", "NetworkFetcher::NetworkRequest", this); | 237 TRACE_EVENT_ASYNC_END0("mojo_shell", "NetworkFetcher::NetworkRequest", this); |
236 scoped_ptr<Fetcher> owner(this); | 238 scoped_ptr<Fetcher> owner(this); |
237 if (response->error) { | 239 if (response->error) { |
238 LOG(ERROR) << "Error (" << response->error->code << ": " | 240 LOG(ERROR) << "Error (" << response->error->code << ": " |
239 << response->error->description << ") while fetching " | 241 << response->error->description << ") while fetching " |
240 << response->url; | 242 << response->url; |
241 loader_callback_.Run(nullptr); | 243 loader_callback_.Run(nullptr); |
242 return; | 244 return; |
243 } | 245 } |
244 | 246 |
245 response_ = response.Pass(); | 247 response_ = std::move(response); |
246 loader_callback_.Run(owner.Pass()); | 248 loader_callback_.Run(std::move(owner)); |
247 } | 249 } |
248 | 250 |
249 } // namespace fetcher | 251 } // namespace fetcher |
250 } // namespace mojo | 252 } // namespace mojo |
OLD | NEW |