#include "chrome/browser/enterprise/data_protection/data_protection_clipboard_utils.h"
#include <algorithm>
#include <memory>
#include <queue>
#include "base/no_destructor.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/enterprise/connectors/analysis/content_analysis_delegate.h"
#include "chrome/browser/enterprise/data_controls/chrome_rules_service.h"
#include "chrome/browser/enterprise/data_controls/desktop_data_controls_dialog.h"
#include "chrome/browser/enterprise/data_controls/desktop_data_controls_dialog_factory.h"
#include "chrome/browser/enterprise/data_controls/reporting_service.h"
#include "chrome/browser/enterprise/data_protection/paste_allowed_request.h"
#include "components/enterprise/common/files_scan_data.h"
#include "components/enterprise/connectors/core/connectors_prefs.h"
#include "components/enterprise/content/clipboard_restriction_service.h"
#include "components/enterprise/data_controls/content/browser/last_replaced_clipboard_data.h"
#include "components/enterprise/data_controls/core/browser/prefs.h"
#include "components/policy/core/common/policy_types.h"
#include "components/strings/grit/components_strings.h"
#include "content/public/browser/clipboard_types.h"
#include "ui/base/clipboard/clipboard.h"
#include "ui/base/clipboard/clipboard_monitor.h"
#include "ui/base/clipboard/clipboard_observer.h"
#include "ui/base/clipboard/clipboard_sequence_number_token.h"
#include "ui/base/clipboard/clipboard_util.h"
#include "ui/base/data_transfer_policy/data_transfer_policy_controller.h"
#include "ui/base/l10n/l10n_util.h"
namespace enterprise_data_protection {
namespace {
void HandleFileData(
content::WebContents* web_contents,
enterprise_connectors::ContentAnalysisDelegate::Data dialog_data,
content::ContentBrowserClient::IsClipboardPasteAllowedCallback callback) { … }
void HandleStringData(
content::WebContents* web_contents,
content::ClipboardPasteData clipboard_paste_data,
enterprise_connectors::ContentAnalysisDelegate::Data dialog_data,
content::ContentBrowserClient::IsClipboardPasteAllowedCallback callback) { … }
bool SkipDataControlOrContentAnalysisChecks(
const content::ClipboardEndpoint& main_endpoint) { … }
void PasteIfAllowedByContentAnalysis(
content::WebContents* web_contents,
const content::ClipboardEndpoint& source,
const content::ClipboardEndpoint& destination,
const content::ClipboardMetadata& metadata,
content::ClipboardPasteData clipboard_paste_data,
content::ContentBrowserClient::IsClipboardPasteAllowedCallback callback) { … }
void MaybeReportDataControlsPaste(const content::ClipboardEndpoint& source,
const content::ClipboardEndpoint& destination,
const content::ClipboardMetadata& metadata,
const data_controls::Verdict& verdict,
bool bypassed = false) { … }
void MaybeReportDataControlsCopy(const content::ClipboardEndpoint& source,
const content::ClipboardMetadata& metadata,
const data_controls::Verdict& verdict,
bool bypassed = false) { … }
void OnDataControlsPasteWarning(
const content::ClipboardEndpoint& source,
const content::ClipboardEndpoint& destination,
const content::ClipboardMetadata& metadata,
data_controls::Verdict verdict,
content::ClipboardPasteData clipboard_paste_data,
content::ContentBrowserClient::IsClipboardPasteAllowedCallback callback,
bool bypassed) { … }
void PasteIfAllowedByDataControls(
const content::ClipboardEndpoint& source,
const content::ClipboardEndpoint& destination,
const content::ClipboardMetadata& metadata,
content::ClipboardPasteData clipboard_paste_data,
content::ContentBrowserClient::IsClipboardPasteAllowedCallback callback) { … }
void OnDlpRulesCheckDone(
const content::ClipboardEndpoint& source,
const content::ClipboardEndpoint& destination,
const content::ClipboardMetadata& metadata,
content::ClipboardPasteData clipboard_paste_data,
content::ContentBrowserClient::IsClipboardPasteAllowedCallback callback,
bool allowed) { … }
void IsCopyToOSClipboardRestricted(
const content::ClipboardEndpoint& source,
const content::ClipboardMetadata& metadata,
const content::ClipboardPasteData& data,
content::ContentBrowserClient::IsClipboardCopyAllowedCallback callback) { … }
void OnDataControlsCopyWarning(
const content::ClipboardEndpoint& source,
const content::ClipboardMetadata& metadata,
const content::ClipboardPasteData& data,
data_controls::Verdict verdict,
content::ContentBrowserClient::IsClipboardCopyAllowedCallback callback,
bool bypassed) { … }
void IsCopyRestrictedByDialog(
const content::ClipboardEndpoint& source,
const content::ClipboardMetadata& metadata,
const content::ClipboardPasteData& data,
content::ContentBrowserClient::IsClipboardCopyAllowedCallback callback) { … }
}
void PasteIfAllowedByPolicy(
const content::ClipboardEndpoint& source,
const content::ClipboardEndpoint& destination,
const content::ClipboardMetadata& metadata,
content::ClipboardPasteData clipboard_paste_data,
content::ContentBrowserClient::IsClipboardPasteAllowedCallback callback) { … }
void IsClipboardCopyAllowedByPolicy(
const content::ClipboardEndpoint& source,
const content::ClipboardMetadata& metadata,
const content::ClipboardPasteData& data,
content::ContentBrowserClient::IsClipboardCopyAllowedCallback callback) { … }
void ReplaceSameTabClipboardDataIfRequiredByPolicy(
ui::ClipboardSequenceNumberToken seqno,
content::ClipboardPasteData& data) { … }
}