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

Side by Side Diff: chrome/browser/media/router/receiver_presentation_service_delegate_impl.cc

Issue 1314413005: [Presentation API] 1-UA presentation support + presenter APIs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 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 #include "chrome/browser/media/router/receiver_presentation_service_delegate_imp l.h"
6
7 #include "chrome/browser/media/router/offscreen_presentation_manager.h"
8 #include "chrome/browser/media/router/offscreen_presentation_manager_factory.h"
9 #include "chrome/browser/profiles/profile.h"
10 #include "content/public/browser/presentation_session_state_listener.h"
11
12 DEFINE_WEB_CONTENTS_USER_DATA_KEY(
13 media_router::ReceiverPresentationServiceDelegateImpl);
14
15 using content::PresentationServiceDelegate;
16 using content::RenderFrameHost;
17
18 namespace media_router {
19
20 // static
21 ReceiverPresentationServiceDelegateImpl*
22 ReceiverPresentationServiceDelegateImpl::GetOrCreateForWebContents(
23 content::WebContents* web_contents) {
24 DCHECK(web_contents);
25 // CreateForWebContents does nothing if the delegate instance already exists.
26 ReceiverPresentationServiceDelegateImpl::CreateForWebContents(web_contents);
27 return ReceiverPresentationServiceDelegateImpl::FromWebContents(web_contents);
28 }
29
30 ReceiverPresentationServiceDelegateImpl::
31 ~ReceiverPresentationServiceDelegateImpl() {
32 for (auto& observer_pair : observers_)
33 observer_pair.second->OnDelegateDestroyed();
34 }
35
36 void ReceiverPresentationServiceDelegateImpl::AddObserver(
37 int render_process_id,
38 int render_frame_id,
39 content::PresentationServiceDelegate::Observer* observer) {
40 DCHECK(observer);
41
42 RenderFrameHostId rfh_id(render_process_id, render_frame_id);
43 DCHECK(!ContainsKey(observers_, rfh_id));
44 observers_[rfh_id] = observer;
45 }
46
47 void ReceiverPresentationServiceDelegateImpl::RemoveObserver(
48 int render_process_id,
49 int render_frame_id) {
50 observers_.erase(RenderFrameHostId(render_process_id, render_frame_id));
51 }
52
53 bool ReceiverPresentationServiceDelegateImpl::AddScreenAvailabilityListener(
miu 2015/09/27 00:22:08 There are a ton of "NOTIMPLEMENTED()" methods. Co
imcheng 2015/09/30 01:13:42 Ack. I think it's not worth the trouble since all
54 int render_process_id,
55 int render_frame_id,
56 content::PresentationScreenAvailabilityListener* listener) {
57 NOTIMPLEMENTED();
58 return false;
59 }
60
61 void ReceiverPresentationServiceDelegateImpl::RemoveScreenAvailabilityListener(
62 int render_process_id,
63 int render_frame_id,
64 content::PresentationScreenAvailabilityListener* listener) {
65 NOTIMPLEMENTED();
66 }
67
68 void ReceiverPresentationServiceDelegateImpl::Reset(int render_process_id,
69 int render_frame_id) {
70 DVLOG(2) << __FUNCTION__ << render_process_id << ", " << render_frame_id;
71
72 RenderFrameHostId rfh_id(render_process_id, render_frame_id);
73 if (offscreen_presenter_context_ &&
74 offscreen_presenter_context_->IsPresenterFrame(rfh_id))
75 offscreen_presenter_context_.reset();
76 }
77
78 void ReceiverPresentationServiceDelegateImpl::SetDefaultPresentationUrl(
79 int render_process_id,
80 int render_frame_id,
81 const std::string& default_presentation_url) {
82 NOTIMPLEMENTED();
83 }
84
85 void ReceiverPresentationServiceDelegateImpl::StartSession(
86 int render_process_id,
87 int render_frame_id,
88 const std::string& presentation_url,
89 const PresentationSessionSuccessCallback& success_cb,
90 const PresentationSessionErrorCallback& error_cb) {
91 NOTIMPLEMENTED();
92 error_cb.Run(content::PresentationError(content::PRESENTATION_ERROR_UNKNOWN,
93 "Not implemented"));
94 }
95
96 void ReceiverPresentationServiceDelegateImpl::JoinSession(
97 int render_process_id,
98 int render_frame_id,
99 const std::string& presentation_url,
100 const std::string& presentation_id,
101 const PresentationSessionSuccessCallback& success_cb,
102 const PresentationSessionErrorCallback& error_cb) {
103 NOTIMPLEMENTED();
104 error_cb.Run(content::PresentationError(content::PRESENTATION_ERROR_UNKNOWN,
105 "Not implemented"));
106 }
107
108 void ReceiverPresentationServiceDelegateImpl::CloseSession(
109 int render_process_id,
110 int render_frame_id,
111 const std::string& presentation_id) {
112 NOTIMPLEMENTED();
113 }
114
115 void ReceiverPresentationServiceDelegateImpl::ListenForSessionMessages(
116 int render_process_id,
117 int render_frame_id,
118 const content::PresentationSessionInfo& session,
119 const content::PresentationSessionMessageCallback& message_cb) {
120 DVLOG(2) << __FUNCTION__ << render_process_id << ", " << render_frame_id;
121
122 if (!offscreen_presenter_context_) {
123 DVLOG(2) << __FUNCTION__ << ": no offscreen presenter context";
124 return;
125 }
126
127 RenderFrameHostId rfh_id(render_process_id, render_frame_id);
128 offscreen_presenter_context_->ListenForMessages(rfh_id, session, message_cb);
129 }
130
131 void ReceiverPresentationServiceDelegateImpl::SendMessage(
132 int render_process_id,
133 int render_frame_id,
134 const content::PresentationSessionInfo& session,
135 scoped_ptr<content::PresentationSessionMessage> message,
136 const content::SendMessageCallback& send_message_cb) {
137 DVLOG(2) << __FUNCTION__ << render_process_id << ", " << render_frame_id;
138
139 if (!offscreen_presenter_context_) {
140 DVLOG(2) << __FUNCTION__ << ": no offscreen presenter context";
141 send_message_cb.Run(false);
142 return;
143 }
144
145 RenderFrameHostId rfh_id(render_process_id, render_frame_id);
146 offscreen_presenter_context_->SendMessage(rfh_id, session, message.Pass(),
147 send_message_cb);
148 }
149
150 bool ReceiverPresentationServiceDelegateImpl::ListenForSessionStateChange(
151 int render_process_id,
152 int render_frame_id,
153 content::PresentationSessionStateListener* listener) {
154 DVLOG(2) << __FUNCTION__ << render_process_id << ", " << render_frame_id;
155
156 if (!offscreen_presenter_context_) {
157 DVLOG(2) << __FUNCTION__ << ": no offscreen presenter context";
158 return false;
159 }
160
161 RenderFrameHostId rfh_id(render_process_id, render_frame_id);
162 offscreen_presenter_context_->ListenForStateChanges(rfh_id, listener);
163 return true;
164 }
165
166 void ReceiverPresentationServiceDelegateImpl::GetPresentationReceiverSession(
167 int render_process_id,
168 int render_frame_id,
169 const content::PresentationReceiverSessionAvailableCallback&
170 success_callback,
171 const base::Callback<void(const std::string&)>& error_callback) {
172 DVLOG(2) << __FUNCTION__ << render_process_id << ", " << render_frame_id;
173
174 if (!offscreen_presenter_context_) {
175 DVLOG(2) << __FUNCTION__ << ": no offscreen presenter context";
176 error_callback.Run("No offscreen presenter context");
177 return;
178 }
179
180 RenderFrameHostId rfh_id(render_process_id, render_frame_id);
181 offscreen_presenter_context_->GetPresentationReceiverSession(
182 rfh_id, success_callback, error_callback);
183 }
184
185 std::vector<content::PresentationSessionInfo>
186 ReceiverPresentationServiceDelegateImpl::GetPresentationReceiverSessions(
187 int render_process_id,
188 int render_frame_id) {
189 DVLOG(2) << __FUNCTION__ << render_process_id << ", " << render_frame_id;
190
191 if (!offscreen_presenter_context_) {
192 DVLOG(2) << __FUNCTION__ << ": no offscreen presenter context";
193 return std::vector<content::PresentationSessionInfo>();
194 }
195
196 RenderFrameHostId rfh_id(render_process_id, render_frame_id);
197 return offscreen_presenter_context_->GetPresentationReceiverSessions(rfh_id);
198 }
199
200 ReceiverPresentationServiceDelegateImpl::
201 ReceiverPresentationServiceDelegateImpl(content::WebContents* web_contents)
202 : web_contents_(web_contents),
203 // Get the OffscreenPresentationManager keyed off the controller profile,
204 // since
205 // it is where the offscreen presentation is registered.
206 // Per OffscreenPresentationsOwner, the controller profile is the
207 // presenter
208 // tab's original profile.
209 offscreen_presenter_context_(
210 OffscreenPresentationManagerFactory::GetOrCreateForBrowserContext(
211 Profile::FromBrowserContext(web_contents_->GetBrowserContext())
212 ->GetOriginalProfile())
213 ->GetOffscreenPresenterContext(web_contents_)) {
214 DCHECK(web_contents_);
215 DCHECK(offscreen_presenter_context_);
216 }
217
218 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698