blob: feeb7724d1c48dcf0ca7b5201f254cf3a8fd627a [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/optional.h"
#include "extensions/common/extension_id.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).
base::Optional<ExtensionId> extension_id;
// Name of the native application. It is required for |type| of kNativeApp.
// It is not used for other types.
base::Optional<std::string> native_app_name;
};
} // namespace extensions
#endif // EXTENSIONS_COMMON_API_MESSAGING_MESSAGING_ENDPOINT_H_