OLD | NEW |
| (Empty) |
1 // Copyright 2014 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 "mojo/services/html_viewer/web_mime_registry_impl.h" | |
6 | |
7 #include "base/files/file_path.h" | |
8 #include "base/strings/string_util.h" | |
9 #include "base/strings/sys_string_conversions.h" | |
10 #include "base/strings/utf_string_conversions.h" | |
11 #include "media/base/key_systems.h" | |
12 #include "media/filters/stream_parser_factory.h" | |
13 #include "net/base/mime_util.h" | |
14 #include "third_party/WebKit/public/platform/WebString.h" | |
15 | |
16 namespace html_viewer { | |
17 namespace { | |
18 | |
19 std::string ToASCIIOrEmpty(const blink::WebString& string) { | |
20 return base::IsStringASCII(string) ? base::UTF16ToASCII(string) | |
21 : std::string(); | |
22 } | |
23 | |
24 } // namespace | |
25 | |
26 blink::WebMimeRegistry::SupportsType WebMimeRegistryImpl::supportsMIMEType( | |
27 const blink::WebString& mime_type) { | |
28 return net::IsSupportedMimeType(ToASCIIOrEmpty(mime_type)) ? | |
29 blink::WebMimeRegistry::IsSupported : | |
30 blink::WebMimeRegistry::IsNotSupported; | |
31 } | |
32 | |
33 blink::WebMimeRegistry::SupportsType WebMimeRegistryImpl::supportsImageMIMEType( | |
34 const blink::WebString& mime_type) { | |
35 return net::IsSupportedImageMimeType(ToASCIIOrEmpty(mime_type)) ? | |
36 blink::WebMimeRegistry::IsSupported : | |
37 blink::WebMimeRegistry::IsNotSupported; | |
38 } | |
39 | |
40 blink::WebMimeRegistry::SupportsType | |
41 WebMimeRegistryImpl::supportsImagePrefixedMIMEType( | |
42 const blink::WebString& mime_type) { | |
43 std::string ascii_mime_type = ToASCIIOrEmpty(mime_type); | |
44 return (net::IsSupportedImageMimeType(ascii_mime_type) || | |
45 (StartsWithASCII(ascii_mime_type, "image/", true) && | |
46 net::IsSupportedNonImageMimeType(ascii_mime_type))) | |
47 ? WebMimeRegistry::IsSupported | |
48 : WebMimeRegistry::IsNotSupported; | |
49 } | |
50 | |
51 blink::WebMimeRegistry::SupportsType | |
52 WebMimeRegistryImpl::supportsJavaScriptMIMEType( | |
53 const blink::WebString& mime_type) { | |
54 return net::IsSupportedJavascriptMimeType(ToASCIIOrEmpty(mime_type)) ? | |
55 blink::WebMimeRegistry::IsSupported : | |
56 blink::WebMimeRegistry::IsNotSupported; | |
57 } | |
58 | |
59 blink::WebMimeRegistry::SupportsType WebMimeRegistryImpl::supportsMediaMIMEType( | |
60 const blink::WebString& mime_type, | |
61 const blink::WebString& codecs, | |
62 const blink::WebString& key_system) { | |
63 const std::string mime_type_ascii = ToASCIIOrEmpty(mime_type); | |
64 // Not supporting the container is a flat-out no. | |
65 if (!net::IsSupportedMediaMimeType(mime_type_ascii)) | |
66 return IsNotSupported; | |
67 | |
68 // Mojo does not currently support any key systems. | |
69 if (!key_system.isEmpty()) | |
70 return IsNotSupported; | |
71 | |
72 // Check list of strict codecs to see if it is supported. | |
73 if (net::IsStrictMediaMimeType(mime_type_ascii)) { | |
74 // Check if the codecs are a perfect match. | |
75 std::vector<std::string> strict_codecs; | |
76 net::ParseCodecString(ToASCIIOrEmpty(codecs), &strict_codecs, false); | |
77 return static_cast<WebMimeRegistry::SupportsType>( | |
78 net::IsSupportedStrictMediaMimeType(mime_type_ascii, strict_codecs)); | |
79 } | |
80 | |
81 // If we don't recognize the codec, it's possible we support it. | |
82 std::vector<std::string> parsed_codecs; | |
83 net::ParseCodecString(ToASCIIOrEmpty(codecs), &parsed_codecs, true); | |
84 if (!net::AreSupportedMediaCodecs(parsed_codecs)) | |
85 return MayBeSupported; | |
86 | |
87 // Otherwise we have a perfect match. | |
88 return IsSupported; | |
89 } | |
90 | |
91 bool WebMimeRegistryImpl::supportsMediaSourceMIMEType( | |
92 const blink::WebString& mime_type, | |
93 const blink::WebString& codecs) { | |
94 const std::string mime_type_ascii = ToASCIIOrEmpty(mime_type); | |
95 if (mime_type_ascii.empty()) | |
96 return false; | |
97 | |
98 std::vector<std::string> parsed_codec_ids; | |
99 net::ParseCodecString(ToASCIIOrEmpty(codecs), &parsed_codec_ids, false); | |
100 return media::StreamParserFactory::IsTypeSupported(mime_type_ascii, | |
101 parsed_codec_ids); | |
102 } | |
103 | |
104 blink::WebMimeRegistry::SupportsType | |
105 WebMimeRegistryImpl::supportsNonImageMIMEType( | |
106 const blink::WebString& mime_type) { | |
107 return net::IsSupportedNonImageMimeType(ToASCIIOrEmpty(mime_type)) ? | |
108 blink::WebMimeRegistry::IsSupported : | |
109 blink::WebMimeRegistry::IsNotSupported; | |
110 } | |
111 | |
112 blink::WebString WebMimeRegistryImpl::mimeTypeForExtension( | |
113 const blink::WebString& file_extension) { | |
114 std::string mime_type; | |
115 net::GetMimeTypeFromExtension( | |
116 base::FilePath::FromUTF16Unsafe(file_extension).value(), &mime_type); | |
117 return blink::WebString::fromUTF8(mime_type); | |
118 } | |
119 | |
120 blink::WebString WebMimeRegistryImpl::wellKnownMimeTypeForExtension( | |
121 const blink::WebString& file_extension) { | |
122 std::string mime_type; | |
123 net::GetWellKnownMimeTypeFromExtension( | |
124 base::FilePath::FromUTF16Unsafe(file_extension).value(), &mime_type); | |
125 return blink::WebString::fromUTF8(mime_type); | |
126 } | |
127 | |
128 blink::WebString WebMimeRegistryImpl::mimeTypeFromFile( | |
129 const blink::WebString& file_path) { | |
130 std::string mime_type; | |
131 net::GetMimeTypeFromFile(base::FilePath::FromUTF16Unsafe(file_path), | |
132 &mime_type); | |
133 return blink::WebString::fromUTF8(mime_type); | |
134 } | |
135 | |
136 } // namespace html_viewer | |
OLD | NEW |