Chromium Code Reviews| 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 baf803d0bb7d4bdabe86ab932f74c27d6af63844..9dd9e5d819267ff58e171f115d4db8b5587ebe1a 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 |
| @@ -4,12 +4,14 @@ |
| #include "chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_api.h" |
| +#include <memory> |
| #include <utility> |
| #include <vector> |
| #include "base/lazy_instance.h" |
| #include "base/memory/ptr_util.h" |
| #include "base/strings/string_number_conversions.h" |
| +#include "base/strings/stringprintf.h" |
| #include "base/task_runner_util.h" |
| #include "chrome/browser/extensions/api/tabs/tabs_constants.h" |
| #include "chrome/browser/extensions/extension_tab_util.h" |
| @@ -217,6 +219,45 @@ std::string WebrtcAudioPrivateFunction::device_id_salt() const { |
| return device_id_salt_; |
| } |
| +// TODO(hlundin): Stolen from WebrtcLoggingPrivateFunction. Maybe consolidate? |
| +content::RenderProcessHost* WebrtcAudioPrivateFunction::RphFromRequest( |
| + const RequestInfo& request, |
| + const std::string& security_origin) { |
| + // If |guest_process_id| is defined, directly use this id to find the |
| + // corresponding RenderProcessHost. |
| + if (request.guest_process_id.get()) |
| + return content::RenderProcessHost::FromID(*request.guest_process_id); |
| + |
| + // Otherwise, use the |tab_id|. If there's no |tab_id| and no |
| + // |guest_process_id|, we can't look up the RenderProcessHost. |
| + if (!request.tab_id.get()) { |
| + error_ = "No tab ID or guest process ID specified."; |
| + return nullptr; |
| + } |
| + |
| + int tab_id = *request.tab_id; |
| + content::WebContents* contents = nullptr; |
| + if (!ExtensionTabUtil::GetTabById(tab_id, GetProfile(), true, nullptr, |
| + nullptr, &contents, nullptr)) { |
| + error_ = extensions::ErrorUtils::FormatErrorMessage( |
| + extensions::tabs_constants::kTabNotFoundError, |
| + base::IntToString(tab_id)); |
| + return nullptr; |
| + } |
| + if (!contents) { |
| + error_ = "Web contents for tab not found."; |
| + return nullptr; |
| + } |
| + GURL expected_origin = contents->GetLastCommittedURL().GetOrigin(); |
| + if (expected_origin.spec() != security_origin) { |
| + error_ = base::StringPrintf( |
| + "Invalid security origin. Expected=%s, actual=%s", |
| + expected_origin.spec().c_str(), security_origin.c_str()); |
| + return nullptr; |
| + } |
| + return contents->GetRenderProcessHost(); |
| +} |
| + |
| bool WebrtcAudioPrivateGetSinksFunction::RunAsync() { |
| DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| @@ -504,4 +545,28 @@ void WebrtcAudioPrivateGetAssociatedSinkFunction::OnHMACCalculated( |
| SendResponse(true); |
| } |
| +WebrtcAudioPrivateSetAudioExperimentsFunction:: |
| + WebrtcAudioPrivateSetAudioExperimentsFunction() {} |
| + |
| +WebrtcAudioPrivateSetAudioExperimentsFunction:: |
| + ~WebrtcAudioPrivateSetAudioExperimentsFunction() {} |
| + |
| +bool WebrtcAudioPrivateSetAudioExperimentsFunction::RunAsync() { |
|
Henrik Grunell
2017/04/10 08:13:28
DCHECK_CURRENTLY_ON(BrowserThread::UI);
hlundin-chromium
2017/04/10 10:10:16
Done.
|
| + std::unique_ptr<wap::SetAudioExperiments::Params> params( |
| + wap::SetAudioExperiments::Params::Create(*args_)); |
| + EXTENSION_FUNCTION_VALIDATE(params.get()); |
| + |
| + if (params->audio_experiments.enable_aec3.get()) { |
| + content::RenderProcessHost* host = |
| + RphFromRequest(params->request, params->security_origin); |
| + if (!host) |
| + return false; |
|
Henrik Grunell
2017/04/10 08:13:28
Also
SendResponse(false);
hlundin-chromium
2017/04/10 10:10:16
Done.
|
| + |
| + host->SetEchoCanceller3(*params->audio_experiments.enable_aec3); |
|
Henrik Grunell
2017/04/10 08:13:28
The optional callback in the interface is never us
hlundin-chromium
2017/04/10 10:10:16
It should probably be removed. Done.
Henrik Grunell
2017/04/10 12:33:47
Acknowledged.
|
| + } |
| + |
| + SendResponse(true); |
| + return true; |
| +} |
| + |
| } // namespace extensions |