blob: b3cc879e31df7ff7b2fe84c60be5b3b8f01c092c [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.
#include "chrome/browser/chromeos/policy/dlp/dlp_content_manager.h"
#include "chrome/test/base/testing_profile.h"
#include "content/public/test/browser_task_environment.h"
#include "content/public/test/test_renderer_host.h"
#include "content/public/test/web_contents_tester.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace policy {
class DlpContentManagerTest : public testing::Test {
protected:
void SetUp() override {
testing::Test::SetUp();
profile_ = std::make_unique<TestingProfile>();
}
std::unique_ptr<content::WebContents> CreateWebContents() {
return content::WebContentsTester::CreateTestWebContents(profile_.get(),
nullptr);
}
void ChangeConfidentiality(content::WebContents* web_contents,
bool confidential) {
manager_.OnConfidentialityChanged(web_contents, confidential);
}
void ChangeVisibility(content::WebContents* web_contents, bool visible) {
if (visible) {
web_contents->WasShown();
} else {
web_contents->WasHidden();
}
manager_.OnVisibilityChanged(web_contents, visible);
}
void DestroyWebContents(content::WebContents* web_contents) {
manager_.OnWebContentsDestroyed(web_contents);
}
DlpContentManager manager_;
private:
content::BrowserTaskEnvironment task_environment_;
content::RenderViewHostTestEnabler rvh_test_enabler_;
std::unique_ptr<TestingProfile> profile_;
};
TEST_F(DlpContentManagerTest, NoConfidentialDataShown) {
std::unique_ptr<content::WebContents> web_contents = CreateWebContents();
EXPECT_FALSE(manager_.IsWebContentsConfidential(web_contents.get()));
EXPECT_FALSE(manager_.IsConfidentialDataPresentOnScreen());
}
TEST_F(DlpContentManagerTest, ConfidentialDataShown) {
std::unique_ptr<content::WebContents> web_contents = CreateWebContents();
EXPECT_FALSE(manager_.IsWebContentsConfidential(web_contents.get()));
EXPECT_FALSE(manager_.IsConfidentialDataPresentOnScreen());
ChangeConfidentiality(web_contents.get(), /*confidential=*/true);
EXPECT_TRUE(manager_.IsWebContentsConfidential(web_contents.get()));
EXPECT_TRUE(manager_.IsConfidentialDataPresentOnScreen());
DestroyWebContents(web_contents.get());
EXPECT_FALSE(manager_.IsWebContentsConfidential(web_contents.get()));
EXPECT_FALSE(manager_.IsConfidentialDataPresentOnScreen());
}
TEST_F(DlpContentManagerTest, ConfidentialDataVisibilityChanged) {
std::unique_ptr<content::WebContents> web_contents = CreateWebContents();
EXPECT_FALSE(manager_.IsWebContentsConfidential(web_contents.get()));
EXPECT_FALSE(manager_.IsConfidentialDataPresentOnScreen());
ChangeConfidentiality(web_contents.get(), /*confidential=*/true);
EXPECT_TRUE(manager_.IsWebContentsConfidential(web_contents.get()));
EXPECT_TRUE(manager_.IsConfidentialDataPresentOnScreen());
ChangeVisibility(web_contents.get(), /*visible=*/false);
EXPECT_TRUE(manager_.IsWebContentsConfidential(web_contents.get()));
EXPECT_FALSE(manager_.IsConfidentialDataPresentOnScreen());
ChangeVisibility(web_contents.get(), /*visible=*/true);
EXPECT_TRUE(manager_.IsWebContentsConfidential(web_contents.get()));
EXPECT_TRUE(manager_.IsConfidentialDataPresentOnScreen());
DestroyWebContents(web_contents.get());
EXPECT_FALSE(manager_.IsWebContentsConfidential(web_contents.get()));
EXPECT_FALSE(manager_.IsConfidentialDataPresentOnScreen());
}
TEST_F(DlpContentManagerTest,
TwoWebContentsVisibilityAndConfidentialityChanged) {
std::unique_ptr<content::WebContents> web_contents1 = CreateWebContents();
std::unique_ptr<content::WebContents> web_contents2 = CreateWebContents();
EXPECT_FALSE(manager_.IsWebContentsConfidential(web_contents1.get()));
EXPECT_FALSE(manager_.IsWebContentsConfidential(web_contents2.get()));
EXPECT_FALSE(manager_.IsConfidentialDataPresentOnScreen());
// WebContents 1 becomes confidential.
ChangeConfidentiality(web_contents1.get(), /*confidential=*/true);
EXPECT_TRUE(manager_.IsWebContentsConfidential(web_contents1.get()));
EXPECT_FALSE(manager_.IsWebContentsConfidential(web_contents2.get()));
EXPECT_TRUE(manager_.IsConfidentialDataPresentOnScreen());
// WebContents 2 is hidden.
ChangeVisibility(web_contents2.get(), /*visible=*/false);
EXPECT_TRUE(manager_.IsWebContentsConfidential(web_contents1.get()));
EXPECT_FALSE(manager_.IsWebContentsConfidential(web_contents2.get()));
EXPECT_TRUE(manager_.IsConfidentialDataPresentOnScreen());
// WebContents 1 becomes non-confidential.
ChangeConfidentiality(web_contents1.get(), /*confidential=*/false);
EXPECT_FALSE(manager_.IsWebContentsConfidential(web_contents1.get()));
EXPECT_FALSE(manager_.IsWebContentsConfidential(web_contents2.get()));
EXPECT_FALSE(manager_.IsConfidentialDataPresentOnScreen());
// WebContents 2 becomes confidential.
ChangeConfidentiality(web_contents2.get(), /*confidential=*/true);
EXPECT_FALSE(manager_.IsWebContentsConfidential(web_contents1.get()));
EXPECT_TRUE(manager_.IsWebContentsConfidential(web_contents2.get()));
EXPECT_FALSE(manager_.IsConfidentialDataPresentOnScreen());
// WebContents 2 is visible.
ChangeVisibility(web_contents2.get(), /*visible=*/true);
EXPECT_FALSE(manager_.IsWebContentsConfidential(web_contents1.get()));
EXPECT_TRUE(manager_.IsWebContentsConfidential(web_contents2.get()));
EXPECT_TRUE(manager_.IsConfidentialDataPresentOnScreen());
DestroyWebContents(web_contents1.get());
DestroyWebContents(web_contents2.get());
EXPECT_FALSE(manager_.IsWebContentsConfidential(web_contents1.get()));
EXPECT_FALSE(manager_.IsWebContentsConfidential(web_contents2.get()));
EXPECT_FALSE(manager_.IsConfidentialDataPresentOnScreen());
}
} // namespace policy