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 "services/network/public/cpp/isolation_info_mojom_traits.h"
6 
7 #include <vector>
8 
9 #include "base/optional.h"
10 #include "mojo/public/cpp/test_support/test_utils.h"
11 #include "net/base/isolation_info.h"
12 #include "net/cookies/site_for_cookies.h"
13 #include "services/network/public/mojom/isolation_info.mojom.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15 #include "url/gurl.h"
16 #include "url/origin.h"
17 
18 namespace mojo {
19 
TEST(IsolationInfoMojomTraitsTest,SerializeAndDeserialize)20 TEST(IsolationInfoMojomTraitsTest, SerializeAndDeserialize) {
21   const url::Origin kOrigin1 = url::Origin::Create(GURL("https://a.test/"));
22   const url::Origin kOrigin2 = url::Origin::Create(GURL("https://b.test/"));
23   std::vector<net::IsolationInfo> keys = {
24       net::IsolationInfo(),
25       net::IsolationInfo::CreateTransient(),
26       net::IsolationInfo::CreateOpaqueAndNonTransient(),
27       net::IsolationInfo::Create(net::IsolationInfo::RequestType::kMainFrame,
28                                  kOrigin1, kOrigin1,
29                                  net::SiteForCookies::FromOrigin(kOrigin1)),
30       net::IsolationInfo::Create(net::IsolationInfo::RequestType::kSubFrame,
31                                  kOrigin1, kOrigin2,
32                                  net::SiteForCookies::FromOrigin(kOrigin1)),
33       net::IsolationInfo::Create(net::IsolationInfo::RequestType::kSubFrame,
34                                  kOrigin1, kOrigin2, net::SiteForCookies()),
35       net::IsolationInfo::Create(net::IsolationInfo::RequestType::kOther,
36                                  kOrigin1, kOrigin1,
37                                  net::SiteForCookies::FromOrigin(kOrigin1)),
38       net::IsolationInfo::Create(net::IsolationInfo::RequestType::kOther,
39                                  url::Origin(), url::Origin(),
40                                  net::SiteForCookies()),
41   };
42 
43   for (auto original : keys) {
44     net::IsolationInfo copied;
45     EXPECT_TRUE(
46         mojo::test::SerializeAndDeserialize<network::mojom::IsolationInfo>(
47             &original, &copied));
48     EXPECT_TRUE(original.IsEqualForTesting(copied));
49   }
50 }
51 
52 }  // namespace mojo
53