|  | // Copyright 2022 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "content/public/browser/android/message_payload.h" | 
|  |  | 
|  | #include <cstddef> | 
|  | #include <memory> | 
|  | #include <string> | 
|  |  | 
|  | #include "testing/gtest/include/gtest/gtest.h" | 
|  | #include "third_party/blink/public/common/messaging/string_message_codec.h" | 
|  | #include "third_party/blink/public/common/messaging/transferable_message.h" | 
|  |  | 
|  | namespace content { | 
|  | namespace { | 
|  |  | 
|  | TEST(MessagePayloadTest, SelfTest_String) { | 
|  | std::u16string string = u"Hello"; | 
|  |  | 
|  | auto generated_message = android::ConvertToWebMessagePayloadFromJava( | 
|  | android::ConvertWebMessagePayloadToJava(string)); | 
|  | EXPECT_EQ(blink::WebMessagePayload(string), generated_message); | 
|  | } | 
|  |  | 
|  | TEST(MessagePayloadTest, SelfTest_ArrayBuffer) { | 
|  | std::vector<uint8_t> data(200, 0XFF); | 
|  | auto generated_message = android::ConvertToWebMessagePayloadFromJava( | 
|  | android::ConvertWebMessagePayloadToJava( | 
|  | blink::WebMessageArrayBufferPayload::CreateForTesting(data))); | 
|  | const auto& array_buffer = | 
|  | absl::get<std::unique_ptr<blink::WebMessageArrayBufferPayload>>( | 
|  | generated_message); | 
|  | EXPECT_EQ(data.size(), array_buffer->GetLength()); | 
|  | EXPECT_FALSE(array_buffer->GetAsSpanIfPossible()); | 
|  | std::vector<uint8_t> copied_data(data.size()); | 
|  | array_buffer->CopyInto(base::make_span(copied_data)); | 
|  | EXPECT_EQ(data, copied_data); | 
|  |  | 
|  | // Encode the message and decode it again. This time the ArrayBuffer should be | 
|  | // stored in Java ByteArray, which does not support |GetArrayBuffer|. | 
|  | auto generated_message2 = android::ConvertToWebMessagePayloadFromJava( | 
|  | android::ConvertWebMessagePayloadToJava(generated_message)); | 
|  | const auto& array_buffer2 = | 
|  | absl::get<std::unique_ptr<blink::WebMessageArrayBufferPayload>>( | 
|  | generated_message2); | 
|  | EXPECT_EQ(data.size(), array_buffer2->GetLength()); | 
|  | copied_data.clear(); | 
|  | copied_data.resize(data.size()); | 
|  | array_buffer->CopyInto(base::make_span(copied_data)); | 
|  | EXPECT_EQ(data, copied_data); | 
|  | } | 
|  |  | 
|  | TEST(MessagePayloadTest, SelfTest_ArrayBufferEmpty) { | 
|  | auto generated_message = android::ConvertToWebMessagePayloadFromJava( | 
|  | android::ConvertWebMessagePayloadToJava( | 
|  | blink::WebMessageArrayBufferPayload::CreateForTesting( | 
|  | std::vector<uint8_t>()))); | 
|  | EXPECT_EQ(absl::get<std::unique_ptr<blink::WebMessageArrayBufferPayload>>( | 
|  | generated_message) | 
|  | ->GetLength(), | 
|  | 0u); | 
|  | } | 
|  |  | 
|  | }  // namespace | 
|  | }  // namespace content |