application_impl.cc revision 116680a4aac90f2aa7413d9095a592090648e557
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 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/public/cpp/application/application_impl.h" 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/public/cpp/application/application_delegate.h" 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/public/cpp/application/lib/service_registry.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/public/cpp/bindings/interface_ptr.h" 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace mojo { 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 13116680a4aac90f2aa7413d9095a592090648e557Ben MurdochApplicationImpl::ApplicationImpl(ApplicationDelegate* delegate) 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : delegate_(delegate) {} 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 16116680a4aac90f2aa7413d9095a592090648e557Ben MurdochApplicationImpl::ApplicationImpl(ApplicationDelegate* delegate, 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ScopedMessagePipeHandle shell_handle) 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : delegate_(delegate) { 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BindShell(shell_handle.Pass()); 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 22116680a4aac90f2aa7413d9095a592090648e557Ben MurdochApplicationImpl::ApplicationImpl(ApplicationDelegate* delegate, 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch MojoHandle shell_handle) 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : delegate_(delegate) { 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BindShell(shell_handle); 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 28116680a4aac90f2aa7413d9095a592090648e557Ben MurdochApplicationImpl::~ApplicationImpl() { 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch for (ServiceRegistryList::iterator i(incoming_service_registries_.begin()); 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch i != incoming_service_registries_.end(); ++i) 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch delete *i; 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch for (ServiceRegistryList::iterator i(outgoing_service_registries_.begin()); 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch i != outgoing_service_registries_.end(); ++i) 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch delete *i; 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 37116680a4aac90f2aa7413d9095a592090648e557Ben MurdochApplicationConnection* ApplicationImpl::ConnectToApplication( 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const String& application_url) { 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ServiceProviderPtr out_service_provider; 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch shell_->ConnectToApplication(application_url, Get(&out_service_provider)); 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch internal::ServiceRegistry* registry = new internal::ServiceRegistry( 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch this, 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch application_url, 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch out_service_provider.Pass()); 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!delegate_->ConfigureOutgoingConnection(registry)) { 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch delete registry; 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return NULL; 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch outgoing_service_registries_.push_back(registry); 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return registry; 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ApplicationImpl::BindShell(ScopedMessagePipeHandle shell_handle) { 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch shell_.Bind(shell_handle.Pass()); 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch shell_.set_client(this); 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch delegate_->Initialize(this); 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ApplicationImpl::BindShell(MojoHandle shell_handle) { 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BindShell(mojo::MakeScopedHandle(mojo::MessagePipeHandle(shell_handle))); 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ApplicationImpl::AcceptConnection(const String& requestor_url, 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ServiceProviderPtr service_provider) { 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch internal::ServiceRegistry* registry = new internal::ServiceRegistry( 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch this, requestor_url, service_provider.Pass()); 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!delegate_->ConfigureIncomingConnection(registry)) { 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch delete registry; 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return; 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch incoming_service_registries_.push_back(registry); 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace mojo 75