// Copyright (c) 2010 The Chromium Authors. All rights reserved. Use of this // source code is governed by a BSD-style license that can be found in the // LICENSE file. #include "webkit/glue/simple_webmimeregistry_impl.h" #include "base/string_util.h" #include "base/sys_string_conversions.h" #include "net/base/mime_util.h" #include "third_party/WebKit/WebKit/chromium/public/WebString.h" #include "webkit/glue/webkit_glue.h" using WebKit::WebString; using WebKit::WebMimeRegistry; namespace { // Convert a WebString to ASCII, falling back on an empty string in the case // of a non-ASCII string. std::string ToASCIIOrEmpty(const WebString& string) { if (!IsStringASCII(string)) return std::string(); return UTF16ToASCII(string); } } // namespace namespace webkit_glue { WebMimeRegistry::SupportsType SimpleWebMimeRegistryImpl::supportsMIMEType( const WebString& mime_type) { if (!net::IsSupportedMimeType(ToASCIIOrEmpty(mime_type).c_str())) return WebMimeRegistry::IsNotSupported; return WebMimeRegistry::IsSupported; } WebMimeRegistry::SupportsType SimpleWebMimeRegistryImpl::supportsImageMIMEType( const WebString& mime_type) { if (!net::IsSupportedImageMimeType(ToASCIIOrEmpty(mime_type).c_str())) return WebMimeRegistry::IsNotSupported; return WebMimeRegistry::IsSupported; } WebMimeRegistry::SupportsType SimpleWebMimeRegistryImpl::supportsJavaScriptMIMEType( const WebString& mime_type) { if (!net::IsSupportedJavascriptMimeType(ToASCIIOrEmpty(mime_type).c_str())) return WebMimeRegistry::IsNotSupported; return WebMimeRegistry::IsSupported; } WebMimeRegistry::SupportsType SimpleWebMimeRegistryImpl::supportsMediaMIMEType( const WebString& mime_type, const WebString& codecs) { // Not supporting the container is a flat-out no. if (!net::IsSupportedMediaMimeType(ToASCIIOrEmpty(mime_type).c_str())) return IsNotSupported; // Check list of strict codecs to see if it is supported. if (net::IsStrictMediaMimeType(ToASCIIOrEmpty(mime_type).c_str())) { // We support the container, but no codecs were specified. if (codecs.isNull()) return MayBeSupported; // Check if the codecs are a perfect match. std::vector strict_codecs; net::ParseCodecString(ToASCIIOrEmpty(codecs).c_str(), &strict_codecs, false); if (!net::IsSupportedStrictMediaMimeType(ToASCIIOrEmpty(mime_type).c_str(), strict_codecs)) return IsNotSupported; // Good to go! return IsSupported; } // If we don't recognize the codec, it's possible we support it. std::vector parsed_codecs; net::ParseCodecString(ToASCIIOrEmpty(codecs).c_str(), &parsed_codecs, true); if (!net::AreSupportedMediaCodecs(parsed_codecs)) return MayBeSupported; // Otherwise we have a perfect match. return IsSupported; } WebMimeRegistry::SupportsType SimpleWebMimeRegistryImpl::supportsNonImageMIMEType( const WebString& mime_type) { if (!net::IsSupportedNonImageMimeType(ToASCIIOrEmpty(mime_type).c_str())) return WebMimeRegistry::IsNotSupported; return WebMimeRegistry::IsSupported; } WebString SimpleWebMimeRegistryImpl::mimeTypeForExtension( const WebString& file_extension) { std::string mime_type; net::GetMimeTypeFromExtension( WebStringToFilePathString(file_extension), &mime_type); return ASCIIToUTF16(mime_type); } WebString SimpleWebMimeRegistryImpl::mimeTypeFromFile( const WebString& file_path) { std::string mime_type; net::GetMimeTypeFromFile( FilePath(WebStringToFilePathString(file_path)), &mime_type); return ASCIIToUTF16(mime_type); } WebString SimpleWebMimeRegistryImpl::preferredExtensionForMIMEType( const WebString& mime_type) { FilePath::StringType file_extension; net::GetPreferredExtensionForMimeType(ToASCIIOrEmpty(mime_type), &file_extension); return FilePathStringToWebString(file_extension); } } // namespace webkit_glue