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