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

Side by Side 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 Dale's comments Created 4 years, 5 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/public/common/media_metadata.h" 5 #include "content/public/common/media_metadata.h"
6 6
7 #include <algorithm>
8 #include <iterator>
9
7 namespace content { 10 namespace content {
8 11
12 namespace {
13
14 const size_t kMaxArtworkSrcLength = 4 * 1024;
15 // Maximum type length of Artwork, which conforms to RFC 4288
16 // (https://tools.ietf.org/html/rfc4288).
17 const size_t kMaxArtworkTypeLength = 2 * 127 + 1;
18 const size_t kMaxNumberOfArtworkSizes = 10;
19
20 } // anonymous namespace
21
9 const size_t MediaMetadata::kMaxIPCStringLength = 4 * 1024; 22 const size_t MediaMetadata::kMaxIPCStringLength = 4 * 1024;
23 const size_t MediaMetadata::kMaxNumberOfArtworkImages = 10;
10 24
11 MediaMetadata::MediaMetadata() = default; 25 MediaMetadata::MediaMetadata() = default;
12 26
13 MediaMetadata::~MediaMetadata() = default; 27 MediaMetadata::~MediaMetadata() = default;
14 28
29 MediaMetadata::MediaMetadata(const MediaMetadata& other) = default;
30
15 bool MediaMetadata::operator==(const MediaMetadata& other) const { 31 bool MediaMetadata::operator==(const MediaMetadata& other) const {
16 return title == other.title && artist == other.artist && album == other.album; 32 return title == other.title && artist == other.artist &&
33 album == other.album && artwork == other.artwork;
17 } 34 }
18 35
19 bool MediaMetadata::operator!=(const MediaMetadata& other) const { 36 bool MediaMetadata::operator!=(const MediaMetadata& other) const {
20 return !this->operator==(other); 37 return !this->operator==(other);
21 } 38 }
22 39
40 base::Optional<MediaMetadata::Artwork> MediaMetadata::SanitizeArtwork(
41 const MediaMetadata::Artwork& artwork) {
42 if (!artwork.src.is_valid() || !artwork.src.IsStandard() ||
43 (!artwork.src.SchemeIsHTTPOrHTTPS() &&
44 !artwork.src.SchemeIsFile()) ||
45 artwork.src.spec().size() > kMaxArtworkSrcLength) {
46 return base::nullopt;
47 }
48 // Early return if artwork is sane.
49 if (artwork.type.string().size() <= kMaxArtworkTypeLength &&
50 artwork.sizes.size() <= kMaxNumberOfArtworkSizes) {
51 return artwork;
52 }
53
54 Artwork sanitized_artwork;
55 sanitized_artwork.src = artwork.src;
56 sanitized_artwork.type = artwork.type.is_null() ?
57 base::NullableString16() :
58 base::NullableString16(
59 artwork.type.string().substr(0, kMaxArtworkTypeLength),
60 false);
61 for (size_t i = 0;
62 i < std::min(artwork.sizes.size(), kMaxNumberOfArtworkSizes);
63 ++i) {
64 sanitized_artwork.sizes.push_back(artwork.sizes[i]);
65 }
66
67 return sanitized_artwork;
68 }
69
23 } // namespace content 70 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698