|  | // 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_ |