15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/child/simple_webmimeregistry_impl.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/files/file_path.h"
85e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string_util.h"
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/strings/sys_string_conversions.h"
10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/mime_util.h"
12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebString.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebString;
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebMimeRegistry;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace content {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch//static
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochstd::string SimpleWebMimeRegistryImpl::ToASCIIOrEmpty(const WebString& string) {
21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return base::IsStringASCII(string) ? base::UTF16ToASCII(string)
22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                     : std::string();
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebMimeRegistry::SupportsType SimpleWebMimeRegistryImpl::supportsMIMEType(
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const WebString& mime_type) {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return net::IsSupportedMimeType(ToASCIIOrEmpty(mime_type)) ?
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      WebMimeRegistry::IsSupported : WebMimeRegistry::IsNotSupported;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebMimeRegistry::SupportsType SimpleWebMimeRegistryImpl::supportsImageMIMEType(
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const WebString& mime_type) {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return net::IsSupportedImageMimeType(ToASCIIOrEmpty(mime_type)) ?
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      WebMimeRegistry::IsSupported : WebMimeRegistry::IsNotSupported;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebMimeRegistry::SupportsType
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    SimpleWebMimeRegistryImpl::supportsImagePrefixedMIMEType(
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const WebString& mime_type) {
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    std::string ascii_mime_type = ToASCIIOrEmpty(mime_type);
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return (net::IsSupportedImageMimeType(ascii_mime_type) ||
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          (StartsWithASCII(ascii_mime_type, "image/", true) &&
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci           net::IsSupportedNonImageMimeType(ascii_mime_type))) ?
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      WebMimeRegistry::IsSupported : WebMimeRegistry::IsNotSupported;
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciWebMimeRegistry::SupportsType
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SimpleWebMimeRegistryImpl::supportsJavaScriptMIMEType(
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const WebString& mime_type) {
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return net::IsSupportedJavascriptMimeType(ToASCIIOrEmpty(mime_type)) ?
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      WebMimeRegistry::IsSupported : WebMimeRegistry::IsNotSupported;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// When debugging layout tests failures in the test shell,
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// see TestShellWebMimeRegistryImpl.
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebMimeRegistry::SupportsType SimpleWebMimeRegistryImpl::supportsMediaMIMEType(
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const WebString& mime_type,
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const WebString& codecs,
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const WebString& key_system) {
60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Media features are only supported at the content/renderer/ layer.
61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return IsNotSupported;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool SimpleWebMimeRegistryImpl::supportsMediaSourceMIMEType(
65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    const WebString& mime_type,
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const WebString& codecs) {
67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Media features are only supported at the content/renderer layer.
68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  return false;
69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)bool SimpleWebMimeRegistryImpl::supportsEncryptedMediaMIMEType(
72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    const blink::WebString& key_system,
73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    const blink::WebString& mime_type,
74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    const blink::WebString& codecs) {
75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Media features are only supported at the content/renderer layer.
76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  return false;
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebMimeRegistry::SupportsType
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SimpleWebMimeRegistryImpl::supportsNonImageMIMEType(
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const WebString& mime_type) {
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return net::IsSupportedNonImageMimeType(ToASCIIOrEmpty(mime_type)) ?
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      WebMimeRegistry::IsSupported : WebMimeRegistry::IsNotSupported;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebString SimpleWebMimeRegistryImpl::mimeTypeForExtension(
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const WebString& file_extension) {
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string mime_type;
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::GetMimeTypeFromExtension(
90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      base::FilePath::FromUTF16Unsafe(file_extension).value(), &mime_type);
91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return WebString::fromUTF8(mime_type);
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebString SimpleWebMimeRegistryImpl::wellKnownMimeTypeForExtension(
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const WebString& file_extension) {
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string mime_type;
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::GetWellKnownMimeTypeFromExtension(
98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      base::FilePath::FromUTF16Unsafe(file_extension).value(), &mime_type);
99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return WebString::fromUTF8(mime_type);
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebString SimpleWebMimeRegistryImpl::mimeTypeFromFile(
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const WebString& file_path) {
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string mime_type;
105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  net::GetMimeTypeFromFile(base::FilePath::FromUTF16Unsafe(file_path),
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           &mime_type);
107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return WebString::fromUTF8(mime_type);
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace content
111