blob: b2f1c73b552d1d7e867fef4236dbaef3eb68ced5 [file] [log] [blame]
Giovanni Ortuño Urquidie0a77b42025-03-28 14:31:351// Copyright 2025 The Chromium Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CONTENT_BROWSER_RENDERER_HOST_COOKIE_ACCESS_OBSERVERS_H_
6#define CONTENT_BROWSER_RENDERER_HOST_COOKIE_ACCESS_OBSERVERS_H_
7
8#include "content/common/content_export.h"
9#include "content/public/browser/cookie_access_details.h"
10#include "mojo/public/cpp/bindings/receiver_set.h"
11#include "services/network/public/mojom/cookie_access_observer.mojom-forward.h"
12#include "services/network/public/mojom/cookie_access_observer.mojom.h"
13
14namespace content {
15
16// A thin wrapper around ReceiverSet that inherits from
17// mojom::CookieAccessObserver. Directly subclassing mojom::CookieAccessObserver
18// would force classes to have a public OnCookiesAccessed() method that doesn't
19// take a CookieAccessDetails::Source, and we don't want to expose that. If
20// other classes call OnCookiesAccessed() they need to pass a Source.
21class CONTENT_EXPORT CookieAccessObservers
22 : public network::mojom::CookieAccessObserver {
23 public:
24 using NotifyCookiesAccessedCallback = base::RepeatingCallback<void(
25 std::vector<network::mojom::CookieAccessDetailsPtr>,
26 CookieAccessDetails::Source)>;
27
28 explicit CookieAccessObservers(NotifyCookiesAccessedCallback callback);
29
30 CookieAccessObservers(const CookieAccessObservers&) = delete;
31 CookieAccessObservers& operator=(const CookieAccessObservers&) = delete;
32
33 ~CookieAccessObservers() override;
34
35 virtual void Add(
36 mojo::PendingReceiver<network::mojom::CookieAccessObserver> receiver,
37 CookieAccessDetails::Source source);
38
Giovanni Ortuño Urquidid2e5fab2025-04-02 20:44:0339 using PendingObserversWithContext = std::vector<
40 std::pair<mojo::PendingReceiver<network::mojom::CookieAccessObserver>,
41 CookieAccessDetails::Source>>;
42 virtual PendingObserversWithContext TakeReceiversWithContext();
Giovanni Ortuño Urquidie0a77b42025-03-28 14:31:3543
44 // network::mojom::CookieAccessObserver
45 void OnCookiesAccessed(std::vector<network::mojom::CookieAccessDetailsPtr>
46 details_vector) override;
47 void Clone(mojo::PendingReceiver<network::mojom::CookieAccessObserver>
48 observer) override;
49
50 private:
51 NotifyCookiesAccessedCallback callback_;
52
53 mojo::ReceiverSet<network::mojom::CookieAccessObserver,
54 CookieAccessDetails::Source>
55 cookie_observer_set_;
56};
57
58} // namespace content
59
60#endif // CONTENT_BROWSER_RENDERER_HOST_COOKIE_ACCESS_OBSERVERS_H_