| // Copyright 2019 The Chromium Authors |
| // 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_PORT_CONTEXT_H_ |
| #define EXTENSIONS_COMMON_API_MESSAGING_PORT_CONTEXT_H_ |
| |
| #include <stddef.h> |
| |
| #include <optional> |
| #include <string> |
| |
| #include "base/debug/crash_logging.h" |
| #include "extensions/common/extension_id.h" |
| |
| namespace extensions { |
| |
| // A port can refer to a RenderFrame (FrameContext) or a Service Worker |
| // (WorkerContext) or a native messaging host. |
| struct PortContext { |
| public: |
| // This constructor is needed by our IPC code and tests. Clients should use |
| // factory functions instead. |
| PortContext(); |
| |
| ~PortContext(); |
| PortContext(const PortContext& other); |
| |
| struct FrameContext { |
| FrameContext(); |
| explicit FrameContext(int routing_id); |
| |
| auto operator<=>(const FrameContext&) const = default; |
| |
| // The routing id of the frame context. |
| // This may be IPC::mojom::kRoutingIdNone if the context is process-wide and |
| // isn't tied to a specific RenderFrame. |
| int routing_id; |
| }; |
| |
| struct WorkerContext { |
| WorkerContext(); |
| WorkerContext(int thread_id, |
| int64_t version_id, |
| int render_process_id, |
| const ExtensionId& extension_id); |
| |
| auto operator<=>(const WorkerContext&) const = default; |
| |
| int thread_id; |
| int64_t version_id; |
| int render_process_id; |
| ExtensionId extension_id; |
| }; |
| |
| auto operator<=>(const PortContext&) const = default; |
| |
| static PortContext ForFrame(int routing_id); |
| static PortContext ForWorker(int thread_id, |
| int64_t version_id, |
| int render_process_id, |
| const ExtensionId& extension_id); |
| static PortContext ForNativeHost(); |
| |
| bool is_for_render_frame() const { return frame.has_value(); } |
| bool is_for_service_worker() const { return worker.has_value(); } |
| bool is_for_native_host() const { return !frame && !worker; } |
| |
| std::optional<FrameContext> frame; |
| std::optional<WorkerContext> worker; |
| }; |
| |
| namespace debug { |
| |
| class ScopedPortContextCrashKeys { |
| public: |
| explicit ScopedPortContextCrashKeys(const PortContext& port_context); |
| ~ScopedPortContextCrashKeys(); |
| |
| private: |
| std::optional<base::debug::ScopedCrashKeyString> extension_id_; |
| }; |
| |
| } // namespace debug |
| |
| } // namespace extensions |
| |
| #endif // EXTENSIONS_COMMON_API_MESSAGING_PORT_CONTEXT_H_ |