Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(47)

Side by Side Diff: mojo/public/cpp/application/lib/application_impl.cc

Issue 814543006: Move //mojo/{public, edk} underneath //third_party (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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.
4
5 #include "mojo/public/cpp/application/application_impl.h"
6
7 #include "mojo/public/cpp/application/application_delegate.h"
8 #include "mojo/public/cpp/application/lib/service_registry.h"
9 #include "mojo/public/cpp/bindings/interface_ptr.h"
10 #include "mojo/public/cpp/environment/logging.h"
11
12 namespace mojo {
13
14 class ApplicationImpl::ShellPtrWatcher : public ErrorHandler {
15 public:
16 ShellPtrWatcher(ApplicationImpl* impl) : impl_(impl) {}
17
18 ~ShellPtrWatcher() override {}
19
20 void OnConnectionError() override { impl_->OnShellError(); }
21
22 private:
23 ApplicationImpl* impl_;
24 MOJO_DISALLOW_COPY_AND_ASSIGN(ShellPtrWatcher);
25 };
26
27 ApplicationImpl::ApplicationImpl(ApplicationDelegate* delegate,
28 ScopedMessagePipeHandle shell_handle)
29 : initialized_(false), delegate_(delegate), shell_watch_(nullptr) {
30 BindShell(shell_handle.Pass());
31 }
32
33 ApplicationImpl::ApplicationImpl(ApplicationDelegate* delegate,
34 MojoHandle shell_handle)
35 : initialized_(false), delegate_(delegate), shell_watch_(nullptr) {
36 BindShell(MakeScopedHandle(MessagePipeHandle(shell_handle)));
37 }
38
39 bool ApplicationImpl::HasArg(const std::string& arg) const {
40 return std::find(args_.begin(), args_.end(), arg) != args_.end();
41 }
42
43 void ApplicationImpl::ClearConnections() {
44 for (ServiceRegistryList::iterator i(incoming_service_registries_.begin());
45 i != incoming_service_registries_.end();
46 ++i)
47 delete *i;
48 for (ServiceRegistryList::iterator i(outgoing_service_registries_.begin());
49 i != outgoing_service_registries_.end();
50 ++i)
51 delete *i;
52 incoming_service_registries_.clear();
53 outgoing_service_registries_.clear();
54 }
55
56 ApplicationImpl::~ApplicationImpl() {
57 ClearConnections();
58 delete shell_watch_;
59 }
60
61 ApplicationConnection* ApplicationImpl::ConnectToApplication(
62 const String& application_url) {
63 MOJO_CHECK(initialized_);
64 ServiceProviderPtr local_services;
65 InterfaceRequest<ServiceProvider> local_request = GetProxy(&local_services);
66 ServiceProviderPtr remote_services;
67 shell_->ConnectToApplication(application_url, GetProxy(&remote_services),
68 local_services.Pass());
69 internal::ServiceRegistry* registry = new internal::ServiceRegistry(
70 this, application_url, remote_services.Pass(), local_request.Pass());
71 if (!delegate_->ConfigureOutgoingConnection(registry)) {
72 delete registry;
73 return nullptr;
74 }
75 outgoing_service_registries_.push_back(registry);
76 return registry;
77 }
78
79 bool ApplicationImpl::WaitForInitialize() {
80 MOJO_CHECK(!initialized_);
81 bool result = shell_.WaitForIncomingMethodCall();
82 MOJO_CHECK(initialized_ || !result);
83 return result;
84 }
85
86 ScopedMessagePipeHandle ApplicationImpl::UnbindShell() {
87 return shell_.PassMessagePipe();
88 }
89
90 void ApplicationImpl::Initialize(Array<String> args) {
91 MOJO_CHECK(!initialized_);
92 initialized_ = true;
93 args_ = args.To<std::vector<std::string>>();
94 delegate_->Initialize(this);
95 }
96
97 void ApplicationImpl::BindShell(ScopedMessagePipeHandle shell_handle) {
98 shell_watch_ = new ShellPtrWatcher(this);
99 shell_.Bind(shell_handle.Pass());
100 shell_.set_client(this);
101 shell_.set_error_handler(shell_watch_);
102 }
103
104 void ApplicationImpl::AcceptConnection(
105 const String& requestor_url,
106 InterfaceRequest<ServiceProvider> services,
107 ServiceProviderPtr exposed_services) {
108 internal::ServiceRegistry* registry = new internal::ServiceRegistry(
109 this, requestor_url, exposed_services.Pass(), services.Pass());
110 if (!delegate_->ConfigureIncomingConnection(registry)) {
111 delete registry;
112 return;
113 }
114 incoming_service_registries_.push_back(registry);
115 }
116
117 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/public/cpp/application/lib/application_delegate.cc ('k') | mojo/public/cpp/application/lib/application_runner.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698