Commit e1961736 authored by Dominique Fauteux-Chapleau's avatar Dominique Fauteux-Chapleau Committed by Commit Bot

Remove legacy protos support from DeepScanningDialogDelegate

This should not change deep scanning behaviour with Connectors.

Bug: 1103390
Change-Id: If7562ef39a94680397b6dc48ee9cf7c41cf86988
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2388202
Commit-Queue: Dominique Fauteux-Chapleau <domfc@chromium.org>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Reviewed-by: default avatarRoger Tawa <rogerta@chromium.org>
Cr-Commit-Position: refs/heads/master@{#804385}
parent a094e3c2
......@@ -219,7 +219,7 @@ void DeepScanningBrowserTestBase::SetUpDelegate() {
SetDMTokenForTesting(policy::DMToken::CreateValidTokenForTesting(kDmToken));
DeepScanningDialogDelegate::SetFactoryForTesting(base::BindRepeating(
&FakeDeepScanningDialogDelegate::Create, base::DoNothing(),
base::Bind(&DeepScanningBrowserTestBase::StatusCallback,
base::Bind(&DeepScanningBrowserTestBase::ConnectorStatusCallback,
base::Unretained(this)),
base::Bind(&DeepScanningBrowserTestBase::EncryptionStatusCallback,
base::Unretained(this)),
......@@ -230,7 +230,7 @@ void DeepScanningBrowserTestBase::SetUpUnresponsiveDelegate() {
SetDMTokenForTesting(policy::DMToken::CreateValidTokenForTesting(kDmToken));
DeepScanningDialogDelegate::SetFactoryForTesting(base::BindRepeating(
&UnresponsiveDeepScanningDialogDelegate::Create, base::DoNothing(),
base::Bind(&DeepScanningBrowserTestBase::StatusCallback,
base::Bind(&DeepScanningBrowserTestBase::ConnectorStatusCallback,
base::Unretained(this)),
base::Bind(&DeepScanningBrowserTestBase::EncryptionStatusCallback,
base::Unretained(this)),
......@@ -252,11 +252,22 @@ void DeepScanningBrowserTestBase::SetStatusCallbackResponse(
status_callback_response_ = response;
}
void DeepScanningBrowserTestBase::SetStatusCallbackResponse(
enterprise_connectors::ContentAnalysisResponse response) {
connector_status_callback_response_ = response;
}
DeepScanningClientResponse DeepScanningBrowserTestBase::StatusCallback(
const base::FilePath& path) {
return status_callback_response_;
}
enterprise_connectors::ContentAnalysisResponse
DeepScanningBrowserTestBase::ConnectorStatusCallback(
const base::FilePath& path) {
return connector_status_callback_response_;
}
bool DeepScanningBrowserTestBase::EncryptionStatusCallback(
const base::FilePath& path) {
return false;
......
......@@ -50,9 +50,13 @@ class DeepScanningBrowserTestBase : public InProcessBrowserTest {
// Set what StatusCallback returns.
void SetStatusCallbackResponse(DeepScanningClientResponse response);
void SetStatusCallbackResponse(
enterprise_connectors::ContentAnalysisResponse response);
// Callbacks used to set up the fake delegate factory.
DeepScanningClientResponse StatusCallback(const base::FilePath& path);
enterprise_connectors::ContentAnalysisResponse ConnectorStatusCallback(
const base::FilePath& path);
bool EncryptionStatusCallback(const base::FilePath& path);
// Creates temporary files for testing in |temp_dir_|, and add them to |data|.
......@@ -66,6 +70,8 @@ class DeepScanningBrowserTestBase : public InProcessBrowserTest {
base::test::ScopedFeatureList scoped_feature_list_;
base::RepeatingClosure quit_closure_;
DeepScanningClientResponse status_callback_response_;
enterprise_connectors::ContentAnalysisResponse
connector_status_callback_response_;
base::ScopedTempDir temp_dir_;
std::vector<base::FilePath> created_file_paths_;
bool use_legacy_policies_;
......
......@@ -70,14 +70,6 @@ class DeepScanningDialogDelegate {
Data(Data&& other);
~Data();
// Members than indicate what type of scans to perform. If |do_dlp_scan|
// is true then the text and files specified by the members below will be
// scanned for content compliance. If |do_malware_scan| is true then the
// files specified by the members below will be scanned for malware. Text
// strings are not scanned for malware.
bool do_dlp_scan = false;
bool do_malware_scan = false;
// URL of the page that is to receive sensitive data.
GURL url;
......@@ -238,15 +230,10 @@ class DeepScanningDialogDelegate {
// Callbacks from uploading data. Protected so they can be called from
// testing derived classes.
void StringRequestCallback(BinaryUploadService::Result result,
DeepScanningClientResponse response);
void ConnectorStringRequestCallback(
void StringRequestCallback(
BinaryUploadService::Result result,
enterprise_connectors::ContentAnalysisResponse response);
void FileRequestCallback(base::FilePath path,
BinaryUploadService::Result result,
DeepScanningClientResponse response);
void ConnectorFileRequestCallback(
void FileRequestCallback(
base::FilePath path,
BinaryUploadService::Result result,
enterprise_connectors::ContentAnalysisResponse response);
......@@ -260,6 +247,10 @@ class DeepScanningDialogDelegate {
// the background and false if there is nothing to do.
bool UploadData();
// Prepares an upload request for the text in |data_|. If |data_.text| is
// empty, this method does nothing.
void PrepareTextRequest();
// Prepares an upload request for the file at |path|. If the file
// cannot be uploaded it will have a failure verdict added to |result_|.
// Virtual so that it can be overridden in tests.
......@@ -267,8 +258,6 @@ class DeepScanningDialogDelegate {
// Adds required fields to |request| before sending it to the binary upload
// service.
void PrepareRequest(DlpDeepScanningClientRequest::ContentSource trigger,
BinaryUploadService::Request* request);
void PrepareRequest(enterprise_connectors::AnalysisConnector connector,
BinaryUploadService::Request* request);
......@@ -309,12 +298,7 @@ class DeepScanningDialogDelegate {
// Completion of |FileRequestCallback| once the mime type is obtained
// asynchronously.
void CompleteFileRequestCallback(size_t index,
base::FilePath path,
BinaryUploadService::Result result,
DeepScanningClientResponse response,
std::string mime_type);
void CompleteConnectorFileRequestCallback(
void CompleteFileRequestCallback(
size_t index,
base::FilePath path,
BinaryUploadService::Result result,
......@@ -341,14 +325,11 @@ class DeepScanningDialogDelegate {
// Set to true if the full text got a DLP warning verdict.
bool text_warning_ = false;
DeepScanningClientResponse text_response_;
enterprise_connectors::ContentAnalysisResponse
content_analysis_text_response_;
enterprise_connectors::ContentAnalysisResponse text_response_;
// Scanning responses of files that got DLP warning verdicts.
std::map<size_t, DeepScanningClientResponse> file_warnings_;
std::map<size_t, enterprise_connectors::ContentAnalysisResponse>
content_analysis_file_warnings_;
file_warnings_;
// Set to true once the scan of text has completed. If the scan request has
// no text requiring deep scanning, this is set to true immediately.
......
......@@ -9,10 +9,12 @@
#include "chrome/browser/browser_process.h"
#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_browsertest_base.h"
#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_dialog_views.h"
#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_utils.h"
#include "chrome/browser/safe_browsing/cloud_content_scanning/fake_deep_scanning_dialog_delegate.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/grit/generated_resources.h"
#include "chrome/grit/theme_resources.h"
#include "components/enterprise/common/proto/connectors.pb.h"
#include "components/prefs/scoped_user_pref_update.h"
#include "content/public/test/browser_test.h"
#include "ui/base/l10n/l10n_util.h"
......@@ -42,10 +44,10 @@ class DeepScanningDialogViewsBehaviorBrowserTest
: public DeepScanningBrowserTestBase,
public DeepScanningDialogViews::TestObserver,
public testing::WithParamInterface<
std::tuple<bool, bool, bool, base::TimeDelta>> {
std::tuple<bool, bool, base::TimeDelta>> {
public:
DeepScanningDialogViewsBehaviorBrowserTest()
: DeepScanningBrowserTestBase(std::get<0>(GetParam())) {
: DeepScanningBrowserTestBase(false) {
DeepScanningDialogViews::SetObserverForTesting(this);
expected_scan_result_ = dlp_success() && malware_success();
......@@ -156,11 +158,11 @@ class DeepScanningDialogViewsBehaviorBrowserTest
CallQuitClosure();
}
bool dlp_success() const { return std::get<1>(GetParam()); }
bool dlp_success() const { return std::get<0>(GetParam()); }
bool malware_success() const { return std::get<2>(GetParam()); }
bool malware_success() const { return std::get<1>(GetParam()); }
base::TimeDelta response_delay() const { return std::get<3>(GetParam()); }
base::TimeDelta response_delay() const { return std::get<2>(GetParam()); }
private:
DeepScanningDialogViews* dialog_;
......@@ -184,11 +186,10 @@ class DeepScanningDialogViewsBehaviorBrowserTest
// - The "CancelledByUser" metrics are recorded.
class DeepScanningDialogViewsCancelPendingScanBrowserTest
: public DeepScanningBrowserTestBase,
public testing::WithParamInterface<bool>,
public DeepScanningDialogViews::TestObserver {
public:
DeepScanningDialogViewsCancelPendingScanBrowserTest()
: DeepScanningBrowserTestBase(GetParam()) {
: DeepScanningBrowserTestBase(false) {
DeepScanningDialogViews::SetObserverForTesting(this);
}
......@@ -229,10 +230,10 @@ class DeepScanningDialogViewsCancelPendingScanBrowserTest
class DeepScanningDialogViewsWarningBrowserTest
: public DeepScanningBrowserTestBase,
public DeepScanningDialogViews::TestObserver,
public testing::WithParamInterface<std::tuple<bool, bool>> {
public testing::WithParamInterface<bool> {
public:
DeepScanningDialogViewsWarningBrowserTest()
: DeepScanningBrowserTestBase(std::get<1>(GetParam())) {
: DeepScanningBrowserTestBase(false) {
DeepScanningDialogViews::SetObserverForTesting(this);
}
......@@ -265,7 +266,7 @@ class DeepScanningDialogViewsWarningBrowserTest
CallQuitClosure();
}
bool user_bypasses_warning() { return std::get<0>(GetParam()); }
bool user_bypasses_warning() { return GetParam(); }
};
// Tests the behavior of the dialog in the following ways:
......@@ -278,10 +279,10 @@ class DeepScanningDialogViewsAppearanceBrowserTest
: public DeepScanningBrowserTestBase,
public DeepScanningDialogViews::TestObserver,
public testing::WithParamInterface<
std::tuple<bool, bool, DeepScanAccessPoint, bool>> {
std::tuple<bool, bool, DeepScanAccessPoint>> {
public:
DeepScanningDialogViewsAppearanceBrowserTest()
: DeepScanningBrowserTestBase(std::get<3>(GetParam())) {
: DeepScanningBrowserTestBase(false) {
DeepScanningDialogViews::SetObserverForTesting(this);
}
......@@ -391,7 +392,7 @@ IN_PROC_BROWSER_TEST_P(DeepScanningDialogViewsBehaviorBrowserTest, Test) {
SetDlpPolicy(CHECK_UPLOADS_AND_DOWNLOADS);
SetMalwarePolicy(SEND_UPLOADS_AND_DOWNLOADS);
AddUrlToCheckForMalwareOfUploads("*");
SetStatusCallbackResponse(SimpleDeepScanningClientResponseForTesting(
SetStatusCallbackResponse(SimpleContentAnalysisResponseForTesting(
dlp_success(), malware_success()));
// Always set this policy so the UI is shown.
......@@ -406,8 +407,6 @@ IN_PROC_BROWSER_TEST_P(DeepScanningDialogViewsBehaviorBrowserTest, Test) {
SetQuitClosure(run_loop.QuitClosure());
DeepScanningDialogDelegate::Data data;
data.do_dlp_scan = true;
data.do_malware_scan = true;
CreateFilesForTest({"foo.doc"}, {"content"}, &data);
ASSERT_TRUE(DeepScanningDialogDelegate::IsEnabled(
browser()->profile(), GURL(kTestUrl), &data,
......@@ -446,20 +445,19 @@ INSTANTIATE_TEST_SUITE_P(
,
DeepScanningDialogViewsBehaviorBrowserTest,
testing::Combine(
/*use_legacy_policies*/ testing::Bool(),
/*dlp_success*/ testing::Bool(),
/*malware_success*/ testing::Bool(),
/*response_delay*/
testing::Values(kNoDelay, kSmallDelay, kNormalDelay)));
IN_PROC_BROWSER_TEST_P(DeepScanningDialogViewsCancelPendingScanBrowserTest,
IN_PROC_BROWSER_TEST_F(DeepScanningDialogViewsCancelPendingScanBrowserTest,
Test) {
base::ScopedAllowBlockingForTesting allow_blocking;
// Setup policies to enable deep scanning, its UI and the responses to be
// simulated.
SetDlpPolicy(CHECK_UPLOADS);
SetStatusCallbackResponse(SimpleDeepScanningClientResponseForTesting(
SetStatusCallbackResponse(SimpleContentAnalysisResponseForTesting(
/*dlp=*/true, /*malware=*/base::nullopt));
// Always set this policy so the UI is shown.
......@@ -475,8 +473,6 @@ IN_PROC_BROWSER_TEST_P(DeepScanningDialogViewsCancelPendingScanBrowserTest,
SetQuitClosure(run_loop.QuitClosure());
DeepScanningDialogDelegate::Data data;
data.do_dlp_scan = true;
data.do_malware_scan = false;
CreateFilesForTest({"foo.doc", "bar.doc", "baz.doc"},
{"random", "file", "contents"}, &data);
ASSERT_TRUE(DeepScanningDialogDelegate::IsEnabled(
......@@ -500,10 +496,6 @@ IN_PROC_BROWSER_TEST_P(DeepScanningDialogViewsCancelPendingScanBrowserTest,
ValidateMetrics();
}
INSTANTIATE_TEST_SUITE_P(,
DeepScanningDialogViewsCancelPendingScanBrowserTest,
/*use_legacy_policies=*/testing::Bool());
IN_PROC_BROWSER_TEST_P(DeepScanningDialogViewsWarningBrowserTest, Test) {
base::ScopedAllowBlockingForTesting allow_blocking;
......@@ -512,13 +504,14 @@ IN_PROC_BROWSER_TEST_P(DeepScanningDialogViewsWarningBrowserTest, Test) {
SetWaitPolicy(DELAY_UPLOADS);
// Setup the DLP warning response.
DeepScanningClientResponse response;
response.mutable_dlp_scan_verdict()->set_status(
DlpDeepScanningVerdict::SUCCESS);
DlpDeepScanningVerdict::TriggeredRule* rule =
response.mutable_dlp_scan_verdict()->add_triggered_rules();
enterprise_connectors::ContentAnalysisResponse response;
auto* result = response.add_results();
result->set_tag("dlp");
result->set_status(
enterprise_connectors::ContentAnalysisResponse::Result::SUCCESS);
auto* rule = result->add_triggered_rules();
rule->set_rule_name("warning_rule_name");
rule->set_action(DlpDeepScanningVerdict::TriggeredRule::WARN);
rule->set_action(enterprise_connectors::TriggeredRule::WARN);
SetStatusCallbackResponse(response);
// Set up delegate.
......@@ -529,7 +522,6 @@ IN_PROC_BROWSER_TEST_P(DeepScanningDialogViewsWarningBrowserTest, Test) {
SetQuitClosure(run_loop.QuitClosure());
DeepScanningDialogDelegate::Data data;
data.do_dlp_scan = true;
data.text.emplace_back(text());
data.text.emplace_back(text());
CreateFilesForTest({"foo.doc", "bar.doc"}, {"file", "content"}, &data);
......@@ -559,9 +551,7 @@ IN_PROC_BROWSER_TEST_P(DeepScanningDialogViewsWarningBrowserTest, Test) {
INSTANTIATE_TEST_SUITE_P(,
DeepScanningDialogViewsWarningBrowserTest,
testing::Combine(
/*user_bypasses_warning=*/testing::Bool(),
/*use_legacy_policies=*/testing::Bool()));
/*user_bypasses_warning=*/testing::Bool());
IN_PROC_BROWSER_TEST_P(DeepScanningDialogViewsAppearanceBrowserTest, Test) {
base::ScopedAllowBlockingForTesting allow_blocking;
......@@ -572,7 +562,7 @@ IN_PROC_BROWSER_TEST_P(DeepScanningDialogViewsAppearanceBrowserTest, Test) {
SetMalwarePolicy(SEND_UPLOADS);
SetStatusCallbackResponse(
SimpleDeepScanningClientResponseForTesting(success(), success()));
SimpleContentAnalysisResponseForTesting(success(), success()));
// Always set this policy so the UI is shown.
SetWaitPolicy(DELAY_UPLOADS);
......@@ -586,8 +576,6 @@ IN_PROC_BROWSER_TEST_P(DeepScanningDialogViewsAppearanceBrowserTest, Test) {
SetQuitClosure(run_loop.QuitClosure());
DeepScanningDialogDelegate::Data data;
data.do_dlp_scan = true;
data.do_malware_scan = true;
// Use a file path or text to validate the appearance of the dialog for both
// types of scans.
......@@ -621,7 +609,6 @@ INSTANTIATE_TEST_SUITE_P(,
/*access_point=*/
testing::Values(DeepScanAccessPoint::UPLOAD,
DeepScanAccessPoint::DRAG_AND_DROP,
DeepScanAccessPoint::PASTE),
/*use_legacy_policies=*/testing::Bool()));
DeepScanAccessPoint::PASTE)));
} // namespace safe_browsing
......@@ -12,6 +12,7 @@
#include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.h"
#include "chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.h"
#include "chrome/browser/signin/identity_manager_factory.h"
#include "components/enterprise/common/proto/connectors.pb.h"
#include "components/signin/public/identity_manager/identity_manager.h"
namespace safe_browsing {
......@@ -401,29 +402,32 @@ bool FileTypeSupportedForDlp(const base::FilePath& path) {
return std::binary_search(dlp_types.begin(), dlp_types.end(), extension);
}
DeepScanningClientResponse SimpleDeepScanningClientResponseForTesting(
base::Optional<bool> dlp_success,
base::Optional<bool> malware_success) {
DeepScanningClientResponse response;
enterprise_connectors::ContentAnalysisResponse
SimpleContentAnalysisResponseForTesting(base::Optional<bool> dlp_success,
base::Optional<bool> malware_success) {
enterprise_connectors::ContentAnalysisResponse response;
if (dlp_success.has_value()) {
response.mutable_dlp_scan_verdict()->set_status(
DlpDeepScanningVerdict::SUCCESS);
auto* result = response.add_results();
result->set_tag("dlp");
result->set_status(
enterprise_connectors::ContentAnalysisResponse::Result::SUCCESS);
if (!dlp_success.value()) {
DlpDeepScanningVerdict::TriggeredRule* rule =
response.mutable_dlp_scan_verdict()->add_triggered_rules();
rule->set_rule_name("rule");
rule->set_action(DlpDeepScanningVerdict::TriggeredRule::BLOCK);
auto* rule = result->add_triggered_rules();
rule->set_rule_name("dlp");
rule->set_action(enterprise_connectors::TriggeredRule::BLOCK);
}
}
if (malware_success.has_value()) {
if (malware_success.value()) {
response.mutable_malware_scan_verdict()->set_verdict(
MalwareDeepScanningVerdict::CLEAN);
} else {
response.mutable_malware_scan_verdict()->set_verdict(
MalwareDeepScanningVerdict::MALWARE);
auto* result = response.add_results();
result->set_tag("malware");
result->set_status(
enterprise_connectors::ContentAnalysisResponse::Result::SUCCESS);
if (!malware_success.value()) {
auto* rule = result->add_triggered_rules();
rule->set_rule_name("malware");
rule->set_action(enterprise_connectors::TriggeredRule::BLOCK);
}
}
......
......@@ -187,6 +187,9 @@ bool FileTypeSupportedForDlp(const base::FilePath& path);
DeepScanningClientResponse SimpleDeepScanningClientResponseForTesting(
base::Optional<bool> dlp_success,
base::Optional<bool> malware_success);
enterprise_connectors::ContentAnalysisResponse
SimpleContentAnalysisResponseForTesting(base::Optional<bool> dlp_success,
base::Optional<bool> malware_success);
// Helper function to convert a EventResult to a string that. The format of
// string returned is processed by the sever.
......
......@@ -38,26 +38,7 @@ FakeDeepScanningDialogDelegate::FakeDeepScanningDialogDelegate(
delete_closure_(delete_closure),
status_callback_(status_callback),
encryption_callback_(encryption_callback),
dm_token_(std::move(dm_token)),
use_legacy_protos_(true) {}
FakeDeepScanningDialogDelegate::FakeDeepScanningDialogDelegate(
base::RepeatingClosure delete_closure,
ContentAnalysisStatusCallback status_callback,
EncryptionStatusCallback encryption_callback,
std::string dm_token,
content::WebContents* web_contents,
Data data,
CompletionCallback callback)
: DeepScanningDialogDelegate(web_contents,
std::move(data),
std::move(callback),
DeepScanAccessPoint::UPLOAD),
delete_closure_(delete_closure),
content_analysis_status_callback_(status_callback),
encryption_callback_(encryption_callback),
dm_token_(std::move(dm_token)),
use_legacy_protos_(false) {}
dm_token_(std::move(dm_token)) {}
FakeDeepScanningDialogDelegate::~FakeDeepScanningDialogDelegate() {
if (!delete_closure_.is_null())
......@@ -86,44 +67,11 @@ FakeDeepScanningDialogDelegate::Create(
return ret;
}
// static
std::unique_ptr<DeepScanningDialogDelegate>
FakeDeepScanningDialogDelegate::CreateForConnectors(
base::RepeatingClosure delete_closure,
ContentAnalysisStatusCallback status_callback,
EncryptionStatusCallback encryption_callback,
std::string dm_token,
content::WebContents* web_contents,
Data data,
CompletionCallback callback) {
auto ret = std::make_unique<FakeDeepScanningDialogDelegate>(
delete_closure, status_callback, encryption_callback, std::move(dm_token),
web_contents, std::move(data), std::move(callback));
return ret;
}
// static
void FakeDeepScanningDialogDelegate::SetResponseDelay(base::TimeDelta delay) {
response_delay = delay;
}
// static
DeepScanningClientResponse FakeDeepScanningDialogDelegate::SuccessfulResponse(
bool include_dlp,
bool include_malware) {
DeepScanningClientResponse response;
if (include_dlp) {
response.mutable_dlp_scan_verdict()->set_status(
DlpDeepScanningVerdict::SUCCESS);
}
if (include_malware) {
response.mutable_malware_scan_verdict()->set_verdict(
MalwareDeepScanningVerdict::CLEAN);
}
return response;
}
// static
enterprise_connectors::ContentAnalysisResponse
FakeDeepScanningDialogDelegate::SuccessfulResponse(
......@@ -139,14 +87,6 @@ FakeDeepScanningDialogDelegate::SuccessfulResponse(
return response;
}
// static
DeepScanningClientResponse FakeDeepScanningDialogDelegate::MalwareResponse(
MalwareDeepScanningVerdict::Verdict verdict) {
DeepScanningClientResponse response;
response.mutable_malware_scan_verdict()->set_verdict(verdict);
return response;
}
// static
enterprise_connectors::ContentAnalysisResponse
FakeDeepScanningDialogDelegate::MalwareResponse(
......@@ -164,24 +104,6 @@ FakeDeepScanningDialogDelegate::MalwareResponse(
return response;
}
// static
DeepScanningClientResponse FakeDeepScanningDialogDelegate::DlpResponse(
DlpDeepScanningVerdict::Status status,
const std::string& rule_name,
DlpDeepScanningVerdict::TriggeredRule::Action action) {
DeepScanningClientResponse response;
response.mutable_dlp_scan_verdict()->set_status(status);
if (!rule_name.empty()) {
DlpDeepScanningVerdict::TriggeredRule* rule =
response.mutable_dlp_scan_verdict()->add_triggered_rules();
rule->set_rule_name(rule_name);
rule->set_action(action);
}
return response;
}
// static
enterprise_connectors::ContentAnalysisResponse
FakeDeepScanningDialogDelegate::DlpResponse(
......@@ -202,38 +124,22 @@ FakeDeepScanningDialogDelegate::DlpResponse(
}
// static
DeepScanningClientResponse
enterprise_connectors::ContentAnalysisResponse
FakeDeepScanningDialogDelegate::MalwareAndDlpResponse(
MalwareDeepScanningVerdict::Verdict verdict,
DlpDeepScanningVerdict::Status status,
const std::string& rule_name,
DlpDeepScanningVerdict::TriggeredRule::Action action) {
DeepScanningClientResponse response;
*response.mutable_malware_scan_verdict() =
FakeDeepScanningDialogDelegate::MalwareResponse(verdict)
.malware_scan_verdict();
*response.mutable_dlp_scan_verdict() =
FakeDeepScanningDialogDelegate::DlpResponse(status, rule_name, action)
.dlp_scan_verdict();
return response;
}
// static
enterprise_connectors::ContentAnalysisResponse MalwareAndDlpResponse(
enterprise_connectors::TriggeredRule::Action malware_action,
enterprise_connectors::ContentAnalysisResponse::Result::Status dlp_status,
const std::string& dlp_rule_name,
enterprise_connectors::TriggeredRule::Action dlp_action) {
enterprise_connectors::ContentAnalysisResponse response;
auto* malware_result = response.mutable_results()->Add();
auto* malware_result = response.add_results();
malware_result->set_status(
enterprise_connectors::ContentAnalysisResponse::Result::SUCCESS);
malware_result->set_tag("malware");
auto* malware_rule = malware_result->add_triggered_rules();
malware_rule->set_action(malware_action);
auto* dlp_result = response.mutable_results()->Add();
auto* dlp_result = response.add_results();
dlp_result->set_status(dlp_status);
dlp_result->set_tag("dlp");
auto* dlp_rule = dlp_result->add_triggered_rules();
......@@ -246,26 +152,14 @@ enterprise_connectors::ContentAnalysisResponse MalwareAndDlpResponse(
void FakeDeepScanningDialogDelegate::Response(
base::FilePath path,
std::unique_ptr<BinaryUploadService::Request> request) {
if (use_legacy_protos()) {
DeepScanningClientResponse response =
(status_callback_.is_null() ||
result_ != BinaryUploadService::Result::SUCCESS)
? DeepScanningClientResponse()
: status_callback_.Run(path);
if (path.empty())
StringRequestCallback(result_, response);
else
FileRequestCallback(path, result_, response);
} else {
auto response = (content_analysis_status_callback_.is_null() ||
result_ != BinaryUploadService::Result::SUCCESS)
? enterprise_connectors::ContentAnalysisResponse()
: content_analysis_status_callback_.Run(path);
if (path.empty())
ConnectorStringRequestCallback(result_, response);
else
ConnectorFileRequestCallback(path, result_, response);
}
auto response = (status_callback_.is_null() ||
result_ != BinaryUploadService::Result::SUCCESS)
? enterprise_connectors::ContentAnalysisResponse()
: status_callback_.Run(path);
if (path.empty())
StringRequestCallback(result_, response);
else
FileRequestCallback(path, result_, response);
}
void FakeDeepScanningDialogDelegate::UploadTextForDeepScanning(
......@@ -296,8 +190,4 @@ void FakeDeepScanningDialogDelegate::UploadFileForDeepScanning(
response_delay);
}
bool FakeDeepScanningDialogDelegate::use_legacy_protos() const {
return use_legacy_protos_;
}
} // namespace safe_browsing
......@@ -30,9 +30,7 @@ class FakeDeepScanningDialogDelegate : public DeepScanningDialogDelegate {
// as the value returned by SuccessfulResponse(). To simulate a file that
// does not pass a scan return a failed response, such as the value returned
// by MalwareResponse() or DlpResponse().
using StatusCallback = base::RepeatingCallback<DeepScanningClientResponse(
const base::FilePath&)>;
using ContentAnalysisStatusCallback =
using StatusCallback =
base::RepeatingCallback<enterprise_connectors::ContentAnalysisResponse(
const base::FilePath&)>;
......@@ -48,13 +46,6 @@ class FakeDeepScanningDialogDelegate : public DeepScanningDialogDelegate {
content::WebContents* web_contents,
Data data,
CompletionCallback callback);
FakeDeepScanningDialogDelegate(base::RepeatingClosure delete_closure,
ContentAnalysisStatusCallback status_callback,
EncryptionStatusCallback encryption_callback,
std::string dm_token,
content::WebContents* web_contents,
Data data,
CompletionCallback callback);
~FakeDeepScanningDialogDelegate() override;
// Use with DeepScanningDialogDelegate::SetFactoryForTesting() to create
......@@ -68,56 +59,26 @@ class FakeDeepScanningDialogDelegate : public DeepScanningDialogDelegate {
content::WebContents* web_contents,
Data data,
CompletionCallback callback);
static std::unique_ptr<DeepScanningDialogDelegate> CreateForConnectors(
base::RepeatingClosure delete_closure,
ContentAnalysisStatusCallback status_callback,
EncryptionStatusCallback encryption_callback,
std::string dm_token,
content::WebContents* web_contents,
Data data,
CompletionCallback callback);
// Sets a delay to have before returning responses. This is used by tests that
// need to simulate response taking some time.
static void SetResponseDelay(base::TimeDelta delay);
// Returns a deep scanning response that represents a successful scan.
static DeepScanningClientResponse SuccessfulResponse(
bool include_dlp = true,
bool include_malware = true);
// Returns a content analysis response that represents a successful scan and
// includes the given tags.
static enterprise_connectors::ContentAnalysisResponse SuccessfulResponse(
const std::set<std::string>& tags);
// Returns a deep scanning response with a specific malware verdict.
static DeepScanningClientResponse MalwareResponse(
MalwareDeepScanningVerdict::Verdict verdict);
// Returns a content analysis response with a specific malware action.
static enterprise_connectors::ContentAnalysisResponse MalwareResponse(
enterprise_connectors::TriggeredRule::Action action);
// Returns a deep scanning response with a specific DLP verdict.
static DeepScanningClientResponse DlpResponse(
DlpDeepScanningVerdict::Status status,
const std::string& rule_name,
DlpDeepScanningVerdict::TriggeredRule::Action action);
// Returns a content analysis response with a specific DLP action.
static enterprise_connectors::ContentAnalysisResponse DlpResponse(
enterprise_connectors::ContentAnalysisResponse::Result::Status status,
const std::string& rule_name,
enterprise_connectors::TriggeredRule::Action action);
// Returns a deep scanning response with specific malware and DLP verdicts.
static DeepScanningClientResponse MalwareAndDlpResponse(
MalwareDeepScanningVerdict::Verdict verdict,
DlpDeepScanningVerdict::Status status,
const std::string& rule_name,
DlpDeepScanningVerdict::TriggeredRule::Action action);
// Returns a content analysis response with specific malware and DLP actions.
static enterprise_connectors::ContentAnalysisResponse MalwareAndDlpResponse(
enterprise_connectors::TriggeredRule::Action malware_action,
......@@ -143,15 +104,11 @@ class FakeDeepScanningDialogDelegate : public DeepScanningDialogDelegate {
const base::FilePath& path,
std::unique_ptr<BinaryUploadService::Request> request) override;
bool use_legacy_protos() const;
static BinaryUploadService::Result result_;
base::RepeatingClosure delete_closure_;
StatusCallback status_callback_;
ContentAnalysisStatusCallback content_analysis_status_callback_;
EncryptionStatusCallback encryption_callback_;
std::string dm_token_;
bool use_legacy_protos_;
base::WeakPtrFactory<FakeDeepScanningDialogDelegate> weakptr_factory_{this};
};
......
......@@ -26,45 +26,29 @@
#include "components/prefs/scoped_user_pref_update.h"
#include "components/safe_browsing/core/common/safe_browsing_prefs.h"
#include "components/safe_browsing/core/features.h"
#include "components/safe_browsing/core/proto/webprotect.pb.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/drop_data.h"
#include "content/public/test/browser_task_environment.h"
#include "testing/gtest/include/gtest/gtest.h"
class ChromeWebContentsViewDelegateHandleOnPerformDrop
: public testing::TestWithParam<bool> {
class ChromeWebContentsViewDelegateHandleOnPerformDrop : public testing::Test {
public:
ChromeWebContentsViewDelegateHandleOnPerformDrop() {
EXPECT_TRUE(profile_manager_.SetUp());
profile_ = profile_manager_.CreateTestingProfile("test-user");
if (use_legacy_policies()) {
scoped_feature_list_.InitAndEnableFeature(
safe_browsing::kContentComplianceEnabled);
} else {
scoped_feature_list_.InitWithFeatures(
{safe_browsing::kContentComplianceEnabled,
enterprise_connectors::kEnterpriseConnectorsEnabled},
{});
}
scoped_feature_list_.InitWithFeatures(
{enterprise_connectors::kEnterpriseConnectorsEnabled}, {});
}
void SetUp() override {
if (!use_legacy_policies()) {
enterprise_connectors::ConnectorsManager::GetInstance()
->SetUpForTesting();
}
enterprise_connectors::ConnectorsManager::GetInstance()->SetUpForTesting();
}
void TearDown() override {
if (!use_legacy_policies()) {
enterprise_connectors::ConnectorsManager::GetInstance()
->TearDownForTesting();
}
enterprise_connectors::ConnectorsManager::GetInstance()
->TearDownForTesting();
}
bool use_legacy_policies() const { return GetParam(); }
void RunUntilDone() { run_loop_->Run(); }
content::WebContents* contents() {
......@@ -82,48 +66,30 @@ class ChromeWebContentsViewDelegateHandleOnPerformDrop
run_loop_.reset(new base::RunLoop());
using FakeDelegate = safe_browsing::FakeDeepScanningDialogDelegate;
using Verdict = safe_browsing::DlpDeepScanningVerdict;
auto is_encrypted_callback =
base::BindRepeating([](const base::FilePath&) { return false; });
safe_browsing::SetDMTokenForTesting(
policy::DMToken::CreateValidTokenForTesting("dm_token"));
if (use_legacy_policies()) {
auto callback = base::BindLambdaForTesting(
[this, scan_succeeds](const base::FilePath&)
-> safe_browsing::DeepScanningClientResponse {
current_requests_count_++;
return scan_succeeds ? FakeDelegate::SuccessfulResponse()
: FakeDelegate::DlpResponse(
Verdict::SUCCESS, "block_rule",
Verdict::TriggeredRule::BLOCK);
});
safe_browsing::DeepScanningDialogDelegate::SetFactoryForTesting(
base::BindRepeating(
&safe_browsing::FakeDeepScanningDialogDelegate::Create,
run_loop_->QuitClosure(), callback, is_encrypted_callback,
"dm_token"));
} else {
auto callback = base::BindLambdaForTesting(
[this, scan_succeeds](const base::FilePath&)
-> enterprise_connectors::ContentAnalysisResponse {
std::set<std::string> dlp_tag = {"dlp"};
current_requests_count_++;
return scan_succeeds
? FakeDelegate::SuccessfulResponse(std::move(dlp_tag))
: FakeDelegate::DlpResponse(
enterprise_connectors::ContentAnalysisResponse::
Result::SUCCESS,
"block_rule",
enterprise_connectors::ContentAnalysisResponse::
Result::TriggeredRule::BLOCK);
});
safe_browsing::DeepScanningDialogDelegate::SetFactoryForTesting(
base::BindRepeating(&safe_browsing::FakeDeepScanningDialogDelegate::
CreateForConnectors,
run_loop_->QuitClosure(), callback,
is_encrypted_callback, "dm_token"));
}
auto callback = base::BindLambdaForTesting(
[this, scan_succeeds](const base::FilePath&)
-> enterprise_connectors::ContentAnalysisResponse {
std::set<std::string> dlp_tag = {"dlp"};
current_requests_count_++;
return scan_succeeds
? FakeDelegate::SuccessfulResponse(std::move(dlp_tag))
: FakeDelegate::DlpResponse(
enterprise_connectors::ContentAnalysisResponse::
Result::SUCCESS,
"block_rule",
enterprise_connectors::ContentAnalysisResponse::
Result::TriggeredRule::BLOCK);
});
safe_browsing::DeepScanningDialogDelegate::SetFactoryForTesting(
base::BindRepeating(
&safe_browsing::FakeDeepScanningDialogDelegate::Create,
run_loop_->QuitClosure(), callback, is_encrypted_callback,
"dm_token"));
safe_browsing::DeepScanningDialogDelegate::DisableUIForTesting();
}
......@@ -167,17 +133,9 @@ class ChromeWebContentsViewDelegateHandleOnPerformDrop
private:
void SetScanPolicies(safe_browsing::CheckContentComplianceValues state) {
if (use_legacy_policies()) {
PrefService* pref_service =
TestingBrowserProcess::GetGlobal()->local_state();
pref_service->SetInteger(prefs::kCheckContentCompliance, state);
pref_service->SetInteger(prefs::kDelayDeliveryUntilVerdict,
safe_browsing::DELAY_UPLOADS);
} else {
safe_browsing::SetDlpPolicyForConnectors(state);
safe_browsing::SetDelayDeliveryUntilVerdictPolicyForConnectors(
safe_browsing::DELAY_UPLOADS);
}
safe_browsing::SetDlpPolicyForConnectors(state);
safe_browsing::SetDelayDeliveryUntilVerdictPolicyForConnectors(
safe_browsing::DELAY_UPLOADS);
}
content::BrowserTaskEnvironment task_environment_;
......@@ -190,13 +148,9 @@ class ChromeWebContentsViewDelegateHandleOnPerformDrop
int current_requests_count_ = 0;
};
INSTANTIATE_TEST_SUITE_P(,
ChromeWebContentsViewDelegateHandleOnPerformDrop,
testing::Bool());
// When no drop data is specified, HandleOnPerformDrop() should indicate
// the caller can proceed, whether scanning is enabled or not.
TEST_P(ChromeWebContentsViewDelegateHandleOnPerformDrop, NoData) {
TEST_F(ChromeWebContentsViewDelegateHandleOnPerformDrop, NoData) {
content::DropData data;
SetExpectedRequestsCount(0);
......@@ -205,7 +159,7 @@ TEST_P(ChromeWebContentsViewDelegateHandleOnPerformDrop, NoData) {
}
// Make sure DropData::url_title is handled correctly.
TEST_P(ChromeWebContentsViewDelegateHandleOnPerformDrop, UrlTitle) {
TEST_F(ChromeWebContentsViewDelegateHandleOnPerformDrop, UrlTitle) {
content::DropData data;
data.url_title = base::UTF8ToUTF16(large_text());
......@@ -222,7 +176,7 @@ TEST_P(ChromeWebContentsViewDelegateHandleOnPerformDrop, UrlTitle) {
}
// Make sure DropData::text is handled correctly.
TEST_P(ChromeWebContentsViewDelegateHandleOnPerformDrop, Text) {
TEST_F(ChromeWebContentsViewDelegateHandleOnPerformDrop, Text) {
content::DropData data;
data.text = base::UTF8ToUTF16(large_text());
......@@ -239,7 +193,7 @@ TEST_P(ChromeWebContentsViewDelegateHandleOnPerformDrop, Text) {
}
// Make sure DropData::html is handled correctly.
TEST_P(ChromeWebContentsViewDelegateHandleOnPerformDrop, Html) {
TEST_F(ChromeWebContentsViewDelegateHandleOnPerformDrop, Html) {
content::DropData data;
data.html = base::UTF8ToUTF16(large_text());
......@@ -256,7 +210,7 @@ TEST_P(ChromeWebContentsViewDelegateHandleOnPerformDrop, Html) {
}
// Make sure DropData::file_contents is handled correctly.
TEST_P(ChromeWebContentsViewDelegateHandleOnPerformDrop, FileContents) {
TEST_F(ChromeWebContentsViewDelegateHandleOnPerformDrop, FileContents) {
content::DropData data;
data.file_contents = large_text();
......@@ -273,7 +227,7 @@ TEST_P(ChromeWebContentsViewDelegateHandleOnPerformDrop, FileContents) {
}
// Make sure DropData::filenames is handled correctly.
TEST_P(ChromeWebContentsViewDelegateHandleOnPerformDrop, Files) {
TEST_F(ChromeWebContentsViewDelegateHandleOnPerformDrop, Files) {
base::ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
......@@ -299,7 +253,7 @@ TEST_P(ChromeWebContentsViewDelegateHandleOnPerformDrop, Files) {
}
// Make sure DropData::filenames directories are handled correctly.
TEST_P(ChromeWebContentsViewDelegateHandleOnPerformDrop, Directories) {
TEST_F(ChromeWebContentsViewDelegateHandleOnPerformDrop, Directories) {
base::ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
......
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