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

Side by Side Diff: mojo/public/shell/service.h

Issue 162213002: Change mojo demo apps to use Application. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add shell() to ServiceFactory::Owner Created 6 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « mojo/public/shell/lib/service.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef MOJO_PUBLIC_SHELL_SERVICE_H_ 5 #ifndef MOJO_PUBLIC_SHELL_SERVICE_H_
6 #define MOJO_PUBLIC_SHELL_SERVICE_H_ 6 #define MOJO_PUBLIC_SHELL_SERVICE_H_
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "mojo/public/bindings/error_handler.h" 10 #include "mojo/public/bindings/error_handler.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 // Specialization of ServiceFactory. 56 // Specialization of ServiceFactory.
57 // ServiceImpl: Implementation of Service interface. 57 // ServiceImpl: Implementation of Service interface.
58 // Context: Optional type of shared context.v 58 // Context: Optional type of shared context.v
59 // 59 //
60 // 60 //
61 namespace mojo { 61 namespace mojo {
62 62
63 namespace internal { 63 namespace internal {
64 class ServiceFactoryBase { 64 class ServiceFactoryBase {
65 public: 65 public:
66 class Owner { 66 class Owner : public ShellClient {
67 public: 67 public:
68 virtual Shell* GetShell() = 0; 68 Owner(ScopedShellHandle shell_handle);
69 ~Owner();
70 Shell* shell() { return shell_.get(); }
69 virtual void AddServiceFactory( 71 virtual void AddServiceFactory(
70 internal::ServiceFactoryBase* service_factory) = 0; 72 internal::ServiceFactoryBase* service_factory) = 0;
71 virtual void RemoveServiceFactory( 73 virtual void RemoveServiceFactory(
72 internal::ServiceFactoryBase* service_factory) = 0; 74 internal::ServiceFactoryBase* service_factory) = 0;
73 75
74 protected: 76 protected:
75 void set_service_factory_owner(ServiceFactoryBase* service_factory, 77 void set_service_factory_owner(ServiceFactoryBase* service_factory,
76 Owner* owner) { 78 Owner* owner) {
77 service_factory->owner_ = owner; 79 service_factory->owner_ = owner;
78 } 80 }
81 RemotePtr<Shell> shell_;
79 }; 82 };
80 ServiceFactoryBase() : owner_(NULL) {} 83 ServiceFactoryBase() : owner_(NULL) {}
81 virtual ~ServiceFactoryBase(); 84 virtual ~ServiceFactoryBase();
82 Shell* GetShell() { return owner_->GetShell(); } 85 Shell* shell() { return owner_->shell(); }
83 virtual void AcceptConnection(const std::string& url, 86 virtual void AcceptConnection(const std::string& url,
84 ScopedMessagePipeHandle client_handle) = 0; 87 ScopedMessagePipeHandle client_handle) = 0;
85 88
86 protected: 89 protected:
87 Owner* owner_; 90 Owner* owner_;
88 }; 91 };
89 } // namespace internal 92 } // namespace internal
90 93
91 template <class ServiceImpl, typename Context=void> 94 template <class ServiceImpl, typename Context=void>
92 class ServiceFactory : public internal::ServiceFactoryBase { 95 class ServiceFactory : public internal::ServiceFactoryBase {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 ScopedMessagePipeHandle client_handle) { 148 ScopedMessagePipeHandle client_handle) {
146 service_factory_ = service_factory; 149 service_factory_ = service_factory;
147 client_.reset( 150 client_.reset(
148 MakeScopedHandle( 151 MakeScopedHandle(
149 InterfaceHandle<typename ServiceInterface::_Peer>( 152 InterfaceHandle<typename ServiceInterface::_Peer>(
150 client_handle.release().value())).Pass(), 153 client_handle.release().value())).Pass(),
151 this, 154 this,
152 &reaper_); 155 &reaper_);
153 } 156 }
154 157
158 Shell* shell() { return service_factory_->shell(); }
155 Context* context() const { return service_factory_->context(); } 159 Context* context() const { return service_factory_->context(); }
156 typename ServiceInterface::_Peer* client() { return client_.get(); } 160 typename ServiceInterface::_Peer* client() { return client_.get(); }
157 161
158 private: 162 private:
159 // The Reaper class allows us to handle errors on the client proxy without 163 // The Reaper class allows us to handle errors on the client proxy without
160 // polluting the name space of the Service<> class. 164 // polluting the name space of the Service<> class.
161 class Reaper : public ErrorHandler { 165 class Reaper : public ErrorHandler {
162 public: 166 public:
163 Reaper(Service<ServiceInterface, ServiceImpl, Context>* service) 167 Reaper(Service<ServiceInterface, ServiceImpl, Context>* service)
164 : service_(service) {} 168 : service_(service) {}
165 virtual void OnError() { 169 virtual void OnError() {
166 service_->service_factory_->RemoveService( 170 service_->service_factory_->RemoveService(
167 static_cast<ServiceImpl*>(service_)); 171 static_cast<ServiceImpl*>(service_));
168 } 172 }
169 private: 173 private:
170 Service<ServiceInterface, ServiceImpl, Context>* service_; 174 Service<ServiceInterface, ServiceImpl, Context>* service_;
171 }; 175 };
172 friend class ServiceFactory<ServiceImpl, Context>; 176 friend class ServiceFactory<ServiceImpl, Context>;
173 Reaper reaper_; 177 Reaper reaper_;
174 ServiceFactory<ServiceImpl, Context>* service_factory_; 178 ServiceFactory<ServiceImpl, Context>* service_factory_;
175 RemotePtr<typename ServiceInterface::_Peer> client_; 179 RemotePtr<typename ServiceInterface::_Peer> client_;
176 }; 180 };
177 181
178 } // namespace mojo 182 } // namespace mojo
179 183
180 #endif // MOJO_PUBLIC_SHELL_SERVICE_H_ 184 #endif // MOJO_PUBLIC_SHELL_SERVICE_H_
OLDNEW
« no previous file with comments | « mojo/public/shell/lib/service.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698