Index: chrome/browser/media/router/presentation_service_delegate_impl.h |
diff --git a/chrome/browser/media/router/presentation_service_delegate_impl.h b/chrome/browser/media/router/presentation_service_delegate_impl.h |
index 0e6b63322a86d0ff53924c21e1925c3194895df7..03ad8c7a74ae47865cb040ff0acb6d97b85e1b14 100644 |
--- a/chrome/browser/media/router/presentation_service_delegate_impl.h |
+++ b/chrome/browser/media/router/presentation_service_delegate_impl.h |
@@ -16,8 +16,6 @@ |
#include "base/observer_list.h" |
#include "chrome/browser/media/router/media_router.h" |
#include "chrome/browser/media/router/media_source.h" |
-#include "chrome/browser/media/router/presentation_request.h" |
-#include "chrome/browser/media/router/render_frame_host_id.h" |
#include "content/public/browser/presentation_service_delegate.h" |
#include "content/public/browser/web_contents_observer.h" |
#include "content/public/browser/web_contents_user_data.h" |
@@ -36,6 +34,8 @@ |
class MediaSinksObserver; |
class PresentationFrameManager; |
class PresentationSessionStateObserver; |
+ |
+using RenderFrameHostId = std::pair<int, int>; |
// Implementation of PresentationServiceDelegate that interfaces an |
// instance of WebContents with the Chrome Media Router. It uses the Media |
@@ -49,23 +49,6 @@ |
: public content::WebContentsUserData<PresentationServiceDelegateImpl>, |
public content::PresentationServiceDelegate { |
public: |
- // Observer interface for listening to default presentation request |
- // changes for the WebContents. |
- class DefaultPresentationRequestObserver { |
- public: |
- virtual ~DefaultPresentationRequestObserver() = default; |
- |
- // Called when default presentation request for the corresponding |
- // WebContents is set or changed. |
- // |default_presentation_info|: New default presentation request. |
- virtual void OnDefaultPresentationChanged( |
- const PresentationRequest& default_presentation_request) = 0; |
- |
- // Called when default presentation request for the corresponding |
- // WebContents has been removed. |
- virtual void OnDefaultPresentationRemoved() = 0; |
- }; |
- |
// Retrieves the instance of PresentationServiceDelegateImpl that was attached |
// to the specified WebContents. If no instance was attached, creates one, |
// and attaches it to the specified WebContents. |
@@ -92,21 +75,18 @@ |
void SetDefaultPresentationUrl( |
int render_process_id, |
int render_frame_id, |
- const std::string& default_presentation_url, |
- const content::PresentationSessionStartedCallback& callback) override; |
- void StartSession( |
- int render_process_id, |
- int render_frame_id, |
- const std::string& presentation_url, |
- const content::PresentationSessionStartedCallback& success_cb, |
- const content::PresentationSessionErrorCallback& error_cb) override; |
- void JoinSession( |
- int render_process_id, |
- int render_frame_id, |
- const std::string& presentation_url, |
- const std::string& presentation_id, |
- const content::PresentationSessionStartedCallback& success_cb, |
- const content::PresentationSessionErrorCallback& error_cb) override; |
+ const std::string& default_presentation_url) override; |
+ void StartSession(int render_process_id, |
+ int render_frame_id, |
+ const std::string& presentation_url, |
+ const PresentationSessionSuccessCallback& success_cb, |
+ const PresentationSessionErrorCallback& error_cb) override; |
+ void JoinSession(int render_process_id, |
+ int render_frame_id, |
+ const std::string& presentation_url, |
+ const std::string& presentation_id, |
+ const PresentationSessionSuccessCallback& success_cb, |
+ const PresentationSessionErrorCallback& error_cb) override; |
void CloseSession(int render_process_id, |
int render_frame_id, |
const std::string& presentation_id) override; |
@@ -125,51 +105,52 @@ |
int render_frame_id, |
const content::SessionStateChangedCallback& state_changed_cb) override; |
- // Callback invoked when a default PresentationRequest is started from a |
- // browser-initiated dialog. |
- void OnRouteResponse(const PresentationRequest& request, |
- const MediaRoute* route, |
+ // Callback invoked when there is a route response from CreateRoute/JoinRoute |
+ // outside of a Presentation API request. This could be due to |
+ // browser action (e.g., browser initiated media router dialog) or |
+ // a media route provider (e.g., autojoin). |
+ void OnRouteResponse(const MediaRoute* route, |
const std::string& presentation_id, |
const std::string& error); |
- // Adds / removes an observer for listening to default PresentationRequest |
- // changes. This class does not own |observer|. When |observer| is about to |
- // be destroyed, |RemoveDefaultPresentationRequestObserver| must be called. |
- void AddDefaultPresentationRequestObserver( |
- DefaultPresentationRequestObserver* observer); |
- void RemoveDefaultPresentationRequestObserver( |
- DefaultPresentationRequestObserver* observer); |
- |
- // Gets the default presentation request for the owning tab WebContents. It |
- // is an error to call this method if the default presentation request does |
- // not exist. |
- PresentationRequest GetDefaultPresentationRequest() const; |
- |
- // Returns true if there is a default presentation request for the owning tab |
+ // Returns the default MediaSource for this tab if there is one. |
+ // Returns an empty MediaSource otherwise. |
+ MediaSource default_source() const { return default_source_; } |
+ |
+ content::WebContents* web_contents() const { return web_contents_; } |
+ const GURL& default_frame_url() const { return default_frame_url_; } |
+ |
+ // Observer interface for listening to default MediaSource changes for the |
// WebContents. |
- bool HasDefaultPresentationRequest() const; |
- |
- // Returns the WebContents that owns this instance. |
- content::WebContents* web_contents() const { return web_contents_; } |
- |
- base::WeakPtr<PresentationServiceDelegateImpl> GetWeakPtr(); |
+ class DefaultMediaSourceObserver { |
+ public: |
+ virtual ~DefaultMediaSourceObserver() {} |
+ |
+ // Called when default media source for the corresponding WebContents has |
+ // changed. |
+ // |source|: New default MediaSource, or empty if default was removed. |
+ // |frame_url|: URL of the frame that contains the default media |
+ // source, or empty if there is no default media source. |
+ virtual void OnDefaultMediaSourceChanged(const MediaSource& source, |
+ const GURL& frame_url) = 0; |
+ }; |
+ |
+ // Adds / removes an observer for listening to default MediaSource changes. |
+ void AddDefaultMediaSourceObserver(DefaultMediaSourceObserver* observer); |
+ void RemoveDefaultMediaSourceObserver(DefaultMediaSourceObserver* observer); |
void SetMediaRouterForTest(MediaRouter* router); |
bool HasScreenAvailabilityListenerForTest( |
int render_process_id, |
int render_frame_id, |
const MediaSource::Id& source_id) const; |
+ |
+ base::WeakPtr<PresentationServiceDelegateImpl> GetWeakPtr(); |
private: |
friend class content::WebContentsUserData<PresentationServiceDelegateImpl>; |
FRIEND_TEST_ALL_PREFIXES(PresentationServiceDelegateImplTest, |
DelegateObservers); |
- FRIEND_TEST_ALL_PREFIXES(PresentationServiceDelegateImplTest, |
- SetDefaultPresentationUrl); |
- FRIEND_TEST_ALL_PREFIXES(PresentationServiceDelegateImplTest, |
- DefaultPresentationRequestObserver); |
- FRIEND_TEST_ALL_PREFIXES(PresentationServiceDelegateImplTest, |
- DefaultPresentationUrlCallback); |
explicit PresentationServiceDelegateImpl(content::WebContents* web_contents); |
@@ -178,26 +159,47 @@ |
MediaSource GetMediaSourceFromListener( |
content::PresentationScreenAvailabilityListener* listener); |
- void OnJoinRouteResponse( |
- int render_process_id, |
- int render_frame_id, |
- const content::PresentationSessionInfo& session, |
- const content::PresentationSessionStartedCallback& success_cb, |
- const content::PresentationSessionErrorCallback& error_cb, |
- const MediaRoute* route, |
- const std::string& presentation_id, |
- const std::string& error_text); |
+ void OnJoinRouteResponse(int render_process_id, |
+ int render_frame_id, |
+ const content::PresentationSessionInfo& session, |
+ const PresentationSessionSuccessCallback& success_cb, |
+ const PresentationSessionErrorCallback& error_cb, |
+ const MediaRoute* route, |
+ const std::string& presentation_id, |
+ const std::string& error_text); |
void OnStartSessionSucceeded( |
int render_process_id, |
int render_frame_id, |
- const content::PresentationSessionStartedCallback& success_cb, |
+ const PresentationSessionSuccessCallback& success_cb, |
const content::PresentationSessionInfo& new_session, |
const MediaRoute::Id& route_id); |
+ // Returns |true| if the frame is the main frame of |web_contents_|. |
+ bool IsMainFrame(int render_process_id, int render_frame_id) const; |
+ |
+ // Updates tab-level default MediaSource, default frame URL, and the |
+ // originating frame. If the source or frame URL changed, notify the |
+ // observers. |
+ void UpdateDefaultMediaSourceAndNotifyObservers( |
+ const RenderFrameHostId& render_frame_host_id, |
+ const MediaSource& new_default_source, |
+ const GURL& new_default_frame_url); |
+ |
+ // ID of RenderFrameHost that contains the default presentation. |
+ RenderFrameHostId default_presentation_render_frame_host_id_; |
+ // Default MediaSource for the tab associated with this instance. |
+ MediaSource default_source_; |
+ // URL of the frame that contains the default MediaSource. |
+ GURL default_frame_url_; |
+ |
+ // References to the observers listening for changes to default media source. |
+ base::ObserverList< |
+ DefaultMediaSourceObserver> default_media_source_observers_; |
+ |
// References to the WebContents that owns this instance, and associated |
// browser profile's MediaRouter instance. |
- content::WebContents* const web_contents_; |
+ content::WebContents* web_contents_; |
MediaRouter* router_; |
scoped_ptr<PresentationFrameManager> frame_manager_; |