context.cc revision a02191e04bc25c4935f804f2c080ae28663d096d
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/service_manager/service_loader.h" 11#include "mojo/service_manager/service_manager.h" 12#include "mojo/services/native_viewport/native_viewport_service.h" 13#include "mojo/shell/dynamic_service_loader.h" 14#include "mojo/shell/in_process_dynamic_service_runner.h" 15#include "mojo/shell/network_delegate.h" 16#include "mojo/shell/out_of_process_dynamic_service_runner.h" 17#include "mojo/shell/switches.h" 18#include "mojo/spy/spy.h" 19 20namespace mojo { 21namespace shell { 22 23class Context::NativeViewportServiceLoader : public ServiceLoader { 24 public: 25 explicit NativeViewportServiceLoader(Context* context) : context_(context) {} 26 virtual ~NativeViewportServiceLoader() {} 27 28 private: 29 virtual void LoadService(ServiceManager* manager, 30 const GURL& url, 31 ScopedShellHandle service_handle) OVERRIDE { 32 app_.reset(::CreateNativeViewportService(context_, service_handle.Pass())); 33 } 34 35 virtual void OnServiceError(ServiceManager* manager, 36 const GURL& url) OVERRIDE { 37 } 38 39 Context* context_; 40 scoped_ptr<Application> app_; 41 DISALLOW_COPY_AND_ASSIGN(NativeViewportServiceLoader); 42}; 43 44Context::Context() 45 : task_runners_(base::MessageLoop::current()->message_loop_proxy()), 46 storage_(), 47 loader_(task_runners_.io_runner(), 48 task_runners_.file_runner(), 49 task_runners_.cache_runner(), 50 scoped_ptr<net::NetworkDelegate>(new NetworkDelegate()), 51 storage_.profile_path()) { 52 embedder::Init(); 53 gles2::GLES2SupportImpl::Init(); 54 55 CommandLine* cmdline = CommandLine::ForCurrentProcess(); 56 scoped_ptr<DynamicServiceRunnerFactory> runner_factory; 57 if (cmdline->HasSwitch(switches::kEnableMultiprocess)) 58 runner_factory.reset(new OutOfProcessDynamicServiceRunnerFactory()); 59 else 60 runner_factory.reset(new InProcessDynamicServiceRunnerFactory()); 61 62 dynamic_service_loader_.reset( 63 new DynamicServiceLoader(this, runner_factory.Pass())); 64 service_manager_.set_default_loader(dynamic_service_loader_.get()); 65 native_viewport_service_loader_.reset(new NativeViewportServiceLoader(this)); 66 service_manager_.SetLoaderForURL(native_viewport_service_loader_.get(), 67 GURL("mojo:mojo_native_viewport_service")); 68 69 if (cmdline->HasSwitch(switches::kSpy)) { 70 spy_.reset(new mojo::Spy(&service_manager_, 71 cmdline->GetSwitchValueASCII(switches::kSpy))); 72 } 73} 74 75Context::~Context() { 76 service_manager_.set_default_loader(NULL); 77} 78 79} // namespace shell 80} // namespace mojo 81