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

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

Issue 2598063002: [Presentation API] Handle multiple Presentation URLs in PresentationRequest::getAvailability() (Closed)
Patch Set: seperate AvailabilityStatus from ListeningStatus and simplify book keeping code 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
Index: content/renderer/presentation/presentation_dispatcher.h
diff --git a/content/renderer/presentation/presentation_dispatcher.h b/content/renderer/presentation/presentation_dispatcher.h
index 5e98d4609d51b7264897c3848c6e3fb71cc5a8e8..c99f20e54fe05ed040a45c62ef6b6d5181169ffa 100644
--- a/content/renderer/presentation/presentation_dispatcher.h
+++ b/content/renderer/presentation/presentation_dispatcher.h
@@ -47,6 +47,7 @@ class CONTENT_EXPORT PresentationDispatcher
~PresentationDispatcher() override;
private:
+ friend class PresentationDispatcherTest;
struct SendMessageRequest {
SendMessageRequest(blink::mojom::PresentationSessionInfoPtr session_info,
blink::mojom::ConnectionMessagePtr message);
@@ -94,7 +95,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;
@@ -138,6 +139,8 @@ class CONTENT_EXPORT PresentationDispatcher
void HandleSendMessageRequests(bool success);
void ConnectToPresentationServiceIfNeeded();
+ void SetPresentationServiceForTest(
+ blink::mojom::PresentationServicePtr presentation_service);
void UpdateListeningState();
@@ -158,30 +161,62 @@ 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 {
- explicit AvailabilityStatus(const GURL& availability_url);
+ AvailabilityStatus(const std::vector<GURL>& availability_urls);
~AvailabilityStatus();
- const GURL url;
- bool last_known_availability;
- ListeningState listening_state;
+ 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_;
+
+ // Map of AvailabilityStatus for known PresentationRequest.
mark a. foltz 2017/01/11 00:06:03 s/Map/Set/
zhaobin 2017/01/12 03:02:12 Done.
+ std::set<std::unique_ptr<AvailabilityStatus>> availability_set_;
+
+ // Starts listening to |url|.
+ void StartListening(const GURL& url);
+
+ // Stops listening to |url| if no PresentationAvailability is observing |url|.
mark a. foltz 2017/01/11 00:06:02 Document that StartListening() must have been call
zhaobin 2017/01/12 03:02:12 Done.
+ void StopListening(const GURL& url);
+
+ ListeningStatus* GetListeningStatus(const GURL& url);
mark a. foltz 2017/01/11 00:06:02 Document that this method returns nullptr if there
zhaobin 2017/01/12 03:02:12 Done.
- // 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.
+ PresentationDispatcher::ScreenAvailability GetScreenAvailability(
mark a. foltz 2017/01/11 00:06:03 I don't think you need PresentationDispatcher:: he
zhaobin 2017/01/12 03:02:12 Done.
+ const std::vector<GURL>& urls);
DISALLOW_COPY_AND_ASSIGN(PresentationDispatcher);
};

Powered by Google App Engine
This is Rietveld 408576698