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#ifndef MOJO_SHELL_CONTEXT_H_
6#define MOJO_SHELL_CONTEXT_H_
7
8#include <string>
9
10#include "mojo/application_manager/application_manager.h"
11#include "mojo/shell/mojo_url_resolver.h"
12#include "mojo/shell/task_runners.h"
13
14#if defined(OS_ANDROID)
15#include "base/android/scoped_java_ref.h"
16#endif  // defined(OS_ANDROID)
17
18namespace mojo {
19
20class Spy;
21
22namespace shell {
23
24class DynamicApplicationLoader;
25
26// The "global" context for the shell's main process.
27class Context : ApplicationManager::Delegate {
28 public:
29  Context();
30  virtual ~Context();
31
32  void Init();
33
34  // ApplicationManager::Delegate override.
35  virtual void OnApplicationError(const GURL& gurl) OVERRIDE;
36
37  void Run(const GURL& url);
38  ScopedMessagePipeHandle ConnectToServiceByName(
39      const GURL& application_url,
40      const std::string& service_name);
41
42  TaskRunners* task_runners() { return task_runners_.get(); }
43  ApplicationManager* application_manager() { return &application_manager_; }
44  MojoURLResolver* mojo_url_resolver() { return &mojo_url_resolver_; }
45
46#if defined(OS_ANDROID)
47  base::MessageLoop* ui_loop() const { return ui_loop_; }
48  void set_ui_loop(base::MessageLoop* ui_loop) { ui_loop_ = ui_loop; }
49#endif  // defined(OS_ANDROID)
50
51 private:
52  class NativeViewportApplicationLoader;
53
54  std::set<GURL> app_urls_;
55  scoped_ptr<TaskRunners> task_runners_;
56  ApplicationManager application_manager_;
57  MojoURLResolver mojo_url_resolver_;
58  scoped_ptr<Spy> spy_;
59#if defined(OS_ANDROID)
60  base::MessageLoop* ui_loop_;
61#endif  // defined(OS_ANDROID)
62
63  DISALLOW_COPY_AND_ASSIGN(Context);
64};
65
66}  // namespace shell
67}  // namespace mojo
68
69#endif  // MOJO_SHELL_CONTEXT_H_
70