blob: f209adc8e2dd2edc512b6b63b85cb20628539633 [file] [log] [blame]
// Copyright 2020 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 COMPONENTS_PERFORMANCE_MANAGER_SERVICE_WORKER_CLIENT_H_
#define COMPONENTS_PERFORMANCE_MANAGER_SERVICE_WORKER_CLIENT_H_
#include "content/public/browser/global_routing_id.h"
#include "content/public/browser/service_worker_client_info.h"
#include "third_party/blink/public/common/tokens/tokens.h"
#include "third_party/blink/public/mojom/service_worker/service_worker_client.mojom.h"
// Represents a client of a service worker node.
//
// This class is essentially a tagged union where only the field corresponding
// to the |type()| can be accessed.
class ServiceWorkerClient {
public:
explicit ServiceWorkerClient(
content::GlobalFrameRoutingId render_frame_host_id);
explicit ServiceWorkerClient(
blink::DedicatedWorkerToken dedicated_worker_token);
explicit ServiceWorkerClient(blink::SharedWorkerToken shared_worker_token);
ServiceWorkerClient(const ServiceWorkerClient& other);
ServiceWorkerClient& operator=(const ServiceWorkerClient& other);
~ServiceWorkerClient();
blink::mojom::ServiceWorkerClientType type() const { return type_; }
content::GlobalFrameRoutingId GetRenderFrameHostId() const;
blink::DedicatedWorkerToken GetDedicatedWorkerToken() const;
blink::SharedWorkerToken GetSharedWorkerToken() const;
private:
// The client type.
blink::mojom::ServiceWorkerClientType type_;
union {
// The frame tree node ID, if this is a window client.
content::GlobalFrameRoutingId render_frame_host_id_;
// The token of the client, if this is a worker client.
content::DedicatedOrSharedWorkerToken worker_token_;
};
};
#endif // COMPONENTS_PERFORMANCE_MANAGER_SERVICE_WORKER_CLIENT_H_