Commit e511e487 authored by Aya ElAttar's avatar Aya ElAttar Committed by Chromium LUCI CQ

DLP: Add IsDragDropAllowed

Introduced the following changed to DataTransferPolicyController:
- Renamed IsReadAllowed to IsClipboardReadAllowed to be
used for clipboard copy/paste.
- Added IsDragDropAllowed to be used for drag-n-drop.
- The logic for IsDragDropAllowed will be changed later
upon confirmation from the PM & UX side.

Bug: 1139886
Change-Id: Ie0594e1d68abed98145106c2aa8afe480c9b3b27
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2595293Reviewed-by: default avatarScott Violet <sky@chromium.org>
Reviewed-by: default avatarNikita Podguzov <nikitapodguzov@chromium.org>
Reviewed-by: default avatarDarwin Huang <huangdarwin@chromium.org>
Commit-Queue: Aya Elsayed <ayaelattar@chromium.org>
Cr-Commit-Position: refs/heads/master@{#841156}
parent ccba8bc4
...@@ -30,7 +30,7 @@ void DataTransferDlpController::Init(const DlpRulesManager& dlp_rules_manager) { ...@@ -30,7 +30,7 @@ void DataTransferDlpController::Init(const DlpRulesManager& dlp_rules_manager) {
new DataTransferDlpController(dlp_rules_manager); new DataTransferDlpController(dlp_rules_manager);
} }
bool DataTransferDlpController::IsDataReadAllowed( bool DataTransferDlpController::IsClipboardReadAllowed(
const ui::DataTransferEndpoint* const data_src, const ui::DataTransferEndpoint* const data_src,
const ui::DataTransferEndpoint* const data_dst) { const ui::DataTransferEndpoint* const data_dst) {
if (!data_src || !data_src->IsUrlType()) { // Currently we only handle URLs. if (!data_src || !data_src->IsUrlType()) { // Currently we only handle URLs.
...@@ -105,6 +105,13 @@ bool DataTransferDlpController::IsDataReadAllowed( ...@@ -105,6 +105,13 @@ bool DataTransferDlpController::IsDataReadAllowed(
return level == DlpRulesManager::Level::kAllow; return level == DlpRulesManager::Level::kAllow;
} }
bool DataTransferDlpController::IsDragDropAllowed(
const ui::DataTransferEndpoint* const data_src,
const ui::DataTransferEndpoint* const data_dst) {
// TODO(crbug.com/1160656): Migrate off using `IsClipboardReadAllowed`.
return IsClipboardReadAllowed(data_src, data_dst);
}
DataTransferDlpController::DataTransferDlpController( DataTransferDlpController::DataTransferDlpController(
const DlpRulesManager& dlp_rules_manager) const DlpRulesManager& dlp_rules_manager)
: dlp_rules_manager_(dlp_rules_manager) {} : dlp_rules_manager_(dlp_rules_manager) {}
......
...@@ -33,14 +33,15 @@ class DataTransferDlpController : public ui::DataTransferPolicyController { ...@@ -33,14 +33,15 @@ class DataTransferDlpController : public ui::DataTransferPolicyController {
void operator=(const DataTransferDlpController&) = delete; void operator=(const DataTransferDlpController&) = delete;
// ui::DataTransferPolicyController: // ui::DataTransferPolicyController:
// nullptr can be passed instead of `data_src` or `data_dst`. If data read is bool IsClipboardReadAllowed(
// not allowed, this function will show a notification to the user. const ui::DataTransferEndpoint* const data_src,
bool IsDataReadAllowed( const ui::DataTransferEndpoint* const data_dst) override;
bool IsDragDropAllowed(
const ui::DataTransferEndpoint* const data_src, const ui::DataTransferEndpoint* const data_src,
const ui::DataTransferEndpoint* const data_dst) override; const ui::DataTransferEndpoint* const data_dst) override;
protected: protected:
DataTransferDlpController(const DlpRulesManager& dlp_rules_manager); explicit DataTransferDlpController(const DlpRulesManager& dlp_rules_manager);
~DataTransferDlpController() override; ~DataTransferDlpController() override;
private: private:
......
...@@ -52,7 +52,7 @@ class MockDlpRulesManager : public DlpRulesManager { ...@@ -52,7 +52,7 @@ class MockDlpRulesManager : public DlpRulesManager {
class MockDlpController : public DataTransferDlpController { class MockDlpController : public DataTransferDlpController {
public: public:
MockDlpController(const DlpRulesManager& dlp_rules_manager) explicit MockDlpController(const DlpRulesManager& dlp_rules_manager)
: DataTransferDlpController(dlp_rules_manager) {} : DataTransferDlpController(dlp_rules_manager) {}
MOCK_METHOD2(DoNotifyBlockedPaste, MOCK_METHOD2(DoNotifyBlockedPaste,
...@@ -81,7 +81,7 @@ class DataTransferDlpControllerTest : public testing::Test { ...@@ -81,7 +81,7 @@ class DataTransferDlpControllerTest : public testing::Test {
}; };
TEST_F(DataTransferDlpControllerTest, NullSrc) { TEST_F(DataTransferDlpControllerTest, NullSrc) {
EXPECT_EQ(true, dlp_controller_.IsDataReadAllowed(nullptr, nullptr)); EXPECT_EQ(true, dlp_controller_.IsClipboardReadAllowed(nullptr, nullptr));
} }
TEST_F(DataTransferDlpControllerTest, NullDst) { TEST_F(DataTransferDlpControllerTest, NullDst) {
...@@ -89,7 +89,7 @@ TEST_F(DataTransferDlpControllerTest, NullDst) { ...@@ -89,7 +89,7 @@ TEST_F(DataTransferDlpControllerTest, NullDst) {
EXPECT_CALL(rules_manager_, IsRestrictedDestination) EXPECT_CALL(rules_manager_, IsRestrictedDestination)
.WillOnce(testing::Return(DlpRulesManager::Level::kBlock)); .WillOnce(testing::Return(DlpRulesManager::Level::kBlock));
EXPECT_CALL(dlp_controller_, DoNotifyBlockedPaste); EXPECT_CALL(dlp_controller_, DoNotifyBlockedPaste);
EXPECT_EQ(false, dlp_controller_.IsDataReadAllowed(&data_src, nullptr)); EXPECT_EQ(false, dlp_controller_.IsClipboardReadAllowed(&data_src, nullptr));
} }
TEST_F(DataTransferDlpControllerTest, DefaultDst) { TEST_F(DataTransferDlpControllerTest, DefaultDst) {
...@@ -98,7 +98,8 @@ TEST_F(DataTransferDlpControllerTest, DefaultDst) { ...@@ -98,7 +98,8 @@ TEST_F(DataTransferDlpControllerTest, DefaultDst) {
EXPECT_CALL(rules_manager_, IsRestrictedDestination) EXPECT_CALL(rules_manager_, IsRestrictedDestination)
.WillOnce(testing::Return(DlpRulesManager::Level::kBlock)); .WillOnce(testing::Return(DlpRulesManager::Level::kBlock));
EXPECT_CALL(dlp_controller_, DoNotifyBlockedPaste); EXPECT_CALL(dlp_controller_, DoNotifyBlockedPaste);
EXPECT_EQ(false, dlp_controller_.IsDataReadAllowed(&data_src, &data_dst_1)); EXPECT_EQ(false,
dlp_controller_.IsClipboardReadAllowed(&data_src, &data_dst_1));
testing::Mock::VerifyAndClearExpectations(&rules_manager_); testing::Mock::VerifyAndClearExpectations(&rules_manager_);
testing::Mock::VerifyAndClearExpectations(&dlp_controller_); testing::Mock::VerifyAndClearExpectations(&dlp_controller_);
...@@ -107,13 +108,14 @@ TEST_F(DataTransferDlpControllerTest, DefaultDst) { ...@@ -107,13 +108,14 @@ TEST_F(DataTransferDlpControllerTest, DefaultDst) {
/*notify_if_restricted=*/false); /*notify_if_restricted=*/false);
EXPECT_CALL(rules_manager_, IsRestrictedDestination) EXPECT_CALL(rules_manager_, IsRestrictedDestination)
.WillOnce(testing::Return(DlpRulesManager::Level::kBlock)); .WillOnce(testing::Return(DlpRulesManager::Level::kBlock));
EXPECT_EQ(false, dlp_controller_.IsDataReadAllowed(&data_src, &data_dst_2)); EXPECT_EQ(false,
dlp_controller_.IsClipboardReadAllowed(&data_src, &data_dst_2));
} }
TEST_F(DataTransferDlpControllerTest, ClipboardHistoryDst) { TEST_F(DataTransferDlpControllerTest, ClipboardHistoryDst) {
ui::DataTransferEndpoint data_src(url::Origin::Create(GURL(kGoogleUrl))); ui::DataTransferEndpoint data_src(url::Origin::Create(GURL(kGoogleUrl)));
ui::DataTransferEndpoint data_dst(ui::EndpointType::kClipboardHistory); ui::DataTransferEndpoint data_dst(ui::EndpointType::kClipboardHistory);
EXPECT_EQ(true, dlp_controller_.IsDataReadAllowed(&data_src, &data_dst)); EXPECT_EQ(true, dlp_controller_.IsClipboardReadAllowed(&data_src, &data_dst));
} }
TEST_F(DataTransferDlpControllerTest, UrlSrcDst) { TEST_F(DataTransferDlpControllerTest, UrlSrcDst) {
...@@ -122,7 +124,8 @@ TEST_F(DataTransferDlpControllerTest, UrlSrcDst) { ...@@ -122,7 +124,8 @@ TEST_F(DataTransferDlpControllerTest, UrlSrcDst) {
EXPECT_CALL(rules_manager_, IsRestrictedDestination) EXPECT_CALL(rules_manager_, IsRestrictedDestination)
.WillOnce(testing::Return(DlpRulesManager::Level::kBlock)); .WillOnce(testing::Return(DlpRulesManager::Level::kBlock));
EXPECT_CALL(dlp_controller_, DoNotifyBlockedPaste); EXPECT_CALL(dlp_controller_, DoNotifyBlockedPaste);
EXPECT_EQ(false, dlp_controller_.IsDataReadAllowed(&data_src, &data_dst_1)); EXPECT_EQ(false,
dlp_controller_.IsClipboardReadAllowed(&data_src, &data_dst_1));
testing::Mock::VerifyAndClearExpectations(&rules_manager_); testing::Mock::VerifyAndClearExpectations(&rules_manager_);
testing::Mock::VerifyAndClearExpectations(&dlp_controller_); testing::Mock::VerifyAndClearExpectations(&dlp_controller_);
...@@ -131,7 +134,8 @@ TEST_F(DataTransferDlpControllerTest, UrlSrcDst) { ...@@ -131,7 +134,8 @@ TEST_F(DataTransferDlpControllerTest, UrlSrcDst) {
/*notify_if_restricted=*/false); /*notify_if_restricted=*/false);
EXPECT_CALL(rules_manager_, IsRestrictedDestination) EXPECT_CALL(rules_manager_, IsRestrictedDestination)
.WillOnce(testing::Return(DlpRulesManager::Level::kBlock)); .WillOnce(testing::Return(DlpRulesManager::Level::kBlock));
EXPECT_EQ(false, dlp_controller_.IsDataReadAllowed(&data_src, &data_dst_2)); EXPECT_EQ(false,
dlp_controller_.IsClipboardReadAllowed(&data_src, &data_dst_2));
} }
TEST_F(DataTransferDlpControllerTest, ArcDst) { TEST_F(DataTransferDlpControllerTest, ArcDst) {
...@@ -140,7 +144,8 @@ TEST_F(DataTransferDlpControllerTest, ArcDst) { ...@@ -140,7 +144,8 @@ TEST_F(DataTransferDlpControllerTest, ArcDst) {
EXPECT_CALL(rules_manager_, IsRestrictedComponent) EXPECT_CALL(rules_manager_, IsRestrictedComponent)
.WillOnce(testing::Return(DlpRulesManager::Level::kBlock)); .WillOnce(testing::Return(DlpRulesManager::Level::kBlock));
EXPECT_CALL(dlp_controller_, DoNotifyBlockedPaste); EXPECT_CALL(dlp_controller_, DoNotifyBlockedPaste);
EXPECT_EQ(false, dlp_controller_.IsDataReadAllowed(&data_src, &data_dst)); EXPECT_EQ(false,
dlp_controller_.IsClipboardReadAllowed(&data_src, &data_dst));
} }
TEST_F(DataTransferDlpControllerTest, CrostiniDst) { TEST_F(DataTransferDlpControllerTest, CrostiniDst) {
...@@ -149,7 +154,8 @@ TEST_F(DataTransferDlpControllerTest, CrostiniDst) { ...@@ -149,7 +154,8 @@ TEST_F(DataTransferDlpControllerTest, CrostiniDst) {
EXPECT_CALL(rules_manager_, IsRestrictedComponent) EXPECT_CALL(rules_manager_, IsRestrictedComponent)
.WillOnce(testing::Return(DlpRulesManager::Level::kBlock)); .WillOnce(testing::Return(DlpRulesManager::Level::kBlock));
EXPECT_CALL(dlp_controller_, DoNotifyBlockedPaste); EXPECT_CALL(dlp_controller_, DoNotifyBlockedPaste);
EXPECT_EQ(false, dlp_controller_.IsDataReadAllowed(&data_src, &data_dst)); EXPECT_EQ(false,
dlp_controller_.IsClipboardReadAllowed(&data_src, &data_dst));
} }
} // namespace policy } // namespace policy
...@@ -789,7 +789,7 @@ class FakeDataTransferPolicyController ...@@ -789,7 +789,7 @@ class FakeDataTransferPolicyController
~FakeDataTransferPolicyController() override = default; ~FakeDataTransferPolicyController() override = default;
// ui::DataTransferPolicyController: // ui::DataTransferPolicyController:
bool IsDataReadAllowed( bool IsClipboardReadAllowed(
const ui::DataTransferEndpoint* const data_src, const ui::DataTransferEndpoint* const data_src,
const ui::DataTransferEndpoint* const data_dst) override { const ui::DataTransferEndpoint* const data_dst) override {
// The multipaste menu should have access to any clipboard data. // The multipaste menu should have access to any clipboard data.
...@@ -802,6 +802,12 @@ class FakeDataTransferPolicyController ...@@ -802,6 +802,12 @@ class FakeDataTransferPolicyController
(*data_src->origin() == allowed_origin_); (*data_src->origin() == allowed_origin_);
} }
bool IsDragDropAllowed(
const ui::DataTransferEndpoint* const data_src,
const ui::DataTransferEndpoint* const data_dst) override {
return false;
}
private: private:
const url::Origin allowed_origin_; const url::Origin allowed_origin_;
}; };
......
...@@ -248,7 +248,7 @@ class ClipboardInternal { ...@@ -248,7 +248,7 @@ class ClipboardInternal {
auto* data = GetData(); auto* data = GetData();
if (!policy_controller || !data) if (!policy_controller || !data)
return true; return true;
return policy_controller->IsDataReadAllowed(data->source(), data_dst); return policy_controller->IsClipboardReadAllowed(data->source(), data_dst);
} }
private: private:
......
...@@ -109,7 +109,10 @@ class MockPolicyController : public DataTransferPolicyController { ...@@ -109,7 +109,10 @@ class MockPolicyController : public DataTransferPolicyController {
MockPolicyController(); MockPolicyController();
~MockPolicyController() override; ~MockPolicyController() override;
MOCK_METHOD2(IsDataReadAllowed, MOCK_METHOD2(IsClipboardReadAllowed,
bool(const DataTransferEndpoint* const data_src,
const DataTransferEndpoint* const data_dst));
MOCK_METHOD2(IsDragDropAllowed,
bool(const DataTransferEndpoint* const data_src, bool(const DataTransferEndpoint* const data_src,
const DataTransferEndpoint* const data_dst)); const DataTransferEndpoint* const data_dst));
}; };
...@@ -1038,7 +1041,7 @@ TYPED_TEST(ClipboardTest, PolicyAllowDataRead) { ...@@ -1038,7 +1041,7 @@ TYPED_TEST(ClipboardTest, PolicyAllowDataRead) {
std::make_unique<DataTransferEndpoint>(url::Origin())); std::make_unique<DataTransferEndpoint>(url::Origin()));
writer.WriteText(kTestText); writer.WriteText(kTestText);
} }
EXPECT_CALL(*policy_controller, IsDataReadAllowed) EXPECT_CALL(*policy_controller, IsClipboardReadAllowed)
.WillRepeatedly(testing::Return(true)); .WillRepeatedly(testing::Return(true));
base::string16 read_result; base::string16 read_result;
this->clipboard().ReadText(ClipboardBuffer::kCopyPaste, this->clipboard().ReadText(ClipboardBuffer::kCopyPaste,
...@@ -1058,7 +1061,7 @@ TYPED_TEST(ClipboardTest, PolicyDisallow_ReadText) { ...@@ -1058,7 +1061,7 @@ TYPED_TEST(ClipboardTest, PolicyDisallow_ReadText) {
std::make_unique<DataTransferEndpoint>(url::Origin())); std::make_unique<DataTransferEndpoint>(url::Origin()));
writer.WriteText(kTestText); writer.WriteText(kTestText);
} }
EXPECT_CALL(*policy_controller, IsDataReadAllowed) EXPECT_CALL(*policy_controller, IsClipboardReadAllowed)
.WillRepeatedly(testing::Return(false)); .WillRepeatedly(testing::Return(false));
base::string16 read_result; base::string16 read_result;
this->clipboard().ReadText(ClipboardBuffer::kCopyPaste, this->clipboard().ReadText(ClipboardBuffer::kCopyPaste,
...@@ -1069,7 +1072,7 @@ TYPED_TEST(ClipboardTest, PolicyDisallow_ReadText) { ...@@ -1069,7 +1072,7 @@ TYPED_TEST(ClipboardTest, PolicyDisallow_ReadText) {
TYPED_TEST(ClipboardTest, PolicyDisallow_ReadImage) { TYPED_TEST(ClipboardTest, PolicyDisallow_ReadImage) {
auto policy_controller = std::make_unique<MockPolicyController>(); auto policy_controller = std::make_unique<MockPolicyController>();
EXPECT_CALL(*policy_controller, IsDataReadAllowed) EXPECT_CALL(*policy_controller, IsClipboardReadAllowed)
.WillRepeatedly(testing::Return(false)); .WillRepeatedly(testing::Return(false));
const SkBitmap& image = clipboard_test_util::ReadImage(&this->clipboard()); const SkBitmap& image = clipboard_test_util::ReadImage(&this->clipboard());
::testing::Mock::VerifyAndClearExpectations(policy_controller.get()); ::testing::Mock::VerifyAndClearExpectations(policy_controller.get());
......
...@@ -20,12 +20,12 @@ ...@@ -20,12 +20,12 @@
namespace ui { namespace ui {
namespace { namespace {
bool IsDataReadAllowed(const DataTransferEndpoint* src, bool IsReadAllowed(const DataTransferEndpoint* src,
const DataTransferEndpoint* dst) { const DataTransferEndpoint* dst) {
auto* policy_controller = DataTransferPolicyController::Get(); auto* policy_controller = DataTransferPolicyController::Get();
if (!policy_controller) if (!policy_controller)
return true; return true;
return policy_controller->IsDataReadAllowed(src, dst); return policy_controller->IsClipboardReadAllowed(src, dst);
} }
} // namespace } // namespace
...@@ -56,7 +56,7 @@ bool TestClipboard::IsFormatAvailable( ...@@ -56,7 +56,7 @@ bool TestClipboard::IsFormatAvailable(
const ClipboardFormatType& format, const ClipboardFormatType& format,
ClipboardBuffer buffer, ClipboardBuffer buffer,
const ui::DataTransferEndpoint* data_dst) const { const ui::DataTransferEndpoint* data_dst) const {
if (!IsDataReadAllowed(GetStore(buffer).data_src.get(), data_dst)) if (!IsReadAllowed(GetStore(buffer).data_src.get(), data_dst))
return false; return false;
#if defined(OS_LINUX) || defined(OS_CHROMEOS) #if defined(OS_LINUX) || defined(OS_CHROMEOS)
// The linux clipboard treats the presence of text on the clipboard // The linux clipboard treats the presence of text on the clipboard
...@@ -79,7 +79,7 @@ void TestClipboard::ReadAvailableTypes( ...@@ -79,7 +79,7 @@ void TestClipboard::ReadAvailableTypes(
std::vector<base::string16>* types) const { std::vector<base::string16>* types) const {
DCHECK(types); DCHECK(types);
types->clear(); types->clear();
if (!IsDataReadAllowed(GetStore(buffer).data_src.get(), data_dst)) if (!IsReadAllowed(GetStore(buffer).data_src.get(), data_dst))
return; return;
if (IsFormatAvailable(ClipboardFormatType::GetPlainTextType(), buffer, if (IsFormatAvailable(ClipboardFormatType::GetPlainTextType(), buffer,
...@@ -99,7 +99,7 @@ TestClipboard::ReadAvailablePlatformSpecificFormatNames( ...@@ -99,7 +99,7 @@ TestClipboard::ReadAvailablePlatformSpecificFormatNames(
ClipboardBuffer buffer, ClipboardBuffer buffer,
const ui::DataTransferEndpoint* data_dst) const { const ui::DataTransferEndpoint* data_dst) const {
const DataStore& store = GetStore(buffer); const DataStore& store = GetStore(buffer);
if (!IsDataReadAllowed(store.data_src.get(), data_dst)) if (!IsReadAllowed(store.data_src.get(), data_dst))
return {}; return {};
const auto& data = store.data; const auto& data = store.data;
...@@ -129,7 +129,7 @@ TestClipboard::ReadAvailablePlatformSpecificFormatNames( ...@@ -129,7 +129,7 @@ TestClipboard::ReadAvailablePlatformSpecificFormatNames(
void TestClipboard::ReadText(ClipboardBuffer buffer, void TestClipboard::ReadText(ClipboardBuffer buffer,
const DataTransferEndpoint* data_dst, const DataTransferEndpoint* data_dst,
base::string16* result) const { base::string16* result) const {
if (!IsDataReadAllowed(GetStore(buffer).data_src.get(), data_dst)) if (!IsReadAllowed(GetStore(buffer).data_src.get(), data_dst))
return; return;
std::string result8; std::string result8;
...@@ -142,7 +142,7 @@ void TestClipboard::ReadAsciiText(ClipboardBuffer buffer, ...@@ -142,7 +142,7 @@ void TestClipboard::ReadAsciiText(ClipboardBuffer buffer,
const DataTransferEndpoint* data_dst, const DataTransferEndpoint* data_dst,
std::string* result) const { std::string* result) const {
const DataStore& store = GetStore(buffer); const DataStore& store = GetStore(buffer);
if (!IsDataReadAllowed(store.data_src.get(), data_dst)) if (!IsReadAllowed(store.data_src.get(), data_dst))
return; return;
result->clear(); result->clear();
...@@ -158,7 +158,7 @@ void TestClipboard::ReadHTML(ClipboardBuffer buffer, ...@@ -158,7 +158,7 @@ void TestClipboard::ReadHTML(ClipboardBuffer buffer,
uint32_t* fragment_start, uint32_t* fragment_start,
uint32_t* fragment_end) const { uint32_t* fragment_end) const {
const DataStore& store = GetStore(buffer); const DataStore& store = GetStore(buffer);
if (!IsDataReadAllowed(store.data_src.get(), data_dst)) if (!IsReadAllowed(store.data_src.get(), data_dst))
return; return;
markup->clear(); markup->clear();
...@@ -175,7 +175,7 @@ void TestClipboard::ReadSvg(ClipboardBuffer buffer, ...@@ -175,7 +175,7 @@ void TestClipboard::ReadSvg(ClipboardBuffer buffer,
const DataTransferEndpoint* data_dst, const DataTransferEndpoint* data_dst,
base::string16* result) const { base::string16* result) const {
const DataStore& store = GetStore(buffer); const DataStore& store = GetStore(buffer);
if (!IsDataReadAllowed(store.data_src.get(), data_dst)) if (!IsReadAllowed(store.data_src.get(), data_dst))
return; return;
result->clear(); result->clear();
...@@ -188,7 +188,7 @@ void TestClipboard::ReadRTF(ClipboardBuffer buffer, ...@@ -188,7 +188,7 @@ void TestClipboard::ReadRTF(ClipboardBuffer buffer,
const DataTransferEndpoint* data_dst, const DataTransferEndpoint* data_dst,
std::string* result) const { std::string* result) const {
const DataStore& store = GetStore(buffer); const DataStore& store = GetStore(buffer);
if (!IsDataReadAllowed(store.data_src.get(), data_dst)) if (!IsReadAllowed(store.data_src.get(), data_dst))
return; return;
result->clear(); result->clear();
...@@ -201,7 +201,7 @@ void TestClipboard::ReadImage(ClipboardBuffer buffer, ...@@ -201,7 +201,7 @@ void TestClipboard::ReadImage(ClipboardBuffer buffer,
const DataTransferEndpoint* data_dst, const DataTransferEndpoint* data_dst,
ReadImageCallback callback) const { ReadImageCallback callback) const {
const DataStore& store = GetStore(buffer); const DataStore& store = GetStore(buffer);
if (!IsDataReadAllowed(store.data_src.get(), data_dst)) { if (!IsReadAllowed(store.data_src.get(), data_dst)) {
std::move(callback).Run(SkBitmap()); std::move(callback).Run(SkBitmap());
return; return;
} }
...@@ -219,7 +219,7 @@ void TestClipboard::ReadBookmark(const DataTransferEndpoint* data_dst, ...@@ -219,7 +219,7 @@ void TestClipboard::ReadBookmark(const DataTransferEndpoint* data_dst,
base::string16* title, base::string16* title,
std::string* url) const { std::string* url) const {
const DataStore& store = GetDefaultStore(); const DataStore& store = GetDefaultStore();
if (!IsDataReadAllowed(store.data_src.get(), data_dst)) if (!IsReadAllowed(store.data_src.get(), data_dst))
return; return;
if (url) { if (url) {
...@@ -235,7 +235,7 @@ void TestClipboard::ReadData(const ClipboardFormatType& format, ...@@ -235,7 +235,7 @@ void TestClipboard::ReadData(const ClipboardFormatType& format,
const DataTransferEndpoint* data_dst, const DataTransferEndpoint* data_dst,
std::string* result) const { std::string* result) const {
const DataStore& store = GetDefaultStore(); const DataStore& store = GetDefaultStore();
if (!IsDataReadAllowed(store.data_src.get(), data_dst)) if (!IsReadAllowed(store.data_src.get(), data_dst))
return; return;
result->clear(); result->clear();
......
...@@ -10,10 +10,10 @@ ...@@ -10,10 +10,10 @@
namespace ui { namespace ui {
// The DataTransfer filter controls transferring data via drag-and-drop and // The DataTransfer policy controller controls transferring data via
// clipboard read operations. It allows/disallows transferring the data given // drag-and-drop and clipboard read operations. It allows/disallows transferring
// the source of the data and the destination trying to access the data and a // the data given the source of the data and the destination trying to access
// set of rules controlling these source and destination. // the data and a set of rules controlling these source and destination.
class COMPONENT_EXPORT(UI_BASE_DATA_TRANSFER_POLICY) class COMPONENT_EXPORT(UI_BASE_DATA_TRANSFER_POLICY)
DataTransferPolicyController { DataTransferPolicyController {
public: public:
...@@ -27,7 +27,15 @@ class COMPONENT_EXPORT(UI_BASE_DATA_TRANSFER_POLICY) ...@@ -27,7 +27,15 @@ class COMPONENT_EXPORT(UI_BASE_DATA_TRANSFER_POLICY)
// Indicates that restricting data transfer is no longer required. // Indicates that restricting data transfer is no longer required.
static void DeleteInstance(); static void DeleteInstance();
virtual bool IsDataReadAllowed( // nullptr can be passed instead of `data_src` or `data_dst`. If clipboard
// read is not allowed, this function will show a notification to the user.
virtual bool IsClipboardReadAllowed(
const DataTransferEndpoint* const data_src,
const DataTransferEndpoint* const data_dst) = 0;
// nullptr can be passed instead of `data_src` or `data_dst`. If dropping the
// data is not allowed, this function will show a notification to the user.
virtual bool IsDragDropAllowed(
const DataTransferEndpoint* const data_src, const DataTransferEndpoint* const data_src,
const DataTransferEndpoint* const data_dst) = 0; const DataTransferEndpoint* const data_dst) = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment