blob: 05c47dd7ab30117eb9bffb9803ca71e8c2d3a3e4 [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 CHROME_BROWSER_CHROMEOS_POLICY_DLP_DATA_TRANSFER_DLP_CONTROLLER_H_
#define CHROME_BROWSER_CHROMEOS_POLICY_DLP_DATA_TRANSFER_DLP_CONTROLLER_H_
#include "base/callback.h"
#include "chrome/browser/chromeos/policy/dlp/dlp_clipboard_notifier.h"
#include "chrome/browser/chromeos/policy/dlp/dlp_drag_drop_notifier.h"
#include "ui/base/data_transfer_policy/data_transfer_policy_controller.h"
namespace ui {
class DataTransferEndpoint;
}
namespace policy {
class DlpRulesManager;
// DataTransferDlpController is responsible for preventing leaks of confidential
// data through clipboard data read or drag-and-drop by controlling read
// operations according to the rules of the Data leak prevention policy set by
// the admin.
class DataTransferDlpController : public ui::DataTransferPolicyController {
public:
// Creates an instance of the class.
// Indicates that restricting clipboard content and drag-n-drop is required.
// It's guaranteed that `dlp_rules_manager` controls the lifetime of
// DataTransferDlpController and outlives it.
static void Init(const DlpRulesManager& dlp_rules_manager);
DataTransferDlpController(const DataTransferDlpController&) = delete;
void operator=(const DataTransferDlpController&) = delete;
// ui::DataTransferPolicyController:
bool IsClipboardReadAllowed(
const ui::DataTransferEndpoint* const data_src,
const ui::DataTransferEndpoint* const data_dst) override;
void PasteIfAllowed(const ui::DataTransferEndpoint* const data_src,
const ui::DataTransferEndpoint* const data_dst,
content::WebContents* web_contents,
base::OnceCallback<void(bool)> callback) override;
bool IsDragDropAllowed(const ui::DataTransferEndpoint* const data_src,
const ui::DataTransferEndpoint* const data_dst,
const bool is_drop) override;
protected:
explicit DataTransferDlpController(const DlpRulesManager& dlp_rules_manager);
~DataTransferDlpController() override;
private:
virtual void NotifyBlockedPaste(
const ui::DataTransferEndpoint* const data_src,
const ui::DataTransferEndpoint* const data_dst);
virtual void WarnOnPaste(const ui::DataTransferEndpoint* const data_src,
const ui::DataTransferEndpoint* const data_dst);
virtual void WarnOnBlinkPaste(const ui::DataTransferEndpoint* const data_src,
const ui::DataTransferEndpoint* const data_dst,
content::WebContents* web_contents,
base::OnceCallback<void(bool)> paste_cb);
virtual bool ShouldPasteOnWarn(
const ui::DataTransferEndpoint* const data_dst);
virtual bool ShouldCancelOnWarn(
const ui::DataTransferEndpoint* const data_dst);
virtual void NotifyBlockedDrop(
const ui::DataTransferEndpoint* const data_src,
const ui::DataTransferEndpoint* const data_dst);
const DlpRulesManager& dlp_rules_manager_;
DlpClipboardNotifier clipboard_notifier_;
DlpDragDropNotifier drag_drop_notifier_;
};
} // namespace policy
#endif // CHROME_BROWSER_CHROMEOS_POLICY_DLP_DATA_TRANSFER_DLP_CONTROLLER_H_