[pdf] Migrate printing unit tests
Migrates PdfViewPluginBase tests that exercise printing. Also replaces the ad hoc TestPDFiumEngine::SetPermissions() API with a gMock-based equivalent. Bug: 1323307 Change-Id: I6fe7cd54a5bc208990fccdbef16a6e5cdf7aa879 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3696484 Commit-Queue: K. Moon <kmoon@chromium.org> Reviewed-by: Lei Zhang <thestig@chromium.org> Cr-Commit-Position: refs/heads/main@{#1012236}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
f2177b39b8
commit
fac20b00e9
@ -39,14 +39,9 @@ namespace chrome_pdf {
|
||||
|
||||
namespace {
|
||||
|
||||
using blink::WebPrintParams;
|
||||
using ::testing::ByMove;
|
||||
using ::testing::ElementsAre;
|
||||
using ::testing::Field;
|
||||
using ::testing::InSequence;
|
||||
using ::testing::IsEmpty;
|
||||
using ::testing::IsFalse;
|
||||
using ::testing::IsTrue;
|
||||
using ::testing::NiceMock;
|
||||
using ::testing::Return;
|
||||
using ::testing::SaveArg;
|
||||
@ -197,6 +192,24 @@ class PdfViewPluginBaseWithEngineTest : public PdfViewPluginBaseTest {
|
||||
})");
|
||||
fake_plugin_.HandleMessage(message.GetDict());
|
||||
}
|
||||
|
||||
void SetEnginePermissions(
|
||||
const std::vector<DocumentPermission>& permissions) {
|
||||
TestPDFiumEngine& engine =
|
||||
*static_cast<TestPDFiumEngine*>(fake_plugin_.engine());
|
||||
|
||||
// TODO(crbug.com/1323307): Break up tests instead of "resetting" mocks.
|
||||
for (DocumentPermission permission :
|
||||
{DocumentPermission::kCopy, DocumentPermission::kCopyAccessible,
|
||||
DocumentPermission::kPrintLowQuality,
|
||||
DocumentPermission::kPrintHighQuality}) {
|
||||
ON_CALL(engine, HasPermission(permission)).WillByDefault(Return(false));
|
||||
}
|
||||
|
||||
for (DocumentPermission permission : permissions) {
|
||||
ON_CALL(engine, HasPermission(permission)).WillByDefault(Return(true));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class PdfViewPluginBaseWithScopedLocaleTest
|
||||
@ -571,80 +584,12 @@ TEST_F(PdfViewPluginBaseWithEngineTest, SelectionChangedScaled) {
|
||||
EXPECT_EQ(gfx::Point(-300, -56), viewport_info.scroll);
|
||||
}
|
||||
|
||||
TEST_F(PdfViewPluginBaseWithEngineTest, NormalPrinting) {
|
||||
WebPrintParams params;
|
||||
const std::vector<int> kPageNumbers = {0};
|
||||
|
||||
auto* engine = static_cast<TestPDFiumEngine*>(fake_plugin_.engine());
|
||||
engine->SetPermissions({DocumentPermission::kPrintHighQuality,
|
||||
DocumentPermission::kPrintLowQuality});
|
||||
|
||||
InSequence sequence;
|
||||
EXPECT_CALL(*engine,
|
||||
PrintPages(kPageNumbers,
|
||||
Field(&WebPrintParams::rasterize_pdf, IsFalse())))
|
||||
.Times(1);
|
||||
EXPECT_CALL(
|
||||
*engine,
|
||||
PrintPages(kPageNumbers, Field(&WebPrintParams::rasterize_pdf, IsTrue())))
|
||||
.Times(1);
|
||||
|
||||
ASSERT_EQ(static_cast<int>(TestPDFiumEngine::kPageNumber),
|
||||
fake_plugin_.PrintBegin(params));
|
||||
fake_plugin_.PrintPages(kPageNumbers);
|
||||
fake_plugin_.PrintEnd();
|
||||
|
||||
params.rasterize_pdf = true;
|
||||
ASSERT_EQ(static_cast<int>(TestPDFiumEngine::kPageNumber),
|
||||
fake_plugin_.PrintBegin(params));
|
||||
fake_plugin_.PrintPages(kPageNumbers);
|
||||
fake_plugin_.PrintEnd();
|
||||
}
|
||||
|
||||
// Regression test for crbug.com/1307219.
|
||||
TEST_F(PdfViewPluginBaseWithEngineTest, LowQualityPrinting) {
|
||||
WebPrintParams params;
|
||||
const std::vector<int> kPageNumbers = {0};
|
||||
|
||||
auto* engine = static_cast<TestPDFiumEngine*>(fake_plugin_.engine());
|
||||
engine->SetPermissions({DocumentPermission::kPrintLowQuality});
|
||||
|
||||
EXPECT_CALL(
|
||||
*engine,
|
||||
PrintPages(kPageNumbers, Field(&WebPrintParams::rasterize_pdf, IsTrue())))
|
||||
.Times(2);
|
||||
|
||||
ASSERT_EQ(static_cast<int>(TestPDFiumEngine::kPageNumber),
|
||||
fake_plugin_.PrintBegin(params));
|
||||
fake_plugin_.PrintPages(kPageNumbers);
|
||||
fake_plugin_.PrintEnd();
|
||||
|
||||
params.rasterize_pdf = true;
|
||||
ASSERT_EQ(static_cast<int>(TestPDFiumEngine::kPageNumber),
|
||||
fake_plugin_.PrintBegin(params));
|
||||
fake_plugin_.PrintPages(kPageNumbers);
|
||||
fake_plugin_.PrintEnd();
|
||||
}
|
||||
|
||||
TEST_F(PdfViewPluginBaseWithEngineTest, NoPrinting) {
|
||||
WebPrintParams params;
|
||||
|
||||
auto* engine = static_cast<TestPDFiumEngine*>(fake_plugin_.engine());
|
||||
engine->SetPermissions({});
|
||||
|
||||
EXPECT_EQ(0, fake_plugin_.PrintBegin(params));
|
||||
|
||||
params.rasterize_pdf = true;
|
||||
EXPECT_EQ(0, fake_plugin_.PrintBegin(params));
|
||||
}
|
||||
|
||||
TEST_F(PdfViewPluginBaseWithEngineTest, GetContentRestrictions) {
|
||||
auto* engine = static_cast<TestPDFiumEngine*>(fake_plugin_.engine());
|
||||
static constexpr int kContentRestrictionCutPaste =
|
||||
kContentRestrictionCut | kContentRestrictionPaste;
|
||||
|
||||
// Test engine without any permissions.
|
||||
engine->SetPermissions({});
|
||||
SetEnginePermissions({});
|
||||
|
||||
int content_restrictions = fake_plugin_.GetContentRestrictions();
|
||||
EXPECT_EQ(kContentRestrictionCutPaste | kContentRestrictionCopy |
|
||||
@ -652,48 +597,46 @@ TEST_F(PdfViewPluginBaseWithEngineTest, GetContentRestrictions) {
|
||||
content_restrictions);
|
||||
|
||||
// Test engine with only copy permission.
|
||||
engine->SetPermissions({DocumentPermission::kCopy});
|
||||
SetEnginePermissions({DocumentPermission::kCopy});
|
||||
|
||||
content_restrictions = fake_plugin_.GetContentRestrictions();
|
||||
EXPECT_EQ(kContentRestrictionCutPaste | kContentRestrictionPrint,
|
||||
content_restrictions);
|
||||
|
||||
// Test engine with only print low quality permission.
|
||||
engine->SetPermissions({DocumentPermission::kPrintLowQuality});
|
||||
SetEnginePermissions({DocumentPermission::kPrintLowQuality});
|
||||
|
||||
content_restrictions = fake_plugin_.GetContentRestrictions();
|
||||
EXPECT_EQ(kContentRestrictionCutPaste | kContentRestrictionCopy,
|
||||
content_restrictions);
|
||||
|
||||
// Test engine with both copy and print low quality permissions.
|
||||
engine->SetPermissions(
|
||||
SetEnginePermissions(
|
||||
{DocumentPermission::kCopy, DocumentPermission::kPrintLowQuality});
|
||||
|
||||
content_restrictions = fake_plugin_.GetContentRestrictions();
|
||||
EXPECT_EQ(kContentRestrictionCutPaste, content_restrictions);
|
||||
|
||||
// Test engine with print high and low quality permissions.
|
||||
engine->SetPermissions({DocumentPermission::kPrintHighQuality,
|
||||
DocumentPermission::kPrintLowQuality});
|
||||
SetEnginePermissions({DocumentPermission::kPrintHighQuality,
|
||||
DocumentPermission::kPrintLowQuality});
|
||||
|
||||
content_restrictions = fake_plugin_.GetContentRestrictions();
|
||||
EXPECT_EQ(kContentRestrictionCutPaste | kContentRestrictionCopy,
|
||||
content_restrictions);
|
||||
|
||||
// Test engine with copy, print high and low quality permissions.
|
||||
engine->SetPermissions({DocumentPermission::kCopy,
|
||||
DocumentPermission::kPrintHighQuality,
|
||||
DocumentPermission::kPrintLowQuality});
|
||||
SetEnginePermissions({DocumentPermission::kCopy,
|
||||
DocumentPermission::kPrintHighQuality,
|
||||
DocumentPermission::kPrintLowQuality});
|
||||
|
||||
content_restrictions = fake_plugin_.GetContentRestrictions();
|
||||
EXPECT_EQ(kContentRestrictionCutPaste, content_restrictions);
|
||||
}
|
||||
|
||||
TEST_F(PdfViewPluginBaseWithEngineTest, GetAccessibilityDocInfo) {
|
||||
auto* engine = static_cast<TestPDFiumEngine*>(fake_plugin_.engine());
|
||||
|
||||
// Test engine without any permissions.
|
||||
engine->SetPermissions({});
|
||||
SetEnginePermissions({});
|
||||
|
||||
AccessibilityDocInfo doc_info = fake_plugin_.GetAccessibilityDocInfo();
|
||||
EXPECT_EQ(TestPDFiumEngine::kPageNumber, doc_info.page_count);
|
||||
@ -701,7 +644,7 @@ TEST_F(PdfViewPluginBaseWithEngineTest, GetAccessibilityDocInfo) {
|
||||
EXPECT_FALSE(doc_info.text_copyable);
|
||||
|
||||
// Test engine with only copy permission.
|
||||
engine->SetPermissions({DocumentPermission::kCopy});
|
||||
SetEnginePermissions({DocumentPermission::kCopy});
|
||||
|
||||
doc_info = fake_plugin_.GetAccessibilityDocInfo();
|
||||
EXPECT_EQ(TestPDFiumEngine::kPageNumber, doc_info.page_count);
|
||||
@ -709,7 +652,7 @@ TEST_F(PdfViewPluginBaseWithEngineTest, GetAccessibilityDocInfo) {
|
||||
EXPECT_TRUE(doc_info.text_copyable);
|
||||
|
||||
// Test engine with only copy accessible permission.
|
||||
engine->SetPermissions({DocumentPermission::kCopyAccessible});
|
||||
SetEnginePermissions({DocumentPermission::kCopyAccessible});
|
||||
|
||||
doc_info = fake_plugin_.GetAccessibilityDocInfo();
|
||||
EXPECT_EQ(TestPDFiumEngine::kPageNumber, doc_info.page_count);
|
||||
@ -717,7 +660,7 @@ TEST_F(PdfViewPluginBaseWithEngineTest, GetAccessibilityDocInfo) {
|
||||
EXPECT_FALSE(doc_info.text_copyable);
|
||||
|
||||
// Test engine with both copy and copy accessible permission.
|
||||
engine->SetPermissions(
|
||||
SetEnginePermissions(
|
||||
{DocumentPermission::kCopy, DocumentPermission::kCopyAccessible});
|
||||
|
||||
doc_info = fake_plugin_.GetAccessibilityDocInfo();
|
||||
|
@ -4,6 +4,8 @@
|
||||
|
||||
#include "pdf/pdf_view_web_plugin.h"
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
@ -34,6 +36,7 @@
|
||||
#include "pdf/pdf_view_plugin_base.h"
|
||||
#include "pdf/test/test_helpers.h"
|
||||
#include "pdf/test/test_pdfium_engine.h"
|
||||
#include "printing/metafile_skia.h"
|
||||
#include "services/network/public/mojom/referrer_policy.mojom-shared.h"
|
||||
#include "testing/gmock/include/gmock/gmock.h"
|
||||
#include "testing/gtest/include/gtest/gtest.h"
|
||||
@ -55,6 +58,7 @@
|
||||
#include "third_party/blink/public/web/web_associated_url_loader_client.h"
|
||||
#include "third_party/blink/public/web/web_plugin_container.h"
|
||||
#include "third_party/blink/public/web/web_plugin_params.h"
|
||||
#include "third_party/blink/public/web/web_print_params.h"
|
||||
#include "third_party/skia/include/core/SkBitmap.h"
|
||||
#include "third_party/skia/include/core/SkCanvas.h"
|
||||
#include "third_party/skia/include/core/SkColor.h"
|
||||
@ -80,11 +84,14 @@ namespace chrome_pdf {
|
||||
namespace {
|
||||
|
||||
using ::testing::AnyNumber;
|
||||
using ::testing::ElementsAre;
|
||||
using ::testing::ElementsAreArray;
|
||||
using ::testing::Eq;
|
||||
using ::testing::InSequence;
|
||||
using ::testing::Invoke;
|
||||
using ::testing::IsEmpty;
|
||||
using ::testing::IsFalse;
|
||||
using ::testing::IsTrue;
|
||||
using ::testing::MockFunction;
|
||||
using ::testing::NiceMock;
|
||||
using ::testing::Pointwise;
|
||||
@ -1729,6 +1736,107 @@ TEST_F(PdfViewWebPluginSubmitFormTest, AbsoluteUrlInvalidDocumentUrl) {
|
||||
SubmitFailingForm("https://wwww.example.com");
|
||||
}
|
||||
|
||||
class PdfViewWebPluginPrintTest : public PdfViewWebPluginTest {
|
||||
protected:
|
||||
void SetUp() override {
|
||||
PdfViewWebPluginTest::SetUp();
|
||||
|
||||
// Size must be at least 1 for conversion to `SkMemoryStream`.
|
||||
ON_CALL(*engine_ptr_, PrintPages)
|
||||
.WillByDefault(Return(std::vector<uint8_t>(1)));
|
||||
|
||||
canvas_.sk_canvas()->SetPrintingMetafile(&metafile_);
|
||||
}
|
||||
|
||||
printing::MetafileSkia metafile_;
|
||||
};
|
||||
|
||||
TEST_F(PdfViewWebPluginPrintTest, HighQuality) {
|
||||
EXPECT_CALL(*engine_ptr_,
|
||||
HasPermission(DocumentPermission::kPrintHighQuality))
|
||||
.WillRepeatedly(Return(true));
|
||||
EXPECT_CALL(*engine_ptr_, HasPermission(DocumentPermission::kPrintLowQuality))
|
||||
.WillRepeatedly(Return(true));
|
||||
ASSERT_EQ(static_cast<int>(TestPDFiumEngine::kPageNumber),
|
||||
plugin_->PrintBegin(blink::WebPrintParams()));
|
||||
|
||||
EXPECT_CALL(
|
||||
*engine_ptr_,
|
||||
PrintPages(ElementsAre(0),
|
||||
Field(&blink::WebPrintParams::rasterize_pdf, IsFalse())));
|
||||
plugin_->PrintPage(0, canvas_.sk_canvas());
|
||||
plugin_->PrintEnd();
|
||||
}
|
||||
|
||||
TEST_F(PdfViewWebPluginPrintTest, HighQualityRasterized) {
|
||||
EXPECT_CALL(*engine_ptr_,
|
||||
HasPermission(DocumentPermission::kPrintHighQuality))
|
||||
.WillRepeatedly(Return(true));
|
||||
EXPECT_CALL(*engine_ptr_, HasPermission(DocumentPermission::kPrintLowQuality))
|
||||
.WillRepeatedly(Return(true));
|
||||
|
||||
blink::WebPrintParams params;
|
||||
params.rasterize_pdf = true;
|
||||
ASSERT_EQ(static_cast<int>(TestPDFiumEngine::kPageNumber),
|
||||
plugin_->PrintBegin(params));
|
||||
|
||||
EXPECT_CALL(
|
||||
*engine_ptr_,
|
||||
PrintPages(ElementsAre(0),
|
||||
Field(&blink::WebPrintParams::rasterize_pdf, IsTrue())));
|
||||
plugin_->PrintPage(0, canvas_.sk_canvas());
|
||||
plugin_->PrintEnd();
|
||||
}
|
||||
|
||||
// Regression test for crbug.com/1307219.
|
||||
TEST_F(PdfViewWebPluginPrintTest, LowQuality) {
|
||||
EXPECT_CALL(*engine_ptr_,
|
||||
HasPermission(DocumentPermission::kPrintHighQuality))
|
||||
.WillRepeatedly(Return(false));
|
||||
EXPECT_CALL(*engine_ptr_, HasPermission(DocumentPermission::kPrintLowQuality))
|
||||
.WillRepeatedly(Return(true));
|
||||
ASSERT_EQ(static_cast<int>(TestPDFiumEngine::kPageNumber),
|
||||
plugin_->PrintBegin(blink::WebPrintParams()));
|
||||
|
||||
EXPECT_CALL(
|
||||
*engine_ptr_,
|
||||
PrintPages(ElementsAre(0),
|
||||
Field(&blink::WebPrintParams::rasterize_pdf, IsTrue())));
|
||||
plugin_->PrintPage(0, canvas_.sk_canvas());
|
||||
plugin_->PrintEnd();
|
||||
}
|
||||
|
||||
// Regression test for crbug.com/1307219.
|
||||
TEST_F(PdfViewWebPluginPrintTest, LowQualityRasterized) {
|
||||
EXPECT_CALL(*engine_ptr_,
|
||||
HasPermission(DocumentPermission::kPrintHighQuality))
|
||||
.WillRepeatedly(Return(false));
|
||||
EXPECT_CALL(*engine_ptr_, HasPermission(DocumentPermission::kPrintLowQuality))
|
||||
.WillRepeatedly(Return(true));
|
||||
|
||||
blink::WebPrintParams params;
|
||||
params.rasterize_pdf = true;
|
||||
ASSERT_EQ(static_cast<int>(TestPDFiumEngine::kPageNumber),
|
||||
plugin_->PrintBegin(params));
|
||||
|
||||
EXPECT_CALL(
|
||||
*engine_ptr_,
|
||||
PrintPages(ElementsAre(0),
|
||||
Field(&blink::WebPrintParams::rasterize_pdf, IsTrue())));
|
||||
plugin_->PrintPage(0, canvas_.sk_canvas());
|
||||
plugin_->PrintEnd();
|
||||
}
|
||||
|
||||
TEST_F(PdfViewWebPluginPrintTest, Disabled) {
|
||||
EXPECT_EQ(0, plugin_->PrintBegin(blink::WebPrintParams()));
|
||||
}
|
||||
|
||||
TEST_F(PdfViewWebPluginPrintTest, DisabledRasterized) {
|
||||
blink::WebPrintParams params;
|
||||
params.rasterize_pdf = true;
|
||||
EXPECT_EQ(0, plugin_->PrintBegin(params));
|
||||
}
|
||||
|
||||
class PdfViewWebPluginPrintPreviewTest : public PdfViewWebPluginTest {
|
||||
protected:
|
||||
void SetUpClient() override {
|
||||
|
@ -11,8 +11,6 @@
|
||||
#include <vector>
|
||||
|
||||
#include "base/check_op.h"
|
||||
#include "base/containers/contains.h"
|
||||
#include "base/containers/flat_set.h"
|
||||
#include "base/values.h"
|
||||
#include "pdf/document_attachment_info.h"
|
||||
#include "pdf/document_metadata.h"
|
||||
@ -36,10 +34,6 @@ TestPDFiumEngine::TestPDFiumEngine(PDFEngine::Client* client)
|
||||
|
||||
TestPDFiumEngine::~TestPDFiumEngine() = default;
|
||||
|
||||
bool TestPDFiumEngine::HasPermission(DocumentPermission permission) const {
|
||||
return base::Contains(permissions_, permission);
|
||||
}
|
||||
|
||||
const std::vector<DocumentAttachmentInfo>&
|
||||
TestPDFiumEngine::GetDocumentAttachmentInfoList() const {
|
||||
return doc_attachment_info_list_;
|
||||
@ -71,12 +65,4 @@ std::vector<uint8_t> TestPDFiumEngine::GetSaveData() {
|
||||
return std::vector<uint8_t>(std::begin(kSaveData), std::end(kSaveData));
|
||||
}
|
||||
|
||||
void TestPDFiumEngine::SetPermissions(
|
||||
const std::vector<DocumentPermission>& permissions) {
|
||||
permissions_.clear();
|
||||
|
||||
for (auto& permission : permissions)
|
||||
permissions_.insert(permission);
|
||||
}
|
||||
|
||||
} // namespace chrome_pdf
|
||||
|
@ -9,7 +9,6 @@
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "base/containers/flat_set.h"
|
||||
#include "base/values.h"
|
||||
#include "pdf/document_attachment_info.h"
|
||||
#include "pdf/document_metadata.h"
|
||||
@ -60,8 +59,7 @@ class TestPDFiumEngine : public PDFiumEngine {
|
||||
|
||||
MOCK_METHOD(std::vector<uint8_t>,
|
||||
PrintPages,
|
||||
(const std::vector<int>& page_numbers,
|
||||
const blink::WebPrintParams& print_params),
|
||||
(const std::vector<int>&, const blink::WebPrintParams&),
|
||||
(override));
|
||||
|
||||
MOCK_METHOD(void, ZoomUpdated, (double), (override));
|
||||
@ -71,7 +69,7 @@ class TestPDFiumEngine : public PDFiumEngine {
|
||||
(const DocumentLayout::Options&),
|
||||
(override));
|
||||
|
||||
bool HasPermission(DocumentPermission permission) const override;
|
||||
MOCK_METHOD(bool, HasPermission, (DocumentPermission), (const override));
|
||||
|
||||
const std::vector<DocumentAttachmentInfo>& GetDocumentAttachmentInfoList()
|
||||
const override;
|
||||
@ -95,8 +93,6 @@ class TestPDFiumEngine : public PDFiumEngine {
|
||||
|
||||
MOCK_METHOD(void, SetCaretPosition, (const gfx::Point&), (override));
|
||||
|
||||
void SetPermissions(const std::vector<DocumentPermission>& permissions);
|
||||
|
||||
MOCK_METHOD(void, OnDocumentCanceled, (), (override));
|
||||
|
||||
protected:
|
||||
@ -110,8 +106,6 @@ class TestPDFiumEngine : public PDFiumEngine {
|
||||
std::vector<DocumentAttachmentInfo> doc_attachment_info_list_;
|
||||
|
||||
DocumentMetadata metadata_;
|
||||
|
||||
base::flat_set<DocumentPermission> permissions_;
|
||||
};
|
||||
|
||||
} // namespace chrome_pdf
|
||||
|
Reference in New Issue
Block a user