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

Unified Diff: chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_api.cc

Issue 880393002: Fix webrtcAudioPrivate API to handle requests from <webview>s. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: for jam's comments Created 5 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: chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_api.cc
diff --git a/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_api.cc b/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_api.cc
index 2d07290685a8e6b7e73343d0b88627b9b3f6a8b0..8f934b630c2f485fe61ae99f24076d37ddc5ef79 100644
--- a/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_api.cc
+++ b/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_api.cc
@@ -23,12 +23,14 @@
namespace extensions {
using content::BrowserThread;
-using content::RenderViewHost;
+using content::RenderProcessHost;
using media::AudioDeviceNames;
using media::AudioManager;
namespace wap = api::webrtc_audio_private;
+using api::webrtc_audio_private::RequestInfo;
+
static base::LazyInstance<
BrowserContextKeyedAPIFactory<WebrtcAudioPrivateEventService> > g_factory =
LAZY_INSTANCE_INITIALIZER;
@@ -130,27 +132,38 @@ void WebrtcAudioPrivateFunction::OnOutputDeviceNames(
NOTREACHED();
}
-bool WebrtcAudioPrivateFunction::GetControllerList(int tab_id) {
- content::WebContents* contents = NULL;
- if (!ExtensionTabUtil::GetTabById(
- tab_id, GetProfile(), true, NULL, NULL, &contents, NULL)) {
- error_ = extensions::ErrorUtils::FormatErrorMessage(
- extensions::tabs_constants::kTabNotFoundError,
- base::IntToString(tab_id));
+bool WebrtcAudioPrivateFunction::GetControllerList(const RequestInfo& request) {
+ content::RenderProcessHost* rhp = NULL;
tommi (sloooow) - chröme 2015/01/30 20:17:39 nit: rph (also, should we use nullptr?)
+
+ // If |guest_process_id| is defined, directly use this id to find the
+ // corresponding RenderProcessHost.
+ if (request.guest_process_id.get()) {
+ rhp = content::RenderProcessHost::FromID(*request.guest_process_id.get());
+ } else if (request.tab_id.get()) {
+ int tab_id = *request.tab_id.get();
+ content::WebContents* contents = NULL;
+ if (!ExtensionTabUtil::GetTabById(tab_id, GetProfile(), true, NULL, NULL,
+ &contents, NULL)) {
+ error_ = extensions::ErrorUtils::FormatErrorMessage(
+ extensions::tabs_constants::kTabNotFoundError,
+ base::IntToString(tab_id));
+ return false;
+ }
+ rhp = contents->GetRenderProcessHost();
+ } else {
return false;
}
- RenderViewHost* rvh = contents->GetRenderViewHost();
- if (!rvh)
+ if (!rhp)
return false;
- rvh->GetAudioOutputControllers(base::Bind(
- &WebrtcAudioPrivateFunction::OnControllerList, this));
+ rhp->GetAudioOutputControllers(
+ base::Bind(&WebrtcAudioPrivateFunction::OnControllerList, this));
return true;
}
void WebrtcAudioPrivateFunction::OnControllerList(
- const content::RenderViewHost::AudioOutputControllerList& list) {
+ const content::RenderProcessHost::AudioOutputControllerList& list) {
NOTREACHED();
}
@@ -254,11 +267,11 @@ bool WebrtcAudioPrivateGetActiveSinkFunction::RunAsync() {
wap::GetActiveSink::Params::Create(*args_));
EXTENSION_FUNCTION_VALIDATE(params.get());
- return GetControllerList(params->tab_id);
+ return GetControllerList(params->request);
}
void WebrtcAudioPrivateGetActiveSinkFunction::OnControllerList(
- const RenderViewHost::AudioOutputControllerList& controllers) {
+ const RenderProcessHost::AudioOutputControllerList& controllers) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
if (controllers.empty()) {
@@ -295,9 +308,8 @@ void WebrtcAudioPrivateGetActiveSinkFunction::OnHMACCalculated(
}
WebrtcAudioPrivateSetActiveSinkFunction::
-WebrtcAudioPrivateSetActiveSinkFunction()
- : tab_id_(0),
- num_remaining_sink_ids_(0) {
+ WebrtcAudioPrivateSetActiveSinkFunction()
+ : num_remaining_sink_ids_(0) {
}
WebrtcAudioPrivateSetActiveSinkFunction::
@@ -312,22 +324,40 @@ bool WebrtcAudioPrivateSetActiveSinkFunction::RunAsync() {
InitResourceContext();
- tab_id_ = params->tab_id;
+ if (params->request.guest_process_id.get()) {
+ request_info_.guest_process_id.reset(
+ new int(*params->request.guest_process_id.get()));
+ } else if (params->request.tab_id.get()) {
+ request_info_.tab_id.reset(new int(*params->request.tab_id.get()));
+ } else {
+ return false;
+ }
+
sink_id_ = params->sink_id;
- return GetControllerList(tab_id_);
+ return GetControllerList(request_info_);
}
void WebrtcAudioPrivateSetActiveSinkFunction::OnControllerList(
- const RenderViewHost::AudioOutputControllerList& controllers) {
+ const RenderProcessHost::AudioOutputControllerList& controllers) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ std::string requested_process_type;
+ int requested_process_id;
+ if (request_info_.guest_process_id.get()) {
+ requested_process_type = "guestProcessId";
+ requested_process_id = *request_info_.guest_process_id.get();
+ } else {
+ requested_process_type = "tabId";
+ requested_process_id = *request_info_.tab_id.get();
+ }
+
controllers_ = controllers;
num_remaining_sink_ids_ = controllers_.size();
if (num_remaining_sink_ids_ == 0) {
error_ = extensions::ErrorUtils::FormatErrorMessage(
- "No active stream for tab with id: *.",
- base::IntToString(tab_id_));
+ "No active stream for " + requested_process_type,
+ base::IntToString(requested_process_id));
SendResponse(false);
} else {
// We need to get the output device names, and calculate the HMAC
@@ -359,7 +389,7 @@ void WebrtcAudioPrivateSetActiveSinkFunction::OnOutputDeviceNames(
DVLOG(2) << "Found no matching raw sink ID for HMAC " << sink_id_;
}
- RenderViewHost::AudioOutputControllerList::const_iterator it =
+ RenderProcessHost::AudioOutputControllerList::const_iterator it =
controllers_.begin();
for (; it != controllers_.end(); ++it) {
(*it)->SwitchOutputDevice(raw_sink_id, base::Bind(

Powered by Google App Engine
This is Rietveld 408576698