Chromium Code Reviews| Index: third_party/WebKit/Source/platform/mime/WebMimeRegistryImpl.cpp |
| diff --git a/third_party/WebKit/Source/platform/mime/WebMimeRegistryImpl.cpp b/third_party/WebKit/Source/platform/mime/WebMimeRegistryImpl.cpp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..0541aa90cd6d73f1456cf95add0adeec8a7a5355 |
| --- /dev/null |
| +++ b/third_party/WebKit/Source/platform/mime/WebMimeRegistryImpl.cpp |
| @@ -0,0 +1,124 @@ |
| +// Copyright 2016 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 "platform/mime/WebMimeRegistryImpl.h" |
| + |
| +#include "base/files/file_path.h" |
| +#include "base/strings/string_util.h" |
| +#include "components/mime_util/mime_util.h" |
| +#include "media/base/mime_util.h" |
| +#include "media/filters/stream_parser_factory.h" |
| +#include "net/base/mime_util.h" |
| +#include "public/platform/FilePathConversion.h" |
| +#include "public/platform/InterfaceProvider.h" |
| +#include "public/platform/Platform.h" |
| +#include "public/platform/WebString.h" |
| +#include "wtf/text/WTFString.h" |
| + |
| +namespace blink { |
| + |
| +namespace { |
| + |
| +// Convert a String to ASCII, falling back on an empty string in the case |
| +// of a non-ASCII string. |
| +// TODO(kinuko): Make mime_util methods take StringPiece instead. |
| +std::string ToASCIIOrEmpty(const String& str) { |
| + if (str.isEmpty() || !str.containsOnlyASCII()) |
| + return std::string(); |
| + |
| + if (str.is8Bit()) { |
| + return std::string(reinterpret_cast<const char*>(str.characters8()), |
|
esprehn
2016/10/25 00:28:11
This is already better than what the old code was
|
| + str.length()); |
| + } |
| + |
| + base::StringPiece16 stringPiece16(str.characters16(), str.length()); |
| + return std::string(stringPiece16.begin(), stringPiece16.end()); |
|
esprehn
2016/10/25 00:28:11
You could do std::string(str.characters16(), str.c
kinuko
2016/10/27 04:34:34
Done.
|
| +} |
| + |
| +} // namespace |
| + |
| +WebMimeRegistry::SupportsType WebMimeRegistryImpl::supportsMIMEType( |
| + const WebString& mimeType) { |
| + return mime_util::IsSupportedMimeType(ToASCIIOrEmpty(mimeType)) |
| + ? WebMimeRegistry::IsSupported |
| + : WebMimeRegistry::IsNotSupported; |
| +} |
| + |
| +WebMimeRegistry::SupportsType WebMimeRegistryImpl::supportsImageMIMEType( |
| + const WebString& mimeType) { |
| + return mime_util::IsSupportedImageMimeType(ToASCIIOrEmpty(mimeType)) |
| + ? WebMimeRegistry::IsSupported |
| + : WebMimeRegistry::IsNotSupported; |
| +} |
| + |
| +WebMimeRegistry::SupportsType |
| +WebMimeRegistryImpl::supportsImagePrefixedMIMEType(const WebString& mimeType) { |
| + std::string asciiMimeType = ToASCIIOrEmpty(mimeType); |
| + return (mime_util::IsSupportedImageMimeType(asciiMimeType) || |
| + (base::StartsWith(asciiMimeType, "image/", |
| + base::CompareCase::SENSITIVE) && |
| + mime_util::IsSupportedNonImageMimeType(asciiMimeType))) |
| + ? WebMimeRegistry::IsSupported |
| + : WebMimeRegistry::IsNotSupported; |
| +} |
| + |
| +WebMimeRegistry::SupportsType WebMimeRegistryImpl::supportsJavaScriptMIMEType( |
| + const WebString& mimeType) { |
| + return mime_util::IsSupportedJavascriptMimeType(ToASCIIOrEmpty(mimeType)) |
| + ? WebMimeRegistry::IsSupported |
| + : WebMimeRegistry::IsNotSupported; |
| +} |
| + |
| +WebMimeRegistry::SupportsType WebMimeRegistryImpl::supportsMediaMIMEType( |
| + const WebString& mimeType, |
| + const WebString& codecs) { |
| + const std::string asciiMimeType = ToASCIIOrEmpty(mimeType); |
| + std::vector<std::string> codecVector; |
| + media::ParseCodecString(ToASCIIOrEmpty(codecs), &codecVector, false); |
| + return static_cast<WebMimeRegistry::SupportsType>( |
| + media::IsSupportedMediaFormat(asciiMimeType, codecVector)); |
| +} |
| + |
| +bool WebMimeRegistryImpl::supportsMediaSourceMIMEType(const WebString& mimeType, |
| + const WebString& codecs) { |
| + const std::string asciiMimeType = ToASCIIOrEmpty(mimeType); |
| + std::vector<std::string> parsedCodecIds; |
| + media::ParseCodecString(ToASCIIOrEmpty(codecs), &parsedCodecIds, false); |
| + if (asciiMimeType.empty()) |
|
esprehn
2016/10/25 00:28:11
we can do this before calling ParseCodecString?
kinuko
2016/10/27 04:34:34
Done.
|
| + return false; |
| + return media::StreamParserFactory::IsTypeSupported(asciiMimeType, |
| + parsedCodecIds); |
| +} |
| + |
| +WebMimeRegistry::SupportsType WebMimeRegistryImpl::supportsNonImageMIMEType( |
| + const WebString& mimeType) { |
|
esprehn
2016/10/25 00:28:11
These should all take WTF::String instead of WebSt
kinuko
2016/10/27 04:34:34
Done.
|
| + return mime_util::IsSupportedNonImageMimeType(ToASCIIOrEmpty(mimeType)) |
| + ? WebMimeRegistry::IsSupported |
| + : WebMimeRegistry::IsNotSupported; |
| +} |
| + |
| +WebString WebMimeRegistryImpl::mimeTypeForExtension( |
| + const WebString& fileExtension) { |
| + // The sandbox restricts our access to the registry, so we need to proxy |
| + // these calls over to the browser process. |
| + LOG(ERROR) << "**** MOJO MIME CALLED!!!"; |
|
esprehn
2016/10/25 00:28:11
Why is this an error? It doesn't seem like it shou
kinuko
2016/10/27 04:34:34
*facepalm* sure, it was just for local logging
|
| + if (!m_mimeRegistry) { |
| + Platform::current()->interfaceProvider()->getInterface( |
| + mojo::GetProxy(&m_mimeRegistry)); |
| + } |
| + String mimeType; |
| + if (!m_mimeRegistry->GetMimeTypeFromExtension(fileExtension, &mimeType)) |
|
esprehn
2016/10/25 00:28:11
This is a mojo interface, is this doing a sync IPC
kinuko
2016/10/27 04:34:34
Yes, apparently that is what we do in the existing
|
| + return WebString(); |
| + return mimeType; |
| +} |
| + |
| +WebString WebMimeRegistryImpl::wellKnownMimeTypeForExtension( |
| + const WebString& fileExtension) { |
| + std::string mimeType; |
| + net::GetWellKnownMimeTypeFromExtension( |
| + blink::WebStringToFilePath(fileExtension).value(), &mimeType); |
| + return WebString::fromUTF8(mimeType); |
| +} |
| + |
| +} // namespace blink |