1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <memory>
6
7 #include "base/test/scoped_feature_list.h"
8 #include "content/browser/direct_sockets/direct_sockets_service_impl.h"
9 #include "content/public/common/content_features.h"
10 #include "content/public/test/test_renderer_host.h"
11 #include "net/base/ip_address.h"
12 #include "net/base/net_errors.h"
13 #include "third_party/blink/public/mojom/direct_sockets/direct_sockets.mojom.h"
14
15 namespace content {
16
17 class DirectSocketsUnitTest : public RenderViewHostTestHarness {
18 public:
DirectSocketsUnitTest()19 DirectSocketsUnitTest() {
20 feature_list_.InitAndEnableFeature(features::kDirectSockets);
21 }
22 ~DirectSocketsUnitTest() override = default;
23
SetUp()24 void SetUp() override {
25 RenderViewHostTestHarness::SetUp();
26 direct_sockets_service_ =
27 std::make_unique<DirectSocketsServiceImpl>(*main_rfh());
28 }
29
direct_sockets_service()30 DirectSocketsServiceImpl& direct_sockets_service() {
31 return *direct_sockets_service_;
32 }
33
ValidateOptions(const blink::mojom::DirectSocketOptions & options)34 net::Error ValidateOptions(const blink::mojom::DirectSocketOptions& options) {
35 net::IPAddress remote_address;
36 return direct_sockets_service().ValidateOptions(options, remote_address);
37 }
38
39 private:
40 base::test::ScopedFeatureList feature_list_;
41 std::unique_ptr<DirectSocketsServiceImpl> direct_sockets_service_;
42 };
43
TEST_F(DirectSocketsUnitTest,RenderFrameDeleted)44 TEST_F(DirectSocketsUnitTest, RenderFrameDeleted) {
45 direct_sockets_service().RenderFrameDeleted(main_rfh());
46
47 blink::mojom::DirectSocketOptions options;
48 EXPECT_EQ(ValidateOptions(options), net::ERR_CONTEXT_SHUT_DOWN);
49 }
50
TEST_F(DirectSocketsUnitTest,WebContentsDestroyed)51 TEST_F(DirectSocketsUnitTest, WebContentsDestroyed) {
52 direct_sockets_service().WebContentsDestroyed();
53
54 blink::mojom::DirectSocketOptions options;
55 EXPECT_EQ(ValidateOptions(options), net::ERR_CONTEXT_SHUT_DOWN);
56 }
57
58 // TODO(crbug.com/1119597): Allow the user to enter the address.
TEST_F(DirectSocketsUnitTest,RemoteAddressCurrentlyRequired)59 TEST_F(DirectSocketsUnitTest, RemoteAddressCurrentlyRequired) {
60 blink::mojom::DirectSocketOptions options;
61 EXPECT_EQ(ValidateOptions(options), net::ERR_NAME_NOT_RESOLVED);
62 }
63
64 } // namespace content
65