1// Copyright 2013 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.
4
5#include "mojo/shell/loader.h"
6
7#include "base/command_line.h"
8#include "base/message_loop/message_loop.h"
9#include "mojo/shell/switches.h"
10#include "net/base/load_flags.h"
11#include "net/base/network_delegate.h"
12
13namespace mojo {
14namespace shell {
15
16Loader::Delegate::~Delegate() {
17}
18
19Loader::Job::Job(const GURL& app_url, Delegate* delegate)
20    : delegate_(delegate) {
21  fetcher_.reset(net::URLFetcher::Create(app_url, net::URLFetcher::GET, this));
22}
23
24Loader::Job::~Job() {
25}
26
27void Loader::Job::OnURLFetchComplete(const net::URLFetcher* source) {
28  base::FilePath app_path;
29  source->GetResponseAsFilePath(true, &app_path);
30  delegate_->DidCompleteLoad(source->GetURL(), app_path);
31}
32
33Loader::Loader(base::SingleThreadTaskRunner* network_runner,
34               base::SingleThreadTaskRunner* file_runner,
35               base::MessageLoopProxy* cache_runner,
36               scoped_ptr<net::NetworkDelegate> network_delegate,
37               base::FilePath base_path)
38    : file_runner_(file_runner),
39      url_request_context_getter_(new URLRequestContextGetter(
40          base_path,
41          network_runner,
42          file_runner,
43          cache_runner,
44          network_delegate.Pass())) {
45}
46
47Loader::~Loader() {
48}
49
50scoped_ptr<Loader::Job> Loader::Load(const GURL& app_url, Delegate* delegate) {
51  scoped_ptr<Job> job(new Job(app_url, delegate));
52  job->fetcher_->SetRequestContext(url_request_context_getter_.get());
53  job->fetcher_->SaveResponseToTemporaryFile(file_runner_.get());
54  if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableCache))
55    job->fetcher_->SetLoadFlags(net::LOAD_DISABLE_CACHE);
56  job->fetcher_->Start();
57  return job.Pass();
58}
59
60}  // namespace shell
61}  // namespace mojo
62