1 // Copyright 2019 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 "services/network/public/cpp/network_isolation_key_mojom_traits.h"
6 
7 #include "base/stl_util.h"
8 #include "base/test/scoped_feature_list.h"
9 #include "mojo/public/cpp/test_support/test_utils.h"
10 #include "net/base/features.h"
11 #include "services/network/public/mojom/network_isolation_key.mojom.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13 #include "url/gurl.h"
14 #include "url/origin.h"
15 
16 namespace mojo {
17 
TEST(NetworkIsolationKeyMojomTraitsTest,SerializeAndDeserialize)18 TEST(NetworkIsolationKeyMojomTraitsTest, SerializeAndDeserialize) {
19   std::vector<net::NetworkIsolationKey> keys = {
20       net::NetworkIsolationKey(), net::NetworkIsolationKey::CreateTransient(),
21       net::NetworkIsolationKey::CreateOpaqueAndNonTransient(),
22       net::NetworkIsolationKey(url::Origin::Create(GURL("http://a.test/")),
23                                url::Origin::Create(GURL("http://b.test/")))};
24 
25   for (auto original : keys) {
26     SCOPED_TRACE(original.ToDebugString());
27     net::NetworkIsolationKey copied;
28     EXPECT_TRUE(mojo::test::SerializeAndDeserialize<
29                 network::mojom::NetworkIsolationKey>(&original, &copied));
30     EXPECT_EQ(original, copied);
31   }
32 }
33 
34 class NetworkIsolationKeyMojomTraitsWithFrameOriginTest : public testing::Test {
35  public:
NetworkIsolationKeyMojomTraitsWithFrameOriginTest()36   NetworkIsolationKeyMojomTraitsWithFrameOriginTest() {
37     feature_list_.InitAndEnableFeature(
38         net::features::kAppendFrameOriginToNetworkIsolationKey);
39   }
40 
41  private:
42   base::test::ScopedFeatureList feature_list_;
43 };
44 
TEST_F(NetworkIsolationKeyMojomTraitsWithFrameOriginTest,SerializeAndDeserialize)45 TEST_F(NetworkIsolationKeyMojomTraitsWithFrameOriginTest,
46        SerializeAndDeserialize) {
47   std::vector<net::NetworkIsolationKey> keys = {
48       net::NetworkIsolationKey(), net::NetworkIsolationKey::CreateTransient(),
49       net::NetworkIsolationKey::CreateOpaqueAndNonTransient(),
50       net::NetworkIsolationKey(url::Origin::Create(GURL("http://a.test/")),
51                                url::Origin::Create(GURL("http://b.test/"))),
52       net::NetworkIsolationKey(
53           url::Origin::Create(GURL("http://foo.a.test/")),
54           url::Origin::Create(GURL("http://bar.b.test/")))};
55 
56   for (auto original : keys) {
57     SCOPED_TRACE(original.ToDebugString());
58     net::NetworkIsolationKey copied;
59     EXPECT_TRUE(mojo::test::SerializeAndDeserialize<
60                 network::mojom::NetworkIsolationKey>(&original, &copied));
61     EXPECT_EQ(original, copied);
62     EXPECT_EQ(original.GetTopFrameSite(), copied.GetTopFrameSite());
63     EXPECT_EQ(original.GetFrameSite(), copied.GetFrameSite());
64     EXPECT_EQ(original.IsTransient(), copied.IsTransient());
65   }
66 }
67 
68 }  // namespace mojo
69