Chromium Code Reviews| 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 scoped pointer to the event payload. | |
|
imcheng
2017/07/11 01:31:15
Update the comments here, but also see mfoltz@'s o
zhaobin
2017/07/12 21:58:08
Done.
| |
| 76 using EventDispatchCallback = | |
| 77 base::Callback<void(const std::string&, std::unique_ptr<Event>)>; | |
| 78 | |
| 79 // Receives incoming messages and errors and provides additional API context. | |
| 80 class CastMessageHandler : public cast_channel::CastSocket::Observer { | |
| 81 public: | |
| 82 CastMessageHandler(const EventDispatchCallback& ui_dispatch_cb, | |
| 83 scoped_refptr<cast_channel::Logger> logger); | |
| 84 ~CastMessageHandler() override; | |
| 85 | |
| 86 // CastSocket::Observer implementation. | |
| 87 void OnError(const cast_channel::CastSocket& socket, | |
| 88 cast_channel::ChannelError error_state) override; | |
| 89 void OnMessage(const cast_channel::CastSocket& socket, | |
| 90 const cast_channel::CastMessage& message) override; | |
| 91 | |
| 92 void RegisterExtensionId(const std::string& extension_id); | |
| 93 | |
| 94 private: | |
| 95 // Callback for sending events to the extension. | |
| 96 // Should be bound to a weak pointer, to prevent any use-after-free | |
| 97 // conditions. | |
| 98 EventDispatchCallback const ui_dispatch_cb_; | |
| 99 // Logger object for reporting error details. | |
| 100 scoped_refptr<cast_channel::Logger> logger_; | |
| 101 // Extension IDs call open channel function with this observer. | |
| 102 std::set<std::string> extension_ids_; | |
| 103 | |
| 104 THREAD_CHECKER(thread_checker_); | |
| 105 | |
| 106 DISALLOW_COPY_AND_ASSIGN(CastMessageHandler); | |
| 107 }; | |
| 108 | |
| 68 ~CastChannelAPI() override; | 109 ~CastChannelAPI() override; |
| 69 | 110 |
| 70 // BrowserContextKeyedAPI implementation. | 111 // BrowserContextKeyedAPI implementation. |
| 71 static const char* service_name() { return "CastChannelAPI"; } | 112 static const char* service_name() { return "CastChannelAPI"; } |
| 72 | 113 |
| 73 content::BrowserContext* const browser_context_; | 114 content::BrowserContext* const browser_context_; |
| 74 std::unique_ptr<cast_channel::CastSocket> socket_for_test_; | 115 std::unique_ptr<cast_channel::CastSocket> socket_for_test_; |
| 116 // Created and destroyed on the IO thread. | |
| 117 std::unique_ptr<CastMessageHandler, content::BrowserThread::DeleteOnIOThread> | |
| 118 observer_; | |
| 75 | 119 |
| 76 DISALLOW_COPY_AND_ASSIGN(CastChannelAPI); | 120 DISALLOW_COPY_AND_ASSIGN(CastChannelAPI); |
| 77 }; | 121 }; |
| 78 | 122 |
| 79 class CastChannelAsyncApiFunction : public AsyncApiFunction { | 123 class CastChannelAsyncApiFunction : public AsyncApiFunction { |
| 80 public: | 124 public: |
| 81 CastChannelAsyncApiFunction(); | 125 CastChannelAsyncApiFunction(); |
| 82 | 126 |
| 83 protected: | 127 protected: |
| 84 ~CastChannelAsyncApiFunction() override; | 128 ~CastChannelAsyncApiFunction() override; |
| 85 | 129 |
| 86 // AsyncApiFunction: | 130 // AsyncApiFunction: |
| 87 bool PrePrepare() override; | 131 bool PrePrepare() override; |
| 88 bool Respond() override; | 132 bool Respond() override; |
| 89 | 133 |
| 90 // Sets the function result to a ChannelInfo obtained from the state of | 134 // Sets the function result to a ChannelInfo obtained from the state of |
| 91 // |socket|. | 135 // |socket|. |
| 92 void SetResultFromSocket(const cast_channel::CastSocket& socket); | 136 void SetResultFromSocket(const cast_channel::CastSocket& socket); |
| 93 | 137 |
| 94 // Sets the function result to a ChannelInfo populated with |channel_id| and | 138 // Sets the function result to a ChannelInfo populated with |channel_id| and |
| 95 // |error|. | 139 // |error|. |
| 96 void SetResultFromError(int channel_id, | 140 void SetResultFromError(int channel_id, |
| 97 api::cast_channel::ChannelError error); | 141 api::cast_channel::ChannelError error); |
| 98 | 142 |
| 99 // Manages creating and removing Cast sockets. | 143 // Raw pointer of leaky singleton CastSocketService, which manages creating |
| 100 scoped_refptr<cast_channel::CastSocketService> cast_socket_service_; | 144 // and removing Cast sockets. |
| 145 cast_channel::CastSocketService* cast_socket_service_; | |
| 101 | 146 |
| 102 private: | 147 private: |
| 103 // Sets the function result from |channel_info|. | 148 // Sets the function result from |channel_info|. |
| 104 void SetResultFromChannelInfo( | 149 void SetResultFromChannelInfo( |
| 105 const api::cast_channel::ChannelInfo& channel_info); | 150 const api::cast_channel::ChannelInfo& channel_info); |
| 106 }; | 151 }; |
| 107 | 152 |
| 108 class CastChannelOpenFunction : public CastChannelAsyncApiFunction { | 153 class CastChannelOpenFunction : public CastChannelAsyncApiFunction { |
| 109 public: | 154 public: |
| 110 CastChannelOpenFunction(); | 155 CastChannelOpenFunction(); |
| 111 | 156 |
| 112 protected: | 157 protected: |
| 113 ~CastChannelOpenFunction() override; | 158 ~CastChannelOpenFunction() override; |
| 114 | 159 |
| 115 // AsyncApiFunction: | 160 // AsyncApiFunction: |
| 116 bool PrePrepare() override; | 161 bool PrePrepare() override; |
| 117 bool Prepare() override; | 162 bool Prepare() override; |
| 118 void AsyncWorkStart() override; | 163 void AsyncWorkStart() override; |
| 119 | 164 |
| 120 private: | 165 private: |
| 121 DECLARE_EXTENSION_FUNCTION("cast.channel.open", CAST_CHANNEL_OPEN) | 166 DECLARE_EXTENSION_FUNCTION("cast.channel.open", CAST_CHANNEL_OPEN) |
| 122 | 167 |
| 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 | 168 // Validates that |connect_info| represents a valid IP end point and returns a |
| 153 // new IPEndPoint if so. Otherwise returns nullptr. | 169 // new IPEndPoint if so. Otherwise returns nullptr. |
| 154 static net::IPEndPoint* ParseConnectInfo( | 170 static net::IPEndPoint* ParseConnectInfo( |
| 155 const api::cast_channel::ConnectInfo& connect_info); | 171 const api::cast_channel::ConnectInfo& connect_info); |
| 156 | 172 |
| 157 void OnOpen(int channel_id, cast_channel::ChannelError result); | 173 void OnOpen(int channel_id, cast_channel::ChannelError result); |
| 158 | 174 |
| 159 std::unique_ptr<api::cast_channel::Open::Params> params_; | 175 std::unique_ptr<api::cast_channel::Open::Params> params_; |
| 160 CastChannelAPI* api_; | 176 CastChannelAPI* api_; |
| 161 std::unique_ptr<net::IPEndPoint> ip_endpoint_; | 177 std::unique_ptr<net::IPEndPoint> ip_endpoint_; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 206 | 222 |
| 207 std::unique_ptr<api::cast_channel::Close::Params> params_; | 223 std::unique_ptr<api::cast_channel::Close::Params> params_; |
| 208 CastChannelAPI* api_; | 224 CastChannelAPI* api_; |
| 209 | 225 |
| 210 DISALLOW_COPY_AND_ASSIGN(CastChannelCloseFunction); | 226 DISALLOW_COPY_AND_ASSIGN(CastChannelCloseFunction); |
| 211 }; | 227 }; |
| 212 | 228 |
| 213 } // namespace extensions | 229 } // namespace extensions |
| 214 | 230 |
| 215 #endif // EXTENSIONS_BROWSER_API_CAST_CHANNEL_CAST_CHANNEL_API_H_ | 231 #endif // EXTENSIONS_BROWSER_API_CAST_CHANNEL_CAST_CHANNEL_API_H_ |
| OLD | NEW |