Home | History | Annotate | Download | only in html_viewer
      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