OLD | NEW |
---|---|
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( | |
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,
| |
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) | |
DaleCurtis
2016/06/29 17:20:20
Needs {}
Zhiqiang Zhang (Slow)
2016/06/29 19:16:13
Done.
| |
51 return artwork; | |
52 | |
53 Artwork sanitized_artwork; | |
54 sanitized_artwork.src = artwork.src; | |
55 sanitized_artwork.type = artwork.type.is_null() ? | |
56 base::NullableString16() : | |
57 base::NullableString16( | |
58 artwork.type.string().substr(0, kMaxArtworkTypeLength), | |
59 false); | |
60 for (size_t i = 0; | |
DaleCurtis
2016/06/29 17:20:20
{}
Zhiqiang Zhang (Slow)
2016/06/29 19:16:13
Done.
| |
61 i < std::min(artwork.sizes.size(), kMaxNumberOfArtworkSizes); | |
62 ++i) | |
63 sanitized_artwork.sizes.push_back(artwork.sizes[i]); | |
64 | |
65 return sanitized_artwork; | |
66 } | |
67 | |
23 } // namespace content | 68 } // namespace content |
OLD | NEW |