#include <stddef.h>
#include <memory>
#include <optional>
#include <utility>
#include "base/functional/bind.h"
#include "base/json/json_writer.h"
#include "base/run_loop.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/synchronization/waitable_event.h"
#include "base/test/bind.h"
#include "base/test/test_future.h"
#include "base/threading/platform_thread.h"
#include "base/time/time.h"
#include "build/build_config.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_api.h"
#include "chrome/browser/extensions/component_loader.h"
#include "chrome/browser/extensions/extension_apitest.h"
#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/media/webrtc/media_device_salt_service_factory.h"
#include "chrome/browser/media/webrtc/webrtc_log_uploader.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/recently_audible_helper.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/common/buildflags.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h"
#include "components/media_device_salt/media_device_salt_service.h"
#include "components/network_session_configurator/common/network_switches.h"
#include "content/public/browser/audio_service.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/media_device_id.h"
#include "content/public/browser/web_contents.h"
#include "content/public/test/browser_test.h"
#include "content/public/test/browser_test_utils.h"
#include "extensions/browser/api_test_utils.h"
#include "extensions/common/permissions/permission_set.h"
#include "extensions/common/permissions/permissions_data.h"
#include "media/audio/audio_device_description.h"
#include "media/audio/audio_system.h"
#include "media/base/media_switches.h"
#include "net/dns/mock_host_resolver.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
#include "net/test/embedded_test_server/http_request.h"
#include "net/test/embedded_test_server/http_response.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#if BUILDFLAG(IS_WIN)
#include "base/win/windows_version.h"
#endif
JSONWriter;
RenderProcessHost;
WebContents;
AudioDeviceDescriptions;
namespace extensions {
RunFunctionAndReturnSingleResult;
namespace {
void GetAudioDeviceDescriptions(bool for_input,
AudioDeviceDescriptions* device_descriptions) { … }
}
class AudioWaitingExtensionTest : public ExtensionApiTest { … };
class WebrtcAudioPrivateTest : public AudioWaitingExtensionTest { … };
#if !BUILDFLAG(IS_MAC)
IN_PROC_BROWSER_TEST_F(WebrtcAudioPrivateTest, GetSinks) { … }
#endif
IN_PROC_BROWSER_TEST_F(WebrtcAudioPrivateTest, GetAssociatedSink) { … }
IN_PROC_BROWSER_TEST_F(WebrtcAudioPrivateTest, TriggerEvent) { … }
class HangoutServicesBrowserTest : public AudioWaitingExtensionTest { … };
#if BUILDFLAG(ENABLE_HANGOUT_SERVICES_EXTENSION)
IN_PROC_BROWSER_TEST_F(HangoutServicesBrowserTest,
RunComponentExtensionTest) {
constexpr char kLogUploadUrlPath[] = "/upload_webrtc_log";
https_server().RegisterRequestHandler(base::BindLambdaForTesting(
[&](const net::test_server::HttpRequest& request)
-> std::unique_ptr<net::test_server::HttpResponse> {
if (request.relative_url == kLogUploadUrlPath) {
std::unique_ptr<net::test_server::BasicHttpResponse> response =
std::make_unique<net::test_server::BasicHttpResponse>();
response->set_code(net::HTTP_OK);
response->set_content("report_id");
return std::move(response);
}
return nullptr;
}));
ASSERT_TRUE(https_server().Start());
ASSERT_TRUE(ui_test_utils::NavigateToURL(
browser(),
https_server().GetURL("any-subdomain.google.com",
"/extensions/hangout_services_test.html")));
WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents();
WaitUntilAudioIsPlaying(tab);
g_browser_process->webrtc_log_uploader()->SetUploadUrlForTesting(
https_server().GetURL("any-subdomain.google.com", kLogUploadUrlPath));
ASSERT_TRUE(content::ExecJs(tab, "browsertestRunAllTests();"));
content::TitleWatcher title_watcher(tab, u"success");
title_watcher.AlsoWaitForTitle(u"failure");
std::u16string result = title_watcher.WaitAndGetTitle();
EXPECT_EQ(u"success", result);
}
#endif
}