[M108 Migration][HBBTV] Implement ewk_context_register_jsplugin_mime_types API
[platform/framework/web/chromium-efl.git] / pdf / parsed_params_unittest.cc
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.
4
5 #include "pdf/parsed_params.h"
6
7 #include <string>
8
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"
17
18 namespace chrome_pdf {
19
20 namespace {
21
22 using ::testing::AnyOf;
23
24 constexpr char kFakeSrcUrl[] = "chrome-extension://fake-source-url";
25
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));
31   return params;
32 }
33
34 }  // namespace
35
36 TEST(ParsedParamsTest, ParseWebPluginParamsMinimal) {
37   blink::WebPluginParams params = CreateMinimalWebPluginParams();
38
39   absl::optional<ParsedParams> result = ParseWebPluginParams(params);
40   ASSERT_TRUE(result.has_value());
41
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 }
50
51 TEST(ParsedParamsTest, ParseWebPluginParamsWithoutSourceUrl) {
52   blink::WebPluginParams params;
53
54   absl::optional<ParsedParams> result = ParseWebPluginParams(params);
55   EXPECT_FALSE(result.has_value());
56 }
57
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"));
63
64   absl::optional<ParsedParams> result = ParseWebPluginParams(params);
65   ASSERT_TRUE(result.has_value());
66
67   EXPECT_EQ(kFakeSrcUrl, result->src_url);
68   EXPECT_EQ("https://example.com/original.pdf", result->original_url);
69 }
70
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"));
76
77   absl::optional<ParsedParams> result = ParseWebPluginParams(params);
78   ASSERT_TRUE(result.has_value());
79
80   EXPECT_EQ("https://example.net/top.html", result->top_level_url);
81 }
82
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(""));
87
88   absl::optional<ParsedParams> result = ParseWebPluginParams(params);
89   ASSERT_TRUE(result.has_value());
90
91   EXPECT_TRUE(result->full_frame);
92 }
93
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"));
98
99   absl::optional<ParsedParams> result = ParseWebPluginParams(params);
100   ASSERT_TRUE(result.has_value());
101
102   EXPECT_TRUE(result->full_frame);
103 }
104
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"));
109
110   absl::optional<ParsedParams> result = ParseWebPluginParams(params);
111   ASSERT_TRUE(result.has_value());
112
113   EXPECT_EQ(4283586137, result->background_color);
114 }
115
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"));
120
121   absl::optional<ParsedParams> result = ParseWebPluginParams(params);
122   EXPECT_FALSE(result.has_value());
123 }
124
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"));
129
130   absl::optional<ParsedParams> result = ParseWebPluginParams(params);
131   ASSERT_TRUE(result.has_value());
132
133   EXPECT_THAT(result->script_option,
134               AnyOf(PDFiumFormFiller::ScriptOption::kJavaScript,
135                     PDFiumFormFiller::ScriptOption::kJavaScriptAndXFA));
136 }
137
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(""));
142
143   absl::optional<ParsedParams> result = ParseWebPluginParams(params);
144   ASSERT_TRUE(result.has_value());
145
146   EXPECT_EQ(PDFiumFormFiller::ScriptOption::kNoJavaScript,
147             result->script_option);
148 }
149
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"));
154
155   absl::optional<ParsedParams> result = ParseWebPluginParams(params);
156   ASSERT_TRUE(result.has_value());
157
158   EXPECT_EQ(PDFiumFormFiller::ScriptOption::kNoJavaScript,
159             result->script_option);
160 }
161
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(""));
166
167   absl::optional<ParsedParams> result = ParseWebPluginParams(params);
168   ASSERT_TRUE(result.has_value());
169
170   EXPECT_TRUE(result->has_edits);
171 }
172
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"));
177
178   absl::optional<ParsedParams> result = ParseWebPluginParams(params);
179   ASSERT_TRUE(result.has_value());
180
181   EXPECT_TRUE(result->has_edits);
182 }
183
184 }  // namespace chrome_pdf