| OLD | NEW |
| 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_CPP_APPLICATION_LIB_SERVICE_CONNECTOR_H_ | 5 #ifndef MOJO_PUBLIC_CPP_APPLICATION_LIB_SERVICE_CONNECTOR_H_ |
| 6 #define MOJO_PUBLIC_CPP_APPLICATION_LIB_SERVICE_CONNECTOR_H_ | 6 #define MOJO_PUBLIC_CPP_APPLICATION_LIB_SERVICE_CONNECTOR_H_ |
| 7 | 7 |
| 8 #include <assert.h> | 8 #include <assert.h> |
| 9 | 9 |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 70 virtual void RemoveServiceConnector( | 70 virtual void RemoveServiceConnector( |
| 71 internal::ServiceConnectorBase* service_connector) = 0; | 71 internal::ServiceConnectorBase* service_connector) = 0; |
| 72 | 72 |
| 73 protected: | 73 protected: |
| 74 void set_service_connector_owner(ServiceConnectorBase* service_connector, | 74 void set_service_connector_owner(ServiceConnectorBase* service_connector, |
| 75 Owner* owner) { | 75 Owner* owner) { |
| 76 service_connector->owner_ = owner; | 76 service_connector->owner_ = owner; |
| 77 } | 77 } |
| 78 ServiceProviderPtr service_provider_; | 78 ServiceProviderPtr service_provider_; |
| 79 }; | 79 }; |
| 80 ServiceConnectorBase() : owner_(NULL) {} | 80 ServiceConnectorBase(const std::string& name) : name_(name), owner_(NULL) {} |
| 81 virtual ~ServiceConnectorBase(); | 81 virtual ~ServiceConnectorBase(); |
| 82 virtual void ConnectToService(const std::string& url, | 82 virtual void ConnectToService(const std::string& url, |
| 83 const std::string& name, |
| 83 ScopedMessagePipeHandle client_handle) = 0; | 84 ScopedMessagePipeHandle client_handle) = 0; |
| 85 std::string name() const { return name_; } |
| 84 | 86 |
| 85 protected: | 87 protected: |
| 88 std::string name_; |
| 86 Owner* owner_; | 89 Owner* owner_; |
| 87 }; | 90 }; |
| 88 | 91 |
| 89 template <class ServiceImpl, typename Context=void> | 92 template <class ServiceImpl, typename Context=void> |
| 90 class ServiceConnector : public internal::ServiceConnectorBase { | 93 class ServiceConnector : public internal::ServiceConnectorBase { |
| 91 public: | 94 public: |
| 92 ServiceConnector(Context* context = NULL) : context_(context) {} | 95 ServiceConnector(const std::string& name, Context* context = NULL) |
| 96 : ServiceConnectorBase(name), context_(context) {} |
| 93 | 97 |
| 94 virtual ~ServiceConnector() { | 98 virtual ~ServiceConnector() { |
| 95 ConnectionList doomed; | 99 ConnectionList doomed; |
| 96 doomed.swap(connections_); | 100 doomed.swap(connections_); |
| 97 for (typename ConnectionList::iterator it = doomed.begin(); | 101 for (typename ConnectionList::iterator it = doomed.begin(); |
| 98 it != doomed.end(); ++it) { | 102 it != doomed.end(); ++it) { |
| 99 delete *it; | 103 delete *it; |
| 100 } | 104 } |
| 101 assert(connections_.empty()); // No one should have added more! | 105 assert(connections_.empty()); // No one should have added more! |
| 102 } | 106 } |
| 103 | 107 |
| 104 virtual void ConnectToService(const std::string& url, | 108 virtual void ConnectToService(const std::string& url, |
| 109 const std::string& name, |
| 105 ScopedMessagePipeHandle handle) MOJO_OVERRIDE { | 110 ScopedMessagePipeHandle handle) MOJO_OVERRIDE { |
| 106 ServiceConnection<ServiceImpl, Context>* impl = | 111 ServiceConnection<ServiceImpl, Context>* impl = |
| 107 ServiceConstructor<ServiceImpl, Context>::New(context_); | 112 ServiceConstructor<ServiceImpl, Context>::New(context_); |
| 108 impl->set_service_connector(this); | 113 impl->set_service_connector(this); |
| 109 BindToPipe(impl, handle.Pass()); | 114 BindToPipe(impl, handle.Pass()); |
| 110 | 115 |
| 111 connections_.push_back(impl); | 116 connections_.push_back(impl); |
| 112 } | 117 } |
| 113 | 118 |
| 114 void RemoveConnection(ServiceImpl* impl) { | 119 void RemoveConnection(ServiceImpl* impl) { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 130 private: | 135 private: |
| 131 typedef std::vector<ServiceImpl*> ConnectionList; | 136 typedef std::vector<ServiceImpl*> ConnectionList; |
| 132 ConnectionList connections_; | 137 ConnectionList connections_; |
| 133 Context* context_; | 138 Context* context_; |
| 134 }; | 139 }; |
| 135 | 140 |
| 136 } // namespace internal | 141 } // namespace internal |
| 137 } // namespace mojo | 142 } // namespace mojo |
| 138 | 143 |
| 139 #endif // MOJO_PUBLIC_CPP_APPLICATION_LIB_SERVICE_CONNECTOR_H_ | 144 #endif // MOJO_PUBLIC_CPP_APPLICATION_LIB_SERVICE_CONNECTOR_H_ |
| OLD | NEW |