Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2219)

Unified Diff: content/renderer/presentation/presentation_dispatcher.h

Issue 2598063002: [Presentation API] Handle multiple Presentation URLs in PresentationRequest::getAvailability() (Closed)
Patch Set: resolve code review comments from Derek Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | content/renderer/presentation/presentation_dispatcher.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/presentation/presentation_dispatcher.h
diff --git a/content/renderer/presentation/presentation_dispatcher.h b/content/renderer/presentation/presentation_dispatcher.h
index 388adb5f3427e56124399e5b1b2a3f009943953d..a1c987a33f29cd7634cb611e019c3d1463df122e 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;
@@ -177,30 +178,73 @@ class CONTENT_EXPORT PresentationDispatcher
ACTIVE,
};
+ // Do not change order or add new enum values. |GetScreenAvailability| impl
+ // depends on the order of the enum values.
+ enum class ScreenAvailability {
+ UNKNOWN = 0,
+ UNAVAILABLE,
+ UNSUPPORTED,
+ AVAILABLE
+ };
+
using AvailabilityCallbacksMap =
IDMap<std::unique_ptr<blink::WebPresentationAvailabilityCallbacks>>;
using AvailabilityObserversSet =
std::set<blink::WebPresentationAvailabilityObserver*>;
- // Tracks status of presentation displays availability for |availability_url|.
- struct AvailabilityStatus {
- explicit AvailabilityStatus(const GURL& availability_url);
- ~AvailabilityStatus();
+ // Tracks listeners of presentation displays availability for
+ // |availability_urls|.
+ struct AvailabilityListener {
+ explicit AvailabilityListener(const std::vector<GURL>& availability_urls);
+ ~AvailabilityListener();
- const GURL url;
- bool last_known_availability;
- ListeningState listening_state;
+ const std::vector<GURL> urls;
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 AvailabilityListener for known PresentationRequest.
+ std::set<std::unique_ptr<AvailabilityListener>> 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 MaybeStopListeningToURL(const GURL& url);
+
+ // Returns nullptr if there is no status for |url|.
+ ListeningStatus* GetListeningStatus(const GURL& url) const;
+
+ // Returns nullptr if there is no availability listener for |urls|.
+ AvailabilityListener* GetAvailabilityListener(
+ const std::vector<GURL>& urls) const;
+
+ // Removes |listener| from |availability_set_| if |listener| has no callbacks
+ // and no observers.
+ void TryRemoveAvailabilityListener(AvailabilityListener* listener);
- // 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) const;
DISALLOW_COPY_AND_ASSIGN(PresentationDispatcher);
};
« no previous file with comments | « no previous file | content/renderer/presentation/presentation_dispatcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698