| 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 EXTENSIONS_BROWSER_API_CAST_CHANNEL_CAST_CHANNEL_API_H_ | 5 #ifndef EXTENSIONS_BROWSER_API_CAST_CHANNEL_CAST_CHANNEL_API_H_ |
| 6 #define EXTENSIONS_BROWSER_API_CAST_CHANNEL_CAST_CHANNEL_API_H_ | 6 #define EXTENSIONS_BROWSER_API_CAST_CHANNEL_CAST_CHANNEL_API_H_ |
| 7 | 7 |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 // Returns a test CastSocket instance, if it is defined. | 53 // Returns a test CastSocket instance, if it is defined. |
| 54 // Otherwise returns a scoped_ptr with a nullptr value. | 54 // Otherwise returns a scoped_ptr with a nullptr value. |
| 55 std::unique_ptr<cast_channel::CastSocket> GetSocketForTest(); | 55 std::unique_ptr<cast_channel::CastSocket> GetSocketForTest(); |
| 56 | 56 |
| 57 // Returns the API browser context. | 57 // Returns the API browser context. |
| 58 content::BrowserContext* GetBrowserContext() const; | 58 content::BrowserContext* GetBrowserContext() const; |
| 59 | 59 |
| 60 // Sends an event to the extension's EventRouter, if it exists. | 60 // Sends an event to the extension's EventRouter, if it exists. |
| 61 void SendEvent(const std::string& extension_id, std::unique_ptr<Event> event); | 61 void SendEvent(const std::string& extension_id, std::unique_ptr<Event> event); |
| 62 | 62 |
| 63 // Registers |extension_id| with |observer_| and returns |observer_|. |
| 64 cast_channel::CastSocket::Observer* GetObserver( |
| 65 const std::string& extension_id, |
| 66 scoped_refptr<cast_channel::Logger> logger); |
| 67 |
| 63 private: | 68 private: |
| 64 friend class BrowserContextKeyedAPIFactory<CastChannelAPI>; | 69 friend class BrowserContextKeyedAPIFactory<CastChannelAPI>; |
| 65 friend class ::CastChannelAPITest; | 70 friend class ::CastChannelAPITest; |
| 66 friend class CastTransportDelegate; | 71 friend class CastTransportDelegate; |
| 67 | 72 |
| 73 // Defines a callback used to send events to the extension's |
| 74 // EventRouter. |
| 75 // Parameter #0 is a unique pointer to the event payload. |
| 76 using EventDispatchCallback = base::Callback<void(std::unique_ptr<Event>)>; |
| 77 |
| 78 // Receives incoming messages and errors and provides additional API context. |
| 79 class CastMessageHandler : public cast_channel::CastSocket::Observer { |
| 80 public: |
| 81 CastMessageHandler(const EventDispatchCallback& ui_dispatch_cb, |
| 82 scoped_refptr<cast_channel::Logger> logger); |
| 83 ~CastMessageHandler() override; |
| 84 |
| 85 // CastSocket::Observer implementation. |
| 86 void OnError(const cast_channel::CastSocket& socket, |
| 87 cast_channel::ChannelError error_state) override; |
| 88 void OnMessage(const cast_channel::CastSocket& socket, |
| 89 const cast_channel::CastMessage& message) override; |
| 90 |
| 91 void RegisterExtensionId(const std::string& extension_id); |
| 92 |
| 93 private: |
| 94 // Callback for sending events to the extension. |
| 95 // Should be bound to a weak pointer, to prevent any use-after-free |
| 96 // conditions. |
| 97 EventDispatchCallback const ui_dispatch_cb_; |
| 98 // Logger object for reporting error details. |
| 99 scoped_refptr<cast_channel::Logger> logger_; |
| 100 |
| 101 THREAD_CHECKER(thread_checker_); |
| 102 |
| 103 DISALLOW_COPY_AND_ASSIGN(CastMessageHandler); |
| 104 }; |
| 105 |
| 68 ~CastChannelAPI() override; | 106 ~CastChannelAPI() override; |
| 69 | 107 |
| 70 // BrowserContextKeyedAPI implementation. | 108 // BrowserContextKeyedAPI implementation. |
| 71 static const char* service_name() { return "CastChannelAPI"; } | 109 static const char* service_name() { return "CastChannelAPI"; } |
| 72 | 110 |
| 73 content::BrowserContext* const browser_context_; | 111 content::BrowserContext* const browser_context_; |
| 74 std::unique_ptr<cast_channel::CastSocket> socket_for_test_; | 112 std::unique_ptr<cast_channel::CastSocket> socket_for_test_; |
| 113 // Created and destroyed on the IO thread. |
| 114 std::unique_ptr<CastMessageHandler, content::BrowserThread::DeleteOnIOThread> |
| 115 observer_; |
| 75 | 116 |
| 76 DISALLOW_COPY_AND_ASSIGN(CastChannelAPI); | 117 DISALLOW_COPY_AND_ASSIGN(CastChannelAPI); |
| 77 }; | 118 }; |
| 78 | 119 |
| 79 class CastChannelAsyncApiFunction : public AsyncApiFunction { | 120 class CastChannelAsyncApiFunction : public AsyncApiFunction { |
| 80 public: | 121 public: |
| 81 CastChannelAsyncApiFunction(); | 122 CastChannelAsyncApiFunction(); |
| 82 | 123 |
| 83 protected: | 124 protected: |
| 84 ~CastChannelAsyncApiFunction() override; | 125 ~CastChannelAsyncApiFunction() override; |
| 85 | 126 |
| 86 // AsyncApiFunction: | 127 // AsyncApiFunction: |
| 87 bool PrePrepare() override; | 128 bool PrePrepare() override; |
| 88 bool Respond() override; | 129 bool Respond() override; |
| 89 | 130 |
| 90 // Sets the function result to a ChannelInfo obtained from the state of | 131 // Sets the function result to a ChannelInfo obtained from the state of |
| 91 // |socket|. | 132 // |socket|. |
| 92 void SetResultFromSocket(const cast_channel::CastSocket& socket); | 133 void SetResultFromSocket(const cast_channel::CastSocket& socket); |
| 93 | 134 |
| 94 // Sets the function result to a ChannelInfo populated with |channel_id| and | 135 // Sets the function result to a ChannelInfo populated with |channel_id| and |
| 95 // |error|. | 136 // |error|. |
| 96 void SetResultFromError(int channel_id, | 137 void SetResultFromError(int channel_id, |
| 97 api::cast_channel::ChannelError error); | 138 api::cast_channel::ChannelError error); |
| 98 | 139 |
| 99 // Manages creating and removing Cast sockets. | 140 // Raw pointer of leaky singleton CastSocketService, which manages creating |
| 100 scoped_refptr<cast_channel::CastSocketService> cast_socket_service_; | 141 // and removing Cast sockets. |
| 142 cast_channel::CastSocketService* cast_socket_service_; |
| 101 | 143 |
| 102 private: | 144 private: |
| 103 // Sets the function result from |channel_info|. | 145 // Sets the function result from |channel_info|. |
| 104 void SetResultFromChannelInfo( | 146 void SetResultFromChannelInfo( |
| 105 const api::cast_channel::ChannelInfo& channel_info); | 147 const api::cast_channel::ChannelInfo& channel_info); |
| 106 }; | 148 }; |
| 107 | 149 |
| 108 class CastChannelOpenFunction : public CastChannelAsyncApiFunction { | 150 class CastChannelOpenFunction : public CastChannelAsyncApiFunction { |
| 109 public: | 151 public: |
| 110 CastChannelOpenFunction(); | 152 CastChannelOpenFunction(); |
| 111 | 153 |
| 112 protected: | 154 protected: |
| 113 ~CastChannelOpenFunction() override; | 155 ~CastChannelOpenFunction() override; |
| 114 | 156 |
| 115 // AsyncApiFunction: | 157 // AsyncApiFunction: |
| 116 bool PrePrepare() override; | 158 bool PrePrepare() override; |
| 117 bool Prepare() override; | 159 bool Prepare() override; |
| 118 void AsyncWorkStart() override; | 160 void AsyncWorkStart() override; |
| 119 | 161 |
| 120 private: | 162 private: |
| 121 DECLARE_EXTENSION_FUNCTION("cast.channel.open", CAST_CHANNEL_OPEN) | 163 DECLARE_EXTENSION_FUNCTION("cast.channel.open", CAST_CHANNEL_OPEN) |
| 122 | 164 |
| 123 // Defines a callback used to send events to the extension's | |
| 124 // EventRouter. | |
| 125 // Parameter #0 is a scoped pointer to the event payload. | |
| 126 using EventDispatchCallback = base::Callback<void(std::unique_ptr<Event>)>; | |
| 127 | |
| 128 // Receives incoming messages and errors and provides additional API context. | |
| 129 class CastMessageHandler : public cast_channel::CastSocket::Observer { | |
| 130 public: | |
| 131 CastMessageHandler(const EventDispatchCallback& ui_dispatch_cb, | |
| 132 scoped_refptr<cast_channel::Logger> logger); | |
| 133 ~CastMessageHandler() override; | |
| 134 | |
| 135 // CastSocket::Observer implementation. | |
| 136 void OnError(const cast_channel::CastSocket& socket, | |
| 137 cast_channel::ChannelError error_state) override; | |
| 138 void OnMessage(const cast_channel::CastSocket& socket, | |
| 139 const cast_channel::CastMessage& message) override; | |
| 140 | |
| 141 private: | |
| 142 // Callback for sending events to the extension. | |
| 143 // Should be bound to a weak pointer, to prevent any use-after-free | |
| 144 // conditions. | |
| 145 EventDispatchCallback const ui_dispatch_cb_; | |
| 146 // Logger object for reporting error details. | |
| 147 scoped_refptr<cast_channel::Logger> logger_; | |
| 148 | |
| 149 DISALLOW_COPY_AND_ASSIGN(CastMessageHandler); | |
| 150 }; | |
| 151 | |
| 152 // Validates that |connect_info| represents a valid IP end point and returns a | 165 // Validates that |connect_info| represents a valid IP end point and returns a |
| 153 // new IPEndPoint if so. Otherwise returns nullptr. | 166 // new IPEndPoint if so. Otherwise returns nullptr. |
| 154 static net::IPEndPoint* ParseConnectInfo( | 167 static net::IPEndPoint* ParseConnectInfo( |
| 155 const api::cast_channel::ConnectInfo& connect_info); | 168 const api::cast_channel::ConnectInfo& connect_info); |
| 156 | 169 |
| 157 void OnOpen(int channel_id, cast_channel::ChannelError result); | 170 void OnOpen(int channel_id, cast_channel::ChannelError result); |
| 158 | 171 |
| 159 std::unique_ptr<api::cast_channel::Open::Params> params_; | 172 std::unique_ptr<api::cast_channel::Open::Params> params_; |
| 160 CastChannelAPI* api_; | 173 CastChannelAPI* api_; |
| 161 std::unique_ptr<net::IPEndPoint> ip_endpoint_; | 174 std::unique_ptr<net::IPEndPoint> ip_endpoint_; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 | 219 |
| 207 std::unique_ptr<api::cast_channel::Close::Params> params_; | 220 std::unique_ptr<api::cast_channel::Close::Params> params_; |
| 208 CastChannelAPI* api_; | 221 CastChannelAPI* api_; |
| 209 | 222 |
| 210 DISALLOW_COPY_AND_ASSIGN(CastChannelCloseFunction); | 223 DISALLOW_COPY_AND_ASSIGN(CastChannelCloseFunction); |
| 211 }; | 224 }; |
| 212 | 225 |
| 213 } // namespace extensions | 226 } // namespace extensions |
| 214 | 227 |
| 215 #endif // EXTENSIONS_BROWSER_API_CAST_CHANNEL_CAST_CHANNEL_API_H_ | 228 #endif // EXTENSIONS_BROWSER_API_CAST_CHANNEL_CAST_CHANNEL_API_H_ |
| OLD | NEW |