Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(515)

Unified Diff: content/public/common/media_metadata.cc

Issue 2015433003: Implement MediaMetadata artwork in content (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed reviewers' comments Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698