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