|  | // Copyright 2020 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 "third_party/blink/public/common/tokens/tokens_mojom_traits.h" | 
|  |  | 
|  | #include "base/unguessable_token.h" | 
|  | #include "mojo/public/cpp/test_support/test_utils.h" | 
|  | #include "testing/gtest/include/gtest/gtest.h" | 
|  | #include "third_party/blink/public/common/tokens/tokens.h" | 
|  | #include "third_party/blink/public/mojom/tokens/tokens.mojom.h" | 
|  |  | 
|  | namespace mojo { | 
|  |  | 
|  | namespace { | 
|  |  | 
|  | // Tests round-trip serialization for the given TokenType of a given | 
|  | // MultiTokenType. | 
|  | template <typename MultiTokenType, typename MojomType, typename TokenType> | 
|  | void ExpectSerializationWorks() { | 
|  | base::UnguessableToken raw_token = base::UnguessableToken::Create(); | 
|  | TokenType typed_token(raw_token); | 
|  | MultiTokenType multi_token(typed_token); | 
|  |  | 
|  | MultiTokenType deserialized; | 
|  | EXPECT_TRUE(::mojo::test::SerializeAndDeserialize<MojomType>(multi_token, | 
|  | deserialized)); | 
|  | EXPECT_TRUE(deserialized.template Is<TokenType>()); | 
|  | EXPECT_EQ(multi_token, deserialized); | 
|  | EXPECT_EQ(multi_token.template GetAs<TokenType>(), | 
|  | deserialized.template GetAs<TokenType>()); | 
|  | EXPECT_EQ(raw_token, deserialized.value()); | 
|  | } | 
|  |  | 
|  | }  // namespace | 
|  |  | 
|  | TEST(FrameTokenTest, MojomTraits) { | 
|  | ExpectSerializationWorks<blink::FrameToken, blink::mojom::FrameToken, | 
|  | blink::LocalFrameToken>(); | 
|  | ExpectSerializationWorks<blink::FrameToken, blink::mojom::FrameToken, | 
|  | blink::RemoteFrameToken>(); | 
|  | } | 
|  |  | 
|  | TEST(WorkerTokenTest, MojomTraits) { | 
|  | ExpectSerializationWorks<blink::WorkerToken, blink::mojom::WorkerToken, | 
|  | blink::DedicatedWorkerToken>(); | 
|  | ExpectSerializationWorks<blink::WorkerToken, blink::mojom::WorkerToken, | 
|  | blink::ServiceWorkerToken>(); | 
|  | ExpectSerializationWorks<blink::WorkerToken, blink::mojom::WorkerToken, | 
|  | blink::SharedWorkerToken>(); | 
|  | } | 
|  |  | 
|  | TEST(WorkletTokenTest, MojomTraits) { | 
|  | ExpectSerializationWorks<blink::WorkletToken, blink::mojom::WorkletToken, | 
|  | blink::AnimationWorkletToken>(); | 
|  | ExpectSerializationWorks<blink::WorkletToken, blink::mojom::WorkletToken, | 
|  | blink::AudioWorkletToken>(); | 
|  | ExpectSerializationWorks<blink::WorkletToken, blink::mojom::WorkletToken, | 
|  | blink::LayoutWorkletToken>(); | 
|  | ExpectSerializationWorks<blink::WorkletToken, blink::mojom::WorkletToken, | 
|  | blink::PaintWorkletToken>(); | 
|  | } | 
|  |  | 
|  | TEST(ExecutionContextTokenTest, MojomTraits) { | 
|  | ExpectSerializationWorks<blink::ExecutionContextToken, | 
|  | blink::mojom::ExecutionContextToken, | 
|  | blink::LocalFrameToken>(); | 
|  | ExpectSerializationWorks<blink::ExecutionContextToken, | 
|  | blink::mojom::ExecutionContextToken, | 
|  | blink::DedicatedWorkerToken>(); | 
|  | ExpectSerializationWorks<blink::ExecutionContextToken, | 
|  | blink::mojom::ExecutionContextToken, | 
|  | blink::ServiceWorkerToken>(); | 
|  | ExpectSerializationWorks<blink::ExecutionContextToken, | 
|  | blink::mojom::ExecutionContextToken, | 
|  | blink::SharedWorkerToken>(); | 
|  | ExpectSerializationWorks<blink::ExecutionContextToken, | 
|  | blink::mojom::ExecutionContextToken, | 
|  | blink::AnimationWorkletToken>(); | 
|  | ExpectSerializationWorks<blink::ExecutionContextToken, | 
|  | blink::mojom::ExecutionContextToken, | 
|  | blink::AudioWorkletToken>(); | 
|  | ExpectSerializationWorks<blink::ExecutionContextToken, | 
|  | blink::mojom::ExecutionContextToken, | 
|  | blink::LayoutWorkletToken>(); | 
|  | ExpectSerializationWorks<blink::ExecutionContextToken, | 
|  | blink::mojom::ExecutionContextToken, | 
|  | blink::PaintWorkletToken>(); | 
|  | } | 
|  |  | 
|  | }  // namespace mojo |