blob: a54e5581818721eddcc4567e17c771689f9d8080 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "extensions/common/api/messaging/messaging_util.h"
#include "base/feature_list.h"
#include "extensions/common/extension_features.h"
#include "extensions/common/mojom/message_port.mojom-shared.h"
namespace extensions::messaging_util {
mojom::SerializationFormat GetSerializationFormat(
const Extension* extension,
mojom::ChannelType channel_type) {
if (!extension) {
// TODO(crbug.com/40321352): Document when this is possible.
return mojom::SerializationFormat::kJson;
}
switch (channel_type) {
case mojom::ChannelType::kSendMessage:
case mojom::ChannelType::kConnect:
if (base::FeatureList::IsEnabled(
extensions_features::kStructuredCloningForMessaging)) {
return mojom::SerializationFormat::kStructuredClone;
}
return mojom::SerializationFormat::kJson;
case mojom::ChannelType::kNative:
// Native messaging hosts (external processes) generally only support JSON
// parsing. They do not have access to the Blink's engine to deserialize
// Structured Clone data.
case mojom::ChannelType::kSendRequest:
// `kSendRequest` is a deprecated channel type that is not supported to
// use Structured Clone data.
return mojom::SerializationFormat::kJson;
default:
NOTREACHED();
}
}
} // namespace extensions::messaging_util