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
|
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_PRIVACY_SANDBOX_PRIVACY_SANDBOX_QUEUE_MANAGER_H_
#define CHROME_BROWSER_PRIVACY_SANDBOX_PRIVACY_SANDBOX_QUEUE_MANAGER_H_
#include "base/memory/raw_ptr.h"
#include "chrome/browser/ui/privacy_sandbox/privacy_sandbox_prompt_helper.h"
#include "chrome/browser/user_education/user_education_service.h"
#include "chrome/browser/user_education/user_education_service_factory.h"
#include "components/user_education/common/product_messaging_controller.h"
DECLARE_REQUIRED_NOTICE_IDENTIFIER(kPrivacySandboxNotice);
namespace privacy_sandbox {
// Manages all interfacing with UserEducation code.
class PrivacySandboxQueueManager {
public:
explicit PrivacySandboxQueueManager(Profile* profile);
PrivacySandboxQueueManager(); // Default constructor.
virtual ~PrivacySandboxQueueManager();
// Triggered by product messaging code when turn in queue has arrived.
// Moves the handle to temporary location to hold it.
void HoldQueueHandle(
user_education::RequiredNoticePriorityHandle messaging_priority_handle);
// If the notice is in the queue, it will unqueue it. Otherwise, if the handle
// is being held, it will release the handle.
// Marked virtual for tests.
virtual void MaybeUnqueueNotice();
// If a prompt is required and we are not already in the queue or holding the
// handle, will add the notice to the product messaging controller queue.
// Marked virtual for tests.
virtual void MaybeQueueNotice();
// Tracks whether the queue is meant to be suppressed or not. If set to true,
// queueing and unqueueing attempts will be ignored, but the existing queue
// will be unaffected.
void SetSuppressQueue(bool suppress_queue);
// Sets the shown flag on the product messaging side.
void SetQueueHandleShown();
// Returns true if the Privacy Sandbox notice is in queue. Exposed for testing
// purposes.
bool IsNoticeQueued();
// Returns instance of product messaging controller. Exposed for testing
// purposes.
user_education::ProductMessagingController* GetProductMessagingController();
// Returns true if the handle is currently being held.
bool IsHoldingHandle();
// Emits queue state metrics when IsHoldingHandle check fails in
// DidFinishNavigation.
void MaybeEmitQueueStateMetrics();
private:
raw_ptr<user_education::ProductMessagingController>
product_messaging_controller_;
raw_ptr<Profile> profile_;
// Temporary flag signifying not to requeue if the prompt has been suppressed.
// TODO(crbug.com/370804492): When we add DMA notice to queue, remove this.
bool suppress_queue_ = false;
user_education::RequiredNoticePriorityHandle notice_handle_;
int handle_check_failed_count_ = 0;
base::WeakPtrFactory<PrivacySandboxQueueManager> weak_factory_{this};
};
} // namespace privacy_sandbox
#endif // CHROME_BROWSER_PRIVACY_SANDBOX_PRIVACY_SANDBOX_QUEUE_MANAGER_H_
|