Chromium Code Reviews| Index: content/renderer/presentation/presentation_dispatcher.h |
| diff --git a/content/renderer/presentation/presentation_dispatcher.h b/content/renderer/presentation/presentation_dispatcher.h |
| index 36528cf0702f17a17842c412e37cc47e599c1cd9..6f4b3dd82d6ec8457b215cbad8d4fe765233078f 100644 |
| --- a/content/renderer/presentation/presentation_dispatcher.h |
| +++ b/content/renderer/presentation/presentation_dispatcher.h |
| @@ -50,6 +50,7 @@ class CONTENT_EXPORT PresentationDispatcher |
| private: |
| friend class TestPresentationDispatcher; |
| + friend class PresentationDispatcherTest; |
| FRIEND_TEST_ALL_PREFIXES(PresentationDispatcherTest, TestStartSession); |
| FRIEND_TEST_ALL_PREFIXES(PresentationDispatcherTest, TestStartSessionError); |
| FRIEND_TEST_ALL_PREFIXES(PresentationDispatcherTest, TestJoinSession); |
| @@ -111,7 +112,7 @@ class CONTENT_EXPORT PresentationDispatcher |
| void terminateSession(const blink::WebURL& presentationUrl, |
| const blink::WebString& presentationId) override; |
| void getAvailability( |
| - const blink::WebVector<blink::WebURL>& availabilityUrl, |
| + const blink::WebVector<blink::WebURL>& availabilityUrls, |
| std::unique_ptr<blink::WebPresentationAvailabilityCallbacks> callbacks) |
| override; |
| void startListening(blink::WebPresentationAvailabilityObserver*) override; |
| @@ -175,30 +176,66 @@ class CONTENT_EXPORT PresentationDispatcher |
| ACTIVE, |
| }; |
| + enum class ScreenAvailability { |
| + UNKNOWN, |
| + AVAILABLE, |
| + UNAVAILABLE, |
| + UNSUPPORTED |
| + }; |
| + |
| using AvailabilityCallbacksMap = |
| IDMap<std::unique_ptr<blink::WebPresentationAvailabilityCallbacks>>; |
| using AvailabilityObserversSet = |
| std::set<blink::WebPresentationAvailabilityObserver*>; |
| - // Tracks status of presentation displays availability for |availability_url|. |
| + // Tracks status of presentation displays availability for |
| + // |availability_urls|. |
| struct AvailabilityStatus { |
|
imcheng
2017/01/17 20:53:17
nit: This doesn't really contain the ScreenAvailab
mark a. foltz
2017/01/17 21:04:24
Maybe AvailabilityCallbacks?
zhaobin
2017/01/18 03:38:57
AvailabilityListeners?
|
| - explicit AvailabilityStatus(const GURL& availability_url); |
| + AvailabilityStatus(const std::vector<GURL>& availability_urls); |
|
imcheng
2017/01/17 20:53:17
Still needs explicit?
zhaobin
2017/01/18 03:38:57
Done.
|
| ~AvailabilityStatus(); |
| - const GURL url; |
| - bool last_known_availability; |
| - ListeningState listening_state; |
| + std::vector<GURL> urls; |
|
imcheng
2017/01/17 20:53:17
Can this be const?
zhaobin
2017/01/18 03:38:57
Done.
|
| AvailabilityCallbacksMap availability_callbacks; |
| AvailabilityObserversSet availability_observers; |
| }; |
| - // Map of AvailabilityStatus for known URLs. |
| - std::map<GURL, std::unique_ptr<AvailabilityStatus>> |
| - availability_status_; |
| + // Tracks listening status of |availability_url|. |
| + struct ListeningStatus { |
| + explicit ListeningStatus(const GURL& availability_url); |
| + ~ListeningStatus(); |
| + |
| + const GURL url; |
| + ScreenAvailability last_known_availability; |
| + ListeningState listening_state; |
| + }; |
| + |
| + // Map of ListeningStatus for known URLs. |
| + std::map<GURL, std::unique_ptr<ListeningStatus>> listening_status_; |
| + |
| + // Set of AvailabilityStatus for known PresentationRequest. |
| + std::set<std::unique_ptr<AvailabilityStatus>> availability_set_; |
| + |
| + // Starts listening to |url|. |
| + void StartListeningToURL(const GURL& url); |
| + |
| + // Stops listening to |url| if no PresentationAvailability is observing |url|. |
| + // StartListening() must have been called first. |
| + void StopListeningToURL(const GURL& url); |
| + |
| + // Returns nullptr if there is no status for |url|. |
| + ListeningStatus* GetListeningStatus(const GURL& url); |
|
imcheng
2017/01/17 20:53:17
Can this method and the 2 below be const?
zhaobin
2017/01/18 03:38:57
Done.
|
| + |
| + // Returns nullptr if there is no availability status for |urls|. |
| + AvailabilityStatus* GetAvailabilityStatus(const std::vector<GURL>& urls); |
| - // Updates the listening state of availability for |status| and notifies the |
| - // client. |
| - void UpdateListeningState(AvailabilityStatus* status); |
| + // Returns AVAILABLE if any url in |urls| has screen availability AVAILABLE; |
| + // Returns UNSUPPORTED if any url in |urls| have screen availability |
| + // UNSUPPORTED, and no url has screen availability AVAILABLE; |
| + // Returns UNAVAILABLE if at least one url in |urls| has screen availability |
| + // UNAVAILABLE, and no url has screen availability AVAILABLE or UNSUPPORTED; |
| + // Returns UNKNOWN if all urls in |urls| have screen availability |
| + // UNKNOWN. |
| + ScreenAvailability GetScreenAvailability(const std::vector<GURL>& urls); |
| DISALLOW_COPY_AND_ASSIGN(PresentationDispatcher); |
| }; |