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

Side by Side Diff: third_party/WebKit/Source/modules/mediasession/MediaMetadataSanitizer.cpp

Issue 2367393002: Migrating MediaSession messages to mojo (Closed)
Patch Set: rebased Created 4 years, 2 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "modules/mediasession/MediaMetadataSanitizer.h"
6
7 #include "modules/mediasession/MediaArtwork.h"
8 #include "modules/mediasession/MediaMetadata.h"
9 #include "public/platform/WebIconSizesParser.h"
10 #include "url/url_constants.h"
11
12 namespace blink {
13
14 namespace {
15
16 // Constants used by the sanitizer, must be consistent with
17 // content::MediaMetdataSanitizer.
18
19 // Maximum length of all strings inside MediaMetadata when it is sent over mojo.
20 const size_t kMaxStringLength = 4 * 1024;
21
22 // Maximum type length of MediaArtwork, which conforms to RFC 4288
23 // (https://tools.ietf.org/html/rfc4288).
24 const size_t kMaxArtworkTypeLength = 2 * 127 + 1;
25
26 // Maximum number of artwork images inside the MediaMetadata.
27 const size_t kMaxNumberOfArtworkImages = 10;
28
29 // Maximum of sizes in an artwork image.
30 const size_t kMaxNumberOfArtworkSizes = 10;
31
32 bool checkArtworkSrcSanity(const KURL& src) {
33 if (!src.isValid())
34 return false;
35 if (!src.protocolIs(url::kHttpScheme) && !src.protocolIs(url::kHttpsScheme) &&
36 !src.protocolIs(url::kDataScheme)) {
37 return false;
38 }
39 DCHECK(src.getString().is8Bit());
40 if (src.getString().length() > url::kMaxURLChars)
41 return false;
42 return true;
43 }
44
45 blink::mojom::blink::MediaImagePtr sanitizeArtworkAndConvertToMojo(
46 const MediaArtwork* artwork) {
47 DCHECK(artwork);
48
49 blink::mojom::blink::MediaImagePtr mojoImage;
50
51 KURL url = KURL(ParsedURLString, artwork->src());
52 if (!checkArtworkSrcSanity(url))
53 return mojoImage;
54
55 mojoImage = blink::mojom::blink::MediaImage::New();
56 mojoImage->src = url;
57 mojoImage->type = artwork->type().left(kMaxArtworkTypeLength);
58 for (const auto& webSize :
59 WebIconSizesParser::parseIconSizes(artwork->sizes())) {
60 mojoImage->sizes.append(webSize);
61 if (mojoImage->sizes.size() == kMaxNumberOfArtworkSizes)
62 break;
63 }
64 return mojoImage;
65 }
66
67 } // anonymous namespace
68
69 blink::mojom::blink::MediaMetadataPtr
70 MediaMetadataSanitizer::sanitizeAndConvertToMojo(
71 const MediaMetadata* metadata) {
72 blink::mojom::blink::MediaMetadataPtr mojoMetadata;
73 if (!metadata)
74 return mojoMetadata;
75
76 mojoMetadata = blink::mojom::blink::MediaMetadata::New();
77
78 mojoMetadata->title = metadata->title().left(kMaxStringLength);
79 mojoMetadata->artist = metadata->artist().left(kMaxStringLength);
80 mojoMetadata->album = metadata->album().left(kMaxStringLength);
81
82 for (const auto artwork : metadata->artwork()) {
83 blink::mojom::blink::MediaImagePtr mojoImage =
84 sanitizeArtworkAndConvertToMojo(artwork.get());
85 if (!mojoImage.is_null())
86 mojoMetadata->artwork.append(std::move(mojoImage));
87 if (mojoMetadata->artwork.size() == kMaxNumberOfArtworkImages)
88 break;
89 }
90 return mojoMetadata;
91 }
92
93 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698