blob: d08d763561342e5908d8a4a62b36f7f0718f2cd8 [file] [log] [blame]
// 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/image-encoders/ImageEncoderUtils.h"
#include "platform/Histogram.h"
#include "platform/network/mime/MIMETypeRegistry.h"
#include "platform/wtf/Threading.h"
namespace blink {
const char ImageEncoderUtils::kDefaultMimeType[] = "image/png";
// This enum is used in a UMA histogram; the values should not be changed.
enum RequestedImageMimeType {
kRequestedImageMimeTypePng = 0,
kRequestedImageMimeTypeJpeg = 1,
kRequestedImageMimeTypeWebp = 2,
kRequestedImageMimeTypeGif = 3,
kRequestedImageMimeTypeBmp = 4,
kRequestedImageMimeTypeIco = 5,
kRequestedImageMimeTypeTiff = 6,
kRequestedImageMimeTypeUnknown = 7,
kNumberOfRequestedImageMimeTypes
};
String ImageEncoderUtils::ToEncodingMimeType(const String& mime_type,
const EncodeReason encode_reason) {
String lowercase_mime_type = mime_type.DeprecatedLower();
if (mime_type.IsNull())
lowercase_mime_type = kDefaultMimeType;
RequestedImageMimeType image_format;
if (lowercase_mime_type == "image/png") {
image_format = kRequestedImageMimeTypePng;
} else if (lowercase_mime_type == "image/jpeg") {
image_format = kRequestedImageMimeTypeJpeg;
} else if (lowercase_mime_type == "image/webp") {
image_format = kRequestedImageMimeTypeWebp;
} else if (lowercase_mime_type == "image/gif") {
image_format = kRequestedImageMimeTypeGif;
} else if (lowercase_mime_type == "image/bmp" ||
lowercase_mime_type == "image/x-windows-bmp") {
image_format = kRequestedImageMimeTypeBmp;
} else if (lowercase_mime_type == "image/x-icon") {
image_format = kRequestedImageMimeTypeIco;
} else if (lowercase_mime_type == "image/tiff" ||
lowercase_mime_type == "image/x-tiff") {
image_format = kRequestedImageMimeTypeTiff;
} else {
image_format = kRequestedImageMimeTypeUnknown;
}
if (encode_reason == kEncodeReasonToDataURL) {
DEFINE_THREAD_SAFE_STATIC_LOCAL(EnumerationHistogram,
to_data_url_image_format_histogram,
("Canvas.RequestedImageMimeTypes_toDataURL",
kNumberOfRequestedImageMimeTypes));
to_data_url_image_format_histogram.Count(image_format);
} else if (encode_reason == kEncodeReasonToBlobCallback) {
DEFINE_THREAD_SAFE_STATIC_LOCAL(
EnumerationHistogram, to_blob_callback_image_format_histogram,
("Canvas.RequestedImageMimeTypes_toBlobCallback",
kNumberOfRequestedImageMimeTypes));
to_blob_callback_image_format_histogram.Count(image_format);
} else if (encode_reason == kEncodeReasonConvertToBlobPromise) {
DEFINE_THREAD_SAFE_STATIC_LOCAL(
EnumerationHistogram, convert_to_blob_promise_image_format_histogram,
("Canvas.RequestedImageMimeTypes_convertToBlobPromise",
kNumberOfRequestedImageMimeTypes));
convert_to_blob_promise_image_format_histogram.Count(image_format);
}
// FIXME: Make isSupportedImageMIMETypeForEncoding threadsafe (to allow this
// method to be used on a worker thread).
if (!MIMETypeRegistry::IsSupportedImageMIMETypeForEncoding(
lowercase_mime_type))
lowercase_mime_type = kDefaultMimeType;
return lowercase_mime_type;
}
} // namespace blink