// Copyright 2013 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. #ifndef MOJO_SHELL_LOADER_H_ #define MOJO_SHELL_LOADER_H_ #include "base/files/file_path.h" #include "base/memory/scoped_ptr.h" #include "base/single_thread_task_runner.h" #include "base/threading/thread.h" #include "mojo/shell/url_request_context_getter.h" #include "net/url_request/url_fetcher.h" #include "net/url_request/url_fetcher_delegate.h" #include "url/gurl.h" namespace net { class NetworkDelegate; } namespace mojo { namespace shell { class Loader { public: class Delegate { public: virtual void DidCompleteLoad(const GURL& app_url, const base::FilePath& app_path) = 0; protected: virtual ~Delegate(); }; class Job : public net::URLFetcherDelegate { public: // You can cancel a job by deleting it. virtual ~Job(); private: friend class Loader; // You can create a job using Loader::Load. Job(const GURL& app_url, Delegate* delegate); virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; scoped_ptr<net::URLFetcher> fetcher_; Delegate* delegate_; DISALLOW_COPY_AND_ASSIGN(Job); }; Loader(base::SingleThreadTaskRunner* network_runner, base::SingleThreadTaskRunner* file_runner, base::MessageLoopProxy* cache_runner, scoped_ptr<net::NetworkDelegate> network_delegate, base::FilePath base_path); ~Loader(); scoped_ptr<Job> Load(const GURL& app_url, Delegate* delegate); private: scoped_refptr<base::SingleThreadTaskRunner> file_runner_; scoped_refptr<URLRequestContextGetter> url_request_context_getter_; DISALLOW_COPY_AND_ASSIGN(Loader); }; } // namespace shell } // namespace mojo #endif // MOJO_SHELL_LOADER_H_