diff options
author | Steve Block <steveblock@google.com> | 2011-05-25 19:08:45 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2011-06-08 13:51:31 +0100 |
commit | 2bde8e466a4451c7319e3a072d118917957d6554 (patch) | |
tree | 28f4a1b869a513e565c7760d0e6a06e7cf1fe95a /Tools/WebKitTestRunner/mac | |
parent | 6939c99b71d9372d14a0c74a772108052e8c48c8 (diff) | |
download | external_webkit-2bde8e466a4451c7319e3a072d118917957d6554.zip external_webkit-2bde8e466a4451c7319e3a072d118917957d6554.tar.gz external_webkit-2bde8e466a4451c7319e3a072d118917957d6554.tar.bz2 |
Merge WebKit at r82507: Initial merge by git
Change-Id: I60ce9d780725b58b45e54165733a8ffee23b683e
Diffstat (limited to 'Tools/WebKitTestRunner/mac')
-rw-r--r-- | Tools/WebKitTestRunner/mac/TestControllerMac.mm | 9 | ||||
-rw-r--r-- | Tools/WebKitTestRunner/mac/TestInvocationMac.mm | 156 | ||||
-rw-r--r-- | Tools/WebKitTestRunner/mac/main.mm | 2 |
3 files changed, 7 insertions, 160 deletions
diff --git a/Tools/WebKitTestRunner/mac/TestControllerMac.mm b/Tools/WebKitTestRunner/mac/TestControllerMac.mm index 8ceabc1..c884c8f 100644 --- a/Tools/WebKitTestRunner/mac/TestControllerMac.mm +++ b/Tools/WebKitTestRunner/mac/TestControllerMac.mm @@ -23,11 +23,12 @@ * THE POSSIBILITY OF SUCH DAMAGE. */ -#include "TestController.h" +#import "config.h" +#import "TestController.h" -#include "PlatformWebView.h" -#include <WebKit2/WKStringCF.h> -#include <mach-o/dyld.h> +#import "PlatformWebView.h" +#import <WebKit2/WKStringCF.h> +#import <mach-o/dyld.h> namespace WTR { diff --git a/Tools/WebKitTestRunner/mac/TestInvocationMac.mm b/Tools/WebKitTestRunner/mac/TestInvocationMac.mm deleted file mode 100644 index 13a0295..0000000 --- a/Tools/WebKitTestRunner/mac/TestInvocationMac.mm +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright (C) 2011 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - * THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "TestInvocation.h" - -#include "PlatformWebView.h" -#include "TestController.h" -#include <ImageIO/CGImageDestination.h> -#include <LaunchServices/UTCoreTypes.h> -#include <WebKit2/WKPage.h> -#include <wtf/RetainPtr.h> - -#define COMMON_DIGEST_FOR_OPENSSL -#include <CommonCrypto/CommonDigest.h> - -namespace WTR { - -static CGContextRef createCGContextFromPlatformView(PlatformWebView* platformWebView) -{ - WKView* view = platformWebView->platformView(); - [view display]; - - NSSize webViewSize = [view frame].size; - size_t pixelsWide = static_cast<size_t>(webViewSize.width); - size_t pixelsHigh = static_cast<size_t>(webViewSize.height); - size_t rowBytes = (4 * pixelsWide + 63) & ~63; - void* buffer = calloc(pixelsHigh, rowBytes); - - CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); - CGContextRef context = CGBitmapContextCreate(buffer, pixelsWide, pixelsHigh, 8, rowBytes, colorSpace, kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host); - CGColorSpaceRelease(colorSpace); - - CGImageRef image = CGWindowListCreateImage(CGRectNull, kCGWindowListOptionIncludingWindow, [[view window] windowNumber], kCGWindowImageBoundsIgnoreFraming | kCGWindowImageShouldBeOpaque); - CGContextDrawImage(context, CGRectMake(0, 0, CGImageGetWidth(image), CGImageGetHeight(image)), image); - CGImageRelease(image); - - return context; -} - -void computeMD5HashStringForContext(CGContextRef bitmapContext, char hashString[33]) -{ - ASSERT(CGBitmapContextGetBitsPerPixel(bitmapContext) == 32); // ImageDiff assumes 32 bit RGBA, we must as well. - size_t pixelsHigh = CGBitmapContextGetHeight(bitmapContext); - size_t pixelsWide = CGBitmapContextGetWidth(bitmapContext); - size_t bytesPerRow = CGBitmapContextGetBytesPerRow(bitmapContext); - - // We need to swap the bytes to ensure consistent hashes independently of endianness - MD5_CTX md5Context; - MD5_Init(&md5Context); - unsigned char* bitmapData = static_cast<unsigned char*>(CGBitmapContextGetData(bitmapContext)); - if ((CGBitmapContextGetBitmapInfo(bitmapContext) & kCGBitmapByteOrderMask) == kCGBitmapByteOrder32Big) { - for (unsigned row = 0; row < pixelsHigh; row++) { - uint32_t buffer[pixelsWide]; - for (unsigned column = 0; column < pixelsWide; column++) - buffer[column] = OSReadLittleInt32(bitmapData, 4 * column); - MD5_Update(&md5Context, buffer, 4 * pixelsWide); - bitmapData += bytesPerRow; - } - } else { - for (unsigned row = 0; row < pixelsHigh; row++) { - MD5_Update(&md5Context, bitmapData, 4 * pixelsWide); - bitmapData += bytesPerRow; - } - } - - unsigned char hash[16]; - MD5_Final(hash, &md5Context); - - hashString[0] = '\0'; - for (int i = 0; i < 16; i++) - snprintf(hashString, 33, "%s%02x", hashString, hash[i]); -} - -static void dumpBitmap(CGContextRef bitmapContext) -{ - RetainPtr<CGImageRef> image(AdoptCF, CGBitmapContextCreateImage(bitmapContext)); - RetainPtr<CFMutableDataRef> imageData(AdoptCF, CFDataCreateMutable(0, 0)); - RetainPtr<CGImageDestinationRef> imageDest(AdoptCF, CGImageDestinationCreateWithData(imageData.get(), kUTTypePNG, 1, 0)); - CGImageDestinationAddImage(imageDest.get(), image.get(), 0); - CGImageDestinationFinalize(imageDest.get()); - - const unsigned char* data = CFDataGetBytePtr(imageData.get()); - const size_t dataLength = CFDataGetLength(imageData.get()); - - - fprintf(stdout, "Content-Type: %s\n", "image/png"); - fprintf(stdout, "Content-Length: %lu\n", static_cast<unsigned long>(dataLength)); - - const size_t bytesToWriteInOneChunk = 1 << 15; - size_t dataRemainingToWrite = dataLength; - while (dataRemainingToWrite) { - size_t bytesToWriteInThisChunk = std::min(dataRemainingToWrite, bytesToWriteInOneChunk); - size_t bytesWritten = fwrite(data, 1, bytesToWriteInThisChunk, stdout); - if (bytesWritten != bytesToWriteInThisChunk) - break; - dataRemainingToWrite -= bytesWritten; - data += bytesWritten; - } -} - -static void forceRepaintFunction(WKErrorRef, void* context) -{ - *static_cast<bool*>(context) = true; -} - -void TestInvocation::dumpPixelsAndCompareWithExpected() -{ - WKPageForceRepaint(TestController::shared().mainWebView()->page(), &m_gotRepaint, forceRepaintFunction); - TestController::shared().runUntil(m_gotRepaint, TestController::LongTimeout); - - CGContextRef context = createCGContextFromPlatformView(TestController::shared().mainWebView()); - - // Compute the hash of the bitmap context pixels - char actualHash[33]; - computeMD5HashStringForContext(context, actualHash); - fprintf(stdout, "\nActualHash: %s\n", actualHash); - - // Check the computed hash against the expected one and dump image on mismatch - bool hashesMatch = false; - if (m_expectedPixelHash.length() > 0) { - ASSERT(m_expectedPixelHash.length() == 32); - - fprintf(stdout, "\nExpectedHash: %s\n", m_expectedPixelHash.c_str()); - - // FIXME: Do case insensitive compare. - if (m_expectedPixelHash == actualHash) - hashesMatch = true; - } - - if (!hashesMatch) - dumpBitmap(context); -} - -} // namespace WTR diff --git a/Tools/WebKitTestRunner/mac/main.mm b/Tools/WebKitTestRunner/mac/main.mm index d2f26ab..12326a4 100644 --- a/Tools/WebKitTestRunner/mac/main.mm +++ b/Tools/WebKitTestRunner/mac/main.mm @@ -23,6 +23,8 @@ * THE POSSIBILITY OF SUCH DAMAGE. */ +#import "config.h" + #import "TestController.h" int main(int argc, const char* argv[]) |