blob: 9b05019e40f81b68264f782b6f9caed373416df2 [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/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 "content/test/webrtc_content_browsertest_base.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_WebRtcBrowserIPPermissionGrantedTest \
DISABLED_WebRtcBrowserIPPermissionGrantedTest
#define MAYBE_WebRtcBrowserIPPermissionDeniedTest \
DISABLED_WebRtcBrowserIPPermissionDeniedTest
#define MAYBE_WebRtcBrowserIPPolicyPublicAndPrivateInterfacesTest \
DISABLED_WebRtcBrowserIPPolicyPublicAndPrivateInterfacesTest
#define MAYBE_WebRtcBrowserIPPolicyPublicInterfaceOnlyTest \
DISABLED_WebRtcBrowserIPPolicyPublicInterfaceOnlyTest
#define MAYBE_WebRtcBrowserIPPolicyDisableUdpTest \
DISABLED_WebRtcBrowserIPPolicyDisableUdpTest
#else
#define MAYBE_WebRtcBrowserIPPermissionGrantedTest \
WebRtcBrowserIPPermissionGrantedTest
#define MAYBE_WebRtcBrowserIPPermissionDeniedTest \
WebRtcBrowserIPPermissionDeniedTest
#define MAYBE_WebRtcBrowserIPPolicyPublicAndPrivateInterfacesTest \
WebRtcBrowserIPPolicyPublicAndPrivateInterfacesTest
#define MAYBE_WebRtcBrowserIPPolicyPublicInterfaceOnlyTest \
WebRtcBrowserIPPolicyPublicInterfaceOnlyTest
#define MAYBE_WebRtcBrowserIPPolicyDisableUdpTest \
WebRtcBrowserIPPolicyDisableUdpTest
#endif
// This class tests the scenario when permission to access mic or camera is
// denied.
class MAYBE_WebRtcBrowserIPPermissionGrantedTest
: public WebRtcContentBrowserTest {
public:
MAYBE_WebRtcBrowserIPPermissionGrantedTest() {}
~MAYBE_WebRtcBrowserIPPermissionGrantedTest() override {}
void SetUpCommandLine(base::CommandLine* command_line) override {
WebRtcContentBrowserTest::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_WebRtcBrowserIPPermissionGrantedTest,
GatherLocalCandidates) {
// Disable this test on XP, crbug.com/542416.
if (OnWinXp())
return;
MakeTypicalCall("callWithDevicePermissionGranted();", kPeerConnectionHtml);
}
// This class tests the scenario when permission to access mic or camera is
// denied.
class MAYBE_WebRtcBrowserIPPermissionDeniedTest
: public WebRtcContentBrowserTest {
public:
MAYBE_WebRtcBrowserIPPermissionDeniedTest() {}
~MAYBE_WebRtcBrowserIPPermissionDeniedTest() override {}
void SetUpCommandLine(base::CommandLine* command_line) override {
WebRtcContentBrowserTest::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_WebRtcBrowserIPPermissionDeniedTest,
GatherLocalCandidates) {
// Disable this test on XP, crbug.com/542416.
if (OnWinXp())
return;
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_WebRtcBrowserIPPolicyPublicAndPrivateInterfacesTest
: public WebRtcContentBrowserTest {
public:
MAYBE_WebRtcBrowserIPPolicyPublicAndPrivateInterfacesTest() {}
~MAYBE_WebRtcBrowserIPPolicyPublicAndPrivateInterfacesTest() override {}
void SetUpCommandLine(base::CommandLine* command_line) override {
WebRtcContentBrowserTest::SetUpCommandLine(command_line);
AppendUseFakeUIForMediaStreamFlag();
command_line->AppendSwitchASCII(
switches::kForceWebRtcIPHandlingPolicy,
kWebRTCIPHandlingDefaultPublicAndPrivateInterfaces);
}
};
IN_PROC_BROWSER_TEST_F(
MAYBE_WebRtcBrowserIPPolicyPublicAndPrivateInterfacesTest,
GatherLocalCandidates) {
// Disable this test on XP, crbug.com/542416.
if (OnWinXp())
return;
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_WebRtcBrowserIPPolicyPublicInterfaceOnlyTest
: public WebRtcContentBrowserTest {
public:
MAYBE_WebRtcBrowserIPPolicyPublicInterfaceOnlyTest() {}
~MAYBE_WebRtcBrowserIPPolicyPublicInterfaceOnlyTest() override {}
void SetUpCommandLine(base::CommandLine* command_line) override {
WebRtcContentBrowserTest::SetUpCommandLine(command_line);
AppendUseFakeUIForMediaStreamFlag();
command_line->AppendSwitchASCII(
switches::kForceWebRtcIPHandlingPolicy,
kWebRTCIPHandlingDefaultPublicInterfaceOnly);
}
};
IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcBrowserIPPolicyPublicInterfaceOnlyTest,
GatherLocalCandidates) {
// Disable this test on XP, crbug.com/542416.
if (OnWinXp())
return;
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_WebRtcBrowserIPPolicyDisableUdpTest
: public WebRtcContentBrowserTest {
public:
MAYBE_WebRtcBrowserIPPolicyDisableUdpTest() {}
~MAYBE_WebRtcBrowserIPPolicyDisableUdpTest() override {}
void SetUpCommandLine(base::CommandLine* command_line) override {
WebRtcContentBrowserTest::SetUpCommandLine(command_line);
AppendUseFakeUIForMediaStreamFlag();
command_line->AppendSwitchASCII(switches::kForceWebRtcIPHandlingPolicy,
kWebRTCIPHandlingDisableNonProxiedUdp);
}
};
IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcBrowserIPPolicyDisableUdpTest,
GatherLocalCandidates) {
// Disable this test on XP, crbug.com/542416.
if (OnWinXp())
return;
MakeTypicalCall("callWithNoCandidateExpected();", kPeerConnectionHtml);
}
} // namespace content