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

Side by Side Diff: services/service_manager/public/cpp/service.h

Issue 2500683002: Revert of Service Manager: Remove ServiceContext* arg from Service::OnStart() (Closed)
Patch Set: Created 4 years, 1 month 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
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 SERVICES_SERVICE_MANAGER_PUBLIC_CPP_SERVICE_H_ 5 #ifndef SERVICES_SERVICE_MANAGER_PUBLIC_CPP_SERVICE_H_
6 #define SERVICES_SERVICE_MANAGER_PUBLIC_CPP_SERVICE_H_ 6 #define SERVICES_SERVICE_MANAGER_PUBLIC_CPP_SERVICE_H_
7 7
8 namespace service_manager { 8 namespace service_manager {
9 9
10 class InterfaceRegistry; 10 class InterfaceRegistry;
11 class ServiceContext; 11 class ServiceContext;
12 struct ServiceInfo; 12 struct ServiceInfo;
13 13
14 // The primary contract between a Service and the Service Manager, receiving 14 // The primary contract between a Service and the Service Manager, receiving
15 // lifecycle notifications and connection requests. 15 // lifecycle notifications and connection requests. Every Service must minimally
16 // implement OnConnect().
16 class Service { 17 class Service {
17 public: 18 public:
18 Service();
19 virtual ~Service(); 19 virtual ~Service();
20 20
21 // Called exactly once, when a bidirectional connection with the Service 21 // Called once a bidirectional connection with the Service Manager has been
22 // Manager has been established. No calls to OnConnect() will be received 22 // established.
23 // before this. 23 //
24 virtual void OnStart(); 24 // |context| is the ServiceContext for this instance of the service. It's
25 // guaranteed to outlive the Service instance and therefore may be retained by
26 // it.
27 //
28 // Use the context to retrieve information about the service instance, make
29 // outgoing service connections, and issue other requests to the Service
30 // Manager on behalf of this instance.
31 //
32 // Called exactly once before any calls to OnConnect().
33 virtual void OnStart(ServiceContext* context);
25 34
26 // Called each time a connection to this service is brokered by the Service 35 // Called each time a connection to this service is brokered by the Service
27 // Manager. Implement this to expose interfaces to other services. 36 // Manager. Implement this to expose interfaces to other services.
28 // 37 //
29 // Return true if the connection should succeed or false if the connection 38 // Return true if the connection should succeed or false if the connection
30 // should be rejected. 39 // should be rejected.
31 //
32 // The default implementation returns false.
33 virtual bool OnConnect(const ServiceInfo& remote_info, 40 virtual bool OnConnect(const ServiceInfo& remote_info,
34 InterfaceRegistry* registry); 41 InterfaceRegistry* registry) = 0;
35 42
36 // Called when the Service Manager has stopped tracking this instance. The 43 // Called when the Service Manager has stopped tracking this instance. The
37 // service should use this as a signal to shut down, and in fact its process 44 // service should use this as a signal to shut down, and in fact its process
38 // may be reaped shortly afterward if applicable. 45 // may be reaped shortly afterward if applicable.
39 // 46 //
40 // Return true from this method to tell the ServiceContext to signal its 47 // Return true from this method to tell the ServiceContext to signal its
41 // shutdown extenrally (i.e. to invoke it's "connection lost" closure if set), 48 // shutdown extenrally (i.e. to invoke it's "connection lost" closure if set),
42 // or return false to defer the signal. If deferred, the Service should 49 // or return false to defer the signal. If deferred, the Service should
43 // explicitly call QuitNow() on the ServiceContext when it's ready to be 50 // explicitly call QuitNow() on the ServiceContext when it's ready to be
44 // torn down. 51 // torn down.
45 // 52 //
46 // The default implementation returns true. 53 // The default implementation returns true.
47 // 54 //
48 // While it's possible for this to be invoked before either OnStart() or 55 // While it's possible for this to be invoked before either OnStart() or
49 // OnConnect() is invoked, neither will be invoked at any point after this 56 // OnConnect() is invoked, neither will be invoked at any point after this
50 // OnStop(). 57 // OnStop().
51 virtual bool OnStop(); 58 virtual bool OnStop();
52
53 protected:
54 // Access the ServiceContext associated with this Service. Note that this is
55 // only valid to call during or after OnStart(), but never before! As such,
56 // it's always safe to call in OnStart() and OnConnect(), but should generally
57 // be avoided in OnStop().
58 ServiceContext* context() const;
59
60 private:
61 friend class ForwardingService;
62 friend class ServiceContext;
63
64 // NOTE: This is guaranteed to be called before OnStart().
65 void set_context(ServiceContext* context) { service_context_ = context; }
66
67 ServiceContext* service_context_ = nullptr;
68 };
69
70 // TODO(rockot): Remove this. It's here to satisfy a few remaining use cases
71 // where a Service impl is owned by something other than its ServiceContext.
72 class ForwardingService : public Service {
73 public:
74 // |target| must outlive this object.
75 explicit ForwardingService(Service* target);
76 ~ForwardingService() override;
77
78 private:
79 // Service:
80 void OnStart() override;
81 bool OnConnect(const ServiceInfo& remote_info,
82 InterfaceRegistry* registry) override;
83 bool OnStop() override;
84
85 Service* const target_ = nullptr;
86 }; 59 };
87 60
88 } // namespace service_manager 61 } // namespace service_manager
89 62
90 #endif // SERVICES_SERVICE_MANAGER_PUBLIC_CPP_SERVICE_H_ 63 #endif // SERVICES_SERVICE_MANAGER_PUBLIC_CPP_SERVICE_H_
OLDNEW
« no previous file with comments | « services/service_manager/public/cpp/lib/service_test.cc ('k') | services/service_manager/public/cpp/service_test.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698