| Index: content/public/common/media_metadata.cc
|
| diff --git a/content/public/common/media_metadata.cc b/content/public/common/media_metadata.cc
|
| index dc3824c25b0cdc82b515387caec50f9ea356f6b7..fa647649faac1c436bbf4147459b0193d07eceef 100644
|
| --- a/content/public/common/media_metadata.cc
|
| +++ b/content/public/common/media_metadata.cc
|
| @@ -4,20 +4,67 @@
|
|
|
| #include "content/public/common/media_metadata.h"
|
|
|
| +#include <algorithm>
|
| +#include <iterator>
|
| +
|
| namespace content {
|
|
|
| +namespace {
|
| +
|
| +const size_t kMaxArtworkSrcLength = 4 * 1024;
|
| +// Maximum type length of Artwork, which conforms to RFC 4288
|
| +// (https://tools.ietf.org/html/rfc4288).
|
| +const size_t kMaxArtworkTypeLength = 2 * 127 + 1;
|
| +const size_t kMaxNumberOfArtworkSizes = 10;
|
| +
|
| +} // anonymous namespace
|
| +
|
| const size_t MediaMetadata::kMaxIPCStringLength = 4 * 1024;
|
| +const size_t MediaMetadata::kMaxNumberOfArtworkImages = 10;
|
|
|
| MediaMetadata::MediaMetadata() = default;
|
|
|
| MediaMetadata::~MediaMetadata() = default;
|
|
|
| +MediaMetadata::MediaMetadata(const MediaMetadata& other) = default;
|
| +
|
| bool MediaMetadata::operator==(const MediaMetadata& other) const {
|
| - return title == other.title && artist == other.artist && album == other.album;
|
| + return title == other.title && artist == other.artist &&
|
| + album == other.album && artwork == other.artwork;
|
| }
|
|
|
| bool MediaMetadata::operator!=(const MediaMetadata& other) const {
|
| return !this->operator==(other);
|
| }
|
|
|
| +base::Optional<MediaMetadata::Artwork> MediaMetadata::SanitizeArtwork(
|
| + const MediaMetadata::Artwork& artwork) {
|
| + if (!artwork.src.is_valid() || !artwork.src.IsStandard() ||
|
| + (!artwork.src.SchemeIsHTTPOrHTTPS() &&
|
| + !artwork.src.SchemeIsFile()) ||
|
| + artwork.src.spec().size() > kMaxArtworkSrcLength) {
|
| + return base::nullopt;
|
| + }
|
| + // Early return if artwork is sane.
|
| + if (artwork.type.string().size() <= kMaxArtworkTypeLength &&
|
| + artwork.sizes.size() <= kMaxNumberOfArtworkSizes) {
|
| + return artwork;
|
| + }
|
| +
|
| + Artwork sanitized_artwork;
|
| + sanitized_artwork.src = artwork.src;
|
| + sanitized_artwork.type = artwork.type.is_null() ?
|
| + base::NullableString16() :
|
| + base::NullableString16(
|
| + artwork.type.string().substr(0, kMaxArtworkTypeLength),
|
| + false);
|
| + for (size_t i = 0;
|
| + i < std::min(artwork.sizes.size(), kMaxNumberOfArtworkSizes);
|
| + ++i) {
|
| + sanitized_artwork.sizes.push_back(artwork.sizes[i]);
|
| + }
|
| +
|
| + return sanitized_artwork;
|
| +}
|
| +
|
| } // namespace content
|
|
|