parsed_params_unittest.cc 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. // Copyright 2021 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "pdf/parsed_params.h"
  5. #include <string>
  6. #include "pdf/pdfium/pdfium_form_filler.h"
  7. #include "testing/gmock/include/gmock/gmock.h"
  8. #include "testing/gtest/include/gtest/gtest.h"
  9. #include "third_party/abseil-cpp/absl/types/optional.h"
  10. #include "third_party/blink/public/platform/web_string.h"
  11. #include "third_party/blink/public/platform/web_vector.h"
  12. #include "third_party/blink/public/web/web_plugin_params.h"
  13. #include "third_party/skia/include/core/SkColor.h"
  14. namespace chrome_pdf {
  15. namespace {
  16. using ::testing::AnyOf;
  17. constexpr char kFakeSrcUrl[] = "chrome-extension://fake-source-url";
  18. // Creates a `blink::WebPluginParams` with only required attributes.
  19. blink::WebPluginParams CreateMinimalWebPluginParams() {
  20. blink::WebPluginParams params;
  21. params.attribute_names.push_back(blink::WebString("src"));
  22. params.attribute_values.push_back(blink::WebString(kFakeSrcUrl));
  23. return params;
  24. }
  25. } // namespace
  26. TEST(ParsedParamsTest, ParseWebPluginParamsMinimal) {
  27. blink::WebPluginParams params = CreateMinimalWebPluginParams();
  28. absl::optional<ParsedParams> result = ParseWebPluginParams(params);
  29. ASSERT_TRUE(result.has_value());
  30. EXPECT_EQ(kFakeSrcUrl, result->src_url);
  31. EXPECT_EQ(kFakeSrcUrl, result->original_url);
  32. EXPECT_EQ("", result->top_level_url);
  33. EXPECT_FALSE(result->full_frame);
  34. EXPECT_EQ(SK_ColorTRANSPARENT, result->background_color);
  35. EXPECT_EQ(PDFiumFormFiller::DefaultScriptOption(), result->script_option);
  36. EXPECT_FALSE(result->has_edits);
  37. }
  38. TEST(ParsedParamsTest, ParseWebPluginParamsWithoutSourceUrl) {
  39. blink::WebPluginParams params;
  40. absl::optional<ParsedParams> result = ParseWebPluginParams(params);
  41. EXPECT_FALSE(result.has_value());
  42. }
  43. TEST(ParsedParamsTest, ParseWebPluginParamsWithOriginalUrl) {
  44. blink::WebPluginParams params = CreateMinimalWebPluginParams();
  45. params.attribute_names.push_back(blink::WebString("original-url"));
  46. params.attribute_values.push_back(
  47. blink::WebString("https://example.com/original.pdf"));
  48. absl::optional<ParsedParams> result = ParseWebPluginParams(params);
  49. ASSERT_TRUE(result.has_value());
  50. EXPECT_EQ(kFakeSrcUrl, result->src_url);
  51. EXPECT_EQ("https://example.com/original.pdf", result->original_url);
  52. }
  53. TEST(ParsedParamsTest, ParseWebPluginParamsWithTopLevelUrl) {
  54. blink::WebPluginParams params = CreateMinimalWebPluginParams();
  55. params.attribute_names.push_back(blink::WebString("top-level-url"));
  56. params.attribute_values.push_back(
  57. blink::WebString("https://example.net/top.html"));
  58. absl::optional<ParsedParams> result = ParseWebPluginParams(params);
  59. ASSERT_TRUE(result.has_value());
  60. EXPECT_EQ("https://example.net/top.html", result->top_level_url);
  61. }
  62. TEST(ParsedParamsTest, ParseWebPluginParamsWithFullFrame) {
  63. blink::WebPluginParams params = CreateMinimalWebPluginParams();
  64. params.attribute_names.push_back(blink::WebString("full-frame"));
  65. params.attribute_values.push_back(blink::WebString(""));
  66. absl::optional<ParsedParams> result = ParseWebPluginParams(params);
  67. ASSERT_TRUE(result.has_value());
  68. EXPECT_TRUE(result->full_frame);
  69. }
  70. TEST(ParsedParamsTest, ParseWebPluginParamsWithFullFrameNonEmpty) {
  71. blink::WebPluginParams params = CreateMinimalWebPluginParams();
  72. params.attribute_names.push_back(blink::WebString("full-frame"));
  73. params.attribute_values.push_back(blink::WebString("false"));
  74. absl::optional<ParsedParams> result = ParseWebPluginParams(params);
  75. ASSERT_TRUE(result.has_value());
  76. EXPECT_TRUE(result->full_frame);
  77. }
  78. TEST(ParsedParamsTest, ParseWebPluginParamsWithBackgroundColor) {
  79. blink::WebPluginParams params = CreateMinimalWebPluginParams();
  80. params.attribute_names.push_back(blink::WebString("background-color"));
  81. params.attribute_values.push_back(blink::WebString("4283586137"));
  82. absl::optional<ParsedParams> result = ParseWebPluginParams(params);
  83. ASSERT_TRUE(result.has_value());
  84. EXPECT_EQ(4283586137, result->background_color);
  85. }
  86. TEST(ParsedParamsTest, ParseWebPluginParamsWithInvalidBackgroundColor) {
  87. blink::WebPluginParams params = CreateMinimalWebPluginParams();
  88. params.attribute_names.push_back(blink::WebString("background-color"));
  89. params.attribute_values.push_back(blink::WebString("red"));
  90. absl::optional<ParsedParams> result = ParseWebPluginParams(params);
  91. EXPECT_FALSE(result.has_value());
  92. }
  93. TEST(ParsedParamsTest, ParseWebPluginParamsWithJavascriptAllow) {
  94. blink::WebPluginParams params = CreateMinimalWebPluginParams();
  95. params.attribute_names.push_back(blink::WebString("javascript"));
  96. params.attribute_values.push_back(blink::WebString("allow"));
  97. absl::optional<ParsedParams> result = ParseWebPluginParams(params);
  98. ASSERT_TRUE(result.has_value());
  99. EXPECT_THAT(result->script_option,
  100. AnyOf(PDFiumFormFiller::ScriptOption::kJavaScript,
  101. PDFiumFormFiller::ScriptOption::kJavaScriptAndXFA));
  102. }
  103. TEST(ParsedParamsTest, ParseWebPluginParamsWithJavascriptEmpty) {
  104. blink::WebPluginParams params = CreateMinimalWebPluginParams();
  105. params.attribute_names.push_back(blink::WebString("javascript"));
  106. params.attribute_values.push_back(blink::WebString(""));
  107. absl::optional<ParsedParams> result = ParseWebPluginParams(params);
  108. ASSERT_TRUE(result.has_value());
  109. EXPECT_EQ(PDFiumFormFiller::ScriptOption::kNoJavaScript,
  110. result->script_option);
  111. }
  112. TEST(ParsedParamsTest, ParseWebPluginParamsWithJavascriptNonEmpty) {
  113. blink::WebPluginParams params = CreateMinimalWebPluginParams();
  114. params.attribute_names.push_back(blink::WebString("javascript"));
  115. params.attribute_values.push_back(blink::WebString("true"));
  116. absl::optional<ParsedParams> result = ParseWebPluginParams(params);
  117. ASSERT_TRUE(result.has_value());
  118. EXPECT_EQ(PDFiumFormFiller::ScriptOption::kNoJavaScript,
  119. result->script_option);
  120. }
  121. TEST(ParsedParamsTest, ParseWebPluginParamsWithHasEdits) {
  122. blink::WebPluginParams params = CreateMinimalWebPluginParams();
  123. params.attribute_names.push_back(blink::WebString("has-edits"));
  124. params.attribute_values.push_back(blink::WebString(""));
  125. absl::optional<ParsedParams> result = ParseWebPluginParams(params);
  126. ASSERT_TRUE(result.has_value());
  127. EXPECT_TRUE(result->has_edits);
  128. }
  129. TEST(ParsedParamsTest, ParseWebPluginParamsWithHasEditsNonEmpty) {
  130. blink::WebPluginParams params = CreateMinimalWebPluginParams();
  131. params.attribute_names.push_back(blink::WebString("has-edits"));
  132. params.attribute_values.push_back(blink::WebString("false"));
  133. absl::optional<ParsedParams> result = ParseWebPluginParams(params);
  134. ASSERT_TRUE(result.has_value());
  135. EXPECT_TRUE(result->has_edits);
  136. }
  137. } // namespace chrome_pdf