| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 CONTENT_BROWSER_PRESENTATION_PRESENTATION_SERVICE_IMPL_H_ | 5 #ifndef CONTENT_BROWSER_PRESENTATION_PRESENTATION_SERVICE_IMPL_H_ |
| 6 #define CONTENT_BROWSER_PRESENTATION_PRESENTATION_SERVICE_IMPL_H_ | 6 #define CONTENT_BROWSER_PRESENTATION_PRESENTATION_SERVICE_IMPL_H_ |
| 7 | 7 |
| 8 #include <deque> | 8 #include <deque> |
| 9 #include <map> | 9 #include <map> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 ReceiveSessionMessagesAfterReset); | 87 ReceiveSessionMessagesAfterReset); |
| 88 FRIEND_TEST_ALL_PREFIXES(PresentationServiceImplTest, | 88 FRIEND_TEST_ALL_PREFIXES(PresentationServiceImplTest, |
| 89 MaxPendingStartSessionRequests); | 89 MaxPendingStartSessionRequests); |
| 90 FRIEND_TEST_ALL_PREFIXES(PresentationServiceImplTest, | 90 FRIEND_TEST_ALL_PREFIXES(PresentationServiceImplTest, |
| 91 MaxPendingJoinSessionRequests); | 91 MaxPendingJoinSessionRequests); |
| 92 FRIEND_TEST_ALL_PREFIXES(PresentationServiceImplTest, | 92 FRIEND_TEST_ALL_PREFIXES(PresentationServiceImplTest, |
| 93 ListenForSessionStateChange); | 93 ListenForSessionStateChange); |
| 94 // Maximum number of pending JoinSession requests at any given time. | 94 // Maximum number of pending JoinSession requests at any given time. |
| 95 static const int kMaxNumQueuedSessionRequests = 10; | 95 static const int kMaxNumQueuedSessionRequests = 10; |
| 96 | 96 |
| 97 using DefaultSessionMojoCallback = | 97 using PresentationSessionMojoCallback = |
| 98 mojo::Callback<void(presentation::PresentationSessionInfoPtr)>; | 98 mojo::Callback<void(presentation::PresentationSessionInfoPtr)>; |
| 99 using SessionStateCallback = | 99 using SessionStateCallback = |
| 100 mojo::Callback<void(presentation::PresentationSessionInfoPtr, | 100 mojo::Callback<void(presentation::PresentationSessionInfoPtr, |
| 101 presentation::PresentationSessionState)>; | 101 presentation::PresentationSessionState)>; |
| 102 using SessionMessagesCallback = | 102 using SessionMessagesCallback = |
| 103 mojo::Callback<void(mojo::Array<presentation::SessionMessagePtr>)>; | 103 mojo::Callback<void(mojo::Array<presentation::SessionMessagePtr>)>; |
| 104 using SendMessageMojoCallback = mojo::Callback<void(bool)>; | 104 using SendMessageMojoCallback = mojo::Callback<void(bool)>; |
| 105 | 105 |
| 106 // Listener implementation owned by PresentationServiceImpl. An instance of | 106 // Listener implementation owned by PresentationServiceImpl. An instance of |
| 107 // this is created when PresentationRequest.getAvailability() is resolved. | 107 // this is created when PresentationRequest.getAvailability() is resolved. |
| (...skipping 10 matching lines...) Expand all Loading... |
| 118 // PresentationScreenAvailabilityListener implementation. | 118 // PresentationScreenAvailabilityListener implementation. |
| 119 std::string GetAvailabilityUrl() const override; | 119 std::string GetAvailabilityUrl() const override; |
| 120 void OnScreenAvailabilityChanged(bool available) override; | 120 void OnScreenAvailabilityChanged(bool available) override; |
| 121 void OnScreenAvailabilityNotSupported() override; | 121 void OnScreenAvailabilityNotSupported() override; |
| 122 | 122 |
| 123 private: | 123 private: |
| 124 const std::string availability_url_; | 124 const std::string availability_url_; |
| 125 PresentationServiceImpl* const service_; | 125 PresentationServiceImpl* const service_; |
| 126 }; | 126 }; |
| 127 | 127 |
| 128 class CONTENT_EXPORT DefaultSessionStartContext { | |
| 129 public: | |
| 130 DefaultSessionStartContext(); | |
| 131 ~DefaultSessionStartContext(); | |
| 132 | |
| 133 // Adds a callback. May invoke the callback immediately if |session| using | |
| 134 // default presentation URL was already started. | |
| 135 void AddCallback(const DefaultSessionMojoCallback& callback); | |
| 136 | |
| 137 // Sets the session info. Maybe invoke callbacks queued with AddCallback(). | |
| 138 void set_session(const PresentationSessionInfo& session); | |
| 139 | |
| 140 private: | |
| 141 // Flush all queued callbacks by invoking them with null | |
| 142 // PresentationSessionInfoPtr. | |
| 143 void Reset(); | |
| 144 | |
| 145 ScopedVector<DefaultSessionMojoCallback> callbacks_; | |
| 146 scoped_ptr<PresentationSessionInfo> session_; | |
| 147 }; | |
| 148 | |
| 149 // Ensures the provided NewSessionMojoCallback is invoked exactly once | 128 // Ensures the provided NewSessionMojoCallback is invoked exactly once |
| 150 // before it goes out of scope. | 129 // before it goes out of scope. |
| 151 class NewSessionMojoCallbackWrapper { | 130 class NewSessionMojoCallbackWrapper { |
| 152 public: | 131 public: |
| 153 explicit NewSessionMojoCallbackWrapper( | 132 explicit NewSessionMojoCallbackWrapper( |
| 154 const NewSessionMojoCallback& callback); | 133 const NewSessionMojoCallback& callback); |
| 155 ~NewSessionMojoCallbackWrapper(); | 134 ~NewSessionMojoCallbackWrapper(); |
| 156 | 135 |
| 157 void Run(presentation::PresentationSessionInfoPtr session, | 136 void Run(presentation::PresentationSessionInfoPtr session, |
| 158 presentation::PresentationErrorPtr error); | 137 presentation::PresentationErrorPtr error); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 170 PresentationServiceImpl( | 149 PresentationServiceImpl( |
| 171 RenderFrameHost* render_frame_host, | 150 RenderFrameHost* render_frame_host, |
| 172 WebContents* web_contents, | 151 WebContents* web_contents, |
| 173 PresentationServiceDelegate* delegate); | 152 PresentationServiceDelegate* delegate); |
| 174 | 153 |
| 175 // PresentationService implementation. | 154 // PresentationService implementation. |
| 176 void SetDefaultPresentationURL(const mojo::String& url) override; | 155 void SetDefaultPresentationURL(const mojo::String& url) override; |
| 177 void SetClient(presentation::PresentationServiceClientPtr client) override; | 156 void SetClient(presentation::PresentationServiceClientPtr client) override; |
| 178 void ListenForScreenAvailability(const mojo::String& url) override; | 157 void ListenForScreenAvailability(const mojo::String& url) override; |
| 179 void StopListeningForScreenAvailability(const mojo::String& url) override; | 158 void StopListeningForScreenAvailability(const mojo::String& url) override; |
| 180 void ListenForDefaultSessionStart( | |
| 181 const DefaultSessionMojoCallback& callback) override; | |
| 182 void StartSession( | 159 void StartSession( |
| 183 const mojo::String& presentation_url, | 160 const mojo::String& presentation_url, |
| 184 const NewSessionMojoCallback& callback) override; | 161 const NewSessionMojoCallback& callback) override; |
| 185 void JoinSession( | 162 void JoinSession( |
| 186 const mojo::String& presentation_url, | 163 const mojo::String& presentation_url, |
| 187 const mojo::String& presentation_id, | 164 const mojo::String& presentation_id, |
| 188 const NewSessionMojoCallback& callback) override; | 165 const NewSessionMojoCallback& callback) override; |
| 189 void SendSessionMessage(presentation::PresentationSessionInfoPtr session_info, | 166 void SendSessionMessage(presentation::PresentationSessionInfoPtr session_info, |
| 190 presentation::SessionMessagePtr session_message, | 167 presentation::SessionMessagePtr session_message, |
| 191 const SendMessageMojoCallback& callback) override; | 168 const SendMessageMojoCallback& callback) override; |
| 192 void CloseSession( | 169 void CloseSession( |
| 193 const mojo::String& presentation_url, | 170 const mojo::String& presentation_url, |
| 194 const mojo::String& presentation_id) override; | 171 const mojo::String& presentation_id) override; |
| 195 void ListenForSessionStateChange() override; | 172 void ListenForSessionStateChange() override; |
| 196 void ListenForSessionMessages( | 173 void ListenForSessionMessages( |
| 197 presentation::PresentationSessionInfoPtr session) override; | 174 presentation::PresentationSessionInfoPtr session) override; |
| 198 | 175 |
| 199 // Creates a binding between this object and |request|. | 176 // Creates a binding between this object and |request|. |
| 200 void Bind(mojo::InterfaceRequest<presentation::PresentationService> request); | 177 void Bind(mojo::InterfaceRequest<presentation::PresentationService> request); |
| 201 | 178 |
| 202 // WebContentsObserver override. | 179 // WebContentsObserver override. |
| 203 void DidNavigateAnyFrame( | 180 void DidNavigateAnyFrame( |
| 204 content::RenderFrameHost* render_frame_host, | 181 content::RenderFrameHost* render_frame_host, |
| 205 const content::LoadCommittedDetails& details, | 182 const content::LoadCommittedDetails& details, |
| 206 const content::FrameNavigateParams& params) override; | 183 const content::FrameNavigateParams& params) override; |
| 207 void RenderFrameDeleted(content::RenderFrameHost* render_frame_host) override; | 184 void RenderFrameDeleted(content::RenderFrameHost* render_frame_host) override; |
| 208 | 185 |
| 209 // PresentationServiceDelegate::Observer | 186 // PresentationServiceDelegate::Observer |
| 210 void OnDelegateDestroyed() override; | 187 void OnDelegateDestroyed() override; |
| 211 void OnDefaultPresentationStarted(const PresentationSessionInfo& session) | 188 |
| 212 override; | 189 // Passed to embedder's implementation of PresentationServiceDelegate for |
| 190 // later invocation when default presentation has started. |
| 191 void OnDefaultPresentationStarted( |
| 192 const PresentationSessionInfo& session_info); |
| 213 | 193 |
| 214 // Finds the callback from |pending_join_session_cbs_| using | 194 // Finds the callback from |pending_join_session_cbs_| using |
| 215 // |request_session_id|. | 195 // |request_session_id|. |
| 216 // If it exists, invoke it with |session| and |error|, then erase it from | 196 // If it exists, invoke it with |session| and |error|, then erase it from |
| 217 // |pending_join_session_cbs_|. | 197 // |pending_join_session_cbs_|. |
| 218 void RunAndEraseJoinSessionMojoCallback( | 198 void RunAndEraseJoinSessionMojoCallback( |
| 219 int request_session_id, | 199 int request_session_id, |
| 220 presentation::PresentationSessionInfoPtr session, | 200 presentation::PresentationSessionInfoPtr session, |
| 221 presentation::PresentationErrorPtr error); | 201 presentation::PresentationErrorPtr error); |
| 222 | 202 |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 277 | 257 |
| 278 // For StartSession requests. | 258 // For StartSession requests. |
| 279 // Set to a positive value when a StartSession request is being processed. | 259 // Set to a positive value when a StartSession request is being processed. |
| 280 int start_session_request_id_; | 260 int start_session_request_id_; |
| 281 scoped_ptr<NewSessionMojoCallbackWrapper> pending_start_session_cb_; | 261 scoped_ptr<NewSessionMojoCallbackWrapper> pending_start_session_cb_; |
| 282 | 262 |
| 283 // For JoinSession requests. | 263 // For JoinSession requests. |
| 284 base::hash_map<int, linked_ptr<NewSessionMojoCallbackWrapper>> | 264 base::hash_map<int, linked_ptr<NewSessionMojoCallbackWrapper>> |
| 285 pending_join_session_cbs_; | 265 pending_join_session_cbs_; |
| 286 | 266 |
| 287 scoped_ptr<DefaultSessionStartContext> default_session_start_context_; | |
| 288 | |
| 289 // RAII binding of |this| to an Presentation interface request. | 267 // RAII binding of |this| to an Presentation interface request. |
| 290 // The binding is removed when binding_ is cleared or goes out of scope. | 268 // The binding is removed when binding_ is cleared or goes out of scope. |
| 291 scoped_ptr<mojo::Binding<presentation::PresentationService>> binding_; | 269 scoped_ptr<mojo::Binding<presentation::PresentationService>> binding_; |
| 292 | 270 |
| 293 // There can be only one send message request at a time. | 271 // There can be only one send message request at a time. |
| 294 scoped_ptr<SendMessageMojoCallback> send_message_callback_; | 272 scoped_ptr<SendMessageMojoCallback> send_message_callback_; |
| 295 | 273 |
| 296 scoped_ptr<SessionMessagesCallback> on_session_messages_callback_; | 274 scoped_ptr<SessionMessagesCallback> on_session_messages_callback_; |
| 297 | 275 |
| 298 // ID of the RenderFrameHost this object is associated with. | 276 // ID of the RenderFrameHost this object is associated with. |
| 299 int render_process_id_; | 277 int render_process_id_; |
| 300 int render_frame_id_; | 278 int render_frame_id_; |
| 301 | 279 |
| 302 // NOTE: Weak pointers must be invalidated before all other member variables. | 280 // NOTE: Weak pointers must be invalidated before all other member variables. |
| 303 base::WeakPtrFactory<PresentationServiceImpl> weak_factory_; | 281 base::WeakPtrFactory<PresentationServiceImpl> weak_factory_; |
| 304 | 282 |
| 305 DISALLOW_COPY_AND_ASSIGN(PresentationServiceImpl); | 283 DISALLOW_COPY_AND_ASSIGN(PresentationServiceImpl); |
| 306 }; | 284 }; |
| 307 | 285 |
| 308 } // namespace content | 286 } // namespace content |
| 309 | 287 |
| 310 #endif // CONTENT_BROWSER_PRESENTATION_PRESENTATION_SERVICE_IMPL_H_ | 288 #endif // CONTENT_BROWSER_PRESENTATION_PRESENTATION_SERVICE_IMPL_H_ |
| OLD | NEW |