blob: e09a91784f475958b4f19440cec574971e470094 [file] [log] [blame]
// 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 <string>
#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 kDummyStreamUrl[] = "chrome-extension://dummy-stream-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 "stream-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
// "stream-url".
blink::WebPluginParams CreateWebPluginParamsWithUrls() {
blink::WebPluginParams params;
params.attribute_names.push_back(blink::WebString("src"));
params.attribute_values.push_back(blink::WebString(kDummyOriginalUrl));
params.attribute_names.push_back(blink::WebString("stream-url"));
params.attribute_values.push_back(blink::WebString(kDummyStreamUrl));
return params;
}
} // namespace
TEST(ParsedParamsTest, ParseValidWebPluginParams) {
blink::WebPluginParams params = CreateWebPluginParamsWithoutUrl();
params.attribute_names.push_back(blink::WebString("src"));
params.attribute_values.push_back(blink::WebString(kDummyOriginalUrl));
params.attribute_names.push_back(blink::WebString("stream-url"));
params.attribute_values.push_back(blink::WebString(kDummyStreamUrl));
absl::optional<ParsedParams> result = ParseWebPluginParams(params);
ASSERT_TRUE(result.has_value());
EXPECT_EQ(kDummyOriginalUrl, result->original_url);
EXPECT_EQ(kDummyStreamUrl, result->stream_url);
ASSERT_TRUE(result->background_color.has_value());
EXPECT_EQ(kNewBackgroundColor, result->background_color.value());
EXPECT_TRUE(result->full_frame);
}
TEST(ParsedParamsTest, ParseWebPluginParamsWithoutOriginalUrl) {
blink::WebPluginParams params = CreateWebPluginParamsWithoutUrl();
params.attribute_names.push_back(blink::WebString("stream-url"));
params.attribute_values.push_back(blink::WebString(kDummyStreamUrl));
// Expect the `ParsedParams` to be invalid due to missing the original URL.
absl::optional<ParsedParams> result = ParseWebPluginParams(params);
EXPECT_FALSE(result.has_value());
}
TEST(ParseParsedParamsTest, ParseWebPluginParamsWithoutStreamUrl) {
blink::WebPluginParams params = CreateWebPluginParamsWithoutUrl();
params.attribute_names.push_back(blink::WebString("src"));
params.attribute_values.push_back(blink::WebString(kDummyOriginalUrl));
// Expect the `ParsedParams` to be valid and `stream_url` to be the same as
// `original_url`.
absl::optional<ParsedParams> result = ParseWebPluginParams(params);
ASSERT_TRUE(result.has_value());
EXPECT_EQ(kDummyOriginalUrl, result->original_url);
EXPECT_EQ(kDummyOriginalUrl, result->stream_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<ParsedParams> result = ParseWebPluginParams(params);
ASSERT_TRUE(result.has_value());
EXPECT_EQ(kDummyOriginalUrl, result->original_url);
EXPECT_EQ(kDummyStreamUrl, result->stream_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<ParsedParams> result = ParseWebPluginParams(params);
EXPECT_FALSE(result.has_value());
}
} // namespace chrome_pdf