blob: 060b3039937102b6a7d9a1c84ce65f4de1baa07a [file] [log] [blame]
// Copyright 2019 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.
#ifndef EXTENSIONS_COMMON_API_MESSAGING_MESSAGING_ENDPOINT_H_
#define EXTENSIONS_COMMON_API_MESSAGING_MESSAGING_ENDPOINT_H_
#include <string>
#include "base/debug/crash_logging.h"
#include "extensions/common/extension_id.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
namespace extensions {
struct MessagingEndpoint {
// Type of the messaging source or destination - i.e., the type of the
// component which talks to a messaging channel.
enum class Type {
// An extension.
kExtension = 0,
// A web page or a content script or a hosted app.
kTab = 1,
// A native application.
kNativeApp = 2,
// This item must be equal to the last actual enum item.
kLast = kNativeApp,
};
static MessagingEndpoint ForExtension(ExtensionId extension_id);
static MessagingEndpoint ForContentScript(ExtensionId extension_id);
static MessagingEndpoint ForWebPage();
static MessagingEndpoint ForNativeApp(std::string native_app_name);
MessagingEndpoint();
MessagingEndpoint(const MessagingEndpoint&);
MessagingEndpoint(MessagingEndpoint&&);
MessagingEndpoint& operator=(const MessagingEndpoint&);
~MessagingEndpoint();
Type type = Type::kExtension;
// Identifier of the extension (or the content script). It is required for
// |type| of kExtension. For |type| of kTab, it is set if the endpoint is a
// content script (otherwise, it's the web page).
absl::optional<ExtensionId> extension_id;
// Name of the native application. It is required for |type| of kNativeApp.
// It is not used for other types.
absl::optional<std::string> native_app_name;
};
namespace debug {
class ScopedMessagingEndpointCrashKeys {
public:
explicit ScopedMessagingEndpointCrashKeys(const MessagingEndpoint& endpoint);
~ScopedMessagingEndpointCrashKeys();
ScopedMessagingEndpointCrashKeys(const ScopedMessagingEndpointCrashKeys&) =
delete;
ScopedMessagingEndpointCrashKeys& operator=(
const ScopedMessagingEndpointCrashKeys&) = delete;
private:
base::debug::ScopedCrashKeyString type_;
base::debug::ScopedCrashKeyString extension_id_or_app_name_;
};
} // namespace debug
} // namespace extensions
#endif // EXTENSIONS_COMMON_API_MESSAGING_MESSAGING_ENDPOINT_H_