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.
4
5#ifndef MOJO_SHELL_NETWORK_APPLICATION_LOADER_H_
6#define MOJO_SHELL_NETWORK_APPLICATION_LOADER_H_
7
8#include <map>
9
10#include "base/containers/scoped_ptr_hash_map.h"
11#include "base/memory/scoped_ptr.h"
12#include "mojo/application_manager/application_loader.h"
13#include "mojo/public/cpp/application/application_delegate.h"
14#include "mojo/public/cpp/application/interface_factory.h"
15#include "mojo/services/network/network_context.h"
16
17namespace mojo {
18
19class ApplicationImpl;
20class NetworkService;
21
22namespace shell {
23
24// ApplicationLoader responsible for creating connections to the NetworkService.
25class NetworkApplicationLoader : public ApplicationLoader,
26                                 public ApplicationDelegate,
27                                 public InterfaceFactory<NetworkService> {
28 public:
29  NetworkApplicationLoader();
30  virtual ~NetworkApplicationLoader();
31
32 private:
33  // ApplicationLoader overrides:
34  virtual void Load(ApplicationManager* manager,
35                    const GURL& url,
36                    scoped_refptr<LoadCallbacks> callbacks) OVERRIDE;
37  virtual void OnApplicationError(ApplicationManager* manager,
38                                  const GURL& url) OVERRIDE;
39
40  // ApplicationDelegate overrides.
41  virtual void Initialize(ApplicationImpl* app) OVERRIDE;
42  virtual bool ConfigureIncomingConnection(
43      ApplicationConnection* connection) OVERRIDE;
44
45  // InterfaceFactory<NetworkService> overrides.
46  virtual void Create(ApplicationConnection* connection,
47                      InterfaceRequest<NetworkService> request) OVERRIDE;
48
49  base::ScopedPtrHashMap<uintptr_t, ApplicationImpl> apps_;
50  scoped_ptr<NetworkContext> context_;
51
52  DISALLOW_COPY_AND_ASSIGN(NetworkApplicationLoader);
53};
54
55}  // namespace shell
56}  // namespace mojo
57
58#endif  // MOJO_SHELL_NETWORK_APPLICATION_LOADER_H_
59