Commit cf947e08 authored by Adrian Elder's avatar Adrian Elder Committed by Commit Bot

Permit some apps to call startAudioDebugRecordings without a flag.

Before this change, webrtcLoggingPrivate.startAudioDebugRecordings was only
available if switches::kEnableAudioDebugRecordingsFromExtension was present.

This change adds new API permissions that permit creating audio debug recordings
without that flag. These permissions are only granted to whitelisted apps
installed on internal Hotrods.

Bug: 777906
Change-Id: I42d583f1a58d86c351cc41e2cd261bff4b96be9f
Reviewed-on: https://chromium-review.googlesource.com/766708Reviewed-by: default avatarMustafa Emre Acer <meacer@chromium.org>
Reviewed-by: default avatarGreg Levin <glevin@chromium.org>
Reviewed-by: default avatarDevlin <rdevlin.cronin@chromium.org>
Commit-Queue: Adrian Elder <aelder@chromium.org>
Cr-Commit-Position: refs/heads/master@{#518385}
parent 3c1a7c69
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "base/logging.h" #include "base/logging.h"
#include "base/strings/string_number_conversions.h" #include "base/strings/string_number_conversions.h"
#include "base/supports_user_data.h" #include "base/supports_user_data.h"
#include "build/build_config.h"
#include "chrome/browser/extensions/api/tabs/tabs_constants.h" #include "chrome/browser/extensions/api/tabs/tabs_constants.h"
#include "chrome/browser/extensions/extension_tab_util.h" #include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
...@@ -24,6 +25,29 @@ ...@@ -24,6 +25,29 @@
#include "extensions/browser/process_manager.h" #include "extensions/browser/process_manager.h"
#include "extensions/common/error_utils.h" #include "extensions/common/error_utils.h"
#if defined(OS_LINUX) || defined(OS_CHROMEOS)
#include "extensions/common/permissions/permissions_data.h"
#endif
namespace {
bool CanEnableAudioDebugRecordingsFromExtension(
const extensions::Extension* extension) {
bool enabled_by_permissions = false;
#if defined(OS_LINUX) || defined(OS_CHROMEOS)
if (extension) {
enabled_by_permissions =
extension->permissions_data()->active_permissions().HasAPIPermission(
extensions::APIPermission::kWebrtcLoggingPrivateAudioDebug);
}
#endif
return base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableAudioDebugRecordingsFromExtension) ||
enabled_by_permissions;
}
} // namespace
namespace extensions { namespace extensions {
using api::webrtc_logging_private::MetaDataEntry; using api::webrtc_logging_private::MetaDataEntry;
...@@ -442,8 +466,7 @@ bool WebrtcLoggingPrivateStopRtpDumpFunction::RunAsync() { ...@@ -442,8 +466,7 @@ bool WebrtcLoggingPrivateStopRtpDumpFunction::RunAsync() {
} }
bool WebrtcLoggingPrivateStartAudioDebugRecordingsFunction::RunAsync() { bool WebrtcLoggingPrivateStartAudioDebugRecordingsFunction::RunAsync() {
if (!base::CommandLine::ForCurrentProcess()->HasSwitch( if (!CanEnableAudioDebugRecordingsFromExtension(extension())) {
switches::kEnableAudioDebugRecordingsFromExtension)) {
return false; return false;
} }
...@@ -477,8 +500,7 @@ bool WebrtcLoggingPrivateStartAudioDebugRecordingsFunction::RunAsync() { ...@@ -477,8 +500,7 @@ bool WebrtcLoggingPrivateStartAudioDebugRecordingsFunction::RunAsync() {
} }
bool WebrtcLoggingPrivateStopAudioDebugRecordingsFunction::RunAsync() { bool WebrtcLoggingPrivateStopAudioDebugRecordingsFunction::RunAsync() {
if (!base::CommandLine::ForCurrentProcess()->HasSwitch( if (!CanEnableAudioDebugRecordingsFromExtension(extension())) {
switches::kEnableAudioDebugRecordingsFromExtension)) {
return false; return false;
} }
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "base/files/file_path.h" #include "base/files/file_path.h"
#include "base/files/file_util.h" #include "base/files/file_util.h"
#include "base/threading/thread_restrictions.h" #include "base/threading/thread_restrictions.h"
#include "build/build_config.h"
#include "chrome/browser/apps/app_browsertest_util.h" #include "chrome/browser/apps/app_browsertest_util.h"
#include "chrome/browser/media/webrtc/webrtc_log_list.h" #include "chrome/browser/media/webrtc/webrtc_log_list.h"
#include "chrome/common/chrome_switches.h" #include "chrome/common/chrome_switches.h"
...@@ -65,3 +66,14 @@ IN_PROC_BROWSER_TEST_F(WebrtcLoggingPrivateApiBrowserTest, ...@@ -65,3 +66,14 @@ IN_PROC_BROWSER_TEST_F(WebrtcLoggingPrivateApiBrowserTest,
"start_audio_debug_recordings_for_webview_from_app")) "start_audio_debug_recordings_for_webview_from_app"))
<< message_; << message_;
} }
#if defined(OS_LINUX) || defined(OS_CHROMEOS)
IN_PROC_BROWSER_TEST_F(
WebrtcLoggingPrivateApiBrowserTest,
TestStartAudioDebugRecordingsForWebviewFromAppWithoutSwitch) {
ASSERT_TRUE(
RunPlatformAppTest("api_test/webrtc_logging_private/audio_debug/"
"start_audio_debug_recordings_for_webview_from_app"))
<< message_;
}
#endif
...@@ -837,6 +837,20 @@ ...@@ -837,6 +837,20 @@
"81986D4F846CEDDDB962643FA501D1780DD441BB" // http://crbug.com/777967 "81986D4F846CEDDDB962643FA501D1780DD441BB" // http://crbug.com/777967
] ]
}, },
"webrtcLoggingPrivate.audioDebug": {
"channel": "stable",
"extension_types": ["platform_app"],
"component_extensions_auto_granted": false,
"whitelist": [
// Extension used for API test.
"ADFA45434ABA2F1A4647E673F53FF37F8F6047A3",
// These apps are for internal Google use only.
"4F25792AF1AA7483936DE29C07806F203C7170A0", // http://crbug.com/777967
"BD8781D757D830FC2E85470A1B6E8A718B7EE0D9", // http://crbug.com/777967
"4AC2B6C63C6480D150DFDA13E4A5956EB1D0DDBB", // http://crbug.com/777967
"81986D4F846CEDDDB962643FA501D1780DD441BB" // http://crbug.com/777967
]
},
"webstorePrivate": { "webstorePrivate": {
"channel": "stable", "channel": "stable",
"extension_types": ["extension", "legacy_packaged_app", "hosted_app"], "extension_types": ["extension", "legacy_packaged_app", "hosted_app"],
......
...@@ -170,6 +170,9 @@ ChromeAPIPermissions::GetAllPermissions() const { ...@@ -170,6 +170,9 @@ ChromeAPIPermissions::GetAllPermissions() const {
"webrtcDesktopCapturePrivate", APIPermissionInfo::kFlagCannotBeOptional}, "webrtcDesktopCapturePrivate", APIPermissionInfo::kFlagCannotBeOptional},
{APIPermission::kWebrtcLoggingPrivate, "webrtcLoggingPrivate", {APIPermission::kWebrtcLoggingPrivate, "webrtcLoggingPrivate",
APIPermissionInfo::kFlagCannotBeOptional}, APIPermissionInfo::kFlagCannotBeOptional},
{APIPermission::kWebrtcLoggingPrivateAudioDebug,
"webrtcLoggingPrivate.audioDebug",
APIPermissionInfo::kFlagCannotBeOptional},
{APIPermission::kFirstRunPrivate, "firstRunPrivate", {APIPermission::kFirstRunPrivate, "firstRunPrivate",
APIPermissionInfo::kFlagCannotBeOptional}, APIPermissionInfo::kFlagCannotBeOptional},
{APIPermission::kInlineInstallPrivate, "inlineInstallPrivate"}, {APIPermission::kInlineInstallPrivate, "inlineInstallPrivate"},
......
...@@ -852,6 +852,7 @@ TEST(PermissionsTest, PermissionMessages) { ...@@ -852,6 +852,7 @@ TEST(PermissionsTest, PermissionMessages) {
skip.insert(APIPermission::kWebrtcAudioPrivate); skip.insert(APIPermission::kWebrtcAudioPrivate);
skip.insert(APIPermission::kWebrtcDesktopCapturePrivate); skip.insert(APIPermission::kWebrtcDesktopCapturePrivate);
skip.insert(APIPermission::kWebrtcLoggingPrivate); skip.insert(APIPermission::kWebrtcLoggingPrivate);
skip.insert(APIPermission::kWebrtcLoggingPrivateAudioDebug);
skip.insert(APIPermission::kWebstorePrivate); skip.insert(APIPermission::kWebstorePrivate);
skip.insert(APIPermission::kWebstoreWidgetPrivate); skip.insert(APIPermission::kWebstoreWidgetPrivate);
......
...@@ -11,5 +11,9 @@ ...@@ -11,5 +11,9 @@
"scripts": ["test.js"] "scripts": ["test.js"]
} }
}, },
"permissions": ["webrtcLoggingPrivate", "webview"] "permissions": [
"webrtcLoggingPrivate",
"webrtcLoggingPrivate.audioDebug",
"webview"
]
} }
...@@ -249,6 +249,7 @@ class APIPermission { ...@@ -249,6 +249,7 @@ class APIPermission {
kNewTabPageOverride, kNewTabPageOverride,
kDeclarativeNetRequest, kDeclarativeNetRequest,
kLockWindowFullscreenPrivate, kLockWindowFullscreenPrivate,
kWebrtcLoggingPrivateAudioDebug,
// Last entry: Add new entries above and ensure to update the // Last entry: Add new entries above and ensure to update the
// "ExtensionPermission3" enum in tools/metrics/histograms/histograms.xml // "ExtensionPermission3" enum in tools/metrics/histograms/histograms.xml
// (by running update_extension_permission.py). // (by running update_extension_permission.py).
......
...@@ -14466,6 +14466,7 @@ Called by update_net_error_codes.py.--> ...@@ -14466,6 +14466,7 @@ Called by update_net_error_codes.py.-->
<int value="206" label="kNewTabPageOverride"/> <int value="206" label="kNewTabPageOverride"/>
<int value="207" label="kDeclarativeNetRequest"/> <int value="207" label="kDeclarativeNetRequest"/>
<int value="208" label="kLockWindowFullscreenPrivate"/> <int value="208" label="kLockWindowFullscreenPrivate"/>
<int value="209" label="kWebrtcLoggingPrivateAudioDebug"/>
</enum> </enum>
<enum name="ExtensionServiceVerifyAllSuccess"> <enum name="ExtensionServiceVerifyAllSuccess">
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment