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

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 Mark Created 4 years 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 0693f1363f1731366f0e61ec02b49fc63746b415..8c66c1ccc073055a0ec5a2f2e80652ee79424979 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;
mark a. foltz 2017/01/03 21:47:13 Takumi is also landing a unit test, so please coor
zhaobin 2017/01/06 01:55:21 Sure.
struct SendMessageRequest {
SendMessageRequest(blink::mojom::PresentationSessionInfoPtr session_info,
blink::mojom::ConnectionMessagePtr message);
@@ -96,7 +97,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;
@@ -140,6 +141,8 @@ class CONTENT_EXPORT PresentationDispatcher
void HandleSendMessageRequests(bool success);
void ConnectToPresentationServiceIfNeeded();
+ void SetPresentationServiceForTest(
+ blink::mojom::PresentationServicePtr presentation_service);
void UpdateListeningState();
@@ -160,20 +163,39 @@ class CONTENT_EXPORT PresentationDispatcher
ACTIVE,
};
- using AvailabilityCallbacksMap =
- IDMap<std::unique_ptr<blink::WebPresentationAvailabilityCallbacks>>;
+ enum class ScreenAvailability {
mlamouri (slow - plz ping) 2017/01/04 16:15:00 It's pretty much a nit but why not using Availabil
mark a. foltz 2017/01/05 22:40:49 There's already an AvailabilityStatus struct decla
zhaobin 2017/01/06 01:55:21 ScreenAvailability represents if there is any scre
+ UNKNOWN,
+ AVAILABLE,
+ UNAVAILABLE,
+ UNSUPPORTED
+ };
+
+ struct AvailabilityCallback {
+ AvailabilityCallback(
+ const blink::WebVector<blink::WebURL>& availability_urls,
mark a. foltz 2017/01/03 21:47:13 Can this use std::vector<GURL> to be consistent wi
zhaobin 2017/01/06 01:55:21 Done.
+ std::unique_ptr<blink::WebPresentationAvailabilityCallbacks>
+ availability_callback);
+ ~AvailabilityCallback();
+
+ blink::WebVector<blink::WebURL> urls;
+ std::unique_ptr<blink::WebPresentationAvailabilityCallbacks> callback;
+ };
+
+ using AvailabilityCallbacksVector =
+ std::vector<std::unique_ptr<AvailabilityCallback>>;
+ using AvailabilityCallbacksSet = std::set<AvailabilityCallback*>;
using AvailabilityObserversSet =
std::set<blink::WebPresentationAvailabilityObserver*>;
// Tracks status of presentation displays availability for |availability_url|.
struct AvailabilityStatus {
- explicit AvailabilityStatus(const GURL& availability_url);
+ explicit AvailabilityStatus(const GURL& availability_urls);
mark a. foltz 2017/01/03 21:47:13 availability_url
zhaobin 2017/01/06 01:55:21 Done.
~AvailabilityStatus();
const GURL url;
- bool last_known_availability;
+ ScreenAvailability last_known_availability;
ListeningState listening_state;
- AvailabilityCallbacksMap availability_callbacks;
+ AvailabilityCallbacksSet availability_callbacks;
mark a. foltz 2017/01/03 21:47:13 It's confusing in the code to have both availabili
zhaobin 2017/01/06 01:55:21 Code removed.
AvailabilityObserversSet availability_observers;
};
@@ -181,10 +203,27 @@ class CONTENT_EXPORT PresentationDispatcher
std::map<GURL, std::unique_ptr<AvailabilityStatus>>
availability_status_;
+ // Map of AvailabilityCallbacks.
+ AvailabilityCallbacksVector availability_callbacks_;
mark a. foltz 2017/01/03 21:47:13 Is this for ownership purposes (i.e. to make sure
zhaobin 2017/01/06 01:55:21 Code removed.
+
// Updates the listening state of availability for |status| and notifies the
// client.
void UpdateListeningState(AvailabilityStatus* status);
+ // Called when |status|'s |last_known_availability|, |availability_callbacks|,
+ // or |availability_observers| changes.
+ void UpdateAvailabilityObserversAndCallbacks(AvailabilityStatus* status);
+
+ // Returns UNKNOWN if any url in |urls| has screen availability UNKNOWN;
+ // Returns UNSUPPORTED if any url in |urls| have screen availability
+ // UNSUPPORTED, and no url has screen availability UNKNOWN;
+ // Returns AVAILABLE if at least one url in |urls| has screen availability
+ // AVAILABLE, and no url has screen availability UNKNOWN or UNSUPPORTED;
+ // Returns UNAVAILABLE if all urls in |urls| have screen availability
+ // UNAVAILABLE.
+ PresentationDispatcher::ScreenAvailability GetScreenAvailability(
mlamouri (slow - plz ping) 2017/01/04 16:15:00 GetAvailabilityStatus()?
zhaobin 2017/01/06 01:55:21 Cannot use GetAvailabilityStatus since Availabilit
+ const blink::WebVector<blink::WebURL>& urls);
mark a. foltz 2017/01/03 21:47:13 std::vector<GURL>
zhaobin 2017/01/06 01:55:21 Done.
+
DISALLOW_COPY_AND_ASSIGN(PresentationDispatcher);
};

Powered by Google App Engine
This is Rietveld 408576698