mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Partially back out bug 389273 while I look into the test failures.
This commit is contained in:
parent
97a57a7769
commit
312f215559
@ -93,6 +93,10 @@ function compareArrays(aArray1, aArray2) {
|
|||||||
|
|
||||||
|
|
||||||
function run_test() {
|
function run_test() {
|
||||||
|
|
||||||
|
// Disable test for now.
|
||||||
|
return;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
|
||||||
|
@ -59,12 +59,14 @@
|
|||||||
#include "nsNetUtil.h"
|
#include "nsNetUtil.h"
|
||||||
#include "nsReadableUtils.h"
|
#include "nsReadableUtils.h"
|
||||||
#include "nsStreamUtils.h"
|
#include "nsStreamUtils.h"
|
||||||
#include "nsStringStream.h"
|
|
||||||
#include "mozStorageHelper.h"
|
#include "mozStorageHelper.h"
|
||||||
|
|
||||||
// For favicon optimization
|
// This is the maximum favicon size that we will bother storing. Most icons
|
||||||
#include "imgITools.h"
|
// are about 4K. Some people add 32x32 versions at different bit depths,
|
||||||
#include "imgIContainer.h"
|
// making them much bigger. It would be nice if could extract just the 16x16
|
||||||
|
// version that we need. Instead, we'll just store everything below this
|
||||||
|
// sanity threshold.
|
||||||
|
#define MAX_FAVICON_SIZE 32768
|
||||||
|
|
||||||
#define FAVICON_BUFFER_INCREMENT 8192
|
#define FAVICON_BUFFER_INCREMENT 8192
|
||||||
|
|
||||||
@ -551,24 +553,6 @@ nsFaviconService::SetFaviconData(nsIURI* aFavicon, const PRUint8* aData,
|
|||||||
PRTime aExpiration)
|
PRTime aExpiration)
|
||||||
{
|
{
|
||||||
nsresult rv;
|
nsresult rv;
|
||||||
PRUint32 dataLen = aDataLen;
|
|
||||||
const PRUint8* data = aData;
|
|
||||||
const nsACString* mimeType = &aMimeType;
|
|
||||||
nsCString newData, newMimeType;
|
|
||||||
|
|
||||||
// If the page provided a large image for the favicon (eg, a highres image
|
|
||||||
// or a multiresolution .ico file), we don't want to store more data than
|
|
||||||
// needed. An uncompressed 16x16 RGBA image is 1024 bytes, and almost all
|
|
||||||
// sensible 16x16 icons are under 1024 bytes.
|
|
||||||
if (aDataLen > 1024) {
|
|
||||||
rv = OptimizeFaviconImage(aData, aDataLen, aMimeType, newData, newMimeType);
|
|
||||||
if (NS_SUCCEEDED(rv) && newData.Length() < aDataLen) {
|
|
||||||
data = reinterpret_cast<PRUint8*>(const_cast<char*>(newData.get())),
|
|
||||||
dataLen = newData.Length();
|
|
||||||
mimeType = &newMimeType;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mozIStorageStatement* statement;
|
mozIStorageStatement* statement;
|
||||||
{
|
{
|
||||||
// this block forces the scoper to reset our statement: necessary for the
|
// this block forces the scoper to reset our statement: necessary for the
|
||||||
@ -599,9 +583,9 @@ nsFaviconService::SetFaviconData(nsIURI* aFavicon, const PRUint8* aData,
|
|||||||
mozStorageStatementScoper scoper(statement);
|
mozStorageStatementScoper scoper(statement);
|
||||||
|
|
||||||
// the insert and update statements share all but the 0th parameter
|
// the insert and update statements share all but the 0th parameter
|
||||||
rv = statement->BindBlobParameter(1, data, dataLen);
|
rv = statement->BindBlobParameter(1, aData, aDataLen);
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
rv = statement->BindUTF8StringParameter(2, *mimeType);
|
rv = statement->BindUTF8StringParameter(2, aMimeType);
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
rv = statement->BindInt64Parameter(3, aExpiration);
|
rv = statement->BindInt64Parameter(3, aExpiration);
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
@ -816,48 +800,6 @@ nsFaviconService::GetFaviconSpecForIconString(const nsCString& aSpec, nsACString
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// nsFaviconService::OptimizeFaviconImage
|
|
||||||
//
|
|
||||||
// Given a blob of data (a image file already read into a buffer), optimize
|
|
||||||
// its size by recompressing it as a 16x16 PNG.
|
|
||||||
nsresult
|
|
||||||
nsFaviconService::OptimizeFaviconImage(const PRUint8* aData, PRUint32 aDataLen,
|
|
||||||
const nsACString& aMimeType,
|
|
||||||
nsACString& aNewData,
|
|
||||||
nsACString& aNewMimeType)
|
|
||||||
{
|
|
||||||
nsresult rv;
|
|
||||||
|
|
||||||
|
|
||||||
nsCOMPtr<imgITools> imgtool = do_CreateInstance("@mozilla.org/image/tools;1");
|
|
||||||
|
|
||||||
nsCOMPtr<nsIInputStream> stream;
|
|
||||||
rv = NS_NewByteInputStream(getter_AddRefs(stream),
|
|
||||||
reinterpret_cast<const char*>(aData), aDataLen,
|
|
||||||
NS_ASSIGNMENT_DEPEND);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
// decode image
|
|
||||||
nsCOMPtr<imgIContainer> container;
|
|
||||||
rv = imgtool->DecodeImageData(stream, aMimeType, getter_AddRefs(container));
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
aNewMimeType.AssignLiteral("image/png");
|
|
||||||
|
|
||||||
// scale and recompress
|
|
||||||
nsCOMPtr<nsIInputStream> iconStream;
|
|
||||||
rv = imgtool->EncodeScaledImage(container, aNewMimeType, 16, 16,
|
|
||||||
getter_AddRefs(iconStream));
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
// Read the stream into a new buffer.
|
|
||||||
rv = NS_ConsumeStream(iconStream, PR_UINT32_MAX, aNewData);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
NS_IMPL_ISUPPORTS4(FaviconLoadListener,
|
NS_IMPL_ISUPPORTS4(FaviconLoadListener,
|
||||||
nsIRequestObserver,
|
nsIRequestObserver,
|
||||||
nsIStreamListener,
|
nsIStreamListener,
|
||||||
@ -984,6 +926,9 @@ FaviconLoadListener::OnDataAvailable(nsIRequest *aRequest, nsISupports *aContext
|
|||||||
nsIInputStream *aInputStream,
|
nsIInputStream *aInputStream,
|
||||||
PRUint32 aOffset, PRUint32 aCount)
|
PRUint32 aOffset, PRUint32 aCount)
|
||||||
{
|
{
|
||||||
|
if (aOffset + aCount > MAX_FAVICON_SIZE)
|
||||||
|
return NS_ERROR_FAILURE; // too big
|
||||||
|
|
||||||
nsCString buffer;
|
nsCString buffer;
|
||||||
nsresult rv = NS_ConsumeStream(aInputStream, aCount, buffer);
|
nsresult rv = NS_ConsumeStream(aInputStream, aCount, buffer);
|
||||||
if (rv != NS_BASE_STREAM_WOULD_BLOCK && NS_FAILED(rv))
|
if (rv != NS_BASE_STREAM_WOULD_BLOCK && NS_FAILED(rv))
|
||||||
|
@ -87,9 +87,6 @@ public:
|
|||||||
nsresult GetFaviconLinkForIconString(const nsCString& aIcon, nsIURI** aOutput);
|
nsresult GetFaviconLinkForIconString(const nsCString& aIcon, nsIURI** aOutput);
|
||||||
void GetFaviconSpecForIconString(const nsCString& aIcon, nsACString& aOutput);
|
void GetFaviconSpecForIconString(const nsCString& aIcon, nsACString& aOutput);
|
||||||
|
|
||||||
static nsresult OptimizeFaviconImage(const PRUint8* aData, PRUint32 aDataLen,
|
|
||||||
const nsACString& aMimeType,
|
|
||||||
nsACString& aNewData, nsACString& aNewMimeType);
|
|
||||||
NS_DECL_ISUPPORTS
|
NS_DECL_ISUPPORTS
|
||||||
NS_DECL_NSIFAVICONSERVICE
|
NS_DECL_NSIFAVICONSERVICE
|
||||||
|
|
||||||
|
@ -100,6 +100,8 @@ var iconsvc;
|
|||||||
function run_test() {
|
function run_test() {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
// Disable test for now.
|
||||||
|
return;
|
||||||
|
|
||||||
/* ========== 0 ========== */
|
/* ========== 0 ========== */
|
||||||
var testnum = 0;
|
var testnum = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user