1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
content / browser / interest_group / auction_shared_storage_host.h [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_INTEREST_GROUP_AUCTION_SHARED_STORAGE_HOST_H_
#define CONTENT_BROWSER_INTEREST_GROUP_AUCTION_SHARED_STORAGE_HOST_H_
#include "content/common/content_export.h"
#include "content/services/auction_worklet/public/mojom/auction_shared_storage_host.mojom.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
namespace storage {
class SharedStorageManager;
} // namespace storage
namespace content {
class RenderFrameHostImpl;
// Implements the mojo interface used by the auction worklets, to receive
// shared storage requests and then pass them on to `SharedStorageManager` to
// write to the database.
class CONTENT_EXPORT AuctionSharedStorageHost
: public auction_worklet::mojom::AuctionSharedStorageHost {
public:
explicit AuctionSharedStorageHost(
storage::SharedStorageManager* shared_storage_manager);
AuctionSharedStorageHost(const AuctionSharedStorageHost&) = delete;
AuctionSharedStorageHost& operator=(const AuctionSharedStorageHost&) = delete;
~AuctionSharedStorageHost() override;
// Binds a new pending receiver for a worklet, allowing messages to be sent
// and processed.
void BindNewReceiver(
RenderFrameHostImpl* auction_runner_rfh,
const url::Origin& worklet_origin,
mojo::PendingReceiver<auction_worklet::mojom::AuctionSharedStorageHost>
receiver);
// auction_worklet::mojom::AuctionSharedStorageHost:
void Set(const std::u16string& key,
const std::u16string& value,
bool ignore_if_present,
auction_worklet::mojom::AuctionWorkletFunction
source_auction_worklet_function) override;
void Append(const std::u16string& key,
const std::u16string& value,
auction_worklet::mojom::AuctionWorkletFunction
source_auction_worklet_function) override;
void Delete(const std::u16string& key,
auction_worklet::mojom::AuctionWorkletFunction
source_auction_worklet_function) override;
void Clear(auction_worklet::mojom::AuctionWorkletFunction
source_auction_worklet_function) override;
private:
struct ReceiverContext;
mojo::ReceiverSet<auction_worklet::mojom::AuctionSharedStorageHost,
ReceiverContext>
receiver_set_;
// `this` is owned by a `DocumentService`, and `shared_storage_manager_` is
// owned by the `StoragePartitionImpl`. Thus, `shared_storage_manager_` must
// outlive `this`.
raw_ptr<storage::SharedStorageManager> shared_storage_manager_;
};
} // namespace content
#endif // CONTENT_BROWSER_INTEREST_GROUP_AUCTION_SHARED_STORAGE_HOST_H_