Chromium Code Reviews| 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..1214f22bf80ddb3b2e3ba0f8efa4418ab75b541c 100644 |
| --- a/content/public/common/media_metadata.cc |
| +++ b/content/public/common/media_metadata.cc |
| @@ -4,20 +4,65 @@ |
| #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( |
|
DaleCurtis
2016/06/29 17:20:20
What's the point of sanitizing the artwork? Why no
Zhiqiang Zhang (Slow)
2016/06/29 19:16:13
The artwork come from blink, and can be anything,
|
| + 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) |
|
DaleCurtis
2016/06/29 17:20:20
Needs {}
Zhiqiang Zhang (Slow)
2016/06/29 19:16:13
Done.
|
| + 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; |
|
DaleCurtis
2016/06/29 17:20:20
{}
Zhiqiang Zhang (Slow)
2016/06/29 19:16:13
Done.
|
| + i < std::min(artwork.sizes.size(), kMaxNumberOfArtworkSizes); |
| + ++i) |
| + sanitized_artwork.sizes.push_back(artwork.sizes[i]); |
| + |
| + return sanitized_artwork; |
| +} |
| + |
| } // namespace content |