diff options
Diffstat (limited to 'Source/WebKit')
63 files changed, 1277 insertions, 340 deletions
diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog index 4084fc269..d7f18027a 100644 --- a/Source/WebKit/ChangeLog +++ b/Source/WebKit/ChangeLog @@ -1,3 +1,15 @@ +2012-09-14 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> + + [Qt] Make force_static_libs_as_shared work on Mac OS + + We had to move a few LIBS += around that were in the wrong place, + and not caught when everything was just linked into the final + QtWebKit library. + + Reviewed by Simon Hausmann. + + * WebKit1.pri: Move multimedia-stuff to WebCore, to share with WK2 + 2012-09-11 Raphael Kubo da Costa <rakuco@webkit.org> [EFL] Rewrite the EFL-related Find modules diff --git a/Source/WebKit/WebKit1.pri b/Source/WebKit/WebKit1.pri index fa2f6fa34..4a7e72e36 100644 --- a/Source/WebKit/WebKit1.pri +++ b/Source/WebKit/WebKit1.pri @@ -12,23 +12,6 @@ INCLUDEPATH += \ $$SOURCE_DIR/qt/WebCoreSupport \ $$ROOT_WEBKIT_DIR/Source/WTF/wtf/qt -enable?(VIDEO):use?(QTKIT) { - LIBS += -framework Security -framework IOKit - - # We can know the Mac OS version by using the Darwin major version - DARWIN_VERSION = $$split(QMAKE_HOST.version, ".") - DARWIN_MAJOR_VERSION = $$first(DARWIN_VERSION) - equals(DARWIN_MAJOR_VERSION, "12") { - LIBS += $${ROOT_WEBKIT_DIR}/WebKitLibraries/libWebKitSystemInterfaceMountainLion.a - } else:equals(DARWIN_MAJOR_VERSION, "11") { - LIBS += $${ROOT_WEBKIT_DIR}/WebKitLibraries/libWebKitSystemInterfaceLion.a - } else:equals(DARWIN_MAJOR_VERSION, "10") { - LIBS += $${ROOT_WEBKIT_DIR}/WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a - } else:equals(DARWIN_MAJOR_VERSION, "9") { - LIBS += $${ROOT_WEBKIT_DIR}/WebKitLibraries/libWebKitSystemInterfaceLeopard.a - } -} - enable?(DEVICE_ORIENTATION)|enable?(ORIENTATION_EVENTS) { QT += sensors } diff --git a/Source/WebKit/blackberry/Api/BackingStore.cpp b/Source/WebKit/blackberry/Api/BackingStore.cpp index d626fec30..7ad6ce859 100644 --- a/Source/WebKit/blackberry/Api/BackingStore.cpp +++ b/Source/WebKit/blackberry/Api/BackingStore.cpp @@ -28,6 +28,7 @@ #include "FrameView.h" #include "GraphicsContext.h" #include "InspectorController.h" +#include "InspectorInstrumentation.h" #include "Page.h" #include "SurfacePool.h" #include "WebPage.h" @@ -235,6 +236,16 @@ BackingStorePrivate::~BackingStorePrivate() pthread_mutex_destroy(&m_mutex); } +void BackingStorePrivate::instrumentBeginFrame() +{ + WebCore::InspectorInstrumentation::didBeginFrame(WebPagePrivate::core(m_webPage)); +} + +void BackingStorePrivate::instrumentCancelFrame() +{ + WebCore::InspectorInstrumentation::didCancelFrame(WebPagePrivate::core(m_webPage)); +} + bool BackingStorePrivate::shouldDirectRenderingToWindow() const { // Direct rendering doesn't work with OpenGL compositing code paths due to @@ -349,9 +360,14 @@ void BackingStorePrivate::resumeScreenAndBackingStoreUpdates(BackingStore::Resum --m_suspendScreenUpdates; BlackBerry::Platform::userInterfaceThreadMessageClient()->syncToCurrentMessage(); +#if USE(ACCELERATED_COMPOSITING) + // This will also blit since we set the OSDS flag above. + m_webPage->d->commitRootLayerIfNeeded(); +#else // Do some blitting if necessary. if ((op == BackingStore::Blit || op == BackingStore::RenderAndBlit) && !shouldDirectRenderingToWindow()) blitVisibleContents(); +#endif } void BackingStorePrivate::repaint(const Platform::IntRect& windowRect, diff --git a/Source/WebKit/blackberry/Api/BackingStore_p.h b/Source/WebKit/blackberry/Api/BackingStore_p.h index 71738951c..6ff040225 100644 --- a/Source/WebKit/blackberry/Api/BackingStore_p.h +++ b/Source/WebKit/blackberry/Api/BackingStore_p.h @@ -101,6 +101,9 @@ public: enum TileMatrixDirection { Horizontal, Vertical }; BackingStorePrivate(); + void instrumentBeginFrame(); + void instrumentCancelFrame(); + // Returns whether direct rendering is explicitly turned on or is // required because the surface pool is not large enough to meet // the minimum number of tiles required to scroll. diff --git a/Source/WebKit/blackberry/Api/WebOverlay.cpp b/Source/WebKit/blackberry/Api/WebOverlay.cpp index e01694cef..792a473b0 100644 --- a/Source/WebKit/blackberry/Api/WebOverlay.cpp +++ b/Source/WebKit/blackberry/Api/WebOverlay.cpp @@ -163,9 +163,9 @@ void WebOverlay::removeFromParent() d->parent = 0; } -void WebOverlay::setContentsToImage(const unsigned char* data, const Platform::IntSize& imageSize) +void WebOverlay::setContentsToImage(const unsigned char* data, const Platform::IntSize& imageSize, ImageDataAdoptionType adoptionType) { - d->setContentsToImage(data, imageSize); + d->setContentsToImage(data, imageSize, adoptionType); } void WebOverlay::setContentsToColor(int r, int g, int b, int a) @@ -329,7 +329,7 @@ void WebOverlayPrivateWebKitThread::removeFromParent() m_layer->removeFromParent(); } -void WebOverlayPrivateWebKitThread::setContentsToImage(const unsigned char* data, const WebCore::IntSize& imageSize) +void WebOverlayPrivateWebKitThread::setContentsToImage(const unsigned char* data, const WebCore::IntSize& imageSize, WebOverlay::ImageDataAdoptionType adoptionType) { notImplemented(); } @@ -390,6 +390,7 @@ void WebOverlayLayerCompositingThreadClient::setDrawsContent(bool drawsContent) void WebOverlayLayerCompositingThreadClient::invalidate() { m_texture.clear(); + clearUploadedContents(); } void WebOverlayLayerCompositingThreadClient::setContents(const SkBitmap& contents) @@ -397,6 +398,12 @@ void WebOverlayLayerCompositingThreadClient::setContents(const SkBitmap& content m_contents = contents; m_color = Color(); m_texture.clear(); + clearUploadedContents(); +} + +void WebOverlayLayerCompositingThreadClient::clearUploadedContents() +{ + m_uploadedContents = SkBitmap(); } void WebOverlayLayerCompositingThreadClient::setContentsToColor(const Color& color) @@ -404,6 +411,7 @@ void WebOverlayLayerCompositingThreadClient::setContentsToColor(const Color& col m_contents = SkBitmap(); m_color = color; m_texture.clear(); + clearUploadedContents(); } void WebOverlayLayerCompositingThreadClient::layerCompositingThreadDestroyed(WebCore::LayerCompositingThread*) @@ -446,7 +454,8 @@ void WebOverlayLayerCompositingThreadClient::uploadTexturesIfNeeded(LayerComposi m_texture = Texture::create(); m_texture->protect(IntSize(m_contents.width(), m_contents.height())); IntRect bitmapRect(0, 0, m_contents.width(), m_contents.height()); - m_texture->updateContents(m_contents, bitmapRect, bitmapRect, false); + m_uploadedContents = m_contents; + m_texture->updateContents(m_uploadedContents, bitmapRect, bitmapRect, false); } void WebOverlayLayerCompositingThreadClient::drawTextures(LayerCompositingThread* layer, double /*scale*/, int positionLocation, int texCoordLocation) @@ -464,6 +473,7 @@ void WebOverlayLayerCompositingThreadClient::drawTextures(LayerCompositingThread void WebOverlayLayerCompositingThreadClient::deleteTextures(LayerCompositingThread*) { m_texture.clear(); + clearUploadedContents(); } WebOverlayPrivateCompositingThread::WebOverlayPrivateCompositingThread(PassRefPtr<LayerCompositingThread> layerCompositingThread) @@ -594,7 +604,7 @@ void WebOverlayPrivateCompositingThread::removeFromParent() scheduleCompositingRun(); } -void WebOverlayPrivateCompositingThread::setContentsToImage(const unsigned char* data, const IntSize& imageSize) +void WebOverlayPrivateCompositingThread::setContentsToImage(const unsigned char* data, const IntSize& imageSize, WebOverlay::ImageDataAdoptionType adoptionType) { if (!m_layerCompositingThreadClient) return; @@ -608,7 +618,22 @@ void WebOverlayPrivateCompositingThread::setContentsToImage(const unsigned char* SkBitmap contents; contents.setConfig(SkBitmap::kARGB_8888_Config, imageSize.width(), imageSize.height()); - contents.setPixels(const_cast<unsigned char*>(data)); + + switch (adoptionType) { + case WebOverlay::ReferenceImageData: + contents.setPixels(const_cast<unsigned char*>(data)); + break; + case WebOverlay::CopyImageData: + if (contents.allocPixels()) { + contents.lockPixels(); + size_t bytes = SkBitmap::ComputeSize(SkBitmap::kARGB_8888_Config, imageSize.width(), imageSize.height()); + memcpy(contents.getPixels(), data, bytes); + contents.unlockPixels(); + } + break; + default: + ASSERT_NOT_REACHED(); + } m_layerCompositingThreadClient->setContents(contents); m_layerCompositingThread->setNeedsTexture(true); @@ -733,7 +758,7 @@ void WebOverlay::removeAnimation(const WebString&) { } -void WebOverlay::setContentsToImage(const unsigned char*, const Platform::IntSize&) +void WebOverlay::setContentsToImage(const unsigned char*, const Platform::IntSize&, ImageDataAdoptionType) { } diff --git a/Source/WebKit/blackberry/Api/WebOverlay.h b/Source/WebKit/blackberry/Api/WebOverlay.h index 5fe80c423..a59f60e28 100644 --- a/Source/WebKit/blackberry/Api/WebOverlay.h +++ b/Source/WebKit/blackberry/Api/WebOverlay.h @@ -55,6 +55,11 @@ class WebString; */ class BLACKBERRY_EXPORT WebOverlay { public: + enum ImageDataAdoptionType { + ReferenceImageData, + CopyImageData + }; + WebOverlay(); WebOverlay(WebCore::GraphicsLayerClient*); virtual ~WebOverlay(); @@ -94,7 +99,7 @@ public: bool addChild(WebOverlay*); void removeFromParent(); - void setContentsToImage(const unsigned char* data, const Platform::IntSize& imageSize); + void setContentsToImage(const unsigned char* data, const Platform::IntSize& imageSize, ImageDataAdoptionType = ReferenceImageData); void setContentsToColor(int r, int g, int b, int a); void setDrawsContent(bool); diff --git a/Source/WebKit/blackberry/Api/WebOverlay_p.h b/Source/WebKit/blackberry/Api/WebOverlay_p.h index bd274328a..d6c1dc176 100644 --- a/Source/WebKit/blackberry/Api/WebOverlay_p.h +++ b/Source/WebKit/blackberry/Api/WebOverlay_p.h @@ -24,6 +24,7 @@ #include "GraphicsLayer.h" #include "LayerCompositingThread.h" #include "Texture.h" +#include "WebOverlay.h" #include "WebOverlayOverride.h" #include <SkBitmap.h> @@ -45,7 +46,6 @@ class KeyframeValueList; namespace BlackBerry { namespace WebKit { -class WebOverlay; class WebOverlayClient; class WebPagePrivate; @@ -95,7 +95,7 @@ public: virtual void addChild(WebOverlayPrivate*) = 0; virtual void removeFromParent() = 0; - virtual void setContentsToImage(const unsigned char* data, const WebCore::IntSize& imageSize) = 0; + virtual void setContentsToImage(const unsigned char* data, const WebCore::IntSize& imageSize, WebOverlay::ImageDataAdoptionType) = 0; virtual void setContentsToColor(const WebCore::Color&) = 0; virtual void setDrawsContent(bool) = 0; @@ -152,7 +152,7 @@ public: virtual void addChild(WebOverlayPrivate*); virtual void removeFromParent(); - virtual void setContentsToImage(const unsigned char* data, const WebCore::IntSize& imageSize); + virtual void setContentsToImage(const unsigned char* data, const WebCore::IntSize& imageSize, WebOverlay::ImageDataAdoptionType); virtual void setContentsToColor(const WebCore::Color&); virtual void setDrawsContent(bool); @@ -202,9 +202,13 @@ public: virtual void deleteTextures(WebCore::LayerCompositingThread*); private: + void clearUploadedContents(); + +private: RefPtr<WebCore::Texture> m_texture; bool m_drawsContent; SkBitmap m_contents; + SkBitmap m_uploadedContents; WebCore::Color m_color; WebCore::LayerCompositingThread* m_layerCompositingThread; WebOverlay* m_owner; @@ -243,7 +247,7 @@ public: virtual void addChild(WebOverlayPrivate*); virtual void removeFromParent(); - virtual void setContentsToImage(const unsigned char* data, const WebCore::IntSize& imageSize); + virtual void setContentsToImage(const unsigned char* data, const WebCore::IntSize& imageSize, WebOverlay::ImageDataAdoptionType); virtual void setContentsToColor(const WebCore::Color&); virtual void setDrawsContent(bool); diff --git a/Source/WebKit/blackberry/Api/WebPage.cpp b/Source/WebKit/blackberry/Api/WebPage.cpp index e4425607f..6b639bf46 100644 --- a/Source/WebKit/blackberry/Api/WebPage.cpp +++ b/Source/WebKit/blackberry/Api/WebPage.cpp @@ -386,10 +386,13 @@ WebPagePrivate::WebPagePrivate(WebPage* webPage, WebPageClient* client, const In , m_cursorEventMode(ProcessedCursorEvents) , m_touchEventMode(ProcessedTouchEvents) #endif -#if ENABLE(FULLSCREEN_API) && ENABLE(VIDEO) +#if ENABLE(FULLSCREEN_API) +#if ENABLE(VIDEO) , m_scaleBeforeFullScreen(-1.0) , m_xScrollOffsetBeforeFullScreen(-1) #endif + , m_isTogglingFullScreenState(false) +#endif , m_currentCursor(Platform::CursorNone) , m_dumpRenderTree(0) // Lazy initialization. , m_initialScale(-1.0) @@ -3811,54 +3814,21 @@ void WebPagePrivate::setViewportSize(const IntSize& transformedActualVisibleSize if (atLeft) anchor.setX(0); - double clampedScale; - // Try and zoom here with clamping on. + // FIXME: Determine why the above comment says "clamping on", yet we + // don't set enforceScaleClamping to true. + // FIXME: Determine why ensureContentVisible() is only called for !success + // in the direct-rendering case, but in all cases otherwise. Chances are + // one of these is incorrect and we can unify two branches into one. if (m_backingStore->d->shouldDirectRenderingToWindow()) { bool success = zoomAboutPoint(scale, anchor, false /* enforceScaleClamping */, true /* forceRendering */); if (!success && ensureFocusElementVisible) ensureContentVisible(!newVisibleRectContainsOldVisibleRect); - } else if (shouldZoomAboutPoint(scale, anchor, false /* enforceScaleClamping */, &clampedScale)) { - - // For some reason, the bitmap zoom wants an anchor in backingstore coordinates! - // this is different from zoomAboutPoint, which wants content coordinates. - // See RIM Bug #641. - - FloatPoint transformedAnchor = mapToTransformedFloatPoint(anchor); - FloatPoint transformedScrollPosition = mapToTransformedFloatPoint(scrollPosition()); - - // Prohibit backingstore from updating the window overtop of the bitmap. - m_backingStore->d->suspendScreenAndBackingStoreUpdates(); - - // Need to invert the previous transform to anchor the viewport. - double zoomFraction = clampedScale / transformationMatrix()->m11(); - - // Anchor offset from scroll position in float. - FloatPoint anchorOffset(transformedAnchor.x() - transformedScrollPosition.x(), - transformedAnchor.y() - transformedScrollPosition.y()); - - IntPoint srcPoint( - static_cast<int>(roundf(transformedAnchor.x() - anchorOffset.x() / zoomFraction)), - static_cast<int>(roundf(transformedAnchor.y() - anchorOffset.y() / zoomFraction))); - - const IntRect viewportRect = IntRect(IntPoint::zero(), transformedViewportSize()); - const IntRect dstRect = viewportRect; - - // This is the rect to pass as the actual source rect in the backingstore - // for the transform given by zoom. - IntRect srcRect(srcPoint.x(), - srcPoint.y(), - viewportRect.width() / zoomFraction, - viewportRect.height() / zoomFraction); - m_backingStore->d->blitContents(dstRect, srcRect); - - zoomAboutPoint(clampedScale, anchor, false /*enforceScaleClamping*/, true /*forceRendering*/); - - m_backingStore->d->resumeScreenAndBackingStoreUpdates(BackingStore::RenderAndBlit); - + } else if (zoomAboutPoint(scale, anchor, false /*enforceScaleClamping*/, true /*forceRendering*/)) { if (ensureFocusElementVisible) ensureContentVisible(!newVisibleRectContainsOldVisibleRect); + } else { // Suspend all screen updates to the backingstore. @@ -3892,6 +3862,13 @@ void WebPagePrivate::setViewportSize(const IntSize& transformedActualVisibleSize // If we need layout then render and blit, otherwise just blit as our viewport has changed. m_backingStore->d->resumeScreenAndBackingStoreUpdates(needsLayout ? BackingStore::RenderAndBlit : BackingStore::Blit); } + +#if ENABLE(FULLSCREEN_API) + if (m_isTogglingFullScreenState) { + m_backingStore->d->resumeScreenAndBackingStoreUpdates(BackingStore::RenderAndBlit); + m_isTogglingFullScreenState = false; + } +#endif } void WebPage::setViewportSize(const Platform::IntSize& viewportSize, bool ensureFocusElementVisible) diff --git a/Source/WebKit/blackberry/Api/WebPage_p.h b/Source/WebKit/blackberry/Api/WebPage_p.h index 7e427648a..15e1ab919 100644 --- a/Source/WebKit/blackberry/Api/WebPage_p.h +++ b/Source/WebKit/blackberry/Api/WebPage_p.h @@ -525,6 +525,7 @@ public: double m_scaleBeforeFullScreen; int m_xScrollOffsetBeforeFullScreen; #endif + bool m_isTogglingFullScreenState; #endif Platform::BlackBerryCursor m_currentCursor; diff --git a/Source/WebKit/blackberry/ChangeLog b/Source/WebKit/blackberry/ChangeLog index aec03ffab..624acf7e3 100644 --- a/Source/WebKit/blackberry/ChangeLog +++ b/Source/WebKit/blackberry/ChangeLog @@ -1,3 +1,232 @@ +2012-09-18 Arvid Nilsson <anilsson@rim.com> + + [BlackBerry] Prevent scroll adjustment of input fields when region of interest mechanism active + https://bugs.webkit.org/show_bug.cgi?id=96750 + + Reviewed by Antonio Gomes. + + The region of interest mechanism replaces the scrolling/zooming + functionality in InputHandler::ensureFocusTextElementVisible(). + + We introduce a new fine-grained setting for the various adjustment + modes. The WebKit embedder can disable all scroll types in favor of the + region of interest mechanism by using the new setting. + + PR #208387 + + Reviewed internally by Mike Fenton. + + * WebKitSupport/AboutData.cpp: + (BlackBerry::WebKit::configPage): + * WebKitSupport/InputHandler.cpp: + (BlackBerry::WebKit::InputHandler::ensureFocusTextElementVisible): + * WebKitSupport/InputHandler.h: + +2012-09-17 Jakob Petsovits <jpetsovits@rim.com> + + [BlackBerry] Remove dysfunctional zoom blit in setViewportSize(). + https://bugs.webkit.org/show_bug.cgi?id=96954 + PR 178411 + + Reviewed by Antonio Gomes. + + The blitContents() call removed by this patch used to + be part of scheduleZoomAboutPoint(). Its goal was to + display a preview of the zoomed contents, primarily + when auto-zoomed after rotation. Nested inside a pair + of screen suspend/resume calls, it has been a pointless + no-op for a while. + + Antonio's recent change to remove scheduleZoomAboutPoint() + and call zoomAboutPoint() from setViewportSize() directly + (the only call site) obsoletes the call completely. + The zoomAboutPoint() call itself will cause a re-render + and blit right away, so we don't care about any preview. + zoomAboutPoint() will also take care of the necessary + screen/backingstore suspension. + + The result is a vastly simplified block of code. + + * Api/WebPage.cpp: + (BlackBerry::WebKit::WebPagePrivate::setViewportSize): + +2012-09-17 Antonio Gomes <agomes@rim.com> + + [BlackBerry] [FullScreen] entering/leaving fullscreen results in temporary glitches on the screen + https://bugs.webkit.org/show_bug.cgi?id=96927 + PR #180866 + + Reviewed by Yong Li. + + Suspend backing store and screen updates while entering fullscreen, + and only resume at the end, when viewport is resized. + + * Api/WebPage.cpp: + (BlackBerry::WebKit::WebPagePrivate::WebPagePrivate): + (BlackBerry::WebKit::WebPagePrivate::setViewportSize): + * Api/WebPage_p.h: + (WebPagePrivate): + * WebCoreSupport/ChromeClientBlackBerry.cpp: + (WebCore::ChromeClientBlackBerry::enterFullScreenForElement): + (WebCore::ChromeClientBlackBerry::exitFullScreenForElement): + +2012-09-17 Rob Buis <rbuis@rim.com> + + [BlackBerry] Fix compile problems in WebKit/blackberry + https://bugs.webkit.org/show_bug.cgi?id=96926 + + Reviewed by Antonio Gomes. + + This code is slightly out of date and so will not compile, fix it. + + * WebCoreSupport/BatteryClientBlackBerry.cpp: + (WebCore::BatteryClientBlackBerry::BatteryClientBlackBerry): + * WebCoreSupport/BatteryClientBlackBerry.h: + (WebKit): + * WebCoreSupport/CredentialTransformData.h: + * WebCoreSupport/DeviceOrientationClientBlackBerry.cpp: + (DeviceOrientationClientBlackBerry::onOrientation): + * WebCoreSupport/InspectorClientBlackBerry.h: + * WebCoreSupport/PagePopupBlackBerry.cpp: + * WebKitSupport/DOMSupport.cpp: + (BlackBerry::WebKit::DOMSupport::isDateTimeInputField): + (BlackBerry::WebKit::DOMSupport::isTextBasedContentEditableElement): + * WebKitSupport/DumpRenderTreeSupport.cpp: + (DumpRenderTreeSupport::numberOfPendingGeolocationPermissionRequests): + * WebKitSupport/InPageSearchManager.cpp: + (BlackBerry::WebKit::InPageSearchManager::scopeStringMatches): + +2012-09-17 Antonio Gomes <agomes@rim.com> + + [BlackBerry] BackingStorePrivate::resumeScreenAndBackingStoreUpdates more atomic + https://bugs.webkit.org/show_bug.cgi?id=96925 + + [FullScreen] entering/leaving fullscreen results in temporary glitches on the screen (part 2/3) + PR #180866 + + Reviewed by Rob Buis. + Internally reviewed by Arvid Nilsson. + + Paraphrasing Arvid "resumeBackingStore will be a truly atomic operation. + Well more atomic than it was before, with regards to a mix of accelerated and + non-accelerated compositing content". + + I.e. by committing the root layer (if needed) when resuming the Backing + Store, we call blitVisibleContents right way, so we are actually shortcutting when + AC content will get on screen. + + * Api/BackingStore.cpp: + (BlackBerry::WebKit::BackingStorePrivate::resumeScreenAndBackingStoreUpdates): + +2012-09-17 Peter Wang <peter.wang@torchmobile.com.cn> + + [BlackBerry] To support "Frames View" of "TimeLine" panel in Inspector + https://bugs.webkit.org/show_bug.cgi?id=96077 + + Reviewed by Rob Buis. + + Invoke the "instrumentBeginFrame" and "instrumentCancelFrame" at the start and end of processing + render message to record one time of page's update. + + * Api/BackingStore.cpp: + (BlackBerry::WebKit::BackingStorePrivate::instrumentBeginFrame): + (WebKit): + (BlackBerry::WebKit::BackingStorePrivate::instrumentCancelFrame): + * Api/BackingStore_p.h: + * WebKitSupport/RenderQueue.cpp: + (BlackBerry::WebKit::RenderQueue::render): + +2012-09-17 Jakob Petsovits <jpetsovits@rim.com> + + [BlackBerry] Support copying image data in WebOverlay. + https://bugs.webkit.org/show_bug.cgi?id=96684 + RIM PR 195444 + + Reviewed by Rob Buis. + Internally reviewed by Arvid Nilsson. + + The publicly exposed WebOverlay class provides a method + setContentsToImage() to assign a pointer to pixel data, + which is later used to provide texture data for the + underlying compositing layer. This works well for static + images that stay in memory and never change, but not + so well for images with changing contents or where the + image data is being reassigned from different image + sources that are not constantly kept around in memory. + + Due to the delayed upload and delayed fetching of + EGLImage data by the GPU, we shouldn't assume the caller + to know how long the image should be retained. Instead, + we should offer another method of setting image data + that takes ownership of the pixel data. + + This patch adds an option to setContentsToImage() that + copies the passed pixel data and doesn't destroy it + until both the texture is destroyed and the image + contents are changed. Using this method, the caller can + withdraw the passed pixel array right after the + setContentsToImage() call without consequences. + + * Api/WebOverlay.cpp: + (BlackBerry::WebKit::WebOverlay::setContentsToImage): + (BlackBerry::WebKit::WebOverlayPrivateWebKitThread::setContentsToImage): + (BlackBerry::WebKit::WebOverlayLayerCompositingThreadClient::WebOverlayLayerCompositingThreadClient): + (BlackBerry::WebKit::WebOverlayLayerCompositingThreadClient::invalidate): + (BlackBerry::WebKit::WebOverlayLayerCompositingThreadClient::setContents): + (WebKit): + (BlackBerry::WebKit::WebOverlayLayerCompositingThreadClient::clearUploadedContents): + (BlackBerry::WebKit::WebOverlayLayerCompositingThreadClient::setContentsToColor): + (BlackBerry::WebKit::WebOverlayLayerCompositingThreadClient::uploadTexturesIfNeeded): + (BlackBerry::WebKit::WebOverlayLayerCompositingThreadClient::deleteTextures): + (BlackBerry::WebKit::WebOverlayPrivateCompositingThread::setContentsToImage): + * Api/WebOverlay.h: + * Api/WebOverlay_p.h: + (WebOverlayPrivate): + (WebOverlayPrivateWebKitThread): + (WebOverlayLayerCompositingThreadClient): + (WebOverlayPrivateCompositingThread): + +2012-09-14 Dana Jansens <danakj@chromium.org> + + Minimize collisions when hashing pairs + https://bugs.webkit.org/show_bug.cgi?id=96022 + + Reviewed by Adrienne Walker. + + Use WTF::pairIntHash() to hash a pair of integers. + + * WebKitSupport/TileIndexHash.h: + +2012-09-14 Genevieve Mak <gmak@rim.com> + + Always send mouse events on pages that don't scroll even if there + is no mouse move listener attatched. + PR #208228 + https://bugs.webkit.org/show_bug.cgi?id=96800 + + Reviewed by Antonio Gomes. + + Reviewed Internally By Antonio Gomes. + + * WebKitSupport/TouchEventHandler.cpp: + (BlackBerry::WebKit::TouchEventHandler::handleTouchPoint): + +2012-09-14 Mike Fenton <mifenton@rim.com> + + [BlackBerry] Update the minimum zoom scale when focusing an input field. + https://bugs.webkit.org/show_bug.cgi?id=96789 + + Reviewed by Antonio Gomes. + + PR 188751. + + Increase the minimum font fix and base it on mm instead of pixels. + + Reviewed Internally by Gen Mak. + + * WebKitSupport/InputHandler.cpp: + (BlackBerry::WebKit::InputHandler::ensureFocusTextElementVisible): + 2012-09-13 Antonio Gomes <agomes@rim.com> [BlackBerry] Remove the ability to schedule a zoom about point call. diff --git a/Source/WebKit/blackberry/WebCoreSupport/BatteryClientBlackBerry.cpp b/Source/WebKit/blackberry/WebCoreSupport/BatteryClientBlackBerry.cpp index c39f0698f..5b5f4e142 100644 --- a/Source/WebKit/blackberry/WebCoreSupport/BatteryClientBlackBerry.cpp +++ b/Source/WebKit/blackberry/WebCoreSupport/BatteryClientBlackBerry.cpp @@ -22,13 +22,14 @@ #if ENABLE(BATTERY_STATUS) #include "BatteryController.h" +#include "WebPage_p.h" #include <stdio.h> namespace WebCore { BatteryClientBlackBerry::BatteryClientBlackBerry(BlackBerry::WebKit::WebPagePrivate* webPagePrivate) : m_webPagePrivate(webPagePrivate) - : m_tracker(0) + , m_tracker(0) { } diff --git a/Source/WebKit/blackberry/WebCoreSupport/BatteryClientBlackBerry.h b/Source/WebKit/blackberry/WebCoreSupport/BatteryClientBlackBerry.h index a9f27a7e0..624cc7068 100644 --- a/Source/WebKit/blackberry/WebCoreSupport/BatteryClientBlackBerry.h +++ b/Source/WebKit/blackberry/WebCoreSupport/BatteryClientBlackBerry.h @@ -26,6 +26,12 @@ #include <BlackBerryPlatformBatteryStatusTracker.h> #include <BlackBerryPlatformBatteryStatusTrackerListener.h> +namespace BlackBerry { +namespace WebKit { +class WebPagePrivate; +} +} + namespace WebCore { class BatteryStatus; diff --git a/Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp b/Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp index 8fbf9a56a..5b4ac4aa4 100644 --- a/Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp +++ b/Source/WebKit/blackberry/WebCoreSupport/ChromeClientBlackBerry.cpp @@ -735,6 +735,11 @@ bool ChromeClientBlackBerry::supportsFullScreenForElement(const WebCore::Element void ChromeClientBlackBerry::enterFullScreenForElement(WebCore::Element* element) { + // To avoid glitches on the screen when entering fullscreen, lets suspend the + // Backing Store screen updates and only resume at the next call of WebPagePrivate::setViewportSize. + m_webPagePrivate->m_isTogglingFullScreenState = true; + m_webPagePrivate->m_backingStore->d->suspendScreenAndBackingStoreUpdates(); + element->document()->webkitWillEnterFullScreenForElement(element); m_webPagePrivate->enterFullScreenForElement(element); element->document()->webkitDidEnterFullScreenForElement(element); @@ -743,6 +748,9 @@ void ChromeClientBlackBerry::enterFullScreenForElement(WebCore::Element* element void ChromeClientBlackBerry::exitFullScreenForElement(WebCore::Element*) { + m_webPagePrivate->m_isTogglingFullScreenState = true; + m_webPagePrivate->m_backingStore->d->suspendScreenAndBackingStoreUpdates(); + // The element passed into this function is not reliable, i.e. it could // be null. In addition the parameter may be disappearing in the future. // So we use the reference to the element we saved above. diff --git a/Source/WebKit/blackberry/WebCoreSupport/CredentialTransformData.h b/Source/WebKit/blackberry/WebCoreSupport/CredentialTransformData.h index 409c5776b..734a53b65 100644 --- a/Source/WebKit/blackberry/WebCoreSupport/CredentialTransformData.h +++ b/Source/WebKit/blackberry/WebCoreSupport/CredentialTransformData.h @@ -26,8 +26,6 @@ namespace WebCore { -class HTMLFormElement; - struct CredentialTransformData { // If the provided form is suitable for password completion, isValid() will // return true; diff --git a/Source/WebKit/blackberry/WebCoreSupport/DeviceOrientationClientBlackBerry.cpp b/Source/WebKit/blackberry/WebCoreSupport/DeviceOrientationClientBlackBerry.cpp index 683647506..8519b8fa3 100644 --- a/Source/WebKit/blackberry/WebCoreSupport/DeviceOrientationClientBlackBerry.cpp +++ b/Source/WebKit/blackberry/WebCoreSupport/DeviceOrientationClientBlackBerry.cpp @@ -69,7 +69,7 @@ DeviceOrientationData* DeviceOrientationClientBlackBerry::lastOrientation() cons void DeviceOrientationClientBlackBerry::onOrientation(const BlackBerry::Platform::DeviceOrientationEvent* event) { - m_currentOrientation = DeviceOrientation::create(true, event->alpha, true, event->beta, true, event->gamma); + m_currentOrientation = DeviceOrientationData::create(true, event->alpha, true, event->beta, true, event->gamma); if (!m_controller) return; diff --git a/Source/WebKit/blackberry/WebCoreSupport/InspectorClientBlackBerry.h b/Source/WebKit/blackberry/WebCoreSupport/InspectorClientBlackBerry.h index 34a553650..0591cdd03 100644 --- a/Source/WebKit/blackberry/WebCoreSupport/InspectorClientBlackBerry.h +++ b/Source/WebKit/blackberry/WebCoreSupport/InspectorClientBlackBerry.h @@ -22,6 +22,7 @@ #include "InspectorClient.h" #include "InspectorFrontendChannel.h" +#include "InspectorOverlay.h" #include "InspectorOverlayBlackBerry.h" #include <wtf/HashMap.h> #include <wtf/text/WTFString.h> diff --git a/Source/WebKit/blackberry/WebCoreSupport/PagePopupBlackBerry.cpp b/Source/WebKit/blackberry/WebCoreSupport/PagePopupBlackBerry.cpp index 81c148ffd..e00fb5809 100644 --- a/Source/WebKit/blackberry/WebCoreSupport/PagePopupBlackBerry.cpp +++ b/Source/WebKit/blackberry/WebCoreSupport/PagePopupBlackBerry.cpp @@ -19,6 +19,7 @@ #include "PagePopupBlackBerry.h" +#include "DocumentLoader.h" #include "EmptyClients.h" #include "FrameView.h" #include "JSDOMBinding.h" diff --git a/Source/WebKit/blackberry/WebKitSupport/AboutData.cpp b/Source/WebKit/blackberry/WebKitSupport/AboutData.cpp index 24260b039..5ccef3c0e 100644 --- a/Source/WebKit/blackberry/WebKitSupport/AboutData.cpp +++ b/Source/WebKit/blackberry/WebKitSupport/AboutData.cpp @@ -139,7 +139,7 @@ static String configPage() page += numberToHTMLTr("selectionEnabled", settings->selectionEnabled()); page += numberToHTMLTr("fineCursorControlEnabled", settings->fineCursorControlEnabled()); page += numberToHTMLTr("alwaysShowKeyboardOnFocus", settings->alwaysShowKeyboardOnFocus()); - page += numberToHTMLTr("allowCenterScrollAdjustmentForInputFields", settings->allowCenterScrollAdjustmentForInputFields()); + page += numberToHTMLTr("allowedScrollAdjustmentForInputFields", settings->allowedScrollAdjustmentForInputFields()); page += numberToHTMLTr("unrestrictedResizeEvents", settings->unrestrictedResizeEvents()); page += numberToHTMLTr("isBridgeBrowser", settings->isBridgeBrowser()); page += numberToHTMLTr("showImageLocationOptionsInGCM", settings->showImageLocationOptionsInGCM()); diff --git a/Source/WebKit/blackberry/WebKitSupport/DOMSupport.cpp b/Source/WebKit/blackberry/WebKitSupport/DOMSupport.cpp index bb0a02851..a2c16d0d1 100644 --- a/Source/WebKit/blackberry/WebKitSupport/DOMSupport.cpp +++ b/Source/WebKit/blackberry/WebKitSupport/DOMSupport.cpp @@ -170,11 +170,11 @@ bool isDateTimeInputField(const Element* element) const HTMLInputElement* inputElement = static_cast<const HTMLInputElement*>(element); // The following types have popup's. - if (inputElement->isDateControl() - || inputElement->isDateTimeControl() - || inputElement->isDateTimeLocalControl() - || inputElement->isTimeControl() - || inputElement->isMonthControl()) + if (inputElement->isDateField() + || inputElement->isDateTimeField() + || inputElement->isDateTimeLocalField() + || inputElement->isTimeField() + || inputElement->isMonthField()) return true; return false; @@ -249,7 +249,7 @@ bool isTextBasedContentEditableElement(Element* element) if (!element) return false; - if (element->isReadOnlyFormControl() || !element->isEnabledFormControl()) + if (element->isReadOnlyNode() || !element->isEnabledFormControl()) return false; if (isPopupInputField(element)) diff --git a/Source/WebKit/blackberry/WebKitSupport/DumpRenderTreeSupport.cpp b/Source/WebKit/blackberry/WebKitSupport/DumpRenderTreeSupport.cpp index b777db06a..e4e4ef0c0 100644 --- a/Source/WebKit/blackberry/WebKitSupport/DumpRenderTreeSupport.cpp +++ b/Source/WebKit/blackberry/WebKitSupport/DumpRenderTreeSupport.cpp @@ -28,7 +28,6 @@ #include "JSCSSStyleDeclaration.h" #include "JSElement.h" #include "Page.h" -#include "ViewportArguments.h" #include "WebPage_p.h" #include "bindings/js/GCController.h" #include <JavaScriptCore/APICast.h> @@ -86,7 +85,7 @@ bool DumpRenderTreeSupport::linksIncludedInFocusChain() int DumpRenderTreeSupport::numberOfPendingGeolocationPermissionRequests(WebPage* webPage) { - GeolocationClientMock* mockClient = toGeolocationClientMock(GeolocationController(corePage(webPage))->client()); + GeolocationClientMock* mockClient = toGeolocationClientMock(GeolocationController::from(corePage(webPage))->client()); return mockClient->numberOfPendingPermissionRequests(); } diff --git a/Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp b/Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp index c57de91b0..b24fda3a6 100644 --- a/Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp +++ b/Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp @@ -27,6 +27,7 @@ #include "Node.h" #include "Page.h" #include "Range.h" +#include "ShadowRoot.h" #include "TextIterator.h" #include "Timer.h" #include "WebPage_p.h" @@ -325,7 +326,7 @@ void InPageSearchManager::scopeStringMatches(const String& text, bool reset, boo resultRange->ownerDocument()->markers()->addTextMatchMarker(resultRange.get(), foundActiveMatch); searchRange->setStart(resultRange->endContainer(ec), resultRange->endOffset(ec), ec); - Node* shadowTreeRoot = searchRange->shadowTreeRootNode(); + ShadowRoot* shadowTreeRoot = searchRange->shadowRoot(); if (searchRange->collapsed(ec) && shadowTreeRoot) searchRange->setEnd(shadowTreeRoot, shadowTreeRoot->childNodeCount(), ec); m_resumeScopingFromRange = resultRange; diff --git a/Source/WebKit/blackberry/WebKitSupport/InputHandler.cpp b/Source/WebKit/blackberry/WebKitSupport/InputHandler.cpp index 690c1bbb7..0048a6430 100644 --- a/Source/WebKit/blackberry/WebKitSupport/InputHandler.cpp +++ b/Source/WebKit/blackberry/WebKitSupport/InputHandler.cpp @@ -66,6 +66,7 @@ #include <BlackBerryPlatformKeyboardEvent.h> #include <BlackBerryPlatformLog.h> #include <BlackBerryPlatformMisc.h> +#include <BlackBerryPlatformScreen.h> #include <BlackBerryPlatformSettings.h> #include <sys/keycodes.h> #include <wtf/text/CString.h> @@ -1050,7 +1051,7 @@ void InputHandler::ensureFocusTextElementVisible(CaretScrollType scrollType) if (!isActiveTextEdit() || !isInputModeEnabled() || !m_currentFocusElement->document()) return; - if (!Platform::Settings::instance()->allowCenterScrollAdjustmentForInputFields() && scrollType != EdgeIfNeeded) + if (!(Platform::Settings::instance()->allowedScrollAdjustmentForInputFields() & scrollType)) return; Frame* elementFrame = m_currentFocusElement->document()->frame(); @@ -1158,9 +1159,10 @@ void InputHandler::ensureFocusTextElementVisible(CaretScrollType scrollType) } // If the text is too small, zoom in to make it a minimum size. - static const int s_minimumTextHeightInPixels = 6; + // The minimum size being defined as 3 mm is a good value based on my observations. + static const int s_minimumTextHeightInPixels = Graphics::Screen::primaryScreen()->widthInMMToPixels(3); if (fontHeight && fontHeight < s_minimumTextHeightInPixels) - m_webPage->zoomAboutPoint(s_minimumTextHeightInPixels / fontHeight, m_webPage->centerOfVisibleContentsRect()); + m_webPage->zoomAboutPoint(s_minimumTextHeightInPixels / fontHeight, selectionFocusRect.location()); } void InputHandler::ensureFocusPluginElementVisible() diff --git a/Source/WebKit/blackberry/WebKitSupport/InputHandler.h b/Source/WebKit/blackberry/WebKitSupport/InputHandler.h index e6d3297f7..c65b9916b 100644 --- a/Source/WebKit/blackberry/WebKitSupport/InputHandler.h +++ b/Source/WebKit/blackberry/WebKitSupport/InputHandler.h @@ -22,6 +22,7 @@ #include "TextChecking.h" #include <BlackBerryPlatformInputEvents.h> +#include <BlackBerryPlatformSettings.h> #include <imf/events.h> #include <imf/input_data.h> @@ -65,7 +66,9 @@ public: ~InputHandler(); enum FocusElementType { TextEdit, TextPopup /* Date/Time & Color */, SelectPopup, Plugin }; - enum CaretScrollType { CenterAlways, CenterIfNeeded, EdgeIfNeeded }; + enum CaretScrollType { CenterAlways = BlackBerry::Platform::Settings::ScrollAdjustmentCenterAlways, + CenterIfNeeded = BlackBerry::Platform::Settings::ScrollAdjustmentCenterIfNeeded, + EdgeIfNeeded = BlackBerry::Platform::Settings::ScrollAdjustmentEdgeIfNeeded }; bool isInputModeEnabled() const; void setInputModeEnabled(bool active = true); diff --git a/Source/WebKit/blackberry/WebKitSupport/RenderQueue.cpp b/Source/WebKit/blackberry/WebKitSupport/RenderQueue.cpp index 110be1aa1..eb2593b21 100644 --- a/Source/WebKit/blackberry/WebKitSupport/RenderQueue.cpp +++ b/Source/WebKit/blackberry/WebKitSupport/RenderQueue.cpp @@ -564,6 +564,8 @@ void RenderQueue::render(bool shouldPerformRegularRenderJobs) double time = WTF::currentTime(); #endif + m_parent->instrumentBeginFrame(); + m_parent->requestLayoutIfNeeded(); #if DEBUG_RENDER_QUEUE @@ -584,6 +586,8 @@ void RenderQueue::render(bool shouldPerformRegularRenderJobs) renderRegularRenderJob(); } else if (!m_nonVisibleScrollJobs.empty()) renderNonVisibleScrollJob(); + + m_parent->instrumentCancelFrame(); } void RenderQueue::renderAllCurrentRegularRenderJobs() diff --git a/Source/WebKit/blackberry/WebKitSupport/TileIndexHash.h b/Source/WebKit/blackberry/WebKitSupport/TileIndexHash.h index 0d4633b75..29d1603c5 100644 --- a/Source/WebKit/blackberry/WebKitSupport/TileIndexHash.h +++ b/Source/WebKit/blackberry/WebKitSupport/TileIndexHash.h @@ -28,7 +28,7 @@ using BlackBerry::WebKit::TileIndex; namespace WTF { template<> struct IntHash<TileIndex> { - static unsigned hash(const TileIndex& key) { return intHash((static_cast<uint64_t>(key.i()) << 32 | key.j())); } + static unsigned hash(const TileIndex& key) { return pairIntHash(key.i(), key.j()); } static bool equal(const TileIndex& a, const TileIndex& b) { return a == b; } static const bool safeToCompareToEmptyOrDeleted = true; }; diff --git a/Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp b/Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp index 5aa77f5be..946ef7f6b 100644 --- a/Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp +++ b/Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp @@ -187,6 +187,7 @@ bool TouchEventHandler::handleTouchPoint(Platform::TouchPoint& point, bool useFa // Enable input mode on any touch event. m_webPage->m_inputHandler->setInputModeEnabled(); bool pureWithMouseConversion = m_webPage->m_touchEventMode == PureTouchEventsWithMouseConversion; + bool alwaysEnableMouseConversion = pureWithMouseConversion || (!isMainFrameScrollable(m_webPage) && !m_webPage->m_inRegionScroller->d->isActive()); switch (point.m_state) { case Platform::TouchPoint::TouchPressed: @@ -208,7 +209,7 @@ bool TouchEventHandler::handleTouchPoint(Platform::TouchPoint& point, bool useFa // Set or reset the touch mode. Element* possibleTargetNodeForMouseMoveEvents = static_cast<Element*>(m_lastFatFingersResult.positionWasAdjusted() ? elementUnderFatFinger : m_lastFatFingersResult.node()); - m_convertTouchToMouse = pureWithMouseConversion ? true : shouldConvertTouchToMouse(possibleTargetNodeForMouseMoveEvents); + m_convertTouchToMouse = alwaysEnableMouseConversion ? true : shouldConvertTouchToMouse(possibleTargetNodeForMouseMoveEvents); if (!possibleTargetNodeForMouseMoveEvents || (!possibleTargetNodeForMouseMoveEvents->hasEventListeners(eventNames().touchmoveEvent) && !m_convertTouchToMouse)) m_webPage->client()->notifyNoMouseMoveOrTouchMoveHandlers(); @@ -274,9 +275,7 @@ bool TouchEventHandler::handleTouchPoint(Platform::TouchPoint& point, bool useFa PlatformMouseEvent mouseEvent(point.m_pos, m_lastScreenPoint, PlatformEvent::MouseMoved, 1, LeftButton, TouchScreen); m_lastScreenPoint = point.m_screenPos; if (!m_webPage->handleMouseEvent(mouseEvent)) { - // If the page is scrollable and the first event is not handled, ignore subsequent mouse moves. - if (isMainFrameScrollable(m_webPage) || m_webPage->m_inRegionScroller->d->isActive() ) - m_convertTouchToMouse = pureWithMouseConversion; + m_convertTouchToMouse = alwaysEnableMouseConversion; return false; } return true; diff --git a/Source/WebKit/chromium/ChangeLog b/Source/WebKit/chromium/ChangeLog index df6051fb3..851e43976 100644 --- a/Source/WebKit/chromium/ChangeLog +++ b/Source/WebKit/chromium/ChangeLog @@ -1,3 +1,267 @@ +2012-09-17 Brian Anderson <brianderson@chromium.org> + + [chromium] Add rendering commit statistics + https://bugs.webkit.org/show_bug.cgi?id=96938 + + Reviewed by James Robinson. + + Adds total commit time and total commit count to WebRenderingStats. + Allows us to caculate average commit time in performance tests. + + * src/WebLayerTreeViewImpl.cpp: + (WebKit::WebLayerTreeViewImpl::renderingStats): + +2012-09-17 James Robinson <jamesr@chromium.org> + + [chromium] Move a FilterOperationsTest and WebInputEventConversionTest back to webkit_unittest_files variable + https://bugs.webkit.org/show_bug.cgi?id=96964 + + Reviewed by Adrienne Walker. + + These targets are really webkit unit tests and shouldn't be guarded by use_libcc_for_compositor. + + * WebKit.gypi: + +2012-09-17 Rick Byers <rbyers@chromium.org> + + Send GestureTapDownCancel to WebCore + https://bugs.webkit.org/show_bug.cgi?id=96060 + + Reviewed by Antonio Gomes. + + Plumb WebInputEvent::GetsureTapCancel to + PlatformInputEvent::GestureTapDownCancel. After all the chromium code + was landed, it was suggested that 'TapDownCancel' was a better name + than 'TapCancel' since you can't cancel a Tap. I'm not changing the + WebInputEvent definition here because that would be a breaking change + to chromium, but I can do that as a series of follow-up CLs. + * src/WebInputEventConversion.cpp: + (WebKit::PlatformGestureEventBuilder::PlatformGestureEventBuilder): + * src/WebPopupMenuImpl.cpp: + (WebKit::WebPopupMenuImpl::handleInputEvent): + * src/WebViewImpl.cpp: + (WebKit::WebViewImpl::handleGestureEvent): + +2012-09-17 Alec Flett <alecflett@chromium.org> + + IndexedDB: Use ScriptValue instead of SerializedScriptValue for get/openCursor + https://bugs.webkit.org/show_bug.cgi?id=95409 + + Reviewed by Kentaro Hara. + + This removes a bunch of tests that have been migrated to + LayoutTests, in https://bugs.webkit.org/show_bug.cgi?id=96818. + + * tests/IDBBindingUtilitiesTest.cpp: + (WebCore::checkKeyFromValueAndKeyPathInternal): + (WebCore::checkKeyPathNullValue): + (WebCore::injectKey): + (WebCore::checkInjection): + (WebCore::checkInjectionFails): + (WebCore::checkKeyPathStringValue): + (WebCore::checkKeyPathNumberValue): + (WebCore::TEST): + * tests/IDBKeyPathTest.cpp: + +2012-09-17 Leandro Gracia Gil <leandrogracia@chromium.org> + + [Chromium] Fix cases where find-in-page doesn't send a final update + https://bugs.webkit.org/show_bug.cgi?id=96402 + + Fix some issues in the WebKit implementation that prevented to send a final + reportFindInPageMatchCount message. + + Reviewed by Adam Barth. + + * src/WebFrameImpl.cpp: + (WebKit::WebFrameImpl::scopeStringMatches): + (WebKit): + (WebKit::WebFrameImpl::finishCurrentScopingEffort): + (WebKit::WebFrameImpl::cancelPendingScopingEffort): + (WebKit::WebFrameImpl::WebFrameImpl): + (WebKit::WebFrameImpl::shouldScopeMatches): + * src/WebFrameImpl.h: + +2012-09-17 Joshua Bell <jsbell@chromium.org> + + [Chromium] IndexedDB: Remove legacy two-phase open() API members + https://bugs.webkit.org/show_bug.cgi?id=96802 + + Reviewed by Tony Chang. + + Following http://webkit.org/b/90411 and subsequent cleanup on the Chromium side, + these entry points are no longer needed. + + * public/WebIDBDatabase.h: Delete old second-phase open(db-callbacks) + * public/WebIDBFactory.h: Delete old first-phase open() w/o db-callbacks + * src/WebIDBDatabaseImpl.cpp: No longer need to account for a close between phases. + (WebKit::WebIDBDatabaseImpl::WebIDBDatabaseImpl): + (WebKit::WebIDBDatabaseImpl::close): + (WebKit::WebIDBDatabaseImpl::forceClose): + * src/WebIDBDatabaseImpl.h: + (WebIDBDatabaseImpl): + +2012-09-17 Ilya Tikhonovsky <loislo@chromium.org> + + Unreviewed. Temporary disable visited set counter check. + + * tests/MemoryInstrumentationTest.cpp: + (WebCore::TEST): + +2012-09-17 Ilya Tikhonovsky <loislo@chromium.org> + + Web Inspector: NMI: now when we can detect instrumented classes we can + remove addInstrumentedMember and use addMember for everything. + https://bugs.webkit.org/show_bug.cgi?id=96913 + + Reviewed by Yury Semikhatsky. + + * tests/MemoryInstrumentationTest.cpp: + (WebCore::InstrumentedDOM::reportMemoryUsage): + (WebCore::NonVirtualInstrumented::reportMemoryUsage): + (WebCore::InstrumentedOwner::reportMemoryUsage): + +2012-09-17 Ilya Tikhonovsky <loislo@chromium.org> + + Unreviewed single line fix for mac chromium canary bot. + + * tests/MemoryInstrumentationTest.cpp: + (WebCore::TEST): + +2012-09-15 Yury Semikhatsky <yurys@chromium.org> + + Web Inspector: automatically detect if class has reportMemoryUsage method + https://bugs.webkit.org/show_bug.cgi?id=96756 + + Reviewed by Alexander Pavlov. + + Test that reportMemoryUsage method will be called on the instrumented object + even if it is a template. + + * tests/MemoryInstrumentationTest.cpp: + (WebCore): + (InstrumentedTemplate): + (WebCore::InstrumentedTemplate::InstrumentedTemplate): + (WebCore::InstrumentedTemplate::reportMemoryUsage): + (WebCore::TEST): + +2012-09-14 Yury Semikhatsky <yurys@chromium.org> + + Web Inspector: OwnPtr and RefPtr reported by pointer can be double counted by the memory instrumentation + https://bugs.webkit.org/show_bug.cgi?id=96791 + + Reviewed by Alexander Pavlov. + + Test that pointers to RefPtr and OwnPtr won't be double counted by + the memory instrumentation. + + * tests/MemoryInstrumentationTest.cpp: + (WebCore): + (TwoPointersToRefPtr): + (WebCore::TwoPointersToRefPtr::TwoPointersToRefPtr): + (WebCore::TwoPointersToRefPtr::reportMemoryUsage): + (WebCore::TEST): + (TwoPointersToOwnPtr): + (WebCore::TwoPointersToOwnPtr::TwoPointersToOwnPtr): + (WebCore::TwoPointersToOwnPtr::reportMemoryUsage): + +2012-09-16 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed. Rolled DEPS. + + * DEPS: + +2012-09-14 Julien Chaffraix <jchaffraix@webkit.org> + + Revert r127457 and following fixes due to several hit-testing regressions + https://bugs.webkit.org/show_bug.cgi?id=96830 + + Reviewed by Antonio Gomes. + + This change reverts r127457, r127863 and r128505. + + * src/ContextMenuClientImpl.cpp: + (WebKit::ContextMenuClientImpl::getCustomMenuFromDefaultItems): + +2012-09-14 Ojan Vafai <ojan@chromium.org> + + Provide a runtime setting to disable position:sticky + https://bugs.webkit.org/show_bug.cgi?id=96827 + + Reviewed by James Robinson. + + * public/WebSettings.h: + * src/WebSettingsImpl.cpp: + (WebKit::WebSettingsImpl::setCSSStickyPositionEnabled): + (WebKit): + * src/WebSettingsImpl.h: + (WebSettingsImpl): + +2012-09-14 Adam Barth <abarth@webkit.org> + + Remove webkitPostMessage + https://bugs.webkit.org/show_bug.cgi?id=96577 + + Reviewed by Ojan Vafai. + + Add ENABLE_LEGACY_VENDOR_PREFIXES flag. + + * features.gypi: + +2012-09-14 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed. Rolled DEPS. + + * DEPS: + +2012-09-14 Rick Byers <rbyers@chromium.org> + + [chromium] add touch area to gestureTapDown data + https://bugs.webkit.org/show_bug.cgi?id=96806 + + Reviewed by Adam Barth. + + Add width/height for GestureTapDown as for GestureTap/LongPress so that + we can eventually do fuzzing on it. + * public/WebInputEvent.h: + * src/WebInputEventConversion.cpp: + (WebKit::PlatformGestureEventBuilder::PlatformGestureEventBuilder): + +2012-09-14 Peter Beverloo <peter@chromium.org> + + [Chromium] Support the --{in,out,err}-fifo arguments on TestWebKitAPI and webkit_unit_tests + https://bugs.webkit.org/show_bug.cgi?id=96687 + + Reviewed by Tony Chang. + + Android's DumpRenderTree currently supports these arguments, implemented + as part of TestShellAndroid: + http://trac.webkit.org/browser/trunk/Tools/DumpRenderTree/chromium/TestShellAndroid.cpp?rev=128496 + + They're used by the layout test runner to get the STDOUT and STDERR while + a layout test run is in process, which is a safer alternative to parsing + all the logcat output manually. The implementation can be seen here: + http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py?rev=128496#L590 + + This patch generalizes parsing of and applying the effects of these arguments + so that they can be used for TestWebKitAPI and webkit_unit_tests as well. + After this patch, this will make it possible to pull out the output-reading + code from Android's layout test port and generalize it so it can be re-used + in the new test-runner for the other two test suites. + + This has no effect when compiling and running these tests as part of Chromium + code, which has a much more advanced test-runner that does parse complete log + output, but also directly depends on code licensed under Apache 2. + + * WebKit.gypi: + * tests/ForwardIOStreamsAndroid.cpp: Added. + (WebKit): + (WebKit::maybeInitIOStreamForwardingForAndroid): + * tests/ForwardIOStreamsAndroid.h: Added. + (WebKit): + * tests/RunAllTests.cpp: + (main): + 2012-09-14 Keishi Hattori <keishi@webkit.org> Make time input lang attribute aware for testing diff --git a/Source/WebKit/chromium/DEPS b/Source/WebKit/chromium/DEPS index a01b3757e..c5ab4a936 100644 --- a/Source/WebKit/chromium/DEPS +++ b/Source/WebKit/chromium/DEPS @@ -32,7 +32,7 @@ vars = { 'chromium_svn': 'http://src.chromium.org/svn/trunk/src', - 'chromium_rev': '156485' + 'chromium_rev': '157063' } deps = { diff --git a/Source/WebKit/chromium/WebKit.gypi b/Source/WebKit/chromium/WebKit.gypi index 5d3f850d5..edebf1b3c 100644 --- a/Source/WebKit/chromium/WebKit.gypi +++ b/Source/WebKit/chromium/WebKit.gypi @@ -62,6 +62,7 @@ 'tests/DecimalTest.cpp', 'tests/DragImageTest.cpp', 'tests/EventListenerTest.cpp', + 'tests/FilterOperationsTest.cpp', 'tests/FrameLoaderClientImplTest.cpp', 'tests/FrameTestHelpers.cpp', 'tests/FrameTestHelpers.h', @@ -101,6 +102,7 @@ 'tests/WebCompositorInitializer.h', 'tests/WebCompositorInputHandlerImplTest.cpp', 'tests/WebFrameTest.cpp', + 'tests/WebInputEventConversionTest.cpp', 'tests/WebMediaPlayerClientImplTest.cpp', 'tests/WebPageNewSerializerTest.cpp', 'tests/WebPageSerializerTest.cpp', @@ -165,7 +167,6 @@ 'tests/FakeWebCompositorOutputSurface.h', 'tests/FakeWebGraphicsContext3D.h', 'tests/FakeWebScrollbarThemeGeometry.h', - 'tests/FilterOperationsTest.cpp', 'tests/FloatQuadTest.cpp', 'tests/LayerChromiumTest.cpp', 'tests/MockCCQuadCuller.h', @@ -177,7 +178,6 @@ 'tests/TreeSynchronizerTest.cpp', 'tests/WebAnimationTest.cpp', 'tests/WebFloatAnimationCurveTest.cpp', - 'tests/WebInputEventConversionTest.cpp', 'tests/WebLayerTest.cpp', 'tests/WebLayerTreeViewTest.cpp', 'tests/WebLayerTreeViewTestCommon.h', diff --git a/Source/WebKit/chromium/WebKitUnitTests.gyp b/Source/WebKit/chromium/WebKitUnitTests.gyp index 18adac9f0..83b32cf6e 100644 --- a/Source/WebKit/chromium/WebKitUnitTests.gyp +++ b/Source/WebKit/chromium/WebKitUnitTests.gyp @@ -126,6 +126,7 @@ 'type': 'shared_library', 'dependencies': [ '<(chromium_src_dir)/testing/android/native_test.gyp:native_test_native_code', + 'io_stream_forwarder_android', ], }], ], @@ -208,6 +209,20 @@ '<(android_app_abi)', ], }], + }, + # FIXME: When the Android test runner framework in Chromium has stabilized enough, + # we should switch to using that and will no longer need the stream forwarding. + # https://bugs.webkit.org/show_bug.cgi?id=96764 + { + 'target_name': 'io_stream_forwarder_android', + 'type': 'static_library', + 'sources': [ + 'tests/ForwardIOStreamsAndroid.cpp', + 'tests/ForwardIOStreamsAndroid.h', + ], + 'dependencies': [ + '../../WebCore/WebCore.gyp/WebCore.gyp:webcore', + ], }], }], ], diff --git a/Source/WebKit/chromium/features.gypi b/Source/WebKit/chromium/features.gypi index b98db36d9..c51035d71 100644 --- a/Source/WebKit/chromium/features.gypi +++ b/Source/WebKit/chromium/features.gypi @@ -77,6 +77,7 @@ 'ENABLE_JAVASCRIPT_DEBUGGER=1', 'ENABLE_LEGACY_CSS_VENDOR_PREFIXES=0', 'ENABLE_LEGACY_VIEWPORT_ADAPTION=1', + 'ENABLE_LEGACY_VENDOR_PREFIXES=1', 'ENABLE_LEGACY_WEBKIT_BLOB_BUILDER=1', 'ENABLE_LINK_PREFETCH=1', 'ENABLE_LINK_PRERENDER=1', diff --git a/Source/WebKit/chromium/public/WebIDBDatabase.h b/Source/WebKit/chromium/public/WebIDBDatabase.h index 592a10e3e..83b9a425f 100644 --- a/Source/WebKit/chromium/public/WebIDBDatabase.h +++ b/Source/WebKit/chromium/public/WebIDBDatabase.h @@ -66,9 +66,6 @@ public: virtual void close() { WEBKIT_ASSERT_NOT_REACHED(); } virtual void forceClose() { WEBKIT_ASSERT_NOT_REACHED(); } - // FIXME: Remove this method after WK90411 cleanup is complete on the Chromium side. - virtual void open(WebIDBDatabaseCallbacks*) { WEBKIT_ASSERT_NOT_REACHED(); } - protected: WebIDBDatabase() { } }; diff --git a/Source/WebKit/chromium/public/WebIDBFactory.h b/Source/WebKit/chromium/public/WebIDBFactory.h index 69a453abc..12ecf07c7 100644 --- a/Source/WebKit/chromium/public/WebIDBFactory.h +++ b/Source/WebKit/chromium/public/WebIDBFactory.h @@ -55,10 +55,6 @@ public: virtual void getDatabaseNames(WebIDBCallbacks* callbacks, const WebSecurityOrigin& origin, WebFrame* frame, const WebString& dataDir) { WEBKIT_ASSERT_NOT_REACHED(); } - // FIXME: Remove this overload after WK90411 cleanup is complete on the Chromium side. - // The WebKit implementation of open ignores the WebFrame* parameter. - virtual void open(const WebString& name, long long version, WebIDBCallbacks* callbacks, const WebSecurityOrigin& origin, WebFrame* frame, const WebString& dataDir) { WEBKIT_ASSERT_NOT_REACHED(); } - // The WebKit implementation of open ignores the WebFrame* parameter. virtual void open(const WebString& name, long long version, WebIDBCallbacks* callbacks, WebIDBDatabaseCallbacks* databaseCallbacks, const WebSecurityOrigin& origin, WebFrame* frame, const WebString& dataDir) { WEBKIT_ASSERT_NOT_REACHED(); } diff --git a/Source/WebKit/chromium/public/WebInputEvent.h b/Source/WebKit/chromium/public/WebInputEvent.h index 075bd0c4e..f3edaf95e 100644 --- a/Source/WebKit/chromium/public/WebInputEvent.h +++ b/Source/WebKit/chromium/public/WebInputEvent.h @@ -388,6 +388,11 @@ public: struct { int width; int height; + } tapDown; + + struct { + int width; + int height; } longPress; struct { diff --git a/Source/WebKit/chromium/public/WebSettings.h b/Source/WebKit/chromium/public/WebSettings.h index fd0dcb649..5ff206b0a 100644 --- a/Source/WebKit/chromium/public/WebSettings.h +++ b/Source/WebKit/chromium/public/WebSettings.h @@ -93,6 +93,7 @@ public: virtual void setEnableScrollAnimator(bool) = 0; virtual void setExperimentalCSSCustomFilterEnabled(bool) = 0; virtual void setExperimentalCSSGridLayoutEnabled(bool) = 0; + virtual void setCSSStickyPositionEnabled(bool) = 0; virtual void setExperimentalCSSRegionsEnabled(bool) = 0; virtual void setExperimentalCSSVariablesEnabled(bool) = 0; virtual void setExperimentalWebGLEnabled(bool) = 0; diff --git a/Source/WebKit/chromium/src/ContextMenuClientImpl.cpp b/Source/WebKit/chromium/src/ContextMenuClientImpl.cpp index 5b0b01014..641a585a0 100644 --- a/Source/WebKit/chromium/src/ContextMenuClientImpl.cpp +++ b/Source/WebKit/chromium/src/ContextMenuClientImpl.cpp @@ -160,7 +160,7 @@ PlatformMenuDescription ContextMenuClientImpl::getCustomMenuFromDefaultItems( Frame* selectedFrame = r.innerNonSharedNode()->document()->frame(); WebContextMenuData data; - data.mousePosition = r.roundedPoint(); + data.mousePosition = selectedFrame->view()->contentsToWindow(r.roundedPoint()); // Compute edit flags. data.editFlags = WebContextMenuData::CanDoNone; diff --git a/Source/WebKit/chromium/src/WebFrameImpl.cpp b/Source/WebKit/chromium/src/WebFrameImpl.cpp index eb02351da..7bb0efeea 100644 --- a/Source/WebKit/chromium/src/WebFrameImpl.cpp +++ b/Source/WebKit/chromium/src/WebFrameImpl.cpp @@ -1779,17 +1779,15 @@ void WebFrameImpl::scopeStringMatches(int identifier, const WebFindOptions& options, bool reset) { - if (!shouldScopeMatches(searchText)) - return; - WebFrameImpl* mainFrameImpl = viewImpl()->mainFrameImpl(); if (reset) { // This is a brand new search, so we need to reset everything. // Scoping is just about to begin. m_scopingComplete = false; + // Clear highlighting for this frame. - if (frame()->editor()->markedTextMatchesAreHighlighted()) + if (frame() && frame()->editor()->markedTextMatchesAreHighlighted()) frame()->page()->unmarkAllTextMatches(); // Clear the tickmarks and results cache. @@ -1812,6 +1810,14 @@ void WebFrameImpl::scopeStringMatches(int identifier, return; } + if (!shouldScopeMatches(searchText)) { + // Note that we want to defer the final update when resetting even if shouldScopeMatches returns false. + // This is done in order to prevent sending a final message based only on the results of the first frame + // since m_framesScopingCount would be 0 as other frames have yet to reset. + finishCurrentScopingEffort(identifier); + return; + } + RefPtr<Range> searchRange(rangeOfContents(frame()->document())); Node* originalEndContainer = searchRange->endContainer(); @@ -1938,10 +1944,18 @@ void WebFrameImpl::scopeStringMatches(int identifier, return; // Done for now, resume work later. } + finishCurrentScopingEffort(identifier); +} + +void WebFrameImpl::finishCurrentScopingEffort(int identifier) +{ + WebFrameImpl* mainFrameImpl = viewImpl()->mainFrameImpl(); + // This frame has no further scoping left, so it is done. Other frames might, // of course, continue to scope matches. m_scopingComplete = true; mainFrameImpl->m_framesScopingCount--; + m_lastFindRequestCompletedWithNoMatches = !m_lastMatchCount; // If this is the last frame to finish scoping we need to trigger the final // update to be sent. @@ -1958,6 +1972,9 @@ void WebFrameImpl::cancelPendingScopingEffort() m_deferredScopingWork.clear(); m_activeMatchIndexInCurrentFrame = -1; + + if (!m_scopingComplete) + m_lastFindRequestCompletedWithNoMatches = false; } void WebFrameImpl::increaseMatchCount(int count, int identifier) @@ -2330,6 +2347,7 @@ WebFrameImpl::WebFrameImpl(WebFrameClient* client) , m_totalMatchCount(-1) , m_framesScopingCount(-1) , m_scopingComplete(false) + , m_lastFindRequestCompletedWithNoMatches(false) , m_nextInvalidateAfter(0) , m_findMatchMarkersVersion(0) , m_findMatchRectsAreValid(false) @@ -2612,9 +2630,9 @@ int WebFrameImpl::ordinalOfFirstMatchForFrame(WebFrameImpl* frame) const bool WebFrameImpl::shouldScopeMatches(const String& searchText) { - // Don't scope if we can't find a frame or a view or if the frame is not visible. + // Don't scope if we can't find a frame or a view. // The user may have closed the tab/application, so abort. - if (!frame() || !frame()->view() || !hasVisibleContent()) + if (!frame() || !frame()->view()) return false; ASSERT(frame()->document() && frame()->view()); @@ -2622,7 +2640,7 @@ bool WebFrameImpl::shouldScopeMatches(const String& searchText) // If the frame completed the scoping operation and found 0 matches the last // time it was searched, then we don't have to search it again if the user is // just adding to the search string or sending the same search string again. - if (m_scopingComplete && !m_lastSearchString.isEmpty() && !m_lastMatchCount) { + if (m_lastFindRequestCompletedWithNoMatches && !m_lastSearchString.isEmpty()) { // Check to see if the search string prefixes match. String previousSearchPrefix = searchText.substring(0, m_lastSearchString.length()); diff --git a/Source/WebKit/chromium/src/WebFrameImpl.h b/Source/WebKit/chromium/src/WebFrameImpl.h index e59c932c5..58525d701 100644 --- a/Source/WebKit/chromium/src/WebFrameImpl.h +++ b/Source/WebKit/chromium/src/WebFrameImpl.h @@ -385,6 +385,9 @@ private: // was searched. bool shouldScopeMatches(const WTF::String& searchText); + // Finishes the current scoping effort and triggers any updates if appropriate. + void finishCurrentScopingEffort(int identifier); + // Queue up a deferred call to scopeStringMatches. void scopeStringMatchesSoon( int identifier, const WebString& searchText, const WebFindOptions&, @@ -456,6 +459,10 @@ private: // interrupt it before it completes by submitting a new search). bool m_scopingComplete; + // Keeps track of whether the last find request completed its scoping effort + // without finding any matches in this frame. + bool m_lastFindRequestCompletedWithNoMatches; + // Keeps track of when the scoping effort should next invalidate the scrollbar // and the frame area. int m_nextInvalidateAfter; diff --git a/Source/WebKit/chromium/src/WebIDBDatabaseImpl.cpp b/Source/WebKit/chromium/src/WebIDBDatabaseImpl.cpp index 52879a9a7..b58cd5111 100644 --- a/Source/WebKit/chromium/src/WebIDBDatabaseImpl.cpp +++ b/Source/WebKit/chromium/src/WebIDBDatabaseImpl.cpp @@ -48,7 +48,6 @@ namespace WebKit { WebIDBDatabaseImpl::WebIDBDatabaseImpl(PassRefPtr<IDBDatabaseBackendInterface> databaseBackend, WTF::PassRefPtr<IDBDatabaseCallbacksProxy> databaseCallbacks) : m_databaseBackend(databaseBackend) , m_databaseCallbacks(databaseCallbacks) - , m_closePending(false) { } @@ -96,19 +95,15 @@ void WebIDBDatabaseImpl::close() { // Use the callbacks passed in to the constructor so that the backend in // multi-process chromium knows which database connection is closing. - if (!m_databaseCallbacks) { - m_closePending = true; + if (!m_databaseCallbacks) return; - } m_databaseBackend->close(m_databaseCallbacks.release()); } void WebIDBDatabaseImpl::forceClose() { - if (!m_databaseCallbacks) { - m_closePending = true; + if (!m_databaseCallbacks) return; - } RefPtr<IDBDatabaseCallbacksProxy> callbacks = m_databaseCallbacks.release(); m_databaseBackend->close(callbacks); callbacks->onForcedClose(); diff --git a/Source/WebKit/chromium/src/WebIDBDatabaseImpl.h b/Source/WebKit/chromium/src/WebIDBDatabaseImpl.h index 9cd1caf59..518ffcdb9 100644 --- a/Source/WebKit/chromium/src/WebIDBDatabaseImpl.h +++ b/Source/WebKit/chromium/src/WebIDBDatabaseImpl.h @@ -62,9 +62,6 @@ public: private: WTF::RefPtr<WebCore::IDBDatabaseBackendInterface> m_databaseBackend; WTF::RefPtr<IDBDatabaseCallbacksProxy> m_databaseCallbacks; - // FIXME: Remove this flag when we consolidate two-phase open. - // http://wkb.ug/90411 - bool m_closePending; }; } // namespace WebKit diff --git a/Source/WebKit/chromium/src/WebInputEventConversion.cpp b/Source/WebKit/chromium/src/WebInputEventConversion.cpp index 2afc7dcfe..0cc1e0c24 100644 --- a/Source/WebKit/chromium/src/WebInputEventConversion.cpp +++ b/Source/WebKit/chromium/src/WebInputEventConversion.cpp @@ -160,6 +160,10 @@ PlatformGestureEventBuilder::PlatformGestureEventBuilder(Widget* widget, const W break; case WebInputEvent::GestureTapDown: m_type = PlatformEvent::GestureTapDown; + m_area = IntSize(e.data.tapDown.width, e.data.tapDown.height); + break; + case WebInputEvent::GestureTapCancel: + m_type = PlatformEvent::GestureTapDownCancel; break; case WebInputEvent::GestureDoubleTap: m_type = PlatformEvent::GestureDoubleTap; diff --git a/Source/WebKit/chromium/src/WebLayerTreeViewImpl.cpp b/Source/WebKit/chromium/src/WebLayerTreeViewImpl.cpp index bb898c966..760cc6835 100644 --- a/Source/WebKit/chromium/src/WebLayerTreeViewImpl.cpp +++ b/Source/WebKit/chromium/src/WebLayerTreeViewImpl.cpp @@ -195,6 +195,8 @@ void WebLayerTreeViewImpl::renderingStats(WebRenderingStats& stats) const stats.droppedFrameCount = ccStats.droppedFrameCount; stats.totalPaintTimeInSeconds = ccStats.totalPaintTimeInSeconds; stats.totalRasterizeTimeInSeconds = ccStats.totalRasterizeTimeInSeconds; + stats.totalCommitTimeInSeconds = ccStats.totalCommitTimeInSeconds; + stats.totalCommitCount = ccStats.totalCommitCount; } void WebLayerTreeViewImpl::setFontAtlas(SkBitmap bitmap, WebRect asciiToWebRectTable[128], int fontHeight) diff --git a/Source/WebKit/chromium/src/WebPopupMenuImpl.cpp b/Source/WebKit/chromium/src/WebPopupMenuImpl.cpp index 58a2855cd..51114020b 100644 --- a/Source/WebKit/chromium/src/WebPopupMenuImpl.cpp +++ b/Source/WebKit/chromium/src/WebPopupMenuImpl.cpp @@ -277,6 +277,7 @@ bool WebPopupMenuImpl::handleInputEvent(const WebInputEvent& inputEvent) case WebInputEvent::GestureFlingCancel: case WebInputEvent::GestureTap: case WebInputEvent::GestureTapDown: + case WebInputEvent::GestureTapCancel: case WebInputEvent::GestureDoubleTap: case WebInputEvent::GestureTwoFingerTap: case WebInputEvent::GestureLongPress: @@ -288,7 +289,6 @@ bool WebPopupMenuImpl::handleInputEvent(const WebInputEvent& inputEvent) case WebInputEvent::Undefined: case WebInputEvent::MouseEnter: case WebInputEvent::ContextMenu: - case WebInputEvent::GestureTapCancel: return false; } return false; diff --git a/Source/WebKit/chromium/src/WebSettingsImpl.cpp b/Source/WebKit/chromium/src/WebSettingsImpl.cpp index 51731fd8f..4cc3ef727 100644 --- a/Source/WebKit/chromium/src/WebSettingsImpl.cpp +++ b/Source/WebKit/chromium/src/WebSettingsImpl.cpp @@ -337,6 +337,11 @@ void WebSettingsImpl::setExperimentalWebGLEnabled(bool enabled) m_settings->setWebGLEnabled(enabled); } +void WebSettingsImpl::setCSSStickyPositionEnabled(bool enabled) +{ + m_settings->setCSSStickyPositionEnabled(enabled); +} + void WebSettingsImpl::setExperimentalCSSRegionsEnabled(bool enabled) { m_settings->setCSSRegionsEnabled(enabled); diff --git a/Source/WebKit/chromium/src/WebSettingsImpl.h b/Source/WebKit/chromium/src/WebSettingsImpl.h index a5f7c0235..e9e01bfcd 100644 --- a/Source/WebKit/chromium/src/WebSettingsImpl.h +++ b/Source/WebKit/chromium/src/WebSettingsImpl.h @@ -85,6 +85,7 @@ public: virtual void setEnableScrollAnimator(bool); virtual void setExperimentalCSSCustomFilterEnabled(bool); virtual void setExperimentalCSSGridLayoutEnabled(bool); + virtual void setCSSStickyPositionEnabled(bool); virtual void setExperimentalCSSRegionsEnabled(bool); virtual void setExperimentalCSSVariablesEnabled(bool); virtual void setExperimentalWebGLEnabled(bool); diff --git a/Source/WebKit/chromium/src/WebViewImpl.cpp b/Source/WebKit/chromium/src/WebViewImpl.cpp index d18cd236c..97416e024 100644 --- a/Source/WebKit/chromium/src/WebViewImpl.cpp +++ b/Source/WebKit/chromium/src/WebViewImpl.cpp @@ -765,15 +765,12 @@ bool WebViewImpl::handleGestureEvent(const WebGestureEvent& event) m_client->cancelScheduledContentIntents(); case WebInputEvent::GestureScrollEnd: case WebInputEvent::GestureScrollUpdate: + case WebInputEvent::GestureTapCancel: case WebInputEvent::GesturePinchEnd: case WebInputEvent::GesturePinchUpdate: { PlatformGestureEventBuilder platformEvent(mainFrameImpl()->frameView(), event); return mainFrameImpl()->frame()->eventHandler()->handleGestureEvent(platformEvent); } - case WebInputEvent::GestureTapCancel: - // FIXME: Update WebCore to handle this event after chromium has been updated to send it - // http://wkb.ug/96060 - return false; default: ASSERT_NOT_REACHED(); } diff --git a/Source/WebKit/chromium/tests/ForwardIOStreamsAndroid.cpp b/Source/WebKit/chromium/tests/ForwardIOStreamsAndroid.cpp new file mode 100644 index 000000000..0ca5c1b5b --- /dev/null +++ b/Source/WebKit/chromium/tests/ForwardIOStreamsAndroid.cpp @@ -0,0 +1,125 @@ +/* + * Copyright (C) 2012 Google 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 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 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 "config.h" + +#include "ForwardIOStreamsAndroid.h" + +#include <android/log.h> +#include <errno.h> +#include <fcntl.h> +#include <stdio.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <unistd.h> +#include <wtf/StdLibExtras.h> + +#ifndef EXIT_FAILURE +#define EXIT_FAILURE 1 +#endif + +namespace { + +const char optionInFIFO[] = "--in-fifo="; +const char optionOutFIFO[] = "--out-fifo="; +const char optionErrFIFO[] = "--err-fifo="; + +void androidLogError(const char* format, ...) WTF_ATTRIBUTE_PRINTF(1, 2); + +void androidLogError(const char* format, ...) +{ + va_list args; + va_start(args, format); + __android_log_vprint(ANDROID_LOG_ERROR, "WebKit", format, args); + va_end(args); +} + +void removeArg(int index, int* argc, char*** argv) +{ + for (int i = index; i < *argc; ++i) + (*argv)[i] = (*argv)[i + 1]; + --*argc; +} + +void createFIFO(const char* fifoPath) +{ + unlink(fifoPath); + // 0666 is rw-rw-rw-, to allow adb shell to read/write the fifo. + // Explicitly call chmod to ensure the mode is set despite umask. + if (mkfifo(fifoPath, 0666) || chmod(fifoPath, 0666)) { + androidLogError("Failed to create fifo %s: %s\n", fifoPath, strerror(errno)); + exit(EXIT_FAILURE); + } +} + +void redirect(FILE* stream, const char* path, const char* mode) +{ + if (!freopen(path, mode, stream)) { + androidLogError("Failed to redirect stream to file: %s: %s\n", path, strerror(errno)); + exit(EXIT_FAILURE); + } +} + +} // namespace + +namespace WebKit { + +void maybeInitIOStreamForwardingForAndroid(int* argc, char*** argv) +{ + const char* inFIFO = 0; + const char* outFIFO = 0; + const char* errFIFO = 0; + for (int i = 1; i < *argc; ) { + const char* argument = (*argv)[i]; + if (strstr(argument, optionInFIFO) == argument) { + inFIFO = argument + WTF_ARRAY_LENGTH(optionInFIFO) - 1; + createFIFO(inFIFO); + removeArg(i, argc, argv); + } else if (strstr(argument, optionOutFIFO) == argument) { + outFIFO = argument + WTF_ARRAY_LENGTH(optionOutFIFO) - 1; + createFIFO(outFIFO); + removeArg(i, argc, argv); + } else if (strstr(argument, optionErrFIFO) == argument) { + errFIFO = argument + WTF_ARRAY_LENGTH(optionErrFIFO) - 1; + createFIFO(errFIFO); + removeArg(i, argc, argv); + } else + ++i; + } + + // The order of createFIFO() and redirectToFIFO() is important to avoid deadlock. + if (outFIFO) + redirect(stdout, outFIFO, "w"); + if (inFIFO) + redirect(stdin, inFIFO, "r"); + if (errFIFO) + redirect(stderr, errFIFO, "w"); + else { + // Redirect stderr to stdout. + dup2(1, 2); + } +} + +} // namespace WebKit diff --git a/Source/WebKit/chromium/tests/ForwardIOStreamsAndroid.h b/Source/WebKit/chromium/tests/ForwardIOStreamsAndroid.h new file mode 100644 index 000000000..6dbc638b4 --- /dev/null +++ b/Source/WebKit/chromium/tests/ForwardIOStreamsAndroid.h @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2012 Google 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 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 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. + */ + +#ifndef ForwardIOStreamsAndroid_h +#define ForwardIOStreamsAndroid_h + +namespace WebKit { + +// The test executables for Android support three additional command line flags +// (--in-fifo, --out-fifo and --err-fifo) to make it possible to retrieve input +// from a file instead of STDIN, and to forward STDOUT and STDERR to files. When +// running DumpRenderTree, TestWebKitAPI or webkit_unit_tests in WebKit +// infrastructure, these will be used instead of parsing all log output. +void maybeInitIOStreamForwardingForAndroid(int* argc, char*** argv); + +} // namespace WebKit + +#endif // ForwardIOStreamsAndroid_h diff --git a/Source/WebKit/chromium/tests/IDBBindingUtilitiesTest.cpp b/Source/WebKit/chromium/tests/IDBBindingUtilitiesTest.cpp index c2d5e7541..46710e745 100644 --- a/Source/WebKit/chromium/tests/IDBBindingUtilitiesTest.cpp +++ b/Source/WebKit/chromium/tests/IDBBindingUtilitiesTest.cpp @@ -27,7 +27,6 @@ #include "IDBBindingUtilities.h" #include "IDBKey.h" #include "IDBKeyPath.h" -#include "SerializedScriptValue.h" #include "V8PerIsolateData.h" #include "V8Utilities.h" @@ -40,41 +39,42 @@ using namespace WebCore; namespace { -PassRefPtr<IDBKey> checkKeyFromValueAndKeyPathInternal(SerializedScriptValue* value, const String& keyPath) +PassRefPtr<IDBKey> checkKeyFromValueAndKeyPathInternal(const ScriptValue& value, const String& keyPath) { IDBKeyPath idbKeyPath(keyPath); EXPECT_TRUE(idbKeyPath.isValid()); - return createIDBKeyFromSerializedValueAndKeyPath(value, idbKeyPath); + + return createIDBKeyFromScriptValueAndKeyPath(value, idbKeyPath); } -void checkKeyPathNullValue(SerializedScriptValue* value, const String& keyPath) +void checkKeyPathNullValue(const ScriptValue& value, const String& keyPath) { RefPtr<IDBKey> idbKey = checkKeyFromValueAndKeyPathInternal(value, keyPath); ASSERT_FALSE(idbKey.get()); } -PassRefPtr<SerializedScriptValue> injectKey(PassRefPtr<IDBKey> key, PassRefPtr<SerializedScriptValue> value, const String& keyPath) +bool injectKey(PassRefPtr<IDBKey> key, ScriptValue& value, const String& keyPath) { IDBKeyPath idbKeyPath(keyPath); EXPECT_TRUE(idbKeyPath.isValid()); - return injectIDBKeyIntoSerializedValue(key, value, idbKeyPath); + return injectIDBKeyIntoScriptValue(key, value, idbKeyPath); } -void checkInjection(PassRefPtr<IDBKey> prpKey, PassRefPtr<SerializedScriptValue> value, const String& keyPath) +void checkInjection(PassRefPtr<IDBKey> prpKey, ScriptValue& value, const String& keyPath) { RefPtr<IDBKey> key = prpKey; - RefPtr<SerializedScriptValue> newValue = injectKey(key, value, keyPath); - ASSERT_TRUE(newValue); - RefPtr<IDBKey> extractedKey = checkKeyFromValueAndKeyPathInternal(newValue.get(), keyPath); + bool result = injectKey(key, value, keyPath); + ASSERT_TRUE(result); + RefPtr<IDBKey> extractedKey = checkKeyFromValueAndKeyPathInternal(value, keyPath); EXPECT_TRUE(key->isEqual(extractedKey.get())); } -void checkInjectionFails(PassRefPtr<IDBKey> key, PassRefPtr<SerializedScriptValue> value, const String& keyPath) +void checkInjectionFails(PassRefPtr<IDBKey> key, ScriptValue& value, const String& keyPath) { EXPECT_FALSE(injectKey(key, value, keyPath)); } -void checkKeyPathStringValue(SerializedScriptValue* value, const String& keyPath, const String& expected) +void checkKeyPathStringValue(const ScriptValue& value, const String& keyPath, const String& expected) { RefPtr<IDBKey> idbKey = checkKeyFromValueAndKeyPathInternal(value, keyPath); ASSERT_TRUE(idbKey.get()); @@ -82,7 +82,7 @@ void checkKeyPathStringValue(SerializedScriptValue* value, const String& keyPath ASSERT_TRUE(expected == idbKey->string()); } -void checkKeyPathNumberValue(SerializedScriptValue* value, const String& keyPath, int expected) +void checkKeyPathNumberValue(const ScriptValue& value, const String& keyPath, int expected) { RefPtr<IDBKey> idbKey = checkKeyFromValueAndKeyPathInternal(value, keyPath); ASSERT_TRUE(idbKey.get()); @@ -98,10 +98,10 @@ TEST(IDBKeyFromValueAndKeyPathTest, TopLevelPropertyStringValue) v8::Local<v8::Object> object = v8::Object::New(); object->Set(v8::String::New("foo"), v8::String::New("zoo")); - RefPtr<SerializedScriptValue> serializedScriptValue = SerializedScriptValue::create(object); + ScriptValue scriptValue(object); - checkKeyPathStringValue(serializedScriptValue.get(), "foo", "zoo"); - checkKeyPathNullValue(serializedScriptValue.get(), "bar"); + checkKeyPathStringValue(scriptValue, "foo", "zoo"); + checkKeyPathNullValue(scriptValue, "bar"); } TEST(IDBKeyFromValueAndKeyPathTest, TopLevelPropertyNumberValue) @@ -112,10 +112,10 @@ TEST(IDBKeyFromValueAndKeyPathTest, TopLevelPropertyNumberValue) v8::Local<v8::Object> object = v8::Object::New(); object->Set(v8::String::New("foo"), v8::Number::New(456)); - RefPtr<SerializedScriptValue> serializedScriptValue = SerializedScriptValue::create(object); + ScriptValue scriptValue(object); - checkKeyPathNumberValue(serializedScriptValue.get(), "foo", 456); - checkKeyPathNullValue(serializedScriptValue.get(), "bar"); + checkKeyPathNumberValue(scriptValue, "foo", 456); + checkKeyPathNullValue(scriptValue, "bar"); } TEST(IDBKeyFromValueAndKeyPathTest, SubProperty) @@ -128,10 +128,10 @@ TEST(IDBKeyFromValueAndKeyPathTest, SubProperty) subProperty->Set(v8::String::New("bar"), v8::String::New("zee")); object->Set(v8::String::New("foo"), subProperty); - RefPtr<SerializedScriptValue> serializedScriptValue = SerializedScriptValue::create(object); + ScriptValue scriptValue(object); - checkKeyPathStringValue(serializedScriptValue.get(), "foo.bar", "zee"); - checkKeyPathNullValue(serializedScriptValue.get(), "bar"); + checkKeyPathStringValue(scriptValue, "foo.bar", "zee"); + checkKeyPathNullValue(scriptValue, "bar"); } TEST(InjectIDBKeyTest, TopLevelPropertyStringValue) @@ -142,10 +142,11 @@ TEST(InjectIDBKeyTest, TopLevelPropertyStringValue) v8::Local<v8::Object> object = v8::Object::New(); object->Set(v8::String::New("foo"), v8::String::New("zoo")); - checkInjection(IDBKey::createString("myNewKey"), SerializedScriptValue::create(object), "bar"); - checkInjection(IDBKey::createNumber(1234), SerializedScriptValue::create(object), "bar"); + ScriptValue foozoo(object); + checkInjection(IDBKey::createString("myNewKey"), foozoo, "bar"); + checkInjection(IDBKey::createNumber(1234), foozoo, "bar"); - checkInjectionFails(IDBKey::createString("key"), SerializedScriptValue::create(object), "foo.bar"); + checkInjectionFails(IDBKey::createString("key"), foozoo, "foo.bar"); } TEST(InjectIDBKeyTest, SubProperty) @@ -158,15 +159,16 @@ TEST(InjectIDBKeyTest, SubProperty) subProperty->Set(v8::String::New("bar"), v8::String::New("zee")); object->Set(v8::String::New("foo"), subProperty); - checkInjection(IDBKey::createString("myNewKey"), SerializedScriptValue::create(object), "foo.baz"); - checkInjection(IDBKey::createNumber(789), SerializedScriptValue::create(object), "foo.baz"); - checkInjection(IDBKey::createDate(4567), SerializedScriptValue::create(object), "foo.baz"); - checkInjection(IDBKey::createDate(4567), SerializedScriptValue::create(object), "bar"); - checkInjection(IDBKey::createArray(IDBKey::KeyArray()), SerializedScriptValue::create(object), "foo.baz"); - checkInjection(IDBKey::createArray(IDBKey::KeyArray()), SerializedScriptValue::create(object), "bar"); + ScriptValue scriptObject(object); + checkInjection(IDBKey::createString("myNewKey"), scriptObject, "foo.baz"); + checkInjection(IDBKey::createNumber(789), scriptObject, "foo.baz"); + checkInjection(IDBKey::createDate(4567), scriptObject, "foo.baz"); + checkInjection(IDBKey::createDate(4567), scriptObject, "bar"); + checkInjection(IDBKey::createArray(IDBKey::KeyArray()), scriptObject, "foo.baz"); + checkInjection(IDBKey::createArray(IDBKey::KeyArray()), scriptObject, "bar"); - checkInjectionFails(IDBKey::createString("zoo"), SerializedScriptValue::create(object), "foo.bar.baz"); - checkInjection(IDBKey::createString("zoo"), SerializedScriptValue::create(object), "foo.xyz.foo"); + checkInjectionFails(IDBKey::createString("zoo"), scriptObject, "foo.bar.baz"); + checkInjection(IDBKey::createString("zoo"), scriptObject, "foo.xyz.foo"); } } // namespace diff --git a/Source/WebKit/chromium/tests/IDBKeyPathTest.cpp b/Source/WebKit/chromium/tests/IDBKeyPathTest.cpp index c3d47d788..cd240cc94 100644 --- a/Source/WebKit/chromium/tests/IDBKeyPathTest.cpp +++ b/Source/WebKit/chromium/tests/IDBKeyPathTest.cpp @@ -127,92 +127,6 @@ TEST(IDBKeyPathTest, InvalidKeyPath5) checkKeyPath(keyPath, expected, 3); } -TEST(IDBKeyPathTest, Extract) -{ - IDBKeyPath keyPath("foo"); - RefPtr<IDBKey> stringZooKey(IDBKey::createString("zoo")); - RefPtr<IDBKey> invalidKey(IDBKey::createInvalid()); - RefPtr<SerializedScriptValue> ssv; - RefPtr<IDBKey> result; - - // keypath: "foo", value: {foo: "zoo"}, expected: "zoo" - UChar dataFooZoo[] = {0x0353, 0x6f66, 0x536f, 0x7a03, 0x6f6f, 0x017b}; - ssv = SerializedScriptValue::createFromWire(String(dataFooZoo, WTF_ARRAY_LENGTH(dataFooZoo))); - result = createIDBKeyFromSerializedValueAndKeyPath(ssv, keyPath); - EXPECT_TRUE(stringZooKey->isEqual(result.get())); - - // keypath: "foo", value: {foo: null}, expected: invalid - UChar dataFooNull[] = {0x0353, 0x6f66, 0x306f, 0x017b}; - ssv = SerializedScriptValue::createFromWire(String(dataFooNull, WTF_ARRAY_LENGTH(dataFooNull))); - result = createIDBKeyFromSerializedValueAndKeyPath(ssv, keyPath); - EXPECT_FALSE(result->isValid()); - - // keypath: "foo", value: {}, expected: null - UChar dataObject[] = {0x017b}; - ssv = SerializedScriptValue::createFromWire(String(dataObject, WTF_ARRAY_LENGTH(dataObject))); - result = createIDBKeyFromSerializedValueAndKeyPath(ssv, keyPath); - EXPECT_EQ(0, result.get()); - - // keypath: "foo", value: null, expected: null - ssv = SerializedScriptValue::nullValue(); - result = createIDBKeyFromSerializedValueAndKeyPath(ssv, keyPath); - EXPECT_EQ(0, result.get()); -} - -TEST(IDBKeyPathTest, IDBKeyPathPropertyNotAvailable) -{ - IDBKeyPath keyPath("PropertyNotAvailable"); - RefPtr<SerializedScriptValue> ssv; - // {foo: "zoo", bar: null} - UChar data[] = {0x0353, 0x6f66, 0x536f, 0x7a03, 0x6f6f, 0x0353, 0x6162, - 0x3072, 0x027b}; - ssv = SerializedScriptValue::createFromWire(String(data, WTF_ARRAY_LENGTH(data))); - RefPtr<IDBKey> result = createIDBKeyFromSerializedValueAndKeyPath(ssv, keyPath); - EXPECT_EQ(0, result.get()); - - // null - ssv = SerializedScriptValue::nullValue(); - result = createIDBKeyFromSerializedValueAndKeyPath(ssv, keyPath); - EXPECT_EQ(0, result.get()); -} - -TEST(IDBKeyPathTest, InjectIDBKey) -{ - // {foo: 'zoo'} - const UChar initialData[] = {0x0353, 0x6f66, 0x536f, 0x7a03, 0x6f6f, 0x017b}; - RefPtr<SerializedScriptValue> value = SerializedScriptValue::createFromWire(String(initialData, WTF_ARRAY_LENGTH(initialData))); - - RefPtr<IDBKey> key = IDBKey::createString("myNewKey"); - IDBKeyPath keyPath("bar"); - - // {foo: 'zoo', bar: 'myNewKey'} - const UChar expectedData[] = {0x01ff, 0x003f, 0x3f6f, 0x5301, 0x6603, - 0x6f6f, 0x013f, 0x0353, 0x6f7a, 0x3f6f, - 0x5301, 0x6203, 0x7261, 0x013f, 0x0853, - 0x796d, 0x654e, 0x4b77, 0x7965, 0x027b}; - RefPtr<SerializedScriptValue> expectedValue = - SerializedScriptValue::createFromWire(String(expectedData, WTF_ARRAY_LENGTH(expectedData))); - RefPtr<SerializedScriptValue> result = injectIDBKeyIntoSerializedValue(key, value, keyPath); - EXPECT_EQ(expectedValue->toWireString(), result->toWireString()); - - // Should fail - can't apply properties to string value of key foo - keyPath = IDBKeyPath("foo.bad.path"); - result = injectIDBKeyIntoSerializedValue(key, value, keyPath); - EXPECT_EQ(0, result.get()); - - // {foo: 'zoo', bar: {baz: 'myNewKey'}} - const UChar expectedData2[] = {0x01ff, 0x003f, 0x3f6f, 0x5301, 0x6603, - 0x6f6f, 0x013f, 0x0353, 0x6f7a, 0x3f6f, - 0x5301, 0x6203, 0x7261, 0x013f, 0x3f6f, - 0x5302, 0x6203, 0x7a61, 0x023f, 0x0853, - 0x796d, 0x654e, 0x4b77, 0x7965, 0x017b, - 0x027b}; - RefPtr<SerializedScriptValue> expectedValue2 = SerializedScriptValue::createFromWire(String(expectedData2, WTF_ARRAY_LENGTH(expectedData2))); - keyPath = IDBKeyPath("bar.baz"); - result = injectIDBKeyIntoSerializedValue(key, value, keyPath); - EXPECT_EQ(expectedValue2->toWireString(), result->toWireString()); -} - } // namespace #endif // ENABLE(INDEXED_DATABASE) diff --git a/Source/WebKit/chromium/tests/MemoryInstrumentationTest.cpp b/Source/WebKit/chromium/tests/MemoryInstrumentationTest.cpp index 4a0a3cf81..4acf496ad 100644 --- a/Source/WebKit/chromium/tests/MemoryInstrumentationTest.cpp +++ b/Source/WebKit/chromium/tests/MemoryInstrumentationTest.cpp @@ -50,6 +50,7 @@ namespace { class NotInstrumented { public: + NotInstrumented(const char* = 0) { } char m_data[42]; }; @@ -192,7 +193,7 @@ public: void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const { MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::DOM); - info.addInstrumentedMember(m_instrumentedUndefined); + info.addMember(m_instrumentedUndefined); } OwnPtr<InstrumentedUndefined> m_instrumentedUndefined; }; @@ -213,7 +214,7 @@ public: void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const { MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::DOM); - info.addInstrumentedMember(m_instrumented); + info.addMember(m_instrumented); } Instrumented m_instrumented; @@ -237,7 +238,7 @@ public: void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const { MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::DOM); - info.addInstrumentedMember(m_value); + info.addMember(m_value); } T m_value; @@ -275,5 +276,96 @@ TEST(MemoryInstrumentationTest, visitStrings) } } +class TwoPointersToRefPtr { +public: + TwoPointersToRefPtr(const RefPtr<StringImpl>& value) : m_ptr1(&value), m_ptr2(&value) { } + void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const + { + MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::DOM); + info.addMember(m_ptr1); + info.addMember(m_ptr2); + } + + const RefPtr<StringImpl>* m_ptr1; + const RefPtr<StringImpl>* m_ptr2; +}; + +TEST(MemoryInstrumentationTest, refPtrPtr) +{ + RefPtr<StringImpl> refPtr; + TwoPointersToRefPtr root(refPtr); + VisitedObjects visitedObjects; + MemoryInstrumentationImpl impl(visitedObjects); + impl.addRootObject(root); + EXPECT_EQ(sizeof(RefPtr<StringImpl>), impl.reportedSizeForAllTypes()); + EXPECT_EQ(1, visitedObjects.size()); +} + +class TwoPointersToOwnPtr { +public: + TwoPointersToOwnPtr(const OwnPtr<NotInstrumented>& value) : m_ptr1(&value), m_ptr2(&value) { } + void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const + { + MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::DOM); + info.addMember(m_ptr1); + info.addMember(m_ptr2); + } + + const OwnPtr<NotInstrumented>* m_ptr1; + const OwnPtr<NotInstrumented>* m_ptr2; +}; + +TEST(MemoryInstrumentationTest, ownPtrPtr) +{ + OwnPtr<NotInstrumented> ownPtr; + TwoPointersToOwnPtr root(ownPtr); + VisitedObjects visitedObjects; + MemoryInstrumentationImpl impl(visitedObjects); + impl.addRootObject(root); + EXPECT_EQ(sizeof(OwnPtr<NotInstrumented>), impl.reportedSizeForAllTypes()); + EXPECT_EQ(1, visitedObjects.size()); +} + +template<typename T> +class InstrumentedTemplate { +public: + template<typename V> + InstrumentedTemplate(const V& value) : m_value(value) { } + + template<typename MemoryObjectInfo> + void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const + { + typename MemoryObjectInfo::ClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::DOM); + info.addMember(m_value); + } + + T m_value; +}; + +TEST(MemoryInstrumentationTest, detectReportMemoryUsageMethod) +{ + { + VisitedObjects visitedObjects; + MemoryInstrumentationImpl impl(visitedObjects); + + OwnPtr<InstrumentedTemplate<String> > value = adoptPtr(new InstrumentedTemplate<String>("")); + InstrumentedOwner<InstrumentedTemplate<String>* > root(value.get()); + impl.addRootObject(root); + EXPECT_EQ(sizeof(InstrumentedTemplate<String>) + sizeof(StringImpl), impl.reportedSizeForAllTypes()); + // FIXME: it is failing on Chromium Canary bots but works fine locally. + // EXPECT_EQ(2, visitedObjects.size()); + } + { + VisitedObjects visitedObjects; + MemoryInstrumentationImpl impl(visitedObjects); + + OwnPtr<InstrumentedTemplate<NotInstrumented> > value = adoptPtr(new InstrumentedTemplate<NotInstrumented>("")); + InstrumentedOwner<InstrumentedTemplate<NotInstrumented>* > root(value.get()); + impl.addRootObject(root); + EXPECT_EQ(sizeof(InstrumentedTemplate<NotInstrumented>), impl.reportedSizeForAllTypes()); + EXPECT_EQ(1, visitedObjects.size()); + } +} + } // namespace diff --git a/Source/WebKit/chromium/tests/RunAllTests.cpp b/Source/WebKit/chromium/tests/RunAllTests.cpp index 78fd7da3d..be4c7db29 100644 --- a/Source/WebKit/chromium/tests/RunAllTests.cpp +++ b/Source/WebKit/chromium/tests/RunAllTests.cpp @@ -43,6 +43,10 @@ #include "WebUnitTests.h" #endif +#if defined(OS_ANDROID) +#include "ForwardIOStreamsAndroid.h" +#endif + #include <gmock/gmock.h> // TestSuite must be created before SetUpTestEnvironment so it performs @@ -59,6 +63,9 @@ int main(int argc, char** argv) WebKit::DeleteTestSuite(); #else ::testing::InitGoogleMock(&argc, argv); +#if defined(OS_ANDROID) + WebKit::maybeInitIOStreamForwardingForAndroid(&argc, &argv); +#endif TestSuite testSuite(argc, argv); webkit_support::SetUpTestEnvironmentForUnitTests(); int result = testSuite.Run(); diff --git a/Source/WebKit/mac/ChangeLog b/Source/WebKit/mac/ChangeLog index 7d289c069..8ad470cfc 100644 --- a/Source/WebKit/mac/ChangeLog +++ b/Source/WebKit/mac/ChangeLog @@ -1,3 +1,38 @@ +2012-09-17 Dan Bernstein <mitz@apple.com> + + <rdar://problem/12316935> [mac WebKit1]: -[WebView _setPaginationBehavesLikeColumns:] is a no-op + https://bugs.webkit.org/show_bug.cgi?id=96971 + + Reviewed by Sam Weinig. + + * WebView/WebView.mm: + (-[WebView _setPaginationBehavesLikeColumns:]): Added a call to setPagination(). + +2012-09-14 Adam Barth <abarth@webkit.org> + + Remove webkitPostMessage + https://bugs.webkit.org/show_bug.cgi?id=96577 + + Reviewed by Ojan Vafai. + + Add ENABLE_LEGACY_VENDOR_PREFIXES flag. + + * Configurations/FeatureDefines.xcconfig: + +2012-09-14 Beth Dakin <bdakin@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=96688 + Put position:fixed elements in their own layers and allow them to + create a stacking context + -and corresponding- + <rdar://problem/11467961> + + Reviewed by Simon Fraser. + + Enable these settings in WK1 too for consistency. + * WebView/WebView.mm: + (-[WebView _preferencesChanged:]): + 2012-09-13 Sheriff Bot <webkit.review.bot@gmail.com> Unreviewed, rolling out r128552. diff --git a/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig b/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig index 6a674085e..cd9ca6ded 100644 --- a/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig +++ b/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig @@ -96,6 +96,7 @@ ENABLE_LEGACY_NOTIFICATIONS_macosx = $(ENABLE_LEGACY_NOTIFICATIONS_macosx_$(TARG ENABLE_LEGACY_NOTIFICATIONS_macosx_1070 = ; ENABLE_LEGACY_NOTIFICATIONS_macosx_1080 = ENABLE_LEGACY_NOTIFICATIONS; ENABLE_LEGACY_NOTIFICATIONS_macosx_1090 = ENABLE_LEGACY_NOTIFICATIONS; +ENABLE_LEGACY_VENDOR_PREFIXES = ENABLE_LEGACY_VENDOR_PREFIXES; ENABLE_LINK_PREFETCH = ; ENABLE_LINK_PRERENDER = ; ENABLE_MATHML = ENABLE_MATHML; @@ -140,4 +141,4 @@ ENABLE_WIDGET_REGION_macosx = ENABLE_WIDGET_REGION; ENABLE_WORKERS = ENABLE_WORKERS; ENABLE_XSLT = ENABLE_XSLT; -FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ANIMATION_API) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_HIERARCHIES) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHADERS) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_STICKY_POSITION) $(ENABLE_CSS_VARIABLES) $(ENABLE_CSS3_TEXT_DECORATION) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIALOG_ELEMENT) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_FILE_SYSTEM) $(ENABLE_FILTERS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IFRAME_SEAMLESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LINK_PREFETCH) $(ENABLE_LINK_PRERENDER) $(ENABLE_MATHML) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MICRODATA) $(ENABLE_MUTATION_OBSERVERS) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PROGRESS_ELEMENT) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHADOW_DOM) $(ENABLE_SHARED_WORKERS) $(ENABLE_SQL_DATABASE) $(ENABLE_STYLE_SCOPED) $(ENABLE_SVG) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TEXT_NOTIFICATIONS_ONLY) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_UNDO_MANAGER) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WIDGET_REGION) $(ENABLE_WORKERS) $(ENABLE_XSLT); +FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ANIMATION_API) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_HIERARCHIES) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHADERS) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_STICKY_POSITION) $(ENABLE_CSS_VARIABLES) $(ENABLE_CSS3_TEXT_DECORATION) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIALOG_ELEMENT) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_FILE_SYSTEM) $(ENABLE_FILTERS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IFRAME_SEAMLESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LINK_PREFETCH) $(ENABLE_LINK_PRERENDER) $(ENABLE_MATHML) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MICRODATA) $(ENABLE_MUTATION_OBSERVERS) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PROGRESS_ELEMENT) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHADOW_DOM) $(ENABLE_SHARED_WORKERS) $(ENABLE_SQL_DATABASE) $(ENABLE_STYLE_SCOPED) $(ENABLE_SVG) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TEXT_NOTIFICATIONS_ONLY) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_UNDO_MANAGER) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WIDGET_REGION) $(ENABLE_WORKERS) $(ENABLE_XSLT); diff --git a/Source/WebKit/mac/Configurations/Version.xcconfig b/Source/WebKit/mac/Configurations/Version.xcconfig index d1bed77b3..179e74f7a 100644 --- a/Source/WebKit/mac/Configurations/Version.xcconfig +++ b/Source/WebKit/mac/Configurations/Version.xcconfig @@ -22,7 +22,7 @@ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. MAJOR_VERSION = 537; -MINOR_VERSION = 10; +MINOR_VERSION = 11; TINY_VERSION = 0; FULL_VERSION = $(MAJOR_VERSION).$(MINOR_VERSION); diff --git a/Source/WebKit/mac/WebView/WebView.mm b/Source/WebKit/mac/WebView/WebView.mm index 7b8412cfe..e0ca33284 100644 --- a/Source/WebKit/mac/WebView/WebView.mm +++ b/Source/WebKit/mac/WebView/WebView.mm @@ -1547,6 +1547,10 @@ static bool needsSelfRetainWhileLoadingQuirk() settings->setRequestAnimationFrameEnabled([preferences requestAnimationFrameEnabled]); settings->setNeedsDidFinishLoadOrderQuirk(needsDidFinishLoadOrderQuirk()); settings->setDiagnosticLoggingEnabled([preferences diagnosticLoggingEnabled]); + + // We have enabled this setting in WebKit2 for the sake of some ScrollingCoordinator work. + // To avoid possible rendering differences, we should enable it for WebKit1 too. + settings->setFixedPositionCreatesStackingContext(true); NSTimeInterval timeout = [preferences incrementalRenderingSuppressionTimeoutInSeconds]; if (timeout > 0) @@ -2866,6 +2870,8 @@ static PassOwnPtr<Vector<String> > toStringVector(NSArray* patterns) Pagination pagination = page->pagination(); pagination.behavesLikeColumns = behavesLikeColumns; + + page->setPagination(pagination); } - (BOOL)_paginationBehavesLikeColumns diff --git a/Source/WebKit/qt/ChangeLog b/Source/WebKit/qt/ChangeLog index 53a092b85..874c99dee 100644 --- a/Source/WebKit/qt/ChangeLog +++ b/Source/WebKit/qt/ChangeLog @@ -1,3 +1,40 @@ +2012-09-17 Leo Franchi <lfranchi@kde.org> + + [Qt] Inspector WebSocket backend protocol update + https://bugs.webkit.org/show_bug.cgi?id=77031 + + Also adds support for multi-frame messages and non-text messages. + Thanks to Jocelyn Turcotte for most of the WebSocket update code! + + Reviewed by Simon Hausmann. + + * WebCoreSupport/InspectorServerQt.cpp: + (WebCore): + (WebCore::generateWebSocketChallengeResponse): + (WebCore::InspectorServerRequestHandlerQt::tcpReadyRead): + (WebCore::InspectorServerRequestHandlerQt::webSocketSend): + (WebCore::applyMask): + (WebCore::InspectorServerRequestHandlerQt::webSocketReadyRead): + * WebCoreSupport/InspectorServerQt.h: + (InspectorServerRequestHandlerQt): + +2012-09-15 Pierre Rossi <pierre.rossi@gmail.com> + + [Qt] QDoc fixes for Qt 5 documentation + https://bugs.webkit.org/show_bug.cgi?id=96796 + + Reviewed by Simon Hausmann. + + Produce fewer warnings and a better documentation. + Having two QML modules providing a WebView component is a bit too much for poor old qdoc to + cope with (or would require a lot of painful disambiguation by hand). Since the plan is to have + QDeclarativeWebView living in the qtquick1 module, we can already take it out of the + documentation generation for now. + + * declarative/qdeclarativewebview.cpp: s/qmlclass/qmltype/ out of principle + * docs/qtwebkit.qdocconf: Remove the \i alias that caused a warning. Use *.h as headers suffix, not sources. + Also remove QDeclarativeWebView from the documentation. + 2012-09-13 Lauro Neto <lauro.neto@openbossa.org> [Qt][WK2] fast/forms/access-key-for-all-elements.html fails diff --git a/Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp b/Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp index 14f5dd734..65bbad0f0 100644 --- a/Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp +++ b/Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp @@ -34,51 +34,26 @@ #include <QUrl> #include <QWidget> #include <qendian.h> -#include <wtf/MD5.h> +#include <wtf/SHA1.h> +#include <wtf/text/Base64.h> #include <wtf/text/CString.h> namespace WebCore { /*! - Computes the WebSocket handshake response given the two challenge numbers and key3. + Computes the WebSocket handshake response given the input key */ -static void generateWebSocketChallengeResponse(uint32_t number1, uint32_t number2, const unsigned char key3[8], unsigned char response[16]) +static QByteArray generateWebSocketChallengeResponse(const QByteArray& key) { - uint8_t challenge[16]; - qToBigEndian<qint32>(number1, &challenge[0]); - qToBigEndian<qint32>(number2, &challenge[4]); - memcpy(&challenge[8], key3, 8); - MD5 md5; - md5.addBytes(challenge, sizeof(challenge)); - Vector<uint8_t, 16> digest; - md5.checksum(digest); - memcpy(response, digest.data(), 16); -} - -/*! - Parses and returns a WebSocket challenge number according to the - method specified in the WebSocket protocol. - - The field contains numeric digits interspersed with spaces and - non-numeric digits. The protocol ignores the characters that are - neither digits nor spaces. The digits are concatenated and - interpreted as a long int. The result is this number divided by - the number of spaces. - */ -static quint32 parseWebSocketChallengeNumber(QString field) -{ - QString nString; - int numSpaces = 0; - for (int i = 0; i < field.size(); i++) { - QChar c = field[i]; - if (c == QLatin1Char(' ')) - numSpaces++; - else if ((c >= QLatin1Char('0')) && (c <= QLatin1Char('9'))) - nString.append(c); - } - quint32 num = nString.toULong(); - quint32 result = (numSpaces ? (num / numSpaces) : num); - return result; + SHA1 sha1; + Vector<uint8_t, 20> digest; + Vector<char> encoded; + QByteArray toHash("258EAFA5-E914-47DA-95CA-C5AB0DC85B11"); + toHash.prepend(key); + sha1.addBytes((uint8_t*)toHash.data(), toHash.size()); + sha1.computeHash(digest); + base64Encode((char*)digest.data(), digest.size(), encoded); + return QByteArray(encoded.data(), encoded.size()); } static InspectorServerQt* s_inspectorServer; @@ -192,7 +167,7 @@ void InspectorServerRequestHandlerQt::tcpReadyRead() m_path = header.path(); m_contentType = header.contentType().toLatin1(); m_contentLength = header.contentLength(); - if (header.hasKey(QLatin1String("Upgrade")) && (header.value(QLatin1String("Upgrade")) == QLatin1String("WebSocket"))) + if (header.hasKey(QLatin1String("Upgrade")) && (header.value(QLatin1String("Upgrade")) == QLatin1String("websocket"))) isWebSocket = true; m_data.clear(); @@ -211,23 +186,14 @@ void InspectorServerRequestHandlerQt::tcpReadyRead() m_tcpConnection->disconnect(SIGNAL(readyRead())); connect(m_tcpConnection, SIGNAL(readyRead()), SLOT(webSocketReadyRead()), Qt::QueuedConnection); - QByteArray key3 = m_tcpConnection->read(8); - - quint32 number1 = parseWebSocketChallengeNumber(header.value(QLatin1String("Sec-WebSocket-Key1"))); - quint32 number2 = parseWebSocketChallengeNumber(header.value(QLatin1String("Sec-WebSocket-Key2"))); - - char responseData[16]; - generateWebSocketChallengeResponse(number1, number2, (unsigned char*)key3.data(), (unsigned char*)responseData); - QByteArray response(responseData, sizeof(responseData)); + QByteArray key = header.value(QLatin1String("Sec-WebSocket-Key")).toLatin1(); + QString accept = QString::fromLatin1(generateWebSocketChallengeResponse(key)); WebKit::QHttpResponseHeader responseHeader(101, QLatin1String("WebSocket Protocol Handshake"), 1, 1); responseHeader.setValue(QLatin1String("Upgrade"), header.value(QLatin1String("Upgrade"))); responseHeader.setValue(QLatin1String("Connection"), header.value(QLatin1String("Connection"))); - responseHeader.setValue(QLatin1String("Sec-WebSocket-Origin"), header.value(QLatin1String("Origin"))); - responseHeader.setValue(QLatin1String("Sec-WebSocket-Location"), (QLatin1String("ws://") + header.value(QLatin1String("Host")) + m_path)); - responseHeader.setContentLength(response.size()); + responseHeader.setValue(QLatin1String("Sec-WebSocket-Accept"), accept); m_tcpConnection->write(responseHeader.toString().toLatin1()); - m_tcpConnection->write(response); m_tcpConnection->flush(); if ((words.size() == 4) @@ -306,26 +272,43 @@ void InspectorServerRequestHandlerQt::tcpConnectionDisconnected() m_tcpConnection = 0; } -int InspectorServerRequestHandlerQt::webSocketSend(QByteArray payload) +int InspectorServerRequestHandlerQt::webSocketSend(const QString& message) { - Q_ASSERT(m_tcpConnection); - m_tcpConnection->putChar(0x00); - int nBytes = m_tcpConnection->write(payload); - m_tcpConnection->putChar(0xFF); - m_tcpConnection->flush(); - return nBytes; + QByteArray payload = message.toUtf8(); + return webSocketSend(payload.data(), payload.size()); } int InspectorServerRequestHandlerQt::webSocketSend(const char* data, size_t length) { Q_ASSERT(m_tcpConnection); - m_tcpConnection->putChar(0x00); + m_tcpConnection->putChar(0x81); + if (length <= 125) + m_tcpConnection->putChar(static_cast<uint8_t>(length)); + else if (length <= pow(2, 16)) { + m_tcpConnection->putChar(126); + quint16 length16 = qToBigEndian<quint16>(static_cast<quint16>(length)); + m_tcpConnection->write(reinterpret_cast<char*>(&length16), 2); + } else { + m_tcpConnection->putChar(127); + quint64 length64 = qToBigEndian<quint64>(static_cast<quint64>(length)); + m_tcpConnection->write(reinterpret_cast<char*>(&length64), 8); + } int nBytes = m_tcpConnection->write(data, length); - m_tcpConnection->putChar(0xFF); m_tcpConnection->flush(); return nBytes; } +static QByteArray applyMask(const QByteArray& payload, const QByteArray& maskingKey) +{ + Q_ASSERT(maskingKey.size() == 4); + QByteArray unmaskedPayload; + for (int i = 0; i < payload.size(); ++i) { + char unmaskedByte = payload[i] ^ maskingKey[i % 4]; + unmaskedPayload.append(unmaskedByte); + } + return unmaskedPayload; +} + void InspectorServerRequestHandlerQt::webSocketReadyRead() { Q_ASSERT(m_tcpConnection); @@ -333,33 +316,43 @@ void InspectorServerRequestHandlerQt::webSocketReadyRead() return; QByteArray content = m_tcpConnection->read(m_tcpConnection->bytesAvailable()); m_data.append(content); - while (m_data.size() > 0) { - // first byte in websocket frame should be 0 - Q_ASSERT(!m_data[0]); - - // Start of WebSocket frame is indicated by 0 - if (m_data[0]) { - qCritical() << "webSocketReadyRead: unknown frame type" << m_data[0]; - m_data.clear(); - m_tcpConnection->close(); - return; + while (m_data.size() > 0) { + const bool isMasked = m_data[1] & 0x80; + quint64 payloadLen = m_data[1] & 0x7F; + int pos = 2; + + if (payloadLen == 126) { + payloadLen = qFromBigEndian<quint16>(*reinterpret_cast<quint16*>(m_data.mid(pos, 2).data())); + pos = 4; + } else if (payloadLen == 127) { + payloadLen = qFromBigEndian<quint64>(*reinterpret_cast<quint64*>(m_data.mid(pos, 8).data())); + pos = 8; } - - // End of WebSocket frame indicated by 0xff. - int pos = m_data.indexOf(0xff, 1); - if (pos < 1) - return; - - // After above checks, length will be >= 0. - size_t length = pos - 1; - if (length <= 0) - return; - - QByteArray payload = m_data.mid(1, length); - + + QByteArray payload; + if (isMasked) { + QByteArray maskingKey = m_data.mid(pos, 4); + pos += 4; + payload = applyMask(m_data.mid(pos, payloadLen), maskingKey); + } else + payload = m_data.mid(pos, payloadLen); + + // Handle fragmentation + if (!(m_data[0] & 0x80)) { // Non-last fragmented payload + m_fragmentedPayload.append(payload); + m_data = m_data.mid(pos + payloadLen); + continue; + } + + if (!(m_data[0] & 0x0F)) { // Last fragment + m_fragmentedPayload.append(payload); + payload = m_fragmentedPayload; + m_fragmentedPayload.clear(); + } + // Remove this WebSocket message from m_data (payload, start-of-frame byte, end-of-frame byte). // Truncate data before delivering message in case of re-entrancy. - m_data = m_data.mid(length + 2); + m_data = m_data.mid(pos + payloadLen); #if ENABLE(INSPECTOR) if (m_inspectorClient) { diff --git a/Source/WebKit/qt/WebCoreSupport/InspectorServerQt.h b/Source/WebKit/qt/WebCoreSupport/InspectorServerQt.h index b130b0a0d..b0bb0c79d 100644 --- a/Source/WebKit/qt/WebCoreSupport/InspectorServerQt.h +++ b/Source/WebKit/qt/WebCoreSupport/InspectorServerQt.h @@ -72,7 +72,7 @@ public: InspectorServerRequestHandlerQt(QTcpSocket *tcpConnection, InspectorServerQt *server); virtual ~InspectorServerRequestHandlerQt(); - virtual int webSocketSend(QByteArray payload); + virtual int webSocketSend(const QString& message); virtual int webSocketSend(const char *payload, size_t length); private Q_SLOTS: @@ -89,6 +89,7 @@ private: int m_contentLength; bool m_endOfHeaders; QByteArray m_data; + QByteArray m_fragmentedPayload; InspectorClientQt* m_inspectorClient; void handleInspectorRequest(QStringList words); diff --git a/Source/WebKit/qt/declarative/qdeclarativewebview.cpp b/Source/WebKit/qt/declarative/qdeclarativewebview.cpp index d184c087e..cdfcf53b8 100644 --- a/Source/WebKit/qt/declarative/qdeclarativewebview.cpp +++ b/Source/WebKit/qt/declarative/qdeclarativewebview.cpp @@ -152,7 +152,9 @@ bool GraphicsWebView::sceneEvent(QEvent *event) } /*! - \qmlclass WebView QDeclarativeWebView + \qmltype WebView + \instantiates QDeclarativeWebView + \inqmlmodule QtWebKit 1.0 \ingroup qml-view-elements \since 4.7 \brief The WebView item allows you to add Web content to a canvas. diff --git a/Source/WebKit/qt/docs/qtwebkit.qdocconf b/Source/WebKit/qt/docs/qtwebkit.qdocconf index 23d277001..adf5cbf2f 100644 --- a/Source/WebKit/qt/docs/qtwebkit.qdocconf +++ b/Source/WebKit/qt/docs/qtwebkit.qdocconf @@ -3,11 +3,12 @@ project = qtwebkit description = "Qt WebKit API Documentation" -headerdirs = $SRCDIR/WebKit/qt/Api $SRCDIR/WebKit/qt/declarative $SRCDIR/WebKit2/UIProcess/API/qt -sourcedirs = $SRCDIR/WebKit/qt/Api $SRCDIR/WebKit/qt/docs $SRCDIR/Source/JavaScriptCore/qt/api $SRCDIR/WebKit/qt/declarative $SRCDIR/WebKit2/UIProcess/API/qt +headerdirs = $SRCDIR/WebKit/qt/Api $SRCDIR/WebKit2/UIProcess/API/qt +sourcedirs = $SRCDIR/WebKit/qt/Api $SRCDIR/WebKit/qt/docs $SRCDIR/Source/JavaScriptCore/qt/api $SRCDIR/WebKit2/UIProcess/API/qt outputdir = $OUTPUT_DIR/doc/html outputformats = HTML -sources.fileextensions = "*.cpp *.doc *.qdoc *.h" +sources.fileextensions = "*.cpp *.doc *.qdoc" +headers.fileextensions = "*.h" exampledirs = $SRCDIR/WebKit/qt/docs imagedirs = $SRCDIR/WebKit/qt/docs @@ -43,7 +44,6 @@ macro.mdash.HTML = "—" # compat.qdocconf -alias.i = e alias.include = input macro.0 = "\\\\0" diff --git a/Source/WebKit/win/ChangeLog b/Source/WebKit/win/ChangeLog index 14a9396d4..73b494a9f 100644 --- a/Source/WebKit/win/ChangeLog +++ b/Source/WebKit/win/ChangeLog @@ -1,3 +1,81 @@ +2012-09-17 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r128809. + http://trac.webkit.org/changeset/128809 + https://bugs.webkit.org/show_bug.cgi?id=96958 + + Broke the Windows build. (Requested by andersca on #webkit). + + * DefaultPolicyDelegate.cpp: + (DefaultPolicyDelegate::decidePolicyForNavigationAction): + (DefaultPolicyDelegate::decidePolicyForMIMEType): + (DefaultPolicyDelegate::unableToImplementPolicyWithError): + * MarshallingHelpers.cpp: + (MarshallingHelpers::KURLToBSTR): + (MarshallingHelpers::CFStringRefToBSTR): + (MarshallingHelpers::stringArrayToSafeArray): + (MarshallingHelpers::safeArrayToStringArray): + * WebCoreSupport/WebChromeClient.cpp: + (WebChromeClient::runJavaScriptPrompt): + * WebCoreSupport/WebEditorClient.cpp: + (WebEditorClient::checkGrammarOfString): + (WebEditorClient::getGuessesForWord): + * WebFrame.cpp: + (WebFrame::canProvideDocumentSource): + * WebHistory.cpp: + (WebHistory::removeItem): + (WebHistory::addItem): + * WebIconDatabase.cpp: + (WebIconDatabase::startUpIconDatabase): + * WebNotificationCenter.cpp: + (WebNotificationCenter::postNotification): + * WebPreferences.cpp: + (WebPreferences::setStringValue): + * WebView.cpp: + (PreferencesChangedOrRemovedObserver::onNotify): + (WebView::close): + (WebView::canShowMIMEType): + (WebView::initWithFrame): + (WebView::setApplicationNameForUserAgent): + (WebView::setCustomUserAgent): + (WebView::userAgentForURL): + (WebView::setCustomTextEncodingName): + (WebView::customTextEncodingName): + (WebView::setPreferences): + (WebView::searchFor): + (WebView::executeCoreCommandByName): + (WebView::markAllMatchesForText): + (WebView::setGroupName): + (WebView::registerURLSchemeAsLocal): + (WebView::replaceSelectionWithText): + (WebView::onNotify): + (WebView::notifyPreferencesChanged): + (WebView::MIMETypeForExtension): + (WebView::standardUserAgentWithApplicationName): + (WebView::addAdditionalPluginDirectory): + (WebView::registerEmbeddedViewMIMEType): + (toString): + (toKURL): + (WebView::addOriginAccessWhitelistEntry): + (WebView::removeOriginAccessWhitelistEntry): + (WebView::geolocationDidFailWithError): + (WebView::setDomainRelaxationForbiddenForURLScheme): + (WebView::setCompositionForTesting): + (WebView::confirmCompositionForTesting): + +2012-09-16 Mark Lam <mark.lam@apple.com> + + Added MSVC project changes to enable building the llint. + https://bugs.webkit.org/show_bug.cgi?id=96175. + + Reviewed by Geoff Garen. + + This only adds the ability to build the llint, but currently, only the + C++ backend is supported. By default, the Windows port will remain + running with the baseline JIT. The llint will not be enabled. + + * WebKit.vcproj/WebKit.sln: + 2012-09-13 Brent Fulgham <bfulgham@webkit.org> [WinCairo] Unreviewed build fix. diff --git a/Source/WebKit/win/WebKit.vcproj/WebKit.sln b/Source/WebKit/win/WebKit.vcproj/WebKit.sln index ab47a727f..0723b2e10 100644 --- a/Source/WebKit/win/WebKit.vcproj/WebKit.sln +++ b/Source/WebKit/win/WebKit.vcproj/WebKit.sln @@ -3,6 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 9.00 # Visual Studio 2005
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JavaScriptCore", "..\..\..\JavaScriptCore\JavaScriptCore.vcproj\JavaScriptCore\JavaScriptCore.vcproj", "{011D10F1-B656-4A1B-A0C3-3842F02122C5}"
ProjectSection(ProjectDependencies) = postProject
+ {9221744B-5715-4F56-9590-42F7AB23DD8B} = {9221744B-5715-4F56-9590-42F7AB23DD8B}
{4FF5BA11-59EC-4C24-8F52-F235C2E7D43A} = {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}
EndProjectSection
EndProject
@@ -190,6 +191,23 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WTF", "WTF", "{A671AE22-FBC EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WTFGenerated", "..\..\..\WTF\WTF.vcproj\WTFGenerated.vcproj", "{5AE5F5E4-782D-4F63-B4D7-3977B52B9950}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LLIntDesiredOffsets", "..\..\..\JavaScriptCore\JavaScriptCore.vcproj\LLIntDesiredOffsets\LLIntDesiredOffsets.vcproj", "{877150A0-41B3-4730-9D98-1B8298098B14}"
+ ProjectSection(ProjectDependencies) = postProject
+ {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A} = {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}
+ {AA8A5A85-592B-4357-BC60-E0E91E026AF6} = {AA8A5A85-592B-4357-BC60-E0E91E026AF6}
+ {5AE5F5E4-782D-4F63-B4D7-3977B52B9950} = {5AE5F5E4-782D-4F63-B4D7-3977B52B9950}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LLIntOffsetsExtractor", "..\..\..\JavaScriptCore\JavaScriptCore.vcproj\LLIntOffsetsExtractor\LLIntOffsetsExtractor.vcproj", "{D595E3F6-24F2-4C60-935C-95D50C6B3E96}"
+ ProjectSection(ProjectDependencies) = postProject
+ {877150A0-41B3-4730-9D98-1B8298098B14} = {877150A0-41B3-4730-9D98-1B8298098B14}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LLIntAssembly", "..\..\..\JavaScriptCore\JavaScriptCore.vcproj\LLIntAssembly\LLIntAssembly.vcproj", "{9221744B-5715-4F56-9590-42F7AB23DD8B}"
+ ProjectSection(ProjectDependencies) = postProject
+ {D595E3F6-24F2-4C60-935C-95D50C6B3E96} = {D595E3F6-24F2-4C60-935C-95D50C6B3E96}
+ EndProjectSection
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug_All|Win32 = Debug_All|Win32
@@ -640,6 +658,9 @@ Global {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A} = {557FA164-0E39-4DEC-B66C-8795C8E52399}
{1AFD081F-1AC7-4A97-8EFA-6DF97761A3A2} = {557FA164-0E39-4DEC-B66C-8795C8E52399}
{14C94979-1ED3-4E1D-9B55-A80FCF4677D0} = {557FA164-0E39-4DEC-B66C-8795C8E52399}
+ {877150A0-41B3-4730-9D98-1B8298098B14} = {557FA164-0E39-4DEC-B66C-8795C8E52399}
+ {D595E3F6-24F2-4C60-935C-95D50C6B3E96} = {557FA164-0E39-4DEC-B66C-8795C8E52399}
+ {9221744B-5715-4F56-9590-42F7AB23DD8B} = {557FA164-0E39-4DEC-B66C-8795C8E52399}
{1C16337B-ACF3-4D03-AA90-851C5B5EADA6} = {63FB6F8A-C601-43E3-BD16-A00A465C2CB6}
{0A324352-B3B6-496C-9E5B-4C7E923E628B} = {63FB6F8A-C601-43E3-BD16-A00A465C2CB6}
{E498CA9D-3BD2-4D52-8E37-C8DC76526325} = {63FB6F8A-C601-43E3-BD16-A00A465C2CB6}
|
