// Copyright 2021 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "pdf/parsed_params.h" #include #include "base/strings/string_number_conversions.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/blink/public/platform/web_string.h" #include "third_party/blink/public/platform/web_vector.h" #include "third_party/blink/public/web/web_plugin_params.h" #include "third_party/skia/include/core/SkColor.h" namespace chrome_pdf { namespace { constexpr char kDummyOriginalUrl[] = "https://test.com/dummy.pdf"; constexpr char kDummySrcUrl[] = "chrome-extension://dummy-source-url"; constexpr SkColor kNewBackgroundColor = SkColorSetARGB(0xFF, 0x52, 0x56, 0x59); // `kNewBackgroundColor` as a decimal number in string format. constexpr char kNewBackgroundColorStr[] = "4283586137"; // Creates a `blink::WebPluginParams` without any URL attributes, namely "src" // and "original-url". The return value only contains valid "background-color" // and "full-frame" attributes. blink::WebPluginParams CreateWebPluginParamsWithoutUrl() { blink::WebPluginParams params; params.attribute_names.push_back(blink::WebString("background-color")); params.attribute_values.push_back(blink::WebString(kNewBackgroundColorStr)); params.attribute_names.push_back(blink::WebString("full-frame")); params.attribute_values.push_back(blink::WebString("")); return params; } // Creates a `blink::WebPluginParams` with only the URL attributes: "src" and // "original-url". blink::WebPluginParams CreateWebPluginParamsWithUrls() { blink::WebPluginParams params; params.attribute_names.push_back(blink::WebString("original-url")); params.attribute_values.push_back(blink::WebString(kDummyOriginalUrl)); params.attribute_names.push_back(blink::WebString("src")); params.attribute_values.push_back(blink::WebString(kDummySrcUrl)); return params; } } // namespace TEST(ParsedParamsTest, ParseValidWebPluginParams) { blink::WebPluginParams params = CreateWebPluginParamsWithoutUrl(); params.attribute_names.push_back(blink::WebString("original-url")); params.attribute_values.push_back(blink::WebString(kDummyOriginalUrl)); params.attribute_names.push_back(blink::WebString("src")); params.attribute_values.push_back(blink::WebString(kDummySrcUrl)); absl::optional result = ParseWebPluginParams(params); ASSERT_TRUE(result.has_value()); EXPECT_EQ(kDummyOriginalUrl, result->original_url); EXPECT_EQ(kDummySrcUrl, result->src_url); ASSERT_TRUE(result->background_color.has_value()); EXPECT_EQ(kNewBackgroundColor, result->background_color.value()); EXPECT_TRUE(result->full_frame); } TEST(ParsedParamsTest, ParseWebPluginParamsWithoutSourceUrl) { blink::WebPluginParams params = CreateWebPluginParamsWithoutUrl(); params.attribute_names.push_back(blink::WebString("original-url")); params.attribute_values.push_back(blink::WebString(kDummyOriginalUrl)); // Expect the `ParsedParams` to be invalid due to missing the source URL. absl::optional result = ParseWebPluginParams(params); EXPECT_FALSE(result.has_value()); } TEST(ParseParsedParamsTest, ParseWebPluginParamsWithoutOriginalUrl) { blink::WebPluginParams params = CreateWebPluginParamsWithoutUrl(); params.attribute_names.push_back(blink::WebString("src")); params.attribute_values.push_back(blink::WebString(kDummySrcUrl)); // Expect the `ParsedParams` to be valid and `original_url` to be the same as // `src_url`. absl::optional result = ParseWebPluginParams(params); ASSERT_TRUE(result.has_value()); EXPECT_EQ(kDummySrcUrl, result->original_url); EXPECT_EQ(kDummySrcUrl, result->src_url); ASSERT_TRUE(result->background_color.has_value()); EXPECT_EQ(kNewBackgroundColor, result->background_color.value()); EXPECT_TRUE(result->full_frame); } TEST(ParsedParamsTest, ParseWebPluginParamsWithoutBackgroundColor) { blink::WebPluginParams params = CreateWebPluginParamsWithUrls(); // The `ParsedParams` can still be valid without the background color // attribute. absl::optional result = ParseWebPluginParams(params); ASSERT_TRUE(result.has_value()); EXPECT_EQ(kDummyOriginalUrl, result->original_url); EXPECT_EQ(kDummySrcUrl, result->src_url); EXPECT_FALSE(result->background_color.has_value()); EXPECT_FALSE(result->full_frame); } TEST(ParsedParamsTest, ParseWebPluginParamsWithInvalidBackgroundColor) { blink::WebPluginParams params = CreateWebPluginParamsWithUrls(); params.attribute_names.push_back(blink::WebString("background-color")); params.attribute_values.push_back(blink::WebString("red")); // Expect the `ParsedParams` to be invalid because the background color's // attribute value is in the wrong format. absl::optional result = ParseWebPluginParams(params); EXPECT_FALSE(result.has_value()); } } // namespace chrome_pdf