1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#ifndef MOJO_SHELL_NETWORK_APPLICATION_LOADER_H_
66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define MOJO_SHELL_NETWORK_APPLICATION_LOADER_H_
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <map>
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/containers/scoped_ptr_hash_map.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/memory/scoped_ptr.h"
126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "mojo/application_manager/application_loader.h"
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/public/cpp/application/application_delegate.h"
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "mojo/public/cpp/application/interface_factory.h"
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/services/network/network_context.h"
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace mojo {
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass ApplicationImpl;
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class NetworkService;
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace shell {
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// ApplicationLoader responsible for creating connections to the NetworkService.
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class NetworkApplicationLoader : public ApplicationLoader,
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                 public ApplicationDelegate,
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                 public InterfaceFactory<NetworkService> {
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public:
296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  NetworkApplicationLoader();
306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual ~NetworkApplicationLoader();
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private:
336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // ApplicationLoader overrides:
346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void Load(ApplicationManager* manager,
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                    const GURL& url,
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                    scoped_refptr<LoadCallbacks> callbacks) OVERRIDE;
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void OnApplicationError(ApplicationManager* manager,
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                  const GURL& url) OVERRIDE;
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // ApplicationDelegate overrides.
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void Initialize(ApplicationImpl* app) OVERRIDE;
426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual bool ConfigureIncomingConnection(
436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      ApplicationConnection* connection) OVERRIDE;
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // InterfaceFactory<NetworkService> overrides.
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void Create(ApplicationConnection* connection,
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                      InterfaceRequest<NetworkService> request) OVERRIDE;
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  base::ScopedPtrHashMap<uintptr_t, ApplicationImpl> apps_;
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<NetworkContext> context_;
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(NetworkApplicationLoader);
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace shell
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace mojo
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif  // MOJO_SHELL_NETWORK_APPLICATION_LOADER_H_
59