context.cc revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
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/context.h"
6
7#include "base/command_line.h"
8#include "mojo/embedder/embedder.h"
9#include "mojo/gles2/gles2_support_impl.h"
10#include "mojo/shell/dynamic_service_loader.h"
11#include "mojo/shell/in_process_dynamic_service_runner.h"
12#include "mojo/shell/network_delegate.h"
13#include "mojo/shell/out_of_process_dynamic_service_runner.h"
14#include "mojo/shell/switches.h"
15#include "mojo/spy/spy.h"
16
17namespace mojo {
18namespace shell {
19
20Context::Context()
21    : task_runners_(base::MessageLoop::current()->message_loop_proxy()),
22      storage_(),
23      loader_(task_runners_.io_runner(),
24              task_runners_.file_runner(),
25              task_runners_.cache_runner(),
26              scoped_ptr<net::NetworkDelegate>(new NetworkDelegate()),
27              storage_.profile_path()) {
28  embedder::Init();
29  gles2::GLES2SupportImpl::Init();
30
31  CommandLine* cmdline = CommandLine::ForCurrentProcess();
32  scoped_ptr<DynamicServiceRunnerFactory> runner_factory;
33  if (cmdline->HasSwitch(switches::kEnableMultiprocess))
34    runner_factory.reset(new OutOfProcessDynamicServiceRunnerFactory());
35  else
36    runner_factory.reset(new InProcessDynamicServiceRunnerFactory());
37
38  dynamic_service_loader_.reset(
39      new DynamicServiceLoader(this, runner_factory.Pass()));
40  service_manager_.set_default_loader(dynamic_service_loader_.get());
41
42  if (cmdline->HasSwitch(switches::kSpy)) {
43    spy_.reset(new mojo::Spy(&service_manager_,
44                             cmdline->GetSwitchValueASCII(switches::kSpy)));
45  }
46}
47
48Context::~Context() {
49  service_manager_.set_default_loader(NULL);
50}
51
52}  // namespace shell
53}  // namespace mojo
54