blob: c029b9ef223f44f106b78450ad8d47200ba1f82f [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/command_line.h"
#include "base/files/file_util.h"
#include "base/threading/platform_thread.h"
#include "build/build_config.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/browser/webrtc/webrtc_content_browsertest_base.h"
#include "content/public/common/content_switches.h"
#include "content/public/common/webrtc_ip_handling_policy.h"
#include "content/public/test/browser_test_utils.h"
#include "content/public/test/content_browser_test_utils.h"
#include "content/public/test/test_utils.h"
#include "media/audio/audio_manager.h"
#include "media/base/media_switches.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
namespace content {
namespace {
const char kPeerConnectionHtml[] = "/media/peerconnection-call.html";
} // namespace
// Disable these test cases for Android since in some bots, there exists only
// the loopback interface.
#if defined(OS_ANDROID)
#define MAYBE_WebRtcIPPermissionGrantedTest \
DISABLED_WebRtcIPPermissionGrantedTest
#define MAYBE_WebRtcIPPermissionDeniedTest DISABLED_WebRtcIPPermissionDeniedTest
#define MAYBE_WebRtcIPPolicyPublicAndPrivateInterfacesTest \
DISABLED_WebRtcIPPolicyPublicAndPrivateInterfacesTest
#define MAYBE_WebRtcIPPolicyPublicInterfaceOnlyTest \
DISABLED_WebRtcIPPolicyPublicInterfaceOnlyTest
#define MAYBE_WebRtcIPPolicyDisableUdpTest DISABLED_WebRtcIPPolicyDisableUdpTest
#else
#define MAYBE_WebRtcIPPermissionGrantedTest WebRtcIPPermissionGrantedTest
#define MAYBE_WebRtcIPPermissionDeniedTest WebRtcIPPermissionDeniedTest
#define MAYBE_WebRtcIPPolicyPublicAndPrivateInterfacesTest \
WebRtcIPPolicyPublicAndPrivateInterfacesTest
#define MAYBE_WebRtcIPPolicyPublicInterfaceOnlyTest \
WebRtcIPPolicyPublicInterfaceOnlyTest
#define MAYBE_WebRtcIPPolicyDisableUdpTest WebRtcIPPolicyDisableUdpTest
#endif
// This class tests the scenario when permission to access mic or camera is
// denied.
class MAYBE_WebRtcIPPermissionGrantedTest
: public WebRtcContentBrowserTestBase {
public:
MAYBE_WebRtcIPPermissionGrantedTest() {}
~MAYBE_WebRtcIPPermissionGrantedTest() override {}
void SetUpCommandLine(base::CommandLine* command_line) override {
WebRtcContentBrowserTestBase::SetUpCommandLine(command_line);
AppendUseFakeUIForMediaStreamFlag();
command_line->AppendSwitchASCII(switches::kForceWebRtcIPHandlingPolicy,
kWebRTCIPHandlingDefault);
}
};
// Loopback interface is the non-default private interface. Test that when
// device permission is granted, we should have loopback candidates.
IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcIPPermissionGrantedTest,
GatherLocalCandidates) {
MakeTypicalCall("callWithDevicePermissionGranted();", kPeerConnectionHtml);
}
// This class tests the scenario when permission to access mic or camera is
// denied.
class MAYBE_WebRtcIPPermissionDeniedTest : public WebRtcContentBrowserTestBase {
public:
MAYBE_WebRtcIPPermissionDeniedTest() {}
~MAYBE_WebRtcIPPermissionDeniedTest() override {}
void SetUpCommandLine(base::CommandLine* command_line) override {
WebRtcContentBrowserTestBase::SetUpCommandLine(command_line);
command_line->AppendSwitchASCII(switches::kForceWebRtcIPHandlingPolicy,
kWebRTCIPHandlingDefault);
}
};
// Test that when device permission is denied, only non-default interfaces are
// gathered even if the policy is "default".
IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcIPPermissionDeniedTest,
GatherLocalCandidates) {
MakeTypicalCall("callAndExpectNonLoopbackCandidates();", kPeerConnectionHtml);
}
// This class tests the scenario when ip handling policy is set to "public and
// private interfaces", the non-default private candidate is not gathered.
class MAYBE_WebRtcIPPolicyPublicAndPrivateInterfacesTest
: public WebRtcContentBrowserTestBase {
public:
MAYBE_WebRtcIPPolicyPublicAndPrivateInterfacesTest() {}
~MAYBE_WebRtcIPPolicyPublicAndPrivateInterfacesTest() override {}
void SetUpCommandLine(base::CommandLine* command_line) override {
WebRtcContentBrowserTestBase::SetUpCommandLine(command_line);
AppendUseFakeUIForMediaStreamFlag();
command_line->AppendSwitchASCII(
switches::kForceWebRtcIPHandlingPolicy,
kWebRTCIPHandlingDefaultPublicAndPrivateInterfaces);
}
};
IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcIPPolicyPublicAndPrivateInterfacesTest,
GatherLocalCandidates) {
MakeTypicalCall("callAndExpectNonLoopbackCandidates();", kPeerConnectionHtml);
}
// This class tests the scenario when ip handling policy is set to "public
// interface only", there is no candidate gathered as there is no stun server
// specified.
class MAYBE_WebRtcIPPolicyPublicInterfaceOnlyTest
: public WebRtcContentBrowserTestBase {
public:
MAYBE_WebRtcIPPolicyPublicInterfaceOnlyTest() {}
~MAYBE_WebRtcIPPolicyPublicInterfaceOnlyTest() override {}
void SetUpCommandLine(base::CommandLine* command_line) override {
WebRtcContentBrowserTestBase::SetUpCommandLine(command_line);
AppendUseFakeUIForMediaStreamFlag();
command_line->AppendSwitchASCII(
switches::kForceWebRtcIPHandlingPolicy,
kWebRTCIPHandlingDefaultPublicInterfaceOnly);
}
};
IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcIPPolicyPublicInterfaceOnlyTest,
GatherLocalCandidates) {
MakeTypicalCall("callWithNoCandidateExpected();", kPeerConnectionHtml);
}
// This class tests the scenario when ip handling policy is set to "disable
// non-proxied udp", there is no candidate gathered as there is no stun server
// specified.
class MAYBE_WebRtcIPPolicyDisableUdpTest : public WebRtcContentBrowserTestBase {
public:
MAYBE_WebRtcIPPolicyDisableUdpTest() {}
~MAYBE_WebRtcIPPolicyDisableUdpTest() override {}
void SetUpCommandLine(base::CommandLine* command_line) override {
WebRtcContentBrowserTestBase::SetUpCommandLine(command_line);
AppendUseFakeUIForMediaStreamFlag();
command_line->AppendSwitchASCII(switches::kForceWebRtcIPHandlingPolicy,
kWebRTCIPHandlingDisableNonProxiedUdp);
}
};
IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcIPPolicyDisableUdpTest,
GatherLocalCandidates) {
MakeTypicalCall("callWithNoCandidateExpected();", kPeerConnectionHtml);
}
} // namespace content