1 // Copyright 2014 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.
5 #include "mojo/public/cpp/application/application.h"
9 Application::Application() {}
11 Application::Application(ScopedMessagePipeHandle service_provider_handle
)
12 : internal::ServiceConnectorBase::Owner(service_provider_handle
.Pass()) {
15 Application::Application(MojoHandle service_provider_handle
)
16 : internal::ServiceConnectorBase::Owner(
17 mojo::MakeScopedHandle(
18 MessagePipeHandle(service_provider_handle
)).Pass()) {}
20 Application::~Application() {
21 for (NameToServiceConnectorMap::iterator i
=
22 name_to_service_connector_
.begin();
23 i
!= name_to_service_connector_
.end(); ++i
) {
26 name_to_service_connector_
.clear();
29 void Application::Initialize() {}
31 void Application::AddServiceConnector(
32 internal::ServiceConnectorBase
* service_connector
) {
33 name_to_service_connector_
[service_connector
->name()] = service_connector
;
34 set_service_connector_owner(service_connector
, this);
37 void Application::RemoveServiceConnector(
38 internal::ServiceConnectorBase
* service_connector
) {
39 NameToServiceConnectorMap::iterator it
=
40 name_to_service_connector_
.find(service_connector
->name());
41 assert(it
!= name_to_service_connector_
.end());
43 name_to_service_connector_
.erase(it
);
44 if (name_to_service_connector_
.empty())
45 service_provider_
.reset();
48 void Application::BindServiceProvider(
49 ScopedMessagePipeHandle service_provider_handle
) {
50 service_provider_
.Bind(service_provider_handle
.Pass());
51 service_provider_
.set_client(this);
54 void Application::ConnectToService(const mojo::String
& url
,
55 const mojo::String
& name
,
56 ScopedMessagePipeHandle client_handle
) {
57 internal::ServiceConnectorBase
* service_connector
=
58 name_to_service_connector_
[name
];
59 return service_connector
->ConnectToService(
60 url
, name
, client_handle
.Pass());