| 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_RENDERER_PRESENTATION_PRESENTATION_DISPATCHER_H_ | 5 #ifndef CONTENT_RENDERER_PRESENTATION_PRESENTATION_DISPATCHER_H_ |
| 6 #define CONTENT_RENDERER_PRESENTATION_PRESENTATION_DISPATCHER_H_ | 6 #define CONTENT_RENDERER_PRESENTATION_PRESENTATION_DISPATCHER_H_ |
| 7 | 7 |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 | 10 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 class CONTENT_EXPORT PresentationDispatcher | 43 class CONTENT_EXPORT PresentationDispatcher |
| 44 : public RenderFrameObserver, | 44 : public RenderFrameObserver, |
| 45 public NON_EXPORTED_BASE(blink::WebPresentationClient), | 45 public NON_EXPORTED_BASE(blink::WebPresentationClient), |
| 46 public NON_EXPORTED_BASE(blink::mojom::PresentationServiceClient) { | 46 public NON_EXPORTED_BASE(blink::mojom::PresentationServiceClient) { |
| 47 public: | 47 public: |
| 48 explicit PresentationDispatcher(RenderFrame* render_frame); | 48 explicit PresentationDispatcher(RenderFrame* render_frame); |
| 49 ~PresentationDispatcher() override; | 49 ~PresentationDispatcher() override; |
| 50 | 50 |
| 51 private: | 51 private: |
| 52 friend class TestPresentationDispatcher; | 52 friend class TestPresentationDispatcher; |
| 53 friend class PresentationDispatcherTest; |
| 53 FRIEND_TEST_ALL_PREFIXES(PresentationDispatcherTest, TestStartSession); | 54 FRIEND_TEST_ALL_PREFIXES(PresentationDispatcherTest, TestStartSession); |
| 54 FRIEND_TEST_ALL_PREFIXES(PresentationDispatcherTest, TestStartSessionError); | 55 FRIEND_TEST_ALL_PREFIXES(PresentationDispatcherTest, TestStartSessionError); |
| 55 FRIEND_TEST_ALL_PREFIXES(PresentationDispatcherTest, TestJoinSession); | 56 FRIEND_TEST_ALL_PREFIXES(PresentationDispatcherTest, TestJoinSession); |
| 56 FRIEND_TEST_ALL_PREFIXES(PresentationDispatcherTest, TestJoinSessionError); | 57 FRIEND_TEST_ALL_PREFIXES(PresentationDispatcherTest, TestJoinSessionError); |
| 57 FRIEND_TEST_ALL_PREFIXES(PresentationDispatcherTest, TestSendString); | 58 FRIEND_TEST_ALL_PREFIXES(PresentationDispatcherTest, TestSendString); |
| 58 FRIEND_TEST_ALL_PREFIXES(PresentationDispatcherTest, TestSendArrayBuffer); | 59 FRIEND_TEST_ALL_PREFIXES(PresentationDispatcherTest, TestSendArrayBuffer); |
| 59 FRIEND_TEST_ALL_PREFIXES(PresentationDispatcherTest, TestSendBlobData); | 60 FRIEND_TEST_ALL_PREFIXES(PresentationDispatcherTest, TestSendBlobData); |
| 60 FRIEND_TEST_ALL_PREFIXES(PresentationDispatcherTest, TestCloseSession); | 61 FRIEND_TEST_ALL_PREFIXES(PresentationDispatcherTest, TestCloseSession); |
| 61 FRIEND_TEST_ALL_PREFIXES(PresentationDispatcherTest, TestTerminateSession); | 62 FRIEND_TEST_ALL_PREFIXES(PresentationDispatcherTest, TestTerminateSession); |
| 62 FRIEND_TEST_ALL_PREFIXES(PresentationDispatcherTest, | 63 FRIEND_TEST_ALL_PREFIXES(PresentationDispatcherTest, |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 104 size_t length) override; | 105 size_t length) override; |
| 105 void sendBlobData(const blink::WebURL& presentationUrl, | 106 void sendBlobData(const blink::WebURL& presentationUrl, |
| 106 const blink::WebString& presentationId, | 107 const blink::WebString& presentationId, |
| 107 const uint8_t* data, | 108 const uint8_t* data, |
| 108 size_t length) override; | 109 size_t length) override; |
| 109 void closeSession(const blink::WebURL& presentationUrl, | 110 void closeSession(const blink::WebURL& presentationUrl, |
| 110 const blink::WebString& presentationId) override; | 111 const blink::WebString& presentationId) override; |
| 111 void terminateSession(const blink::WebURL& presentationUrl, | 112 void terminateSession(const blink::WebURL& presentationUrl, |
| 112 const blink::WebString& presentationId) override; | 113 const blink::WebString& presentationId) override; |
| 113 void getAvailability( | 114 void getAvailability( |
| 114 const blink::WebVector<blink::WebURL>& availabilityUrl, | 115 const blink::WebVector<blink::WebURL>& availabilityUrls, |
| 115 std::unique_ptr<blink::WebPresentationAvailabilityCallbacks> callbacks) | 116 std::unique_ptr<blink::WebPresentationAvailabilityCallbacks> callbacks) |
| 116 override; | 117 override; |
| 117 void startListening(blink::WebPresentationAvailabilityObserver*) override; | 118 void startListening(blink::WebPresentationAvailabilityObserver*) override; |
| 118 void stopListening(blink::WebPresentationAvailabilityObserver*) override; | 119 void stopListening(blink::WebPresentationAvailabilityObserver*) override; |
| 119 void setDefaultPresentationUrls( | 120 void setDefaultPresentationUrls( |
| 120 const blink::WebVector<blink::WebURL>& presentationUrls) override; | 121 const blink::WebVector<blink::WebURL>& presentationUrls) override; |
| 121 | 122 |
| 122 // RenderFrameObserver implementation. | 123 // RenderFrameObserver implementation. |
| 123 void DidCommitProvisionalLoad( | 124 void DidCommitProvisionalLoad( |
| 124 bool is_new_navigation, | 125 bool is_new_navigation, |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 // over mojo channel. | 171 // over mojo channel. |
| 171 using MessageRequestQueue = std::queue<std::unique_ptr<SendMessageRequest>>; | 172 using MessageRequestQueue = std::queue<std::unique_ptr<SendMessageRequest>>; |
| 172 MessageRequestQueue message_request_queue_; | 173 MessageRequestQueue message_request_queue_; |
| 173 | 174 |
| 174 enum class ListeningState { | 175 enum class ListeningState { |
| 175 INACTIVE, | 176 INACTIVE, |
| 176 WAITING, | 177 WAITING, |
| 177 ACTIVE, | 178 ACTIVE, |
| 178 }; | 179 }; |
| 179 | 180 |
| 181 // Do not change order or add new enum values. |GetScreenAvailability| impl |
| 182 // depends on the order of the enum values. |
| 183 enum class ScreenAvailability { |
| 184 UNKNOWN = 0, |
| 185 UNAVAILABLE, |
| 186 UNSUPPORTED, |
| 187 AVAILABLE |
| 188 }; |
| 189 |
| 180 using AvailabilityCallbacksMap = | 190 using AvailabilityCallbacksMap = |
| 181 IDMap<std::unique_ptr<blink::WebPresentationAvailabilityCallbacks>>; | 191 IDMap<std::unique_ptr<blink::WebPresentationAvailabilityCallbacks>>; |
| 182 using AvailabilityObserversSet = | 192 using AvailabilityObserversSet = |
| 183 std::set<blink::WebPresentationAvailabilityObserver*>; | 193 std::set<blink::WebPresentationAvailabilityObserver*>; |
| 184 | 194 |
| 185 // Tracks status of presentation displays availability for |availability_url|. | 195 // Tracks listeners of presentation displays availability for |
| 186 struct AvailabilityStatus { | 196 // |availability_urls|. |
| 187 explicit AvailabilityStatus(const GURL& availability_url); | 197 struct AvailabilityListener { |
| 188 ~AvailabilityStatus(); | 198 explicit AvailabilityListener(const std::vector<GURL>& availability_urls); |
| 199 ~AvailabilityListener(); |
| 189 | 200 |
| 190 const GURL url; | 201 const std::vector<GURL> urls; |
| 191 bool last_known_availability; | |
| 192 ListeningState listening_state; | |
| 193 AvailabilityCallbacksMap availability_callbacks; | 202 AvailabilityCallbacksMap availability_callbacks; |
| 194 AvailabilityObserversSet availability_observers; | 203 AvailabilityObserversSet availability_observers; |
| 195 }; | 204 }; |
| 196 | 205 |
| 197 // Map of AvailabilityStatus for known URLs. | 206 // Tracks listening status of |availability_url|. |
| 198 std::map<GURL, std::unique_ptr<AvailabilityStatus>> | 207 struct ListeningStatus { |
| 199 availability_status_; | 208 explicit ListeningStatus(const GURL& availability_url); |
| 209 ~ListeningStatus(); |
| 200 | 210 |
| 201 // Updates the listening state of availability for |status| and notifies the | 211 const GURL url; |
| 202 // client. | 212 ScreenAvailability last_known_availability; |
| 203 void UpdateListeningState(AvailabilityStatus* status); | 213 ListeningState listening_state; |
| 214 }; |
| 215 |
| 216 // Map of ListeningStatus for known URLs. |
| 217 std::map<GURL, std::unique_ptr<ListeningStatus>> listening_status_; |
| 218 |
| 219 // Set of AvailabilityListener for known PresentationRequest. |
| 220 std::set<std::unique_ptr<AvailabilityListener>> availability_set_; |
| 221 |
| 222 // Starts listening to |url|. |
| 223 void StartListeningToURL(const GURL& url); |
| 224 |
| 225 // Stops listening to |url| if no PresentationAvailability is observing |url|. |
| 226 // StartListening() must have been called first. |
| 227 void MaybeStopListeningToURL(const GURL& url); |
| 228 |
| 229 // Returns nullptr if there is no status for |url|. |
| 230 ListeningStatus* GetListeningStatus(const GURL& url) const; |
| 231 |
| 232 // Returns nullptr if there is no availability listener for |urls|. |
| 233 AvailabilityListener* GetAvailabilityListener( |
| 234 const std::vector<GURL>& urls) const; |
| 235 |
| 236 // Removes |listener| from |availability_set_| if |listener| has no callbacks |
| 237 // and no observers. |
| 238 void TryRemoveAvailabilityListener(AvailabilityListener* listener); |
| 239 |
| 240 // Returns AVAILABLE if any url in |urls| has screen availability AVAILABLE; |
| 241 // Returns UNSUPPORTED if any url in |urls| have screen availability |
| 242 // UNSUPPORTED, and no url has screen availability AVAILABLE; |
| 243 // Returns UNAVAILABLE if at least one url in |urls| has screen availability |
| 244 // UNAVAILABLE, and no url has screen availability AVAILABLE or UNSUPPORTED; |
| 245 // Returns UNKNOWN if all urls in |urls| have screen availability |
| 246 // UNKNOWN. |
| 247 ScreenAvailability GetScreenAvailability(const std::vector<GURL>& urls) const; |
| 204 | 248 |
| 205 DISALLOW_COPY_AND_ASSIGN(PresentationDispatcher); | 249 DISALLOW_COPY_AND_ASSIGN(PresentationDispatcher); |
| 206 }; | 250 }; |
| 207 | 251 |
| 208 } // namespace content | 252 } // namespace content |
| 209 | 253 |
| 210 #endif // CONTENT_RENDERER_PRESENTATION_PRESENTATION_DISPATCHER_H_ | 254 #endif // CONTENT_RENDERER_PRESENTATION_PRESENTATION_DISPATCHER_H_ |
| OLD | NEW |