16d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 26d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 36d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// found in the LICENSE file. 46d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/services/html_viewer/webmimeregistry_impl.h" 66d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 76d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "base/files/file_path.h" 86d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "base/strings/string_util.h" 96d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "base/strings/sys_string_conversions.h" 106d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "net/base/mime_util.h" 126d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebString.h" 136d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 146d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)namespace mojo { 156d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)namespace { 166d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 176d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)std::string ToASCIIOrEmpty(const blink::WebString& string) { 186d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) return base::IsStringASCII(string) ? base::UTF16ToASCII(string) 196d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) : std::string(); 206d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 216d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 226d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} // namespace 236d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 246d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)blink::WebMimeRegistry::SupportsType WebMimeRegistryImpl::supportsMIMEType( 256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const blink::WebString& mime_type) { 266d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) return net::IsSupportedMimeType(ToASCIIOrEmpty(mime_type)) ? 276d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) blink::WebMimeRegistry::IsSupported : 286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) blink::WebMimeRegistry::IsNotSupported; 296d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 306d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 316d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)blink::WebMimeRegistry::SupportsType WebMimeRegistryImpl::supportsImageMIMEType( 326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const blink::WebString& mime_type) { 336d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) return net::IsSupportedImageMimeType(ToASCIIOrEmpty(mime_type)) ? 346d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) blink::WebMimeRegistry::IsSupported : 356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) blink::WebMimeRegistry::IsNotSupported; 366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 376d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 386d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)blink::WebMimeRegistry::SupportsType 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciWebMimeRegistryImpl::supportsImagePrefixedMIMEType( 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const blink::WebString& mime_type) { 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string ascii_mime_type = ToASCIIOrEmpty(mime_type); 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return (net::IsSupportedImageMimeType(ascii_mime_type) || 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (StartsWithASCII(ascii_mime_type, "image/", true) && 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::IsSupportedNonImageMimeType(ascii_mime_type))) 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ? WebMimeRegistry::IsSupported 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : WebMimeRegistry::IsNotSupported; 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciblink::WebMimeRegistry::SupportsType 506d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) WebMimeRegistryImpl::supportsJavaScriptMIMEType( 516d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const blink::WebString& mime_type) { 526d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) return net::IsSupportedJavascriptMimeType(ToASCIIOrEmpty(mime_type)) ? 536d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) blink::WebMimeRegistry::IsSupported : 546d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) blink::WebMimeRegistry::IsNotSupported; 556d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 566d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 576d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)blink::WebMimeRegistry::SupportsType WebMimeRegistryImpl::supportsMediaMIMEType( 586d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const blink::WebString& mime_type, 596d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const blink::WebString& codecs, 606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const blink::WebString& key_system) { 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string mime_type_ascii = ToASCIIOrEmpty(mime_type); 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Not supporting the container is a flat-out no. 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!net::IsSupportedMediaMimeType(mime_type_ascii)) 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return IsNotSupported; 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Mojo does not currently support any key systems. 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!key_system.isEmpty()) 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return IsNotSupported; 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Check list of strict codecs to see if it is supported. 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (net::IsStrictMediaMimeType(mime_type_ascii)) { 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Check if the codecs are a perfect match. 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<std::string> strict_codecs; 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::ParseCodecString(ToASCIIOrEmpty(codecs), &strict_codecs, false); 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return static_cast<WebMimeRegistry::SupportsType>( 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::IsSupportedStrictMediaMimeType(mime_type_ascii, strict_codecs)); 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // If we don't recognize the codec, it's possible we support it. 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<std::string> parsed_codecs; 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::ParseCodecString(ToASCIIOrEmpty(codecs), &parsed_codecs, true); 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!net::AreSupportedMediaCodecs(parsed_codecs)) 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return MayBeSupported; 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Otherwise we have a perfect match. 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return IsSupported; 876d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 886d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 896d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)bool WebMimeRegistryImpl::supportsMediaSourceMIMEType( 906d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const blink::WebString& mime_type, 916d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const blink::WebString& codecs) { 926d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) NOTIMPLEMENTED(); 936d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) return false; 946d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 956d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 966d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)bool WebMimeRegistryImpl::supportsEncryptedMediaMIMEType( 976d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const blink::WebString& key_system, 986d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const blink::WebString& mime_type, 996d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const blink::WebString& codecs) { 1006d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) NOTIMPLEMENTED(); 1016d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) return false; 1026d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 1036d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 1046d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)blink::WebMimeRegistry::SupportsType 1056d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) WebMimeRegistryImpl::supportsNonImageMIMEType( 1066d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const blink::WebString& mime_type) { 1076d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) return net::IsSupportedNonImageMimeType(ToASCIIOrEmpty(mime_type)) ? 1086d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) blink::WebMimeRegistry::IsSupported : 1096d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) blink::WebMimeRegistry::IsNotSupported; 1106d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 1116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 1126d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)blink::WebString WebMimeRegistryImpl::mimeTypeForExtension( 1136d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const blink::WebString& file_extension) { 1146d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) NOTIMPLEMENTED(); 1156d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) return blink::WebString(); 1166d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 1176d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 1186d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)blink::WebString WebMimeRegistryImpl::wellKnownMimeTypeForExtension( 1196d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const blink::WebString& file_extension) { 1206d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) NOTIMPLEMENTED(); 1216d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) return blink::WebString(); 1226d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 1236d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 1246d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)blink::WebString WebMimeRegistryImpl::mimeTypeFromFile( 1256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const blink::WebString& file_path) { 1266d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) NOTIMPLEMENTED(); 1276d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) return blink::WebString(); 1286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 1296d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 1306d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} // namespace mojo 131