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

Side by Side Diff: chrome/browser/media/router/presentation_service_delegate_impl.h

Issue 1132903002: [MediaRouter] Add implementation of PresentationServiceDelegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CHROME_BROWSER_MEDIA_ROUTER_PRESENTATION_SERVICE_DELEGATE_IMPL_H_
6 #define CHROME_BROWSER_MEDIA_ROUTER_PRESENTATION_SERVICE_DELEGATE_IMPL_H_
7
8 #include <map>
9 #include <string>
10 #include <utility>
11
12 #include "base/gtest_prod_util.h"
13 #include "base/macros.h"
14 #include "base/memory/scoped_ptr.h"
15 #include "base/memory/weak_ptr.h"
16 #include "base/observer_list.h"
17 #include "chrome/browser/media/router/media_router.h"
18 #include "chrome/browser/media/router/media_source.h"
19 #include "content/public/browser/presentation_service_delegate.h"
20 #include "content/public/browser/web_contents_observer.h"
21 #include "content/public/browser/web_contents_user_data.h"
22
23 namespace content {
24 class RenderFrameHost;
25 class PresentationScreenAvailabilityListener;
26 class WebContents;
27 struct PresentationSessionInfo;
28 struct PresentationSessionMessage;
29 } // namespace content
30
31 namespace media_router {
32
33 class MediaRoute;
34 class MediaSinksObserver;
35 class PresentationFrameManager;
36
37 // Implementation of PresentationServiceDelegate that interfaces an
38 // instance of WebContents with the Chrome Media Router. It uses the Media
39 // Router to handle presentation API calls forwarded from
40 // PresentationServiceImpl. In addition, it also
41 // provides default presentation URL that is required for creating
42 // browser-initiated sessions.
43 // It is scoped to the lifetime of a WebContents, and is managed by the
44 // associated WebContents.
45 class PresentationServiceDelegateImpl
46 : public content::WebContentsUserData<PresentationServiceDelegateImpl>,
47 public content::PresentationServiceDelegate {
48 public:
49 ~PresentationServiceDelegateImpl() override;
50
51 // content::PresentationServiceDelegate implementation.
52 void AddObserver(
53 int render_process_id,
54 int render_frame_id,
55 content::PresentationServiceDelegate::Observer* observer) override;
56 void RemoveObserver(int render_process_id, int render_frame_id) override;
57 bool AddScreenAvailabilityListener(
58 int render_process_id,
59 int render_frame_id,
60 content::PresentationScreenAvailabilityListener* listener) override;
61 void RemoveScreenAvailabilityListener(
62 int render_process_id,
63 int render_frame_id,
64 content::PresentationScreenAvailabilityListener* listener) override;
65 void Reset(int render_process_id, int render_frame_id) override;
66 void SetDefaultPresentationUrl(
67 int render_process_id,
68 int render_frame_id,
69 const std::string& default_presentation_url,
70 const std::string& default_presentation_id) override;
71 void StartSession(int render_process_id,
72 int render_frame_id,
73 const std::string& presentation_url,
74 const std::string& presentation_id,
75 const PresentationSessionSuccessCallback& success_cb,
76 const PresentationSessionErrorCallback& error_cb) override;
77 void JoinSession(int render_process_id,
78 int render_frame_id,
79 const std::string& presentation_url,
80 const std::string& presentation_id,
81 const PresentationSessionSuccessCallback& success_cb,
82 const PresentationSessionErrorCallback& error_cb) override;
83 void ListenForSessionMessages(
84 int render_process_id,
85 int render_frame_id,
86 const PresentationSessionMessageCallback& message_cb) override;
87 void SendMessage(
88 int render_process_id,
89 int render_frame_id,
90 scoped_ptr<content::PresentationSessionMessage> message_request,
91 const SendMessageCallback& send_message_cb) override;
92
93 // Callback invoked when a |route| has been created or joined outside of a
94 // Presentation API request. The route could be due to
95 // browser action (e.g., browser initiated media router dialog) or
96 // a media route provider (e.g., autojoin).
97 void OnRouteCreated(const MediaRoute& route);
98
99 // Returns the default MediaSource for this tab if there is one.
100 // Returns an empty MediaSource otherwise.
101 MediaSource default_source() const { return default_source_; }
102
103 // Observer interface for listening to default MediaSource changes for the
104 // WebContents.
105 class DefaultMediaSourceObserver {
106 public:
107 virtual ~DefaultMediaSourceObserver() {}
108
109 // Called when default media source for the corresponding WebContents has
110 // changed.
111 // |source|: New default MediaSource, or empty if default was removed.
112 // |frame_display_name|: Display Name of the frame that contains the default
113 // media source, or empty if there is no default media source.
114 virtual void OnDefaultMediaSourceChanged(
115 const MediaSource& source,
116 const std::string& frame_display_name) = 0;
117 };
118
119 // Adds / removes an observer for listening to default MediaSource changes.
120 void AddDefaultMediaSourceObserver(DefaultMediaSourceObserver* observer);
121 void RemoveDefaultMediaSourceObserver(DefaultMediaSourceObserver* observer);
122
123 void SetMediaRouterForTest(MediaRouter* router);
124 bool HasScreenAvailabilityListenerForTest(
125 int render_process_id,
126 int render_frame_id,
127 const MediaSourceId& source_id) const;
128
129 base::WeakPtr<PresentationServiceDelegateImpl> GetWeakPtr();
130
131 private:
132 explicit PresentationServiceDelegateImpl(content::WebContents* web_contents);
133 friend class content::WebContentsUserData<PresentationServiceDelegateImpl>;
134
135 FRIEND_TEST_ALL_PREFIXES(PresentationServiceDelegateImplTest,
136 DelegateObservers);
137
138 // Returns |listener|'s presentation URL as a MediaSource. If |listener| does
139 // not have a persentation URL, returns the tab mirroring MediaSource.
140 MediaSource GetMediaSourceFromListener(
141 content::PresentationScreenAvailabilityListener* listener);
142
143 // Returns |true| if the frame is the main frame of |web_contents_|.
144 bool IsMainFrame(int render_process_id, int render_frame_id) const;
145
146 // Updates tab-level default MediaSource and source host name. If either
147 // changed, notify the observers.
148 void UpdateDefaultMediaSourceAndNotifyObservers(
149 const MediaSource& new_default_source,
150 const std::string& new_default_source_host);
151
152 MediaSource default_source_;
153 std::string default_frame_display_name_;
154
155 // References to the observers listening for changes to default media source.
156 ObserverList<DefaultMediaSourceObserver> default_media_source_observers_;
157
158 // References to the WebContents that owns this instance, and associated
159 // browser profile's MediaRouter instance.
160 content::WebContents* web_contents_;
161 MediaRouter* router_;
162
163 scoped_ptr<PresentationFrameManager> frame_manager_;
164
165 base::WeakPtrFactory<PresentationServiceDelegateImpl> weak_factory_;
166
167 DISALLOW_COPY_AND_ASSIGN(PresentationServiceDelegateImpl);
168 };
169
170 } // namespace media_router
171
172 #endif // CHROME_BROWSER_MEDIA_ROUTER_PRESENTATION_SERVICE_DELEGATE_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698