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);
51 TEST(ParsedParamsTest, ParseWebPluginParamsWithoutSourceUrl) {
52 blink::WebPluginParams params;
54 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
55 EXPECT_FALSE(result.has_value());
58 TEST(ParsedParamsTest, ParseWebPluginParamsWithOriginalUrl) {
59 blink::WebPluginParams params = CreateMinimalWebPluginParams();
60 params.attribute_names.push_back(blink::WebString("original-url"));
61 params.attribute_values.push_back(
62 blink::WebString("https://example.com/original.pdf"));
64 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
65 ASSERT_TRUE(result.has_value());
67 EXPECT_EQ(kFakeSrcUrl, result->src_url);
68 EXPECT_EQ("https://example.com/original.pdf", result->original_url);
71 TEST(ParsedParamsTest, ParseWebPluginParamsWithTopLevelUrl) {
72 blink::WebPluginParams params = CreateMinimalWebPluginParams();
73 params.attribute_names.push_back(blink::WebString("top-level-url"));
74 params.attribute_values.push_back(
75 blink::WebString("https://example.net/top.html"));
77 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
78 ASSERT_TRUE(result.has_value());
80 EXPECT_EQ("https://example.net/top.html", result->top_level_url);
83 TEST(ParsedParamsTest, ParseWebPluginParamsWithFullFrame) {
84 blink::WebPluginParams params = CreateMinimalWebPluginParams();
85 params.attribute_names.push_back(blink::WebString("full-frame"));
86 params.attribute_values.push_back(blink::WebString(""));
88 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
89 ASSERT_TRUE(result.has_value());
91 EXPECT_TRUE(result->full_frame);
94 TEST(ParsedParamsTest, ParseWebPluginParamsWithFullFrameNonEmpty) {
95 blink::WebPluginParams params = CreateMinimalWebPluginParams();
96 params.attribute_names.push_back(blink::WebString("full-frame"));
97 params.attribute_values.push_back(blink::WebString("false"));
99 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
100 ASSERT_TRUE(result.has_value());
102 EXPECT_TRUE(result->full_frame);
105 TEST(ParsedParamsTest, ParseWebPluginParamsWithBackgroundColor) {
106 blink::WebPluginParams params = CreateMinimalWebPluginParams();
107 params.attribute_names.push_back(blink::WebString("background-color"));
108 params.attribute_values.push_back(blink::WebString("4283586137"));
110 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
111 ASSERT_TRUE(result.has_value());
113 EXPECT_EQ(4283586137, result->background_color);
116 TEST(ParsedParamsTest, ParseWebPluginParamsWithInvalidBackgroundColor) {
117 blink::WebPluginParams params = CreateMinimalWebPluginParams();
118 params.attribute_names.push_back(blink::WebString("background-color"));
119 params.attribute_values.push_back(blink::WebString("red"));
121 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
122 EXPECT_FALSE(result.has_value());
125 TEST(ParsedParamsTest, ParseWebPluginParamsWithJavascriptAllow) {
126 blink::WebPluginParams params = CreateMinimalWebPluginParams();
127 params.attribute_names.push_back(blink::WebString("javascript"));
128 params.attribute_values.push_back(blink::WebString("allow"));
130 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
131 ASSERT_TRUE(result.has_value());
133 EXPECT_THAT(result->script_option,
134 AnyOf(PDFiumFormFiller::ScriptOption::kJavaScript,
135 PDFiumFormFiller::ScriptOption::kJavaScriptAndXFA));
138 TEST(ParsedParamsTest, ParseWebPluginParamsWithJavascriptEmpty) {
139 blink::WebPluginParams params = CreateMinimalWebPluginParams();
140 params.attribute_names.push_back(blink::WebString("javascript"));
141 params.attribute_values.push_back(blink::WebString(""));
143 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
144 ASSERT_TRUE(result.has_value());
146 EXPECT_EQ(PDFiumFormFiller::ScriptOption::kNoJavaScript,
147 result->script_option);
150 TEST(ParsedParamsTest, ParseWebPluginParamsWithJavascriptNonEmpty) {
151 blink::WebPluginParams params = CreateMinimalWebPluginParams();
152 params.attribute_names.push_back(blink::WebString("javascript"));
153 params.attribute_values.push_back(blink::WebString("true"));
155 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
156 ASSERT_TRUE(result.has_value());
158 EXPECT_EQ(PDFiumFormFiller::ScriptOption::kNoJavaScript,
159 result->script_option);
162 TEST(ParsedParamsTest, ParseWebPluginParamsWithHasEdits) {
163 blink::WebPluginParams params = CreateMinimalWebPluginParams();
164 params.attribute_names.push_back(blink::WebString("has-edits"));
165 params.attribute_values.push_back(blink::WebString(""));
167 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
168 ASSERT_TRUE(result.has_value());
170 EXPECT_TRUE(result->has_edits);
173 TEST(ParsedParamsTest, ParseWebPluginParamsWithHasEditsNonEmpty) {
174 blink::WebPluginParams params = CreateMinimalWebPluginParams();
175 params.attribute_names.push_back(blink::WebString("has-edits"));
176 params.attribute_values.push_back(blink::WebString("false"));
178 absl::optional<ParsedParams> result = ParseWebPluginParams(params);
179 ASSERT_TRUE(result.has_value());
181 EXPECT_TRUE(result->has_edits);
184 } // namespace chrome_pdf