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