1 // Copyright 2021 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "pdf/parsed_params.h"
9 #include "pdf/pdfium/pdfium_form_filler.h"
10 #include "testing/gmock/include/gmock/gmock.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "third_party/abseil-cpp/absl/types/optional.h"
13 #include "third_party/blink/public/platform/web_string.h"
14 #include "third_party/blink/public/platform/web_vector.h"
15 #include "third_party/blink/public/web/web_plugin_params.h"
16 #include "third_party/skia/include/core/SkColor.h"
18 namespace chrome_pdf {
22 using ::testing::AnyOf;
24 constexpr char kFakeSrcUrl[] = "chrome-extension://fake-source-url";
26 // Creates a `blink::WebPluginParams` with only required attributes.
27 blink::WebPluginParams CreateMinimalWebPluginParams() {
28 blink::WebPluginParams params;
29 params.attribute_names.push_back(blink::WebString("src"));
30 params.attribute_values.push_back(blink::WebString(kFakeSrcUrl));
36 TEST(ParsedParamsTest, ParseWebPluginParamsMinimal) {
37 blink::WebPluginParams params = CreateMinimalWebPluginParams();
39 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
40 ASSERT_TRUE(result.has_value());
42 EXPECT_EQ(kFakeSrcUrl, result->src_url);
43 EXPECT_EQ(kFakeSrcUrl, result->original_url);
44 EXPECT_EQ("", result->top_level_url);
45 EXPECT_FALSE(result->full_frame);
46 EXPECT_EQ(SK_ColorTRANSPARENT, result->background_color);
47 EXPECT_EQ(PDFiumFormFiller::DefaultScriptOption(), result->script_option);
48 EXPECT_FALSE(result->has_edits);
49 EXPECT_FALSE(result->use_skia);
52 TEST(ParsedParamsTest, ParseWebPluginParamsWithoutSourceUrl) {
53 blink::WebPluginParams params;
55 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
56 EXPECT_FALSE(result.has_value());
59 TEST(ParsedParamsTest, ParseWebPluginParamsWithOriginalUrl) {
60 blink::WebPluginParams params = CreateMinimalWebPluginParams();
61 params.attribute_names.push_back(blink::WebString("original-url"));
62 params.attribute_values.push_back(
63 blink::WebString("https://example.com/original.pdf"));
65 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
66 ASSERT_TRUE(result.has_value());
68 EXPECT_EQ(kFakeSrcUrl, result->src_url);
69 EXPECT_EQ("https://example.com/original.pdf", result->original_url);
72 TEST(ParsedParamsTest, ParseWebPluginParamsWithTopLevelUrl) {
73 blink::WebPluginParams params = CreateMinimalWebPluginParams();
74 params.attribute_names.push_back(blink::WebString("top-level-url"));
75 params.attribute_values.push_back(
76 blink::WebString("https://example.net/top.html"));
78 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
79 ASSERT_TRUE(result.has_value());
81 EXPECT_EQ("https://example.net/top.html", result->top_level_url);
84 TEST(ParsedParamsTest, ParseWebPluginParamsWithFullFrame) {
85 blink::WebPluginParams params = CreateMinimalWebPluginParams();
86 params.attribute_names.push_back(blink::WebString("full-frame"));
87 params.attribute_values.push_back(blink::WebString(""));
89 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
90 ASSERT_TRUE(result.has_value());
92 EXPECT_TRUE(result->full_frame);
95 TEST(ParsedParamsTest, ParseWebPluginParamsWithFullFrameNonEmpty) {
96 blink::WebPluginParams params = CreateMinimalWebPluginParams();
97 params.attribute_names.push_back(blink::WebString("full-frame"));
98 params.attribute_values.push_back(blink::WebString("false"));
100 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
101 ASSERT_TRUE(result.has_value());
103 EXPECT_TRUE(result->full_frame);
106 TEST(ParsedParamsTest, ParseWebPluginParamsWithBackgroundColor) {
107 blink::WebPluginParams params = CreateMinimalWebPluginParams();
108 params.attribute_names.push_back(blink::WebString("background-color"));
109 params.attribute_values.push_back(blink::WebString("4283586137"));
111 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
112 ASSERT_TRUE(result.has_value());
114 EXPECT_EQ(4283586137, result->background_color);
117 TEST(ParsedParamsTest, ParseWebPluginParamsWithInvalidBackgroundColor) {
118 blink::WebPluginParams params = CreateMinimalWebPluginParams();
119 params.attribute_names.push_back(blink::WebString("background-color"));
120 params.attribute_values.push_back(blink::WebString("red"));
122 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
123 EXPECT_FALSE(result.has_value());
126 TEST(ParsedParamsTest, ParseWebPluginParamsWithJavascriptAllow) {
127 blink::WebPluginParams params = CreateMinimalWebPluginParams();
128 params.attribute_names.push_back(blink::WebString("javascript"));
129 params.attribute_values.push_back(blink::WebString("allow"));
131 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
132 ASSERT_TRUE(result.has_value());
134 EXPECT_THAT(result->script_option,
135 AnyOf(PDFiumFormFiller::ScriptOption::kJavaScript,
136 PDFiumFormFiller::ScriptOption::kJavaScriptAndXFA));
139 TEST(ParsedParamsTest, ParseWebPluginParamsWithJavascriptEmpty) {
140 blink::WebPluginParams params = CreateMinimalWebPluginParams();
141 params.attribute_names.push_back(blink::WebString("javascript"));
142 params.attribute_values.push_back(blink::WebString(""));
144 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
145 ASSERT_TRUE(result.has_value());
147 EXPECT_EQ(PDFiumFormFiller::ScriptOption::kNoJavaScript,
148 result->script_option);
151 TEST(ParsedParamsTest, ParseWebPluginParamsWithJavascriptNonEmpty) {
152 blink::WebPluginParams params = CreateMinimalWebPluginParams();
153 params.attribute_names.push_back(blink::WebString("javascript"));
154 params.attribute_values.push_back(blink::WebString("true"));
156 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
157 ASSERT_TRUE(result.has_value());
159 EXPECT_EQ(PDFiumFormFiller::ScriptOption::kNoJavaScript,
160 result->script_option);
163 TEST(ParsedParamsTest, ParseWebPluginParamsWithHasEdits) {
164 blink::WebPluginParams params = CreateMinimalWebPluginParams();
165 params.attribute_names.push_back(blink::WebString("has-edits"));
166 params.attribute_values.push_back(blink::WebString(""));
168 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
169 ASSERT_TRUE(result.has_value());
171 EXPECT_TRUE(result->has_edits);
174 TEST(ParsedParamsTest, ParseWebPluginParamsWithHasEditsNonEmpty) {
175 blink::WebPluginParams params = CreateMinimalWebPluginParams();
176 params.attribute_names.push_back(blink::WebString("has-edits"));
177 params.attribute_values.push_back(blink::WebString("false"));
179 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
180 ASSERT_TRUE(result.has_value());
182 EXPECT_TRUE(result->has_edits);
185 TEST(ParsedParamsTest, ParseWebPluginParamsWithHasUseSkia) {
186 blink::WebPluginParams params = CreateMinimalWebPluginParams();
187 params.attribute_names.push_back(blink::WebString("use-skia"));
188 params.attribute_values.push_back(blink::WebString(""));
190 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
191 ASSERT_TRUE(result.has_value());
193 EXPECT_TRUE(result->use_skia);
196 TEST(ParsedParamsTest, ParseWebPluginParamsWithHasUseSkiaNonEmpty) {
197 blink::WebPluginParams params = CreateMinimalWebPluginParams();
198 params.attribute_names.push_back(blink::WebString("use-skia"));
199 params.attribute_values.push_back(blink::WebString("false"));
201 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
202 ASSERT_TRUE(result.has_value());
204 EXPECT_TRUE(result->use_skia);
207 } // namespace chrome_pdf