2012-10-02  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12407920> Need to keep track of messages posted to injected bundle before creating a page
        https://bugs.webkit.org/show_bug.cgi?id=98210

        Reviewed by Anders Carlsson.

        Restore the pending message functionality, but only for shared process mode, and
        under a different name.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::setProcessModel):
        (WebKit::WebContext::createNewWebProcess):
        (WebKit::WebContext::postMessageToInjectedBundle):
        * UIProcess/WebContext.h:

2012-10-02  Adrian Perez de Castro  <aperez@igalia.com>

        Unix plugin process: xErrorString does not need to be defined in release builds
        https://bugs.webkit.org/show_bug.cgi?id=98174

        Reviewed by Alexey Proskuryakov.

        The static xErrorString variable is used only for logging purposes,
        so it causes a warning when doing relese builds (or, in general,
        when logging is enabled). This disables building in the string
        when LOG_DISABLED is defined.

        Also, made the more constant by changing the "const char*" type
        to "const char[]".

        * PluginProcess/unix/PluginProcessMainUnix.cpp:
        (WebKit):

2012-10-02  Anders Carlsson  <andersca@apple.com>

        Fix crash in WebGeolocationManager constructor.

        Defer adding the location manager until there actually is a connection.

        * WebProcess/Geolocation/WebGeolocationManager.cpp:
        (WebKit::WebGeolocationManager::WebGeolocationManager):
        (WebKit::WebGeolocationManager::registerWebPage):
        * WebProcess/Geolocation/WebGeolocationManager.h:
        (WebGeolocationManager):

2012-10-02  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * WebProcess/Geolocation/WebGeolocationManager.cpp:
        (WebKit::WebGeolocationManager::WebGeolocationManager):

2012-10-02  Anders Carlsson  <andersca@apple.com>

        Fix infinite recursion inside WebProcess constructor
        https://bugs.webkit.org/show_bug.cgi?id=98206

        Reviewed by Brian Weinstein.

        Don't call WebProcess::shared from the WebGeolocationManager constructor since it is invoked from the WebProcess constructor.

        * WebProcess/Geolocation/WebGeolocationManager.cpp:
        (WebKit::WebGeolocationManager::WebGeolocationManager):

2012-10-02  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [WK2] Move some tiled backing store/viewport functions from Qt to generic WebKit2 sources
        https://bugs.webkit.org/show_bug.cgi?id=98199

        Reviewed by Noam Rosenthal.

        Move commitPageTransitionViewport from Qt to WebKit2.

        * UIProcess/WebPageProxy.cpp:
        (WebKit):
        (WebKit::WebPageProxy::commitPageTransitionViewport):
        * UIProcess/qt/WebPageProxyQt.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit):
        (WebKit::WebPage::commitPageTransitionViewport):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/qt/WebPageQt.cpp:

2012-10-02  Anders Carlsson  <andersca@apple.com>

        Build fixes.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::beginModal):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::getPluginProcessSerialNumber):
        (WebKit::PluginProcessProxy::makePluginProcessTheFrontProcess):
        (WebKit::PluginProcessProxy::makeUIProcessTheFrontProcess):
        (WebKit::PluginProcessProxy::exitFullscreen):

2012-10-02  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12407139> WebKit2 should provide API that returns all pages in the same process as a given page
        https://bugs.webkit.org/show_bug.cgi?id=98193

        Reviewed by Sam Weinig.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageCopyRelatedPages):
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::relatedPages):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::pages):
        * UIProcess/WebProcessProxy.h:
        Added. This should work once a process has crashed, too.

2012-10-02  Anders Carlsson  <andersca@apple.com>

        Allow LayerTreeHost subclasses to return a custom GraphicsLayerFactory
        https://bugs.webkit.org/show_bug.cgi?id=98179

        Reviewed by Andreas Kling.

        Implement ChromeClient::graphicsLayerFactory and have it call the DrawingArea's graphicsLayerFactory which
        for DrawingAreaImpl then calls down to the layer tree host. Make LayerTreeCoordinator implement GraphicsLayerFactory and
        make it create CoordinatedGraphicsLayers.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::graphicsLayerFactory):
        (WebKit):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::createGraphicsLayer):
        (WebKit):
        (WebKit::LayerTreeCoordinator::graphicsLayerFactory):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):
        * WebProcess/WebPage/DrawingArea.h:
        (WebCore):
        (WebKit::DrawingArea::graphicsLayerFactory):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::graphicsLayerFactory):
        (WebKit):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        (DrawingAreaImpl):
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebCore):
        (WebKit::LayerTreeHost::graphicsLayerFactory):
        (LayerTreeHost):

2012-10-01  Anders Carlsson  <andersca@apple.com>

        Attempt to simplify IPC message dispatching logic in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=98097

        Reviewed by Sam Weinig.

        Move the Connection::MessageReceiver class to its own header file. Add a MessageReceiverMap helper class
        that will be used for dispatching messages based on message class (and eventually destination ID).

        Convert AuthenticationManager and WebGeolocationManager over to this new mechanism.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        Add new files.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::dispatchMessage):
        Check with the message receiver map first before calling Connection::Client::didReceiveMessage.

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::addMessageReceiver):
        Call through to the message receiver map.

        * Platform/CoreIPC/MessageID.h:
        (CoreIPC::MessageID::messageClass):
        Rename MessageClassReserved to MessageClassInvalid.

        (MessageID):
        * Platform/CoreIPC/MessageReceiver.h:
        Move MessageReceiver from Connection.h to its own file.

        * Platform/CoreIPC/MessageReceiverMap.cpp:
        New helper class.

        (CoreIPC::MessageReceiverMap::addMessageReceiver):
        Add the receiver to the map of receivers.

        (CoreIPC::MessageReceiverMap::dispatchMessage):
        Check if we have any registered receivers for this message class.

        * Platform/CoreIPC/MessageReceiverMap.h:
        New file.

        * Target.pri:
        Add new files.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new files.

        * WebProcess/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::AuthenticationManager):
        * WebProcess/Authentication/AuthenticationManager.h:
        (AuthenticationManager):
        Register the authentication manager as a message receiver.

        * WebProcess/Geolocation/WebGeolocationManager.cpp:
        (WebKit::WebGeolocationManager::WebGeolocationManager):
        * WebProcess/Geolocation/WebGeolocationManager.h:
        (WebGeolocationManager):
        Register the geolocation manager as a message receiver.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage):
        Remove checks for authentication manager and geolocation manager messages.

        * win/WebKit2.vcproj:
        Add new files.

2012-10-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Programs/WebKit2APITests/TestCookieManager fails
        https://bugs.webkit.org/show_bug.cgi?id=98176

        Reviewed by Martin Robinson.

        The problem is that the soup server has a g_assert_not_reached()
        for unknown paths, but know /favicon.icon might be requested.

        * UIProcess/API/gtk/tests/TestCookieManager.cpp:
        (serverCallback): Ignore unknown paths.

2012-10-02  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [WK2] PageViewportControllerClient.h uses WebCore class without declaring them
        https://bugs.webkit.org/show_bug.cgi?id=98070

        Reviewed by Kenneth Rohde Christiansen.

        This patch just add forward declarations for code correctness.

        * UIProcess/PageViewportControllerClient.h:
        (WebCore):

2012-10-02  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        Fix tst_QQuickWebView::scrollRequest after r130029
        https://bugs.webkit.org/show_bug.cgi?id=98045

        Reviewed by Simon Hausmann.

        The test needs to show the window and wait for the loadVisuallyCommitted()
        signal like did in the QML API auto tests.

        * UIProcess/API/qt/tests/qquickwebview/tst_qquickwebview.cpp:
        (tst_QQuickWebView::scrollRequest):
        * UIProcess/API/qt/tests/util.cpp:
        (waitForViewportReady):
        * UIProcess/API/qt/tests/util.h:

2012-10-02  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Use correct gtest macro for testing true/false
        https://bugs.webkit.org/show_bug.cgi?id=98142

        Reviewed by Laszlo Gombos.

        Using EXPECT_EQ(true/false, ...) makes clang trip when it tries to convert
        true/false to a pointer. Tests should use EXPECT_TRUE/FALSE instead.

        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (showPopupMenu):
        (TEST_F):

2012-10-01  Brady Eidson  <beidson@apple.com>

        Remove the Safari 2 -> Safari 3 icon database import code.
        https://bugs.webkit.org/show_bug.cgi?id=98113

        Reviewed by Maciej Stachowiak.

        Nuke the performImport() IconDatabaseClient method.

        * UIProcess/WebIconDatabase.cpp:
        (WebKit):
        * UIProcess/WebIconDatabase.h:
        (WebIconDatabase):

2012-10-01  Christophe Dumez  <christophe.dumez@intel.com>

        Fix compilation warnings
        https://bugs.webkit.org/show_bug.cgi?id=98020

        Reviewed by Gyuyoung Kim.

        Fix compilation warnings related to ewk_view.

        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_feed_touch_event_using_touch_point_list_of_evas):
        (_ewk_view_on_touch_down):
        (_ewk_view_on_touch_up):
        (_ewk_view_on_touch_move):
        * UIProcess/API/efl/ewk_view_ui_client.cpp:
        (exceededDatabaseQuota):

2012-10-01  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK][WK2] Save the download uri as file metadata
        https://bugs.webkit.org/show_bug.cgi?id=98043

        Reviewed by Carlos Garcia Campos.

        gio/gvfs can store file metadata, let's use this to
        store the download uri.

        * WebProcess/Downloads/soup/DownloadSoup.cpp:
        (WebKit::DownloadClient::didReceiveResponse): Save
        the download uri as metadata.

2012-10-01  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] Device pixel ratio lost upon relaunch of the web process
        https://bugs.webkit.org/show_bug.cgi?id=97908

        Reviewed by Jocelyn Turcotte.

        Use setIntrinsicDeviceScaleFactor instead of setCustomDeviceScaleFactor
        when setting the device pixel ratio to make the setting permanent.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::didRelaunchProcess):
        (QQuickWebViewExperimental::setDevicePixelRatio):

2012-09-27  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Fix viewport QML auto tests after the viewport changes
        https://bugs.webkit.org/show_bug.cgi?id=97781

        Reviewed by Simon Hausmann.

        Since the viewport controller has to hold any QML-side viewport updates
        while it applies and render the new requested position, this has the
        effect of blocking all those tests if the view is not visible (thus
        disabling the tile rendering completely in the web process).
        The viewport should be unlocked after the first rendered frame for
        static contents.

        Fix those tests by forcing the QQuickView to be visible and by making
        them wait for the first frame rather than the earlier end of provisional load.

        * UIProcess/API/qt/tests/qmltests/WebView/tst_doubleTapToZoom.qml:
        * UIProcess/API/qt/tests/qmltests/WebView/tst_fitToView.qml:
        * UIProcess/API/qt/tests/qmltests/WebView/tst_wheelEventHandling.qml:
        * UIProcess/API/qt/tests/qmltests/common/TestWebView.qml:

2012-09-27  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Add a loadVisuallyCommitted() signal
        https://bugs.webkit.org/show_bug.cgi?id=97780

        Reviewed by Kenneth Rohde Christiansen.

        This signal is emitted when the first DidRenderFrame message is received from
        the web process after loadCommitted.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::QQuickWebViewPrivate):
        (QQuickWebViewPrivate::loadDidCommit):
        (QQuickWebViewPrivate::setNeedsDisplay):
        * UIProcess/API/qt/qquickwebview_p.h:
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):

2012-09-27  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Move Qt-only related methods from WebPageProxy.cpp to WebPageProxyQt.cpp

        Reviewed by Simon Hausmann.

        * UIProcess/WebPageProxy.cpp:
        * UIProcess/qt/WebPageProxyQt.cpp:
        (WebKit::WebPageProxy::didFindZoomableArea):
        (WebKit):
        (WebKit::WebPageProxy::findZoomableAreaForPoint):
        (WebKit::WebPageProxy::didReceiveMessageFromNavigatorQtObject):
        (WebKit::WebPageProxy::authenticationRequiredRequest):
        (WebKit::WebPageProxy::proxyAuthenticationRequiredRequest):
        (WebKit::WebPageProxy::certificateVerificationRequest):

2012-09-27  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Decide when to apply a scrolled position to the viewport based on the rect covered by the tiles
        https://bugs.webkit.org/show_bug.cgi?id=97777

        Reviewed by Kenneth Rohde Christiansen.

        This patch achieves two things:
        - Apply a short scroll position request directly if we already have rendered tiles
          at this position.
        - Since our visible rect request is asynchronous, the next frame might not always
          be the one covering this position. This will wait for a frame that does to apply it.

        * UIProcess/API/qt/raw/qrawwebview_p_p.h:
        (QRawWebViewPrivate::didRenderFrame):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::didRenderFrame):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:
        * UIProcess/PageClient.h:
        (PageClient):
        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::didCommitLoad):
        (WebKit::PageViewportController::didRenderFrame):
        (WebKit::PageViewportController::pageDidRequestScroll):
        * UIProcess/PageViewportController.h:
        (PageViewportController):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/qt/QtPageClient.cpp:
        (WebKit::QtPageClient::didRenderFrame):
        * UIProcess/qt/QtPageClient.h:
        (QtPageClient):
        * UIProcess/qt/WebPageProxyQt.cpp:
        (WebKit::WebPageProxy::didRenderFrame):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (WebCore::CoordinatedGraphicsLayer::coverRect):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::flushPendingLayerChanges):

2012-09-27  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Delay viewport position, scale and contents size updates until tiles are rendered
        https://bugs.webkit.org/show_bug.cgi?id=97775

        Reviewed by Kenneth Rohde Christiansen.

        A few events from the web process can cause the viewport position or scale to be
        adjusted in the UI process:
        - Scroll position request
        - Viewport attributes (initialScale, minimumScale)
        - Contents size change

        We previously applied those updates directly to the viewport, which would then in turn
        produce a corresponding visible rect request to the web process to render the contents
        at the new position/scale. This could leave the viewport showing the old content, either
        by scaling the tiles, or by showing checkerboard if no contents was rendered at this
        position yet. When the web process was done rendering new tiles, the proper tiles
        were then shown to the user.
        Since many of these updates happen during page load, all producing an iterative adjustment
        to the viewport, this could show sharpness and position jitter until the final rendering
        was done.

        This patch makes those updates go through the PageViewportController first and then to the
        QQuickWebView rather than the other way around, and keep them pending until the
        LayerTreeHostProxy reports that the new tiles are ready to be shown. Since the rendering
        is blocked until the page first layout is done, this apply the modifications to
        the viewport only once when the first frame is ready to be shown.

        * UIProcess/API/qt/qquickwebview.cpp:
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewFlickablePrivate):
        * UIProcess/API/qt/raw/qrawwebview_p_p.h:
        (QRawWebViewPrivate::didRenderFrame):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::didRenderFrame):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:
        * UIProcess/PageClient.h:
        (PageClient):
        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::didCommitLoad):
        (WebKit::PageViewportController::didChangeContentsSize):
        (WebKit::PageViewportController::didRenderFrame):
        (WebKit::PageViewportController::initialViewportReady):
        (WebKit::PageViewportController::pageDidRequestScroll):
        (WebKit::PageViewportController::didChangeContentsVisibility):
        (WebKit::PageViewportController::resumeContent):
        (WebKit::PageViewportController::applyScaleAfterRenderingContents):
        (WebKit):
        (WebKit::PageViewportController::applyPositionAfterRenderingContents):
        (WebKit::PageViewportController::updateMinimumScaleToFit):
        * UIProcess/PageViewportController.h:
        (PageViewportController):
        * UIProcess/PageViewportControllerClient.h:
        (PageViewportControllerClient):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::didChangeContentsSize):
        * UIProcess/qt/PageViewportControllerClientQt.h:
        (PageViewportControllerClientQt):
        * UIProcess/qt/QtPageClient.cpp:
        (WebKit::QtPageClient::didRenderFrame):
        (WebKit):
        (WebKit::QtPageClient::didChangeContentsSize):
        * UIProcess/qt/QtPageClient.h:
        (QtPageClient):
        * UIProcess/qt/QtWebPageLoadClient.cpp:
        (WebKit::QtWebPageLoadClient::didCommitLoad):
        * UIProcess/qt/WebPageProxyQt.cpp:
        (WebKit::WebPageProxy::didRenderFrame):
        (WebKit):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::flushPendingLayerChanges):

2012-09-27  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Wait for the UI process before re-enabling rendering during page load
        https://bugs.webkit.org/show_bug.cgi?id=97773

        Reviewed by Kenneth Rohde Christiansen.

        During page navigation, WebCore might ask asynchronously the UI process to
        scroll to an anchor or restored history position and the UI process will
        return the corresponding visible rect to be rendered by the web process.

        To avoid rendering tiles for the invalidated area by the new page layout at
        the wrong position, we should do an extra message round-trip to the UI
        process before resuming the rendering.
        Assuming that all messages are handled in order by both the web and UI process,
        sending the round-trip request in the web process once we sent all scroll
        requests, contents size and viewport attributes updates and then handling
        the round-trip response, we make sure that final visible rect request have
        been handled already.

        * UIProcess/API/qt/raw/qrawwebview.cpp:
        (QRawWebViewPrivate::pageTransitionViewportReady):
        * UIProcess/API/qt/raw/qrawwebview_p_p.h:
        (QRawWebViewPrivate):
        * UIProcess/PageClient.h:
        (PageClient):
        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::pageTransitionViewportReady):
        (WebKit):
        * UIProcess/PageViewportController.h:
        (PageViewportController):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/qt/QtPageClient.cpp:
        (WebKit::QtPageClient::pageTransitionViewportReady):
        (WebKit):
        * UIProcess/qt/QtPageClient.h:
        (QtPageClient):
        * UIProcess/qt/WebPageProxyQt.cpp:
        (WebKit::WebPageProxy::commitPageTransitionViewport):
        (WebKit):
        (WebKit::WebPageProxy::pageTransitionViewportReady):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::WebFrameLoaderClient):
        (WebKit::WebFrameLoaderClient::dispatchDidLayout):
        (WebKit::WebFrameLoaderClient::frameLoadCompleted):
        (WebKit::WebFrameLoaderClient::provisionalLoadStarted):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        (WebFrameLoaderClient):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didStartPageTransition):
        (WebKit):
        (WebKit::WebPage::didCompletePageTransition):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (WebKit::WebPage::commitPageTransitionViewport):
        (WebKit):

2012-10-01  Alberto Garcia  <agarcia@igalia.com>

        WebPrintOperationGtk destructor should be virtual
        https://bugs.webkit.org/show_bug.cgi?id=98002

        Reviewed by Carlos Garcia Campos.

        WebPrintOperationGtk is an abstract class which can be deleted
        using a pointer to itself, yet its destructor is not virtual.
        Fixes -Wdelete-non-virtual-dtor.

        * WebProcess/WebPage/gtk/WebPrintOperationGtk.h:
        (WebPrintOperationGtk):

2012-09-30  Mario Sanchez Prada  <msanchez@igalia.com>

        [WK2][GTK] Add API to get the favicon for a WebKitWebView
        https://bugs.webkit.org/show_bug.cgi?id=96477

        Reviewed by Carlos Garcia Campos.

        Provide a new simple API to synchronously try to get the favicon
        associated with a WebView, if any, and to keep track of changes on
        it, through a new GObject property.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (_WebKitWebViewPrivate):
        (webkitWebViewIconReadyCallback): Callback to handle the
        'icon-ready' signal coming from WebKitFaviconDatabase.
        (webkitWebViewWatchForChangesInFavicon): Connects to the
        'icon-ready' signal from WebKitFaviconDatabase, to keep track of
        changes in favicons, that must be related to the current view.
        (webkitWebViewDisconnectFaviconDatabaseSignalHandlers):
        Disconnects the handler for 'icon-ready' if needed.
        (webkitWebViewGetProperty): Updated for the new "favicon" property .
        (webkitWebViewFinalize): Disconnect the new signal handler.
        (webkit_web_view_class_init): Definition of the new property.
        (webkitWebViewEmitLoadChanged): Make sure we will be watching for
        changes in the favicon from WEBKIT_LOAD_STARTED on.
        (webkit_web_view_get_favicon): New API funtcion, returning the
        current favicon for the WebView, if any, or NULL otherwise.
        * UIProcess/API/gtk/WebKitWebView.h:

        Internally expose a way to try to get the favicon associated to a
        page URL synchronously, through WebKitFaviconDatabase.

        * UIProcess/API/gtk/WebKitFaviconDatabase.cpp:
        (webkitFaviconDatabaseGetFaviconSync): New internal function, it
        will return either 0 or a valid pointer to a cairo_surface_t.
        * UIProcess/API/gtk/WebKitFaviconDatabasePrivate.h:

        Add unit tests for checking this new API.

        * UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:
        (testWebViewFavicon): New unit test.
        (beforeAll): Add the test to the test suite.

2012-09-30  Mario Sanchez Prada  <msanchez@igalia.com>

        [WK2][GTK] Fix issues with WebKitFaviconDatabase in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=97966

        Reviewed by Carlos Garcia Campos.

        Fix failing ASSERTs detected when running the unit tests from
        TestWebKitFaviconDatabase in debug builds.

        * UIProcess/API/gtk/WebKitFaviconDatabase.cpp:
        (webkitFaviconDatabaseDispose): Close IconDatabase here, which is
        the right place to do it according to GObject documentation.
        (webkitFaviconDatabaseFinalize): Just destroy the private data
        structure and chain up to parent class's finalize method.
        (webkit_favicon_database_class_init): Override dispose method.

        * UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:
        (webkitFaviconDatabaseFinalizedCallback): Delete files when the
        WebKitFaviconDatabase is being finalized, since by that time the
        IconDatabase from WebCore will be already closed.
        (afterAll): Add a weak reference to WebKitFaviconDatabase and
        provide a GWeakNotify callback (webkitFaviconDatabaseFinalizedCallback).

2012-09-29  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL] Fix build error : Link webkit2 library to ewk2UnitTestInjectedBundleSample.
        https://bugs.webkit.org/show_bug.cgi?id=97622

        Reviewed by Gyuyoung Kim.

        There is no dependency between ewk2UnitTestInjectedBundleSample and
        webkit2 library.

        Because of this, on the first build, compiler tries to build
        injected_bundle_sample.cpp before the forwarding headers are created.
        This makes build error that the header file 'WebKit2/WKBaseSoup.h'
        cannot be found.

        To prevent this, webkit2 library is linked to ewk2UnitTestInjectedBundleSample.

        * PlatformEfl.cmake:

2012-09-28  Mariusz Grzegorczyk  <mariusz.g@samsung.com>

        [WK2][GTK][EFL] Share WebKit2-GTK plugin process implementation with EFL port
        https://bugs.webkit.org/show_bug.cgi?id=91844

        Reviewed by Simon Hausmann.

        Implement windowless plugin and functions needed to launch PluginProcess.

        * GNUmakefile.am: Change files and folders related to plugin process from gtk to unix.
        * GNUmakefile.list.am: Change files and folders related to plugin process from gtk to unix.
        * Platform/Logging.cpp: Add Plugins channel for LOG.
        (WebKit):
        (WebKit::getChannelFromName):
        (WebKit::initializeLogChannelsIfNecessary):
        * Platform/Logging.h:
        (WebKit):
        * PlatformEfl.cmake: Add files needed by plugin process.
        * PluginProcess/unix/PluginControllerProxyUnix.cpp: Renamed from Source/WebKit2/PluginProcess/gtk/PluginControllerProxyGtk.cpp.
        (WebKit):
        (WebKit::PluginControllerProxy::platformInitialize): Add macros for gtk/efl differents.
        (WebKit::PluginControllerProxy::platformDestroy):
        (WebKit::PluginControllerProxy::platformGeometryDidChange):
        * PluginProcess/unix/PluginProcessMainUnix.cpp: Renamed from Source/WebKit2/PluginProcess/gtk/PluginProcessMainGtk.cpp.
        (WebKit):
        (WebKit::webkitXError):
        (WebKit::PluginProcessMainUnix):
        * PluginProcess/unix/PluginProcessMainUnix.h: Renamed from Source/WebKit2/PluginProcess/gtk/PluginProcessMainGtk.h.
        (WebKit):
        * PluginProcess/unix/PluginProcessUnix.cpp: Renamed from Source/WebKit2/PluginProcess/gtk/PluginProcessGtk.cpp.
        (WebKit):
        (WebKit::PluginProcess::platformInitialize):
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp: Renamed from Source/WebKit2/UIProcess/Plugins/gtk/PluginProcessProxyGtk.cpp.
        (WebKit):
        (WebKit::PluginProcessProxy::platformInitializePluginProcess):
        (WebKit::PluginProcessProxy::scanPlugin):
        * UIProcess/efl/WebPageProxyEfl.cpp: Add stubs.
        (WebKit::WebPageProxy::createPluginContainer):
        (WebKit):
        (WebKit::WebPageProxy::windowedPluginGeometryDidChange):
        * WebProcess/Plugins/Netscape/unix/PluginProxyUnix.cpp: Renamed from Source/WebKit2/WebProcess/Plugins/Netscape/gtk/PluginProxyGtk.cpp.
        (WebKit):
        (WebKit::PluginProxy::needsBackingStore):
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp: Plugin's windowless implementation.
        (WebKit::getPluginDisplay):
        (WebKit::x11Screen):
        (WebKit::displayDepth):
        (WebKit::rootWindowID):
        (WebKit::NetscapePlugin::x11HostDisplay):
        (WebKit::NetscapePlugin::platformPaint):
        * config.h:
        * unix/PluginMainUnix.cpp: Renamed from Source/WebKit2/gtk/PluginMainGtk.cpp.
        (main):

2012-09-28  Anders Carlsson  <andersca@apple.com>

        Remove Java bridge
        https://bugs.webkit.org/show_bug.cgi?id=97954

        Reviewed by Sam Weinig.

        The Java bridge is not used by any port; Mac now has a NPAPI Java plug-in.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        (WebFrameLoaderClient):

2012-09-28  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/12398537> WebKit2 lacks API for disabling document.cookie like -[WebView _setCookieEnabled:]
        https://bugs.webkit.org/show_bug.cgi?id=97939

        Reviewed by Sam Weinig.

        * Shared/WebPreferencesStore.h:
        (WebKit): Defined CookieEnabled key with a default value of true.
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetCookieEnabled): Added this setter.
        (WKPreferencesGetCookieEnabled): Added this getter.
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Added a call to Settings::setCookieEnabled to push the
        preference into Settings.

2012-09-28  Sam Weinig  <sam@webkit.org>

        Fix pluralization of Info.plist key.

        Rubber-stamped by Anders Carlsson.

        * WebProcessService/Info.plist:
        * WebProcessServiceForWebKitDevelopment/Info.plist:
        It's _MultipleInstances, not _MultipleInstance. :(

2012-09-28  Anders Carlsson  <andersca@apple.com>

        Pass the correct path length to _NSGetExecutablePath
        https://bugs.webkit.org/show_bug.cgi?id=97935

        Reviewed by Sam Weinig.

        * WebProcessServiceForWebKitDevelopment/WebProcessServiceForWebKitDevelopmentMain.mm:
        (WebProcessServiceForWebKitDevelopmentEventHandler):
        Initialize pathLength before passing it to _NSGetExecutablePath.

2012-09-28  Alberto Garcia  <agarcia@igalia.com>

        WebKitLoaderClient: add missing initializer.
        https://bugs.webkit.org/show_bug.cgi?id=97930

        Reviewed by Martin Robinson.

        WKPageLoaderClient is missing the initializer for the didLayout
        field. Fixes -Wmissing-field-initializers.

        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        (attachLoaderClientToView):

2012-09-28  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        Code inside FrameLoaderClient::canShowMIMEType() implementations can be shared among different WK ports
        https://bugs.webkit.org/show_bug.cgi?id=97547

        Reviewed by Adam Barth.

        Newly added WebCore::MIMETypeRegistry::canShowMIMEType() function is used
        inside WebKit::WebPageProxy::canShowMIMEType() and WKBundlePageCanShowMIMEType().

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::canShowMIMEType):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCanShowMIMEType):

2012-09-28  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL][WK2] {Vibration,Battery,NetworkInfo}Provider should contain WKContextRef instead of proxy.
        https://bugs.webkit.org/show_bug.cgi?id=97839

        Reviewed by Kenneth Rohde Christiansen.

        VibrationProvider has WKRetainPtr<WKVibrationRef> m_wkVibrationRef
        which has reference for object WebVibrationProxy.
        The WebVibrationProxy instance is a member of WebContext who has it
        as RefPtr<WebVibrationProxy>.

        A member of one class is shared with another class, but there is no
        relation between the two classes.

        This can become a problem when WebContext is deleted before the
        VibrationProvider, WebVibrationProxy will be alive without WebContext,
        because VibrationProvider also has the reference for WebVibrationProxy.

        This is a problem because WebVibrationProxy should be a member of
        WebContext.

        To prevent this, I changed the VibrationProvider to have
        WKRetainPtr<WKContextRef> instead of WKRetainPtr<WKVibrationRef>.
        Same for BatteryProvider and NetworkInfoProvider.

        * UIProcess/API/efl/BatteryProvider.cpp:
        (BatteryProvider::create):
        (BatteryProvider::BatteryProvider):
        (BatteryProvider::didChangeBatteryStatus):
        * UIProcess/API/efl/BatteryProvider.h:
        (BatteryProvider):
        * UIProcess/API/efl/NetworkInfoProvider.cpp:
        (NetworkInfoProvider::create):
        (NetworkInfoProvider::NetworkInfoProvider):
        * UIProcess/API/efl/NetworkInfoProvider.h:
        (NetworkInfoProvider):
        * UIProcess/API/efl/VibrationProvider.cpp:
        (VibrationProvider::create):
        (VibrationProvider::VibrationProvider):
        * UIProcess/API/efl/VibrationProvider.h:
        (VibrationProvider):
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context::_Ewk_Context):

2012-09-28  Mario Sanchez Prada  <msanchez@igalia.com>

        [WK2][GTK] Implement new Favicons API
        https://bugs.webkit.org/show_bug.cgi?id=96476

        Reviewed by Carlos Garcia Campos.

        New object wrapping the internal IconDatabase from WebCore,
        providing a simple asynchronous API to retrieve the favicon
        associated to a page URL, and two more functions to simple query
        the internal database for the URI of the icon associated to a
        page, if any, and to clear the state of the internal database.

        * UIProcess/API/gtk/WebKitFaviconDatabase.cpp: Added.
        (_WebKitFaviconDatabasePrivate):
        (webkit_favicon_database_init):
        (webkitFaviconDatabaseFinalize):
        (webkit_favicon_database_class_init):
        (GetFaviconSurfaceAsyncData): New structure used to pass data
        across the asynchronous implementation of get_favicon().
        (GetFaviconSurfaceAsyncData::~GetFaviconSurfaceAsyncData):
        Disconnects the cancellable if needed.
        (getIconSurfaceSynchronously): Synchronously returns a pointer to
        the cairo_surface with the icon's data, if available.
        (deletePendingIconRequests): Removes the full list of
        icon requests for a page URL.
        (processPendingIconsForURI): Process any icon request that
        might be still pending.
        (iconDataReadyForPageURLCallback): Called from WebIconDatabase
        when new data is ready for a favicon.
        (webkitFaviconDatabaseCreate): Create the WebKitFaviconDatabase
        object and initializes the API client for WKIconDatabaseClient.
        (getOrCreatePendingIconRequests): Returns (if available) or
        creates a new icon request, to be appended to the list of requests
        for the same page URL.
        (getIconSurfaceCancelled): Handle the case of a request being
        cancelled. Must happen on the main thread.
        (getIconSurfaceCancelledCallback): Callback used with
        g_cancellable_connect(), which ensure getIconSurfaceCancelled() is
        called from the main thread.
        (setErrorForAsyncResult): Helper to set errors in the result.
        (webkit_favicon_database_error_quark): New function, providint the
        new error domain for errors of type WebKitFaviconDatabaseError.
        (webkit_favicon_database_get_favicon): New API function, providing
        an asynchronous mechanism to query the favicon for a page URL.
        (webkit_favicon_database_get_favicon_finish): New API function to
        finish the asyncrhonous request started with get_favicon().
        (webkit_favicon_database_get_favicon_uri): New API function
        to easily retrieve, if available, the URI of a favicon.
        (webkit_favicon_database_clear): New API function to clear the
        state of the internal icon database.
        * UIProcess/API/gtk/WebKitFaviconDatabase.h: Added.
        (_WebKitFaviconDatabase):
        (_WebKitFaviconDatabaseClass):
        * UIProcess/API/gtk/WebKitFaviconDatabasePrivate.h: Added to
        internally expose webkitFaviconDatabaseCreate() to WebKitWebContext.
        * UIProcess/API/gtk/WebKitPrivate.h: Import WebKit2/WKIconDatabase.h.
        * GNUmakefile.list.am: Added new files.

        Add a new getter in WebIconDatabase for m_urlImportCompleted.

        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::isUrlImportCompleted): Added this simple
        getter to allow knowing from WebKitFaviconDatabase whether the
        initial import has finished, needed for making some decisions.
        (WebKit):
        * UIProcess/WebIconDatabase.h:
        (WebIconDatabase):

        New API in WebKitWebContext to allow obtaining a valid instance of
        WebKitFaviconDatabase and to set/get the local path to be used.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (_WebKitWebContextPrivate):
        (webkit_web_context_set_favicon_database_path): New API to allow
        setting a path for the icon database, other than the default one.
        (webkit_web_context_get_favicon_database_path): New API to
        retrieve the path for the icon database currently in use.
        (webkit_web_context_get_favicon_database): New API to get a valid
        and properly initialized instance of WebKitFaviconDatabase.
        * UIProcess/API/gtk/WebKitWebContext.h:

        Make sure we have a default path set for the icon database.

        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformDefaultIconDatabasePath): Return the
        default path to be used for the icon database.

        Add unit tests for checking this new API.

        * UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp: Added.
        (serverCallback): Callback for the test server.
        (testSetDirectory): New unit test, checks the ability to set and
        get a specific directory path for the icon database.
        (testClearDatabase): New unit test, checks the ability to clear
        the data in the icon database.
        (testGetFavicon): New unit test, checks the ability to get a
        favicon from the icon database in different situations.
        (testGetFaviconURI): New unit test, checks the ability to retrieve
        the URI for the favicon, if any, associated to a web page.
        (deleteDatabaseFiles): Helper function to remove temporary files.
        (beforeAll): Initialize the test server and add the unit tests.
        (afterAll): Delete the test server and clean up.

2012-09-28  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL] Unreviewed test fixes after r129892.

        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (TEST_F): Fix a copy&paste error that changed the test
        expectations.
        * UIProcess/API/efl/tests/test_ewk2_cookie_manager.cpp:
        (TEST_F): Revert the change here since it was already in the right
        format before.

2012-09-28  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Some expected and actual parameters in unit tests are reversed
        https://bugs.webkit.org/show_bug.cgi?id=97624

        Reviewed by Laszlo Gombos.

        According to the gtest guide, ASSERT_XXX, EXPECT_XXX(expected, actual) are recommended
        but some unit tests do not follow this.(http://code.google.com/p/googletest/wiki/Primer)
        Google Test's failure messages are optimized for this convention.

        * UIProcess/API/efl/tests/test_ewk2_back_forward_list.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (schemeRequestCallback):
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_cookie_manager.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_download_job.cpp:
        (on_download_requested):
        (on_download_finished):
        * UIProcess/API/efl/tests/test_ewk2_intents.cpp:
        (onIntentServiceRegistration):
        (onIntentReceived):
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_refptr_evas_object.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):
        (onFormAboutToBeSubmitted):
        (checkBasicPopupMenuItem):
        (showPopupMenu):
        (showColorPicker):

2012-09-28  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] QRawWebView tests are broke after r129545
        https://bugs.webkit.org/show_bug.cgi?id=97907

        Reviewed by Noam Rosenthal.

        The issue here is that we set up the page loader client before initializing the page
        so the message we send in WebPageProxy::initializeLoaderClient will be lost since the
        page does not exists at the web process side yet. The trivial fix would be to reorder
        initialization. In this patch I also moved to the new model of observing layout changes
        via WKPageDidLayoutCallback since the old one will be deprecated at some time.

        * UIProcess/API/qt/tests/qrawwebview/tst_qrawwebview.cpp:
        (WebView::WebView):
        (WebView::didLayout):

2012-09-28  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, rolling out r129863.
        http://trac.webkit.org/changeset/129863
        https://bugs.webkit.org/show_bug.cgi?id=97173

        Broken debug WK2 layout test

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context::_Ewk_Context):
        (_Ewk_Context::~_Ewk_Context):
        * UIProcess/API/efl/ewk_main.cpp:
        (ewk_init):
        (ewk_shutdown):
        * UIProcess/API/efl/ewk_main.h: Added.
        * UIProcess/API/efl/ewk_main_private.h: Removed.
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::SetUp):
        (EWK2UnitTest::EWK2UnitTestBase::TearDown):
        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainEfl):

2012-09-28  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] exceededDatabaseQuota event is not handled
        https://bugs.webkit.org/show_bug.cgi?id=97882

        Reviewed by Kenneth Rohde Christiansen.

        Handle exceededDatabaseQuota callback from WKPageUIClient so
        that we let the browser a chance to decide what to do when
        the database quota is reached. If the browser does not handle
        this, then we return a realistic default quota (5MB as
        recommended by the spec).

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_database_quota_exceeded):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/ewk_view_ui_client.cpp:
        (exceededDatabaseQuota):
        (ewk_view_ui_client_attach):

2012-09-28  Kai Koehne  <kai.koehne@digia.com>

        [Qt] Use qInstallMessageHandler() 
        https://bugs.webkit.org/show_bug.cgi?id=96648

        Reviewed by Jocelyn Turcotte.

        qInstallMsgHandler() got deprecated in Qt 5.

        * PluginProcess/qt/PluginProcessMainQt.cpp:
        (WebKit::messageHandler):
        (WebKit::PluginProcessMain):
        * UIProcess/API/qt/tests/util.cpp:
        (messageHandler):
        (suppressDebugOutput):
        * qt/MainQt.cpp:
        (messageHandler):
        (main):

2012-09-28  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL][WK2] Clear provider on destructor of {Vibration,Battery,NetworkInfo}Provider.
        https://bugs.webkit.org/show_bug.cgi?id=97528

        Reviewed by Kenneth Rohde Christiansen.

        Constructor of {Vibration,Battery,NetworkInfo}Provider set provider
        but the destructor of the classes doesn't clear provider.
        This can make a problem about accessing dangling pointer.

        For preventing this problem, clear provider on destructor.

        * UIProcess/API/efl/BatteryProvider.cpp:
        (BatteryProvider::~BatteryProvider):
        * UIProcess/API/efl/NetworkInfoProvider.cpp:
        (NetworkInfoProvider::~NetworkInfoProvider):
        * UIProcess/API/efl/VibrationProvider.cpp:
        (VibrationProvider::~VibrationProvider):

2012-09-28  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] NetworkInfo provider is not initialized in Ewk_Context
        https://bugs.webkit.org/show_bug.cgi?id=97865

        Reviewed by Kenneth Rohde Christiansen.

        Initialize NetworkInfo provider for EFL port in Ewk_Context
        with the other providers.

        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context):
        (_Ewk_Context::_Ewk_Context):

2012-09-28  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Refactoring initialization and shutdown codes of EFL libraries.
        https://bugs.webkit.org/show_bug.cgi?id=97173

        Reviewed by Gyuyoung Kim.

        Initialize and shutdown the EFL libraries in the ewk_main.cpp for ui
        process and WebProcessMainEfl.cpp for web process.
        Additionally, initialization and shutdown are done when ewk_context is
        created and deleted, so ewk_{init,shutdown} APIs are changed to
        internal function and applications don't have to call them.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context::_Ewk_Context):
        (_Ewk_Context::~_Ewk_Context):
        * UIProcess/API/efl/ewk_main.cpp:
        (ewk_init):
        (ewk_shutdown):
        * UIProcess/API/efl/ewk_main.h: Removed.
        * UIProcess/API/efl/ewk_main_private.h: Added.
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::SetUp):
        (EWK2UnitTest::EWK2UnitTestBase::TearDown):
        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainEfl):

2012-09-27  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=97823
        Need to bump the WKBundlePageLoaderClient version after the addition of didLayout

        Reviewed by Brady Eidson.

        Bump the version.
        * Shared/APIClientTraits.cpp:
        (WebKit):
        * Shared/APIClientTraits.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:

2012-09-27  Helder Correia  <helder.correia@nokia.com>

        [Cairo] Unnecessary creation of ShareableBitmap's for directly composited images
        https://bugs.webkit.org/show_bug.cgi?id=97745

        Reviewed by Martin Robinson.

        In LayerTreeCoordinator::adoptImageBackingStore(), there is a
        PLATFORM(QT) code path to check for identical images, but nothing is
        done for Cairo, which results in the occurrence of avoidable resource
        allocations.

        The issue happens in e.g. http://www.webkit.org/blog-files/leaves/,
        where there are many leaves flying around while they're produced out of
        only four bitmaps.

        This patch uses pointers to cairo_surface_t's as the key to the hashmap
        that caches bitmaps. This can be safely done since we own the references.
        We artificially increment the surface references in adoptImageBackingStore()
        and decrement them in releaseImageBackingStore().

        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::adoptImageBackingStore):
        (WebKit::LayerTreeCoordinator::releaseImageBackingStore):

2012-09-27  Anders Carlsson  <andersca@apple.com>

        Stop using dispatch_get_current_queue
        https://bugs.webkit.org/show_bug.cgi?id=97806
        <rdar://problem/12379094>

        Reviewed by Mark Rowe.

        * Platform/mac/WorkQueueMac.cpp:
        (WorkQueueAndFunction::WorkQueueAndFunction):
        (WorkQueueAndFunction):
        (WorkQueue::executeFunction):
        (WorkQueue::dispatch):
        (WorkQueue::dispatchAfterDelay):
        Keep track of the associated work queue so we can get it in WorkQueue::executeFunction.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::setUpTerminationNotificationHandler):
        We don't care about which queue the termination notification is delivered on since we only want to call
        waitpid on the child pid so we can just use a global queue.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (-[WKWebInspectorProxyObjCAdapter inspectedViewFrameDidChange:]):
        Use dispatch_get_main_queue here.

2012-09-27  Mario Sanchez Prada  <msanchez@igalia.com>

        [WK2] IconDatabase: Add a way to notify when icon data is available
        https://bugs.webkit.org/show_bug.cgi?id=63945

        Rubber stamped by Anders Carlsson.

        Update version of WKIconDatabaseClient and API traits.

        * Shared/APIClientTraits.cpp:
        (WebKit):
        * Shared/APIClientTraits.h:
        * UIProcess/API/C/WKIconDatabase.h:

2012-09-27  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] REGRESSION(r128980): It broke all QRawWebView API test
        https://bugs.webkit.org/show_bug.cgi?id=97561

        Reviewed by Noam Rosenthal.

        Make sure we always send the very first RenderNextFrame message.
        Before r128980 it was working accidentally because in the common
        case the web process sent a DeleteCompositingLayer message at some
        point before the forced repaint would time out and we was sending
        the first RenderNextFrame when reacting to that.

        * UIProcess/API/qt/raw/qrawwebview.cpp:
        (QRawWebView::setActive): Set the LayerTreeRenderer to active
        as well. In the QQuickWebView case it is handled by the QtWebPageSGNode.
        (QRawWebView::layerTreeRenderer): Added a convenience getter
        for the LayerTreeRenderer.
        (QRawWebView::paint):
        * UIProcess/API/qt/raw/qrawwebview_p.h:
        (WebKit):
        * UIProcess/API/qt/tests/qrawwebview/tst_qrawwebview.cpp:
        (tst_qrawwebview::tst_qrawwebview): Added a call to addQtWebProcessToPath
        to make my and the follower users of this test easier.

2012-09-27  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Process touch events using mouse and multi events of Evas.
        https://bugs.webkit.org/show_bug.cgi?id=96906

        Reviewed by Kenneth Rohde Christiansen.

        Provide default behavior for processing touch events in the ewk_view if
        application wants to use it.
        We can to process touch events using mouse and multi events because the
        Evas creates mouse events for first touch and multi events for second and
        third touch. It can be modified when Evas starts to support event type
        for touch events.

        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::_Ewk_View_Private_Data):
        (_ewk_view_feed_touch_event_using_touch_point_list_of_evas):
        (_ewk_view_on_touch_down):
        (_ewk_view_on_touch_up):
        (_ewk_view_on_touch_move):
        (ewk_view_touch_events_enabled_set):
        (ewk_view_touch_events_enabled_get):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::mouseDown):
        (EWK2UnitTest):
        (EWK2UnitTest::EWK2UnitTestBase::mouseUp):
        (EWK2UnitTest::EWK2UnitTestBase::mouseMove):
        (EWK2UnitTest::EWK2UnitTestBase::multiDown):
        (EWK2UnitTest::EWK2UnitTestBase::multiUp):
        (EWK2UnitTest::EWK2UnitTestBase::multiMove):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        (EWK2UnitTestBase):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2012-09-27  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Add callback functions for WKPageFindClient
        https://bugs.webkit.org/show_bug.cgi?id=97431

        Reviewed by Laszlo Gombos.

        Add didFailToFindString() and didCountStringMatches() for WKPageFindClient's callback functions.
        The unit test for didFindString() and didFailToFindString() have beend added. The unit test for
        didCountStringMatches() needs a API which wraps the WKPageCountStringMatches but it is not exists yet.
        Additionaly, I changed the 'unsinged int' to 'unsigned' in the parameter type and removed unnecessary
        type conversion.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_text_find):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_find_client.cpp:
        (didFindString):
        (didFailToFindString):
        (didCountStringMatches):
        (ewk_view_find_client_attach):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (onTextFound):
        (TEST_F):

2012-09-27  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Unify event handling of middle mouse button.
        https://bugs.webkit.org/show_bug.cgi?id=97690

        Reviewed by Tony Chang.

        Remove Qt and GTK port specific handling of middle mouse button press.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::handleMouseEvent):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit):
        * WebProcess/WebPage/qt/WebPageQt.cpp:

2012-09-27  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] Injected bundle API implementation should use toWTFString()
        https://bugs.webkit.org/show_bug.cgi?id=97766

        Reviewed by Kenneth Rohde Christiansen.

        Injected bundle API implementation should call toWTFString() rather than convert
        WKStringRef and WKURLRef to their impls and then call string() method directly.
        The rational for that are both safety (toWTFString checks the given pointer) and
        code readability.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundlePostMessage):
        (WKBundlePostSynchronousMessage):
        (WKBundleOverrideBoolPreferenceForTestRunner):
        (WKBundleAddOriginAccessWhitelistEntry):
        (WKBundleRemoveOriginAccessWhitelistEntry):
        (WKBundleClearApplicationCacheForOrigin):
        (WKBundleGetAppCacheUsageForOrigin):
        (WKBundleSetApplicationCacheOriginQuota):
        (WKBundleResetApplicationCacheOriginQuota):
        (WKBundlePageNumberForElementById):
        (WKBundleSetUserStyleSheetLocation):
        (WKBundleSetWebNotificationPermission):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFramePauseAnimationOnElementWithId):
        (WKBundleFramePauseTransitionOnElementWithId):
        (WKBundleFrameAllowsFollowingLink):
        (WKBundleFrameCopySuggestedFilenameForResourceWithURL):
        (WKBundleFrameCopyMIMETypeForResourceWithURL):
        (WKBundleFrameSetTextDirection):
        * WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp:
        (WKBundleInspectorEvaluateScriptForTest):
        * WebProcess/InjectedBundle/API/c/WKBundleIntent.cpp:
        (WKBundleIntentCreate):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageExecuteEditingCommand):
        (WKBundlePageIsEditingCommandEnabled):
        (WKBundlePageHasLocalDataForURL):
        (WKBundlePageFindString):
        (WKBundlePageSetComposition):
        (WKBundlePageConfirmCompositionWithText):
        (WKBundlePageCanShowMIMEType):

2012-09-27  Mario Sanchez Prada  <msanchez@igalia.com>

        [WK2] IconDatabase: Add a way to notify when icon data is available
        https://bugs.webkit.org/show_bug.cgi?id=63945

        Reviewed by Anders Carlsson.

        Provide new API to notify the API layer when icon data is
        available, and use it from the implementation layer when needed,
        that is, either when the data has been loaded from the network or
        imported from disk.

        Added new callback to WKIconDatabaseClient API.

        * UIProcess/API/C/WKIconDatabase.h: Added new callback.
        * UIProcess/WebIconDatabaseClient.cpp:
        (WebKit::WebIconDatabaseClient::iconDataReadyForPageURL):
        Implementation of the new callback at this level in the UI
        process, by using its implementation in the API layer if present.
        * UIProcess/WebIconDatabaseClient.h:
        (WebIconDatabaseClient): Added new callback.

        Implemented WebFrameLoaderClient::dispatchDidReceiveIcon, so we
        get notified in the UI process when loading a new icon.

        * UIProcess/WebIconDatabase.messages.in: Added new message to
        notify the UI process: DidReceiveIconForPageURL.
        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::notifyIconDataReadyForPageURL): New
        private helper function to notify the API layer both that new icon
        data is ready and that the icon has changed.
        (WebKit::WebIconDatabase::didReceiveIconForPageURL):
        Implementation of the new message added, by calling
        notifyIconDataReadyForPageURL() to notify the API layer.
        (WebKit::WebIconDatabase::didImportIconDataForPageURL): Call
        notifyIconDataReadyForPageURL() from here as well.
        * UIProcess/WebIconDatabase.h: Added new prototypes.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveIcon): Send a
        message to the UI process telling a new icon has been received.

2012-09-26  Sam Weinig  <sam@webkit.org>

        Fix XPCServices symlink to not be to an absolute path
        in the build products directory.

        Reviewed by Dan Bernstein.

        * WebKit2.xcodeproj/project.pbxproj:

2012-09-26  Anders Carlsson  <andersca@apple.com>

        Stop using CFURLCreateDataAndPropertiesFromResource
        https://bugs.webkit.org/show_bug.cgi?id=97728
        <rdar://problem/12379035>

        Reviewed by Tim Horton.

        Replace a call to CFURLCreateDataAndPropertiesFromResource with -[NSData initWithContentsOfURL:]
        and add the necessary casts to make the compiler happy.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::contentsOfPropertyListAtURL):

2012-09-26  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Update WebPageProxy::reattachToWebProcess() for multi-web process mode
        https://bugs.webkit.org/show_bug.cgi?id=97726

        Reviewed by Anders Carlsson.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureSharedWebProcess): createNewWebProcess() now takes care
        of adding the new process to m_processes.
        (WebKit::WebContext::createNewWebProcess): Every time we call this function, we need
        to add the result to m_processes. Better do it internally to avoid mistakes.
        (WebKit::WebContext::warmInitialProcess): Updated for the above.
        (WebKit::WebContext::createWebPage): Ditto.
        (WebKit::WebContext::relaunchProcessIfNecessary): This function makes no sense in
        multi-web process mode. Assert that we didnt get here accidentally.

        * UIProcess/WebContext.h: (WebKit::WebContext::sendToAllProcessesRelaunchingThemIfNecessary):
        Only call relaunchProcessIfNecessary in single process mode. The functionality that
        needs this behavior will be greatly refactored for multi-web process.

        * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::reattachToWebProcess):
        We already know that we need a new process, "relaunch if necessary" is not the
        right logic. Also added a few more assertions checking that process state is
        as expected.
        
        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::getCacheOrigins): Removed relaunchProcessIfNecessary().
        It will be called inside sendToAllProcessesRelaunchingThemIfNecessary().

        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
        (WebKit::WebPluginSiteDataManager::getSitesWithData): Ditto.
        (WebKit::WebPluginSiteDataManager::clearSiteData): Ditto.

2012-09-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitJavascriptResult
        https://bugs.webkit.org/show_bug.cgi?id=96780

        Reviewed by Gustavo Noronha Silva.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitJavascriptResult.cpp:
        (_WebKitJavascriptResult::_WebKitJavascriptResult):
        (webkitJavascriptResultCreate):
        * UIProcess/API/gtk/WebKitJavascriptResultPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewRunJavaScriptCallback):

2012-09-26  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][WTR] Policy client: dumping from decidePolicyForResponse callback
        https://bugs.webkit.org/show_bug.cgi?id=97034

        Reviewed by Kenneth Rohde Christiansen.

        Added suggested filename getter to WKURLResponse interface and also added a property showing whether the response
        is attachment.

        * Shared/API/c/WKURLResponse.cpp:
        (WKURLResponseSuggestedFilename):
        (WKURLResponseIsAttachment):
        * Shared/API/c/WKURLResponse.h:

2012-09-26  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Use XDamage to simplify RedirectedXCompositeWindow
        https://bugs.webkit.org/show_bug.cgi?id=97267

        Reviewed by Alejandro G. Castro.

        Use XDamage to queue redraws of the widget when redirecting accelerated compositing
        to an offscreen window. This allows removing a finicky timer-based approach, improves
        performance, and allows simplifying things greatly.

        * GNUmakefile.am: Add the XDamage CFLAGS and LIBS to the appropriate places.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (_WebKitWebViewBasePrivate): Remove readyToRenderAcceleratedCompositingResults as
        it's no longer necessary.
        (webkit_web_view_base_init): Handle the situation where the RedirectedXCompositeWindow
        is null.
        (webkitWebViewRenderAcceleratedCompositingResults): Ditto.
        (resizeWebKitWebViewBaseFromAllocation): Ditto.
        (webkitWebViewBaseCreateWebPage): Ditto.
        (redirectedWindowDamagedCallback): Added.
        * UIProcess/WebPageProxy.h: Remove InvalidateWidget message.
        * UIProcess/WebPageProxy.messages.in: Ditto.
        * UIProcess/gtk/WebPageProxyGtk.cpp: Ditto.
        * WebProcess/WebPage/WebPage.h: Ditto.
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::compositeLayersToContext): No longer need to
        trigger the invalidateWindow message.
        * WebProcess/WebPage/gtk/WebPageGtk.cpp: Ditto.

2012-09-25  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [DRT][WTR] Support overriding the 'WebKitDisplayImagesKey' preference
        https://bugs.webkit.org/show_bug.cgi?id=96883

        Reviewed by Kenneth Rohde Christiansen.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner): Add
        support for changing
        WebPreferencesKey::loadsImagesAutomaticallyKey().

2012-09-25  Dan Bernstein  <mitz@apple.com>

        Try to fix non-Mac builds.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2012-09-25  Dan Bernstein  <mitz@apple.com>

        WebKit2 part of <rdar://problem/11455228> [mac] Stop using screen fonts
        https://bugs.webkit.org/show_bug.cgi?id=97620

        Reviewed by John Sullivan.

        * Shared/WebPreferencesStore.h:
        (WebKit): Changed the default value of the screenFontSubstitutionEnabled preference to false.
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters): Added an initializer for
        the new shouldForceScreenFontSubstitution data member.
        (WebKit::WebProcessCreationParameters::encode): Added encoding of shouldForceScreenFontSubstitution.
        (WebKit::WebProcessCreationParameters::decode): Added decoding of shouldForceScreenFontSubstitution.
        * Shared/WebProcessCreationParameters.h:
        (WebProcessCreationParameters): Added shouldForceScreenFontSubstitution boolean data member.
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess): Added code to set shouldForceScreenFontSubstitution
        in the process creation parameters to the value of the NSFontDefaultScreenFontSubstitutionEnabled user
        defaults key.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Changed to enable screen font substitution also if
        shouldForceScreenFontSubstitution() is true.
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::shouldForceScreenFontSubstitution): Added this getter.
        (WebProcess): Added m_shouldForceScreenFontSubstitution boolean data member.
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeWebProcess): Added initialization of
        m_shouldForceScreenFontSubstitution from the creation parameters.

2012-09-25  Alexey Proskuryakov  <ap@apple.com>

        Get rid of WebContext::m_pendingMessagesToPostToInjectedBundle
        https://bugs.webkit.org/show_bug.cgi?id=94368

        Reviewed by Anders Carlsson.

        It doesn't appear to be of any use.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):
        (WebKit::WebContext::postMessageToInjectedBundle):
        * UIProcess/WebContext.h:

2012-09-24  Simon Fraser  <simon.fraser@apple.com>

        <rdar://problem/12351906> Have DumpRenderTree and WebKitTestRunner crash logs show which test crashed

        Reviewed by Mark Rowe.

        Use a new WebKitSytemInterface function to add data to crash logs about which 
        test was running when the crash happened.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):  Hook up the function pointer for [wk|WK]SetCrashReportApplicationSpecificInformation.

2012-09-25  Beth Dakin  <bdakin@apple.com>

        Build fix. I removed this function as a part of 
        https://bugs.webkit.org/show_bug.cgi?id=95397 but it is
        still needed for nightlies and open source builds.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetPaintedObjectsCounterThreshold):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:

2012-09-25  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=95397
        Need to merge didFirstVisuallyNonEmptyLayout and 
        didNewFirstVisuallyNonEmptyLayout
        -and corresponding-
        <rdar://problem/10791680>

        Reviewed by Sam Weinig.

        The new API has two parts. First, the client has to opt into which 
        layout milestones they are interested in hearing about using 
        WKPageListenForLayoutMilestones or 
        WKBundlePageListenForLayoutMilestones(). Then, WebKit will call 
        the didLayout(WKLayoutMilestones) callback on the appropriate 
        clients when the specified layout milestones have fired. didLayout 
        takes the WKLayoutMilestones bit mask, which will indicate which 
        milestones have fired since it is possible for two to fire at the 
        same time.

        Define WKLayoutMilestoneOptions.
        * Shared/API/c/WKPageLoadTypes.h:

        Define conversions between WKLayoutMilestoneOptions and 
        WebCore::LayoutMilestoneOptions
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toWKLayoutMilestoneOptions):
        (WebKit):
        (WebKit::toLayoutMilestoneOptions):

        New API.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageListenForLayoutMilestones):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::didLayout):
        (WebKit):
        * UIProcess/WebLoaderClient.h:
        (WebLoaderClient):

        didFirstLayoutForFrame, didFirstVisuallyNonEmptyLayoutForFrame, 
        and didNewFirstVisuallyNonEmptyLayout are now implemented with 
        didLayout under the hood. So if those old callbacks have been 
        defined, be sure to add the appropriate layout milestones here for 
        backwards-compatibility.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeLoaderClient):

        New API.
        (WebKit::WebPageProxy::listenForLayoutMilestones):
        (WebKit):
        (WebKit::WebPageProxy::didLayout):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:

        New API. And remove the now-unnecessary 
        WKBundlePageSetPaintedObjectsCounterThreshold. 
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageListenForLayoutMilestones):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:

        New API.
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::didNewFirstVisuallyNonEmptyLayout):
        (WebKit):
        (WebKit::InjectedBundlePageLoaderClient::didLayout):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        (InjectedBundlePageLoaderClient):

        Remove dispatchDidFirstLayout, 
        dispatchDidFirstVisuallyNonEmptyLayout, and 
        dispatchDidNewFirstVisuallyNonEmptyLayout. They are now replaced 
        by dispatchDidLayout(LayoutMilestoneOptions)
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidLayout):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        (WebFrameLoaderClient):

        didFirstLayoutForFrame, didFirstVisuallyNonEmptyLayoutForFrame, 
        and didNewFirstVisuallyNonEmptyLayout are now implemented with 
        didLayout under the hood. So if those old callbacks have been 
        defined, be sure to add the appropriate layout milestones here for 
        backwards-compatibility.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::initializeInjectedBundleLoaderClient):
        (WebKit):

        Call into WebCore to set the layout milestones.
        (WebKit::WebPage::listenForLayoutMilestones):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/WebPage.messages.in:

        Account for the new member of PageLoadClient.
        * WebProcess/qt/QtBuiltinBundlePage.cpp:
        (WebKit::QtBuiltinBundlePage::QtBuiltinBundlePage):

2012-09-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][EFL] Disk cache is never dumped to disk in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=97583

        Reviewed by Martin Robinson.

        The problem is that WebProcess::platformTerminate(), where the
        cache is currently dumped, is not called when the web process
        finishes because the UI process closes the connection. The cache
        is created and loaded in the main() so it can also be flushed and
        dumped there, so that we also make sure it's always called when
        the process finishes normally when the main loop quits.

        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainEfl): Flush and dump the disk cache when
        the main loop returns.
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        (WebKit::WebProcessMainGtk): Ditto.
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformTerminate): Do not flush and dump
        the disk cache.

2012-09-25  Benjamin Poulain  <bpoulain@apple.com>

        Add missing support for Geolocation tests on WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=97518

        Reviewed by Sam Weinig.

        The existing API for reporting error does not support passing and error message.

        The interface UIProcess<->WebProcess is changed to take an error message, the
        existing API now pass a null String, and the new function
        WKGeolocationManagerProviderDidFailToDeterminePositionWithErrorMessage() provide
        the extended support with error message.

        * UIProcess/API/C/WKGeolocationManager.cpp:
        (WKGeolocationManagerProviderDidFailToDeterminePositionWithErrorMessage):
        * UIProcess/API/C/WKGeolocationManager.h:
        * UIProcess/WebGeolocationManagerProxy.cpp:
        (WebKit::WebGeolocationManagerProxy::providerDidFailToDeterminePosition):
        * UIProcess/WebGeolocationManagerProxy.h:
        (WebGeolocationManagerProxy):
        * WebProcess/Geolocation/WebGeolocationManager.cpp:
        (WebKit::WebGeolocationManager::didFailToDeterminePosition):
        * WebProcess/Geolocation/WebGeolocationManager.h:
        (WebGeolocationManager):
        * WebProcess/Geolocation/WebGeolocationManager.messages.in:

2012-09-25  Akash Vaswani  <avaswani@apple.com>

        Crash after clicking in plugin at kauaiexplorer.com
        <rdar://problem/11525987/> and https://bugs.webkit.org/show_bug.cgi?id=90925

        Reviewed by Sam Weinig.

        Bug: Clicking the plugin to navigate away from the page caused the browser to crash.
             This is because it is possible for a beforeunload handler to destroy the plugin
             while it is still needed. In this case the handler set visibility to "none" and
             then accessed a property on the plugin script object. This forced a layout
             that destroyed the plugin.
        Fix: Protecting PluginView objects until they are no longer required.
             This was done by adding a RefPtr at the beginning of performURLRequest() 

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performURLRequest):

2012-09-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't kill automatically the web process when the ui process finishes
        https://bugs.webkit.org/show_bug.cgi?id=97580

        Reviewed by Martin Robinson.

        We use prctl(PR_SET_PDEATHSIG, SIGKILL); in linux to make sure the
        web process is killed when the UI process finishes. This is not
        needed any more since now the web process stops the main loop when
        the connection with the UI process is closed in
        WebProcess::didClose(). This approach is better because it works
        for any platform and makes the web process finish normally from
        main().

        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::childSetupFunction): Don't call prctl(PR_SET_PDEATHSIG,
        SIGKILL) in the child process.

2012-09-25  Benjamin Poulain  <benjamin@webkit.org>

        Build fix, GeolocationClientMock should not be included by WebProcess InjectedBundle

        Unreviewed.

        The patch r129252 removes the dependencies on GeolocationClientMock, r129444 removes
        GeolocationClientMock from the Mac port. The #include breaks new Mac build.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:

2012-09-25  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] PageViewportController: Consolidate positionRangeForViewportAtScale and boundPosition
        https://bugs.webkit.org/show_bug.cgi?id=97222

        Reviewed by Kenneth Rohde Christiansen.

        Those methods are used together everywhere, merge them into a single
        clampViewportToContents method.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::innerBoundedViewportScale):
        (WebKit::PageViewportController::outerBoundedViewportScale):
        (WebKit::PageViewportController::clampViewportToContents):
        (WebKit):
        (WebKit::PageViewportController::pageDidRequestScroll):
        (WebKit::PageViewportController::syncVisibleContents):
        * UIProcess/PageViewportController.h:
        (PageViewportController):
        (WebKit):
        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::focusEditableArea):
        (WebKit::PageViewportControllerClientQt::zoomToAreaGestureEnded):
        (WebKit::PageViewportControllerClientQt::nearestValidVisibleContentsRect):

2012-09-25  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Unify the PageViewportController<->Client interface regarding positions
        https://bugs.webkit.org/show_bug.cgi?id=97220

        Reviewed by Kenneth Rohde Christiansen.

        - Make sure that css units are used for all position arguments
        - Make sure that all positions represent the viewport relatively to the contents
          rather than the other way around
        - Delay clamping the viewport to the contents size in the controller rather than in the client

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewFlickablePrivate::updateViewportSize):
        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::pageDidRequestScroll):
        (WebKit::PageViewportController::didChangeViewportSize):
        (WebKit::PageViewportController::didChangeContentsVisibility):
        (WebKit::PageViewportController::syncVisibleContents):
        (WebKit::PageViewportController::positionRangeForViewportAtScale):
        * UIProcess/PageViewportController.h:
        (PageViewportController):
        * UIProcess/PageViewportControllerClient.h:
        (PageViewportControllerClient):
        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::animateContentRectVisible):
        (WebKit::PageViewportControllerClientQt::focusEditableArea):
        (WebKit::PageViewportControllerClientQt::zoomToAreaGestureEnded):
        (WebKit::PageViewportControllerClientQt::nearestValidVisibleContentsRect):
        (WebKit::PageViewportControllerClientQt::setViewportPosition):
        (WebKit::PageViewportControllerClientQt::updateViewportController):
        * UIProcess/qt/PageViewportControllerClientQt.h:
        (PageViewportControllerClientQt):

2012-09-25  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Make sure that desktop pages honour the devicePixelRatio
        https://bugs.webkit.org/show_bug.cgi?id=97215

        Reviewed by Kenneth Rohde Christiansen.

        The desktopWidth given to computeViewportAttributes is expected to be pixel-ratio adjusted already.
        We need to make sure that the viewport size is divided by the pixel ratio to prevent
        the equivalent of a 1.0 devicePixelRatio to be in effect once viewportSize.width() is larger
        than layoutFallbackWidth.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::sendViewportAttributesChanged):

2012-09-25  Simon Pena  <spena@igalia.com>

        [GTK] Add Undo / Redo method to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=97553

        Reviewed by Martin Robinson.

        Add the macros for Undo / Redo support, and include them
        in the documentation.

        * UIProcess/API/gtk/WebKitEditingCommands.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:

2012-09-25  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Abstract as much devicePixelRatio logic as possible behind PageViewportController
        https://bugs.webkit.org/show_bug.cgi?id=97214

        Reviewed by Kenneth Rohde Christiansen.

        Currently the client is required to multiply the scales it receives each bime by the
        devicePixelRatio. This shouldn't be required since essentially, the only places that the
        devicePixelRatio should be in use, is to adjust the layout size, multiply the base scale
        and for scale constants.

        Other related changes:
        - Make sure that the controller and it's client are only exchanging effective scales
         (cssScale * devicePixelRatio)
        - Remove members duplicating m_rawAttributes values
        - Use a separate member for the minimum scale to fit the page, separate from the viewport arguments
        - Make sure that the minimum scale to fit is adjusted if the contents size isn't
          updated after the viewport attributes changed
        - Make the scale conversion functions private to discourage this logic from spreading in the client

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::PageViewportController):
        (WebKit::PageViewportController::innerBoundedViewportScale):
        (WebKit::PageViewportController::outerBoundedViewportScale):
        (WebKit):
        (WebKit::PageViewportController::devicePixelRatio):
        (WebKit::PageViewportController::didChangeContentsSize):
        (WebKit::PageViewportController::didChangeViewportAttributes):
        (WebKit::PageViewportController::resumeContent):
        (WebKit::PageViewportController::updateMinimumScaleToFit):
        * UIProcess/PageViewportController.h:
        (PageViewportController):
        (WebKit::PageViewportController::minimumContentsScale):
        (WebKit::PageViewportController::maximumContentsScale):
        (WebKit::PageViewportController::currentContentsScale):
        (WebKit::PageViewportController::fromViewportScale):
        (WebKit::PageViewportController::toViewportScale):
        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::focusEditableArea):
        (WebKit::PageViewportControllerClientQt::zoomToAreaGestureEnded):
        (WebKit::PageViewportControllerClientQt::nearestValidVisibleContentsRect):
        (WebKit::PageViewportControllerClientQt::setContentsRectToNearestValidBounds):
        (WebKit::PageViewportControllerClientQt::pinchGestureRequestUpdate):

2012-09-25  Simon Pena  <spena@igalia.com>

        [GTK] Fix typo in accessing union field in a GdkEvent in a WebKit2 unit test
        https://bugs.webkit.org/show_bug.cgi?id=97564

        Reviewed by Martin Robinson.

        In the WebViewTest::moveMouseTo method, the wrong field in
        a union was being accessed in a GdkEvent: instead of the button
        field, we were supposed to act on the motion one. This patch
        fixes the typo.

        * UIProcess/API/gtk/tests/WebViewTest.cpp:
        (WebViewTest::mouseMoveTo):

2012-09-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitFindController
        https://bugs.webkit.org/show_bug.cgi?id=96775

        Reviewed by Gustavo Noronha Silva.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitFindController.cpp:
        (getPage):
        (webkitFindControllerConstructed):
        (webKitFindControllerPerform):
        (webkit_find_controller_search_next):
        (webkit_find_controller_search_previous):
        (webkit_find_controller_search_finish):

2012-09-25  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Apply the devicePixelRatio as soon as possible
        https://bugs.webkit.org/show_bug.cgi?id=97211

        Reviewed by Kenneth Rohde Christiansen.

        Having to wait for the contents size to apply the devicePixelRatio can
        be problematic since the devicePixelRatio affects the layout width, which
        then affects the contents size.

        Fix the initial issue that this was working around by preventing the
        early return if useFixedLayout() is true.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::QQuickWebViewPrivate):
        (QQuickWebViewFlickablePrivate::didChangeContentsSize):
        (QQuickWebViewExperimental::devicePixelRatio):
        (QQuickWebViewExperimental::setDevicePixelRatio):
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate::didChangeContentsSize):
        (QQuickWebViewPrivate):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::sendUpdateBackingStoreState):

2012-09-25  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Don't render at scale 1.0 when doing a pinch-zoom out
        https://bugs.webkit.org/show_bug.cgi?id=97212

        Reviewed by Kenneth Rohde Christiansen.

        When the user starts pinching this creates extra rendering that is bound to the
        page size and can be considerably big, reducing performance and peaking the tile
        memory usage.

        Fixing this might require a different approach that we could experiment with.

        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::animateContentRectVisible):
        (WebKit::PageViewportControllerClientQt::pinchGestureRequestUpdate):

2012-09-25  Michael Brüning  <michael.bruning@digia.com>

        [Qt][WK2] Focus out is not handled properly
        https://bugs.webkit.org/show_bug.cgi?id=96997

        Reviewed by Simon Hausmann.

        Adds a handler for QQuickWebView::itemChange event that is sent to
        QQuickItems when their focus has been changed to replace focusOutEvent.

        This fixes the problem because the focus has been updated when
        itemChange is called, while it is not yet update when focusOutEvent
        is called.

        * UIProcess/API/qt/qquickwebview.cpp: Removed focusOutEvent.
        (QQuickWebView::itemChange): Added in place of focusOutEvent.
        * UIProcess/API/qt/qquickwebview_p.h:
        * UIProcess/qt/QtWebPageEventHandler.cpp:
        (WebKit::QtWebPageEventHandler::handleFocusLost): Renamed from handleFocusOutEvent, parameter removed.
        * UIProcess/qt/QtWebPageEventHandler.h:
        (QtWebPageEventHandler):

2012-09-25  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] Supported media MIME types are not included to the list of shown MIME types.
        https://bugs.webkit.org/show_bug.cgi?id=97552

        Reviewed by Kenneth Rohde Christiansen.

        Added supported media MIME types to the list of shown MIME types in order to fix
        media tests regression after r129479.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::canShowMIMEType):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCanShowMIMEType):

2012-09-25  KwangYong Choi  <ky0.choi@samsung.com>

        [EFL][WK2] Added hideColorPicker test case
        https://bugs.webkit.org/show_bug.cgi?id=97522

        Reviewed by Kenneth Rohde Christiansen.

        Added a test case for removing input element during color picker is shown.

        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (setColorPickerColor):
        (showColorPicker):
        (hideColorPicker):
        (TEST_F):

2012-09-25  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][WTR] WTR bundle client loads binary data as text
        https://bugs.webkit.org/show_bug.cgi?id=97532

        Reviewed by Kenneth Rohde Christiansen.

        Added WKBundlePageCanShowMIMEType() function to WKBundlePage private API.
        This function is put to WKBundlePage to keep consistency with WebKit::WebPageProxy::canShowMIMEType().
        Actually it does not need anything from page.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCanShowMIMEType):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:

2012-09-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitWebView
        https://bugs.webkit.org/show_bug.cgi?id=96767

        Reviewed by Gustavo Noronha Silva.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitContextMenuClient.cpp:
        (getContextMenuFromProposedMenu):
        * UIProcess/API/gtk/WebKitResourceLoadClient.cpp:
        (didInitiateLoadForResource):
        * UIProcess/API/gtk/WebKitUIClient.cpp:
        (createNewPage):
        (runJavaScriptPrompt):
        (mouseDidMoveOverElement):
        (printFrame):
        * UIProcess/API/gtk/WebKitURIRequest.cpp:
        (webkitURIRequestCreateForResourceRequest):
        (webkitURIRequestGetResourceRequest):
        * UIProcess/API/gtk/WebKitURIRequestPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (allowModalDialogsChanged):
        (zoomTextOnlyChanged):
        (webkitWebViewSetSettings):
        (webkitWebViewConstructed):
        (webkitWebViewUpdateURI):
        (webkitWebViewCreateNewPage):
        (webkitWebViewRunJavaScriptPrompt):
        (webkitWebViewMouseTargetChanged):
        (webkitWebViewPrintFrame):
        (webkitWebViewResourceLoadStarted):
        (webkitWebViewPopulateContextMenu):
        (webkit_web_view_load_uri):
        (webkit_web_view_load_html):
        (webkit_web_view_load_alternate_html):
        (webkit_web_view_load_plain_text):
        (webkit_web_view_load_request):
        (webkit_web_view_reload):
        (webkit_web_view_reload_bypass_cache):
        (webkit_web_view_stop_loading):
        (webkit_web_view_go_back):
        (webkit_web_view_can_go_back):
        (webkit_web_view_go_forward):
        (webkit_web_view_can_go_forward):
        (webkit_web_view_get_custom_charset):
        (webkit_web_view_set_custom_charset):
        (webkit_web_view_go_to_back_forward_list_item):
        (webkit_web_view_set_settings):
        (webkit_web_view_set_zoom_level):
        (webkit_web_view_get_zoom_level):
        (webkit_web_view_can_execute_editing_command):
        (webkit_web_view_execute_editing_command):
        (webkit_web_view_run_javascript):
        (webkit_web_view_get_inspector):
        (webkit_web_view_can_show_mime_type):
        (ViewSaveAsyncData):
        (getContentsAsMHTMLDataCallback):
        (webkit_web_view_save):
        (webkit_web_view_save_finish):
        (webkit_web_view_save_to_file):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseCreate):
        (webkitWebViewBaseCreateWebPage):
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/API/gtk/WebKitWebViewPrivate.h:

2012-09-24  Bo Liu  <boliu@chromium.org>

        Reland "Add in-place reload behavior to ImagesEnabled setting" with optimizations
        https://bugs.webkit.org/show_bug.cgi?id=97055

        Reviewed by Adam Barth.

        Relanding 128780, 128676, 128645. Was reverted in 128914 due to
        performance regression in Chromium.

        New changes in addition to previously reverted patches:

        Refactored CachedResource::requestResource, loadResource, and
        revalidateResource. Moved CachedResource::load method to end of
        requestResource so there is one place where load is called for all
        resources.

        Added a enum parameter for requestResource and
        determineRevalidationPolicy so that FrameLoaderClient::allowImage call
        do not need to be called multiple times.

        Removed CachedImage::load call in requestImage so it is not called
        twice.

        Removed unnecessary Frame.h includes in CachedResource and
        CachedImage.

        Removed dead load() method declaration in CachedImage.

        Updated text expectation for two image-permissions tests to reflect
        the removed calls to allowImage.

        * win/WebKit2.def:

2012-09-24  Sam Weinig  <sam@webkit.org>

        WKProcessGroup can't load injected bundle with file URL
        <rdar://problem/12322774>
        https://bugs.webkit.org/show_bug.cgi?id=97520

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKProcessGroup.mm:
        (-[WKProcessGroup initWithInjectedBundleURL:]):
        Fix typo. We need to pass the string as path, not as a URL.

2012-09-24  Sam Weinig  <sam@webkit.org>

        Use NSUserDefaults rather than an environment variable to control whether to use an XPC Service for the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=97514

        Reviewed by Anders Carlsson.

        * GNUmakefile.list.am:
        * PlatformEfl.cmake:
        * Target.pri:
        Add new files.

        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::connect):
        Move platform specific launch options to a new function, platformConnect.

        * UIProcess/WebProcessProxy.h:
        * UIProcess/efl/WebProcessProxyEfl.cpp: Added.
        Move Efl specific launch options here.
 
        (WebKit::WebProcessProxy::platformConnect):
        * UIProcess/gtk/WebProcessProxyGtk.cpp: Added.
        Add stub.

        (WebKit::WebProcessProxy::platformConnect):
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::platformConnect):
        Move Mac specific launch option setting here, and switch from
        using an environment variable to NSUserDefaults.

        * UIProcess/qt/WebProcessProxyQt.cpp: Added.
        (WebKit::WebProcessProxy::platformConnect):
        Add stub.

        * UIProcess/win/WebProcessProxyWin.cpp:
        (WebKit::WebProcessProxy::platformConnect):
        Add stub.

2012-09-24  Laszlo Gombos  <l.gombos@samsung.com>

        [GTK][EFL] Remove cairo prefix from include statements
        https://bugs.webkit.org/show_bug.cgi?id=97509

        Reviewed by Gyuyoung Kim.

        Make the build system consistent by always assuming that directory 
        that includes the cairo headers is included in the include path.

        * UIProcess/cairo/BackingStoreCairo.cpp:
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:

2012-09-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r129388.
        http://trac.webkit.org/changeset/129388
        https://bugs.webkit.org/show_bug.cgi?id=97477

        Caused an assertion in a WebKit2 unit test (Requested by
        abarth on #webkit).

        * win/WebKit2.def:

2012-09-24  Simon Pena  <spena@igalia.com>

        [GTK] Add Select All method to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=97460

        Reviewed by Martin Robinson.

        Following the same approach used when added Cut, Copy and Paste,
        the Select All method is added to the WebKit2 GTK+ API.

        This introduces a new macro in the WebKitEditingCommands,
        updates the documentation, and includes a new unit test.

        * UIProcess/API/gtk/WebKitEditingCommands.h: Add a new macro for
        the Select All command.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Include the Select All
        command in the documentation.
        * UIProcess/API/gtk/tests/TestWebViewEditor.cpp: Cover the new command
        with a unit test.
        (testWebViewEditorSelectAll):
        (beforeAll):

2012-09-24  Bo Liu  <boliu@chromium.org>

        Reland "Add in-place reload behavior to ImagesEnabled setting" with optimizations
        https://bugs.webkit.org/show_bug.cgi?id=97055

        Reviewed by Adam Barth.

        Relanding 128780, 128676, 128645. Was reverted in 128914 due to
        performance regression in Chromium.

        New changes in addition to previously reverted patches:

        Refactored CachedResource::requestResource, loadResource, and
        revalidateResource. Moved CachedResource::load method to end of
        requestResource so there is one place where load is called for all
        resources.

        Added a enum parameter for requestResource and
        determineRevalidationPolicy so that FrameLoaderClient::allowImage call
        do not need to be called multiple times.

        Removed CachedImage::load call in requestImage so it is not called
        twice.

        Removed unnecessary Frame.h includes in CachedResource and
        CachedImage.

        Removed dead load() method declaration in CachedImage.

        Updated text expectation for two image-permissions tests to reflect
        the removed calls to allowImage.

        * win/WebKit2.def:

2012-09-24  Joone Hur  <joone.hur@intel.com>, Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK] Implement GraphicsLayer using Clutter
        https://bugs.webkit.org/show_bug.cgi?id=73767

        Reviewed by Martin Robinson.

        Fixed link errors by adding Clutter library and header to WebKit2 build.

        * GNUmakefile.am:

2012-09-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitWebView:is-loading is not updated when the is loaded is started by link clicked navigation action
        https://bugs.webkit.org/show_bug.cgi?id=97458

        Reviewed by Xan Lopez.

        WebKitWebView:is-loading is set to TRUE when the load is started
        by using the API. We want to make sure that both URI and
        is-loading are updated before load-started is emitted, so we can
        update both right before emitting load-started.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewEmitLoadChanged): Update both uri and is-loading
        properties before emitting load-changed signal with
        WEBKIT_LOAD_STARTED.
        (webkit_web_view_load_uri): Don't call
        webkitWebViewSetIsLoading().
        (webkit_web_view_load_html): Ditto.
        (webkit_web_view_load_alternate_html): Ditto.
        (webkit_web_view_load_plain_text): Ditto.
        (webkit_web_view_load_request): Ditto.
        (webkit_web_view_reload): Ditto.
        (webkit_web_view_reload_bypass_cache): Ditto.
        (webkit_web_view_go_back): Ditto.
        (webkit_web_view_go_forward): Ditto.
        (webkit_web_view_go_to_back_forward_list_item): Ditto.

2012-09-24  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL][WK2] Change the install path for libewk2UnitTestInjectedBundleSample.so.
        https://bugs.webkit.org/show_bug.cgi?id=97302

        Reviewed by Gyuyoung Kim.

        libewk2UnitTestInjectedBundleSample.so file is created under the
        Source directory.
        Change install directory for the library to under the build directory.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.cpp:
        (EWK2UnitTest::EWK2UnitTestEnvironment::injectedBundleSample):

2012-09-24  Vivek Galatage  <vivekgalatage@gmail.com>

        Web Inspector: implement testing harness for pure protocol tests.
        https://bugs.webkit.org/show_bug.cgi?id=90675

        Reviewed by Yury Semikhatsky.

        Adding the export symbol definitions required on Apple Windows and WinCairo
        ports to support Inspector Protocol testing harness.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-09-24  KwangYong Choi  <ky0.choi@samsung.com>

        [EFL][WK2] Invalid featuring of INPUT_TYPE_COLOR in test_ewk2_view.
        https://bugs.webkit.org/show_bug.cgi?id=97430

        Reviewed by Kenneth Rohde Christiansen.

        The tests of ewk_view_context_get and ewk_view_feed_touch_event are not related to
        INPUT_TYPE_COLOR. These tests should be moved to outside of INPUT_TYPE_COLOR block.

        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2012-09-23  Seokju Kwon  <seokju.kwon@samsung.com>

        [EFL][WK2] Add setting to toggle developer extensions
        https://bugs.webkit.org/show_bug.cgi?id=96974

        Reviewed by Kenneth Rohde Christiansen.

        This is required to allow the user to inspect pages. (Web inspector)

        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_developer_extras_enabled_set):
        (ewk_settings_developer_extras_enabled_get):
        * UIProcess/API/efl/ewk_settings.h:
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F):

2012-09-23  Byungwoo Lee  <bw80.lee@gmail.com>

        Fix build warnings : -Wunused-parameter, -Wparentheses, -Wuninitialized.
        https://bugs.webkit.org/show_bug.cgi?id=97306

        Reviewed by Benjamin Poulain.

        Fix build warning about -Wunused-parameter on Connection.cpp,
        WKEinaSharedString.cpp, ewk_view_loader_client.cpp, WebPage.cpp by
        using ASSERT_UNUSED() macro or removing parameter name.
        Fix build warning about -Wuninitialized on WebEventFactory.cpp by
        continueing the loop at the default switch case not to use the
        uninitialized variable.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::waitForSyncReply):
        * Shared/efl/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebTouchEvent):
        * UIProcess/API/cpp/efl/WKEinaSharedString.cpp:
        (WKEinaSharedString::WKEinaSharedString):
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        (didSameDocumentNavigationForFrame):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::SandboxExtensionTracker::beginLoad):

2012-09-22  Sam Weinig  <sam@webkit.org>

        Install WebProcess XPC services into the right places
        https://bugs.webkit.org/show_bug.cgi?id=97385

        Reviewed by Anders Carlsson.

        * Configurations/WebProcessService.xcconfig:
        Update INSTALL_PATH to go into WebKit2.framework/Versions/A/XPCServices.

        * Configurations/WebProcessServiceForWebKitDevelopment.xcconfig:
        Since this config file is almost identical to WebProcessService.xcconfig,
        just #include it and change the one thing that is different, the INFOPLIST_FILE
        
        * WebKit2.xcodeproj/project.pbxproj:
        Follow XPC procedure and copy the services into the right place, WebKit2.framework/Versions/A/XPCServices
        in all builds except production builds where it is not necessary. Also add a symlink like everyone else
        does.

2012-09-22  Sam Weinig  <sam@webkit.org>

        Allow setting a custom path to where the plug-in sandbox profiles are being kept
        https://bugs.webkit.org/show_bug.cgi?id=97399

        Reviewed by Anders Carlsson.

        Add a new default to allow controlling where to look for plug-in sandbox profiles
        called "PlugInSandboxProfileDirectoryPath".

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::initializeSandbox):
        Use the passed in sandboxProfileDirectoryPath instead of hard coding /usr/share/sandbox/.

        (WebKit::PluginProcess::platformInitialize):
        * Shared/Plugins/PluginProcessCreationParameters.cpp:
        (WebKit::PluginProcessCreationParameters::encode):
        (WebKit::PluginProcessCreationParameters::decode):
        * Shared/Plugins/PluginProcessCreationParameters.h:
        (PluginProcessCreationParameters):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::platformInitializePluginProcess):
        Grab the sandboxProfileDirectoryPath from standardUserDefaults and pass it to
        the plug-in.

2012-09-21  Sam Weinig  <sam@webkit.org>

        Fix the Lion and Snow Leopard builds.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToWebProcessServiceForWebKitDevelopment):
        (WebKit::createWebProcessServiceForWebKitDevelopment):
        (WebKit::createWebProcessService):

2012-09-21  Sam Weinig  <sam@webkit.org>

        WebProcess XPC services need have their environment set without disrupting all other XPC services
        https://bugs.webkit.org/show_bug.cgi?id=95161

        Reviewed by Anders Carlsson.

        Replace the WebKit2Service with two new XPC services, the WebProcessService, which is only used
        when installed on the system, and the WebProcessServiceForWebKitDevelopment which is used at all
        other times. We need both services because XPC can't in general be configured to have a custom
        environment at runtime, and thus WebProcessServiceForWebKitDevelopment has the ability to re-exec
        itself into a desired state. That capability is rather undesirable for installed usage, where we
        don't want to allow arbitrary changes to the environment of the service, which would allow breaking
        the App Sandbox.

        * Configurations/WebProcessService.xcconfig: Copied from Source/WebKit2/Configurations/WebKit2Service.xcconfig.
        * Configurations/WebProcessServiceForWebKitDevelopment.xcconfig: Renamed from Source/WebKit2/Configurations/WebKit2Service.xcconfig.
        Add new configuration files.

        * Platform/mac/WorkQueueMac.cpp:
        (WorkQueue::registerMachPortEventHandler):
        (WorkQueue::unregisterMachPortEventHandler):
        Add helpful assertions. Without them, we confusingly crash a bit later in HashTable code.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::addDYLDEnvironmentAdditions):
        Factor out environment additions to this helper function.

        (WebKit::connectToWebProcessServiceForWebKitDevelopment):
        (WebKit::createWebProcessServiceForWebKitDevelopment):
        Add functionality to setup the webkit development service via re-exec.

        (WebKit::createWebProcessService):
        Add functionality to connect to the installed WebProcess service.
        
        (WebKit::createProcess):
        Factor out posix_spawn based launching into this helper function.

        (WebKit::ProcessLauncher::launchProcess):
        Call the correct process creation function based on launch data and install state.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new files to the project.

        * WebProcess/mac/WebProcessServiceEntryPoints.h: Renamed from Source/WebKit2/WebProcess/mac/WebProcessXPCServiceMain.h.
        * WebProcess/mac/WebProcessServiceEntryPoints.mm: Renamed from Source/WebKit2/WebProcess/mac/WebProcessXPCServiceMain.mm.
        (WebKit::WebProcessServiceEventHandler):
        (WebProcessServiceMain):
        (InitializeWebProcessForWebProcessServiceForWebKitDevelopment):
        Rename to WebProcessServiceEntryPoints since this is now used for both the WebProcessService and the 
        WebProcessServiceForWebKitDevelopment.
    
        * WebProcessService/Info.plist: Copied from Source/WebKit2/WebKit2Service/Info.plist.
        * WebProcessService/WebProcessServiceMain.mm: Renamed from Source/WebKit2/WebKit2Service/MainMacService.mm.
        Add main for the WebProcessService which just calls into the WebProcessServiceEntryPoints in WebKit2.framework.

        * WebProcessServiceForWebKitDevelopment/Info.plist: Renamed from Source/WebKit2/WebKit2Service/Info.plist.
        * WebProcessServiceForWebKitDevelopment/WebProcessServiceForWebKitDevelopmentMain.mm: Added.
        Add main for the WebProcessServiceForWebKitDevelopment, which can't just call directly into WebProcessServiceEntryPoints
        as the framework path might not be set up correctly. This is also where we re-exec ourselves when required.

2012-09-21  Anders Carlsson  <andersca@apple.com>

        Fix WebKit2 sandbox profile.

        Instead of using #pragmas, just disable all warnings in DerivedSources.make. I suspect
        that passing -traditional to the preprocessor disables support for #pragmas but I'm afraid
        to change it to something else.

        * DerivedSources.make:
        * WebProcess/com.apple.WebProcess.sb.in:

2012-09-21  Benjamin Poulain  <bpoulain@apple.com>

        fast/dom/Geolocation/disconnected-frame.html test asserts
        https://bugs.webkit.org/show_bug.cgi?id=97376

        Reviewed by Alexey Proskuryakov.

        In GeolocationPermissionRequestManager::cancelRequestForGeolocation, we access an iterator
        after its value has been removed from the table.
        There are two problems with that:
        -The iterator is no longer valid after the container has been modified.
        -If it was the last element, the table has been freed and the iterator points to deleted memory.

        We solve the issue by keeping a copy of the ID. We could have inverted the order of the calls
        but that would make the issue less visible for future change.

        Testing covered by fast/dom/Geolocation/disconnected-frame.html.

        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        (WebKit::GeolocationPermissionRequestManager::cancelRequestForGeolocation):

2012-09-21  Sam Weinig  <sam@webkit.org>

        REGRESSION (r120361) Warnings while preprocessing com.apple.WebProcess.sb.in
        https://bugs.webkit.org/show_bug.cgi?id=91079
        <rdar://problem/12332660>

        Reviewed by Anders Carlsson.

        * WebProcess/com.apple.WebProcess.sb.in:
        Add pragma to ignore the invalid preprocessor warnings.

2012-09-21  Chris Rogers  <crogers@google.com>

        Add Web Audio support for deprecated/legacy APIs
        https://bugs.webkit.org/show_bug.cgi?id=97050

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig:

2012-09-21  Benjamin Poulain  <bpoulain@apple.com>

        [WK2] Add basic testing support for Geolocation
        https://bugs.webkit.org/show_bug.cgi?id=97278

        Reviewed by Kenneth Rohde Christiansen.

        * Shared/API/c/WKNumber.h: Fix an unfortunate copy-paste :)

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):
        Remove the code forcing the Geolocation permissions. It was working around the normal
        Geolocation code and updating all the GeolocationController, which is a terrible idea.

2012-09-21  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Make Web Inspector work in multiple web process mode
        https://bugs.webkit.org/show_bug.cgi?id=97354

        Reviewed by Timothy Hatcher.

        * UIProcess/mac/WebInspectorProxyMac.mm: (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        Tell WKView that it's related to original page, making inspector page be in the same process.

2012-09-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement ViewState methods in PageClientImpl in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=97202

        Reviewed by Martin Robinson.

        Implement isViewWindowActive(), isViewFocused(), isViewVisible()
        and isViewInWindow() in PageClientImpl.

        * GNUmakefile.list.am: Add new files to compilation.
        * UIProcess/API/C/gtk/WKView.cpp:
        (WKViewSetFocus): New private method used by WTR to focus the
        WebView.
        * UIProcess/API/C/gtk/WKViewPrivate.h: Added.
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::isViewWindowActive): Return
        webkitWebViewBaseIsInWindowActive().
        (WebKit::PageClientImpl::isViewFocused): Return
        webkitWebViewBaseIsFocused().
        (WebKit::PageClientImpl::isViewVisible): Return
        webkitWebViewBaseIsVisible().
        (WebKit::PageClientImpl::isViewInWindow): Return
        webkitWebViewBaseIsInWindow().
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseNotifyResizerSize): Updated to not receive the
        window as parameter since it's now saved in the instance struct.
        (toplevelWindowResizeGripVisibilityChanged): Update to
        webkitWebViewBaseNotifyResizerSize() API change.
        (toplevelWindowFocusInEvent): Update ViewWindowIsActive flag and
        notify the WebPageProxy if it changed.
        (toplevelWindowFocusOutEvent): Ditto.
        (webkitWebViewBaseSetToplevelOnScreenWindow): Set the toplevel
        on-screen window where the view is currently added and notify
        WebPageProxy if it changed.
        (webkitWebViewBaseRealize): Call
        webkitWebViewBaseSetToplevelOnScreenWindow() if the view has been
        added to an on-screen window.
        (webkitWebViewBaseFinalize): Reset the toplevel on-screen window
        to make sure all signals are disconnected when the view is
        destroyed.
        (webkit_web_view_base_init): Remove unneeded initialization.
        (resizeWebKitWebViewBaseFromAllocation): Update to
        webkitWebViewBaseNotifyResizerSize() API change.
        (webkitWebViewBaseMap): Update ViewIsVisible flag and notify
        WebPageProxy if it changed.
        (webkitWebViewBaseUnmap): Ditto.
        (webkitWebViewBaseFocusInEvent): Call webkitWebViewBaseSetFocus()
        passing true to focus the view.
        (webkitWebViewBaseFocusOutEvent): Call webkitWebViewBaseSetFocus()
        passing false to unfocus the view.
        (webkitWebViewBaseParentSet): Reset the toplevel on-screen window
        if the view is re-parented.
        (webkit_web_view_base_class_init): Add implementations for map and
        parent-set virtual functions.
        (webkitWebViewBaseSetFocus): Update the ViewIsFocused and notify
        WebPageProxy if it changed.
        (webkitWebViewBaseIsInWindowActive):
        (webkitWebViewBaseIsFocused):
        (webkitWebViewBaseIsVisible):
        (webkitWebViewBaseIsInWindow):
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
        (testWebViewMouseTarget): Use a GTK_WINDOW_TOPLEVEL instead of
        POPUP for this test to make sure the view receives focus change
        events.

2012-09-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add WebKitWebView:is-loading property to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=97330

        Reviewed by Xan Lopez.

        WebKitWebView:is-loading property allows to monitor when the view
        is loading something without having to deal with load-changed
        signal and all the details of the load status. This also allows to
        know when a new load is started before it goes to STARTED status.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewGetProperty): Implement getter for is-loading
        property.
        (webkit_web_view_class_init): Add is-loading property.
        (webkitWebViewSetIsLoading): Set whether web view is loading a
        page and emit notify signal if the is-loading property has
        changed. Also update the active URI when a new load operation has
        started.
        (webkitWebViewEmitLoadChanged): Set is-loading to FALSE when load
        finishes.
        (webkitWebViewLoadFailed): Set is-loading to FALSE when load fails.
        (webkit_web_view_load_uri): Set is-loading to TRUE.
        (webkit_web_view_load_html): Ditto.
        (webkit_web_view_load_alternate_html): Ditto.
        (webkit_web_view_load_plain_text): Ditto.
        (webkit_web_view_load_request): Ditto.
        (webkit_web_view_reload): Ditto.
        (webkit_web_view_reload_bypass_cache): Ditto.
        (webkit_web_view_is_loading): Return whether the view is loading a
        page.
        (webkit_web_view_go_back): Set is-loading to TRUE.
        (webkit_web_view_go_forward): Ditto.
        (webkit_web_view_go_to_back_forward_list_item): Ditto.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbol.
        * UIProcess/API/gtk/tests/LoadTrackingTest.cpp:
        (loadChangedCallback):
        (loadFailedCallback):
        * UIProcess/API/gtk/tests/TestLoaderClient.cpp:
        (testWebViewIsLoading):
        (beforeAll):

2012-09-20  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Add API to feed touch event.
        https://bugs.webkit.org/show_bug.cgi?id=96903

        Reviewed by Kenneth Rohde Christiansen.

        The applications will use this API to feed touch event to the view
        when they want to generate touch event from their own event processor.
        WTR also will use this API to generate touch event with multiple touch
        points for passing test cases of touch event in the WebKit2/EFL.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_feed_touch_event):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2012-09-20  Patrick Gansterer  <paroga@webkit.org>

        Add String::numberToStringFixedWidth()
        https://bugs.webkit.org/show_bug.cgi?id=96330

        Reviewed by Benjamin Poulain.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-09-17  Jon Lee  <jonlee@apple.com>

        Safari 6 notifications' onclick handlers can't call window.open()
        https://bugs.webkit.org/show_bug.cgi?id=96959
        <rdar://problem/12132427>

        Reviewed by Darin Adler.

        The click is not being treated as a user gesture when the message is sent to the web process.

        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::didClickNotification): Gets called when the user clicks on the
        platform notification. Set UserGestureIndicator to show the click event is due to user gesture.

2012-09-20  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Add APIs to create, delete and get ewk_context.
        https://bugs.webkit.org/show_bug.cgi?id=89186

        Reviewed by Kenneth Rohde Christiansen.

        Provide APIs to create ewk_context with or without injected bundle path
        and delete created ewk_context.
        Additionally, the ewk_view can be created with ewk_context which is not
        default context, so we have to get ewk_context from ewk_view.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::handleDownloadRequest):
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context):
        (_Ewk_Context::_Ewk_Context):
        (ewk_context_ref):
        (ewk_context_unref):
        (ewk_context_new):
        (ewk_context_new_with_injected_bundle_path):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::_Ewk_View_Private_Data):
        (_ewk_view_priv_del):
        (_ewk_view_initialize):
        (ewk_view_context_get):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/InjectedBundle/injected_bundle_sample.cpp: Added.
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.cpp:
        (EWK2UnitTest::EWK2UnitTestEnvironment::injectedBundleSample):
        (EWK2UnitTest):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.h:
        (EWK2UnitTestEnvironment):
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_cookie_manager.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2012-09-20  KwangYong Choi  <ky0.choi@samsung.com>

        [EFL][WK2] Implemented color picker API
        https://bugs.webkit.org/show_bug.cgi?id=91832

        Reviewed by Kenneth Rohde Christiansen.

        Add support for color picker API for EFL port in WebKit2.

        The external application can implement input picker by overriding
        smart class function.

        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::_Ewk_View_Private_Data):
        (ewk_view_color_picker_request):
        (ewk_view_color_picker_dismiss):
        (ewk_view_color_picker_color_set):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/ewk_view_ui_client.cpp:
        (showColorPicker):
        (hideColorPicker):
        (ewk_view_ui_client_attach):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (onColorPickerDone):
        (setColorPickerColor):
        (showColorPicker):
        (hideColorPicker):
        (TEST_F):

2012-09-20  Balazs Kelemen  <kbalazs@webkit.org>

        [CoordinatedGraphics] Don't reset m_shouldSyncFrame in flushPendingLayerChanges
        https://bugs.webkit.org/show_bug.cgi?id=97108

        Reviewed by Noam Rosenthal.

        Stop ignoring if m_shouldSyncFrame has been set between the two
        layer flush. It can be set during layout in several situations,
        for example when a layer is deleted or changed state. We want to
        send the DidRenderFrame message at the next flush in those situations
        so the UI process will apply the changes as soon as possible.

        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::flushPendingLayerChanges):

2012-09-20  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL][WK2] Check timeout on waitUntilLoadFinished() and waitUntilTitleChangedTo().
        https://bugs.webkit.org/show_bug.cgi?id=97081

        Reviewed by Gyuyoung Kim.

        Add assertion to check timeout on waitUntilLoadFinished() and
        waitUntilTitleChangedTo().
        Set the default timeout for the functions as 10 seconds.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        (EWK2UnitTestBase):
        * UIProcess/API/efl/tests/test_ewk2_back_forward_list.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2012-09-20  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL] Change the log macro names to be more consistent with EINA LOG
        https://bugs.webkit.org/show_bug.cgi?id=97158

        Reviewed by Kenneth Rohde Christiansen.

        Some log macro names in WebKit2 are inconsistent with EINA LOG names
        such as WRN/INF not WARN/INFO.

          #define WRN(...) EINA_LOG_DOM_WARN(_ewk_log_dom, __VA_ARGS__)
          #define INF(...) EINA_LOG_DOM_INFO(_ewk_log_dom, __VA_ARGS__)

        This patch changes the such names to be consistent with EINA LOG's names.

        * UIProcess/API/efl/ewk_main.cpp:
        (ewk_init):
        * UIProcess/API/efl/ewk_private.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_webprocess_crashed):

2012-09-20  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Same page navigation does not update view URI
        https://bugs.webkit.org/show_bug.cgi?id=97094

        Reviewed by Kenneth Rohde Christiansen.

        Handle didSameDocumentNavigationForFrame callback in
        WKPageLoaderClient in order to update the view URI.
        This fixes issues with the view URI not being updated
        in case of a same page navigation.

        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        (didSameDocumentNavigationForFrame):
        (ewk_view_loader_client_attach):
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (CallbackDataTimer):
        (EWK2UnitTest::CallbackDataTimer::CallbackDataTimer):
        (EWK2UnitTest::CallbackDataTimer::~CallbackDataTimer):
        (EWK2UnitTest::CallbackDataTimer::isDone):
        (EWK2UnitTest::CallbackDataTimer::setDone):
        (EWK2UnitTest::CallbackDataTimer::didTimeOut):
        (EWK2UnitTest::CallbackDataTimer::setTimedOut):
        (EWK2UnitTest):
        (CallbackDataExpectedValue):
        (EWK2UnitTest::CallbackDataExpectedValue::CallbackDataExpectedValue):
        (EWK2UnitTest::CallbackDataExpectedValue::expectedValue):
        (EWK2UnitTest::onLoadFinished):
        (EWK2UnitTest::timeOutWhileWaitingUntilLoadFinished):
        (EWK2UnitTest::EWK2UnitTestBase::waitUntilLoadFinished):
        (EWK2UnitTest::onTitleChanged):
        (EWK2UnitTest::timeOutWhileWaitingUntilTitleChangedTo):
        (EWK2UnitTest::EWK2UnitTestBase::waitUntilTitleChangedTo):
        (EWK2UnitTest::onURIChanged):
        (EWK2UnitTest::timeOutWhileWaitingUntilURIChangedTo):
        (EWK2UnitTest::EWK2UnitTestBase::waitUntilURIChangedTo): Add convenience function to test
        framework in order to wait until the view URI changes to a given value.
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        (EWK2UnitTestBase):
        * UIProcess/API/efl/tests/resources/same_page_navigation.html: Added.
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F): Add corresponding unit test to verify fix and prevent regressions
        in the future.

2012-09-19  Dan Bernstein  <mitz@apple.com>

        WebKit2 part of adding a setting and API for disabling screen font substitution
        https://bugs.webkit.org/show_bug.cgi?id=97168

        Reviewed by Tim Horton.

        * Shared/WebPreferencesStore.h:
        (WebKit): Defined ScreenFontSubstitutionEnabled key with a default value of true.
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetScreenFontSubstitutionEnabled): Added this setter.
        (WKPreferencesGetScreenFontSubstitutionEnabled): Added this getter.
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Added a call to Settings::setScreenFontSubstitutionEnabled
        to push the preference into Settings.

2012-09-19  Jinwoo Song  <jinwoo7.song@samsung.com>

        Fix unused parameter compile warnings in WebKit/WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=96742

        Reviewed by Gyuyoung Kim.

        Fix unused parameter compile warning messages(-Wunused-parameter) in WebKit2 during EFL build.
        WebCore's warning messages were fixed in r128570.

        * Shared/FontInfo.cpp:
        (WebKit::FontInfo::encode):
        (WebKit::FontInfo::decode):
        * Shared/PlatformPopupMenuData.cpp:
        (WebKit::PlatformPopupMenuData::encode):
        (WebKit::PlatformPopupMenuData::decode):
        * Shared/SandboxExtension.h:
        (WebKit::SandboxExtension::createHandleForTemporaryFile):
        * Shared/ShareableSurface.cpp:
        (WebKit::ShareableSurface::create):
        * Shared/WebMemorySampler.cpp:
        (WebKit::WebMemorySampler::appendCurrentMemoryUsageToFile):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetContentsAsMHTMLData):
        * UIProcess/API/C/WKPluginSiteDataManager.cpp:
        (WKPluginSiteDataManagerClearSiteData):
        (WKPluginSiteDataManagerClearAllSiteData):
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetHixie76WebSocketProtocolEnabled):
        (WKPreferencesGetHixie76WebSocketProtocolEnabled):
        * UIProcess/API/efl/BatteryProvider.cpp:
        (startUpdatingCallback):
        (stopUpdatingCallback):
        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::doneWithTouchEvent):
        * UIProcess/API/efl/VibrationProvider.cpp:
        (vibrateCallback):
        (cancelVibrationCallback):
        * UIProcess/API/efl/ewk_context_download_client.cpp:
        (decideDestinationWithSuggestedFilename):
        (didCreateDestination):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_on_focus_in):
        (_ewk_view_on_focus_out):
        (_ewk_view_on_mouse_wheel):
        (_ewk_view_on_mouse_down):
        (_ewk_view_on_mouse_up):
        (_ewk_view_on_mouse_move):
        (_ewk_view_on_key_down):
        (_ewk_view_on_key_up):
        (_ewk_view_smart_move):
        (ewk_view_contents_size_changed):
        * UIProcess/API/efl/ewk_view_find_client.cpp:
        (didFindString):
        * UIProcess/API/efl/ewk_view_form_client.cpp:
        (willSubmitForm):
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        (didReceiveIntentForFrame):
        (registerIntentServiceForFrame):
        (didFinishLoadForFrame):
        (didFailLoadWithErrorForFrame):
        (didStartProvisionalLoadForFrame):
        (didReceiveServerRedirectForProvisionalLoadForFrame):
        (didFailProvisionalLoadWithErrorForFrame):
        (didChangeBackForwardList):
        * UIProcess/API/efl/ewk_view_policy_client.cpp:
        (decidePolicyForNavigationAction):
        (decidePolicyForNewWindowAction):
        (decidePolicyForResponseCallback):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::update):
        (WebKit::DrawingAreaProxy::didUpdateBackingStoreState):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::didUpdateBackingStoreState):
        (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxyImpl::updateAcceleratedCompositingMode):
        * UIProcess/FindIndicator.cpp:
        (WebKit::FindIndicator::draw):
        * UIProcess/GeolocationPermissionRequestManagerProxy.cpp:
        (WebKit::GeolocationPermissionRequestManagerProxy::didReceiveGeolocationPermissionDecision):
        * UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp:
        (WebKit::PluginInfoStore::shouldUsePlugin):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::setHTTPPipeliningEnabled):
        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::supportsFullScreen):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::sessionStateData):
        (WebKit::WebPageProxy::recommendedScrollbarStyleDidChange):
        (WebKit::WebPageProxy::didBlockInsecurePluginVersion):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::createWebPage):
        * UIProcess/efl/TextCheckerEfl.cpp:
        (WebKit::TextChecker::continuousSpellCheckingEnabledStateChanged):
        (WebKit::TextChecker::grammarCheckingEnabledStateChanged):
        * UIProcess/efl/WebFullScreenManagerProxyEfl.cpp:
        (WebKit::WebFullScreenManagerProxy::beganEnterFullScreen):
        (WebKit::WebFullScreenManagerProxy::beganExitFullScreen):
        * UIProcess/efl/WebPageProxyEfl.cpp:
        (WebKit::WebPageProxy::standardUserAgent):
        (WebKit::WebPageProxy::getEditorCommandsForKeyEvent):
        * WebProcess/Downloads/soup/DownloadSoup.cpp:
        (WebKit::Download::start):
        (WebKit::Download::startWithHandle):
        (WebKit::Download::didDecideDestination):
        (WebKit::Download::receivedCredential):
        (WebKit::Download::receivedRequestToContinueWithoutCredential):
        (WebKit::Download::receivedCancellation):
        * WebProcess/Geolocation/WebGeolocationManager.cpp:
        (WebKit::WebGeolocationManager::didChangePosition):
        * WebProcess/IconDatabase/WebIconDatabaseProxy.cpp:
        (WebKit::WebIconDatabaseProxy::synchronousIconForPageURL):
        (WebKit::WebIconDatabaseProxy::synchronousIconURLForPageURL):
        (WebKit::WebIconDatabaseProxy::synchronousIconDataKnownForIconURL):
        (WebKit::WebIconDatabaseProxy::synchronousLoadDecisionForIconURL):
        (WebKit::WebIconDatabaseProxy::iconDataForIconURL):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameCopyWebArchiveFilteringSubframes):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKAccessibilityRootObject):
        (WKAccessibilityFocusedObject):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setGeoLocationPermission):
        (WebKit::InjectedBundle::didReceiveMessage):
        (WebKit::InjectedBundle::webNotificationID):
        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::initialize):
        (WebKit::WebNotificationManager::didUpdateNotificationDecision):
        (WebKit::WebNotificationManager::didRemoveNotificationDecisions):
        (WebKit::WebNotificationManager::policyForOrigin):
        (WebKit::WebNotificationManager::notificationIDForTesting):
        (WebKit::WebNotificationManager::show):
        (WebKit::WebNotificationManager::cancel):
        (WebKit::WebNotificationManager::clearNotifications):
        (WebKit::WebNotificationManager::didDestroyNotification):
        (WebKit::WebNotificationManager::didShowNotification):
        (WebKit::WebNotificationManager::didClickNotification):
        (WebKit::WebNotificationManager::didCloseNotifications):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::paint):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::addMessageToConsole):
        (WebKit::WebChromeClient::contentsSizeChanged):
        (WebKit::WebChromeClient::customHighlightRect):
        (WebKit::WebChromeClient::paintCustomHighlight):
        (WebKit::WebChromeClient::supportsFullScreenForElement):
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::downloadURL):
        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        (WebKit::WebDragClient::dragSourceActionMaskForPoint):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::shouldEraseMarkersAfterChangeSelection):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidCancelAuthenticationChallenge):
        (WebKit::WebFrameLoaderClient::dispatchDidLoadResourceFromMemoryCache):
        (WebKit::WebFrameLoaderClient::shouldStopLoadingForHistoryItem):
        (WebKit::WebFrameLoaderClient::canShowMIMEType):
        (WebKit::WebFrameLoaderClient::canShowMIMETypeAsHTML):
        (WebKit::WebFrameLoaderClient::representationExistsForURLScheme):
        (WebKit::WebFrameLoaderClient::generatedMIMETypeForURLScheme):
        (WebKit::WebFrameLoaderClient::createFrame):
        (WebKit::WebFrameLoaderClient::createJavaAppletWidget):
        (WebKit::WebFrameLoaderClient::registerForIconNotification):
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::drawRect):
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::forceRepaintAsync):
        (WebKit::DrawingArea::updateBackingStoreState):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::mouseEvent):
        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create):
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit::LayerTreeHost::forceRepaintAsync):
        * WebProcess/WebPage/TapHighlightController.cpp:
        (WebKit::TapHighlightController::drawRect):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::getWebArchiveOfFrame):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::getSitesWithPluginData):
        (WebKit::WebProcess::clearPluginSiteData):
        * WebProcess/soup/WebKitSoupRequestGeneric.cpp:
        (webkitSoupRequestGenericSendFinish):
        * WebProcess/soup/WebKitSoupRequestInputStream.cpp:
        (webkitSoupRequestInputStreamReadAsync):
        (webkitSoupRequestInputStreamReadFinish):

2012-09-19  Pratik Solanki  <psolanki@apple.com>

        Warning in SandboxExtension.h if WEB_PROCESS_SANDBOX is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=97137

        Reviewed by Benjamin Poulain.

        m_size is only used when WEB_PROCESS_SANDBOX is enabled, so move its declaration inside
        #if ENABLE(WEB_PROCESS_SANDBOX).

        * Shared/SandboxExtension.h:
        (HandleArray):

2012-09-19  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [WTR] Memory leaks in TestRunner::deliverWebIntent()
        https://bugs.webkit.org/show_bug.cgi?id=97111

        Reviewed by Kenneth Rohde Christiansen.

        Fix memory leaks in WKBundleIntentCreate() by adopting strings
        created with WKStringCreateWithUTF8CString().

        * WebProcess/InjectedBundle/API/c/WKBundleIntent.cpp:
        (WKBundleIntentCreate):

2012-09-19  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] fast/forms/select-writing-direction-natural.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=97082

        Reviewed by Kenneth Rohde Christiansen.

        WebChromeClient::selectItemWritingDirectionIsNatural() now returns
        true for EFL-WK2, consistently with EFL-WK1, so that the style
        is properly adjusted in RenderMenuList::adjustInnerStyle().

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::selectItemWritingDirectionIsNatural):

2012-09-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to get/set the security policy of a given URI scheme to WebKit2 GTK+
        https://bugs.webkit.org/show_bug.cgi?id=96497

        Reviewed by Martin Robinson.

        Add WebKitSecurityManager object associated to a WebKitWebContext
        to get/set the security policy of a URI scheme.

        * GNUmakefile.list.am: Add new files to compilation.
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode): Encode the list of
        schemes to be reigstered as Local, NoAccess, DisplayIsolated and
        CORSEnabled.
        (WebKit::WebProcessCreationParameters::decode): Decode the list of
        schemes to be reigstered as Local, NoAccess, DisplayIsolated and
        CORSEnabled.
        * Shared/WebProcessCreationParameters.h:
        (WebProcessCreationParameters): Add new parameters to be able to
        register schemes as Local, NoAccess, DisplayIsolated and
        CORSEnabled.
        * UIProcess/API/gtk/WebKitSecurityManager.cpp: Added.
        (webkit_security_manager_init):
        (webkitSecurityManagerFinalize):
        (webkit_security_manager_class_init):
        (webkitSecurityManagerCreate): Private function to create the
        WebKitSecurityManager object associated to the given
        WebKitWebContext.
        (registerSecurityPolicyForURIScheme):
        (checkSecurityPolicyForURIScheme):
        (webkit_security_manager_register_uri_scheme_as_local):
        (webkit_security_manager_uri_scheme_is_local):
        (webkit_security_manager_register_uri_scheme_as_no_access):
        (webkit_security_manager_uri_scheme_is_no_access):
        (webkit_security_manager_register_uri_scheme_as_display_isolated):
        (webkit_security_manager_uri_scheme_is_display_isolated):
        (webkit_security_manager_register_uri_scheme_as_secure):
        (webkit_security_manager_uri_scheme_is_secure):
        (webkit_security_manager_register_uri_scheme_as_cors_enabled):
        (webkit_security_manager_uri_scheme_is_cors_enabled):
        (webkit_security_manager_register_uri_scheme_as_empty_document):
        (webkit_security_manager_uri_scheme_is_empty_document):
        * UIProcess/API/gtk/WebKitSecurityManager.h: Added.
        * UIProcess/API/gtk/WebKitSecurityManagerPrivate.h: Added.
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_get_security_manager): Return the
        WebKitSecurityManager object, creating it before if it doesn't exist.
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add new section for
        WebKitSecurityManager.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.
        * UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:
        (testWebContextSecurityPolicy):
        (beforeAll):
        * UIProcess/API/gtk/webkit2.h: Add WebKitSecurityManager.h.
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess): Copy new vector
        schemes.
        (WebKit::WebContext::registerURLSchemeAsLocal): Send a message to
        WebProcess to register the given URL scheme as Local.
        (WebKit::WebContext::registerURLSchemeAsNoAccess): Send a message
        to WebProcess to register the given URL scheme as NoAccess.
        (WebKit::WebContext::registerURLSchemeAsDisplayIsolated): Send a
        message to WebProcess to register the given URL scheme as
        DisplayIsolated.
        (WebKit::WebContext::registerURLSchemeAsCORSEnabled): Send a
        message to WebProcess to register the given URL scheme as
        CORSEnabled.
        * UIProcess/WebContext.h:
        (WebContext):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::registerURLSchemeAsLocal): Register the
        given URL scheme as Local in the SchemeRegistry.
        (WebKit::WebProcess::registerURLSchemeAsNoAccess): Register the
        given URL scheme as NoAccess in the SchemeRegistry.
        (WebKit::WebProcess::registerURLSchemeAsDisplayIsolated): Register
        the given URL scheme as DisplayIsolated in the SchemeRegistry.
        (WebKit::WebProcess::registerURLSchemeAsCORSEnabled): Register the
        given URL scheme as CORSEnabled in the SchemeRegistry.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in: Add new messages.

2012-09-19  Balazs Kelemen  <kbalazs@webkit.org>

        [Texmap] Potential crash in TextureMapperLayer because of referencing deleted mask/replica layer
        https://bugs.webkit.org/show_bug.cgi?id=96919

        Reviewed by Noam Rosenthal.

        Delay syncing deleted layers until flushPendingLayerChanges so the UI side state
        will contain all changes related to the deletion of a layer. This saves us from
        referencing a deleted layer.

        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::flushPendingLayerChanges):
        (WebKit::LayerTreeCoordinator::detachLayer):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-09-19  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL][WK2] waitUntilTitleChangedTo() and waitUntilLoadFinished() needs timeout.
        https://bugs.webkit.org/show_bug.cgi?id=96910

        Reviewed by Kenneth Rohde Christiansen.

        Currently, the waitUntilTitleChangedTo() and waitUntilLoadFinished()
        functions doesn't handle timeout by itself.
        And if there are some failed cases that loading is not finished or
        title is not changed to the expected string, test case just stopped
        with timeout and there is no more information about this such as line
        number.

        To handle timeout status more properly, timeout parameter is added to
        these functions.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::LoadFinishedData::LoadFinishedData):
        (LoadFinishedData):
        (EWK2UnitTest::LoadFinishedData::~LoadFinishedData):
        (EWK2UnitTest):
        (EWK2UnitTest::onLoadFinished):
        (EWK2UnitTest::timeOutWhileWaitingUntilLoadFinished):
        (EWK2UnitTest::EWK2UnitTestBase::waitUntilLoadFinished):
        (EWK2UnitTest::TitleChangedData::TitleChangedData):
        (TitleChangedData):
        (EWK2UnitTest::TitleChangedData::~TitleChangedData):
        (EWK2UnitTest::onTitleChanged):
        (EWK2UnitTest::timeOutWhileWaitingUntilTitleChangedTo):
        (EWK2UnitTest::EWK2UnitTestBase::waitUntilTitleChangedTo):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        (EWK2UnitTestBase):

2012-09-18  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL][WK2] Add javascript popup API.
        https://bugs.webkit.org/show_bug.cgi?id=95672

        Reviewed by Gyuyoung Kim.

        Add smart class member function for javascript alert(), confirm() and prompt().

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_run_javascript_alert):
        (ewk_view_run_javascript_confirm):
        (ewk_view_run_javascript_prompt):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/ewk_view_ui_client.cpp:
        (runJavaScriptAlert):
        (runJavaScriptConfirm):
        (runJavaScriptPrompt):
        (ewk_view_ui_client_attach):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        Added unit test for javascript popup smart class member function.
        (checkAlert):
        (TEST_F):
        (checkConfirm):
        (checkPrompt):

2012-09-18  Sailesh Agrawal  <sail@chromium.org>

        Chromium: Scrollbar with tickmarks doesn't respond to clicks
        https://bugs.webkit.org/show_bug.cgi?id=96049

        Reviewed by Beth Dakin.

        Update exported symbols.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-09-18  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Add log macros for EINA_LOG_DOM_XXX series
        https://bugs.webkit.org/show_bug.cgi?id=97061

        Reviewed by Gyuyoung Kim.

        EFL Webkit2 is using the EINA_LOG_DOM_XXX series in several places to log a message on the specified domain and format.
        This patch adds log macros to simplify these logging codes.

        * UIProcess/API/efl/ewk_main.cpp:
        (ewk_init):
        * UIProcess/API/efl/ewk_private.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_webprocess_crashed):

2012-09-17  Martin Robinson  <mrobinson@igalia.com>

        [WebKit2] [GTK] Add API for controlling the user agent
        https://bugs.webkit.org/show_bug.cgi?id=95697

        Reviewed by Carlos Garcia Campos.

        Add API for changing the user agent in WebKit2. This adds two styles of
        setting the user agent: complete override and a method that just inserts
        the application name and version, but preserves the carefully crafted user agent
        in the library.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (_WebKitSettingsPrivate): Added a new field to store the user agent.
        This is stored in the private data structure, because we can only
        set the user agent when attaching the settings to the page.
        (webKitSettingsSetProperty): Add hooks for the new user agent property.
        (webKitSettingsGetProperty): Ditto.
        (webkit_settings_class_init): Ditto.
        (webkitSettingsAttachSettingsToPage): Ditto.
        (webkit_settings_get_user_agent): Added.
        (webkit_settings_set_user_agent): Added.
        (webkit_settings_set_user_agent_with_application_name): Added.
        * UIProcess/API/gtk/WebKitSettings.h: Added new methods.
        * UIProcess/API/gtk/WebKitWebView.cpp: Update the glue for the settings
        when attaching and detaching from WebViews.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Added new methods to
        the documentation.
        * UIProcess/API/gtk/tests/TestWebKitSettings.cpp: Test the new user agent
        property.
        (testWebKitSettingsUserAgent): Ditto.
        (beforeAll): Ditto.
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::standardUserAgent): Now use the shared WebCore
        code when setting the user agent.

2012-09-18  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Implement PageClientImpl::isViewFocused.
        https://bugs.webkit.org/show_bug.cgi?id=97015

        Reviewed by Gyuyoung Kim.

        WebKit2/Efl always returns true for PageClientImpl::isViewFocused.
        So window.onblur events will not be generated when webview lost focus.

        This patch implements isViewFocused to return the current focus of webview.

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::isViewFocused):

2012-09-18  Byungwoo Lee  <bw80.lee@samsung.com>

        Title string should be changed when document.title is set to ''.
        https://bugs.webkit.org/show_bug.cgi?id=96793

        Reviewed by Kenneth Rohde Christiansen.

        Added unit test for setting document.title and checking the title
        string with title,changed signal and ewk_view_title_get() function.

        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2012-09-18  Anders Carlsson  <andersca@apple.com>

        Division by zero crash in BackingStore::scroll
        https://bugs.webkit.org/show_bug.cgi?id=97046
        <rdar://problem/11722564>

        Reviewed by Dan Bernstein.

        It appears that DrawingAreaImpl::scroll can be called with an empty scroll rect. Do nothing
        if that's the case. Also, assert that the scrolling rect in BackingStoreMac is never empty.

        * UIProcess/mac/BackingStoreMac.mm:
        (WebKit::BackingStore::scroll):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::scroll):

2012-09-18  Bo Liu  <boliu@chromium.org>

        Revert 128780, 128676, 128645
        https://bugs.webkit.org/show_bug.cgi?id=97022

        Reviewed by Adam Barth.

        I made these revisions to add in-place reload behavior to ImagesEnabled setting.
        Reverting this for now due to them causing performance regression in
        chromium, possibly caused by increased calls to
        PermissionClient::imageAllowed.

        * win/WebKit2.def:

2012-09-18  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [WebKit2] Use XComposite window for accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=94417

        Reviewed by Carlos Garcia Campos.

        Instead of rendering directly to the widget's native window, render to an
        offscreen window redirected to a Pixmap with XComposite.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (_WebKitWebViewBasePrivate): Added a few members necessary to track the 
        offscreen window.
        (webkit_web_view_base_init):
        (renderAcceleratedCompositingResults): Added this helper functions which renders
        the results of the accelerated compositing operations during the GTK+ draw loop.
        (webkitWebViewBaseDraw): Call renderAcceleratedCompositingResults when appropriate.
        (resizeWebKitWebViewBaseFromAllocation): Resize the offscreen window when appropriate.
        (webkitWebViewBaseSizeAllocate): Do not call resizeWebKitWebViewBaseFromAllocation when
        the actual size of the widget does not change. This prevents destroying and recreating
        the offscreen window pixmap when it isn't necessary.
        (webkitWebViewBaseMap): We no longer send the window id during map, instead it's sent
        as soon as there is WebPageProxy.
        (webkitWebViewBaseCreateWebPage): Send the window id of the redirected window to
        the WebProcess.
        (queueAnotherDrawOfAcceleratedCompositingResults): Added this helper which works
        around the issue of slow updates of the pixmap backing the redirected XComposite window.
        (webkitWebViewBaseQueueDrawOfAcceleratedCompositingResults): Added this method which
        is what the WebProcess uses to force a redraw on the UIProcess side.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h: Added new method to the list of private methods.
        * UIProcess/DrawingAreaProxyImpl.h:
        (DrawingAreaProxyImpl):
        (WebKit::DrawingAreaProxyImpl::isInAcceleratedCompositingMode): Exposed this method publically
        so that it can be used from WebKitWebViewBase.
        * UIProcess/WebPageProxy.h:
        (WebPageProxy): Renamed widgetMapped to setAcceleratedCompositingWindowId.
        * UIProcess/WebPageProxy.messages.in: Ditto.
        * UIProcess/gtk/WebPageProxyGtk.cpp: Ditto.
        (WebKit::WebPageProxy::setAcceleratedCompositingWindowId):
        * WebProcess/WebPage/WebPage.h:
        (WebPage): Ditto.
        * WebProcess/WebPage/WebPage.messages.in: Ditto.
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::sizeDidChange): Force a composite to the resized window right
        away so that the new window pixmap is updated before the first draw.
        (WebKit::LayerTreeHostGtk::compositeLayersToContext): If the composition is for a resize,
        first clear the entire GL context so that we don't see black artifacts during resize.
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:
        (LayerTreeHostGtk): Update the signature of  compositeLayersToContext.
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::setAcceleratedCompositingWindowId): Added.

2012-09-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r128849.
        http://trac.webkit.org/changeset/128849
        https://bugs.webkit.org/show_bug.cgi?id=97007

        Causes test_ewk2_view to time out. (Requested by rakuco on
        #webkit).

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_webprocess_crashed):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/ewk_view_ui_client.cpp:
        (ewk_view_ui_client_attach):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2012-09-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Set the area of tooltips in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=96618

        Reviewed by Martin Robinson.

        In GTK+ tooltips are associated to a widget, if the mouse is moved
        inside the widget area, the tooltip position doesn't change even
        if the tooltip text changes. To support multiple tooltips for the
        same widget, we need to set the area of the widget for every
        tooltip.

        * Shared/WebHitTestResult.cpp:
        (WebKit::WebHitTestResult::Data::encode): Encode elementBoundingBox.
        (WebKit::WebHitTestResult::Data::decode): Decode elementBoundingBox.
        * Shared/WebHitTestResult.h:
        (Data): Add elementBoundingBox to WebHitTestResult::Data.
        (WebKit::WebHitTestResult::Data::elementBoundingBoxInWindowCoordinates):
        Get the bounding box of the inner non shared node of the hit test
        result in window coordinates.
        (WebKit::WebHitTestResult::Data::Data):
        (WebKit::WebHitTestResult::elementBoundingBox):
        (WebHitTestResult):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewMouseTargetChanged): Call webkitWebViewBaseSetTooltipArea.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseQueryTooltip): Use the tooltipArea if it's not empty.
        (webkitWebViewBaseSetTooltipArea): Set the tooltipArea.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:

2012-09-18  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix build without the QtQuick module

        Reviewed by Simon Hausmann.

        * Target.pri:

2012-09-17  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Add NativeWebTouchEvent and handle the Touch event.
        https://bugs.webkit.org/show_bug.cgi?id=90662

        Reviewed by Gyuyoung Kim.

        Implement codes to handle touch event for WebKit2 EFL port.
        Additionally, types and structure for touch event are defined because
        they are not in the Evas.

        * PlatformEfl.cmake:
        * Shared/NativeWebTouchEvent.h:
        (NativeWebTouchEvent):
        * Shared/efl/NativeWebTouchEventEfl.cpp: Added.
        (WebKit):
        (WebKit::NativeWebTouchEvent::NativeWebTouchEvent):
        * Shared/efl/WebEventFactory.cpp:
        (WebKit):
        (WebKit::typeForTouchEvent):
        (WebKit::WebEventFactory::createWebTouchEvent):
        * Shared/efl/WebEventFactory.h:
        (WebEventFactory):
        * UIProcess/API/efl/ewk_touch.h: Added.

2012-09-17  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, rolling out r128826 and r128813.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit):
        (WebKit::JSNPObject::JSNPObject):
        * WebProcess/Plugins/Netscape/JSNPObject.h:
        (JSNPObject):

2012-09-17  Kent Tamura  <tkent@chromium.org>

        Export RuntimeEnabledFeatures::isLangAttributeAwareFormControlUIEnabled correctly
        https://bugs.webkit.org/show_bug.cgi?id=96855

        Reviewed by Hajime Morita.

        * win/WebKit2.def: Remove a symbol
        * win/WebKit2CFLite.def: ditto.

2012-09-17  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL][WK2] Add javascript popup API.
        https://bugs.webkit.org/show_bug.cgi?id=95672

        Reviewed by Gyuyoung Kim.

        Add smart class member function for javascript alert(), confirm() and prompt().

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_run_javascript_alert):
        (ewk_view_run_javascript_confirm):
        (ewk_view_run_javascript_prompt):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/ewk_view_ui_client.cpp:
        (runJavaScriptAlert):
        (runJavaScriptConfirm):
        (runJavaScriptPrompt):
        (ewk_view_ui_client_attach):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        Added unit test for javascript popup smart class member function.
        (checkAlert):
        (TEST_F):
        (checkConfirm):
        (checkPrompt):

2012-09-17  Regina Chung  <heejin.r.chung@samsung.com>

        [EFL][WK2] Regression (r128163)
        https://bugs.webkit.org/show_bug.cgi?id=96610

        Reviewed by Gyuyoung Kim.

        While removing compile warnings r128163 changed the logic of code for entering 
        accelerated compositing mode, resulting in never being able to enter it.
        Changed back to the correct code and fixed the compile warning by using an
        appropriate EINA macro.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_accelerated_compositing_mode_enter): Changed EINA_SAFETY_ON_NULL_RETURN_VAL to *if* condition statement.

2012-09-17  Sam Weinig  <sam@webkit.org>

        Fix the Snow Leopard build.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitialize):

2012-09-17  Sam Weinig  <sam@webkit.org>

        Add experimental code to enter a sandbox for a plug-in.
        Based on a patch by Ivan Krstić.
        <rdar://problem/11823151>

        Reviewed by Anders Carlsson.

        Enter a sandbox for a plug-in if a sandbox profile is found in /usr/share/sandbox/ that
        has the plug-ins bundle identifier for a name.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::initializeSandbox):
        (WebKit::PluginProcess::platformInitialize):
        Enter the sandbox provided if a profile can be found.

        * WebProcess/Plugins/Netscape/mac/NetscapeSandboxFunctions.h:
        * WebProcess/Plugins/Netscape/mac/NetscapeSandboxFunctions.mm:
        (enterSandbox):
        Factor out the core sandbox entering logic (so if can be used above) and make sure
        that Remote Save Panel is enabled.

2012-09-17  Mark Hahnenberg  <mhahnenberg@apple.com>

        Fixing the build after http://trac.webkit.org/changeset/128813

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit):
        (WebKit::JSNPObject::JSNPObject):
        * WebProcess/Plugins/Netscape/JSNPObject.h:
        (JSNPObject):

2012-09-17  Anders Carlsson  <andersca@apple.com>

        Crash if we fail to allocate memory for the argument encoder buffer.
        https://bugs.webkit.org/show_bug.cgi?id=88367

        Reviewed by Andreas Kling.
        <rdar://problem/11488239>

        Since there's no way to recover from malloc returning null here, just crash.

        * Platform/CoreIPC/ArgumentEncoder.cpp:
        (CoreIPC::ArgumentEncoder::grow):

2012-09-17  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=96936
        Opt into layers for fixed positioned elements for TiledDrawingArea

        Reviewed by Tim Horton.

        This code already exists in DrawingAreaImpl, and we need it for 
        TiledCoreAnimationDrawingArea as well.
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updatePreferences):

2012-09-17  Anders Carlsson  <andersca@apple.com>

        Don't load a blocked plug-in if a non-blocked version of the same plug-in exists
        https://bugs.webkit.org/show_bug.cgi?id=96933
        <rdar://problem/12206720>

        Reviewed by Andreas Kling.

        If a plug-in with the same bundle identifier already exists and it's blocked, remove it and replace it
        with the other version.

        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::shouldUsePlugin):

2012-09-17  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Remove 'using namespace WebCore' from header file

        Broke the build on Mac OS X by causing clashes between Fixed from
        /usr/include/MacTypes.h and Source/WebCore/platform/Length.h.

        Reviewed by Simon Hausmann..

        * UIProcess/PageViewportController.cpp:
        * UIProcess/PageViewportController.h:
        (PageViewportController):
        (WebKit::PageViewportController::contentsLayoutSize):
        (WebKit):
        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        * UIProcess/qt/PageViewportControllerClientQt.h:
        (PageViewportControllerClientQt):

2012-09-15  Vivek Galatage  <vivekgalatage@gmail.com>

        WinCairo build fix due to missing symbols for setImagesEnabled and setStorageBlockingPolicy
        https://bugs.webkit.org/show_bug.cgi?id=96866

        Reviewed by Kentaro Hara.

        Adding missing symbol defines in the def file to fix the build break
        for WinCairo

        * win/WebKit2CFLite.def:

2012-09-15  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Provide implementation for PageClientImpl::processDidCrash()
        https://bugs.webkit.org/show_bug.cgi?id=96197

        Reviewed by Gyuyoung Kim.

        WebKit2 EFL does not have an implementation for PageClientImpl::processDidCrash().
        So when WebProcess has crashed, UI process does nothing and is left alone as it is.

        This patch checks if loading was ongoing, if so, set the load progress as 1.
        Then send a signal callback "webprocess,crashed" for an application to handle it.
        If the application does not handle the crash event, show an Eina Log warning message
        with a url at web process exit and load an error page.

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::processDidCrash):
        * UIProcess/API/efl/ewk_private.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_webprocess_crashed):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_private.h:

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.

        Fixup miscellaneous qdoc commands syntax.

        * UIProcess/API/qt/qquickwebview.cpp:
        * UIProcess/API/qt/qwebloadrequest.cpp:

2012-09-14  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Add *explicit* keyword to constructors to WebKit2/UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=96732

        Reviewed by Kentaro Hara.

        As a step of *explicit* cleanup for constructors which have only one parameter,
        *explicit* is added to WebKit2/UIProcess in order to avoid implicit type conversion.

        * UIProcess/Authentication/AuthenticationDecisionListener.h:
        (AuthenticationDecisionListener):
        * UIProcess/Authentication/WebCredential.h:
        (WebCredential):
        * UIProcess/Authentication/WebProtectionSpace.h:
        (WebProtectionSpace):
        * UIProcess/GenericCallback.h:
        (WebKit::CallbackBase::CallbackBase):
        * UIProcess/InspectorServer/WebSocketServer.h:
        * UIProcess/ResponsivenessTimer.h:
        (ResponsivenessTimer):
        * UIProcess/WebApplicationCacheManagerProxy.h:
        (WebApplicationCacheManagerProxy):
        * UIProcess/WebBackForwardList.h:
        (WebBackForwardList):
        * UIProcess/WebContextUserMessageCoders.h:
        (WebKit::WebContextUserMessageEncoder::WebContextUserMessageEncoder):
        * UIProcess/WebFullScreenManagerProxy.h:
        (WebFullScreenManagerProxy):
        * UIProcess/WebGrammarDetail.h:
        (WebGrammarDetail):
        * UIProcess/WebInspectorProxy.h:
        (WebInspectorProxy):
        * UIProcess/WebKeyValueStorageManagerProxy.h:
        (WebKeyValueStorageManagerProxy):
        * UIProcess/WebMediaCacheManagerProxy.h:
        (WebMediaCacheManagerProxy):
        * UIProcess/WebNavigationData.h:
        (WebNavigationData):
        * UIProcess/WebOpenPanelResultListenerProxy.h:
        (WebOpenPanelResultListenerProxy):
        * UIProcess/WebPopupMenuProxy.h:
        (WebKit::WebPopupMenuProxy::WebPopupMenuProxy):
        * UIProcess/WebPreferences.h:
        (WebPreferences):

2012-09-14  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=96846
        Tests failing on WK2 bots after giving fixed positioning its own 
        stacking context

        Reviewed by Geoffrey Garen.

        Tests are failing because I checked in updated results that expect 
        fixed positioning to create a stacking context. However, 
        WebKitTestRunner does not enable ScrollingCoordinator, so the code 
        that I added to enable stacking contexts for fixedPos is never 
        actually running. This patch moves that code to a place where it will 
        run for the testing tools, which matches the patch for WK1.
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::updatePreferences):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):

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.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

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  Jeffrey Pfau  <jpfau@apple.com>

        Allow third-party storage blocking setting to change while a page is loaded
        https://bugs.webkit.org/show_bug.cgi?id=95790

        Reviewed by Brady Eidson.

        Inform plugins about changes to the storage blocking policy by way of the private browsing feature.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::storageBlockingStateChanged):
        (WebKit):
        * PluginProcess/PluginControllerProxy.h:
        (PluginControllerProxy):
        * PluginProcess/PluginControllerProxy.messages.in: Add WK2 message for storageBlockingStateChanged.
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::storageBlockingStateChanged):
        (WebKit):
        (WebKit::NetscapePlugin::privateBrowsingStateChanged):
        (WebKit::NetscapePlugin::updateNPNPrivateMode): Set plugin's private browsing if either private browsing or storage blocking is enabled.
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        (NetscapePlugin):
        * WebProcess/Plugins/PDF/BuiltInPDFView.h:
        (BuiltInPDFView):
        * WebProcess/Plugins/PDF/BuiltInPDFView.mm: Treat storageBlockingStateChanged as a no-op.
        (WebKit::BuiltInPDFView::storageBlockingStateChanged):
        (WebKit):
        * WebProcess/Plugins/Plugin.h: Add pure virtual storageBlockingStateChanged method.
        (Plugin):
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::storageBlockingStateChanged):
        (WebKit):
        * WebProcess/Plugins/PluginProxy.h:
        (PluginProxy):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::storageBlockingStateChanged):
        (WebKit):
        * WebProcess/Plugins/PluginView.h:
        (PluginView):
        * win/WebKit2.def:

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.

        Soon we want pages with fixed positioned elements to be able to be 
        scrolled by the ScrollingCoordinator. As a part of that work, we have 
        to composite fixed position elements, and we have to allow those
        elements to create a stacking context.
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):

2012-09-14  Bo Liu  <boliu@chromium.org>

        Add in-place reload behavior to ImagesEnabled setting
        https://bugs.webkit.org/show_bug.cgi?id=95478

        Reviewed by Adam Barth.

        Export WebCore::Settings::setImagesEnabled symbol.

        * win/WebKit2.def:

2012-09-14  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] RefPtr<Evas_Object> unit tests fails
        https://bugs.webkit.org/show_bug.cgi?id=96809

        Reviewed by Kenneth Rohde Christiansen.

        Added missing return.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        (EWK2UnitTest::EWK2UnitTestBase::canvas):

2012-09-14  Christophe Dumez  <christophe.dumez@intel.com>

        WebKitTestRunner needs layoutTestController.dumpDatabaseCallbacks
        https://bugs.webkit.org/show_bug.cgi?id=57570

        Reviewed by Kenneth Rohde Christiansen.

        Add new didExceedDatabaseQuota callback to WKBundlePageUIClient
        and call it from WebChromeClient::exceededDatabaseQuota().
        This is needed by WebKitTestRunner to dump information about
        database callbacks.

        * Shared/APIClientTraits.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setDatabaseQuota): Call WebDatabaseManager::setQuotaForOrigin()
        with "file__0" instead of "file:///" as origin identifier. WebDatabaseManager expects
        a database identifier, not a string representation of the security origin. "file__0" is
        the string that is used as databaseIdentifier of local files. This bug was causing the
        database quota not to be set. The test cases would therefore fail due to the quota being
        0 instead of the value explicitly set.
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::didExceedDatabaseQuota):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        (InjectedBundlePageUIClient):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::exceededDatabaseQuota):

2012-09-14  Christophe Dumez  <christophe.dumez@intel.com>

        WebKitTestRunner needs layoutTestController.setStopProvisionalFrameLoads
        https://bugs.webkit.org/show_bug.cgi?id=42691

        Reviewed by Kenneth Rohde Christiansen.

        Add WKBundleFrame private API to stop loading of a frame.
        This is needed by WebKitTestRunner to implement
        testrunner.setStopProvisionalFrameLoads.

        Original patch by Alexey Proskuryakov.

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameStopLoading):
        * WebProcess/InjectedBundle/API/c/WKBundleFramePrivate.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::stopLoading):
        (WebKit):
        * WebProcess/WebPage/WebFrame.h:
        (WebFrame):

2012-09-14  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [EFL] Add unit test for RefPtr<Evas_Object>
        https://bugs.webkit.org/show_bug.cgi?id=96776

        Reviewed by Simon Hausmann.

        Basic testing of the new EFL specific RefPtr type.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        (EWK2UnitTest::EWK2UnitTestBase::backingStore):
        (EWK2UnitTest::EWK2UnitTestBase::canvas):

            Add some new accessors for Ecore_Evas and Evas*.

        * UIProcess/API/efl/tests/test_ewk2_refptr_evas_object.cpp: Added.
        (TEST_F):

2012-09-14  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Move .mm file to OBJECTIVE_SOURCES

        Reviewed by Simon Hausmann.

        * Target.pri:

2012-09-14  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        WebKitTestRunner needs layoutTestController.setTabKeyCyclesThroughElements
        https://bugs.webkit.org/show_bug.cgi?id=42687

        Reviewed by Kenneth Rohde Christiansen.

        Implement testRunner.setTabKeyCyclesThroughElements for
        WebKitTestRunner.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetTabKeyCyclesThroughElements):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setTabKeyCyclesThroughElements):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):

2012-09-14  Keishi Hattori  <keishi@webkit.org>

        Add runtime flag that enables lang attribute for form controls in LayoutTests
        https://bugs.webkit.org/show_bug.cgi?id=96636

        Reviewed by Kent Tamura.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-09-14  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        Add method to get the list of all available dictionaries
        https://bugs.webkit.org/show_bug.cgi?id=96518

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitTextChecker.cpp:
        (WebKitTextChecker::getSpellCheckingLanguages):
        Update the method name that is called inside getSpellCheckingLanguages.
        This replace doesn't affect any on API changes.

2012-09-13  KwangYong Choi  <ky0.choi@samsung.com>

        [WK2] Add color picker API support for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=95058

        Reviewed by Gyuyoung Kim.

        Add support for color picker API to WebKit2.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Shared/API/c/WKBase.h:
        * Shared/APIClientTraits.cpp:
        (WebKit):
        * Shared/APIClientTraits.h:
        * Shared/APIObject.h:
        * Target.pri:
        * UIProcess/API/C/WKAPICast.h:
        (WebKit):
        * UIProcess/API/C/WKColorPickerResultListener.cpp: Added.
        (WKColorPickerResultListenerGetTypeID):
        (WKColorPickerResultListenerColorSet):
        * UIProcess/API/C/WKColorPickerResultListener.h: Added.
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/gtk/WebKitUIClient.cpp:
        (attachUIClientToView):
        * UIProcess/WebColorChooserProxy.cpp: Added.
        (WebKit):
        (WebKit::WebColorChooserProxy::WebColorChooserProxy):
        (WebKit::WebColorChooserProxy::~WebColorChooserProxy):
        (WebKit::WebColorChooserProxy::endChooser):
        (WebKit::WebColorChooserProxy::setSelectedColor):
        * UIProcess/WebColorChooserProxy.h:
        (WebColorChooserProxy):
        (WebKit::WebColorChooserProxy::create):
        * UIProcess/WebColorPickerResultListenerProxy.cpp: Added.
        (WebKit):
        (WebKit::WebColorPickerResultListenerProxy::WebColorPickerResultListenerProxy):
        (WebKit::WebColorPickerResultListenerProxy::~WebColorPickerResultListenerProxy):
        (WebKit::WebColorPickerResultListenerProxy::invalidate):
        (WebKit::WebColorPickerResultListenerProxy::setColor):
        * UIProcess/WebColorPickerResultListenerProxy.h: Added.
        (WebKit):
        (WebColorPickerResultListenerProxy):
        (WebKit::WebColorPickerResultListenerProxy::create):
        (WebKit::WebColorPickerResultListenerProxy::type):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::showColorChooser):
        (WebKit::WebPageProxy::didEndColorChooser):
        (WebKit::WebPageProxy::processDidCrash):
        * UIProcess/WebPageProxy.h:
        (WebKit):
        (WebPageProxy):
        * UIProcess/WebUIClient.cpp:
        (WebKit):
        (WebKit::WebUIClient::showColorPicker):
        (WebKit::WebUIClient::hideColorPicker):
        * UIProcess/WebUIClient.h:
        (WebKit):
        (WebUIClient):
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:

2012-09-13  KwangYong Choi  <ky0.choi@samsung.com>

        [EFL][WK2] Implement missing initializeLogChannel function
        https://bugs.webkit.org/show_bug.cgi?id=96478

        Reviewed by Gyuyoung Kim.

        Implemented log channel initialization function for EFL platform in WebKit2.

        * Platform/Logging.cpp:
        (WebKit):
        * Platform/Logging.h:
        (WebKit):
        * Platform/efl/LoggingEfl.cpp: Added.
        (WebKit):
        (WebKit::initializeLogChannel): Channel is initialized if its name is found in WEBKIT_DEBUG.
        * PlatformEfl.cmake:

2012-09-13  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/12283706> WebKit looks for some files on the system even when building against an SDK.

        Reviewed by David Kilzer.

        If an SDK is being used, pass it through to our custom invocations of the preprocessor.

        * DerivedSources.make:

2012-09-13  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed build fix for export declarations.

        New entries were added to the standard Windows export definition
        file, but were not added to the WinCairo version, breaking the build.

        * win/WebKit2CFLite.def: Incoproate changes from WebKit2.def file.

2012-09-13  Tim Horton  <timothy_horton@apple.com>

        Add optional debug logging when we fall into/out of threaded scrolling
        https://bugs.webkit.org/show_bug.cgi?id=93898
        <rdar://problem/12089098>

        Reviewed by Simon Fraser.

        Update the scrolling tree's scrollingPerformanceLoggingEnabled preference
        before the early-return if we don't have layer debugging borders on.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updatePreferences):

2012-09-13  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [WK2][WTR] WebKitTestRunner needs testRunner.callShouldCloseOnWebView
        https://bugs.webkit.org/show_bug.cgi?id=96366

        Reviewed by Anders Carlsson.

        Implement testRunner.callShouldCloseOnWebView for WebKitTestRunner
        by calling shouldClose() on the FrameLoader.

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameCallShouldCloseOnWebView):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:

2012-09-13  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] Assertion reached on RenderThemeEFL when setting a theme to an invalid path
        https://bugs.webkit.org/show_bug.cgi?id=96649

        Reviewed by Kenneth Rohde Christiansen.

        Updated the alternative test theme file. It is basically
        the default theme with extra padding on the button widget as
        specified by the comments on the test case.

        * UIProcess/API/efl/tests/resources/big_button_theme.edj:

2012-09-13  Balazs Kelemen  <kbalazs@webkit.org>

        [WK2] LayerTreeCoordinator should release unused UpdatedAtlases
        https://bugs.webkit.org/show_bug.cgi?id=95072

        Reviewed by Jocelyn Turcotte.

        Release graphic buffers that haven't been used for a while in order to save memory.
        This way we can give back memory to the system when no user interaction happens
        after a period of time, for example when we are in the background.

        * Shared/ShareableBitmap.h:
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::LayerTreeCoordinator):
        (WebKit::LayerTreeCoordinator::beginContentUpdate):
        (WebKit):
        (WebKit::LayerTreeCoordinator::scheduleReleaseInactiveAtlases):
        (WebKit::LayerTreeCoordinator::releaseInactiveAtlasesTimerFired):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):
        * WebProcess/WebPage/UpdateAtlas.cpp:
        (WebKit::UpdateAtlas::UpdateAtlas):
        (WebKit::UpdateAtlas::didSwapBuffers):
        Don't call buildLayoutIfNeeded here. It's enought to call it in beginPaintingOnAvailableBuffer
        and this way we can track whether this atlas is used with m_areaAllocator.
        (WebKit::UpdateAtlas::beginPaintingOnAvailableBuffer):
        * WebProcess/WebPage/UpdateAtlas.h:
        (WebKit::UpdateAtlas::addTimeInactive):
        (WebKit::UpdateAtlas::isInactive):
        (WebKit::UpdateAtlas::isInUse):
        (UpdateAtlas):

2012-09-13  Lauro Neto  <lauro.neto@openbossa.org>

        [Qt][WK2] fast/forms/access-key-for-all-elements.html fails
        https://bugs.webkit.org/show_bug.cgi?id=73917

        Reviewed by Simon Hausmann.

        Access-key tests were failing due to hardcoded Mac OS X in the
        Qt WK2 user agent string. This commit moves the WK1 implementation
        to a shared one to be used by both versions.

        Use the shared implementation instead of hardcoding the user agent.

        * UIProcess/qt/WebPageProxyQt.cpp:
        (WebKit::WebPageProxy::standardUserAgent):

2012-09-13  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix build of WTR and the QML2 plugin on Windows
        https://bugs.webkit.org/show_bug.cgi?id=96652

        Reviewed by Tor Arne Vestbø.

        Some components that we build such as WTR or the QML2 plugin include
        WebKit2 header files as well as WebKit2's config.h. Only the include
        paths of WebKit2 are required for that at the moment (WEBKIT +=
        webkit2). Only on Windows WebKit2's config.h also includes
        WebCore/config.h, which in turn requires to have WebCore/platform in
        your include search path. That in turn means that any component that
        wants to use WebKit2 headers also needs the WebCore headers, but only
        one Windows. It turns out that for the Qt build we don't need it, so
        skip it in our configuration and make the include path requirement
        the same across all the platforms we build.

        * config.h:

2012-09-13  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] REGRESSION(r128245): It made zillion API tests fail
        https://bugs.webkit.org/show_bug.cgi?id=96531

        Reviewed by Jocelyn Turcotte.

        Preferences have to be updated after the drawing area was created
        for compositing mode to be set.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):

2012-09-13  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix UIProcess build with Qt on Windows
        https://bugs.webkit.org/show_bug.cgi?id=96635

        Reviewed by Csaba Osztrogonác.

        Enabling setShouldCloseConnectionOnProcessTermination on the connection
        is something that is only implemented in ConnectionUnix, not
        ConnectionWin.cpp, where appears to be built-in functionality.

        * UIProcess/WebConnectionToWebProcess.cpp:
        (WebKit::WebConnectionToWebProcess::WebConnectionToWebProcess):

2012-09-13  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        [Qt] Fix build against namespaced Qt

        Reviewed by Tor Arne Vestbø.

        * UIProcess/qt/PageViewportControllerClientQt.h:

2012-09-13  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL][Qt][WK2] Implement shared undo controller for EFL and Qt port.
        https://bugs.webkit.org/show_bug.cgi?id=92504

        Reviewed by Kenneth Rohde Christiansen.

        EFL port needs an undo controller similiar to one from Qt port. Instead of
        duplicating the code existing class was renamed and moved to UIProcess
        directory.

        * PlatformEfl.cmake:
        * Target.pri:
        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::registerEditCommand):
        (WebKit::PageClientImpl::clearAllEditCommands):
        (WebKit::PageClientImpl::canUndoRedo):
        (WebKit::PageClientImpl::executeUndoRedo):
        * UIProcess/API/efl/PageClientImpl.h:
        (PageClientImpl):
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):
        * UIProcess/DefaultUndoController.cpp: Renamed from Source/WebKit2/UIProcess/qt/QtWebUndoController.cpp.
        (WebKit):
        (WebKit::DefaultUndoController::registerEditCommand):
        (WebKit::DefaultUndoController::clearAllEditCommands):
        (WebKit::DefaultUndoController::canUndoRedo):
        (WebKit::DefaultUndoController::executeUndoRedo):
        * UIProcess/DefaultUndoController.h: Renamed from Source/WebKit2/UIProcess/qt/QtWebUndoController.h.
        (WebKit):
        (DefaultUndoController):
        * UIProcess/qt/QtPageClient.cpp:
        (WebKit::QtPageClient::initialize):
        * UIProcess/qt/QtPageClient.h:
        (WebKit):
        (QtPageClient):

2012-09-13  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Make _ref() functions return the object
        https://bugs.webkit.org/show_bug.cgi?id=96604

        Reviewed by Gyuyoung Kim.

        Make _ref() functions return the ref'd object to
        make them more convenient to use. Also fix their
        usage to make use of the newly returned value.

        This change is consistent with eina_stringshare_ref()
        in EFL and g_object_ref() in glib.

        * UIProcess/API/efl/ewk_back_forward_list.cpp:
        (createEinaList):
        * UIProcess/API/efl/ewk_back_forward_list_item.cpp:
        (ewk_back_forward_list_item_ref):
        * UIProcess/API/efl/ewk_back_forward_list_item.h:
        * UIProcess/API/efl/ewk_context.cpp:
        (ewk_context_download_job_add):
        * UIProcess/API/efl/ewk_download_job.cpp:
        (ewk_download_job_ref):
        (ewk_download_job_response_set):
        * UIProcess/API/efl/ewk_download_job.h:
        * UIProcess/API/efl/ewk_form_submission_request.cpp:
        (ewk_form_submission_request_ref):
        * UIProcess/API/efl/ewk_form_submission_request.h:
        * UIProcess/API/efl/ewk_intent.cpp:
        (ewk_intent_ref):
        * UIProcess/API/efl/ewk_intent.h:
        * UIProcess/API/efl/ewk_intent_service.cpp:
        (ewk_intent_service_ref):
        * UIProcess/API/efl/ewk_intent_service.h:
        * UIProcess/API/efl/ewk_navigation_policy_decision.cpp:
        (ewk_navigation_policy_decision_ref):
        * UIProcess/API/efl/ewk_navigation_policy_decision.h:
        * UIProcess/API/efl/ewk_url_request.cpp:
        (ewk_url_request_ref):
        * UIProcess/API/efl/ewk_url_request.h:
        * UIProcess/API/efl/ewk_url_response.cpp:
        (ewk_url_response_ref):
        * UIProcess/API/efl/ewk_url_response.h:
        * UIProcess/API/efl/ewk_url_scheme_request.cpp:
        (ewk_url_scheme_request_ref):
        * UIProcess/API/efl/ewk_url_scheme_request.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_resource_load_initiated):
        * UIProcess/API/efl/ewk_web_resource.cpp:
        (ewk_web_resource_ref):
        * UIProcess/API/efl/ewk_web_resource.h:

2012-09-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r127876.
        http://trac.webkit.org/changeset/127876
        https://bugs.webkit.org/show_bug.cgi?id=96600

        mouse click doesn't work for spin button if spin button in
        iframe (Requested by yosin on #webkit).

        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp:
        (WebKit::InjectedBundleNavigationAction::InjectedBundleNavigationAction):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::handleContextMenuEvent):
        (WebKit::WebPage::highlightPotentialActivation):
        (WebKit::WebPage::findZoomableAreaForPoint):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::characterIndexForPoint):
        (WebKit::WebPage::performDictionaryLookupAtLocation):
        (WebKit::WebPage::shouldDelayWindowOrderingEvent):
        (WebKit::WebPage::acceptsFirstMouse):
        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-09-12  Brady Eidson  <beidson@apple.com>

        Assert in NetscapePlugin::destroy() with async plugin init
        <rdar://problem/12277595> and https://bugs.webkit.org/show_bug.cgi?id=96576

        Reviewed by Anders Carlsson.

        Most of the NPN_* API calls have a plug-in protector during the calls.
        NPN_Invoke and NPN_InvokeDefault do not.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_Invoke): Protect the plug-in during this call.
        (WebKit::NPN_InvokeDefault): Ditto.

2012-09-11  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12275537> REGRESSION(r127384): Non-existent directories are no longer created for sandbox paths
        https://bugs.webkit.org/show_bug.cgi?id=96442

        Reviewed by Darin Adler.

        * Shared/SandboxExtension.h:
        (WebKit::SandboxExtension::createHandleForReadWriteDirectory):
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::createHandleForReadWriteDirectory):
        Added a function for read-write configuration directories. It matches
        appendReadwriteSandboxDirectory() function behavior from WebProcessMac.mm.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        Use the new function for directories that need to be created if they don't exist.

2012-09-12  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WKTR] TestRunner needs to implement originsWithApplicationCache
        https://bugs.webkit.org/show_bug.cgi?id=96496

        Reviewed by Kenneth Rohde Christiansen.

        Add Bundle C API to retrieve security origins with
        an application cache. This is needed by WebKitTestRunner
        to support originsWithApplicationCache.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleCopyOriginsWithApplicationCache):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::originsWithApplicationCache):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):

2012-09-12  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WKTR] TestRunner needs to implement dumpApplicationCacheDelegateCallbacks
        https://bugs.webkit.org/show_bug.cgi?id=96374

        Reviewed by Kenneth Rohde Christiansen.

        Add Bundle C API to reset the application cache quota
        for a given origin.

        Add new reachedApplicationCacheOriginQuota callback
        to WKBundlePageUIClient which is called from
        WebChromeClient::reachedApplicationCacheOriginQuota().

        Those are needed by WebKitTestRunner to dump
        information about the application cache callbacks
        if instructed to.

        * Shared/APIClientTraits.cpp:
        (WebKit):
        * Shared/APIClientTraits.h:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetApplicationCacheOriginQuota):
        (WKBundleResetApplicationCacheOriginQuota):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::resetApplicationCacheOriginQuota):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::didReachApplicationCacheOriginQuota):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        (WebKit):
        (InjectedBundlePageUIClient):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota):
        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-09-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r128280.
        http://trac.webkit.org/changeset/128280
        https://bugs.webkit.org/show_bug.cgi?id=96498

        it broke compilation on windows debug bot (Requested by loislo
        on #webkit).

        * Shared/APIClientTraits.cpp:
        (WebKit):
        * Shared/APIClientTraits.h:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetApplicationCacheOriginQuota):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        (WebKit):
        (InjectedBundlePageUIClient):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota):

2012-09-12  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL][WK2] WorkQueue::dispatchAfterDelay() doesn't work properly.
        https://bugs.webkit.org/show_bug.cgi?id=91179

        Reviewed by Gyuyoung Kim.

        When UI Process is crashed and WebProcess's ecore main loop is very
        busy or lockup also, watchdocCallback() function in the
        ChildProcess.cpp doesn't triggered. And this is because of that
        WorkQueue::dispatchAfterDelay() function uses ecore timer for getting
        timer event.

        For removing the dependency between the dispatchAfterDelay() and ecore
        main loop, new timer event mechanism is added to WorkQueue main loop.

        * Platform/WorkQueue.h:
        (TimerWorkItem):
        (WorkQueue::TimerWorkItem::dispatch):
        (WorkQueue::TimerWorkItem::expireTime):
        (WorkQueue::TimerWorkItem::expired):
        (WorkQueue):
        * Platform/efl/WorkQueueEfl.cpp:
        (WorkQueue::TimerWorkItem::create):
        (WorkQueue::TimerWorkItem::TimerWorkItem):
        (WorkQueue::performFileDescriptorWork):
        (WorkQueue::getCurrentTime):
        (WorkQueue::getNextTimeOut):
        (WorkQueue::performTimerWork):
        (WorkQueue::workQueueThread):
        (WorkQueue::dispatchAfterDelay):

2012-09-12  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WKTR] TestRunner needs to implement dumpApplicationCacheDelegateCallbacks
        https://bugs.webkit.org/show_bug.cgi?id=96374

        Reviewed by Kenneth Rohde Christiansen.

        Add Bundle C API to reset the application cache quota
        for a given origin.

        Add new reachedApplicationCacheOriginQuota callback
        to WKBundlePageUIClient which is called from
        WebChromeClient::reachedApplicationCacheOriginQuota().

        Those are needed by WebKitTestRunner to dump
        information about the application cache callbacks
        if instructed to.

        * Shared/APIClientTraits.cpp:
        (WebKit):
        * Shared/APIClientTraits.h:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetApplicationCacheOriginQuota):
        (WKBundleResetApplicationCacheOriginQuota):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::resetApplicationCacheOriginQuota):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::didReachApplicationCacheOriginQuota):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        (WebKit):
        (InjectedBundlePageUIClient):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota):

2012-09-12  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] [WTR] WebKitTestRunner needs TestRunner.workerThreadCount
        https://bugs.webkit.org/show_bug.cgi?id=96388

        Reviewed by Kenneth Rohde Christiansen.

        Added WKBundleGetWorkerThreadCount() function to Injected Bundle private API.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleGetWorkerThreadCount):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::workerThreadCount): Returns count of worker threads.
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):

2012-09-12  Darin Adler  <darin@apple.com>

        Make NetscapePlugin::m_timers use HashMap<OwnPtr> instead of deleteAllValues
        https://bugs.webkit.org/show_bug.cgi?id=96469

        Reviewed by Dan Bernstein.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::scheduleTimer): Call release rather than leakPtr when
        entering a timer into the map.
        (WebKit::NetscapePlugin::unscheduleTimer): Take an existing timer from the map
        with the take function rather than the roundabout code needed before.
        (WebKit::NetscapePlugin::destroy): Remove now-unneeded call to deleteAllValues.
        * WebProcess/Plugins/Netscape/NetscapePlugin.h: Change the value type for
        TimerMap to OwnPtr<Timer> rather than Timer*.

2012-09-11  Anders Carlsson  <andersca@apple.com>

        Accelerated compositing should always be forced when using the tiled drawing area
        https://bugs.webkit.org/show_bug.cgi?id=96449

        Reviewed by Andy Estes.

        There's code in WebPage::updatePreferences that will turn off accelerated compositing unless accelerated drawing is enabled.
        This should only be done in the non-tiled model, so move the code to DrawingAreaImpl::updatePreferences.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::updatePreferences):
        This now takes a WebPreferencesStore.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::updatePreferences):
        Move code here from WebPage::updatePreferences.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        Pass the WebPreferencesStore to DrawingArea::updatePreferences.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        Remove call to updatePreferences, it's going to be called by the WebPage object later.

        (WebKit::TiledCoreAnimationDrawingArea::updatePreferences):
        This now takes a WebPreferencesStore.

2012-09-11  Brady Eidson  <beidson@apple.com>

        Get rid of the PluginProcessShim for 64-bit plug-ins
        <rdar://problem/12068560> and https://bugs.webkit.org/show_bug.cgi?id=96415

        Reviewed by Anders Carlsson.

        * PluginProcess/PluginProcess.h:
        (PluginProcess):

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::getCurrentEventButtonState):
        (WebKit):
        (WebKit::beginModal): Moved from the shim, to be shared with shimmed processes.
        (WebKit::endModal): Ditto.
        (WebKit::replacedRunModalForWindow): Only used by Cocoa overrides.
        (WebKit::PluginProcess::initializeShim):
        (WebKit::PluginProcess::initializeCocoaOverrides): 

        * PluginProcess/mac/PluginProcessMainMac.mm:
        (WebKit::PluginProcessMain): Only call initializeShim for 32-bit processes, always call initializeCocoaOverrides

        * PluginProcess/mac/PluginProcessShim.h:
        (PluginProcessShimCallbacks):
        * PluginProcess/mac/PluginProcessShim.mm:
        (WebKit):
        (WebKit::shimModalDialog): Call beginModal/endModal from the shim callbacks.
        (WebKit::shimAlert): Ditto.
        (WebKit::WebKitPluginProcessShimInitialize): Don't do the Cocoa overrides as they are now handled outside the shim.

2012-09-11  Marcelo Lira  <marcelo.lira@openbossa.org>

        Restore original value of mock scrollbars enabled in InternalSettings
        https://bugs.webkit.org/show_bug.cgi?id=87680

        Reviewed by Adam Barth.

        Added backup support for mock scrollbars state in
        InternalSettings::Backup, and removed support for these
        from Qt's DumpRenderTree.

        * win/WebKit2.def:

2012-09-11  Brady Eidson  <beidson@apple.com>

        We should wait longer before killing the PluginProcess.
        <rdar://problem/12067728> and https://bugs.webkit.org/show_bug.cgi?id=96407

        Reviewed by Anders Carlsson.

        Currently we kill the PluginProcess 15 seconds after the last plug-in is destroyed.
        This is short enough that most users will have the process killed many times during browsing sessions,
        which is painful because relaunching the process is I/O and kernel intensive.

        In an ideal world we could keep it around forever until the system tells us resources are running low.

        In reality we do want to kill it occasionally to get a clean slate from any plug-in leaks.

        A reasonable balance for now is to set a minimum lifetime of 30 minutes on the plug-in process and to 
        extend the termination timer from 15 seconds to 10 minutes.
        
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::PluginProcess):
        (WebKit::PluginProcess::initializePluginProcess):
        (WebKit::PluginProcess::setMinimumLifetime):
        (WebKit):
        (WebKit::PluginProcess::minimumLifetimeTimerFired):
        * PluginProcess/PluginProcess.h:
        (PluginProcess):

        * Shared/Plugins/PluginProcessCreationParameters.cpp:
        (WebKit::PluginProcessCreationParameters::encode):
        (WebKit::PluginProcessCreationParameters::decode):
        * Shared/Plugins/PluginProcessCreationParameters.h:
        (PluginProcessCreationParameters):

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit):
        (WebKit::PluginProcessProxy::didFinishLaunching):

2012-09-11  Jinwoo Song  <jinwoo7.song@samsung.com>

        Deploy StringBuilder::appendNumber() and StringBuilder::appendLiteral() in more places
        https://bugs.webkit.org/show_bug.cgi?id=96344

        Reviewed by Benjamin Poulain.

        Use StringBuilder::appendNumber() instead of String::number(). Also deploy 
        StringBuilder::appendLiteral() instead of String::append() in the surrounding code.

        * Shared/WebMemorySampler.cpp:
        (WebKit::WebMemorySampler::appendCurrentMemoryUsageToFile):
        * UIProcess/InspectorServer/WebSocketServerConnection.cpp:
        (WebKit::WebSocketServerConnection::sendHTTPResponseHeader):
        * UIProcess/InspectorServer/qt/WebInspectorServerQt.cpp:
        (WebKit::WebInspectorServer::inspectorUrlForPageID):
        (WebKit::WebInspectorServer::buildPageList):

2012-09-11  Anders Carlsson  <andersca@apple.com>

        Fix speling error in comment.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::isTransparentSilverlightBackgroundValue):

2012-09-11  Raphael Kubo da Costa  <rakuco@webkit.org>

        [EFL] Rewrite the EFL-related Find modules
        https://bugs.webkit.org/show_bug.cgi?id=95237

        Reviewed by Kenneth Rohde Christiansen.

        * CMakeLists.txt: Stop setting the LINK_FLAGS property.
        * PlatformEfl.cmake: Add libraries and include directories for
        each Enlightenment Foundation Library used by the port.

2012-09-11  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WKTR] TestRunner needs to implement setApplicationCacheOriginQuota
        https://bugs.webkit.org/show_bug.cgi?id=96379

        Reviewed by Kenneth Rohde Christiansen.

        Add Bundle C API to set the application cache quota for a
        given security origin. This is needed by WebKitTestRunner
        to implement setApplicationCacheOriginQuota().

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetApplicationCacheOriginQuota):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setApplicationCacheOriginQuota):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):

2012-09-11  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][WTR] WebKitTestRunner needs testRunner.setSpatialNavigationEnabled
        https://bugs.webkit.org/show_bug.cgi?id=96269

        Reviewed by Kenneth Rohde Christiansen.

        Added a new setter for spacial navigation enabling to Injected Bundle private API.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetSpatialNavigationEnabled):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setSpatialNavigationEnabled):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):

2012-09-11  Marcelo Lira  <marcelo.lira@openbossa.org>

        [Qt][WK2] Page loading status API lacks a status for intentionally stopped loading
        https://bugs.webkit.org/show_bug.cgi?id=83062

        Reviewed by Tor Arne Vestbø.

        When the loading of a page is intentionally interrupted, the loading
        status is set to the new state LoadStoppedStatus. This reflects
        reality more accurately because the page was not fully loaded
        (a LoadSucceededStatus), and it wasn't an unexpected error
        (a LoadFailedStatus).

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::loadDidStop):
        * UIProcess/API/qt/qquickwebview_p.h:
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):
        * UIProcess/API/qt/tests/publicapi/tst_publicapi.cpp:
        * UIProcess/API/qt/tests/qmltests/WebView/tst_loadUrl.qml:
        * UIProcess/API/qt/tests/qmltests/common/TestWebView.qml:
        * UIProcess/qt/QtWebPageLoadClient.cpp:
        (WebKit::QtWebPageLoadClient::dispatchLoadStopped):
        (WebKit):
        (WebKit::QtWebPageLoadClient::dispatchLoadFailed):
        * UIProcess/qt/QtWebPageLoadClient.h:
        (QtWebPageLoadClient):

2012-09-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Add a configure step to the Qt build system

        This allows building the Qt port using just 'qmake WebKit.pro'. Using
        the build-webkit script is still supported, and will add slightly more
        logic to the build, such as detecting the need for clean or incremental
        builds.

        Internally, the build system now uses a new variable, WEBKIT_CONFIG, for
        all things related to configuring the build, such as use/have/enable flags,
        and these are translated to defines in default_post. Project files should
        no longer check contains(DEFINES,...) to detect features, but use the new
        enable?(), use?(), and have?() functions. The no_webkit1 and no_webkit2
        options have been translated into WEBKIT_CONFIG options as well, and can
        be checked using build?().

        Reviewed by Simon Hausmann.

        * Target.pri:
        * UIProcess/API/qt/tests/tests.pri:
        * WebKit2.pri:
        * config.h:

2012-09-11  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WKTR] TestRunner needs to implement clearApplicationCacheForOrigin
        https://bugs.webkit.org/show_bug.cgi?id=96372

        Reviewed by Kenneth Rohde Christiansen.

        Add Bundle C API to clear the application cache for a
        given origin. This is needed by WebKitTestRunner to
        implement clearApplicationCacheForOrigin().

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleClearApplicationCacheForOrigin):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::clearApplicationCacheForOrigin):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):

2012-09-11  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][WTR] WebKitTestRunner needs layoutTestController.setMinimumTimerInterval
        https://bugs.webkit.org/show_bug.cgi?id=96256

        Reviewed by Kenneth Rohde Christiansen.

        Added new setter for minimum DOM timer interval to InjectedBundle private API.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetMinimumTimerInterval):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setMinimumTimerInterval):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):

2012-09-11  Kangil Han  <kangil.han@samsung.com>

        [WK2][EFL] Fix compile warnings when enable tiled backing store
        https://bugs.webkit.org/show_bug.cgi?id=95342

        Reviewed by Gyuyoung Kim.

        Fixed compile time warning messages when enable tiled backing store.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_accelerated_compositing_mode_enter): Fixed invalid use of 'EINA_SAFETY_ON_NULL_RETURN_VAL' since it used '!' ahead of evasGl value so it is always null.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setChildren): Replaced 'int' i with 'unsigned' because its comparing value is 'size_t'.
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::renderNextFrame): Replaced 'int' i with 'unsigned' because its comparing value is 'size_t'.
        (WebKit::LayerTreeCoordinator::beginContentUpdate): Replaced 'int' i with 'unsigned' because its comparing value is 'size_t'.

2012-09-11  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL][WK2] WKEinaSharedString needs a function to adopt eina stringshare.
        https://bugs.webkit.org/show_bug.cgi?id=96201

        Reviewed by Kenneth Rohde Christiansen.

        WKEinaSharedString needs a to adopt eina stringshare directly.

        With this adopt function, an instance that is directly created with
        eina_stringshare_add() can be easily handled by WKEinaSharedString
        without calling eina_stringshare_del() for preventing memory leak.

        * UIProcess/API/cpp/efl/WKEinaSharedString.cpp:
        (WKEinaSharedString::adopt):
        * UIProcess/API/cpp/efl/WKEinaSharedString.h:
        * UIProcess/API/efl/tests/test_ewk2_eina_shared_string.cpp:
        (TEST_F):

2012-09-11  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Fix the build with recent Qt5
        https://bugs.webkit.org/show_bug.cgi?id=96283

        Reviewed by Simon Hausmann.

        We should not use deprecated Qt API because doing that results
        in build failure since all the deprecated API was disabled
        in qtbase (https://codereview.qt-project.org/#change,24890).

        * UIProcess/API/qt/qwebnavigationhistory.cpp:
        (QWebNavigationListModel::roleNames):
        (QWebNavigationListModel::reset):
        * UIProcess/API/qt/qwebnavigationhistory_p.h:
        * UIProcess/API/qt/tests/qrawwebview/tst_qrawwebview.cpp:
        (WebView::load):
        * UIProcess/qt/WebPopupMenuProxyQt.cpp:
        (PopupMenuItemModel):
        (WebKit::PopupMenuItemModel::PopupMenuItemModel):
        (WebKit::PopupMenuItemModel::roleNames):
        (WebKit):

2012-09-11  Christophe Dumez  <christophe.dumez@intel.com>

        WTR needs an implementation of applicationCacheDiskUsageForOrigin
        https://bugs.webkit.org/show_bug.cgi?id=87188

        Reviewed by Kenneth Rohde Christiansen.

        Add Bundle private C API to retrieve the application cache
        usage for a specific security origin. This is needed by
        WebKitTestRunner.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleGetAppCacheUsageForOrigin):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::appCacheUsageForOrigin):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):

2012-09-11  Zhigang Gong  <zhigang.gong@linux.intel.com>

        [EFL][WK2] Add necessary include directory in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=95173

        Unreviewed build fix.

        revision r126694: Move TextureMapperGL to use
        GraphicsContext3D. modify the TextureMapperGL.h to include
        GraphicsContext3D.h. And when enable TEXTURE_MAPPER,
        file WebKit2/Shared/ShareableSurface.cpp will include
        TextureMapperGL.h then depends on GraphicsContext3D.h
        thus it need to add ANGLE director. As currently, this
        problem only affect EFL platform, according to Gyuyoung Kim's
        suggestion, we add this include dir into EFL private file
        PlatformEfl.cmake. Otherwise, the build will fail.

        To trigger this problem by using the following command:
        ./Tools/Scripts/build-webkit --efl --3d-rendering --tiled-backing-store

        * CMakeLists.txt:

2012-09-10  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL][WK2] Build warning : fix warning about extended initializer lists on EWK2UnitTestBase.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=95990

        Reviewed by Gyuyoung Kim.

        Fix build warning about extended initializer lists only available with
        -std=c++0x or -std=gnu++0x.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::ewk2UnitTestBrowserViewSmartClass):
        (EWK2UnitTest):
        (EWK2UnitTest::EWK2UnitTestBase::EWK2UnitTestBase):

2012-09-10  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=96158
        Need API to suppress scrollbar animations
        -and corresponding-
        <rdar://problem/12210972>

        Reviewed by Sam Weinig.

        Add suppressScrollbarAnimations as a WebCreationParameter.
        * Shared/WebPageCreationParameters.h:
        (WebPageCreationParameters):

        New API. Calls into the web process for the setter but not the 
        getter.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetSuppressScrollbarAnimations):
        (WKPageAreScrollbarAnimationsSuppressed):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setSuppressScrollbarAnimations):
        (WebKit):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        (WebKit::WebPageProxy::areScrollbarAnimationsSuppressed):
        * WebProcess/WebPage/WebPage.messages.in:

        Call into WebCore.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setSuppressScrollbarAnimations):
        (WebKit):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):

        This ScrollableArea area function is re-named by this patch in 
        WebCore.
        * WebProcess/Plugins/PDF/BuiltInPDFView.h:
        * WebProcess/Plugins/PDF/BuiltInPDFView.mm:
        (WebKit::BuiltInPDFView::scrollbarsCanBeActive):

2012-09-10  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r127837.
        http://trac.webkit.org/changeset/127837
        https://bugs.webkit.org/show_bug.cgi?id=93898

        Broke ScrollingCoordinator on chromium

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updatePreferences):

2012-09-10  Jer Noble  <jer.noble@apple.com>

        Unreviewed; rolling out r128081.
        http://trac.webkit.org/changeset/128081
        https://bugs.webkit.org/show_bug.cgi?id=96134

        New test http/tests/media/video-donottrack.html fails to run on Apple test bots.

        * Shared/APIClientTraits.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        (InjectedBundlePageLoaderClient):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        (WebFrameLoaderClient):
        * WebProcess/qt/QtBuiltinBundlePage.cpp:
        (WebKit::QtBuiltinBundlePage::QtBuiltinBundlePage):

2012-09-07  Jon Lee  <jonlee@apple.com>

        Update notifications to latest spec
        https://bugs.webkit.org/show_bug.cgi?id=91726
        <rdar://problem/11910451>

        Reviewed by Alexey Proskuryakov.

        Expose lang and dir.

        * UIProcess/API/C/WKNotification.cpp:
        (WKNotificationCopyLang):
        (WKNotificationCopyDir):
        * UIProcess/API/C/WKNotification.h:
        * UIProcess/Notifications/WebNotification.cpp:
        (WebKit::WebNotification::WebNotification):
        * UIProcess/Notifications/WebNotification.h:
        (WebKit::WebNotification::create):
        (WebKit::WebNotification::lang):
        (WebKit::WebNotification::dir):
        (WebNotification):
        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit::WebNotificationManagerProxy::show):
        * UIProcess/Notifications/WebNotificationManagerProxy.h:
        (WebNotificationManagerProxy):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showNotification):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::show):

2012-09-10  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * UIProcess/WebContext.h: Added a default value for relatedPage argment - if
        you don't have one, null is fine.

2012-09-10  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Add an API to open a page in same process
        https://bugs.webkit.org/show_bug.cgi?id=96306

        Reviewed by Anders Carlsson.

        The name "related" inspired by <http://wiki.whatwg.org/wiki/Links_to_Unrelated_Browsing_Contexts>.

        * UIProcess/API/mac/WKView.h: Added an API. It's unwieldy, but I blame
        WKBrowsingContextGroup, not the related view.

        * UIProcess/API/mac/WKViewPrivate.h: Matching SPI for clients that mostly use
        C APIs.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:processGroup:browsingContextGroup:]): Use new back-end
        signature.
        (-[WKView initWithFrame:processGroup:browsingContextGroup:relatedToView:]):
        Get page from WKView, and call back-end.
        (-[WKView initWithFrame:contextRef:pageGroupRef:]): Reimplement existing method
        by calling new, more powerful one.
        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]): Just one change,
        pass relatedPage to the context.

        * UIProcess/WebContext.cpp: (WebKit::WebContext::createWebPage): If related page
        is not null, use its process.

        * UIProcess/WebContext.h: (WebContext): Updated createWebPage signature.

2012-09-10  Brady Eidson  <beidson@apple.com>

        Javascript in foreground tabs should not wait synchronously for plug-ins to load
        <rdar://problem/12067415> and https://bugs.webkit.org/show_bug.cgi?id=96167

        Reviewed by Geoff Garen.

        Synchronously waiting for initialization to complete when javascript accesses the plug-in script object severely
        reduces the effectiveness of having an asynchronous NPP_New.

        Such as with background tabs that have never been viewed, we already have cases where JS calls into the plug-in 
        element fail because we haven't bothered to initialize the plug-in.

        We get a huge win by expanding that to foreground tabs that simply haven't finished initializing their plug-ins.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::scriptObject): If initialization is not complete just return 0 - They can get at the script object later.

        Remove the notion of "wait for asynchronous initialization" altogether:
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        (NetscapePlugin):
        * WebProcess/Plugins/PDF/BuiltInPDFView.h:
        (BuiltInPDFView):
        * WebProcess/Plugins/Plugin.h:
        (Plugin):
        * WebProcess/Plugins/PluginProxy.cpp:
        * WebProcess/Plugins/PluginProxy.h:
        (PluginProxy):

2012-09-07  Jer Noble  <jer.noble@apple.com>

        <audio> and <video> should send Do Not Track when appropriate
        https://bugs.webkit.org/show_bug.cgi?id=96134

        Reviewed by Eric Carlson.

        Add support for the shouldSendDoNotTrackHTTPHeader by passing the request
        on to the WebFrameLoadDelegate.

        * Shared/APIClientTraits.cpp: Increment the interfaceSizes for 
            WKBundlePageLoaderClient by the value of the new functions.
        * Shared/APIClientTraits.h: Ditto.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h: Add a new API to 
            WKBundlePageLoaderClient and bump the version number.
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::shouldSendDoNotTrackHTTPHeader):
            Pass the question on to the client.
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::shouldSendDoNotTrackHTTPHeader):
            Pass the question on to the bundle.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/qt/QtBuiltinBundlePage.cpp:
        (WebKit::QtBuiltinBundlePage::QtBuiltinBundlePage):
            Add an entry for the new function in the Qt loader client.

2012-09-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Don't convert to UTF-8 the suggestedFilename passed to Download::decideDestinationWithSuggestedFilename()
        https://bugs.webkit.org/show_bug.cgi?id=96261

        Reviewed by Martin Robinson.

        * WebProcess/Downloads/soup/DownloadSoup.cpp:
        (WebKit::DownloadClient::didReceiveResponse):

2012-09-10  Alexander Shalamov  <alexander.shalamov@intel.com>

        [EFL][WK2] Add fullscreen enter / exit signals to the ewk_view API
        https://bugs.webkit.org/show_bug.cgi?id=92362

        Reviewed by Gyuyoung Kim.

        Handle WebFullScreenManagerProxy::enterFullScreen and exitFullScreen
        methods, so that ewk_view could enter and exit fullscreen mode when requested.
        Also, two callbacks were added to ewk_view API, so that UI could customise
        behavior when fullscreen mode is requested, e.g. show security dialog.

        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_fullscreen_enabled_set):
        (ewk_settings_fullscreen_enabled_get):
        * UIProcess/API/efl/ewk_settings.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_initialize):
        (ewk_view_full_screen_enter):
        (ewk_view_full_screen_exit):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (fullScreenCallback):
        (checkFullScreenProperty):
        (TEST_F):
        * UIProcess/efl/WebFullScreenManagerProxyEfl.cpp:
        (WebKit::WebFullScreenManagerProxy::enterFullScreen):
        (WebKit::WebFullScreenManagerProxy::exitFullScreen):

2012-09-10  Kevin Funk  <kevin.funk@kdab.com>

        [Qt] Fix deprecation failures if QT_NO_DEPRECATED enabled
        https://bugs.webkit.org/show_bug.cgi?id=96258

        Reviewed by Simon Hausmann.

        Sync with latest changes in Qt5.

        * WebProcess/WebCoreSupport/qt/WebErrorsQt.cpp:
        * WebProcess/qt/WebProcessQt.cpp:

2012-09-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Sanitize the suggested filename when building the download destination URI
        https://bugs.webkit.org/show_bug.cgi?id=96260

        Reviewed by Gustavo Noronha Silva.

        The suggested filename returned by the server can contain
        directory separators so that the filename would be interpreted as
        a full path.

        * UIProcess/API/gtk/WebKitDownload.cpp:
        (webkitDownloadDecideDestination): Convert any directory separator
        contained in the suggested filename to an underscore.

2012-09-10  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix generation of forward headers for generated files in WebCore on Windows
        https://bugs.webkit.org/show_bug.cgi?id=96245

        Reviewed by Tor Arne Vestbø.

        We generate the forwarding header files of generated WebCore sources by using
        mkdir to ensure the target directory exists, followed by
        echo #include "..." > file.h. On Windows mkdir returns with an error if the
        target directory exists. For us that is not an error, so work around it with
        (mkdir path 2>nul || echo>nul)

        * DerivedSources.pri:

2012-09-10  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt][WK2] REGRESSION(r127861): It made one test fail and one test crash
        https://bugs.webkit.org/show_bug.cgi?id=96243

        Reviewed by Kenneth Rohde Christiansen.

        Skip the code if QClipboard is not available, and give WebCore a chance to handle the event first.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::handleMouseEvent):
        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (WebKit::WebPage::handleMouseReleaseEvent):

2012-09-10  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] WK2 build fixes for MSVC
        https://bugs.webkit.org/show_bug.cgi?id=96248

        Reviewed by Tor Arne Vestbø.

        MSVC is picky when it comes to the use of forward declaration and the use of
        such forward declared types in templates. In these instances inline functions were
        passed parameters in RefPtrs that were only forward declared, but at compile time
        MSVC wants to know what type it is in order to completely instantiate RefPtr (which
        needs to call the type destructor for example). Therefore this patch resolves a couple
        of forward declarations with direct header file inclusions.

        * UIProcess/API/qt/raw/qrawwebview_p_p.h:
        * UIProcess/InspectorServer/WebSocketServerClient.h:
        * UIProcess/qt/QtPageClient.h:

2012-09-10  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] QWebKitTest should retrieve the viewport state from the PageViewportController
        https://bugs.webkit.org/show_bug.cgi?id=96106

        Reviewed by Simon Hausmann.

        The functions in PageViewportControllerClientQt proxying the
        viewport state values can be removed if QWebKitTest uses the
        PageViewportController to retrieve these values.

        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate::viewportController):
        * UIProcess/API/qt/qwebkittest.cpp:
        (QWebKitTest::viewport):
        (QWebKitTest::devicePixelRatio):
        (QWebKitTest::contentsScale):
        * UIProcess/PageViewportController.h:
        (WebKit::PageViewportController::currentContentsScale):
        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        * UIProcess/qt/PageViewportControllerClientQt.h:
        (PageViewportControllerClientQt):

2012-09-10  Simon Hausmann  <simon.hausmann@nokia.com>

        [WK2] Make WK2 C API headers compile in the Qt build on Windows
        https://bugs.webkit.org/show_bug.cgi?id=96246

        Reviewed by Kenneth Rohde Christiansen.

        WKBase.h and WKAPICast.h include files that are specific to the Safari/Windows
        port if WIN32 or _WIN32 is defined. When building WebKit2 on Windows with Qt, we
        do not want to include these files, as they define an API that is different to ours
        (the view aspect differs). Therefore guard the inclusion with !defined(BUILDING_QT__)

        * Shared/API/c/WKBase.h:
        * UIProcess/API/C/WKAPICast.h:

2012-09-10  Kevin Funk  <kevin.funk@kdab.com>

        Replace calls to QString::fromAscii which is deprecated in Qt5
        https://bugs.webkit.org/show_bug.cgi?id=96242

        Reviewed by Simon Hausmann.

        Replace with QString::fromLatin1 which does the same.

        * UIProcess/API/qt/tests/qrawwebview/tst_qrawwebview.cpp:

2012-09-10  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] New fast/forms/number/number-interactive-validation-required.html fails
        https://bugs.webkit.org/show_bug.cgi?id=95936

        Reviewed by Kenneth Rohde Christiansen.

        Add WKPreference private API for manipulate the interactive form
        validation setting. This is now needed by WebKitTestRunner.

        * Shared/WebPreferencesStore.h:
        (WebKit):
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetInteractiveFormValidationEnabled):
        (WKPreferencesGetInteractiveFormValidationEnabled):
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2012-09-09  Sam Weinig  <sam@webkit.org>

        Simplify WebKit2 XPC service backend now that I know it doesn't need to soft link WebKit2.framework
        https://bugs.webkit.org/show_bug.cgi?id=96228

        Reviewed by Dan Bernstein.

        We soft link the non-XPC service WebProcess backend to the WebKit2 framework to
        ensure that we can close all the necessary file descriptors at launch, without
        fear that we will be closing one we open while initializing WebKit2 or one of its
        dependencies. Since we don't need to close file descriptors in the XPC service 
        backend, we don't need to soft link! While here, also do some cleanup and code
        sharing.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::launchXPCService):
        We don't need to send the framework executable path anymore (it was used for the
        soft linking), but we do need the client identifier.
        
        * WebKit2.xcodeproj/project.pbxproj:
        Add new files. Link the XPC service to WebKit2.framework.

        * WebKit2Service/MainMacService.mm:
        Now that we don't have to soft link, just make this a stub that calls immediately
        into the WebKit2 framework.
        
        * WebProcess/mac/WebProcessInitialization.h: Added.
        * WebProcess/mac/WebProcessInitialization.mm: Added.
        (WebKit::InitializeWebProcess):
        Move initialization that is common between the XPC and non-XPC backends here.

        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain):
        Remove XPC backend related code. Use new shared InitializeWebProcess function.

        * WebProcess/mac/WebProcessXPCServiceMain.h: Added.
        * WebProcess/mac/WebProcessXPCServiceMain.mm: Added.
        (WebKit::WebKit2ServiceEventHandler):
        (WebProcessXPCServiceMain):
        Move XPC service backend initialization here.

2012-09-09  Emil A Eklund  <eae@chromium.org>

        Rename Node::getRect/getPixelSnappedRect and remove ContainerNode::getRect
        https://bugs.webkit.org/show_bug.cgi?id=81413

        Reviewed by David Hyatt.

        Update WebPage to call pixelSnappedBoundingBox.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState):

2012-09-08  Sam Weinig  <sam@webkit.org>

        Switch to entering the sandbox directly from main(), rather than waiting for the initialization message
        https://bugs.webkit.org/show_bug.cgi?id=96194

        Reviewed by Dan Bernstein.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        Pass a client identifier to WebProcess as a command line argument
        so that it can be used to create private temporary and cache directories.

        * WebProcess/WebProcess.h:
        (WebProcess):
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::initializeSandbox):
        (WebKit::WebProcess::platformInitializeWebProcess):
        Expose the initializeSandbox() function and stop calling it from platformInitializeWebProcess()
        since it is now going to be called from WebProcessMain.  Also, move changing the current working
        directory to sandbox initialization function and replace use of creation parameters with just
        the client identifier.

        * WebProcess/com.apple.WebProcess.sb.in:
        Add some new exceptions that come from entering the sandbox earlier in the AppKit
        initialization process. Don't allow access to com.apple.coreservices.appleevents.

        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMainXPC):
        (WebKit::WebProcessMain):
        Enter the sandbox explicitly, not waiting until the initialization message.  Also,
        since we now have an extra parameter for the client identifier, make the WebProcess
        launches the UIProcess code path work by extracting a client identifier from the 
        client executable path.

2012-09-09  Patrick Gansterer  <paroga@webkit.org>

        Make the String initialization on the function side of String::number()
        https://bugs.webkit.org/show_bug.cgi?id=95940

        Reviewed by Benjamin Poulain.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-09-09  Pierre Rossi  <pierre.rossi@gmail.com>

        [WK2] expose element rect for color input type
        https://bugs.webkit.org/show_bug.cgi?id=91664

        Reviewed by Simon Hausmann.

        In the same way we do for select elements already. This allows placing the picker
        in a sensible location.

        * UIProcess/API/efl/PageClientImpl.cpp: Update the function's signature.
        (WebKit::PageClientImpl::createColorChooserProxy): Ditto.
        * UIProcess/API/efl/PageClientImpl.h: Ditto.
        (PageClientImpl):
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createColorChooserProxy): Ditto.
        * UIProcess/API/gtk/PageClientImpl.h: Ditto.
        (PageClientImpl):
        * UIProcess/API/mac/PageClientImpl.h: Ditto.
        (PageClientImpl):
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::createColorChooserProxy): Ditto.
        * UIProcess/API/qt/raw/qrawwebview.cpp:
        (QRawWebViewPrivate::createColorChooserProxy): Ditto.
        * UIProcess/API/qt/raw/qrawwebview_p_p.h: Ditto.
        (QRawWebViewPrivate):
        * UIProcess/PageClient.h: Ditto.
        (PageClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showColorChooser): Compute the rect mapped to the current view's transform.
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/qt/QtPageClient.cpp:
        (WebKit::QtPageClient::createColorChooserProxy):
        * UIProcess/qt/QtPageClient.h:
        (QtPageClient):
        * UIProcess/qt/WebColorChooserProxyQt.cpp:
        (ColorChooserContextObject):
        (WebKit::ColorChooserContextObject::ColorChooserContextObject):
        (WebKit::ColorChooserContextObject::elementRect):
        (WebKit::ColorChooserContextObject::accept):
        (WebKit::WebColorChooserProxyQt::WebColorChooserProxyQt):
        * UIProcess/qt/WebColorChooserProxyQt.h:
        (WebKit::WebColorChooserProxyQt::create):
        (WebColorChooserProxyQt):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::createColorChooserProxy): Update the function's signature.
        * UIProcess/win/WebView.h:
        (WebView): Ditto.
        * WebProcess/WebCoreSupport/WebColorChooser.cpp:
        (WebKit::WebColorChooser::WebColorChooser):

2012-09-09  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Add missing files to the WebKit2 build on Windows
        https://bugs.webkit.org/show_bug.cgi?id=96177

        Reviewed by Kenneth Rohde Christiansen.

        For the build on Windows we can re-use existing functionality from the Safari/Windows
        build, such as the IPC implementation.

        * Target.pri:

2012-09-09  Simon Hausmann  <simon.hausmann@nokia.com>

        [WK2] Fix PLATFORM(WIN) vs. OS(WINDOWS) in various files
        https://bugs.webkit.org/show_bug.cgi?id=96178

        Reviewed by Kenneth Rohde Christiansen.

        PLATFORM(WIN) is used in various places, where it is safe to use OS(WINDOWS) to allow
        the re-use of that code path in ports beyond Safari/Windows.

        * Platform/CoreIPC/BinarySemaphore.h:
        (BinarySemaphore):
        * Platform/CoreIPC/Connection.h:
        (Connection):
        * Platform/SharedMemory.h:
        (Handle):
        (SharedMemory):
        * Platform/WorkQueue.h:

2012-09-08  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Minibrowser crashes on right mouse click
        https://bugs.webkit.org/show_bug.cgi?id=95955

        Reviewed by Simon Hausmann.

        Make early return if the PageClient does not create a ContextMenuProxy.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu):

2012-09-08  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix CoreIPC setup between ProcessLauncher and WebProcessMain on Windows
        https://bugs.webkit.org/show_bug.cgi?id=96179

        Reviewed by Kenneth Rohde Christiansen.

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::ProcessLauncher::launchProcess): Hide Unixy platform specific code
        and includes behind appropriate platform #ifdefs and use
        CoreIPC::Connection::createServerAndClientIdentifiers to set up the IPC pipes.
        We also need to tell Windows about our intent of using the client handle in
        the child web process.
        * WebProcess/qt/WebProcessMainQt.cpp:
        (WebKit::WebProcessMainQt): After retrieving the IPC identifier we call
        WebKit::WebProcess::shared().initialize with it. That function actually
        cares a CIPC::Connection::Identifier as argument, which happens to be an
        int on Unix, but it's actually a HANDLE on Windows. Change the parameter
        type according to and a reinterpret_cast from the converted unsigned integer,
        similar to WebProcessMainWin.cpp.

2012-09-08  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] New fast/events/tab-focus-link-in-canvas fails from r126908
        https://bugs.webkit.org/show_bug.cgi?id=95329

        Reviewed by Kenneth Rohde Christiansen.

        Add implementation for overriding the WebKitTabToLinksPreferenceKey
        preference as well as the corresponding WKPreferences API that
        is needed by WebKitTestRunner.

        * Shared/WebPreferencesStore.h:
        (WebKit):
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetTabToLinksEnabled):
        (WKPreferencesGetTabToLinksEnabled):
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::setTabToLinksEnabled):
        (WebKit::WebPage::tabToLinksEnabled):

2012-09-07  Benjamin Poulain  <bpoulain@apple.com>

        Rename the ustring() accessor to string()
        https://bugs.webkit.org/show_bug.cgi?id=95919

        Reviewed by Geoffrey Garen.

        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::NPJSObject::enumerate):

2012-09-06  Jeffrey Pfau  <jpfau@apple.com>

        Extend third-party storage blocking API to optionally allow blocking all storage
        https://bugs.webkit.org/show_bug.cgi?id=95915

        Reviewed by Brady Eidson.

        Update WK2 API to use revised Settings API.

        * Shared/WebPreferencesStore.h:
        (WebKit):
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toStorageBlockingPolicy):
        (WebKit):
        (WebKit::toAPI):
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetStorageBlockingPolicy):
        (WKPreferencesGetStorageBlockingPolicy):
        * UIProcess/API/C/WKPreferences.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2012-09-07  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] [WK2] Set theme for the inspector view
        https://bugs.webkit.org/show_bug.cgi?id=96108

        Reviewed by Kenneth Rohde Christiansen.

        Set the theme for the inspector view when it is created.

        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):

2012-09-07  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Use same default minimum logical font size in DRT and WTR
        https://bugs.webkit.org/show_bug.cgi?id=96116

        Reviewed by Martin Robinson.

        Add private bundle C API to set the minimum logicial font
        size setting. This is needed by WebKitTestRunner.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetMinimumLogicalFontSize):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setMinimumLogicalFontSize):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):

2012-09-07  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Simplify hitTestResultAtPoint and nodesFromRect APIs
        https://bugs.webkit.org/show_bug.cgi?id=95720

        Reviewed by Antonio Gomes.

        Update calls to new API and update exported symbols.

        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp:
        (WebKit::InjectedBundleNavigationAction::InjectedBundleNavigationAction):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::handleContextMenuEvent):
        (WebKit::WebPage::highlightPotentialActivation): Corrects the misplaced arguments while converting them.
        (WebKit::WebPage::findZoomableAreaForPoint):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::characterIndexForPoint):
        (WebKit::WebPage::performDictionaryLookupAtLocation):
        (WebKit::WebPage::shouldDelayWindowOrderingEvent):
        (WebKit::WebPage::acceptsFirstMouse):
        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-09-07  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        X11 Global Selection
        https://bugs.webkit.org/show_bug.cgi?id=88238

        Reviewed by Tony Chang.

        Implements the hooks for supporting global selections in Qt WebKit2.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::respondToChangedSelection):
        (WebKit::WebEditorClient::updateGlobalSelection):
        (WebKit::WebEditorClient::supportsGlobalSelection):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        (WebKit::WebEditorClient::updateGlobalSelection):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::handleMouseEvent):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (WebKit::WebPage::handleMouseReleaseEvent):

2012-09-07  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] APIClientTraits<WKPageLoaderClient> and APIClientTraits<WKBundlePageLoaderClient> are not initialized properly
        https://bugs.webkit.org/show_bug.cgi?id=96079

        Reviewed by Kenneth Rohde Christiansen.

        APIClientTraits<WKPageLoaderClient> was missing offset for version number 2 and
        APIClientTraits<WKBundlePageLoaderClient> was missing offset for version number 3.

        * Shared/APIClientTraits.cpp:
        (WebKit):

2012-09-07  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Add APIs to enable or disable the mouse events of the ewk_view.
        https://bugs.webkit.org/show_bug.cgi?id=88631

        Reviewed by Gyuyoung Kim.

        We can turn on/off the mouse events of the ewk_view using the mouse
        events enabling API. This API can be used when we want to turn off the
        mouse events on the touchscreen device to process the touch events
        instead of the mouse events.

        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::_Ewk_View_Private_Data):
        (_ewk_view_smart_add):
        (ewk_view_mouse_events_enabled_set):
        (ewk_view_mouse_events_enabled_get):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2012-09-07  Tim Horton  <timothy_horton@apple.com>

        Add optional debug logging when we fall into/out of threaded scrolling
        https://bugs.webkit.org/show_bug.cgi?id=93898
        <rdar://problem/12089098>

        Reviewed by Simon Fraser.

        Update the scrolling tree's scrollingPerformanceLoggingEnabled preference
        before the early-return if we don't have layer debugging borders on.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updatePreferences):

2012-09-06  Jinwoo Song  <jinwoo7.song@samsung.com>

        Deploy StringBuilder in more places in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=95924

        Reviewed by Benjamin Poulain.

        Deploy StringBuilder to concatenate strings more efficiently.

        * Shared/WebMemorySampler.cpp:
        (WebKit):
        (WebKit::WebMemorySampler::WebMemorySampler):
        (WebKit::WebMemorySampler::stop):
        (WebKit::WebMemorySampler::writeHeaders):
        (WebKit::WebMemorySampler::appendCurrentMemoryUsageToFile):
        * Shared/WebMemorySampler.h:
        (WebMemorySampler):
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::capitalizeRFC822HeaderFieldName):
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::searchWithGoogle):

2012-09-06  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Add API unit tests for ewk_view_theme_set.
        https://bugs.webkit.org/show_bug.cgi?id=94670

        Reviewed by Gyuyoung Kim.

        Added unit tests for ewk_view_theme_set.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.cpp:
        (EWK2UnitTest::EWK2UnitTestEnvironment::pathForResource):
        Added to get path of resource.
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.h:
        Ditto.
        * UIProcess/API/efl/tests/resources/big_button_theme.edj:
        Added test theme file which has text_confinement of button as
        rel1 { ... offset : 150 8; } rel2 { ... offset : -150 -11; }.
        * UIProcess/API/efl/tests/resources/empty_theme.edj:
        Added test theme file which includes nothing.
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        Added unit test for ewk_view_theme_set.

2012-09-06  Csaba Osztrogonác  <ossy@webkit.org>

        Move RenderView::setFixedPositionedObjectsNeedLayout to FrameView
        https://bugs.webkit.org/show_bug.cgi?id=96017

        Unreviewed Qt-WK2 buildfix after r127783.

        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::syncFixedLayers):

2012-09-05  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Annotate multi-process FIXMEs with bug numbers
        https://bugs.webkit.org/show_bug.cgi?id=95916

        Reviewed by Eric Carlson.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::setProcessModel): Ensure that plug-in process is enabled.
        Comments in WebPluginSiteDataManager said that it's required for multi-process.
        (WebKit::WebContext::createNewWebProcess): Added a bug number.
        (WebKit::WebContext::disconnectProcess): Ditto.
        (WebKit::WebContext::createWebPage): Ditto.
        (WebKit::WebContext::download): Ditto.
        (WebKit::WebContext::getWebCoreStatistics): Ditto.

        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
        (WebKit::WebPluginSiteDataManager::getSitesWithData):
        (WebKit::WebPluginSiteDataManager::clearSiteData):
        Removed FIXMEs - some ports haven't switched to plugin process yet, but that
        doesn't stop others from having a multi-process model. Added an ASSERT to document
        this requirement (in addition to the check in WebContext).

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::cancel):
        (WebKit::DownloadProxy::didReceiveAuthenticationChallenge):
        (WebKit::DownloadProxy::startTransfer):
        * UIProcess/WebApplicationCacheManagerProxy.cpp:
        (WebKit::WebApplicationCacheManagerProxy::getApplicationCacheOrigins):
        (WebKit::WebApplicationCacheManagerProxy::deleteEntriesForOrigin):
        (WebKit::WebApplicationCacheManagerProxy::deleteAllEntries):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::getHostnamesWithCookies):
        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::getDatabasesByOrigin):
        (WebKit::WebDatabaseManagerProxy::getDatabaseOrigins):
        (WebKit::WebDatabaseManagerProxy::deleteDatabaseWithNameForOrigin):
        (WebKit::WebDatabaseManagerProxy::deleteDatabasesForOrigin):
        (WebKit::WebDatabaseManagerProxy::deleteAllDatabases):
        (WebKit::WebDatabaseManagerProxy::setQuotaForOrigin):
        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::getLoadDecisionForIconURL):
        (WebKit::WebIconDatabase::didFinishURLImport):
        * UIProcess/WebKeyValueStorageManagerProxy.cpp:
        (WebKit::WebKeyValueStorageManagerProxy::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManagerProxy::deleteEntriesForOrigin):
        (WebKit::WebKeyValueStorageManagerProxy::deleteAllEntries):
        * UIProcess/WebMediaCacheManagerProxy.cpp:
        (WebKit::WebMediaCacheManagerProxy::getHostnamesWithMediaCache):
        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::getCacheOrigins):
        (WebKit::WebResourceCacheManagerProxy::clearCacheForOrigin):
        (WebKit::WebResourceCacheManagerProxy::clearCacheForAllOrigins):
        Added bug numbers.

2012-09-06  Michael Saboff  <msaboff@apple.com>

        WebKit2 IPC always sends strings using 16 bit data format
        https://bugs.webkit.org/show_bug.cgi?id=95811

        Reviewed by Benjamin Poulain.

        Changed string encoding to pass an 8bit flag and then send either 8 or 16 bit
        character data.

        * Platform/CoreIPC/ArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC::decodeStringText): New templatized string creation and decoder method.
        (CoreIPC::::decode):

2012-09-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] [WK2] Crash when navigating between pages
        https://bugs.webkit.org/show_bug.cgi?id=95949

        Reviewed by Martin Robinson.

        Do not trust isMainResource parameter in
        webkitWebViewResourceLoadStarted(), because it's always true for
        all subresources of pages loaded from the history cache. We can
        simply assume that the first resource loaded for the main frame
        is the main web view resource.

        * UIProcess/API/gtk/WebKitResourceLoadClient.cpp:
        (didInitiateLoadForResource):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewResourceLoadStarted):
        * UIProcess/API/gtk/WebKitWebViewPrivate.h:

2012-09-06  Balazs Kelemen  <kbalazs@webkit.org>

        [WK2] Crash in WebPageProxy::showPopupMenu if PageClient does not implement createPopupMenuProxy
        https://bugs.webkit.org/show_bug.cgi?id=95862

        Reviewed by Simon Hausmann.

        Bail out early if the PageClient does not create a PopupMenuProxy for us.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showPopupMenu):

2012-09-06  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Provide implementation for WebPage::performDefaultBehaviorForKeyEvent()
        https://bugs.webkit.org/show_bug.cgi?id=95943

        Reviewed by Kenneth Rohde Christiansen.

        Provide implementation for WebPage::performDefaultBehaviorForKeyEvent()
        in EFL WK2.

        * WebProcess/WebPage/efl/WebPageEfl.cpp:
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent):

2012-09-06  Patrick Gansterer  <paroga@webkit.org>

        Remove String::operator+=() from windows platform code
        https://bugs.webkit.org/show_bug.cgi?id=95904

        Reviewed by Benjamin Poulain.

        Use StringBuilder and operator+() to concatenate strings instead of operator+=().

        * UIProcess/win/WebView.cpp:
        (WebKit::imeCompositionArgumentNames):

2012-09-06  Kihong Kwon  <kihong.kwon@samsung.com>

        [CMake] Add notifications path to the WebKit2/CMakeLists.txt
        https://bugs.webkit.org/show_bug.cgi?id=95843

        Reviewed by Laszlo Gombos.

        Add WebCore/Modules/Notifications to the WebKit2_INCLUDE_DIRECTORIES of WebKit2/CMakeLists.txt.
        There are some build errors when ENABLE_NOTIFICATIONS feature is enabled.

        * CMakeLists.txt:

2012-09-06  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Various small Windows / MSVC build fixes
        https://bugs.webkit.org/show_bug.cgi?id=95934

        Reviewed by Kenneth Rohde Christiansen.

        * Shared/LayerTreeContext.h: Include stdint.h due to the use of uint32_t as layer id.
        * UIProcess/API/qt/qquickwebview_p.h:
        (WebKit): Fix struct vs. class forward declaration mismatch, causing linking errors.
        * UIProcess/API/qt/tests/bytearraytestdata.h: Remove export macro from internal test class
        that is not used anymore. Using the export macro from a DLL when the code in question is not
        part of the DLL results in the export macro expanding to dllimport, giving incorrect linkage
        for the unit test.
        * WebProcess/qt/WebProcessMainQt.cpp:
        (WebKit::WebProcessMainQt): Removed explicit call to srandom(), which is not available on Windows.
        The call appears to be unnecessary in the light of the WTF::initializeThreading() call below, which
        in turn calls WTF::initializeRandomNumberGenerator(), which does the same thing already (and isn't
        needed on Windows, as per comment in wtf/RandomNumberSeed.h)

2012-09-06  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix build with ANGLE on platforms that provide EGL/GLESv2
        https://bugs.webkit.org/show_bug.cgi?id=95965

        Reviewed by Tor Arne Vestbø.

        Depend on ANGLE if necessary, due to the use WebCore types that pull in ANGLE
        headers (GraphicsContext3D.h in particular).

        * Target.pri:

2012-09-06  Andras Becsi  <andras.becsi@nokia.com>

        [WK2] Make [Qt]ViewportHandler cross platform
        https://bugs.webkit.org/show_bug.cgi?id=91257

        Reviewed by Kenneth Rohde Christiansen and Simon Hausmann.

        Since QtViewportHandler includes behaviour that is not platform
        specific together with hooks to the QtQuick API layer, a platform
        independent implementation would allow other ports to use the
        viewport controlling functionality provided.

        This patch removes QtViewportHandler and introduces a platform
        independent PageViewportController class that is responsible
        for handling requests from the web process (eg. content size
        changes, viewport attributes changes and scroll position requests).
        Requests from the web process are acted on by a platform specific
        client class which implements the PageViewportControllerClient
        interface which provides hooks to the platform specific API layer.

        The PageViewportController is also responsible to notify the web
        process about changes in the viewport state (eg. viewport size,
        visible rect, content scale and movement trajectory).
        The client is responsible to delegate these UI changes to the
        PageViewportController.

        For now only PageViewportControllerClientQt implements the client
        interface besides providing other QQuick specific functionality
        (gestures, animations, etc).

        * Target.pri:
        * UIProcess/API/qt/qquickwebpage_p_p.h:
        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::onComponentComplete):
        (QQuickWebViewFlickablePrivate::~QQuickWebViewFlickablePrivate):
        (QQuickWebViewFlickablePrivate::didChangeViewportProperties):
        (QQuickWebViewFlickablePrivate::updateViewportSize):
        (QQuickWebViewFlickablePrivate::pageDidRequestScroll):
        (QQuickWebViewFlickablePrivate::didChangeContentsSize):
        * UIProcess/API/qt/qquickwebview_p.h:
        (WebKit):
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (WebKit):
        (QQuickWebViewPrivate::pageViewportControllerClient):
        (QQuickWebViewPrivate):
        (QQuickWebViewFlickablePrivate):
        * UIProcess/API/qt/qwebkittest.cpp:
        (QWebKitTest::viewport):
        (QWebKitTest::devicePixelRatio):
        (QWebKitTest::contentsScale):
        * UIProcess/PageViewportController.cpp: Added.
        (WebKit):
        (WebKit::bound):
        (WebKit::fuzzyCompare):
        (WebKit::boundPosition):
        (WebKit::ViewportUpdateDeferrer::ViewportUpdateDeferrer):
        (WebKit::ViewportUpdateDeferrer::~ViewportUpdateDeferrer):
        (WebKit::PageViewportController::PageViewportController):
        (WebKit::PageViewportController::convertFromViewport):
        (WebKit::PageViewportController::convertToViewport):
        (WebKit::PageViewportController::innerBoundedContentsScale):
        (WebKit::PageViewportController::outerBoundedContentsScale):
        (WebKit::PageViewportController::didChangeContentsSize):
        (WebKit::PageViewportController::pageDidRequestScroll):
        (WebKit::PageViewportController::setViewportSize):
        (WebKit::PageViewportController::setVisibleContentsRect):
        (WebKit::PageViewportController::syncVisibleContents):
        (WebKit::PageViewportController::didChangeViewportAttributes):
        (WebKit::PageViewportController::suspendContent):
        (WebKit::PageViewportController::resumeContent):
        (WebKit::PageViewportController::positionRangeForContentAtScale):
        * UIProcess/PageViewportController.h: Added.
        (WebCore):
        (WebKit):
        (ViewportUpdateDeferrer):
        (PageViewportController):
        (WebKit::PageViewportController::~PageViewportController):
        (WebKit::PageViewportController::hasSuspendedContent):
        (WebKit::PageViewportController::hadUserInteraction):
        (WebKit::PageViewportController::allowsUserScaling):
        (WebKit::PageViewportController::contentsLayoutSize):
        (WebKit::PageViewportController::devicePixelRatio):
        (WebKit::PageViewportController::minimumContentsScale):
        (WebKit::PageViewportController::maximumContentsScale):
        (WebKit::PageViewportController::setHadUserInteraction):
        * UIProcess/PageViewportControllerClient.h: Added.
        (WebKit):
        (PageViewportControllerClient):
        (WebKit::PageViewportControllerClient::PageViewportControllerClient):
        (WebKit::PageViewportControllerClient::~PageViewportControllerClient):
        * UIProcess/qt/PageViewportControllerClientQt.cpp: Added.
        (WebKit):
        (WebKit::PageViewportControllerClientQt::PageViewportControllerClientQt):
        (WebKit::PageViewportControllerClientQt::ScaleAnimation::updateCurrentValue):
        (WebKit::PageViewportControllerClientQt::~PageViewportControllerClientQt):
        (WebKit::PageViewportControllerClientQt::setContentRectVisiblePositionAtScale):
        (WebKit::PageViewportControllerClientQt::animateContentRectVisible):
        (WebKit::PageViewportControllerClientQt::flickMoveStarted):
        (WebKit::PageViewportControllerClientQt::flickMoveEnded):
        (WebKit::PageViewportControllerClientQt::pageItemPositionChanged):
        (WebKit::PageViewportControllerClientQt::scaleAnimationStateChanged):
        (WebKit::PageViewportControllerClientQt::touchBegin):
        (WebKit::PageViewportControllerClientQt::touchEnd):
        (WebKit::PageViewportControllerClientQt::focusEditableArea):
        (WebKit::PageViewportControllerClientQt::zoomToAreaGestureEnded):
        (WebKit::PageViewportControllerClientQt::nearestValidVisibleContentsRect):
        (WebKit::PageViewportControllerClientQt::setContentsPosition):
        (WebKit::PageViewportControllerClientQt::setContentsScale):
        (WebKit::PageViewportControllerClientQt::setContentsRectToNearestValidBounds):
        (WebKit::PageViewportControllerClientQt::didResumeContent):
        (WebKit::PageViewportControllerClientQt::allowsUserScaling):
        (WebKit::PageViewportControllerClientQt::devicePixelRatio):
        (WebKit::PageViewportControllerClientQt::minimumContentsScale):
        (WebKit::PageViewportControllerClientQt::maximumContentsScale):
        (WebKit::PageViewportControllerClientQt::currentContentsScale):
        (WebKit::PageViewportControllerClientQt::contentsLayoutSize):
        (WebKit::PageViewportControllerClientQt::scrollAnimationActive):
        (WebKit::PageViewportControllerClientQt::panGestureActive):
        (WebKit::PageViewportControllerClientQt::panGestureStarted):
        (WebKit::PageViewportControllerClientQt::panGestureRequestUpdate):
        (WebKit::PageViewportControllerClientQt::panGestureEnded):
        (WebKit::PageViewportControllerClientQt::panGestureCancelled):
        (WebKit::PageViewportControllerClientQt::scaleAnimationActive):
        (WebKit::PageViewportControllerClientQt::cancelScrollAnimation):
        (WebKit::PageViewportControllerClientQt::interruptScaleAnimation):
        (WebKit::PageViewportControllerClientQt::pinchGestureActive):
        (WebKit::PageViewportControllerClientQt::pinchGestureStarted):
        (WebKit::PageViewportControllerClientQt::pinchGestureRequestUpdate):
        (WebKit::PageViewportControllerClientQt::pinchGestureEnded):
        (WebKit::PageViewportControllerClientQt::pinchGestureCancelled):
        (WebKit::PageViewportControllerClientQt::visibleContentsRect):
        (WebKit::PageViewportControllerClientQt::didChangeContentsSize):
        (WebKit::PageViewportControllerClientQt::didChangeVisibleContents):
        (WebKit::PageViewportControllerClientQt::didChangeViewportAttributes):
        (WebKit::PageViewportControllerClientQt::updateViewportController):
        (WebKit::PageViewportControllerClientQt::scaleContent):
        (WebKit::PageViewportControllerClientQt::viewportScaleForRect):
        * UIProcess/qt/PageViewportControllerClientQt.h: Added.
        (WebKit):
        (PageViewportControllerClientQt):
        (WebKit::PageViewportControllerClientQt::setController):
        (ScaleAnimation):
        (WebKit::PageViewportControllerClientQt::ScaleAnimation::ScaleAnimation):
        (WebKit::PageViewportControllerClientQt::ScaleStackItem::ScaleStackItem):
        (ScaleStackItem):
        * UIProcess/qt/QtGestureRecognizer.cpp:
        (WebKit::QtGestureRecognizer::viewportController):
        * UIProcess/qt/QtGestureRecognizer.h:
        (WebKit):
        * UIProcess/qt/QtPanGestureRecognizer.cpp:
        (WebKit::QtPanGestureRecognizer::update):
        (WebKit::QtPanGestureRecognizer::finish):
        (WebKit::QtPanGestureRecognizer::cancel):
        * UIProcess/qt/QtPinchGestureRecognizer.cpp:
        (WebKit::QtPinchGestureRecognizer::update):
        (WebKit::QtPinchGestureRecognizer::finish):
        (WebKit::QtPinchGestureRecognizer::cancel):
        * UIProcess/qt/QtViewportHandler.cpp: Removed.
        * UIProcess/qt/QtWebPageEventHandler.cpp:
        (WebKit::QtWebPageEventHandler::QtWebPageEventHandler):
        (WebKit::QtWebPageEventHandler::setViewportController):
        (WebKit::QtWebPageEventHandler::inputPanelVisibleChanged):
        (WebKit::QtWebPageEventHandler::handleInputEvent):
        (WebKit::QtWebPageEventHandler::doneWithTouchEvent):
        (WebKit::QtWebPageEventHandler::didFindZoomableArea):
        * UIProcess/qt/QtWebPageEventHandler.h:
        (WebKit):
        (QtWebPageEventHandler):
        (WebKit::QtWebPageEventHandler::viewportController):

2012-09-06  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] WebMemorySampler.cpp is included twice.
        https://bugs.webkit.org/show_bug.cgi?id=95910

        Reviewed by Kentaro Hara.

        Now WebMemorySampler.cpp is in CMakeLists.txt and PlatformEfl.cmake.

        * PlatformEfl.cmake: Removed WebMemorySampler.cpp from source lists.

2012-09-05  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Implement missing feature to support <select> tag
        https://bugs.webkit.org/show_bug.cgi?id=95708

        Reviewed by Gyuyoung Kim.

        Added missing APIs for select tag.

        This patch provides all functionality of current WebPopupItem to applications.

        * UIProcess/API/efl/ewk_popup_menu_item.cpp:
        (_Ewk_Popup_Menu_Item):
        (_Ewk_Popup_Menu_Item::_Ewk_Popup_Menu_Item):
        (ewk_popup_menu_item_new):
        (ewk_popup_menu_item_text_direction_get):
        (ewk_popup_menu_item_text_direction_override_get):
        (ewk_popup_menu_item_tooltip_get):
        (ewk_popup_menu_item_accessibility_text_get):
        (ewk_popup_menu_item_enabled_get):
        (ewk_popup_menu_item_is_label_get):
        (ewk_popup_menu_item_selected_get):
        * UIProcess/API/efl/ewk_popup_menu_item.h:
        * UIProcess/API/efl/ewk_popup_menu_item_private.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_popup_menu_request):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (checkBasicPopupMenuItem):
        (showPopupMenu): Updated test case to cover new APIs.
        (TEST_F):

2012-09-05  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Provide implementation for WebProcess functions
        https://bugs.webkit.org/show_bug.cgi?id=95857

        Reviewed by Kenneth Rohde Christiansen.

        Rename WebProcessGtk to WebProcessSoup and reuse it in
        EFL port since all the code is soup-related. We now
        have a proper implementation for the WebProcess
        platform methods.

        * GNUmakefile.list.am:
        * PlatformEfl.cmake:
        * WebProcess/efl/WebProcessEfl.cpp: Removed.
        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainEfl): Enable soup cache for the soup session similarly to GTK port.
        * WebProcess/soup/WebProcessSoup.cpp: Renamed from Source/WebKit2/WebProcess/gtk/WebProcessGtk.cpp.
        (WebKit):
        (WebKit::getCacheDiskFreeSize):
        (WebKit::getMemorySize):
        (WebKit::WebProcess::platformSetCacheModel):
        (WebKit::WebProcess::platformClearResourceCaches):
        (WebKit::buildAcceptLanguages):
        (WebKit::setSoupSessionAcceptLanguage):
        (WebKit::languageChanged):
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::platformTerminate):

2012-09-05  Benjamin Poulain  <bpoulain@apple.com>

        More fixes for String::operator+=() on Mac
        https://bugs.webkit.org/show_bug.cgi?id=95880

        Reviewed by Adam Barth.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::createInspectorPage): This is a legitimate use of append(),
        there is no other concatenation outside that branch.
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::parseRFC822HeaderFields): Use string operators instead of +=.
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::userAgent): Another legitimate use of append().

2012-09-05  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Make visited link tracking work in multi-process mode
        https://bugs.webkit.org/show_bug.cgi?id=95869

        Reviewed by Dan Bernstein.

        * UIProcess/VisitedLinkProvider.h:
        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::VisitedLinkProvider): m_webProcessHasVisitedLinkState
        was making no sense in multi-process world, so it was let go.
        (WebKit::VisitedLinkProvider::processDidFinishLaunching): Track new processes.
        (WebKit::VisitedLinkProvider::processDidClose): Clean up pointers that are going
        to become stale.
        (WebKit::VisitedLinkProvider::pendingVisitedLinksTimerFired): Added comments. Fixed
        a bug where we would churn table size in some cases. Added debug logging in failure
        case. Re-implemented messaging code to work with multiple web processes.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::processDidFinishLaunching): Pass process proxy pointer to
        m_visitedLinkProvider, as it now needs to track processes.
        (WebKit::WebContext::disconnectProcess): Ditto. Also re-enabled visited link provider
        cleanup in multi-process mode.

2012-09-05  Brady Eidson  <beidson@apple.com>

        Frequent crashes in PluginView::scriptObject under runtimeObjectCustomGetOwnPropertySlot
        <rdar://problem/12142226> and https://bugs.webkit.org/show_bug.cgi?id=95026

        Patch partially by Andras Becsi  <andras.becsi@nokia.com>

        Reviewed by Andy Estes.

        If a plug-in fails to initialize then the m_plugin pointer is cleared out.
        When accessing the script object it is appropriate to unconditionally null check m_plugin.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::scriptObject): Null check m_plugin before trying to use it.

2012-09-05  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Provide implementation for WebFrameNetworkingContext
        https://bugs.webkit.org/show_bug.cgi?id=95826

        Reviewed by Kenneth Rohde Christiansen.

        Remove EFL-specific and empty implementation for WebFrameNetworkingContext
        and use the existing soup implementation instead.

        * PlatformEfl.cmake:
        * WebProcess/WebCoreSupport/efl/WebFrameNetworkingContext.h: Removed.

2012-09-05  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        [DRT] LTC:: Move printing related APIs from LayoutTestController to Internals
        https://bugs.webkit.org/show_bug.cgi?id=92735

        Reviewed by Hajime Morita.

        Move numberOfPages, pageProperty & pageSizeAndMarginsInPixels in Internals and remove duplicated code from DumprenderTree & WebkitTestRunner.
        Add symbols for Mac Win builds for corresponding newly added APIs.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-09-05  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] QRawWebViewPrivate does not initialize some members
        https://bugs.webkit.org/show_bug.cgi?id=95709

        Reviewed by Luiz Agostini.

        Don't miss initializing the bool flags.

        * UIProcess/API/qt/raw/qrawwebview.cpp:
        (QRawWebViewPrivate::QRawWebViewPrivate):

2012-09-04  Kangil Han  <kangil.han@samsung.com>

        [WK2] Use explicit constructor in InjectedBundle.
        https://bugs.webkit.org/show_bug.cgi?id=95746

        Reviewed by Sam Weinig.

        Added explicit keyword in constructor of InjectedBundle in order to avoid implicit type conversion.

        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):

2012-09-03  Sam Weinig  <sam@webkit.org>

        Part 1 of removing PlatformString.h, move remaining functions to new homes
        https://bugs.webkit.org/show_bug.cgi?id=95702

        Reviewed by Beth Dakin.

        * UIProcess/WebPageProxy.h:
        Forward declare SharedBuffer.

2012-09-04  Jeffrey Pfau  <jpfau@apple.com>

        Make plugins respect third-party storage blocking setting
        https://bugs.webkit.org/show_bug.cgi?id=94888

        Reviewed by Brady Eidson.

        Plugins that are in a third-party context should be put into private browsing mode so their storage is temporary.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::isPrivateBrowsingEnabled): Put the plugin into private browsing mode if it is in a third-party context.
        (WebKit::PluginView::privateBrowsingStateChanged): Make sure a plugin doesn't leave private browsing mode if it's in a third-party context.

2012-09-04  Pekka Vuorela  <pvuorela@iki.fi>

        [Qt] Remove use of deprecated QInputMethod method
        https://bugs.webkit.org/show_bug.cgi?id=95741

        Reviewed by Simon Hausmann.

        Adapt from deprecated QInputMethod::visible() to isVisible().

        * UIProcess/qt/QtWebPageEventHandler.cpp:
        (WebKit::setInputPanelVisible):
        (WebKit::QtWebPageEventHandler::inputPanelVisibleChanged):

2012-09-04  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Allow child-frame content in hit-tests.
        https://bugs.webkit.org/show_bug.cgi?id=95204

        Reviewed by Antonio Gomes.

        Update symbols for the Windows build-system.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-09-04  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Drop default theme concept
        https://bugs.webkit.org/show_bug.cgi?id=94778

        Reviewed by Gyuyoung Kim.

        * PlatformEfl.cmake: Removed DEFAULT_THEME_PATH definitions.
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_initialize): Removed default theme concept.
        * UIProcess/API/efl/ewk_view.h:
        Updated doxygen document not to mention default theme.

2012-09-03  Kangil Han  <kangil.han@samsung.com>

        [WK2][WTR] Implement WebKitEnableCaretBrowsing attribute in testRunner.overridePreference
        https://bugs.webkit.org/show_bug.cgi?id=95576

        Reviewed by Maciej Stachowiak.

        Added a line of macro to implement WebKitEnableCaretBrowsing attribute in testRunner.overridePreference

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):

2012-09-03  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] Not all activated elements highlighted, but some frames are
        https://bugs.webkit.org/show_bug.cgi?id=95683

        Reviewed by Kenneth Rohde Christiansen.

        Use the new function Node::willRespondToMouseClickEvents to better determine if the element
        can be tap-activated and avoid documents and frames completely.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::highlightPotentialActivation):

2012-09-03  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Add ewk_settings.
        https://bugs.webkit.org/show_bug.cgi?id=91206

        Reviewed by Gyuyoung Kim.

        Add the ewk_settings which wraps the WKPreferencesRef.
        The ewk_settings will be created by the ewk_view and it will be
        destroyed when the ewk_view is destroyed. I make each view to have
        its own group to make one ewk_settings sets preferences only for
        one ewk_view.
        The application can get the ewk_settings from ewk_view using
        ewk_view_settings_get() API.

        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_settings.cpp: Added.
        (ewk_settings_enable_scripts_set):
        (ewk_settings_enable_scripts_get):
        (ewk_settings_auto_load_images_set):
        (ewk_settings_auto_load_images_get):
        * UIProcess/API/efl/ewk_settings.h: Added.
        * UIProcess/API/efl/ewk_settings_private.h: Added.
        (_Ewk_Settings):
        (_Ewk_Settings::_Ewk_Settings):
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_ewk_view_initialize):
        (ewk_view_settings_get):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp: Added.
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2012-09-03  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Wheel-events fails temporarily after reload
        https://bugs.webkit.org/show_bug.cgi?id=94934

        Reviewed by Kenneth Rohde Christiansen.

        Set fixed visible content rect using visibleContentBounds instead of WebPage::size. Otherwise the 
        content rect will be incorrectly set to the entire document size, when resizesToContents is active.

        Test: UIProcess/API/qt/tests/qmltests/WebView/tst_wheelEventHandling.qml

        * UIProcess/API/qt/tests/qmltests/WebView/tst_wheelEventHandling.qml:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):

2012-09-03  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL] Use WebKitVersion.h to get version information
        https://bugs.webkit.org/show_bug.cgi?id=95669

        Reviewed by Gyuyoung Kim.

        Use WEBKIT_MAJOR_VERSION and WEBKIT_MINOR_VERSION 
        in the WebKitVersion.h

        * UIProcess/efl/WebPageProxyEfl.cpp:
        (WebKit::WebPageProxy::standardUserAgent):

2012-09-03  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Skip EWK2UnitTestBase.ewk_cookie_manager_permanent_storage API test
        https://bugs.webkit.org/show_bug.cgi?id=95671

        Reviewed by Kenneth Rohde Christiansen.

        Skip EWK2UnitTestBase.ewk_cookie_manager_permanent_storage
        API test since it is flaky on the bots.

        * UIProcess/API/efl/tests/test_ewk2_cookie_manager.cpp:
        (TEST_F):

2012-09-02  Kenichi Ishibashi  <bashi@chromium.org>

        WK2: Build failure on SnowLeopard after r127384
        https://bugs.webkit.org/show_bug.cgi?id=95665

        Reviewed by Dan Bernstein.

        Add SandboxExtension::consumePermanently(const Handle&) for !ENABLE(WEB_PROCESS_SANDBOX) to fix link error.

        * Shared/SandboxExtension.h:
        (WebKit::SandboxExtension::consumePermanently):

2012-09-02  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Keep activePopupMenu to call valueChangedForPopupMenu() outside showPopupMenu()
        https://bugs.webkit.org/show_bug.cgi?id=95355

        Reviewed by Gyuyoung Kim.

        Efl does not have a proper way to support nested loop so that applications
        may change value after showPopupMenu() is finished.

        * UIProcess/API/efl/tests/test_ewk2_view.cpp: Improved test case to cover this bug.
        (selectItemAfterDelayed):
        (showPopupMenu):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showPopupMenu):
        Guard with !PLATFORM(EFL) to keep the activePopupMenu valid to call valueChangedForPopupMenu
        outside showPopupMenu().

2012-09-02  Byungwoo Lee  <bw80.lee@gmail.com>

        [EFL] Add missing semicolon at the end of some lines.
        https://bugs.webkit.org/show_bug.cgi?id=95640

        Reviewed by Gyuyoung Kim.

        EWK_VIEW_PRIV_GET_OR_RETURN macro and other related macro can be used
        without semicolon, because it ends with a semicolon or complete block.
        This can make a human mistake about missing semicolon.

        Fixed the macros to require semicolon, and added missing semicolons.

        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_focus_in):
        (_ewk_view_smart_focus_out):
        (_ewk_view_smart_mouse_wheel):
        (_ewk_view_smart_mouse_down):
        (_ewk_view_smart_mouse_up):
        (_ewk_view_smart_mouse_move):
        (_ewk_view_smart_key_down):
        (_ewk_view_smart_key_up):
        (_ewk_view_initialize):

2012-09-01  Sam Weinig  <sam@webkit.org>

        Remove unused member variable from WebProcess.

        Rubber-stamped by Dan Bernstein.

        * WebProcess/WebProcess.h:
        (WebProcess):
        Remove m_applicationCachePathExtension.

2012-09-01  Sam Weinig  <sam@webkit.org>

        Use dynamic sandbox extension rather than sandbox parameters for paths provided by the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=95651

        Reviewed by Dan Bernstein.

        This is the first step to not relying on the initialization message to initialize
        the sandbox.

        * Shared/SandboxExtension.h:
        (SandboxExtension):
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::consumePermanently):
        Add static version of SandboxExtension::consumePermanently which takes a
        SandboxExtension::Handle. There is no reason to create a SandboxExtension
        just to consume it forever.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        (WebProcessCreationParameters):
        Add SandboxExtension::Handles for paths we need access to, and remove
        webInspectorBaseDirectory, which is unused.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        Create SandboxExtension::Handles for paths we need access to, and move
        getting the presenterApplicationPid to platformInitializeWebProcess, since
        it is Mac only.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        Move setting the presenterApplicationPid to platformInitializeWebProcess.

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::initializeSandbox):
        (WebKit::WebProcess::platformInitializeWebProcess):
        Replace the use of sandbox parameters for opening access for necessary paths
        with permanent consumption of sandbox extensions.

        * WebProcess/com.apple.WebProcess.sb.in:
        Remove sandbox rules that are now handled via extensions.

2012-08-31  Byungwoo Lee  <bw80.lee@samsung.com>

        Build warning : -Wformat on WebMemorySampler.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=95550

        Reviewed by Darin Adler.

        Fix build warning.
        Use String::number instead of String::format.

        * Shared/WebMemorySampler.cpp:
        (WebKit::WebMemorySampler::appendCurrentMemoryUsageToFile):

2012-08-31  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Use initial process in multi-process mode, too
        https://bugs.webkit.org/show_bug.cgi?id=95612

        Reviewed by Sam Weinig.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::warmInitialProcess):
        (WebKit::WebContext::disconnectProcess):
        (WebKit::WebContext::createWebPage):
        * UIProcess/WebContext.h:
        Added a boolean telling whether the last (normally, the only) process in m_processes
        is available for use in a new page.

2012-08-31  Alexey Proskuryakov  <ap@apple.com>

        [WK2] WebProcesses should not wait 60 seconds to close in multi-process mode
        https://bugs.webkit.org/show_bug.cgi?id=95616

        Reviewed by Darin Adler.

        * Shared/ChildProcess.cpp: (WebKit::ChildProcess::ChildProcess):
        * Shared/ChildProcess.h: (WebKit::ChildProcess::setTerminationTimeout):
        Expose a setter for timeout instead of taking it at construction time. If a derived
        class doesn't call the setter, default to 0.

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::PluginProcess):
        (WebKit::PluginProcess::initializePluginProcess):
        Use timeout from initialization message.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeWebProcess):
        Ditto.

        * Shared/Plugins/PluginProcessCreationParameters.cpp:
        (WebKit::PluginProcessCreationParameters::encode):
        (WebKit::PluginProcessCreationParameters::decode):
        * Shared/Plugins/PluginProcessCreationParameters.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        Funnel timeout across process boundary.

        * UIProcess/Plugins/PluginProcessProxy.cpp: (WebKit::PluginProcessProxy::didFinishLaunching):
        Pass timeout as initialization message after launch.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess): Pass timeout as initialization message
        (unlike plugin process proxy, web process proxy doesn't wait, and relies on the message
        being queued).
        (WebKit::WebContext::disconnectProcess): Skip invalidating global managers when
        one process quits. We still need to do something, but running this code would just
        result in assertion failures any time a page was closed.

2012-08-31  Brady Eidson  <beidson@apple.com>

       REGRESSION (r127252): incomplete repaint on Flash element after pinch to zoom
       <rdar://problem/12217897> and https://bugs.webkit.org/show_bug.cgi?id=95607

       Reviewed by Simon Fraser.

       * WebProcess/Plugins/PluginView.cpp:
       (WebKit::PluginView::viewGeometryDidChange): Only give the window coordinate clip rect a chance
         to override the boundsRect() if the page scale factor is 1.

2012-08-31  Tony Chang  <tony@chromium.org>

        Remove ENABLE_CSS3_FLEXBOX compile time flag
        https://bugs.webkit.org/show_bug.cgi?id=95382

        Reviewed by Ojan Vafai.

        Everyone is already enabling this by default and the spec has stablized.

        * Configurations/FeatureDefines.xcconfig:

2012-08-31  Pratik Solanki  <psolanki@apple.com>

        objc_msgSend and IMP should be cast appropriately before using
        https://bugs.webkit.org/show_bug.cgi?id=95242

        Reviewed by Benjamin Poulain.

        Follow on fix for Mac EWS - use objc-runtime.h instead of runtime.h so
        that it finds the declaration for objc_msgSend.

        * UIProcess/API/mac/PDFViewController.mm:

2012-08-31  Jon Lee  <jonlee@apple.com>

        [Tests] Add basic tests to http/tests/notifications
        https://bugs.webkit.org/show_bug.cgi?id=95493
        <rdar://problem/12209303>

        Reviewed by Alexey Proskuryakov.

        Simplify the passing of the permission policy to just a boolean instead of converting it
        back and forth from the NotificationClient::Permission enum.

        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h: Move the declaration to the section
        of functions that are TestRunner SPI.
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setWebNotificationPermission): Use a boolean.
        * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
        (WebKit::NotificationPermissionRequestManager::setPermissionLevelForTesting):
        * WebProcess/Notifications/NotificationPermissionRequestManager.h:
        (NotificationPermissionRequestManager):

        * win/WebKit2.vcproj: Add WKNotificationPermissionRequest.{h,cpp}.
        * win/WebKit2Generated.make: Export WKNotificationPermissionRequest.h.

2012-08-31  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] ASSERT(m_useFixedLayout) in WebPage when using QRawWebView without setting fixed layout
        https://bugs.webkit.org/show_bug.cgi?id=95557

        Reviewed by Noam Rosenthal.

        Let QRawWebView work with non-fixed layout size.

        * UIProcess/API/qt/raw/qrawwebview.cpp:
        (QRawWebView::setSize): Also put the member assigment into
        the point where the new size is ensured to be committed.

2012-08-31  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] LayerTreeRenderer::callOnMainTread method name is misleading
        https://bugs.webkit.org/show_bug.cgi?id=95558

        Reviewed by Kenneth Rohde Christiansen.

        Fix the typo in the function name so callers will really call this
        and not WTF::callOnMainThread. Renamed to dispatchOnMainThread to
        make it clear that these things are not the same.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::dispatchOnMainThread):
        (WebKit::LayerTreeRenderer::flushLayerChanges):
        (WebKit::LayerTreeRenderer::purgeGLResources):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):

2012-08-31  Brady Eidson  <beidson@apple.com>

        REGRESSION (127047): Crash in PluginProxy::windowVisibilityChanged when changing tabs
        <rdar://problem/12211180> and https://bugs.webkit.org/show_bug.cgi?id=95515

        Reviewed by Dan Bernstein.

        Plug-ins created in background tabs don't get initialized until they first become visible,
        so telling them they are now invisible leads to messaging on behalf of an uninitialized plug-in.

        Many other methods related to visibility and focus only call through if the plug-in is initialized,
        so setWindowIsVisible should do the same.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::setWindowIsVisible): Only tell initialized plug-ins of window visibility changes.

2012-08-31  Milian Wolff  <milian.wolff@kdab.com>

        [Qt] QNX does not support SOCK_SEQPACKET socket type for socketpair in ProcessLauncherQt
        https://bugs.webkit.org/show_bug.cgi?id=95553

        Reviewed by Simon Hausmann.

        Calling socketpair with SOCK_SEQPACKET socket type fails on QNX with an error 241 (EPROTOTYPE),
        as can be seen by the following debug output: "Creation of socket failed with errno: 241".
        A test app shows that SOCK_DGRAM works properly on QNX, thus use it instead of SOCK_SEQPACKET.

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:

2012-08-30  Mark Hahnenberg  <mhahnenberg@apple.com>

        ~JSNPObject should call invalidate() if it hasn't been called already
        https://bugs.webkit.org/show_bug.cgi?id=95497

        Reviewed by Geoffrey Garen.

        Finalization is no longer eager, just like destruction, so the original intent behind 
        this ASSERT in ~JSNPObject is no longer relevant. Therefore, we can just call invalidate() 
        ourselves in ~JSNPObject.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::~JSNPObject):

2012-08-30  Sam Weinig  <sam@webkit.org>

        Allow dynamic mach-lookup extensions in the WebProcess
        <rdar://problem/12207996>

        Reviewed by Gavin Barraclough.

        Like we allow file read/write dynamic sandbox extensions, we should allow
        mach-lookup extensions.

        * WebProcess/com.apple.WebProcess.sb.in:

2012-08-30  Geoffrey Garen  <ggaren@apple.com>

        Use one object instead of two for closures, eliminating ScopeChainNode
        https://bugs.webkit.org/show_bug.cgi?id=95501

        Reviewed by Filip Pizlo.

        Mechanical changes to update for JSC interface change.

2012-08-30  JungJik Lee  <jungjik.lee@samsung.com>

        [EFL][WK2] Add WebMemorySampler feature.
        https://bugs.webkit.org/show_bug.cgi?id=91214

        Reviewed by Kenneth Rohde Christiansen.

        Add WebMemorySampler feature to EFL port. WebMemorySampler records memory usage of
        WebProcess and UI Process and also it records application memory status in real time.
        Included items on the result are JIT, JS heap, fastmalloc bytes and
        application memory info from /proc/process_id/statm.

        * PlatformEfl.cmake:
        * Shared/linux/WebMemorySamplerLinux.cpp: Added.
        (WebKit):
        (ApplicationMemoryStats):
        (WebKit::nextToken):
        (WebKit::appendKeyValuePair):
        (WebKit::sampleMemoryAllocatedForApplication):
        (WebKit::WebMemorySampler::processName):
        (WebKit::WebMemorySampler::sampleWebKit):
        (WebKit::WebMemorySampler::sendMemoryPressureEvent):
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context::_Ewk_Context):

2012-08-30  Pratik Solanki  <psolanki@apple.com>

        objc_msgSend and IMP should be cast appropriately before using
        https://bugs.webkit.org/show_bug.cgi?id=95242

        Reviewed by Benjamin Poulain.

        Use wtfObjcMsgSend and wtfCallIMP templates which do appropriate casts
        to a function pointer with right types when calling objc_msgSend and an
        IMP method directly.

        * UIProcess/API/mac/PDFViewController.mm:
        (WebKit::PDFViewScrollView_scrollWheel):

2012-08-30  Benjamin Poulain  <bpoulain@apple.com>

        Replace JSC::UString by WTF::String
        https://bugs.webkit.org/show_bug.cgi?id=95271

        Reviewed by Geoffrey Garen.

        Update to code to switch from UString to String.

        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        (WebKit::JSNPMethod::finishCreation):
        * WebProcess/Plugins/Netscape/JSNPMethod.h:
        (WebKit::JSNPMethod::create):
        (JSNPMethod):
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::npIdentifierFromIdentifier):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::evaluate):
        (WebKit::NPRuntimeObjectMap::moveGlobalExceptionToExecState):

2012-08-29  Mark Hahnenberg  <mhahnenberg@apple.com>

        JSNPObject doesn't always protect its data when calling into plugin code
        https://bugs.webkit.org/show_bug.cgi?id=95394

        Reviewed by Brady Eidson.

        We need to use NPRuntimeObjectMap::PluginProtector when calling into plugin code since 
        there's no telling what the plugin will do, including destroying itself.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::getOwnPropertySlot):
        (WebKit::JSNPObject::getOwnPropertyDescriptor):

2012-08-30  Mike Sierra  <mike.sierra@nokia.com>

        [QT][WK2] webview API doc
        https://bugs.webkit.org/show_bug.cgi?id=81701

        Reviewed by Simon Hausmann.

        Various improvements and additions to the documentation of the QML WebView element.

        * UIProcess/API/qt/qquickwebview.cpp:

2012-08-29  Kangil Han  <kangil.han@samsung.com>

        [EFL][WK2] Replace PageClientImpl with ewk view in constructor of EflViewportHandler.
        https://bugs.webkit.org/show_bug.cgi?id=95408

        Reviewed by Gyuyoung Kim.

        To keep consistency of implementation, derived classes(from ewk view) should have view reference.
        From this, derived classes would have less interference from changes that would happen in port specific classes, i.e. PageClientImpl.

        * UIProcess/API/efl/EflViewportHandler.cpp:
        (WebKit::EflViewportHandler::EflViewportHandler):
        (WebKit::EflViewportHandler::drawingArea):
        (WebKit):
        (WebKit::EflViewportHandler::updateViewportSize):
        * UIProcess/API/efl/EflViewportHandler.h:
        (WebKit::EflViewportHandler::create):
        (EflViewportHandler):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_initialize):

2012-08-29  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [WK2] Use ASCIILiteral hotness for DEFINE_STATIC_LOCAL string
        https://bugs.webkit.org/show_bug.cgi?id=95318

        Reviewed by Benjamin Poulain.

        As recommended by http://trac.webkit.org/wiki/EfficientStrings,
        WebKit2 needs to use ASCIILiteral for the string of DEFINE_STATIC_LOCAL.

        * Shared/WebError.cpp:
        (WebKit::WebError::webKitErrorDomain):
        * Shared/WebPreferencesStore.cpp:
        (WebPreferencesKey):
        * UIProcess/InspectorServer/WebInspectorServer.cpp:
        (WebKit::WebInspectorServer::didReceiveWebSocketUpgradeHTTPRequest):
        * UIProcess/InspectorServer/qt/WebInspectorServerQt.cpp:
        (WebKit::remoteInspectorPagePath):
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::originKey):
        (WebKit::WebDatabaseManagerProxy::originQuotaKey):
        (WebKit::WebDatabaseManagerProxy::originUsageKey):
        (WebKit::WebDatabaseManagerProxy::databaseDetailsKey):
        (WebKit::WebDatabaseManagerProxy::databaseDetailsNameKey):
        (WebKit::WebDatabaseManagerProxy::databaseDetailsDisplayNameKey):
        (WebKit::WebDatabaseManagerProxy::databaseDetailsExpectedUsageKey):
        (WebKit::WebDatabaseManagerProxy::databaseDetailsCurrentUsageKey):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::executeEditCommand):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::didBeginEditing):
        (WebKit::WebEditorClient::respondToChangedContents):
        (WebKit::WebEditorClient::respondToChangedSelection):
        (WebKit::WebEditorClient::didEndEditing):
        * WebProcess/WebProcess.cpp:
        (WebKit::getWebCoreMemoryCacheStatistics):

2012-08-29  Luciano Wolf  <luciano.wolf@openbossa.org>

        [Qt][WK2] ApplicationCache LayoutTests failed
        https://bugs.webkit.org/show_bug.cgi?id=69541

        Reviewed by Kenneth Rohde Christiansen.

        Returns defaultDiskCacheDirectory when no cache directory was provided.
        It's used by setOfflineWebApplicationCacheEnabled method that won't work
        with an invalid cache directory.

        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::applicationCacheDirectory):

2012-08-29  José Dapena Paz  <jdapena@igalia.com>

        [Gtk] Process Gtk 3.4 smooth scroll events properly.
        https://bugs.webkit.org/show_bug.cgi?id=88070

        Gtk 3.3.18 added smooth scroll events, adding a new scroll direction that
        provides detailed delta information.

        Added GDK_SMOOTH_SCROLL_MASK to the events listened, and added
        code to process properly the new direction GDK_SCROLL_SMOOTH and
        its deltas.

        Reviewed by Martin Robinson.

        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebWheelEvent):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseRealize):

2012-08-29  Brady Eidson  <beidson@apple.com>

        REGRESSION: Not sending NPP_SetWindow is causing Flash to not throttle itself
        <rdar://problem/12133021> and https://bugs.webkit.org/show_bug.cgi?id=95274

        Reviewed by Sam Weinig.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewDidMoveToWindow]): Previously we'd only update window visibility when the window is hidden.
          Now we also update window visibility when the window is shown.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::callSetWindowInvisible): Call set window with a manufactured empty clip rect to tell
          the plug-in that it is complete hidden.
        (WebKit):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        (NetscapePlugin):
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::windowVisibilityChanged): Call "callSetWindow" or "callSetWindowInvisible" as appropriate.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::setWindowIsVisible): Tell the plugin that its visibility changed.
        (WebKit::PluginView::viewGeometryDidChange): Grab a clip rect that - although incorrect - at least is correct if
          the PluginView is completely hidden.

2012-08-29  Jon Lee  <jonlee@apple.com>

        Build patch for Qt

        * Target.pri: Missing WKMutableArray.cpp.

2012-08-29  Jon Lee  <jonlee@apple.com>

        Build patch for Qt.

        * Target.pri: Export WKArray and WKMutableArray for Qt.

2012-08-29  Jon Lee  <jonlee@apple.com>

        Added missing exports for Windows.

        * win/WebKit2Generated.make:

2012-08-29  Jon Lee  <jonlee@apple.com>

        Windows build fix.

        * win/WebKit2Generated.make: Export WKNotificationManager.h.

2012-08-29  Jon Lee  <jonlee@apple.com>

        [WK2] Add SPI to retrieve internal IDs for web notifications
        https://bugs.webkit.org/show_bug.cgi?id=95100
        <rdar://problem/12180208>

        Reviewed by Alexey Proskuryakov.

        This is work toward providing Mac support for web notifications in DRT and WTR (77969).

        Add function to retrieve the internal ID for a notification. This is needed by tests to support simulating
        a user click on a notification.

        * DerivedSources.pri: Expose JSNotification.h as private header.
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleGetWebNotificationID): Calls into notification manager to get internal ID.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h: Add WKBundleGetWebNotificationID() to be able
        retrieve notification ID.
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::webNotificationID):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):
        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::notificationIDForTesting):
        (WebKit):
        * WebProcess/Notifications/WebNotificationManager.h:
        (WebNotificationManager):

2012-08-28  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Enable the edge distance anti-aliasing for accelerated compositing layers
        https://bugs.webkit.org/show_bug.cgi?id=95272

        Reviewed by No'am Rosenthal.

        Turn on edge-distance anti-aliasing for GTK+ WebKit2. This
        improves the quality of layer rendering.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::initialize):

2012-08-28  Kangil Han  <kangil.han@samsung.com>

        [WK2] Use explicit constructor in PageClientImpl.
        https://bugs.webkit.org/show_bug.cgi?id=95170

        Reviewed by Darin Adler.

        Added explicit keyword in constructor of PageClientImpl in order to avoid implicit type conversion.

        * UIProcess/API/gtk/PageClientImpl.h:
        (PageClientImpl):
        * UIProcess/API/mac/PageClientImpl.h:
        (PageClientImpl):

2012-08-28  Rik Cabanier  <cabanier@adobe.com>

        Add ENABLE_CSS_COMPOSITING flag to WebKit2 project
        https://bugs.webkit.org/show_bug.cgi?id=95227

        Reviewed by Dirk Schulze.

        The WebKit2 project was not updated to compile with the CSS_COMPOSITING flag.
        This caused crashes when the webkit2 code had to use that flag.

        * Configurations/FeatureDefines.xcconfig:

2012-08-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r126914.
        http://trac.webkit.org/changeset/126914
        https://bugs.webkit.org/show_bug.cgi?id=95239

        it breaks everything and fixes nothing (Requested by pizlo on
        #webkit).

        * Platform/CoreIPC/ArgumentCoders.h:
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::SyncMessageState::getOrCreate):
        (CoreIPC::Connection::waitForMessage):
        (CoreIPC::Connection::processIncomingMessage):
        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::registerEventSourceHandler):
        (WorkQueue::unregisterEventSourceHandler):
        * Platform/mac/WorkQueueMac.cpp:
        (WorkQueue::unregisterMachPortEventHandler):
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::pluginDestroyed):
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        * Shared/WebPreferencesStore.cpp:
        (WebKit::valueForKey):
        (WebKit::WebPreferencesStore::getBoolValueForKey):
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (CoreIPC::::decode):
        * Shared/qt/ArgumentCodersQt.cpp:
        (CoreIPC::::decode):
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (CoreIPC::::decode):
        * UIProcess/API/efl/ewk_back_forward_list.cpp:
        (_Ewk_Back_Forward_List::~_Ewk_Back_Forward_List):
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context::~_Ewk_Context):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_priv_loading_resources_clear):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_get_subresources):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseContainerForall):
        * UIProcess/API/mac/WKPrintingView.mm:
        (-[WKPrintingView _expectedPreviewCallbackForRect:]):
        (pageDidDrawToPDF):
        (-[WKPrintingView _drawPreview:]):
        * UIProcess/API/mac/WKView.mm:
        (commandNameForSelector):
        (-[WKView validateUserInterfaceItem:]):
        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStore::updateTile):
        (WebKit::CoordinatedBackingStore::texture):
        (WebKit::CoordinatedBackingStore::paintToTextureMapper):
        (WebKit::CoordinatedBackingStore::commitTileOperations):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::updateTileForLayer):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::adjustPositionForFixedLayers):
        (WebKit::LayerTreeRenderer::syncCanvas):
        (WebKit::LayerTreeRenderer::setLayerChildren):
        (WebKit::LayerTreeRenderer::setLayerFilters):
        (WebKit::LayerTreeRenderer::setLayerState):
        (WebKit::LayerTreeRenderer::assignImageToLayer):
        * UIProcess/GeolocationPermissionRequestManagerProxy.cpp:
        (WebKit::GeolocationPermissionRequestManagerProxy::invalidateRequests):
        * UIProcess/InspectorServer/WebInspectorServer.cpp:
        (WebKit::WebInspectorServer::~WebInspectorServer):
        (WebKit::WebInspectorServer::registerPage):
        * UIProcess/InspectorServer/WebSocketServerConnection.cpp:
        (WebKit::WebSocketServerConnection::sendHTTPResponseHeader):
        * UIProcess/InspectorServer/qt/WebInspectorServerQt.cpp:
        (WebKit::WebInspectorServer::buildPageList):
        * UIProcess/Notifications/NotificationPermissionRequestManagerProxy.cpp:
        (WebKit::NotificationPermissionRequestManagerProxy::invalidateRequests):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch):
        * UIProcess/WebContext.cpp:
        (WebKit::createDictionaryFromHashMap):
        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::didFinishURLImport):
        * UIProcess/WebIntentData.cpp:
        (WebKit::WebIntentData::extras):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::checkURLReceivedFromWebProcess):
        (WebKit::WebProcessProxy::addBackForwardItem):
        (WebKit::WebProcessProxy::frameCountInPage):
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        (WebKit::GeolocationPermissionRequestManager::cancelRequestForGeolocation):
        (WebKit::GeolocationPermissionRequestManager::didReceiveGeolocationPermissionDecision):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::getOrCreate):
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::getOrCreate):
        * WebProcess/InjectedBundle/InjectedBundleIntent.cpp:
        (WebKit::InjectedBundleIntent::extras):
        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::policyForOrigin):
        (WebKit::WebNotificationManager::show):
        (WebKit::WebNotificationManager::clearNotifications):
        (WebKit::WebNotificationManager::removeNotificationFromContextMap):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::invalidate):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::destroyStream):
        (WebKit::NetscapePlugin::unscheduleTimer):
        (WebKit::NetscapePlugin::frameDidFinishLoading):
        (WebKit::NetscapePlugin::frameDidFail):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::buildHTTPHeaders):
        (WebKit::PluginView::~PluginView):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::layerByID):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::adoptImageBackingStore):
        (WebKit::LayerTreeCoordinator::releaseImageBackingStore):
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::removeItem):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::commandNameForSelectorName):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::visitedLinkStateChanged):
        (WebKit::WebProcess::allVisitedLinkStateChanged):
        (WebKit::WebProcess::focusedWebPage):
        (WebKit::WebProcess::createWebPage):
        (WebKit::WebProcess::webPageGroup):
        (WebKit::fromCountedSetToHashMap):
        (WebKit::WebProcess::setTextCheckerState):

2012-08-28  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Expose process model as API
        https://bugs.webkit.org/show_bug.cgi?id=95228

        Reviewed by Jon Honeycutt.

        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toProcessModel):
        (WebKit::toAPI):
        Convert ProcessModel values.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetProcessModel):
        (WKContextGetProcessModel):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/WebContext.cpp: (WebKit::WebContext::setProcessModel):
        * UIProcess/WebContext.h:
        Added a setter and a getter. Setting process model is only allowed when there are
        no processes yet - that's checked with a CRASH to guarantee that clients using
        production builds of WebKit2 don't misstep.

2012-08-28  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Rename first/second to key/value in HashMap iterators
        https://bugs.webkit.org/show_bug.cgi?id=82784

        Reviewed by Eric Seidel.

        * Platform/CoreIPC/ArgumentCoders.h:
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::SyncMessageState::getOrCreate):
        (CoreIPC::Connection::waitForMessage):
        (CoreIPC::Connection::processIncomingMessage):
        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::registerEventSourceHandler):
        (WorkQueue::unregisterEventSourceHandler):
        * Platform/mac/WorkQueueMac.cpp:
        (WorkQueue::unregisterMachPortEventHandler):
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::pluginDestroyed):
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        * Shared/WebPreferencesStore.cpp:
        (WebKit::valueForKey):
        (WebKit::WebPreferencesStore::getBoolValueForKey):
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (CoreIPC::::decode):
        * Shared/qt/ArgumentCodersQt.cpp:
        (CoreIPC::::decode):
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (CoreIPC::::decode):
        * UIProcess/API/efl/ewk_back_forward_list.cpp:
        (_Ewk_Back_Forward_List::~_Ewk_Back_Forward_List):
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context::~_Ewk_Context):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_priv_loading_resources_clear):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_get_subresources):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseContainerForall):
        * UIProcess/API/mac/WKPrintingView.mm:
        (-[WKPrintingView _expectedPreviewCallbackForRect:]):
        (pageDidDrawToPDF):
        (-[WKPrintingView _drawPreview:]):
        * UIProcess/API/mac/WKView.mm:
        (commandNameForSelector):
        (-[WKView validateUserInterfaceItem:]):
        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStore::updateTile):
        (WebKit::CoordinatedBackingStore::texture):
        (WebKit::CoordinatedBackingStore::paintToTextureMapper):
        (WebKit::CoordinatedBackingStore::commitTileOperations):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::updateTileForLayer):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::adjustPositionForFixedLayers):
        (WebKit::LayerTreeRenderer::syncCanvas):
        (WebKit::LayerTreeRenderer::setLayerChildren):
        (WebKit::LayerTreeRenderer::setLayerFilters):
        (WebKit::LayerTreeRenderer::setLayerState):
        (WebKit::LayerTreeRenderer::assignImageToLayer):
        * UIProcess/GeolocationPermissionRequestManagerProxy.cpp:
        (WebKit::GeolocationPermissionRequestManagerProxy::invalidateRequests):
        * UIProcess/InspectorServer/WebInspectorServer.cpp:
        (WebKit::WebInspectorServer::~WebInspectorServer):
        (WebKit::WebInspectorServer::registerPage):
        * UIProcess/InspectorServer/WebSocketServerConnection.cpp:
        (WebKit::WebSocketServerConnection::sendHTTPResponseHeader):
        * UIProcess/InspectorServer/qt/WebInspectorServerQt.cpp:
        (WebKit::WebInspectorServer::buildPageList):
        * UIProcess/Notifications/NotificationPermissionRequestManagerProxy.cpp:
        (WebKit::NotificationPermissionRequestManagerProxy::invalidateRequests):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch):
        * UIProcess/WebContext.cpp:
        (WebKit::createDictionaryFromHashMap):
        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::didFinishURLImport):
        * UIProcess/WebIntentData.cpp:
        (WebKit::WebIntentData::extras):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::checkURLReceivedFromWebProcess):
        (WebKit::WebProcessProxy::addBackForwardItem):
        (WebKit::WebProcessProxy::frameCountInPage):
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        (WebKit::GeolocationPermissionRequestManager::cancelRequestForGeolocation):
        (WebKit::GeolocationPermissionRequestManager::didReceiveGeolocationPermissionDecision):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::getOrCreate):
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::getOrCreate):
        * WebProcess/InjectedBundle/InjectedBundleIntent.cpp:
        (WebKit::InjectedBundleIntent::extras):
        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::policyForOrigin):
        (WebKit::WebNotificationManager::show):
        (WebKit::WebNotificationManager::clearNotifications):
        (WebKit::WebNotificationManager::removeNotificationFromContextMap):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::invalidate):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::destroyStream):
        (WebKit::NetscapePlugin::unscheduleTimer):
        (WebKit::NetscapePlugin::frameDidFinishLoading):
        (WebKit::NetscapePlugin::frameDidFail):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::buildHTTPHeaders):
        (WebKit::PluginView::~PluginView):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::layerByID):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::adoptImageBackingStore):
        (WebKit::LayerTreeCoordinator::releaseImageBackingStore):
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::removeItem):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::commandNameForSelectorName):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::visitedLinkStateChanged):
        (WebKit::WebProcess::allVisitedLinkStateChanged):
        (WebKit::WebProcess::focusedWebPage):
        (WebKit::WebProcess::createWebPage):
        (WebKit::WebProcess::webPageGroup):
        (WebKit::fromCountedSetToHashMap):
        (WebKit::WebProcess::setTextCheckerState):

2012-08-28  Jon Lee  <jonlee@apple.com>

        [WK2] Bugs in maintenance of internal state when user decides whether to grant notification permissions
        https://bugs.webkit.org/show_bug.cgi?id=95220
        <rdar://problem/12189895>

        Reviewed by Jessie Berlin.

        A couple of the maps maintained by the request manager should have been cleaned up when the user decided on
        whether to grant a website permission to post notifications.

        Also, the web process' copy of the permissions was not updated appropriately. This meant that in the
        permission callback, Notification.permission was not the same value as the permission value included as
        the first parameter of the callback.

        This first surfaced as part of the work to bring Mac support for web notifications. I have a test that
        will check for regressions in this area, once all of that has been checked in (bug 77969).

        * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
        (WebKit::NotificationPermissionRequestManager::didReceiveNotificationPermissionDecision):

2012-08-28  Jon Lee  <jonlee@apple.com>

        [WK2] Add SPI for injected bundle to manually set permissions
        https://bugs.webkit.org/show_bug.cgi?id=95127
        <rdar://problem/12182635>

        Reviewed by Jessie Berlin.

        This is work toward providing Mac support for web notifications in DRT and WTR (77969).

        Add support functions to WebKit2 which maintain the map of permissions to origins for web notifications.
        For WebKit1 the map is managed by DumpRenderTree.

        * WebProcess/InjectedBundle/InjectedBundle.h: Add TestRunner SPI.
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setWebNotificationPermission):
        (WebKit::InjectedBundle::removeAllWebNotificationPermissions):

        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h: Expose as WK API. Also, rearrange the ordering of the
        functions so that it reflects the same order found in InjectedBundle.h.
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:

        * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
        (WebKit::NotificationPermissionRequestManager::setPermissionLevelForTesting): Manually set the permission
        level for an origin.
        (WebKit::NotificationPermissionRequestManager::removeAllPermissionsForTesting):
        * WebProcess/Notifications/NotificationPermissionRequestManager.h:
        (NotificationPermissionRequestManager):
        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::removeAllPermissionsForTesting): Clear the permission map.
        * WebProcess/Notifications/WebNotificationManager.h: Promote didUpdateNotificationDecision message as public
        function, so that NotificationPermissionRequestManager can update the permission map.

2012-08-28  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] WebKit EFL updates view on HTTP 204 response
        https://bugs.webkit.org/show_bug.cgi?id=95199

        Reviewed by Kenneth Rohde Christiansen.

        Ignore HTTP responses which have status code equal
        to 204 (No Content).

        * UIProcess/API/efl/ewk_view_policy_client.cpp:
        (decidePolicyForResponseCallback):

2012-08-28  Zeno Albisser  <zeno@webkit.org>

        LayerTreeCoordinatorProxy should use uint64_t for surface key.
        https://bugs.webkit.org/show_bug.cgi?id=95175

        GraphicsSurface tokens are of type uint64_t.
        Therefore LayerTreeCoordinatorProxy must use the same type to
        identify a GraphicsSurface/ShareableSurface.

        Reviewed by Noam Rosenthal.

        * Shared/ShareableSurface.h:
        (WebKit::ShareableSurface::Handle::graphicsSurfaceToken):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::updateTileForLayer):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):

2012-08-28  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Implement WebPopupMenuProxyEfl to support <select>
        https://bugs.webkit.org/show_bug.cgi?id=88616

        Reviewed by Gyuyoung Kim.

        Implemented popup menu proxy and interface for Efl.

        Applications should implement popup menu by overriding
        smart class function to support select tag.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h: Included ewk_popup_menu_item.h
        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createPopupMenuProxy):
        * UIProcess/API/efl/ewk_popup_menu_item.cpp: Added.
        (_Ewk_Popup_Menu_Item):
        (_Ewk_Popup_Menu_Item::_Ewk_Popup_Menu_Item):
        (ewk_popup_menu_item_new):
        (ewk_popup_menu_item_free):
        (ewk_popup_menu_item_type_get): Added API to retrieve type of item.
        (ewk_popup_menu_item_text_get): Added API to retrieve text of item.
        * UIProcess/API/efl/ewk_popup_menu_item.h: Added.
        * UIProcess/API/efl/ewk_popup_menu_item_private.h: Added.
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::~_Ewk_View_Private_Data):
        (ewk_view_popup_menu_request): Added to call popup_menu_show, smart class function.
        (ewk_view_popup_menu_close): Added API to call popup_menu_hide, smart class function.
        (ewk_view_popup_menu_select): Added API to change selected index.
        * UIProcess/API/efl/ewk_view.h:
        Added smart class function for applications to override.
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::EWK2UnitTestBase):
        (EWK2UnitTest::EWK2UnitTestBase::SetUp):
        (EWK2UnitTest::EWK2UnitTestBase::loadUrlSync):
        (EWK2UnitTest::EWK2UnitTestBase::waitUntilLoadFinished):
        Extracted from loadUrlSync for tests using ewk_view_html_string_load to
        share onLoadFinished.
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        (EWK2UnitTest::EWK2UnitTestBase::ewkViewClass):
        Added ewkViewClass to test smart methods such as popup_menu_show.
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (popup_menu_show):
        (TEST_F): Added a test case for ewk_view_popup_menu_select and related codes.
        * UIProcess/efl/WebPopupMenuProxyEfl.cpp: Added.
        (WebKit):
        (WebKit::WebPopupMenuProxyEfl::WebPopupMenuProxyEfl):
        (WebKit::WebPopupMenuProxyEfl::showPopupMenu):
        (WebKit::WebPopupMenuProxyEfl::hidePopupMenu):
        (WebKit::WebPopupMenuProxyEfl::valueChanged):
        * UIProcess/efl/WebPopupMenuProxyEfl.h: Added.
        (WebPopupMenuProxyEfl):
        (WebKit::WebPopupMenuProxyEfl::create):

2012-08-27  Kangil Han  <kangil.han@samsung.com>

        [EFL][WK2] Fix PageClientImpl layer violation
        https://bugs.webkit.org/show_bug.cgi?id=94906

        Reviewed by Gyuyoung Kim.

        Given WK2 hierarchy, current PageClientImpl has violated API layer by having WebPageProxy.
        Subsequently, it has been given WebContext, static singleton object, in its argument unnecessarily.
        Therefore, this patch moved WebPageProxy from PageClientImpl to Ewk_View_Private_Data.
        Plus, WebContext was removed from PageClientImpl since it is not needed anymore.
        As a result, EFL has same form of PageClientImpl with other ports, i.e. gtk+ and mac.
        From API point of view, nothing has been changed because all things done locally.

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::PageClientImpl):
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        * UIProcess/API/efl/PageClientImpl.h:
        (WebKit::PageClientImpl::create):
        (PageClientImpl):
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_ewk_view_smart_focus_in):
        (_ewk_view_smart_focus_out):
        (_ewk_view_smart_mouse_wheel):
        (_ewk_view_smart_mouse_down):
        (_ewk_view_smart_mouse_up):
        (_ewk_view_smart_mouse_move):
        (_ewk_view_smart_key_down):
        (_ewk_view_smart_key_up):
        (_ewk_view_smart_calculate):
        (_ewk_view_smart_color_set):
        (_ewk_view_initialize):
        (ewk_view_uri_update):
        (ewk_view_uri_set):
        (ewk_view_reload):
        (ewk_view_reload_bypass_cache):
        (ewk_view_stop):
        (ewk_view_title_get):
        (ewk_view_load_progress_get):
        (ewk_view_scale_set):
        (ewk_view_scale_get):
        (ewk_view_device_pixel_ratio_set):
        (ewk_view_device_pixel_ratio_get):
        (ewk_view_theme_set):
        (ewk_view_back):
        (ewk_view_forward):
        (ewk_view_intent_deliver):
        (ewk_view_back_possible):
        (ewk_view_forward_possible):
        (ewk_view_html_string_load):
        (ewk_view_page_get):
        (ewk_view_setting_encoding_custom_get):
        (ewk_view_setting_encoding_custom_set):
        (ewk_view_text_find):
        (ewk_view_text_find_highlight_clear):

2012-08-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r126836.
        http://trac.webkit.org/changeset/126836
        https://bugs.webkit.org/show_bug.cgi?id=95163

        Broke all Apple ports, EFL, and Qt. (Requested by tkent on
        #webkit).

        * Platform/CoreIPC/ArgumentCoders.h:
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::SyncMessageState::getOrCreate):
        (CoreIPC::Connection::waitForMessage):
        (CoreIPC::Connection::processIncomingMessage):
        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::registerEventSourceHandler):
        (WorkQueue::unregisterEventSourceHandler):
        * Platform/mac/WorkQueueMac.cpp:
        (WorkQueue::unregisterMachPortEventHandler):
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::pluginDestroyed):
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        * Shared/WebPreferencesStore.cpp:
        (WebKit::valueForKey):
        (WebKit::WebPreferencesStore::getBoolValueForKey):
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (CoreIPC::::decode):
        * Shared/qt/ArgumentCodersQt.cpp:
        (CoreIPC::::decode):
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (CoreIPC::::decode):
        * UIProcess/API/efl/ewk_back_forward_list.cpp:
        (_Ewk_Back_Forward_List::~_Ewk_Back_Forward_List):
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context::~_Ewk_Context):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_priv_loading_resources_clear):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_get_subresources):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseContainerForall):
        * UIProcess/API/mac/WKPrintingView.mm:
        (-[WKPrintingView _expectedPreviewCallbackForRect:]):
        (pageDidDrawToPDF):
        (-[WKPrintingView _drawPreview:]):
        * UIProcess/API/mac/WKView.mm:
        (commandNameForSelector):
        (-[WKView validateUserInterfaceItem:]):
        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStore::updateTile):
        (WebKit::CoordinatedBackingStore::texture):
        (WebKit::CoordinatedBackingStore::paintToTextureMapper):
        (WebKit::CoordinatedBackingStore::commitTileOperations):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::updateTileForLayer):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::adjustPositionForFixedLayers):
        (WebKit::LayerTreeRenderer::syncCanvas):
        (WebKit::LayerTreeRenderer::setLayerChildren):
        (WebKit::LayerTreeRenderer::setLayerFilters):
        (WebKit::LayerTreeRenderer::setLayerState):
        (WebKit::LayerTreeRenderer::assignImageToLayer):
        * UIProcess/GeolocationPermissionRequestManagerProxy.cpp:
        (WebKit::GeolocationPermissionRequestManagerProxy::invalidateRequests):
        * UIProcess/InspectorServer/WebInspectorServer.cpp:
        (WebKit::WebInspectorServer::~WebInspectorServer):
        (WebKit::WebInspectorServer::registerPage):
        * UIProcess/InspectorServer/WebSocketServerConnection.cpp:
        (WebKit::WebSocketServerConnection::sendHTTPResponseHeader):
        * UIProcess/InspectorServer/qt/WebInspectorServerQt.cpp:
        (WebKit::WebInspectorServer::buildPageList):
        * UIProcess/Notifications/NotificationPermissionRequestManagerProxy.cpp:
        (WebKit::NotificationPermissionRequestManagerProxy::invalidateRequests):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch):
        * UIProcess/WebContext.cpp:
        (WebKit::createDictionaryFromHashMap):
        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::didFinishURLImport):
        * UIProcess/WebIntentData.cpp:
        (WebKit::WebIntentData::extras):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::checkURLReceivedFromWebProcess):
        (WebKit::WebProcessProxy::addBackForwardItem):
        (WebKit::WebProcessProxy::frameCountInPage):
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        (WebKit::GeolocationPermissionRequestManager::cancelRequestForGeolocation):
        (WebKit::GeolocationPermissionRequestManager::didReceiveGeolocationPermissionDecision):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::getOrCreate):
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::getOrCreate):
        * WebProcess/InjectedBundle/InjectedBundleIntent.cpp:
        (WebKit::InjectedBundleIntent::extras):
        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::policyForOrigin):
        (WebKit::WebNotificationManager::show):
        (WebKit::WebNotificationManager::clearNotifications):
        (WebKit::WebNotificationManager::removeNotificationFromContextMap):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::invalidate):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::destroyStream):
        (WebKit::NetscapePlugin::unscheduleTimer):
        (WebKit::NetscapePlugin::frameDidFinishLoading):
        (WebKit::NetscapePlugin::frameDidFail):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::buildHTTPHeaders):
        (WebKit::PluginView::~PluginView):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::layerByID):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::adoptImageBackingStore):
        (WebKit::LayerTreeCoordinator::releaseImageBackingStore):
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::removeItem):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::commandNameForSelectorName):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::visitedLinkStateChanged):
        (WebKit::WebProcess::allVisitedLinkStateChanged):
        (WebKit::WebProcess::focusedWebPage):
        (WebKit::WebProcess::createWebPage):
        (WebKit::WebProcess::webPageGroup):
        (WebKit::fromCountedSetToHashMap):
        (WebKit::WebProcess::setTextCheckerState):

2012-08-27  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Rename first/second to key/value in HashMap iterators
        https://bugs.webkit.org/show_bug.cgi?id=82784

        Reviewed by Eric Seidel.

        * Platform/CoreIPC/ArgumentCoders.h:
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::SyncMessageState::getOrCreate):
        (CoreIPC::Connection::waitForMessage):
        (CoreIPC::Connection::processIncomingMessage):
        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::registerEventSourceHandler):
        (WorkQueue::unregisterEventSourceHandler):
        * Platform/mac/WorkQueueMac.cpp:
        (WorkQueue::unregisterMachPortEventHandler):
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::pluginDestroyed):
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        * Shared/WebPreferencesStore.cpp:
        (WebKit::valueForKey):
        (WebKit::WebPreferencesStore::getBoolValueForKey):
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (CoreIPC::::decode):
        * Shared/qt/ArgumentCodersQt.cpp:
        (CoreIPC::::decode):
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (CoreIPC::::decode):
        * UIProcess/API/efl/ewk_back_forward_list.cpp:
        (_Ewk_Back_Forward_List::~_Ewk_Back_Forward_List):
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context::~_Ewk_Context):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_priv_loading_resources_clear):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_get_subresources):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseContainerForall):
        * UIProcess/API/mac/WKPrintingView.mm:
        (-[WKPrintingView _expectedPreviewCallbackForRect:]):
        (pageDidDrawToPDF):
        (-[WKPrintingView _drawPreview:]):
        * UIProcess/API/mac/WKView.mm:
        (commandNameForSelector):
        (-[WKView validateUserInterfaceItem:]):
        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStore::updateTile):
        (WebKit::CoordinatedBackingStore::texture):
        (WebKit::CoordinatedBackingStore::paintToTextureMapper):
        (WebKit::CoordinatedBackingStore::commitTileOperations):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::updateTileForLayer):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::adjustPositionForFixedLayers):
        (WebKit::LayerTreeRenderer::syncCanvas):
        (WebKit::LayerTreeRenderer::setLayerChildren):
        (WebKit::LayerTreeRenderer::setLayerFilters):
        (WebKit::LayerTreeRenderer::setLayerState):
        (WebKit::LayerTreeRenderer::assignImageToLayer):
        * UIProcess/GeolocationPermissionRequestManagerProxy.cpp:
        (WebKit::GeolocationPermissionRequestManagerProxy::invalidateRequests):
        * UIProcess/InspectorServer/WebInspectorServer.cpp:
        (WebKit::WebInspectorServer::~WebInspectorServer):
        (WebKit::WebInspectorServer::registerPage):
        * UIProcess/InspectorServer/WebSocketServerConnection.cpp:
        (WebKit::WebSocketServerConnection::sendHTTPResponseHeader):
        * UIProcess/InspectorServer/qt/WebInspectorServerQt.cpp:
        (WebKit::WebInspectorServer::buildPageList):
        * UIProcess/Notifications/NotificationPermissionRequestManagerProxy.cpp:
        (WebKit::NotificationPermissionRequestManagerProxy::invalidateRequests):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch):
        * UIProcess/WebContext.cpp:
        (WebKit::createDictionaryFromHashMap):
        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::didFinishURLImport):
        * UIProcess/WebIntentData.cpp:
        (WebKit::WebIntentData::extras):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::checkURLReceivedFromWebProcess):
        (WebKit::WebProcessProxy::addBackForwardItem):
        (WebKit::WebProcessProxy::frameCountInPage):
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        (WebKit::GeolocationPermissionRequestManager::cancelRequestForGeolocation):
        (WebKit::GeolocationPermissionRequestManager::didReceiveGeolocationPermissionDecision):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::getOrCreate):
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::getOrCreate):
        * WebProcess/InjectedBundle/InjectedBundleIntent.cpp:
        (WebKit::InjectedBundleIntent::extras):
        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::policyForOrigin):
        (WebKit::WebNotificationManager::show):
        (WebKit::WebNotificationManager::clearNotifications):
        (WebKit::WebNotificationManager::removeNotificationFromContextMap):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::invalidate):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::destroyStream):
        (WebKit::NetscapePlugin::unscheduleTimer):
        (WebKit::NetscapePlugin::frameDidFinishLoading):
        (WebKit::NetscapePlugin::frameDidFail):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::buildHTTPHeaders):
        (WebKit::PluginView::~PluginView):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::layerByID):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::adoptImageBackingStore):
        (WebKit::LayerTreeCoordinator::releaseImageBackingStore):
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::removeItem):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::commandNameForSelectorName):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::visitedLinkStateChanged):
        (WebKit::WebProcess::allVisitedLinkStateChanged):
        (WebKit::WebProcess::focusedWebPage):
        (WebKit::WebProcess::createWebPage):
        (WebKit::WebProcess::webPageGroup):
        (WebKit::fromCountedSetToHashMap):
        (WebKit::WebProcess::setTextCheckerState):

2012-08-27  Simon Fraser  <simon.fraser@apple.com>

        Make Force Repaint work with tiled backing store
        https://bugs.webkit.org/show_bug.cgi?id=95102

        Reviewed by Dan Bernstein.

        Have forceRepaint() call down to the tiled backing of each FrameView,
        so they can repaint.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::forceRepaint):

2012-08-27  Rafael Brandao  <rafael.lobo@openbossa.org>

        [Qt] Fix typo in CoordinatedGraphicsLayer::syncAnimatedProperties
        https://bugs.webkit.org/show_bug.cgi?id=95085

        Reviewed by Noam Rosenthal.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp: The flag should be disabled
        once we process the sync for animated properties. Previously, it was never disabling it once enabled.

2012-08-27  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][Qt] WebAudio support
        https://bugs.webkit.org/show_bug.cgi?id=94806

        Reviewed by Simon Hausmann.

        New boolean webAudioEnabled WebSetting to be used at runtime to
        toggle WebAudio support on or off.

        * UIProcess/API/qt/qwebpreferences.cpp:
        (QWebPreferencesPrivate::testAttribute):
        (QWebPreferencesPrivate::setAttribute):
        (QWebPreferences::webAudioEnabled):
        (QWebPreferences::setWebAudioEnabled):
        * UIProcess/API/qt/qwebpreferences_p.h:
        * UIProcess/API/qt/qwebpreferences_p_p.h:

2012-08-27  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][WK2] REGRESSION(r126067): It made qmltests::DoubleTapToZoom::test_basic() fail
        https://bugs.webkit.org/show_bug.cgi?id=94949

        Reviewed by Kenneth Rohde Christiansen.

        Use JSON to serialize the client rect for the async evaluateJavaScript call.

        * UIProcess/API/qt/tests/qmltests/WebView/tst_doubleTapToZoom.qml:

2012-08-27  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix failing QML2 auto tests due to conflicting signal declaration
        https://bugs.webkit.org/show_bug.cgi?id=95059

        Reviewed by Kenneth Rohde Christiansen.

        Don't define a scaleChanged signal when QQuickItem already declares one to notify about changes
        in the scale property. As it turns out there is not need for declaring a signal in the test case
        at all.

        * UIProcess/API/qt/tests/qmltests/WebView/tst_doubleTapToZoom.qml:
        * UIProcess/API/qt/tests/qmltests/WebView/tst_fitToView.qml:

2012-08-27  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        Rename RegisterProtocolHandler API to NavigatorContentUtils
        https://bugs.webkit.org/show_bug.cgi?id=94920

        Reviewed by Adam Barth.

        Renaming whatever RegisterProtocolHandler-prefixed to NavigatorContentUtils-prefixed.

        * Configurations/FeatureDefines.xcconfig:
        * WebProcess/WebCoreSupport/WebNavigatorContentUtilsClient.h: Renamed from Source/WebKit2/WebProcess/WebCoreSupport/WebRegisterProtocolHandlerClient.h.
        (WebKit):
        (WebNavigatorContentUtilsClient):
        (WebKit::WebNavigatorContentUtilsClient::~WebNavigatorContentUtilsClient):
        (WebKit::WebNavigatorContentUtilsClient::isProtocolHandlerRegistered):
        (WebKit::WebNavigatorContentUtilsClient::unregisterProtocolHandler):

2012-08-25  Vivek Galatage  <vivekgalatage@gmail.com>

        WinCairo Build Broken due to missing export definitions
        https://bugs.webkit.org/show_bug.cgi?id=95007

        Reviewed by Ryosuke Niwa.

        Export symbols were missing from the def file for WinCairo port. Added
        these missing symbols to avoid build break

        * win/WebKit2CFLite.def:

2012-08-24  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12157689> REGRESSION: WebProcessProxy destructor is sometimes called recursively
        https://bugs.webkit.org/show_bug.cgi?id=94997

        Reviewed by Dan Bernstein.

        * UIProcess/WebContext.cpp: (WebKit::WebContext::disconnectProcess): Make sure that
        we don't try to delete WebProcessProxy while the vector still contains it. Previously,
        we used RefPtr::clear, which zeroes out the value before destructing, but doing that
        in every RefPtr destructor would be bad for performance.

2012-08-24  Benjamin Poulain  <bpoulain@apple.com>

        Unify Number to StringImpl conversion
        https://bugs.webkit.org/show_bug.cgi?id=94879

        Reviewed by Geoffrey Garen.

        * win/WebKit2.def: Update the exported symbols.

2012-08-24  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Fix custom device pixel ratio propagation and add QML API tests
        https://bugs.webkit.org/show_bug.cgi?id=88531

        Reviewed by Kenneth Rohde Christiansen.

        Defer setting the custom device pixel ratio until the page item has
        a valid size to make sure that the scale factor reaches the web process.

        QML test based on patch by Alexander Færøy.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::QQuickWebViewPrivate):
        (QQuickWebViewPrivate::didRelaunchProcess):
        (QQuickWebViewPrivate::didChangeContentsSize):
        (QQuickWebViewFlickablePrivate::didChangeContentsSize):
        (QQuickWebViewExperimental::devicePixelRatio):
        (QQuickWebViewExperimental::setDevicePixelRatio):
        * UIProcess/API/qt/qquickwebview_p.h:
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):
        * UIProcess/API/qt/tests/qmltests/WebView/tst_devicePixelRatio.qml: Added.
          Test case for the QML device pixel ratio API.

2012-08-24  Kangil Han  <kangil.han@samsung.com>

        [EFL] Fix compile warning
        https://bugs.webkit.org/show_bug.cgi?id=94930

        Reviewed by Kenneth Rohde Christiansen.

        Fixed compile warning.

        * UIProcess/API/efl/ewk_back_forward_list.cpp:
        (ewk_back_forward_list_n_back_items_copy): NULL used in arithmetic [-Wpointer-arith]
        (ewk_back_forward_list_n_forward_items_copy): NULL used in arithmetic [-Wpointer-arith]

2012-08-24  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Back-forward list API needs extension
        https://bugs.webkit.org/show_bug.cgi?id=94582

        Reviewed by Kenneth Rohde Christiansen.

        Added several new functions wrapping existing WK2 C back-forward list API
        and returning list of items preceding or following the current one.
        Corresponding API unit tests are also added.

        * UIProcess/API/efl/ewk_back_forward_list.cpp:
        (createEinaList):
        (ewk_back_forward_list_n_back_items_copy):
        (ewk_back_forward_list_n_forward_items_copy):
        * UIProcess/API/efl/ewk_back_forward_list.h:
        * UIProcess/API/efl/tests/test_ewk2_back_forward_list.cpp:
        (freeEinaList):
        (TEST_F):

2012-08-24  Michael Brüning  <michaelbruening@gmail.com>

        [Qt][WK2] Make viewport related experimental.test properties encapsulated.
        https://bugs.webkit.org/show_bug.cgi?id=88320

        Reviewed by Kenneth Rohde Christiansen.

        Introducing a new viewport attribute to QWebKitTest to group the viewport related
        attributes into one QJsonObject. Also adding a static method to convert a QSizeF to
        a QJsonObject.

        * UIProcess/API/qt/qwebkittest.cpp:
        (qSizeFToJsonObject):
        (QWebKitTest::viewport):
        (QWebKitTest::devicePixelRatio):
        (QWebKitTest::contentsScale):
        * UIProcess/API/qt/qwebkittest_p.h:
        * UIProcess/qt/QtViewportHandler.cpp:
        (WebKit::QtViewportHandler::viewportAttributesChanged):

2012-08-23  Frederik Gladhorn  <gladhorn@kde.org>

        Make it possible to build WebKit with Python 3 (and 2)
        https://bugs.webkit.org/show_bug.cgi?id=94814

        Reviewed by Ryosuke Niwa.

        Exceptions need a hack to work with both.
        string.join was already deprecated in Python 2.
        Relative imports are no longer supported, use package name instead.

        * Scripts/webkit2/messages.py:
        * Scripts/webkit2/parser.py:

2012-08-24  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/94910> Copy the entire webkit2 module in to the WebKit2 framework wrapper.

        Reviewed by Dan Bernstein.

        This will allow relative imports within the webkit2 module to be removed in the future without
        requiring future changes to clients of the module.

        * WebKit2.xcodeproj/project.pbxproj: Remove the webkit2 group from the project, and add it back
        as a folder reference. This allows the directory and its contents to be copied in to the PrivateHeaders
        directory. We also need to add a script phase to clean up any .pyc files that may be present in
        the module.

2012-08-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r126542.
        http://trac.webkit.org/changeset/126542
        https://bugs.webkit.org/show_bug.cgi?id=94907

        Broke WK2 build on OS X (Requested by tronical_ on #webkit).

        * Scripts/webkit2/messages.py:
        * Scripts/webkit2/parser.py:

2012-08-23  Frederik Gladhorn  <gladhorn@kde.org>

        Make it possible to build WebKit with Python 3 (and 2)
        https://bugs.webkit.org/show_bug.cgi?id=94814

        Reviewed by Ryosuke Niwa.

        Exceptions need a hack to work with both.
        string.join was already deprecated in Python 2.
        Relative imports are no longer supported, use package name instead.

        * Scripts/webkit2/messages.py:
        * Scripts/webkit2/parser.py:

2012-08-23  Mark Hahnenberg  <mhahnenberg@apple.com>

        Change behavior of MasqueradesAsUndefined to better accommodate DFG changes
        https://bugs.webkit.org/show_bug.cgi?id=93884

        Reviewed by Filip Pizlo.

        With some upcoming changes to the DFG to remove uses of ClassInfo, we will be changing the behavior of  
        MasqueradesAsUndefined. In order to make this change consistent across all of our execution engines,  
        we will make this change to MasqueradesAsUndefined as a separate patch. After this patch, MasqueradesAsUndefined  
        objects will only masquerade as undefined in their original context (i.e. their original JSGlobalObject).  
        For example, if an object that masquerades as undefined in frame A is passed to frame B, it will not  
        masquerade as undefined within frame B, but it will continue to masquerade in frame A.

        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::convertJSValueToNPVariant): Passing ExecState to toBoolean call.

2012-08-23  Brady Eidson  <beidson@apple.com>

        REGRESSION (r124815): PDF in frame does not display any more
        <rdar://problem/12063306> and https://bugs.webkit.org/show_bug.cgi?id=94869

        Reviewed by Alexey Proskuryakov.

        * WebProcess/Plugins/PDF/BuiltInPDFView.mm:
        (WebKit::BuiltInPDFView::initialize): Tell the controller that initialization was successful.

2012-08-23  Mark Rowe  <mrowe@apple.com>

        Make WebKit2 build with the latest version of clang.

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig: Ensure that operator new isn't exported as a weak external symbol.

2012-08-22  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [EFL] Use WTF_USE_SOUP instead BUILDING_SOUP__
        https://bugs.webkit.org/show_bug.cgi?id=94744

        Reviewed by Gustavo Noronha Silva.

        Use #if defined(WTF_USE_SOUP) instead of #if defined(BUILDING_SOUP__)
        since the former is used everywhere.

        * Shared/API/c/WKBase.h:

2012-08-23  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Free ewk context data on program exit.
        https://bugs.webkit.org/show_bug.cgi?id=94808

        Reviewed by Kenneth Rohde Christiansen.

        Make sure the default Ewk_Context gets freed
        on program exit.

        The patch also fixes leaking of WKContextRef
        inside Ewk_Context which should have been
        adopted.

        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context::_Ewk_Context):
        (ewk_context_default_get):

2012-08-23  Adrienne Walker  <enne@google.com>

        Convert ScrollableArea ASSERT_NOT_REACHED virtuals
        https://bugs.webkit.org/show_bug.cgi?id=93306

        Reviewed by Darin Adler.

        Add implementations where necessary to make derived classes concrete.
        Add OVERRIDE for ScrollableArea functions.

        * UIProcess/win/WebPopupMenuProxyWin.cpp:
        (WebKit::WebPopupMenuProxyWin::visibleHeight):
        (WebKit):
        (WebKit::WebPopupMenuProxyWin::visibleWidth):
        (WebKit::WebPopupMenuProxyWin::contentsSize):
        (WebKit::WebPopupMenuProxyWin::scrollableAreaBoundingBox):
        * UIProcess/win/WebPopupMenuProxyWin.h:
        (WebPopupMenuProxyWin):
        * WebProcess/Plugins/PDF/BuiltInPDFView.h:

2012-08-23  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] ewk_intent_request API test does not free Eina_List
        https://bugs.webkit.org/show_bug.cgi?id=94809

        Reviewed by Kenneth Rohde Christiansen.

        The used Eina_List should be freed due to ewk_intent_suggestions_get() documentation.

        * UIProcess/API/efl/tests/test_ewk2_intents.cpp:
        (onIntentReceived):

2012-08-23  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Helper functions used by the raw webview tests should not be guarded by HAVE_QTQUICK

        Reviewed by Simon Hausmann.

        This fixes the build if the QtQuick module is not present.

        * UIProcess/API/qt/tests/util.cpp:
        (messageHandler):
        (suppressDebugOutput):
        * UIProcess/API/qt/tests/util.h:

2012-08-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r126306): it broke the plugin process
        https://bugs.webkit.org/show_bug.cgi?id=94797

        Reviewed by Xan Lopez.

        * GNUmakefile.am:

2012-08-23  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] Refactoring: WebBackForwardList getters should be const
        https://bugs.webkit.org/show_bug.cgi?id=94711

        Reviewed by Kenneth Rohde Christiansen.

        Before the change were not consistent with each other
        (WebBackForwardList::entries() was const but WebBackForwardList::currentIndex() was not).
        Besides having not const getters is not a good practice in C++. (Please read
        Scott Meyers. Effective C++ (3rd edition). ISBN: 0-321-33487-6.
        Item 3: 'Use const whenever possible').

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::backListCount):
        (WebKit::WebBackForwardList::forwardListCount):
        (WebKit::WebBackForwardList::backListAsImmutableArrayWithLimit):
        (WebKit::WebBackForwardList::forwardListAsImmutableArrayWithLimit):
        * UIProcess/WebBackForwardList.h:
        (WebKit::WebBackForwardList::currentIndex):
        (WebBackForwardList):

2012-08-22  Nikhil Bhargava  <nbhargava@google.com>

        Reduce Font.h includes across project -- improves RenderObject.h compile time
        https://bugs.webkit.org/show_bug.cgi?id=93629

        Reviewed by Eric Seidel.

        Adds includes due to change in RenderStyle.h

        * WebProcess/WebPage/mac/WebPageMac.mm:

2012-08-22  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=94401
        Add support for making a web site become paginated using overflow: 
        paged-x | paged-y
        -and corresponding-
        <rdar://problem/11831783> 

        Reviewed by Dave Hyatt.

        WebCore::Page::Pagination is now just WebCore::Pagination.
        * Shared/WebPageCreationParameters.h:
        (WebPageCreationParameters):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPaginationMode):
        (WKPageGetPaginationMode):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setPaginationMode):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        (WebKit::WebPageProxy::paginationMode):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setPaginationMode):
        (WebKit::WebPage::setPaginationBehavesLikeColumns):
        (WebKit::WebPage::setPageLength):
        (WebKit::WebPage::setGapBetweenPages):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):

2012-08-22  Jer Noble  <jer.noble@apple.com>

        Browser menu visible when calling webkitRequestFullscreen after user manually enters full screen mode
        https://bugs.webkit.org/show_bug.cgi?id=93892

        Reviewed by Eric Carlson.

        Allow the full screen window to "Join All Spaces", so that once it's original full screen space is destroyed,
        it can join the new one.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController _startEnterFullScreenAnimationWithDuration:]):

2012-08-22  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Support posting injected bundle messages to a page
        https://bugs.webkit.org/show_bug.cgi?id=94630

        Reviewed by Sam Weinig.

        * Shared/APIClientTraits.cpp:
        * Shared/APIClientTraits.h:
        * Shared/CoreIPCSupport/InjectedBundleMessageKinds.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPagePostMessageToInjectedBundle):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::postMessageToInjectedBundle):
        * UIProcess/WebPageProxy.h:
        * WebProcess/InjectedBundle/API/c/WKBundle.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::didReceiveMessageToPage):
        (WebKit::InjectedBundle::didReceiveMessage):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/InjectedBundle/InjectedBundleClient.cpp:
        (WebKit::InjectedBundleClient::didReceiveMessageToPage):
        * WebProcess/InjectedBundle/InjectedBundleClient.h:
        (InjectedBundleClient):
        Added a PostMessageToPage injected bundle message type, with all associated
        machinery. API is WKPagePostMessageToInjectedBundle(), and an associated
        didReceiveMessageToPage() injected bundle client function.

        * WebProcess/qt/QtBuiltinBundle.cpp: (WebKit::QtBuiltinBundle::initialize):
        Updated for new client API.

        * UIProcess/WebContext.cpp: (WebKit::WebContext::postMessageToInjectedBundle):
        Implemented multiple process model case.

2012-08-22  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Split WebCore/platform into a separate library
        https://bugs.webkit.org/show_bug.cgi?id=94435

        Reviewed by Martin Robinson.

        More people have been reporting problems when linking WebCore because
        the command line limit is being exceeded. Splitting WebCore a bit more
        is in order.

        * GNUmakefile.am: link libWebCorePlatform into libwebkit2gtk

2012-08-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Preferred languages and spellchecker APIs are not consistent in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=94683

        Reviewed by Alejandro G. Castro.

        Change spell-checker and preferred languages API to use a GStrv
        instead of a comma-separated string and GList. This makes the API
        more consistent and convenient to use.

        * UIProcess/API/gtk/WebKitTextChecker.cpp:
        (WebKitTextChecker::getSpellCheckingLanguages): Return a
        Vector<String> instead of a String.
        (WebKitTextChecker::setSpellCheckingLanguages): Receive a
        Vector<String> instead of a String.
        * UIProcess/API/gtk/WebKitTextChecker.h:
        (WebKitTextChecker): Use a GPtrArray to cache languages.
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_get_spell_checking_languages):
        (webkit_web_context_set_spell_checking_languages):
        (webkit_web_context_set_preferred_languages):
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:
        (testWebContextSpellChecker):
        (testWebContextLanguages):

2012-08-22  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][WK2] Enable runtime enabled features: DeviceMotion and DeviceOrientation
        https://bugs.webkit.org/show_bug.cgi?id=94692

        Reviewed by Kenneth Rohde Christiansen.

        * WebProcess/qt/WebProcessQt.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):

2012-08-22  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Wrong default for new ScrollAnimatorEnabled preference.

        Reviewed by Simon Hausmann.

        ScrollAnimatorEnabled introduced in r126291, should default to 'true'
        to preserve existing behaviour on WK2 platforms that already enabled 
        SMOOTH_SCROLLING unconditionally.

        * Shared/WebPreferencesStore.h:
        (WebKit):

2012-08-22  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Unreviewed, build fixup for r126291.

        * Shared/WebPreferencesStore.h:
        (WebKit):

2012-08-22  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] Optionally support smooth-scrolling on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=74926

        Reviewed by Simon Hausmann.

        Expose scroll-animator preference, but ensure animated smooth scrolling
        on the web process side is disabled when scrolling has been delegated
        to the UI process.

        * Shared/WebPreferencesStore.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setResizesToContentsUsingLayoutSize):
        (WebKit::WebPage::updatePreferences):

2012-08-22  Luiz Agostini  <luiz.agostini@nokia.com>

        [Qt] Avoid using WebKit macros in qrawwebview_p.h
        https://bugs.webkit.org/show_bug.cgi?id=94648

        Reviewed by Noam Rosenthal.

        ENABLE(FEATURE) should not be used in qrawwebview_p.h because it is an API header file.

        * UIProcess/API/qt/raw/qrawwebview.cpp:
        (QRawWebView::sendTouchEvent):
        * UIProcess/API/qt/raw/qrawwebview_p.h:

2012-08-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r126216.
        http://trac.webkit.org/changeset/126216
        https://bugs.webkit.org/show_bug.cgi?id=94661

        "Broke many Mac-WK2 tests" (Requested by bradee-oh on
        #webkit).

        * WebProcess/com.apple.WebProcess.sb.in:

2012-08-21  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [GTK] [WK2] Memory leaks in TestWebKitFindController
        https://bugs.webkit.org/show_bug.cgi?id=94627

        Reviewed by Martin Robinson.

        Fix memory leaks in TestWebKitFindController by using adoptGRef
        instead of just getting new reference of GdkPixbuf.

        * UIProcess/API/gtk/tests/TestWebKitFindController.cpp:
        (testFindControllerHide):

2012-08-21  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/11241850> Block access to xpcd in WebProcess.sb

        Reviewed by Sam Weinig and Jon Honeycutt.

        * WebProcess/com.apple.WebProcess.sb.in:

2012-08-21  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/8900275> Remove PubSub access from WebProcess, since it is no longer necessary

        Reviewed by Mark Rowe.

        * WebProcess/com.apple.WebProcess.sb.in:

2012-08-21  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] Some public API functions don't have their symbols exported
        https://bugs.webkit.org/show_bug.cgi?id=94589

        Reviewed by Kenneth Rohde Christiansen.

        Added missing export symbol macro to these public API functions.

        * UIProcess/API/efl/ewk_view.h:

2012-08-21  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Using a native window for the WebView breaks GtkOverlay
        https://bugs.webkit.org/show_bug.cgi?id=90085

        Reviewed by Alejandro G. Castro.

        Add XComposite libraries to the linker list for WebKit2.

        * GNUmakefile.am: Add XComposite

2012-08-21  Jesse van den Kieboom  <jessevdk@gnome.org> and Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add destroy notify for register_uri_scheme
        https://bugs.webkit.org/show_bug.cgi?id=94315

        Reviewed by Philippe Normand.

        For introspection to work correctly, a destroy notify needs to be
        added to register_uri_scheme so that bindings know when to
        finalize the user_data.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_register_uri_scheme):
        (webkitWebContextReceivedURIRequest):
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:

2012-08-21  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed build fix for newer Qt 5: QT += qmltest does not imply QT += testlib anymore, but
        the code here needs QSignalSpy from QTestLib

        * UIProcess/API/qt/tests/qmltests/DesktopBehavior.pro:
        * UIProcess/API/qt/tests/qmltests/WebView.pro:

2012-08-18  John Sullivan  <sullivan@apple.com>

        <https://bugs.webkit.org/show_bug.cgi?id=94486>
        <rdar://problem/12128557>
        REGRESSION (r121482, Lion-only): Closing a popover containing a WKView can crash
        
        Reviewed by Darin Adler.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewWillMoveToWindow:]):
        Avoid calling the code added in 121482 that ensures that the undo stack is cleaned up
        before the WKView is moved from one window to another when the WKView is being moved
        out of a popover window. This avoids a bug in OS X 10.7 that was fixed in 10.8.
        While this technically reopens a potentially crashing code path that 121482 closed,
        it only reopens it for WKViews that are used for text editing and that are removed
        from an NSPopover at some time earlier than tear-down of the NSPopover.

2012-08-20  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] Custom tap-highlight-color renders fully opaque
        https://bugs.webkit.org/show_bug.cgi?id=94468

        Reviewed by Kenneth Rohde Christiansen.

        Draw tap-highlight-color at 50% transparency, to better match how
        existing WebKit browsers act on custom tap-highlight colors.

        * WebProcess/WebPage/TapHighlightController.cpp:
        (WebKit::TapHighlightController::drawRect):

2012-08-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Replace webkit_web_view_replace_content with webkit_web_view_load_alternate_html
        https://bugs.webkit.org/show_bug.cgi?id=94471

        Reviewed by Martin Robinson.

        In WebKit1 there's code to prevent that load signals are emitted
        when loading internal custom error pages. We added
        webkit_web_view_replace_content() with the same idea, but it has
        ended up being problematic, because it allows to add any HTML
        content (in WebKit1 we assumed internal error pages never failed
        and always loaded) and it's impossible to know when the load has
        finished. It also required a lot of logic to handle
        replace_content as an especial case, in order to hide the fact
        that it loads content. This patch renames
        webkit_web_view_replace_content() as
        webkit_web_view_load_alternate_html() and emit load events
        normally.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (_WebKitWebViewPrivate):
        (webkitWebViewLoadChanged):
        (webkitWebViewLoadFailed):
        (webkitWebViewSetEstimatedLoadProgress):
        (webkitWebViewResourceLoadStarted):
        (webkitWebViewGetLoadingWebResource):
        (webkitWebViewRemoveLoadingWebResource):
        (webkitWebViewResourceLoadFinished):
        (webkit_web_view_load_alternate_html):
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:
        * UIProcess/API/gtk/tests/TestLoaderClient.cpp:
        (testLoadAlternateHTML):
        (beforeAll):
        * UIProcess/API/gtk/tests/TestResources.cpp:
        (beforeAll):
        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
        (beforeAll):
        * UIProcess/API/gtk/tests/WebViewTest.cpp:
        (WebViewTest::loadAlternateHTML):
        * UIProcess/API/gtk/tests/WebViewTest.h:

2012-08-20  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Add unit tests for WKEinaSharedString
        https://bugs.webkit.org/show_bug.cgi?id=94104

        Reviewed by Kenneth Rohde Christiansen.

        Added unit tests for WKEinaSharedString class.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/tests/test_ewk2_eina_shared_string.cpp: Added.
        (checkString):
        (TEST_F):

2012-08-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to set preferred languages to WebKit2 GTK+
        https://bugs.webkit.org/show_bug.cgi?id=90878

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_set_preferred_languages): Public API to set a
        list of preferred languages sorted from most desirable to least
        desirable.
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbol.
        * UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:
        (testWebContextLanguages):
        (serverCallback):
        (beforeAll):
        (afterAll):
        * UIProcess/API/gtk/tests/WebViewTest.cpp:
        (resourceGetDataCallback):
        (WebViewTest::mainResourceData): Moved from TestWebKitWebContext
        to make it available to all WebViewTests.
        * UIProcess/API/gtk/tests/WebViewTest.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::userPreferredLanguagesChanged): Notify our
        observer that the languages have been overriden.
        * WebProcess/gtk/WebProcessGtk.cpp:
        (WebKit::buildAcceptLanguages): Helper function to build the
        accept languages as specified in RFC 2616.
        (WebKit::setSoupSessionAcceptLanguage): Set the accept-language
        property of the default SoupSession.
        (WebKit::languageChanged): Update the preferred languages in
        SoupSession.
        (WebKit::WebProcess::platformInitializeWebProcess): Add an
        observer to be notified when the list of preferred languages is
        updated.
        (WebKit::WebProcess::platformTerminate): Remove the observer added
        in platformInitializeWebProcess().

2012-08-19  Dan Bernstein  <mitz@apple.com>

        WebPageProxy::setCursor does not check that the view is still in an active window
        https://bugs.webkit.org/show_bug.cgi?id=94427

        Reviewed by Alexey Proskuryakov.

        The Web process may ask to change the cursor when the view is in an active window, but
        if by the time the UI process receives the message, the view is no longer in a window or the
        window is not active , then the cursor should not change.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setCursor): Added a check that the view is in an active window before
        allowing the page to change the cursor.

2012-08-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r125972.
        http://trac.webkit.org/changeset/125972
        https://bugs.webkit.org/show_bug.cgi?id=94431

        Breaks AppleMac builds (Requested by pfeldman on #webkit).

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:
        * UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:
        (beforeAll):
        (afterAll):
        * UIProcess/API/gtk/tests/WebViewTest.cpp:
        (WebViewTest::WebViewTest):
        * UIProcess/API/gtk/tests/WebViewTest.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::userPreferredLanguagesChanged):
        * WebProcess/gtk/WebProcessGtk.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::platformTerminate):

2012-08-19  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add API unit tests for Web Intents
        https://bugs.webkit.org/show_bug.cgi?id=90454

        Reviewed by Kenneth Rohde Christiansen.

        Add unit testing for Web intent requests,
        including the "intent,request,new" signal on
        the Ewk_View and the Ewk_Intent API.

        * UIProcess/API/efl/ewk_view.h: Fix documentation for argument type of "intent,request,new" signal.
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::mouseClick): Add utility method to simulate a click at given
        coordinates. This is needed for testing functionality that requires a user gesture.
        (EWK2UnitTest):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        (EWK2UnitTestBase):
        * UIProcess/API/efl/tests/resources/intent-request.html: Added.
        * UIProcess/API/efl/tests/test_ewk2_intents.cpp:
        (stringSortCb):
        (onIntentReceived):
        (TEST_F):

2012-08-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to set preferred languages to WebKit2 GTK+
        https://bugs.webkit.org/show_bug.cgi?id=90878

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_set_preferred_languages): Public API to set a
        list of preferred languages sorted from most desirable to least
        desirable.
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbol.
        * UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:
        (testWebContextLanguages):
        (serverCallback):
        (beforeAll):
        (afterAll):
        * UIProcess/API/gtk/tests/WebViewTest.cpp:
        (resourceGetDataCallback):
        (WebViewTest::mainResourceData): Moved from TestWebKitWebContext
        to make it available to all WebViewTests.
        * UIProcess/API/gtk/tests/WebViewTest.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::userPreferredLanguagesChanged): Notify our
        observer that the languages have been overriden.
        * WebProcess/gtk/WebProcessGtk.cpp:
        (WebKit::buildAcceptLanguages): Helper function to build the
        accept languages as specified in RFC 2616.
        (WebKit::setSoupSessionAcceptLanguage): Set the accept-language
        property of the default SoupSession.
        (WebKit::languageChanged): Update the preferred languages in
        SoupSession.
        (WebKit::WebProcess::platformInitializeWebProcess): Add an
        observer to be notified when the list of preferred languages is
        updated.
        (WebKit::WebProcess::platformTerminate): Remove the observer added
        in platformInitializeWebProcess().

2012-08-18  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] ewk_back_forward_list_item properties should be in sync with WebProcessProxy::m_backForwardListItemMap
        https://bugs.webkit.org/show_bug.cgi?id=94248

        Reviewed by Kenneth Rohde Christiansen.

        Currently ewk_back_forward_list_item properties are initialized from
        WKBackForwardListItemRef once in the constructor and then just stored.
        This is erroneous approach as back forward items can be initialized within
        several iterations, meaning several ipc calls to UI process and several updates
        of WebProcessProxy::m_backForwardListItemMap where the items are stored.
        Hence the values of ewk_back_forward_list_item properties should be updated
        with the corresponding WKBackForwardListItem function invokes every time
        they are called.

        * UIProcess/API/efl/ewk_back_forward_list_item.cpp:
        (_Ewk_Back_Forward_List_Item): Data members have to be mutable as assigned being const pointers.
        (_Ewk_Back_Forward_List_Item::_Ewk_Back_Forward_List_Item):
        (ewk_back_forward_list_item_uri_get):
        (ewk_back_forward_list_item_title_get):
        (ewk_back_forward_list_item_original_uri_get):

2012-08-17  Enrica Casucci  <enrica@apple.com>

        Adding back the first statement of WebProcessMain accidentally
        removed in r125358.

        Reviewed by Sam Weinig.

        * WebProcess/mac/WebProcessMainMac.mm: Adding back the stripping
        of DYLD_INSERT_LIBRARIES.

2012-08-17  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] REGRESSION(r125923): Breaks EFL build
        https://bugs.webkit.org/show_bug.cgi?id=94376

        Reviewed by Alexey Proskuryakov.

        Fix EFL build break after r125923.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveIntentForFrame):

2012-08-17  Alexey Proskuryakov  <ap@apple.com>

        Access m_process directly in WebPageProxy.cpp
        https://bugs.webkit.org/show_bug.cgi?id=94363

        Reviewed by John Sullivan.

        Consistency fix - we don't use accessors when we don't have to, and there is a mix in this file.

        * UIProcess/WebPageProxy.cpp:

2012-08-17  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Add WK2 API to get suggested filename for URI responses
        https://bugs.webkit.org/show_bug.cgi?id=92967

        Reviewed by Carlos Garcia Campos.

        Webcore has API to get the suggested filename for a response, add
        a property and getter for it in WebKitURIResponse.

        * UIProcess/API/gtk/WebKitURIResponse.cpp:
        (_WebKitURIResponsePrivate): Add a CString holding the value.
        (webkitURIResponseGetProperty): Add the gobject bits for the
        property.
        (webkit_uri_response_class_init): Install the property.
        (webkit_uri_response_get_suggested_filename): New getter.
        * UIProcess/API/gtk/WebKitURIResponse.h: Declare the public
        method.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add the new API
        symbols.
        * UIProcess/API/gtk/tests/TestResources.cpp:
        (testWebResourceSuggestedFilename): Test the new API.
        (serverCallback): Add the the content-disposition header
        in one case, in order to test it.
        (beforeAll): Add the new test.

2012-08-17  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][wk2] Add unit tests for back-forward list API
        https://bugs.webkit.org/show_bug.cgi?id=92617

        Reviewed by Kenneth Rohde Christiansen.

        Added unit tests covering the existing EFL WK2 back-forward list API.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/tests/resources/default_test_page.html:
        * UIProcess/API/efl/tests/test_ewk2_back_forward_list.cpp: Added.
        (serverCallbackNavigation):
        (checkItem):
        (urlFromTitle):
        (TEST_F):

2012-08-17  Jeff Miller  <jeffm@apple.com>

        UserMessageEncoder::baseEncode() should ASSERT when attempting to encode a non-shareable image
        https://bugs.webkit.org/show_bug.cgi?id=94245

        Reviewed by Alexey Proskuryakov.

        It's a programming error if a client attempts to encode an image that has an
        allocated bitmap, but isn't shareable, so we should assert in this case.

        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        Assert if we're trying to encode valid non-shareable image.

2012-08-17  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] [WK2] Add unit tests for vibration_client_callbacks_set API
        https://bugs.webkit.org/show_bug.cgi?id=93890

        Reviewed by Kenneth Rohde Christiansen.

        This patch covers unit testing of the Vibration API as delivered.

        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (VibrationCbData):
        (vibrateCallback):
        (cancelVibrationCallback):
        (loadVibrationHTMLString):
        (TEST_F):

2012-08-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Rename WebKitWebView print-requested signal to print
        https://bugs.webkit.org/show_bug.cgi?id=94306

        Reviewed by Martin Robinson.

        WebKitWebView::print-requested is inconsistent with the rest of
        the API. It's a true_handled signal that allows users to implement
        their own print dialog, or block printing, or rely on
        defaults. The signal should be WebKitWebView::print like other
        signals (create, close, decide_policy, etc.)

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_class_init):
        (webkitWebViewPrintFrame):
        * UIProcess/API/gtk/WebKitWebView.h:
        (_WebKitWebViewClass):
        * UIProcess/API/gtk/tests/TestPrinting.cpp:
        (webViewPrintCallback):
        (testWebViewPrint):
        (beforeAll):

2012-08-17  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] [WK2] Free Eina Strbuf with eina_strbuf_free() instead of eina_strbuf_string_free()
        https://bugs.webkit.org/show_bug.cgi?id=94312

        Reviewed by Kenneth Rohde Christiansen.

        eina_strbuf_string_free() frees the contents of a string buffer but not the
        buffer, so eina_strbuf_free() must be used to free the buffer.

        Contents of the buffer has already been take care by stealing it with
        eina_strbuf_string_steal(), so no reason to call eina_strbuf_string_free().

        * UIProcess/API/efl/tests/test_ewk2_cookie_manager.cpp:
        (serverCallback):

2012-08-17  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Getting unnecessary  EINA_SAFETY_ON_NULL_RETURN_VAL warnings while page navigation
        https://bugs.webkit.org/show_bug.cgi?id=94308

        Reviewed by Kenneth Rohde Christiansen.

        The reason is that loadClient.didChangeBackForwardList callback is invoked with zero 
        arguments which is valid case while page back-forward navigation and means basically 
        that the back-froward list has changed but items were not added or deleted.

        * UIProcess/API/efl/ewk_back_forward_list.cpp:
        (ewk_back_forward_list_changed):

2012-08-16  Lauro Neto  <lauro.neto@openbossa.org>

        [Qt] Failure to build with --no-inspector
        https://bugs.webkit.org/show_bug.cgi?id=94148

        Reviewed by Noam Rosenthal.

        Add guards around usage of inspector functions.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewExperimental::remoteInspectorUrl):

2012-08-16  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Remove an unused variable

        Reviewed by Simon Hausmann.

        * UIProcess/API/qt/qquickwebpage.cpp:
        (QQuickWebPagePrivate::QQuickWebPagePrivate):
        * UIProcess/API/qt/qquickwebpage_p_p.h:
        (QQuickWebPagePrivate):

2012-08-16  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt][WK2] Change the default cache model to enable the page cache
        https://bugs.webkit.org/show_bug.cgi?id=94221

        Reviewed by Simon Hausmann.

        The default CacheModelDocumentViewer disables the memory back-forward page cache.
        As uses of applications using QQuickWebView might vary, I'm setting the default to
        CacheModelDocumentBrowser.
        We should eventually expose this in the API to allow serious Web browsers setting it
        to CacheModelPrimaryWebBrowser or to CacheModelDocumentViewer for application tight
        on memory with limited page navigations.

        * UIProcess/qt/QtWebContext.cpp:
        (WebKit::QtWebContext::defaultContext):

2012-08-15  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Make sure that we don't prematurely force the first layout during loading.
        https://bugs.webkit.org/show_bug.cgi?id=94106

        Reviewed by Kenneth Rohde Christiansen.

        This would have the nasty effect that the frame loader would report the first layout
        before loadCommitted was reported. This would resume the rendering engine prematurely,
        showing blank content and reporting an empty contents size.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setFixedLayoutSize):

2012-08-16  Marcelo Lira  <marcelo.lira@openbossa.org>

        [Qt] Input method hints are not being set.
        https://bugs.webkit.org/show_bug.cgi?id=92386

        Reviewed by Kenneth Rohde Christiansen.

        Input method hints for an editable element must be obtained from a proper
        HTML element. If the editable element is a complex one, it will have elements
        in the Shadow DOM, and it's one of those that will be returned as the root
        editable element. This works for editable DIVs, but not for INPUT elements.
        Using Element::shadowHost() on the root editable element will provide the
        needed HTML element, and for further clarity a method that does this was added
        to FrameSelection.

        Added an API test to the Qt port regarding the correct setting
        of input method hints information on INPUT HTML tags.

        * UIProcess/API/qt/tests/html/inputmethod.html:
        * UIProcess/API/qt/tests/qquickwebview/tst_qquickwebview.cpp:
        (tst_QQuickWebView):
        (tst_QQuickWebView::inputMethodHints):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState):

2012-08-16  Zeno Albisser  <zeno@webkit.org>

        Make GraphicsSurface double buffered by default.
        https://bugs.webkit.org/show_bug.cgi?id=93252

        Create only a single GraphicsSurface per canvas
        on both supported platforms Mac/Linux.
        The GraphicsSurface on Mac internally uses two IOSurface
        to provide a front and a back buffer.
        The GLX implementation of GraphicsSurface uses
        an XWindow which already provides a front and a back buffer.

        Reviewed by Noam Rosenthal.

        * Shared/ShareableSurface.h:
        (Handle):
            Change the type of GraphicsSurface token to uint64_t.
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::syncCanvas):
            Add a parameter that denotes the current front buffer of the
            GraphicsSurface.
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::syncCanvas):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::syncCanvas):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayerClient):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::syncCanvas):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-08-16  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Remove FontQt4, HAVE_QRAWFONT flag and the related dead code
        https://bugs.webkit.org/show_bug.cgi?id=93960

        Reviewed by Simon Hausmann.

        Following the removal of Qt 4 support from trunk in r124879.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::getWebCoreStatistics):

2012-08-16  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add unit tests for Web intent registration
        https://bugs.webkit.org/show_bug.cgi?id=94133

        Reviewed by Kenneth Rohde Christiansen.

        Add unit tests for Web Intent service registration.
        This tests the "intent,service,register" signaling
        on the Ewk_View as well as Ewk_Intent_Service.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/tests/resources/intent-service.html: Added.
        * UIProcess/API/efl/tests/test_ewk2_intents.cpp: Added.
        (onIntentServiceRegistration):
        (TEST_F):

2012-08-16  Marja Hölttä  <marja@chromium.org>

        FormController, WebHistoryItem: Enable reading selected file names from document state
        https://bugs.webkit.org/show_bug.cgi?id=91231

        Reviewed by Jochen Eisinger.

        This change enables Chromium to set up file permissions properly when
        the session restore feature restores a page with selected files.

        * win/WebKit2.def: Exported FormController::getReferencedFilePaths and HistoryController::saveDocumentAndScrollState.

2012-08-15  Ryosuke Niwa  <rniwa@webkit.org>

        Update manual tests and comments to refer to TestRunner instead of LayoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=94168

        Reviewed by Kent Tamura.

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::getBoolValueForKey):

2012-08-15  Bruno de Oliveira Abinader  <bruno.abinader@basyskom.com>

        [css3-text] Add CSS3 Text decoration compile flag
        https://bugs.webkit.org/show_bug.cgi?id=93863

        Reviewed by Julien Chaffraix.

        This patch handles the compile flag implementation, which will come disabled by
        default, thus not exposing the CSS3 text decoration features to the web, unless
        when explicitly enabling it with "--css3-text-decoration" build parameter.

        * Configurations/FeatureDefines.xcconfig:

2012-08-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r125687.
        http://trac.webkit.org/changeset/125687
        https://bugs.webkit.org/show_bug.cgi?id=94147

        It broke the whole world (Requested by Ossy_night on #webkit).

        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::convertJSValueToNPVariant):

2012-08-15  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=93693
        [WK2] REGRESSION(125091): pixel results don't sow scrollbars 
        anymore

        Reviewed by Sam Weinig.

        This is a regression from http://trac.webkit.org/changeset/125091 
        in which I failed to noticed that 
        WKBundlePageCreateSnapshotInViewCoordinates() did actually do 
        something different than 
        WKBundlePageCreateSnapshotInDocumentCoordinates(). Specifically, 
        it used ScrollView::paint() to paint instead of 
        FrameView::paintContents(). So this patch restores that 
        functionality by adding a value to SnapshotOptions indicating 
        whether the snapshot should be taken in ViewCoordinates 
        (otherwise it defaults to DocumentCoordinates).

        * Shared/API/c/WKImage.h:
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toSnapshotOptions):
        * Shared/ImageOptions.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scaledSnapshotWithOptions):

        Even though we plan to deprecate this API, it should keep doing 
        the right thing until it's gone.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCreateSnapshotInViewCoordinates):

2012-08-15  Brady Eidson  <beidson@apple.com>

        Removing a plug-in element from a page opened in a background tab in Safari crashes
        <rdar://problem/12057991> and https://bugs.webkit.org/show_bug.cgi?id=93913

        Reviewed by Beth Dakin.

        This only happens in WebKit2 with asynchronous plug-in initialization enabled.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::destroy): Null-check m_connection, as it might not have been created yet.

        * win/WebKit2.def: Export Page::setCanStartMedia for InternalSettings/DRT use.

2012-08-14  Mark Hahnenberg  <mhahnenberg@apple.com>

        Change behavior of MasqueradesAsUndefined to better accommodate DFG changes
        https://bugs.webkit.org/show_bug.cgi?id=93884

        Reviewed by Geoffrey Garen.

        With some upcoming changes to the DFG to remove uses of ClassInfo, we will be changing the behavior of 
        MasqueradesAsUndefined. In order to make this change consistent across all of our execution engines, 
        we will make this change to MasqueradesAsUndefined as a separate patch. After this patch, MasqueradesAsUndefined 
        objects will only masquerade as undefined in their original context (i.e. their original JSGlobalObject). 
        For example, if an object that masquerades as undefined in frame A is passed to frame B, it will not 
        masquerade as undefined within frame B, but it will continue to masquerade in frame A.

        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::convertJSValueToNPVariant): Passing ExecState to toBoolean call.

2012-08-15  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Refactoring: start using WKEinaSharedString in ewk_ classes
        https://bugs.webkit.org/show_bug.cgi?id=93964

        Reviewed by Kenneth Rohde Christiansen.

        Started using WKEinaSharedString where it is advisable.

        * UIProcess/API/cpp/efl/WKEinaSharedString.cpp:
        (WKEinaSharedString::operator==):
        * UIProcess/API/cpp/efl/WKEinaSharedString.h:
        * UIProcess/API/efl/ewk_download_job.cpp:
        (_Ewk_Download_Job):
        (_Ewk_Download_Job::_Ewk_Download_Job):
        (_Ewk_Download_Job::~_Ewk_Download_Job):
        (ewk_download_job_destination_set):
        (ewk_download_job_suggested_filename_set):
        * UIProcess/API/efl/ewk_intent.cpp:
        (_Ewk_Intent):
        (_Ewk_Intent::_Ewk_Intent):
        (_Ewk_Intent::~_Ewk_Intent):
        (ewk_intent_action_get):
        (ewk_intent_type_get):
        (ewk_intent_service_get):
        * UIProcess/API/efl/ewk_intent_service.cpp:
        (_Ewk_Intent_Service):
        (_Ewk_Intent_Service::_Ewk_Intent_Service):
        (_Ewk_Intent_Service::~_Ewk_Intent_Service):
        (ewk_intent_service_action_get):
        (ewk_intent_service_type_get):
        (ewk_intent_service_href_get):
        (ewk_intent_service_title_get):
        (ewk_intent_service_disposition_get):
        * UIProcess/API/efl/ewk_navigation_policy_decision.cpp:
        (_Ewk_Navigation_Policy_Decision):
        (_Ewk_Navigation_Policy_Decision::_Ewk_Navigation_Policy_Decision):
        (_Ewk_Navigation_Policy_Decision::~_Ewk_Navigation_Policy_Decision):
        * UIProcess/API/efl/ewk_url_request.cpp:
        (_Ewk_Url_Request):
        (_Ewk_Url_Request::_Ewk_Url_Request):
        (_Ewk_Url_Request::~_Ewk_Url_Request):
        (ewk_url_request_url_get):
        (ewk_request_cookies_first_party_get):
        (ewk_url_request_http_method_get):
        * UIProcess/API/efl/ewk_url_response.cpp:
        (_Ewk_Url_Response):
        (_Ewk_Url_Response::_Ewk_Url_Response):
        (_Ewk_Url_Response::~_Ewk_Url_Response):
        (ewk_url_response_url_get):
        (ewk_url_response_mime_type_get):
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::~_Ewk_View_Private_Data):
        (ewk_view_uri_update):
        (ewk_view_title_get):
        (ewk_view_theme_set):
        (ewk_view_setting_encoding_custom_get):
        (ewk_view_setting_encoding_custom_set):
        * UIProcess/API/efl/ewk_web_error.cpp:
        (_Ewk_Web_Error):
        (_Ewk_Web_Error::_Ewk_Web_Error):
        (_Ewk_Web_Error::~_Ewk_Web_Error):
        (ewk_web_error_url_get):
        (ewk_web_error_description_get):
        * UIProcess/API/efl/ewk_web_resource.cpp:
        (_Ewk_Web_Resource):
        (_Ewk_Web_Resource::_Ewk_Web_Resource):
        (_Ewk_Web_Resource::~_Ewk_Web_Resource):

2012-08-15  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] Add support for Web Intents MessagePorts
        https://bugs.webkit.org/show_bug.cgi?id=89072

        Reviewed by Kenneth Rohde Christiansen.

        Add support for WebIntents MessagePorts in WebKit2.
        MessagePorts can be passed with a Web Intent in
        order to open a direct communication channel
        between the Web application and the intent service.

        This functionality is already supported by WebKit 1.

        This patch introduces a new InjectedBundleIntent
        class which wraps a WebCore::Intent. This way
        information regarding the MessagePorts in a Web
        Intent is kept when using an injected bundle.

        For the UIProcess, WebIntentData now carries
        identifiers for the MessagePorts which can go over
        IPC. Those identifiers map to actual MessagePorts
        stored in the Web process. This way, when the UI
        delivers an intent to a frame, we can get back the
        corresponding MessagePorts from the Web process
        before delivering the intent to the DOMWindow.

        This functionality is already tested by:

        - webintents/web-intents-invoke-port.html
        - webintents/web-intents-obj-constructor.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        * Shared/IntentData.cpp: Add MessagePort identifiers.
        (WebKit::IntentData::IntentData):
        (WebKit::IntentData::encode):
        (WebKit::IntentData::decode):
        * Shared/IntentData.h:
        (IntentData):
        * Target.pri:
        * UIProcess/API/C/WKIntentData.cpp: Rename WKIntentDataCopyExtra() to
        WKIntentDataCopyExtraValue() for clarity.
        (WKIntentDataCopyExtraValue): 
        * UIProcess/API/C/WKIntentData.h: Remove WKIntentDataCreate() function now
        that WTR uses WKBundleIntentCreate() instead.
        * UIProcess/API/efl/ewk_intent.cpp:
        (ewk_intent_extra_get): Use WKIntentDataCopyExtraValue() instead of
        WKIntentDataCopyExtra() since it was renamed.
        * UIProcess/WebIntentData.cpp:
        (WebKit::WebIntentData::WebIntentData):
        (WebKit::WebIntentData::~WebIntentData): Remove MessagePorts from WebProcess upon
        WebIntentData destruction.
        (WebKit):
        (WebKit::WebIntentData::extras):
        * UIProcess/WebIntentData.h:
        (WebKit):
        (WebKit::WebIntentData::create):
        (WebIntentData):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveIntentForFrame):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit):
        (WebKit::WebProcessProxy::removeMessagePortChannel):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        (WebKit):
        * WebProcess/InjectedBundle/API/c/WKBundleIntent.cpp: Copied from Source/WebKit2/UIProcess/API/C/WKIntentData.cpp.
        (WKBundleIntentGetTypeID):
        (WKBundleIntentCreate):
        (WKBundleIntentCopyAction):
        (WKBundleIntentCopyType):
        (WKBundleIntentCopyService):
        (WKBundleIntentCopySuggestions):
        (WKBundleIntentCopyExtraValue):
        (WKBundleIntentCopyExtras):
        (WKBundleIntentMessagePortCount):
        * WebProcess/InjectedBundle/API/c/WKBundleIntent.h: Copied from Source/WebKit2/UIProcess/API/C/WKIntentData.h.
        * WebProcess/InjectedBundle/API/c/WKBundleIntentRequest.cpp:
        (WKBundleIntentRequestCopyIntent):
        * WebProcess/InjectedBundle/API/c/WKBundleIntentRequest.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageDeliverIntentToFrame):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundleIntent.cpp: Copied from Source/WebKit2/UIProcess/WebIntentData.cpp.
        (WebKit):
        (WebKit::InjectedBundleIntent::create):
        (WebKit::InjectedBundleIntent::InjectedBundleIntent):
        (WebKit::InjectedBundleIntent::action):
        (WebKit::InjectedBundleIntent::payloadType):
        (WebKit::InjectedBundleIntent::service):
        (WebKit::InjectedBundleIntent::data):
        (WebKit::InjectedBundleIntent::extra):
        (WebKit::InjectedBundleIntent::extras):
        (WebKit::InjectedBundleIntent::suggestions):
        * WebProcess/InjectedBundle/InjectedBundleIntent.h: Copied from Source/WebKit2/UIProcess/WebIntentData.h.
        (WebKit):
        (InjectedBundleIntent):
        (WebKit::InjectedBundleIntent::coreIntent):
        (WebKit::InjectedBundleIntent::type):
        * WebProcess/InjectedBundle/InjectedBundleIntentRequest.cpp:
        (WebKit::InjectedBundleIntentRequest::intent):
        * WebProcess/InjectedBundle/InjectedBundleIntentRequest.h:
        (WebKit):
        (InjectedBundleIntentRequest):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::deliverIntent):
        (WebKit):
        * WebProcess/WebPage/WebFrame.h:
        (WebCore):
        (WebFrame):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit):
        (WebKit::WebPage::deliverCoreIntentToFrame):
        * WebProcess/WebPage/WebPage.h:
        (WebCore):
        (WebPage):
        * WebProcess/WebProcess.cpp: Store MessagePorts in WebProcess and keep mapping with
        their identifiers.
        (WebKit):
        (WebKit::WebProcess::addMessagePortChannel):
        (WebKit::WebProcess::messagePortChannel):
        (WebKit::WebProcess::removeMessagePortChannel):
        * WebProcess/WebProcess.h:
        (WebCore):
        (WebProcess):
        * WebProcess/WebProcess.messages.in:

2012-08-14  Adam Barth  <abarth@webkit.org>

        Delete Frame::domWindow() and Frame::existingDOMWindow()
        https://bugs.webkit.org/show_bug.cgi?id=93990

        Reviewed by Eric Seidel.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::deliverIntent):
        (WebKit::WebFrame::pendingUnloadCount):

2012-08-14  Lauro Neto  <lauro.neto@openbossa.org>

        Convert signals/slots to Q_* macros.

        [Qt] Use Q_SLOTS and Q_SIGNALS instead of slots and signals
        https://bugs.webkit.org/show_bug.cgi?id=93996

        Reviewed by Kenneth Rohde Christiansen.

        Change usage of keyword-conflicting 'signals' and 'slots' for
        Q_SIGNALS and Q_SLOTS macro.

        * UIProcess/API/qt/qwebkittest_p.h:
        * UIProcess/API/qt/tests/inspectorserver/tst_inspectorserver.cpp:
        (tst_InspectorServer):
        * UIProcess/API/qt/tests/publicapi/tst_publicapi.cpp:
        (tst_publicapi):
        * UIProcess/API/qt/tests/qquickwebview/tst_qquickwebview.cpp:
        (tst_QQuickWebView):
        * UIProcess/API/qt/tests/qrawwebview/tst_qrawwebview.cpp:
        (WebView):
        (tst_qrawwebview):
        * UIProcess/API/qt/tests/util.cpp:
        (LoadSpy):
        * UIProcess/API/qt/tests/util.h:
        (LoadStartedCatcher):
        * UIProcess/InspectorServer/qt/WebSocketServerQt.h:
        (QtTcpServerHandler):
        * UIProcess/qt/QtDialogRunner.cpp:
        (DialogContextBase):
        (DialogContextObject):
        (BaseAuthenticationContextObject):
        (CertificateVerificationDialogContextObject):
        (FilePickerContextObject):
        (DatabaseQuotaDialogContextObject):
        * UIProcess/qt/QtDialogRunner.h:
        (QtDialogRunner):
        * UIProcess/qt/QtWebPageEventHandler.h:
        (QtWebPageEventHandler):
        * WebProcess/Downloads/qt/QtFileDownloader.h:

2012-08-14  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Track multiple Web Processes per context
        https://bugs.webkit.org/show_bug.cgi?id=93915

        Reviewed by Sam Weinig.

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didReceiveAuthenticationChallenge): Downloads don't work
        yet, added a FIXME.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::deprecatedSharedProcess): Renamed from process(), added an
        assertion that this is only used in single proces mode.
        (WebKit::WebContext::textCheckerStateChanged): Abstract out access to web processes.
        (WebKit::WebContext::ensureSharedWebProcess): Renamed ensureWebProcess() for clarity.
        (WebKit::WebContext::createNewWebProcess): Extracted code for creating a process
        from ensureWebProcess().
        (WebKit::WebContext::warmInitialProcess): Create the process more explicitly.
        (WebKit::WebContext::enableProcessTermination): Iterate over all processes.
        (WebKit::WebContext::shouldTerminate): Updated assertion.
        (WebKit::WebContext::processDidFinishLaunching): Changed to use process argument
        instead of m_process.
        (WebKit::WebContext::disconnectProcess): Updated code forto use m_processes.
        (WebKit::WebContext::createWebPage): Handle both process policies (initial support
        for multi-process).
        (WebKit::WebContext::relaunchProcessIfNecessary): Added cases for both policies.
        (WebKit::WebContext::download): Ditto.
        (WebKit::WebContext::postMessageToInjectedBundle): Ditto.
        (WebKit::WebContext::didReceiveSyncMessage): Fixed whitespace.
        (WebKit::WebContext::getWebCoreStatistics): Added cases for both policies.

        * UIProcess/WebContext.h:
        (WebKit::WebContext::sendToAllProcesses):
        (WebKit::WebContext::sendToAllProcessesRelaunchingThemIfNecessary):
        Send to all processes. Changed return type to void, since no caller checked it.

        * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::createWebPage): Removed
        an assertion that assumed one process per context.

        * UIProcess/WebTextChecker.cpp: (WebKit::updateStateForAllWebProcesses): Updated
        to use a WebContext method.

2012-08-14  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        WebKitTestRunner needs layoutTestController.dumpResourceLoadCallbacks
        https://bugs.webkit.org/show_bug.cgi?id=42332

        Reviewed by Kenneth Rohde Christiansen.

        Added new getters to WKURL, WKURLRequest, WKURLResponse so that it is possible
        to dump information necessary for the tests passing.

        * Shared/API/c/WKURL.cpp:
        (WKURLCopyPath):
        * Shared/API/c/WKURL.h:
        * Shared/API/c/WKURLRequest.cpp:
        (WKURLRequestCopyFirstPartyForCookies):
        (WKURLRequestCopyHTTPMethod):
        * Shared/API/c/WKURLRequest.h:
        * Shared/API/c/WKURLResponse.cpp:
        (WKURLResponseHTTPStatusCode):
        * Shared/API/c/WKURLResponse.h:
        * Shared/WebURL.h:
        (WebKit::WebURL::path):
        (WebURL):

2012-08-14  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] UpdateAtlas is wasting memory
        https://bugs.webkit.org/show_bug.cgi?id=93606

        Reviewed by Jocelyn Turcotte.

        Imported and QAreaAllocator from Qt3D and ported it to WebCore style,
        and use this new area allocator to replace old one from UpdateAtlas.

        * CMakeLists.txt:
        * Target.pri:
        * WebProcess/WebPage/AreaAllocator.cpp: Added.
        (WebKit::AreaAllocator::AreaAllocator):
        (WebKit::AreaAllocator::~AreaAllocator):
        (WebKit::AreaAllocator::expand):
        (WebKit::AreaAllocator::expandBy):
        (WebKit::AreaAllocator::release):
        (WebKit::AreaAllocator::overhead):
        (WebKit::AreaAllocator::roundAllocation):
        (WebKit::GeneralAreaAllocator::GeneralAreaAllocator):
        (WebKit::GeneralAreaAllocator::~GeneralAreaAllocator):
        (WebKit::GeneralAreaAllocator::freeNode):
        (WebKit::GeneralAreaAllocator::expand):
        (WebKit::fitsWithin):
        (WebKit::GeneralAreaAllocator::allocate):
        (WebKit::GeneralAreaAllocator::allocateFromNode):
        (WebKit::GeneralAreaAllocator::splitNode):
        (WebKit::GeneralAreaAllocator::updateLargestFree):
        (WebKit::GeneralAreaAllocator::release):
        (WebKit::GeneralAreaAllocator::overhead):
        * WebProcess/WebPage/AreaAllocator.h: Added.
        (WebCore::nextPowerOfTwo):
        (AreaAllocator):
        (WebKit::AreaAllocator::size):
        (WebKit::AreaAllocator::minimumAllocation):
        (WebKit::AreaAllocator::setMinimumAllocation):
        (WebKit::AreaAllocator::margin):
        (WebKit::AreaAllocator::setMargin):
        (GeneralAreaAllocator):
        (Node):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::renderNextFrame):
        (WebKit::LayerTreeCoordinator::beginContentUpdate):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):
        * WebProcess/WebPage/UpdateAtlas.cpp:
        (WebKit::UpdateAtlas::UpdateAtlas):
        (WebKit::UpdateAtlas::buildLayoutIfNeeded):
        (WebKit::UpdateAtlas::didSwapBuffers):
        (WebKit::UpdateAtlas::beginPaintingOnAvailableBuffer):
        * WebProcess/WebPage/UpdateAtlas.h:
        (UpdateAtlas):

2012-08-14  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] REGRESSION (r122428) WebKit2APITests/TestWebKitFindController fails "next" test
        https://bugs.webkit.org/show_bug.cgi?id=91083

        Reviewed by Carlos Garcia Campos.

        After r122428 search_next()/search_prev() should return just 1 match
        if the text is found.

        * UIProcess/API/gtk/tests/TestWebKitFindController.cpp:
        (testFindControllerNext):
        (testFindControllerPrevious):

2012-08-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement smart separators for context menu in WebKit2 GTK+
        https://bugs.webkit.org/show_bug.cgi?id=90449

        Reviewed by Martin Robinson.

        Don't add to the context menu separators that are at the very
        beginning or end of the menu. Once the context menu is shown,
        monitor menu items visibility to hide or show separators to make
        sure they never appear in the context menu unless they are between
        two visible items.

        * UIProcess/API/gtk/tests/TestContextMenu.cpp:
        (testContextMenuSmartSeparators):
        (beforeAll):
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::contextMenuItemVisibilityChanged):
        (WebKit):
        (WebKit::WebContextMenuProxyGtk::append):
        (WebKit::WebContextMenuProxyGtk::populate):

2012-08-14  Kihong Kwon  <kihong.kwon@samsung.com>

        [WK2] Add getter for capture attribute of input element
        https://bugs.webkit.org/show_bug.cgi?id=93710

        Reviewed by Antonio Gomes.

        Add getter for capture attribute to WKOpenPanelParameters to support HTML Media Capture.

        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        * Shared/WebOpenPanelParameters.cpp:
        (WebKit):
        (WebKit::WebOpenPanelParameters::capture):
        * Shared/WebOpenPanelParameters.h:
        (WebOpenPanelParameters):
        * UIProcess/API/C/WKOpenPanelParameters.cpp:
        (WKOpenPanelParametersCopyCapture):
        * UIProcess/API/C/WKOpenPanelParameters.h:

2012-08-13  Tom Sepez  <tsepez@chromium.org>

        [chromium] release FrameLoaderClientImpl::m_pluginWidget refptr upon Plugin Document detach.
        https://bugs.webkit.org/show_bug.cgi?id=93283

        Reviewed by Eric Seidel.

        Chromium has a refptr that needs to be NULLed at this point.
        
        Change the client redirectDataToPlugin method(s) to expect the possibility of
        a NULL argument, keeping existing behaviour otherwise.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::redirectDataToPlugin):

2012-08-13  Raphael Kubo da Costa  <rakuco@webkit.org>

        [EFL] Unreviewed bot fix after r125467.

        * PlatformEfl.cmake: Make the WK2 tests link against glib, gobject
        and gio as well.

2012-08-13  Raphael Kubo da Costa  <rakuco@webkit.org>

        [EFL] Unreviewed attempt at fixing the bots after r125467.

        * PlatformEfl.cmake: Link against GIO and GObject due to the usage
        of libsoup.

2012-08-11  Raphael Kubo da Costa  <rakuco@webkit.org>

        [CMake] Rewrite FindLibSoup2.cmake.
        https://bugs.webkit.org/show_bug.cgi?id=93191

        Reviewed by Rob Buis.

        * PlatformEfl.cmake: Use LIBSOUP_FOO instead of LIBSOUP24_FOO, and
        do not use LIBSOUP24_LDFLAGS, as it is not needed anymore.

2012-08-13  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Move a remaining per-process message from WebContext to WebProcessProxy
        https://bugs.webkit.org/show_bug.cgi?id=93883

        More Windows build fixing.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::dummy):

2012-08-13  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Move a remaining per-process message from WebContext to WebProcessProxy
        https://bugs.webkit.org/show_bug.cgi?id=93883

        More Windows build fix

        * UIProcess/WebContext.cpp:
        (WebKit::WebPage::dummy):
        * UIProcess/WebContext.h: (WebContext):
        * UIProcess/WebContext.messages.in:
        Add a dummy sync message - the same workaround is already used in WebPage.

2012-08-13  Brady Eidson  <beidson@apple.com>

        With asynchronous plug-in initialization, WebProcess and PluginProcess can deadlock
        <rdar://problem/12062125> and https://bugs.webkit.org/show_bug.cgi?id=93894

        Reviewed by Alexey Proskuryakov.

        A few things were in play here:
        - The WebProcess thought the plug-in was done initializing but it wasn't.
        - The sync message out from the PluginProcess was not being handled by the WebProcess.

        Expose the ability for the PluginProcess to act as if it is handling a sync message and needs messages dispatched:
        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::incrementDispatchMessageMarkedDispatchWhenWaitingForSyncReplyCount):
        (CoreIPC::Connection::decrementDispatchMessageMarkedDispatchWhenWaitingForSyncReplyCount):

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::PluginControllerProxy):
        (WebKit::PluginControllerProxy::setInitializationReply): Save the delayed reply for synchronous initialization.
        (WebKit::PluginControllerProxy::takeInitializationReply): Give back the delayed reply for initialization completion.
        (WebKit::PluginControllerProxy::initialize):
        * PluginProcess/PluginControllerProxy.h:
        (WebKit::PluginControllerProxy::isInitializing): Accessor so WebProcessConnection knows whether or not to store the
          delayed reply for later.

        * PluginProcess/WebProcessConnection.messages.in: Make the synchronous form of "CreatePlugin" have a delayed reply.
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::createPlugin): Store away the delayed reply message so it can be responded to after
          asynchronous initialization completes.
        (WebKit::WebProcessConnection::createPluginAsynchronously): If there is a stored away delayed reply message, respond to
          it instead of sending the asynchronously reply.
        * PluginProcess/WebProcessConnection.h:
        (WebProcessConnection):

2012-08-13  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Move a remaining per-process message from WebContext to WebProcessProxy
        https://bugs.webkit.org/show_bug.cgi?id=93883

        Windows build fix.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::getSitesWithPluginData):
        (WebKit::WebProcess::clearPluginSiteData):
        Use WebProcessProxy for the message here, too.

2012-08-13  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Move a remaining per-process message from WebContext to WebProcessProxy
        https://bugs.webkit.org/show_bug.cgi?id=93883

        Reviewed by Sam Weinig.

        There was one plug-in message renaming. Moving it, and also other plug-in messages
        for consistency.

        * UIProcess/WebContext.cpp:
        (WebKit): Got rid of the last MESSAGE_CHECK in this file.
        (WebKit::WebContext::WebContext): Moved m_pluginWorkQueue to a singleton.
        We don't need more than one queue (all it does is read plug-in info), and if we
        needed, it would have been per-process, not per-context.
        (WebKit::WebContext::~WebContext): No more work queue.
        (WebKit::WebContext::processDidFinishLaunching): Ditto.

        * UIProcess/WebContext.h: No longer needs to be a QueueClient.

        * UIProcess/WebContext.messages.in:
        * UIProcess/WebProcessProxy.messages.in:
        Moved plug-in related messages.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::pluginWorkQueue): Moved from WebContext to a singleton.
        (WebKit::WebProcessProxy::sendDidGetPlugins): Moved from WebContext.
        (WebKit::WebProcessProxy::handleGetPlugins): Ditto.
        (WebKit::WebProcessProxy::getPlugins): Ditto.
        (WebKit::WebProcessProxy::getPluginPath): Ditto.
        (WebKit::WebProcessProxy::getPluginProcessConnection): Ditto.
        (WebKit::WebProcessProxy::didGetSitesWithPluginData): Ditto.
        (WebKit::WebProcessProxy::didClearPluginSiteData): Ditto.

        * UIProcess/WebProcessProxy.h: Process proxy needs to be thread safe ref counted
        now, since it sends messages to itself on a work queue and back.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::populatePluginCache): Updated for new receiver.

        * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::createPlugin): Ditto.

        * WebProcess/WebProcess.cpp: (WebKit::canPluginHandleResponse): Ditto.

2012-08-13  Raphael Kubo da Costa  <rakuco@webkit.org>

        [CMake] Remove glib-related Find modules and write single new one instead.
        https://bugs.webkit.org/show_bug.cgi?id=93786

        Reviewed by Rob Buis.

        * PlatformEfl.cmake: Use GLIB_* instead of Glib_*.

2012-08-13  Christophe Dumez  <christophe.dumez@intel.com>

        [SOUP][WK2] Missing LocalTerminationDisabler in WebCookieManager::setCookiePersistentStorage()
        https://bugs.webkit.org/show_bug.cgi?id=93837

        Reviewed by Carlos Garcia Campos.

        Add missing WebCore::LocalTerminationDisabler in
        WebCookieManager::setCookiePersistentStorage() to
        temporarily disable process termination.

        * WebProcess/Cookies/soup/WebCookieManagerSoup.cpp:
        (WebKit::WebCookieManager::setCookiePersistentStorage):

2012-08-12  Nuno Lopes  <nlopes@apple.com>

        Fix build with recent clang.
        https://bugs.webkit.org/show_bug.cgi?id=90701

        Reviewed by Eric Seidel.

        * Shared/CommandLine.h:
        (CommandLine):
        * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
        (WebKit::NotificationPermissionRequestManager::NotificationPermissionRequestManager):
        * WebProcess/Notifications/NotificationPermissionRequestManager.h:
        (NotificationPermissionRequestManager):

2012-08-11  Sam Weinig  <sam@webkit.org>

        Fix the build.

        * Platform/CoreIPC/Connection.h:
        Add missing include.

2012-08-11  Sam Weinig  <sam@webkit.org>

        [WK2] Get rid of ProcessModelSharedSecondaryThread
        https://bugs.webkit.org/show_bug.cgi?id=93652

        Reviewed by Dan Bernstein.

        The threaded model for WebKit2 has been broken a long time and its continued existence in
        the code only serves to confuse. It's time to say good bye to it.

        * UIProcess/API/C/WKContext.cpp:
        * UIProcess/API/C/WKContextPrivate.h:
        Remove WKContextGetSharedThreadContext().

        * UIProcess/ProcessModel.h:
        Remove ProcessModelSharedSecondaryThread from the ProcessModel enum.

        * UIProcess/WebContext.cpp:
        * UIProcess/WebContext.h:
        Remove WebContext::sharedThreadContext().

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::~WebProcessProxy):
        (WebKit::WebProcessProxy::connect):
        (WebKit::WebProcessProxy::isLaunching):
        * UIProcess/WebProcessProxy.h:
        Remove the ThreadLauncher member and stop deriving from ThreadLauncher::Client.

        * UIProcess/Launcher/ThreadLauncher.cpp: Removed.
        * UIProcess/Launcher/ThreadLauncher.h: Removed.
        * UIProcess/Launcher/efl/ThreadLauncherEfl.cpp: Removed.
        * UIProcess/Launcher/gtk/ThreadLauncherGtk.cpp: Removed.
        * UIProcess/Launcher/mac/ThreadLauncherMac.mm: Removed.
        * UIProcess/Launcher/qt/ThreadLauncherQt.cpp: Removed.
        * UIProcess/Launcher/win/ThreadLauncherWin.cpp: Removed.
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * PlatformEfl.cmake:
        * Target.pri:
        Remove ThreadLauncher files.

2012-08-11  Sam Weinig  <sam@webkit.org>

        Enable XPC Service based WebProcess with runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=93773

        Reviewed by Dan Bernstein.

        Use the XPC Service for WebProcess code path if WEBKIT_USE_XPC_SERVICE_FOR_WEB_PROCESS
        is set in the environment.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::launchXPCService):
        Fix issue that was causing this code not to compile. This was not caught before since
        the code was not being built.
        
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::connect):
        Switch from hard coding always using the XPC Service code path if
        HAVE(XPC) was true, to doing it conditionally on an environment variable.

2012-08-11  Sam Weinig  <sam@webkit.org>

        Make it possible to run the WebProcess as an XPC service
        https://bugs.webkit.org/show_bug.cgi?id=92814

        Reviewed by Anders Carlsson.

        In this initial implementation, we are only using the XPC service
        to launch the WebProcess, and then using the xpc_connection to send
        over a mach_port to the WebProcess which is then used for creating
        the CoreIPC connection.  In the future, we will switch to using the
        xpc_connection for all messaging.

        When the XPC service is enabled (it is compiled out by default for now), both
        the XPC service and the old spawned process are runtime choosable.  This allows
        the connect to pre-existing process workflow to continue to work.

        There are a few additional caveats of this initial implementation:
            - It is only set up for the WebProcess (not for the PluginProcess)
            - The WebProcess shim does not work.
            - It requires a new environment variable to be set when launching
              to find the right service to launch (__XPC_DYLD_FRAMEWORK_PATH).

        * Configurations/WebKit2Service.xcconfig: Added.
        Add new configuration file for the service.

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::Identifier::Identifier):
        (CoreIPC::Connection::identifierIsNull):
        Added to encapsulate the concept of a null identifier, now that it
        is not possible to just compare to null.

        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::platformInvalidate):
        (CoreIPC::Connection::platformInitialize):
        Change Connection::Identifier on the Mac to be a struct instead of
        a typedef to a mach_port. This allows for the Connection to get both
        the listening port and a reference to the xpc_connection (if it
        compiled in). For now, all we do is retain the xpc_connection when it
        is given to us, and release on Connection invalidation.

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::createWebProcessConnection):
        * PluginProcess/mac/PluginProcessMainMac.mm:
        (WebKit::PluginProcessMain):
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
        Use the Connection::Identifier constructor.

        * UIProcess/Launcher/ProcessLauncher.h:
        (LaunchOptions):
        Add a UseXPC option to the LaunchOptions so we can dynamically choose whether to use it.

        (ProcessLauncher):
        Make processTypeAsString public to allow better factoring in the implementation file
        using static functions.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        Factor out the different launching options into helper functions. Always start by
        trying to connect to a pre-existing process.

        (WebKit::launchXPCService):
        Create a new xpc_connection to our service, and give it a unique instance UUID.
        Then, send a bootstrap message with a mach_port and wait for a reply to complete
        the launch procedure.
 
        (WebKit::tryPreexistingProcess):
        Move the code to connect to a preexisting process to its own helper function.

        (WebKit::ProcessLauncher::launchProcess):
        Clean up a bit, calling the helper functions and adding call to launch the XPC service
        if it is enabled.

        * UIProcess/Launcher/mac/ThreadLauncherMac.mm:
        (WebKit::webThreadBody):
        (WebKit::ThreadLauncher::createWebThread):
        Switch to using the constructor version of Identifier.

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::PluginProcessProxy):
        Don't try to use the XPC service for plugins yet.
 
        (WebKit::PluginProcessProxy::didFinishLaunching):
        Use Connection::identifierIsNull instead of explicit null check.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::connect):
        If XPC is compiled in (it currently is not) enable it by default.

        * WebKit2.xcodeproj/project.pbxproj:
        Add the new files and targets.

        * WebKit2Service: Added.
        * WebKit2Service/Info.plist: Added.
        Add the paper work needed for an XPC service. Importantly, set up the XPC
        service to be an Application service type, use NSApplicationMain as its run
        loop, and allow for multiple instantiations. Also make sure the service acts
        like the WebProcess binary by making it a LSUIElement, enabling LSFileQuarantine,
        and setting the principle class to NSApplication.

        * WebKit2Service/MainMacService.mm: Added.
        (WebKit2ServiceEventHandler):
        (main):
        The initialization of the XPC service is quite a bit different than the
        WebProcess version, since we don't get passed parameters in argv. Instead,
        we initiate the XPC service via xpc_main, and wait for the bootstrap message
        we sent in ProcessLauncherMac.mm. When we receive that message we can load 
        WebKit2 framework and initialize the WebProcess normally (we also get the mach_port
        for the CoreIPC connection in that bootstrap message).

        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMainXPC):
        Add a variant of WebProcessMain that is used for the XPC service case, where we don't
        have command line arguments and don't need to talk to the mach bootstrap server.

        (WebKit::WebProcessMain):
        * mac/MainMac.cpp: Removed.
        * mac/MainMacProcess.cpp: Copied from Source/WebKit2/mac/MainMac.cpp.
        Rename MainMac to MainMacProcess to signify that it is different from the XPC
        service main.

2012-08-09  Jer Noble  <jer.noble@apple.com>

        Crash exiting from HTML5 FS mode to normal mode via ESC key
        https://bugs.webkit.org/show_bug.cgi?id=93663

        Reviewed by Eric Carlson.

        Crash is due to a refcount underrun with _watchdogTimer due to adopting an autoreleased NSTimer.
        Use the non-autoreleased NSTimer creation method and manually add to the main NSRunLoop.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController cancelOperation:]):

2012-08-10  Rafael Brandao  <rafael.lobo@openbossa.org>

        [Qt] WebViewLoadFavIcon::test_favIconLoad() fails
        https://bugs.webkit.org/show_bug.cgi?id=91888

        Reviewed by Simon Hausmann.

        * UIProcess/API/qt/tests/qmltests/WebView/tst_favIconLoad.qml:
        We should wait for iconChanged signal instead of loadFinished,
        there was no guarantee that at that point we would get it already.

2012-08-10  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] Uninitialized flags in CoordinatedGraphicsLayer
        https://bugs.webkit.org/show_bug.cgi?id=93719

        Reviewed by Kenneth Rohde Christiansen.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):

2012-08-10  Mario Sanchez Prada  <msanchez@igalia.com>

        [WK2][GTK] Implement new API to save a web page using MHTML
        https://bugs.webkit.org/show_bug.cgi?id=89873

        Reviewed by Carlos Garcia Campos.

        Implemented new asynchronous API in WebKitWebView for saving a web
        page to a GInputStream or to a file, using MHTML as the only
        supported method at the moment.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (ViewSaveAsyncData):
        (webViewFileSavedCallback):
        (webViewMHTMLDataGotCallback):
        (webkit_web_view_save):
        (webkit_web_view_save_finish):
        (webkit_web_view_save_to_file):
        (webkit_web_view_save_to_file_finish):
        * UIProcess/API/gtk/WebKitWebView.h:

        Added new unit test.

        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
        (testWebViewSave):
        (beforeAll):
        (afterAll):

        Updated documentation files with new symbols.

        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:

2012-08-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Handle SSL errors for SOUP
        https://bugs.webkit.org/show_bug.cgi?id=90267

        Reviewed by Martin Robinson.

        Ignore SSL errors by default for compatibility.

        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainEfl):
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        (WebKit::WebProcessMainGtk):

2012-08-09  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Add a process model constant for multiple processes
        https://bugs.webkit.org/show_bug.cgi?id=93642

        Reviewed by Anders Carlsson.

        * UIProcess/ProcessModel.h: Added ProcessModelMultipleSecondaryProcesses.
        Deleted ProcessModelSecondaryProcess in favor of more descriptive ProcessModelSharedSecondaryProcess - 
        these used to behave the same.

        * UIProcess/WebContext.cpp: (WebKit::WebContext::create): Changed to use ProcessModelSharedSecondaryProcess.

        * UIProcess/WebProcessProxy.h: Removed an unncessary include of ProcessModel.h.

2012-08-09  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/12035637> 32-bit PluginProcess launches without appropriate DYLD environment variables if UI process is 64-bit only
        https://bugs.webkit.org/show_bug.cgi?id=93596

        Reviewed by Mark Rowe.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess): Changed to pass the current architecture, rather than
        the intended child process architecture, to the DynamicLinkerEnvironmentExtractor constructor.

2012-08-09  Tim Horton  <timothy_horton@apple.com>

        Add optional debug logging for tiled scrolling
        https://bugs.webkit.org/show_bug.cgi?id=93305

        Reviewed by Simon Fraser.

        Add a new boolean preference, ScrollingPerformanceLoggingEnabled, which will be used to toggle
        the WebCore parts of this change.

        * Shared/WebPreferencesStore.h: Add ScrollingPerformanceLoggingEnabled.
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetScrollingPerformanceLoggingEnabled): Added.
        (WKPreferencesGetScrollingPerformanceLoggingEnabled): Added.
        * UIProcess/API/C/WKPreferencesPrivate.h: Add getters and setters for ScrollingPerformanceLoggingEnabled.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Add ScrollingPerformanceLoggingEnabled.
        (WebKit::WebPage::updatePreferences): Add ScrollingPerformanceLoggingEnabled.
        (WebKit::WebPage::setScrollingPerformanceLoggingEnabled): Propagate settings changes through to FrameView.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::scrollingPerformanceLoggingEnabled): Add a getter for the setting so that TiledCoreAnimationDrawingArea can access it.
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updatePreferences): Pass ScrollingPerformanceLoggingEnabled down into the scrolling thread.

2012-08-08  Shane Stephens  <shanestephens@google.com>

        Compile flag for CSS Hierarchies
        https://bugs.webkit.org/show_bug.cgi?id=92433

        Reviewed by Tony Chang.

        * Configurations/FeatureDefines.xcconfig:

2012-08-08  Anders Carlsson  <andersca@apple.com>

        REGRESSION: Crash when plug-in initialization fails
        https://bugs.webkit.org/show_bug.cgi?id=93534
        <rdar://problem/12059786>

        Reviewed by Simon Fraser.

        Protect the PluginProxy while calling out to functions that could cause it to be destroyed.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::didFailToCreatePluginInternal):

2012-08-08  Anders Carlsson  <andersca@apple.com>

        Make isTransparentSilverlightBackgroundValue handle all the possible transparent colors
        https://bugs.webkit.org/show_bug.cgi?id=93532

        Reviewed by Simon Fraser.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::isTransparentSilverlightBackgroundValue):
        Check for all the possible transparent colors and assume that the color is opaque otherwise.

        (WebKit::NetscapePlugin::initialize):
        Pass the lowercase string to isTransparentSilverlightBackgroundValue.

2012-08-08  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=92275
        Need a way to get a snapshot image that does not show the selection
        -and corresponding-
        <rdar://problem/11956802>

        Reviewed by Anders Carlsson.

        Added new API WKBundlePageCreateSnapshotWithOptions()

        New enum SnapshotOptions tracks whether snapshots should exclude 
        selection highlighting in addition to tracking whether the image is 
        sharable like the original ImageOptions.
        * Shared/API/c/WKImage.h:
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::snapshotOptionsFromImageOptions):
        (WebKit):
        (WebKit::toSnapshotOptions):
        * Shared/ImageOptions.h:

        New API.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCreateSnapshotWithOptions):

        These existing APIs all now call 
        WebPage::scaledSnapshotWithOptions().
        (WKBundlePageCreateSnapshotInViewCoordinates):
        (WKBundlePageCreateSnapshotInDocumentCoordinates):
        (WKBundlePageCreateScaledSnapshotInDocumentCoordinates):

        This patch removes WebPage::snapshotInViewCoordinates(), 
        WebPage::snapshotInDocumentCoordinates(), and 
        WebPage::scaledSnapshotInDocumentCoordinates(). All of the logic is 
        now consolidated into WebPage::scaledSnapshotWithOptions(). It turns 
        out that we never did anything different for document coordinates 
        versus view coordinates, so that complexity could just be eliminated 
        outright.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::snapshotOptionsToImageOptions):
        (WebKit::WebPage::scaledSnapshotWithOptions):
        (WebKit):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):

2012-08-08  Anders Carlsson  <andersca@apple.com>

        Make the Silverlight CAOpenGLLayer opaque if we know the plug-in contents is opaque to reduce blending
        https://bugs.webkit.org/show_bug.cgi?id=93508
        <rdar://problem/12056765>

        Reviewed by Simon Fraser.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::determineQuirks):
        * Shared/Plugins/PluginQuirks.h:
        Rename the MakeTransparentIfBackgroundAttributeExists quirk to MakeOpaqueUnlessTransparentSilverlightBackgroundAttributeExists
        since we'll explicitly check for opaque background colors (at least one opaque background color for now), instead of just making the
        plug-in transparent whenever there's a background specified.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::isTransparentSilverlightBackgroundValue):
        Helper function for determining if a background value is transparent. Just check for opaque black now and treat everything else as transparent.

        (WebKit::NetscapePlugin::initialize):
        Call isTransparentSilverlightBackgroundValue.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::makeCGLPresentLayerOpaque):
        Helper function for grabbing the CGLPresentLayer from the layer hierarchy and setting it to be opaque.

        (WebKit::NetscapePlugin::updatePluginLayer):
        Call makeCGLPresentLayerOpaque if the plug-in has the MakeOpaqueUnlessTransparentSilverlightBackgroundAttributeExists quirk and
        the plug-in is not transparent.

2012-08-08  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] Coding style violation was brought with r125031
        https://bugs.webkit.org/show_bug.cgi?id=93503

        Reviewed by Alexey Proskuryakov.

        WKURLResponseCopyMimeType is corrected to WKURLResponseCopyMIMEType.

        * Shared/API/c/WKURLResponse.cpp:
        (WKURLResponseCopyMIMEType):
        * Shared/API/c/WKURLResponse.h:

2012-08-08  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL] EFL Webkit needs a class wrapping eina stringshare
        https://bugs.webkit.org/show_bug.cgi?id=93229

        Reviewed by Kenneth Rohde Christiansen.

        Added a new auxiliary class wrapping Eina Stringshare and providing
        more convenient C++ interface for using it. 

        * PlatformEfl.cmake:
        * UIProcess/API/cpp/efl/WKEinaSharedString.cpp: Added.
        (:m_string):
        (WKEinaSharedString::~WKEinaSharedString):
        (WKEinaSharedString::operator=):
        * UIProcess/API/cpp/efl/WKEinaSharedString.h: Added.
        (WebKit):

2012-08-08  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Snowshoe desktop crashes when opening a new tab
        https://bugs.webkit.org/show_bug.cgi?id=92753

        Reviewed by Jocelyn Turcotte.

        Change back forceRepaint to consider the UI process state.
        It has been tweaked to satisfy the needs of WKPageForceRepaint but
        it has other callers so this new behavior was not safe. This patch
        implements WebPage::forceRepaintAsync for testing purposes. It is
        done by LayerTreeCoordinator that holds the callback and sends the
        reply message in the next flushPendingLayerChanges. In theory it
        could be implemented for the non conposited path in DrawingAreaImpl
        as well but neither it is needed nor can I test it.

        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::LayerTreeCoordinator):
        (WebKit::LayerTreeCoordinator::forceRepaintAsync):
        (WebKit):
        (WebKit::LayerTreeCoordinator::flushPendingLayerChanges):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::forceRepaintAsync):
        (WebKit):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        (DrawingAreaImpl):
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit::LayerTreeHost::forceRepaintAsync):

2012-08-08  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] [WTR] Provide Resource Response dumping.
        https://bugs.webkit.org/show_bug.cgi?id=93454

        Reviewed by Kenneth Rohde Christiansen.

        Several new getter functions were added to WKURLResponse and WKURL, so that WTR has
        necessary data for dumping.

        * Shared/API/c/WKURL.cpp:
        (WKURLCopyLastPathComponent):
        * Shared/API/c/WKURL.h:
        * Shared/API/c/WKURLResponse.cpp:
        (WKURLResponseCopyURL): Returns URL of the response.
        (WKURLResponseCopyMimeType): Returns MIME type of the response. 
        * Shared/API/c/WKURLResponse.h:
        * Shared/WebURL.h:
        (WebKit::WebURL::lastPathComponent): Returns last path component of the URL.
        (WebURL):

2012-08-08  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Make ewk_view inheritable in the WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=90054

        Reviewed by Kenneth Rohde Christiansen.

        Make the ewk_view inheritable by exposing ewk_view_smart_class_set()
        API. Additionally, the ewk_view_smart_add() API is added to create
        Evas_Object for WebKit2 EFL. The default initialization is done in the
        ewk_view_smart_add(), so the object which inherits the ewk_view should
        use ewk_view_smart_add() instead of evas_object_smart_add() to create
        Evas_Object.

        * UIProcess/API/efl/ewk_context.cpp:
        (ewk_context_new_from_WKContext):
        * UIProcess/API/efl/ewk_context_private.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_smart_class_set):
        (_ewk_view_smart_class_new):
        (_ewk_view_initialize):
        (_ewk_view_add_with_smart):
        (ewk_view_base_add):
        (ewk_view_smart_add):
        (ewk_view_add_with_context):
        * UIProcess/API/efl/ewk_view.h:

2012-08-08  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] WebProcess hangs on plugin initialization.
        https://bugs.webkit.org/show_bug.cgi?id=93272

        Reviewed by Kenneth Rohde Christiansen.

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didFinishLaunching): Ensure PluginProcessConnectionManager is informed of plugin crashes.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Let setIsInWindow set canStartMedia asynchronously.

2012-08-08  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Set the fixed layout setting before creating the page
        https://bugs.webkit.org/show_bug.cgi?id=93374

        Reviewed by Noam Rosenthal.

        Any page setting should preferrable be set before creating the page
        but fixed layout was set after the initialization of the web page.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::initialize):
        (QQuickWebViewFlickablePrivate::initialize):

2012-08-08  Mario Sanchez Prada  <msanchez@igalia.com>

        [WK2] Add new C API to generate MHTML data from the UI process
        https://bugs.webkit.org/show_bug.cgi?id=89872

        Reviewed by Anders Carlsson.

        Add new C API in the UI Process, using ENABLE(MHTML) guards as needed.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetContentsAsMHTMLData):
        * UIProcess/API/C/WKPage.h:

        Implementation in the UI Process's WebPage proxy object.

        * UIProcess/WebPageProxy.cpp:
        (WebKit):
        (WebKit::WebPageProxy::getContentsAsMHTMLData):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):

        Implementation in the WebProcess, relying in WebCore::MHTMLArchive.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit):
        (WebKit::WebPage::getContentsAsMHTMLData):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/WebPage.messages.in:

2012-08-07  YoungTaeck Song  <youngtaeck.song@samsung.com>

        [WK2][EFL] Implement accelerated compositing on WK2 Efl port
        https://bugs.webkit.org/show_bug.cgi?id=89840

        Reviewed by Noam Rosenthal.

        Implement accelerated composition with TiledBackingStore on WK2 Efl port.
        This implementation is based on COORDINATED_GRAPHICS.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * Shared/ShareableSurface.cpp:
        * Shared/WebCoreArgumentCoders.cpp:
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::PageClientImpl):
        (WebKit::PageClientImpl::didChangeContentsSize):
        (WebKit):
        * UIProcess/API/efl/PageClientImpl.h:
        (PageClientImpl):
        * UIProcess/API/efl/ViewportProcessor.cpp: Added.
        (WebKit):
        (WebKit::ViewportProcessor::ViewportProcessor):
        (WebKit::ViewportProcessor::~ViewportProcessor):
        (WebKit::ViewportProcessor::display):
        (WebKit::ViewportProcessor::updateViewportSize):
        (WebKit::ViewportProcessor::setVisibleContentsRect):
        (WebKit::ViewportProcessor::didChangeContentsSize):
        * UIProcess/API/efl/ViewportProcessor.h: Added.
        (WebKit):
        (ViewportProcessor):
        (WebKit::ViewportProcessor::create):
        (WebKit::ViewportProcessor::drawingArea):
        (WebKit::ViewportProcessor::viewSize):
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_ewk_view_smart_calculate):
        (ewk_view_base_add):
        (ewk_view_display):
        (ewk_view_contents_size_changed):
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/PageClient.h:
        (PageClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit):
        (WebKit::WebPageProxy::didChangeContentsSize):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.cpp:
        * WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.h:
        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create):
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit):
        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainEfl):

2012-08-07  Csaba Osztrogonác  <ossy@webkit.org>

       [Qt] New API tests introuduced in r119723 marked as fail, but pass
       https://bugs.webkit.org/show_bug.cgi?id=88870

        Reviewed by Alexis Menard.

        Revert r119723, because there are 2 failing tests, and the author and
        the reviewer of the original patch ignore the bug report long time ago.

        * UIProcess/API/qt/tests/qmltests/WebView/tst_devicePixelRatio.qml: Removed.

2012-08-07  No'am Rosenthal  <noam.rosenthal@nokia.com>

        GraphicsLayerAnimation shouldn't use HashMap<String>
        https://bugs.webkit.org/show_bug.cgi?id=93284

        Reviewed by Kenneth Rohde Christiansen.

        Apply the changes to GraphicsLayerAnimation API.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::addAnimation):

2012-08-07  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] Make it possible to build without QtQuick

        Reviewed by Simon Hausmann.

        * Target.pri:
        * UIProcess/API/qt/tests/tests.pri:
        * UIProcess/API/qt/tests/util.cpp:
        * UIProcess/API/qt/tests/util.h:
        * UIProcess/qt/WebFullScreenManagerProxyQt.cpp:
        (WebKit::WebFullScreenManagerProxy::invalidate):
        (WebKit::WebFullScreenManagerProxy::enterFullScreen):
        (WebKit::WebFullScreenManagerProxy::exitFullScreen):
        * UIProcess/qt/WebPageProxyQt.cpp:
        (WebKit::WebPageProxy::resolveApplicationSchemeRequest):
        (WebKit::WebPageProxy::sendApplicationSchemeReply):
        * WebKit2.pri:

2012-07-19  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Remove Qt 4 specific code paths
        https://bugs.webkit.org/show_bug.cgi?id=88161

        Reviewed by Kenneth Rohde Christiansen.

        * UIProcess/API/qt/qquickwebview.cpp:
        * UIProcess/API/qt/tests/publicapi/tst_publicapi.cpp:
        (gatherAPI):
        * WebKit2.pri:

2012-08-07  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Add back forward list API
        https://bugs.webkit.org/show_bug.cgi?id=92345

        Reviewed by Kenneth Rohde Christiansen.

        Added new Back Forward list API to EFL WK2. Ewk_Back_Forward_List and
        Ewk_Back_Forward_List_Item structures were added. The new API is
        mostly the same as one from UIProcess/API/C/{ WKBackForwardList.h, WKBackForwardListItem.h }.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_back_forward_list.cpp: Added.
        (_Ewk_Back_Forward_List):
        (_Ewk_Back_Forward_List::_Ewk_Back_Forward_List):
        (getOrCreateItem):
        (webkit_back_forward_list_current_item_get):
        (webkit_back_forward_list_back_item_get):
        (webkit_back_forward_list_forward_item_get):
        (webkit_back_forward_list_item_at_index_get):
        (webkit_back_forward_list_length_get):
        (ewk_back_forward_list_changed):
        (ewk_back_forward_list_new):
        (ewk_back_forward_list_free):
        * UIProcess/API/efl/ewk_back_forward_list.h: Added.
        * UIProcess/API/efl/ewk_back_forward_list_item.cpp: Added.
        (getItemProperty):
        (_Ewk_Back_Forward_List_Item):
        (_Ewk_Back_Forward_List_Item::_Ewk_Back_Forward_List_Item):
        (_Ewk_Back_Forward_List_Item::~_Ewk_Back_Forward_List_Item):
        (ewk_back_forward_list_item_ref):
        (ewk_back_forward_list_item_unref):
        (ewk_back_forward_list_item_uri_get):
        (ewk_back_forward_list_item_title_get):
        (ewk_back_forward_list_item_original_uri_get):
        (ewk_back_forward_list_item_new):
        * UIProcess/API/efl/ewk_back_forward_list_item.h: Added.
        * UIProcess/API/efl/ewk_back_forward_list_item_private.h: Added.
        * UIProcess/API/efl/ewk_back_forward_list_private.h: Added.
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::~_Ewk_View_Private_Data):
        (ewk_view_back_forward_list_get): New function to get back-forward list.
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        (didChangeBackForwardList): The callback added to update back-forward list items cache.
        (ewk_view_loader_client_attach):

2012-08-07  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        CUSTOM_SCHEME_HANDLER flag should depend on REGISTER_PROTOCOL_HANDLER
        https://bugs.webkit.org/show_bug.cgi?id=93081

        Reviewed by Adam Barth.

        CUSTOM_SCHEME_HANDLER #if guards are enclosed in the REGISTER_PROTOCOL_HANDLER guards.

        * WebProcess/WebCoreSupport/WebRegisterProtocolHandlerClient.h:
        (WebRegisterProtocolHandlerClient):

2012-08-07  Hyerim Bae  <hyerim.bae@samsung.com>

        [EFL][WK2] Add ewk_view_find_client.h / cpp for wrapping WKPageSetPageFindClient.
        https://bugs.webkit.org/show_bug.cgi?id=90927

        Reviewed by Kentaro Hara.

        Add ewk_view_find_client.h / files for wrapping WKPageSetPageFindClient,
        add didFindString callback member of WKPageSetPageFindClient.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_base_add):
        (ewk_view_text_found):
        (ewk_view_text_find):
        (ewk_view_text_find_highlight_clear):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_find_client.cpp: Added.
        (toEwkView):
        (didFindString):
        (ewk_view_find_client_attach):
        * UIProcess/API/efl/ewk_view_find_client_private.h: Added.
        * UIProcess/API/efl/ewk_view_private.h:

2012-08-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r124816.
        http://trac.webkit.org/changeset/124816
        https://bugs.webkit.org/show_bug.cgi?id=93311

        made some tests crash (Requested by noamr on #webkit).

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::addAnimation):

2012-08-06  No'am Rosenthal  <noam.rosenthal@nokia.com>

        GraphicsLayerAnimation shouldn't use HashMap<String>
        https://bugs.webkit.org/show_bug.cgi?id=93284

        Reviewed by Kenneth Rohde Christiansen.

        Apply the changes to GraphicsLayerAnimation API.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::addAnimation):

2012-08-03  Brady Eidson  <beidson@apple.com>

        Out-of-process plug-ins should support asynchronous initialization
        <rdar://problem/10598594> and https://bugs.webkit.org/show_bug.cgi?id=92919

        Reviewed by Anders Carlsson.

        If a plug-in has been deemed capable of asynchronous initialization when run out of process...
        ...then do that!

        Add flags to communicate that this plugin create is meant to create a plug-in already requested asynchronously and
        to include whether or not the initialize call should include an artificial delay (for testing):
        * PluginProcess/PluginCreationParameters.cpp:
        (WebKit::PluginCreationParameters::PluginCreationParameters):
        (WebKit::PluginCreationParameters::encode):
        (WebKit::PluginCreationParameters::decode):
        * PluginProcess/PluginCreationParameters.h:
        (PluginCreationParameters):

        Add a flag for the UI Process to tell the PluginProcess that it supports asynchronous initialization:
        * Shared/Plugins/PluginProcessCreationParameters.cpp:
        (WebKit::PluginProcessCreationParameters::PluginProcessCreationParameters):
        (WebKit::PluginProcessCreationParameters::encode):
        (WebKit::PluginProcessCreationParameters::decode):
        * Shared/Plugins/PluginProcessCreationParameters.h:
        (PluginProcessCreationParameters):

        Allow the UI Process to pass along whether the plug-on supports asynchronous initialization:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch):
        (WebKit::PluginProcessProxy::didCreateWebProcessConnection):
        * UIProcess/Plugins/PluginProcessProxy.h:
        (PluginProcessProxy):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::platformInitializePluginProcess):
        * UIProcess/WebProcessProxy.messages.in:

        Allow the Plugin Process to pass whether or not it supports asynchronous initialization, originally determined
        in the UI Process, along to the WebProcess:
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::PluginProcess):
        (WebKit::PluginProcess::initializePluginProcess):
        (WebKit::PluginProcess::createWebProcessConnection):
        * PluginProcess/PluginProcess.h:
        (PluginProcess):
        * UIProcess/Plugins/PluginProcessProxy.messages.in:

        Add a flag so PluginProcessConnections remember whether or not they support asynchronous initialization:
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::PluginProcessConnection):
        (WebKit::PluginProcessConnection::setSupportsAsynchronousPluginInitialization):
        (WebKit):
        * WebProcess/Plugins/PluginProcessConnection.h:
        (WebKit::PluginProcessConnection::create):
        (WebKit::PluginProcessConnection::supportsAsynchronousPluginInitialization):
        (PluginProcessConnection):

        Create PluginProcessConnections with the flag passed down from the PluginProcess about whether or not they
        support asynchronous initialization:
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):

        Responding to messages from the WebProcess, most of the heavy decision making in asynchronous initialization is here:
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::asynchronousInstanceIDsToIgnore): A set of instance IDs to *not* create asynchronously later because we know
          we no longer need to.
        (WebKit):
        (WebKit::WebProcessConnection::didReceiveMessage):
        (WebKit::WebProcessConnection::destroyPlugin): If the plug-in doesn't exist but is awaiting asynchronous creation, flag 
          this instance ID in the "asynchronous ignore set".
        (WebKit::WebProcessConnection::createPluginInternal): Renamed from createPlugin, actually does the plug-in creation.
        (WebKit::WebProcessConnection::createPlugin): Adds the instance ID to the "asynchronous ignore set" then calls createPluginInternal.
        (WebKit::WebProcessConnection::createPluginAsynchronously): If the instance ID is in the "asynchronous ignore set", remove it from the
          set and do nothing else. Otherwise, perform the initialization and then send the asynchronous result back to the WebProcess.
        * PluginProcess/WebProcessConnection.h:
        (WebProcessConnection):
        * PluginProcess/WebProcessConnection.messages.in:

        Add helpers for asynchronous initialization that all plug-in types must implement:
        * WebProcess/Plugins/Plugin.h:
        (Plugin):

        Add helpers for asynchronous initialization that plug-in controllers can override:
        * WebProcess/Plugins/PluginController.h:
        (PluginController):
        (WebKit::PluginController::asynchronousPluginInitializationEnabled):
        (WebKit::PluginController::asynchronousPluginInitializationEnabledForAllPlugins):
        (WebKit::PluginController::artificialPluginInitializationDelayEnabled):

        Give PluginProxys the ability to initialize either asynchronously or synchronously, and also the ability to synchronously
        wait for previously asynchronous initialization (in case their PluginScriptObject is required):
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::PluginProxy):
        (WebKit::PluginProxy::initialize): Store the plugin creation parameters as a member, and decide whether to try synchronous
          or asynchronous initialization.
        (WebKit):
        (WebKit::PluginProxy::canInitializeAsynchronously): Answer based on preferences and what the PluginProcessConnection says
          that it supports.
        (WebKit::PluginProxy::waitForAsynchronousInitialization): Synchronously wait on initialization when asynchronous initialization
          was previously requested.
        (WebKit::PluginProxy::initializeSynchronously):
        (WebKit::PluginProxy::didCreatePlugin): Double-check that we're still expecting asynchronous initialization, then call
          through to didCreatePluginInternal.
        (WebKit::PluginProxy::didCreatePluginInternal): Handle completion of initialization (both synchronously and asynchronously)
        (WebKit::PluginProxy::didFailToCreatePlugin): Double-check that we're still expecting asynchronous initialization, then call
          through to didFailToCreatePluginInternal.
        (WebKit::PluginProxy::didFailToCreatePluginInternal): Handle failure to initialize (both synchronously and asynchronously)
        (WebKit::PluginProxy::destroy):
        * WebProcess/Plugins/PluginProxy.h:
        (WebKit):
        (WebKit::PluginProxy::isInitializingAsynchronously):
        (PluginProxy):
        * WebProcess/Plugins/PluginProxy.messages.in:

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::PluginView):
        (WebKit::PluginView::~PluginView): Always destroy the plug-in even if it hasn't been initialized yet, as it might be initializing
          right now.
        (WebKit::PluginView::initializePlugin): Don't handle the result of initialization immediately. Break that out in to two
          methods that will be called later.
        (WebKit):
        (WebKit::PluginView::didFailToInitializePlugin):
        (WebKit::PluginView::didInitializePlugin):
        (WebKit::PluginView::scriptObject): If we truly need the script object, then wait for a synchronous initialization of the plug-in.
        (WebKit::PluginView::asynchronousPluginInitializationEnabled):
        (WebKit::PluginView::asynchronousPluginInitializationEnabledForAllPlugins):
        (WebKit::PluginView::artificialPluginInitializationDelayEnabled):
        * WebProcess/Plugins/PluginView.h:
        (PluginView):

        These methods shouldn't be called in the PluginProcess, only in the WebProcess:
        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::didInitializePlugin):
        (WebKit):
        (WebKit::PluginControllerProxy::didFailToInitializePlugin):
        * PluginProcess/PluginControllerProxy.h:
        (PluginControllerProxy):

        NetscapePlugin is for in-process plug-ins:
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        (NetscapePlugin):
        (WebKit::NetscapePlugin::waitForAsynchronousInitialization):
        (WebKit::NetscapePlugin::isInitializingAsynchronously):

        Built-in PDFView is currently only in-process:
        * WebProcess/Plugins/PDF/BuiltInPDFView.h:
        (BuiltInPDFView):
        (WebKit::BuiltInPDFView::waitForAsynchronousInitialization):
        (WebKit::BuiltInPDFView::isInitializingAsynchronously):

2012-08-06  Luciano Wolf  <luciano.wolf@openbossa.org>

        [Qt] Default sizes for input-text and text-area are different when running DRT/WTR
        https://bugs.webkit.org/show_bug.cgi?id=91990

        Reviewed by Kenneth Rohde Christiansen.

        WTR wasn't using the proper font types provided by testfonts directory.
        The same approach as DRT was applied and now it takes info from QFont to
        update the store variable.

        * UIProcess/qt/WebPreferencesQt.cpp:
        (WebKit::setStringValueIfInUserDefaults):
        (WebKit):
        (WebKit::WebPreferences::platformInitializeStore):

2012-08-06  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] Use GraphicsLayerAnimation in LayerTreeCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=93147

        Reviewed by Kenneth Rohde Christiansen

        Allow controlling animations outside of WebCore. This is an intermediate step before moving
        to threaded animations.

        CoordinatedGraphicsLayer maintains the GraphicsLayerAnimation structures, and applies the
        animation interpolation at the right time, before syncing the rest of the layer info and
        the visible contents rect.

        This also allows sending shorter IPC messages for animated opacity/transform changes,
        without the rest of the layer info.

        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::setLayerAnimatedOpacity):
        (WebKit):
        (WebKit::LayerTreeCoordinatorProxy::setLayerAnimatedTransform):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::setAnimatedOpacity):
        (WebKit):
        (WebKit::LayerTreeRenderer::setAnimatedTransform):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::didChangeAnimatedProperties):
        (WebCore):
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::syncLayerState):
        (WebCore::CoordinatedGraphicsLayer::syncAnimatedProperties):
        (WebCore::CoordinatedGraphicsLayer::syncCompositingStateForThisLayerOnly):
        (WebCore::CoordinatedGraphicsLayer::computeTransformedVisibleRect):
            account for the animated transform in the visible rect.

        (WebCore::CoordinatedGraphicsLayer::addAnimation):
        (WebCore::CoordinatedGraphicsLayer::pauseAnimation):
        (WebCore::CoordinatedGraphicsLayer::removeAnimation):
        (WebCore::CoordinatedGraphicsLayer::animationStartedTimerFired):
        (WebCore::CoordinatedGraphicsLayer::setAnimatedTransform):
        (WebCore::CoordinatedGraphicsLayer::setAnimatedOpacity):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayerClient):
        (CoordinatedGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit):
        (WebKit::LayerTreeCoordinator::setLayerAnimatedOpacity):
        (WebKit::LayerTreeCoordinator::setLayerAnimatedTransform):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-08-06  Anders Carlsson  <andersca@apple.com>

        If the Apple Java plug-in is blocked and no runtime is installed, don't load it
        https://bugs.webkit.org/show_bug.cgi?id=93289
        <rdar://problem/11730092>

        Reviewed by Dan Bernstein.

        If the Apple Java plug-in is blocked, but there's no Java runtime installed (or the Java plug-in is disabled),
        don't even include it in the plug-in info store.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::shouldBlockPlugin):
        Since this is static now, it shouldn't be const.

        * UIProcess/Plugins/PluginInfoStore.h:
        (PluginInfoStore):
        shouldBlockPlugin can be static.

        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::shouldUsePlugin):
        Return false if the Apple Java plug-in is blocked but Java isn't installed or enabled.

        (WebKit::PluginInfoStore::shouldBlockPlugin):
        Since this is static now, it shouldn't be const.

2012-08-06  Mario Sanchez Prada  <msanchez@igalia.com>

        [WK2][GTK] Improvements for the new spell-checking API
        https://bugs.webkit.org/show_bug.cgi?id=93262

        Reviewed by Carlos Garcia Campos.

        Improve the way the new spell-checking API is implemented, by
        using better internal representations for data, documenting better
        the new functions and using better unit tests.

        * UIProcess/API/gtk/WebKitTextChecker.cpp:
        (WebKitTextChecker::getSpellCheckingLanguages): Just return the
        value previously cached when calling to the setter function.
        (WebKitTextChecker::setSpellCheckingLanguages): Update the text
        checker in WebCore and cache the value returned from it.
        * UIProcess/API/gtk/WebKitTextChecker.h:
        (WebKitTextChecker): Use a CString instead of an String to cache
        the list of spell checking languages. Update getter and setter.
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (_WebKitWebContextPrivate): No need to cache the spell checking
        languages here anymore.
        (webkit_web_context_get_spell_checking_languages): Improve
        both implementation and documentation to be more consistent.
        (webkit_web_context_set_spell_checking_languages): Make
        'languages' a mandatory (non-NULL) parameter. Update documentation.
        * UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:
        (testWebContextSpellChecker): Test even more situations.

2012-08-06  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Remove workarounds from input event handling
        https://bugs.webkit.org/show_bug.cgi?id=93125

        Reviewed by Jocelyn Turcotte.

        Since input event propagation in Qt5 has been fixed we can remove
        the workarounds introduced to prevent the QML WebView from receiving
        input events targeting a child dialog.
        To do this the childMouseEventFilter function has to be changed to
        force touch and mouse events through the default propagation path.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::QQuickWebViewPrivate):
        (QQuickWebViewLegacyPrivate::initialize):
        (QQuickWebView::childMouseEventFilter):
        (QQuickWebView::touchEvent):
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):
        (QQuickWebViewLegacyPrivate):
        * UIProcess/qt/QtDialogRunner.cpp:
        (WebKit::QtDialogRunner::run):
        * UIProcess/qt/WebColorChooserProxyQt.cpp:
        (WebKit::WebColorChooserProxyQt::createItem):
        (WebKit::WebColorChooserProxyQt::endChooser):
        * UIProcess/qt/WebPopupMenuProxyQt.cpp:
        (WebKit::WebPopupMenuProxyQt::showPopupMenu):
        (WebKit::WebPopupMenuProxyQt::hidePopupMenu):

2012-08-06  Mario Sanchez Prada  <msanchez@igalia.com>

        [WK2][GTK] Implement a new spell checker API for WebKit2GTK+
        https://bugs.webkit.org/show_bug.cgi?id=90268

        Reviewed by Martin Robinson.

        Add a simple spell checking API to WK2, allowing to enable/disable
        this feature and to define a list of languages associated to it.

        * GNUmakefile.am: Add flags to handle the SPELLCHECK feature.
        * GNUmakefile.list.am: Added new files

        Added new internal class that will act both as the implementation
        of TextCheckerClient and as the object WebKitWebContext will
        depend on to implement the newly added API.

        * UIProcess/API/gtk/WebKitTextChecker.cpp: Added.
        (toTextChecker):
        (continuousSpellCheckingEnabledCallback):
        (setContinuousSpellCheckingEnabledCallback):
        (checkSpellingOfStringCallback):
        (guessesForWordCallback):
        (learnWordCallback):
        (ignoreWordCallback):
        (WebKitTextChecker::~WebKitTextChecker):
        (WebKitTextChecker::create):
        (WebKitTextChecker::WebKitTextChecker):
        (WebKitTextChecker::checkSpellingOfString):
        (WebKitTextChecker::getGuessesForWord):
        (WebKitTextChecker::learnWord):
        (WebKitTextChecker::ignoreWord):
        (WebKitTextChecker::setSpellCheckingEnabled):
        (WebKitTextChecker::setSpellCheckingLanguages):
        * UIProcess/API/gtk/WebKitTextChecker.h: Added.
        (WebKitTextChecker):
        (WebKitTextChecker::isSpellCheckingEnabled):
        (WebKitTextChecker::getSpellCheckingLanguages):

        Added WKTextChecker to WebKitPrivate.h, needed in WebKitTextChecker.

        * UIProcess/API/gtk/WebKitPrivate.h:

        Add new API to WebKitWebContext to allow enabling/disabling this
        spell checking feature, and to set/get the list of languages used
        to decide which dictionaries will be consulted.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (_WebKitWebContextPrivate):
        (createDefaultWebContext):
        (webkit_web_context_get_spell_checking_enabled): New API.
        (webkit_web_context_set_spell_checking_enabled): Ditto.
        (webkit_web_context_get_spell_checking_languages): Ditto.
        (webkit_web_context_set_spell_checking_languages): Ditto.
        * UIProcess/API/gtk/WebKitWebContext.h:

        New tests for checking the new API added to WebKitWebContext.

        * UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:
        (testWebContextSpellChecker):
        (beforeAll):

        Update documentation with new sections and symbols.

        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:

2012-08-05  Benjamin Poulain  <bpoulain@apple.com>

        Assert in checkValidity() in hashtable.h from WebGeolocationManager::didFailToDeterminePosition() when fetching http://html5demos.com/geo
        https://bugs.webkit.org/show_bug.cgi?id=80386

        Reviewed by Alexey Proskuryakov.

        WebKit2's WebGeolocationManager was delivering events without accounting that each event
        can modify the list of page that need delivery.
        Any page can remove itself by invoking clearWatch() from the callback function. A page can also cause another
        page to be removed.

        This patch solves the issue by taking a copy of the list of page before delivery. Each page is
        referenced as it can be deleted during the delivery.

        Unfortunately, this cannot be tested due to missing features of WebKitTestRunner.

        * WebProcess/Geolocation/WebGeolocationManager.cpp:
        (WebKit::WebGeolocationManager::didChangePosition):
        (WebKit::WebGeolocationManager::didFailToDeterminePosition):

2012-08-04  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] UI_SIDE_COMPOSITING code has confusing names
        https://bugs.webkit.org/show_bug.cgi?id=93164

        Reviewed by Kenneth Rohde Christiansen.

        Renamed and consolidated code guarded under UI_SIDE_COMPOSITING, now under
        USE(COORDINATED_GRAPHICS) guard and CoordinatedGraphics folders.

        * CMakeLists.txt:
        * DerivedSources.pri:
        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebLayerTreeInfo.cpp:
        * Shared/WebLayerTreeInfo.h:
        * Target.pri:
        * UIProcess/API/qt/qquickwebpage.cpp:
        (QQuickWebPage::updatePaintNode):
        * UIProcess/API/qt/raw/qrawwebview.cpp:
        (QRawWebView::paint):
        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp: Renamed from Source/WebKit2/UIProcess/texmap/LayerBackingStore.cpp.
        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.h: Renamed from Source/WebKit2/UIProcess/texmap/LayerBackingStore.h.
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp: Renamed from Source/WebKit2/UIProcess/LayerTreeCoordinatorProxy.cpp.
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h: Renamed from Source/WebKit2/UIProcess/LayerTreeCoordinatorProxy.h.
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in: Renamed from Source/WebKit2/UIProcess/LayerTreeCoordinatorProxy.messages.in.
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp: Renamed from Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp.
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h: Renamed from Source/WebKit2/UIProcess/WebLayerTreeRenderer.h.
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit):
        * UIProcess/DrawingAreaProxy.h:
        (DrawingAreaProxy):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl):
        (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
        (WebKit):
        * UIProcess/DrawingAreaProxyImpl.h:
        (DrawingAreaProxyImpl):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        * UIProcess/qt/QtWebPageSGNode.cpp:
        (WebKit::ContentsSGNode::ContentsSGNode):
        (WebKit::ContentsSGNode::layerTreeRenderer):
        (ContentsSGNode):
        (WebKit::QtWebPageSGNode::setRenderer):
        * UIProcess/qt/QtWebPageSGNode.h:
        (WebKit):
        (QtWebPageSGNode):
        * WebKit2.pri:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::scheduleAnimation):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/WebGraphicsLayer.cpp.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h: Renamed from Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/WebGraphicsLayer.h.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedTile.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/TiledBackingStoreRemoteTile.cpp.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedTile.h: Renamed from Source/WebKit2/WebProcess/WebPage/TiledBackingStoreRemoteTile.h.
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.cpp.
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h: Renamed from Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.h.
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.messages.in: Renamed from Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.messages.in.
        * WebProcess/WebPage/DrawingArea.h:
        (DrawingArea):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        (DrawingAreaImpl):
        * WebProcess/WebPage/LayerTreeHost.h:
        (LayerTreeHost):
        * WebProcess/WebPage/UpdateAtlas.cpp:
        * WebProcess/WebPage/UpdateAtlas.h:
        * WebProcess/qt/WebProcessMainQt.cpp:
        (WebKit::WebProcessMainQt):

2012-08-04  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] Move WebIntentData from Shared to UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=93175

        Reviewed by Kenneth Rohde Christiansen.

        Move WebIntentData from Shared to UIProcess to
        prepare for MessagePorts support in WK2.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * UIProcess/WebIntentData.cpp: Renamed from Source/WebKit2/Shared/WebIntentData.cpp.
        (WebKit):
        (WebKit::WebIntentData::WebIntentData):
        (WebKit::WebIntentData::data):
        (WebKit::WebIntentData::suggestions):
        (WebKit::WebIntentData::extra):
        (WebKit::WebIntentData::extras):
        * UIProcess/WebIntentData.h: Renamed from Source/WebKit2/Shared/WebIntentData.h.
        (WebKit):
        (WebIntentData):
        (WebKit::WebIntentData::create):
        (WebKit::WebIntentData::~WebIntentData):
        (WebKit::WebIntentData::action):
        (WebKit::WebIntentData::payloadType):
        (WebKit::WebIntentData::service):
        (WebKit::WebIntentData::store):
        (WebKit::WebIntentData::type):

2012-08-03  Anders Carlsson  <andersca@apple.com>

        Nothing happens when clicking on the unavailable plug-in button for a blocked plug-in
        https://bugs.webkit.org/show_bug.cgi?id=93161

        Reviewed by John Sullivan.

        Be more robust against values being added to the RenderEmbeddedObject::PluginUnavailabilityReason
        enumeration, and use a switch statement instead of blindly casting the type value to a WKPluginUnavailabilityReason.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::unavailablePluginButtonClicked):

2012-08-03  Brady Eidson  <beidson@apple.com>

        Small part of "Out-of-process plug-ins should support asynchronous initialization."
        <rdar://problem/10598594> and https://bugs.webkit.org/show_bug.cgi?id=92919

        Unreviewed (build fix).

        * Shared/WebPreferencesStore.h:
        (WebKit): Include this file which has the declaration of the new pref.

2012-08-03  Brady Eidson  <beidson@apple.com>

        Small part of "Out-of-process plug-ins should support asynchronous initialization."
        <rdar://problem/10598594> and https://bugs.webkit.org/show_bug.cgi?id=92919

        Reviewed by Anders Carlsson.

        -Add API-level preferences for forcing asynchronous initialization of all plug-ins (for testing).
        -Make sure "overridePreference" is hooked up properly for all needed preferences.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetAsynchronousPluginInitializationEnabledForAllPlugins):
        (WKPreferencesGetAsynchronousPluginInitializationEnabledForAllPlugins):
        * UIProcess/API/C/WKPreferencesPrivate.h:

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::setAsynchronousPluginInitializationEnabled):
        (WebKit::WebPage::asynchronousPluginInitializationEnabledForAllPlugins):
        (WebKit::WebPage::setAsynchronousPluginInitializationEnabledForAllPlugins):
        (WebKit::WebPage::setArtificialPluginInitializationDelayEnabled):
        (WebPage):

2012-08-02  Jeffrey Pfau  <jpfau@apple.com>

        Add API for enabling blanket third-party data blocking
        https://bugs.webkit.org/show_bug.cgi?id=93022

        Reviewed by Anders Carlsson.

        Added API for enabling third-party storage blocking.

        * Shared/WebPreferencesStore.h:
        (WebKit):
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetThirdPartyStorageBlockingEnabled):
        (WKPreferencesGetThirdPartyStorageBlockingEnabled):
        * UIProcess/API/C/WKPreferences.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2012-08-03  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [Qt][WK2] There's no way to test the gesture tap on WTR
        https://bugs.webkit.org/show_bug.cgi?id=92895

        Reviewed by Kenneth Rohde Christiansen.

        Add an instance of QtViewportHandler to QQuickWebViewPrivate, so it's
        now available on mobile and desktop modes, as a side effect gesture tap
        events can now be created and sent to WebCore.

        This is needed to test tap gestures and to get tap gestures working
        when you have a WebView (in desktop mode) on notebooks equipped with
        touch screens.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::onComponentComplete):
        (QQuickWebViewFlickablePrivate::onComponentComplete): Implementation
        moved to QQuickWebViewPrivate::onComponentComplete.
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):
        (QQuickWebViewFlickablePrivate):

2012-08-02  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Move some WebContext messages to WebProcessProxy
        https://bugs.webkit.org/show_bug.cgi?id=93046

        Reviewed by Anders Carlsson.

        * UIProcess/WebContext.cpp: (WebKit::WebContext::didReceiveSyncMessage): Unrelated
        fix - use actual process argument instead of second-guessing where the message came
        from.

        * UIProcess/WebContext.h: (WebKit::WebContext::historyClient): Expose history client,
        since WebProcessProxy now needs it.

        * UIProcess/WebContext.messages.in:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didNavigateWithNavigationData):
        (WebKit::WebProcessProxy::didPerformClientRedirect):
        (WebKit::WebProcessProxy::didPerformServerRedirect):
        (WebKit::WebProcessProxy::didUpdateHistoryTitle):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::updateGlobalHistory):
        (WebKit::WebFrameLoaderClient::updateGlobalHistoryRedirectLinks):
        (WebKit::WebFrameLoaderClient::setTitle):
        Move the messages.

2012-08-03  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed, rolling out r124603.
        http://trac.webkit.org/changeset/124603
        https://bugs.webkit.org/show_bug.cgi?id=93077

        Made a few tests crash under
        LayerTreeCoordinator::flushPendingLayerChanges

        * WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::LayerTreeCoordinator):
        (WebKit::LayerTreeCoordinator::forceRepaint):
        (WebKit::LayerTreeCoordinator::layerTreeTileUpdatesAllowed):
        * WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-08-03  Mario Sanchez Prada  <msanchez@igalia.com>

        Unreviewed build fix for GTK after r124479.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit): Moved static const definitions from header file.
        * UIProcess/WebInspectorProxy.h:
        (WebInspectorProxy): Don't give values to static const members
        here.

2012-08-03  Balazs Kelemen  <kbalazs@webkit.org>

        [WK2] LayerTreeCoordinator can disallow tile updates in forceRepaint
        https://bugs.webkit.org/show_bug.cgi?id=93077

        Reviewed by Jocelyn Turcotte.

        Force tile updates when doing a forced repaint.

        * WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::LayerTreeCoordinator):
        (WebKit::LayerTreeCoordinator::forceRepaint):
        (WebKit::LayerTreeCoordinator::layerTreeTileUpdatesAllowed):
        * WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-08-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Inspector should set a default attached height before being attached
        https://bugs.webkit.org/show_bug.cgi?id=90767

        Reviewed by Xan Lopez.

        We are currently using the minimum attached height in
        WebKitWebViewBase as the default height for the inspector when
        attached. It would be easier for WebKitWebViewBase and embedders
        implementing attach() if the inspector already had an attached
        height set when it's being attached.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseContainerAdd): Don't initialize
        inspectorViewHeight.
        (webkitWebViewBaseSetInspectorViewHeight): Allow to set the
        inspector view height before having an inpector view, but only
        queue a resize when the view already has an inspector view.
        * UIProcess/API/gtk/tests/TestInspector.cpp:
        (testInspectorDefault):
        (testInspectorManualAttachDetach):
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformAttach): Set the default
        attached height before attach the inspector view.

2012-08-02  Dinu Jacob  <dinu.jacob@nokia.com>

        WebKitTestRunner needs layoutTestController.setUserStyleSheetEnabled
        https://bugs.webkit.org/show_bug.cgi?id=42679

        Reviewed by Eric Seidel.

        Added WKBundleSetUserStyleSheetLocation API.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetUserStyleSheetLocation): Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h: Added WKBundleSetUserStyleSheetLocation.
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setUserStyleSheetLocation): Added. Sets the user style sheet location
        for all pages in the page group.
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):

2012-08-02  Lauro Neto  <lauro.neto@openbossa.org>

        [Qt] Fix axis locking when panning on N9
        https://bugs.webkit.org/show_bug.cgi?id=92394

        Reviewed by Simon Hausmann.

        Make the QQuickWebView axis locker calculate the
        time between events using QInputEvent.timestamp, which
        is set from the native event when available.

        Also use touchPoint.pos() instead of screenPos() to
        correct the axis detection when running on N9, which
        has a native landscape display and the applications usually
        run in portrait mode.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::FlickableAxisLocker::FlickableAxisLocker):
        (QQuickWebViewPrivate::FlickableAxisLocker::touchVelocity):
        (QQuickWebViewPrivate::FlickableAxisLocker::update):
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (FlickableAxisLocker):

2012-08-02  Hyerim Bae  <hyerim.bae@samsung.com>

        [EFL][WK2]Add ewk_view_ui_client.
        https://bugs.webkit.org/show_bug.cgi?id=89864

        Reviewed by Kentaro Hara.

        Add ewk_view_ui_client.h / cpp files for wrapping WKPageSetPageUIClient,
        add close, createNewPage callback member to WKPageSetPageUIClient.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_base_add):
        (ewk_view_page_close):
        (ewk_view_page_create):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/ewk_view_ui_client.cpp: Added.
        (toEwkView):
        (closePage):
        (createNewPage):
        (ewk_view_ui_client_attach):
        * UIProcess/API/efl/ewk_view_ui_client_private.h: Added.

2012-08-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] No main resource in WebView on load committed when page has been loaded from history cache
        https://bugs.webkit.org/show_bug.cgi?id=91482

        Reviewed by Martin Robinson.

        We assume that on load committed, we already have a main resource
        in the web view, and it has already received a response. This is
        not true for pages loaded from the history cache, so when going
        back/forward, we don't have a main resource when the
        load-committed signal is emitted. We must ensure that the loading
        process documented in the API is the same for pages loaded from
        the history cache too.

        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        (didCommitLoadForFrame): Call webkitWebViewLoadChanged() and let
        the web view handle the certificate.
        * UIProcess/API/gtk/WebKitWebResource.cpp:
        (webkitWebResourceGetFrame): Helper private function to easily get
        the WKFrame associated with a WebResource.
        * UIProcess/API/gtk/WebKitWebResourcePrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewDisconnectMainResourceResponseChangedSignalHandler):
        Disconnect the notify::response signal of the main resource.
        (webkitWebViewFinalize): Call
        webkitWebViewDisconnectMainResourceResponseChangedSignalHandler().
        (setCertificateToMainResource): Set the TLS certificate on the
        response of the main resource.
        (webkitWebViewEmitLoadChanged): Helper function to emit
        load-chancged signal.
        (webkitWebViewEmitDelayedLoadEvents): If we were waiting for the
        main resource, emit the signals that were delayed.
        (webkitWebViewLoadChanged): Do not emit committed or finished if
        we are still waiting for the main resource. Set the TLS
        certificate if we already have a main resource or wait until we
        have the main resource with a response.
        (mainResourceResponseChangedCallback): Emitted when the main
        resource received the response. Set the certificate on the
        response and emit load signals delayed.
        (waitForMainResourceResponseIfWaitingForResource): If we are
        waiting for the main resource, connect to the notify::response
        signal of the WebResource to make sure it has a response already
        when load signal delayed are emitted.
        (webkitWebViewResourceLoadStarted): Call
        waitForMainResourceResponseIfWaitingForResource().
        * UIProcess/API/gtk/tests/LoadTrackingTest.cpp:
        (loadChangedCallback):
        (LoadTrackingTest::goBack):
        (LoadTrackingTest::goForward):
        * UIProcess/API/gtk/tests/LoadTrackingTest.h:
        (LoadTrackingTest):
        * UIProcess/API/gtk/tests/TestLoaderClient.cpp:
        (testWebViewHistoryLoad):
        (serverCallback):
        (beforeAll):

2012-08-02  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Click, mouse and links rely on touch mocking.
        https://bugs.webkit.org/show_bug.cgi?id=83091

        Reviewed by Simon Hausmann.

        Send the incoming mouse events directly to the gesture recognizers to make
        the WebView behave consistent with other Flickables.
        This patch unifies the code paths for input events and makes it possible
        to enable mouse events on the flickable web view again, thus makes the
        mobile-version of QQuickWebView usable on desktop.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::handleMouseEvent):
        (QQuickWebViewFlickablePrivate::QQuickWebViewFlickablePrivate):
        (QQuickWebViewFlickablePrivate::handleMouseEvent):
        (QQuickWebView::mousePressEvent):
        (QQuickWebView::mouseMoveEvent):
        (QQuickWebView::mouseReleaseEvent):
        (QQuickWebView::mouseDoubleClickEvent):
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):
        (QQuickWebViewFlickablePrivate):
        * UIProcess/qt/QtPanGestureRecognizer.cpp:
        (WebKit::QtPanGestureRecognizer::update):
        * UIProcess/qt/QtWebPageEventHandler.cpp:
        (WebKit::QtWebPageEventHandler::QtWebPageEventHandler):
        (WebKit::QtWebPageEventHandler::handleInputEvent):
        (WebKit):
        (WebKit::QtWebPageEventHandler::doneWithTouchEvent):
        * UIProcess/qt/QtWebPageEventHandler.h:
        (QtWebPageEventHandler):

2012-08-01  Brady Eidson  <beidson@apple.com>

        Small part of "Out-of-process plug-ins should support asynchronous initialization."
        <rdar://problem/10598594> and https://bugs.webkit.org/show_bug.cgi?id=92919

        Reviewed by Anders Carlsson.

        Add API-level preferences for:
        - Is asynchronous plug-in initialization enabled.
        - Is an artificial initialization delay (for testing purposes) enabled.

        * Shared/WebPreferencesStore.h:
        (WebKit):

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetAsynchronousPluginInitializationEnabled):
        (WKPreferencesGetAsynchronousPluginInitializationEnabled):
        (WKPreferencesSetArtificialPluginInitializationDelayEnabled):
        (WKPreferencesGetArtificialPluginInitializationDelayEnabled):
        * UIProcess/API/C/WKPreferencesPrivate.h:

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::asynchronousPluginInitializationEnabled):
        (WebKit::WebPage::artificialPluginInitializationDelayEnabled):
        (WebPage):

2012-08-01  Jian Li  <jianli@chromium.org>

        Add new CSS property "-webkit-widget-region" to expose dashboard region support for other port
        https://bugs.webkit.org/show_bug.cgi?id=90298

        Reviewed by Adam Barth.

        * Configurations/FeatureDefines.xcconfig: Add ENABLE_WIDGET_REGION define.

2012-08-01  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt][WK2] Race condition between first layout and viewport attributes initialization
        https://bugs.webkit.org/show_bug.cgi?id=92902

        Reviewed by Noam Rosenthal.

        Initializing m_rawAttributes from QtViewportHandler to avoid calculation of random
        scale factors on the first layout is triggered.

        * UIProcess/qt/QtViewportHandler.cpp:
        (WebKit::QtViewportHandler::QtViewportHandler):

2012-08-01  Zeno Albisser  <zeno@webkit.org>

        [Qt]REGRESSION(r123786): It made 3 fast/animation tests fail.
        https://bugs.webkit.org/show_bug.cgi?id=92490

        Make sure that scripted animations are also serviced when
        forceRepaint is being executed. As this is what is being used for
        running layout tests.
        Move servicing of scripted animations and layoutIfNeeded call
        into a separate function syncDisplayState.
        This function can then be called from forceRepaint as well as from
        performScheduledLayerFlush.

        Reviewed by Noam Rosenthal.

        * WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::forceRepaint):
        (WebKit::LayerTreeCoordinator::performScheduledLayerFlush):
        (WebKit):
        (WebKit::LayerTreeCoordinator::syncDisplayState):
        * WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-08-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build with recent version of GTK+.

        Use g_threads_enter/leave instead of the wrapper macros. This
        gives a compile warning because they are now deprecated but at
        least it builds.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewRunAsModal): Fix enter/leave order.
        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        (WebKit::WebPopupMenuProxyGtk::showPopupMenu):

2012-07-31  Anders Carlsson  <andersca@apple.com>

        Prefer the Oracle Java plug-in over the Apple Java plug-in
        https://bugs.webkit.org/show_bug.cgi?id=92780

        Reviewed by Oliver Hunt.

        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::findPluginWithBundleIdentifier):
        Add a new helper for finding a plug-in with the given bundle identifier.

        (WebKit::checkForPreferredPlugin):
        Helper function for making sure that an old plug-in is never loaded if a new plug-in is found, and that the old plug-in
        is removed from the list of loaded plug-ins if the new plug-in is found.

        (WebKit::PluginInfoStore::shouldUsePlugin):
        Prefer the Oracle Java plug-in over the Apple Java plug-in.

2012-07-31  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Use an actual WebProcessProxy when decoding messages
        https://bugs.webkit.org/show_bug.cgi?id=92788

        Reviewed by Anders Carlsson.

        WebContextUserMessageDecoder gets process proxy from a WebContext object, but we
        know which process a message came from, and can just use that.

        * UIProcess/WebContextUserMessageCoders.h:
        (WebKit::WebContextUserMessageDecoder::WebContextUserMessageDecoder):
        (WebKit::WebContextUserMessageDecoder::decode):
        This is the focal point of this patch - decoder no longer needs to call m_context->process().

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::didReceiveMessage):
        (WebKit::WebContext::didReceiveSyncMessage):
        * UIProcess/WebContext.h:
        These methods now take a WebProcessProxy pointer instead of IPC::Connection,
        so that they can call the updated coder.
        A number of other didReceiveMessage can be modified to take WebProcessProxy later
        if needed (it's a richer interface than IPC::Connection), although not all messages
        come from WebProcesses.

        * UIProcess/WebConnectionToWebProcess.cpp:
        (WebKit::WebConnectionToWebProcess::didReceiveMessage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::willGoToBackForwardListItem):
        (WebKit::WebPageProxy::registerIntentServiceForFrame):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
        (WebKit::WebPageProxy::didReceiveTitleForFrame):
        (WebKit::WebPageProxy::didFirstLayoutForFrame):
        (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame):
        (WebKit::WebPageProxy::didNewFirstVisuallyNonEmptyLayout):
        (WebKit::WebPageProxy::didRemoveFrameFromHierarchy):
        (WebKit::WebPageProxy::didDisplayInsecureContentForFrame):
        (WebKit::WebPageProxy::didRunInsecureContentForFrame):
        (WebKit::WebPageProxy::didDetectXSSForFrame):
        (WebKit::WebPageProxy::didReceiveIntentForFrame):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::unableToImplementPolicy):
        (WebKit::WebPageProxy::willSubmitForm):
        (WebKit::WebPageProxy::mouseDidMoveOverElement):
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        Updated arguments accordingly.

2012-07-31  Andras Becsi  <andras.becsi@nokia.com>

        [WK2] Visible content rect update with null trajectory vector does not reach the backing store
        https://bugs.webkit.org/show_bug.cgi?id=92750

        Reviewed by Jocelyn Turcotte.

        Make sure that notifications with a null trajectory vector reach the backing store
        since a null vector means that all tiles around the viewport were requested.

        * WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::setVisibleContentsRect):

2012-07-31  Marcelo Lira  <marcelo.lira@openbossa.org>

        [Qt] Input method update should also include hints
        https://bugs.webkit.org/show_bug.cgi?id=92744

        Reviewed by Simon Hausmann.

        The QInputMethod is told to query for input method hints when updated.

        * UIProcess/qt/QtWebPageEventHandler.cpp:
        (WebKit::QtWebPageEventHandler::updateTextInputState):

2012-07-31  Danilo Cesar Lemes de Paula  <danilo.cesar@collabora.co.uk>

        add Farstream flags/deps to WebKit, for WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=87524

        Reviewed by Philippe Normand.

        Since Farstream will be used as the backend for GTK's WebRTC, this
        patch adds it as a dependency to the build system.

        * GNUmakefile.am:

2012-07-30  Huang Dongsung  <luxtella@company100.net>

        [Texmap] Remove the backing store after 'style.visibility' for an element sets 'hidden'.
        https://bugs.webkit.org/show_bug.cgi?id=92492

        Reviewed by Noam Rosenthal.

        Texmap handles visibility:hidden in this patch, so WebGraphicsLayer
        sends the LayerTreeCoordinatorProxyMessages with additional infomation
        to UIProcess.

        * Shared/WebLayerTreeInfo.h:
        * UIProcess/WebLayerTreeRenderer.cpp:
        (WebKit::WebLayerTreeRenderer::setLayerState):
        * WebProcess/WebPage/LayerTreeCoordinator/WebGraphicsLayer.cpp:
        (WebCore::WebGraphicsLayer::setContentsVisible):
        (WebCore):
        (WebCore::WebGraphicsLayer::syncLayerState):
        * WebProcess/WebPage/LayerTreeCoordinator/WebGraphicsLayer.h:
        (WebGraphicsLayer):

2012-07-30  Sam Weinig  <sam@webkit.org>

        Add a proper umbrella header for the public WebKit2 API headers
        https://bugs.webkit.org/show_bug.cgi?id=92708
        <rdar://problem/11970825>

        Reviewed by Dan Bernstein.

        Create a new umbrella WebKit2.h and add the currently public (as decided by their 
        status in Xcode) Objective-C headers.

        * UIProcess/API/mac/WebKit2.h: Added.
        * WebKit2.xcodeproj/project.pbxproj:
        While we are here, make WebKit2_C.h a private header.

2012-07-30  Sam Weinig  <sam@webkit.org>

        Rename WebKit2.h to WebKit2_C.h
        https://bugs.webkit.org/show_bug.cgi?id=92704

        Reviewed by Dan Bernstein.

        * GNUmakefile.list.am:
        * Target.pri:
        * UIProcess/API/C/WebKit2_C.h: Renamed from Source/WebKit2/UIProcess/API/C/WebKit2.h.
        * UIProcess/API/gtk/WebKitBackForwardListPrivate.h:
        * UIProcess/API/gtk/WebKitPolicyDecisionPrivate.h:
        * UIProcess/API/gtk/WebKitPrivate.h:
        * UIProcess/API/gtk/WebKitSettingsPrivate.h:
        * UIProcess/API/gtk/WebKitWebViewPrivate.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:
        Update for changed header file name.

2012-07-28  Sam Weinig  <sam@webkit.org>

        Add ability to load from a string to the ObjC WK API
        https://bugs.webkit.org/show_bug.cgi?id=92590

        Reviewed by Dan Bernstein.

        This adds an often used method to the new Objective-C API and will
        be helpful for writing API tests.

        * UIProcess/API/mac/WKBrowsingContextController.h:
        * UIProcess/API/mac/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController loadHTMLString:baseURL:]):
        Implement via calling down to WKPageLoadHTMLString.

2012-07-30  Rafael Brandao  <rafael.lobo@openbossa.org>

        [WK2] Kill the concept of secondary shared process
        https://bugs.webkit.org/show_bug.cgi?id=92676

        Reviewed by Alexey Proskuryakov.

        Build fix after r124092.

        * UIProcess/qt/QtWebContext.cpp: Build fix for Qt. In exchange of the
        method removed, I've used WebContext::create(String()).

2012-07-30  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Kill the concept of secondary shared process
        https://bugs.webkit.org/show_bug.cgi?id=92676

        Reviewed by Sam Weinig.

        * UIProcess/API/C/WKContext.cpp:
        * UIProcess/API/C/WKContext.h:
        * UIProcess/WebContext.cpp:
        * UIProcess/WebContext.h:
        Deleted shared process related code. We don't need to build the singleton into
        the cross-platform C API, platform-specific API wrappers are perfectly capable
        of doing that.

        * UIProcess/API/efl/ewk_context.cpp: (createDefaultEwkContext):
        * UIProcess/API/gtk/WebKitWebContext.cpp: (createDefaultWebContext):
        Use WKContextCreate() when creating default context.

2012-07-30  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] critical warning: gdk_window_get_cursor() called on a NULL window
        https://bugs.webkit.org/show_bug.cgi?id=92651

        Reviewed by Martin Robinson.

        PageClientImpl::setCursor() might get called before the
        window is realized, so safeguard against it.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::setCursor): early return if the window is
        not realized.

2012-07-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r123983.
        http://trac.webkit.org/changeset/123983
        https://bugs.webkit.org/show_bug.cgi?id=92663

        EFL build is broken when unit tests are enabled (Requested by
        paroga on #webkit).

        * CMakeLists.txt:
        * PlatformEfl.cmake:

2012-07-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r123966 and r123967.
        http://trac.webkit.org/changeset/123966
        http://trac.webkit.org/changeset/123967
        https://bugs.webkit.org/show_bug.cgi?id=92656

        This patch is causing assertion failures on the debug bot
        (also rolling out a dependent patch) (Requested by mrobinson
        on #webkit).

        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * UIProcess/API/gtk/WebKitPrivate.h:
        * UIProcess/API/gtk/WebKitTextChecker.cpp: Removed.
        * UIProcess/API/gtk/WebKitTextChecker.h: Removed.
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (_WebKitWebContextPrivate):
        (createDefaultWebContext):
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:
        * UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:
        (beforeAll):

2012-07-29  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Resource agent's reference to cached resources should be weak.
        https://bugs.webkit.org/show_bug.cgi?id=92108

        Reviewed by Pavel Feldman.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-07-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r124000.
        http://trac.webkit.org/changeset/124000
        https://bugs.webkit.org/show_bug.cgi?id=92632

        seems to have broken chromium Range_InstanceSizeUnknown unit
        test across many platforms (Requested by tomhudson on
        #webkit).

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-07-27  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Remove accurateVisibleContentsPosition and use a FloatRect for visibleContentsRect instead
        https://bugs.webkit.org/show_bug.cgi?id=92536

        Reviewed by Noam Rosenthal.

        AccurateVisibleContentsPosition carries the same information as visibleContentsRect.location() and
        is needed for fixed layer position updates.
        This patch instead uses a FloatRect for the visible contents rect from the web view down to the
        LayerCoordinatorProxy, and converts it to an IntRect at this moment, before sending it to the
        web process.
        This also moves the check to prevent sending the same rect to the moment of the conversion
        in LayerTreeCoordinatorProxy to fix a bug where the fixed layer deltas wouldn't be updated
        unless the integer part of position components changed.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewLegacyPrivate::updateViewportSize):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::setVisibleContentsRect):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::setVisibleContentsRect):
        * UIProcess/DrawingAreaProxyImpl.h:
        (DrawingAreaProxyImpl):
        * UIProcess/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::LayerTreeCoordinatorProxy):
        (WebKit::LayerTreeCoordinatorProxy::setVisibleContentsRect):
        * UIProcess/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/WebLayerTreeRenderer.cpp:
        (WebKit::WebLayerTreeRenderer::WebLayerTreeRenderer):
        (WebKit::WebLayerTreeRenderer::setVisibleContentsRect):
        (WebKit::WebLayerTreeRenderer::adjustPositionForFixedLayers):
        * UIProcess/WebLayerTreeRenderer.h:
        (WebLayerTreeRenderer):
        * UIProcess/qt/QtViewportHandler.cpp:
        (WebKit::QtViewportHandler::visibleContentsRect):
        (WebKit::QtViewportHandler::informVisibleContentChange):
        * UIProcess/qt/QtViewportHandler.h:
        (QtViewportHandler):

2012-07-27  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Fix issues remaining with fixed positioned layers
        https://bugs.webkit.org/show_bug.cgi?id=92528

        Reviewed by Noam Rosenthal.

        This partially fixes jittering of fixed layers when zoomed in and the
        blurriness of rendered tiles of the non-composited contents layer.

        * UIProcess/WebLayerTreeRenderer.cpp:
        (WebKit::boundedScrollPosition):
        (WebKit::WebLayerTreeRenderer::paintToCurrentGLContext):
        Remove the adjustment on the root layer. This cancels setPixelAligned and causes the blurriness.
        (WebKit::WebLayerTreeRenderer::adjustPositionForFixedLayers):
        Use m_accurateVisibleContentsPosition to calculate the delta.
        (WebKit::WebLayerTreeRenderer::didChangeScrollPosition):

2012-07-29  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Resource agent's reference to cached resources should be weak.
        https://bugs.webkit.org/show_bug.cgi?id=92108

        Reviewed by Pavel Feldman.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-07-29  YoungTaeck Song  <youngtaeck.song@samsung.com>

        [WK2][EFL] TILED_BACKING_STORE support on Efl WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=91582

        Reviewed by Noam Rosenthal.

        This patch is a subset of Efl's UI_SIDE_COMPOSITING implementation.
        Add a dummy function for fixing building error when enabling TILED_BACKING_STORE.

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit):
        (WebKit::PageClientImpl::pageDidRequestScroll):
        * UIProcess/API/efl/PageClientImpl.h:
        (PageClientImpl):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::contentsSizeChanged):

2012-07-29  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Use WEBKIT_CREATE_FORWARDING_HEADERS to generate WK2 forwarding headers
        https://bugs.webkit.org/show_bug.cgi?id=83579

        Reviewed by Daniel Bates.

        Using a list of directories in combination with the WEBKIT_CREATE_FORWARDING_HEADERS
        macro allows us to share the common generation of forwarding headers across ports.

        * CMakeLists.txt:
        * PlatformEfl.cmake:

2012-07-28  Sam Weinig  <sam@webkit.org>

        Stop copying unnecessary files in WebKit2 build
        https://bugs.webkit.org/show_bug.cgi?id=92587

        Reviewed by Dan Bernstein.

        * WebKit2.xcodeproj/project.pbxproj:
        We were accidentally copying ColorSpaceData.h and EventDispatcher.messages.in into the
        build products. Stop this.

2012-07-28  Ryuan Choi  <ryuan.choi@samsung.com>

        [WK2][EFL] Add ewk_view_scale_{get|set} to EwkView.
        https://bugs.webkit.org/show_bug.cgi?id=92446

        Reviewed by Kenneth Rohde Christiansen.

        Add methods to Ewk_View to get or set the scale factor of page.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_scale_set):
        (ewk_view_scale_get):
        * UIProcess/API/efl/ewk_view.h:

2012-07-28  Mario Sanchez Prada  <msanchez@igalia.com>

        [WK2][GTK] Implement a new spell checker API for WebKit2GTK+
        https://bugs.webkit.org/show_bug.cgi?id=90268

        Reviewed by Martin Robinson.

        Add a simple spell checking API to WK2, allowing to enable/disable
        this feature and to define a list of languages associated to it.

        * GNUmakefile.am: Add flags to handle the SPELLCHECK feature.
        * GNUmakefile.list.am: Added new files

        Added new internal class that will act both as the implementation
        of TextCheckerClient and as the object WebKitWebContext will
        depend on to implement the newly added API.

        * UIProcess/API/gtk/WebKitTextChecker.cpp: Added.
        (toTextChecker):
        (continuousSpellCheckingEnabledCallback):
        (setContinuousSpellCheckingEnabledCallback):
        (checkSpellingOfStringCallback):
        (guessesForWordCallback):
        (learnWordCallback):
        (ignoreWordCallback):
        (WebKitTextChecker::~WebKitTextChecker):
        (WebKitTextChecker::create):
        (WebKitTextChecker::WebKitTextChecker):
        (WebKitTextChecker::checkSpellingOfString):
        (WebKitTextChecker::getGuessesForWord):
        (WebKitTextChecker::learnWord):
        (WebKitTextChecker::ignoreWord):
        (WebKitTextChecker::setSpellCheckingEnabled):
        (WebKitTextChecker::setSpellCheckingLanguages):
        * UIProcess/API/gtk/WebKitTextChecker.h: Added.
        (WebKitTextChecker):
        (WebKitTextChecker::isSpellCheckingEnabled):
        (WebKitTextChecker::getSpellCheckingLanguages):

        Added WKTextChecker to WebKitPrivate.h, needed in WebKitTextChecker.

        * UIProcess/API/gtk/WebKitPrivate.h:

        Add new API to WebKitWebContext to allow enabling/disabling this
        spell checking feature, and to set/get the list of languages used
        to decide which dictionaries will be consulted.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (_WebKitWebContextPrivate):
        (createDefaultWebContext):
        (webkit_web_context_get_spell_checking_enabled): New API.
        (webkit_web_context_set_spell_checking_enabled): Ditto.
        (webkit_web_context_get_spell_checking_languages): Ditto.
        (webkit_web_context_set_spell_checking_languages): Ditto.
        * UIProcess/API/gtk/WebKitWebContext.h:

        New tests for checking the new API added to WebKitWebContext.

        * UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:
        (testWebContextSpellChecker):
        (beforeAll):

        Update documentation with new sections and symbols.

        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:

2012-07-27  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Assertion hit in ewk_cookie_manager.cpp
        https://bugs.webkit.org/show_bug.cgi?id=92544

        Reviewed by Kenneth Rohde Christiansen.

        Removed wrong assertion in ewk_cookie_manager.cpp
        and replace it by an if check. The assertion was
        sometimes hit by our unit tests.

        * UIProcess/API/efl/ewk_cookie_manager.cpp:
        (cookiesDidChange):

2012-07-27  Anders Carlsson  <andersca@apple.com>

        Don't use an NSUserDefault for disabling the web process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=92542
        <rdar://problem/11976060>

        Reviewed by Mark Rowe.

        The user default was really helpful during WebKit2 bringup, but we no longer need to pay the IPC cost of initializing NSUserDefaults at startup,
        so get rid of the preference and use a good old #ifdef instead.

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::initializeSandbox):

2012-07-27  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WTR] LayoutTestController.deliverWebIntent() needs to be implemented
        https://bugs.webkit.org/show_bug.cgi?id=92228

        Reviewed by Anders Carlsson.

        Add C API to create a WKIntentData and to deliver
        it to a frame. This is needed by WebKitTestRunner
        to implement LayoutTestController.deliverWebIntent().

        * UIProcess/API/C/WKIntentData.cpp:
        (WKIntentDataCreate):
        * UIProcess/API/C/WKIntentData.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageDeliverIntentToFrame):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/WebPage/WebPage.h:
        (WebPage): Make deliverIntentToFrame() public so that it can
        be used by WKBundlePage.

2012-07-27  Anders Carlsson  <andersca@apple.com>

        Show the unavailable plug-in indicator for Java applets as well
        https://bugs.webkit.org/show_bug.cgi?id=92521

        Reviewed by Sam Weinig.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::unavailablePluginButtonClicked):
        This can now be called on applet elements as well.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createJavaAppletWidget):
        Get the MIME type from the applet element.

2012-07-27  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [WK2] Fix build warning in WebEventConversion.cpp
        https://bugs.webkit.org/show_bug.cgi?id=92517

        Reviewed by Darin Adler.

        There is a build warning related to comparison between signed and unsigned integer expressions.

        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformTouchEvent::WebKit2PlatformTouchEvent):

2012-07-27  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [WK2] Fix build warning in WebEventConversion.cpp
        https://bugs.webkit.org/show_bug.cgi?id=92517

        Reviewed by Darin Adler.

        There is a build warning related to comparison between signed and unsigned integer expressions.

        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformTouchEvent::WebKit2PlatformTouchEvent):

2012-07-27  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add download client for Ewk_Context
        https://bugs.webkit.org/show_bug.cgi?id=91345

        Reviewed by Kenneth Rohde Christiansen.

        Add download client for Ewk_Context so that
        information about downloads can be reported
        to the client application via Ewk_View signals.

        The client application needs to listen for
        "download,request" signal on the view and set
        the download path for the download in the
        callback in order to accept it. If the signal
        is ignored or if the download path is not set
        the download will fail.

        A new Ewk_Download_Job type is introduced to provide
        information relative to a download to the client
        and to allow the client to interact with it (e.g.
        set its download path, cancel it, ...).

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::handleDownloadRequest):
        (WebKit):
        * UIProcess/API/efl/PageClientImpl.h:
        (PageClientImpl):
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context):
        (_Ewk_Context::_Ewk_Context):
        (_Ewk_Context::~_Ewk_Context):
        (ewk_context_download_job_add):
        (ewk_context_download_job_get):
        (ewk_context_download_job_remove):
        * UIProcess/API/efl/ewk_context_download_client.cpp: Added.
        (toEwkContext):
        (decideDestinationWithSuggestedFilename):
        (didReceiveResponse):
        (didCreateDestination):
        (didReceiveData):
        (didFail):
        (didCancel):
        (didFinish):
        (ewk_context_download_client_attach):
        * UIProcess/API/efl/ewk_context_download_client_private.h: Added.
        * UIProcess/API/efl/ewk_context_private.h:
        * UIProcess/API/efl/ewk_download_job.cpp: Added.
        (_Ewk_Download_Job):
        (_Ewk_Download_Job::_Ewk_Download_Job):
        (_Ewk_Download_Job::~_Ewk_Download_Job):
        (ewk_download_job_ref):
        (ewk_download_job_unref):
        (ewk_download_job_id_get):
        (ewk_download_job_view_get):
        (ewk_download_job_state_get):
        (ewk_download_job_request_get):
        (ewk_download_job_response_get):
        (ewk_download_job_destination_get):
        (ewk_download_job_destination_set):
        (ewk_download_job_suggested_filename_get):
        (ewk_download_job_cancel):
        (ewk_download_job_estimated_progress_get):
        (ewk_download_job_elapsed_time_get):
        (ewk_download_job_response_set):
        (ewk_download_job_suggested_filename_set):
        (ewk_download_job_received_data):
        (ewk_download_job_state_set):
        (ewk_download_job_new):
        * UIProcess/API/efl/ewk_download_job.h: Added.
        * UIProcess/API/efl/ewk_download_job_private.h: Added.
        (WebKit):
        * UIProcess/API/efl/ewk_url_response.cpp:
        (ewk_url_response_content_length_get): Add a function to
        retrieve the content length of a URL response.
        * UIProcess/API/efl/ewk_url_response.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_download_job_cancelled):
        (ewk_view_download_job_requested):
        (ewk_view_download_job_failed):
        (ewk_view_download_job_finished):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/tests/resources/test.pdf: Added.
        * UIProcess/API/efl/tests/test_ewk2_download_job.cpp: Added. This tests
        the download functionality.
        (DownloadTestData):
        (fileExists):
        (serverCallback):
        (on_download_requested):
        (on_download_cancelled):
        (on_download_failed):
        (on_download_finished):
        (TEST_F):
        * UIProcess/PageClient.h:
        (PageClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit):
        (WebKit::WebPageProxy::handleDownloadRequest):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):

2012-07-27  YoungTaeck Song  <youngtaeck.song@samsung.com>

        [WK2][EFL] Add an ACCELERATED_COMPOSITING implementation for Efl WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=91581

        Reviewed by Noam Rosenthal.

        This patch is a subset of Efl's UI_SIDE_COMPOSITING implementation.
        When enter accelerated compositing mode, create evas_gl, evas_gl_context, and evas_gl_surface.

        * PlatformEfl.cmake:
        * Shared/LayerTreeContext.h:
        (LayerTreeContext):
        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::viewSize):
        (WebKit::PageClientImpl::enterAcceleratedCompositingMode):
        (WebKit::PageClientImpl::exitAcceleratedCompositingMode):
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::_Ewk_View_Private_Data):
        (ewk_view_size_get):
        (ewk_view_create_gl_surface):
        (ewk_view_enter_accelerated_compositing_mode):
        (ewk_view_exit_accelerated_compositing_mode):
        (_ewk_view_smart_calculate):
        * UIProcess/API/efl/ewk_view_private.h:

2012-07-27  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add API to Ewk_Cookie_Manager to watch for cookie changes
        https://bugs.webkit.org/show_bug.cgi?id=92484

        Reviewed by Kenneth Rohde Christiansen.

        Add API tp Ewk_Cookie_Manager so that the client can watch
        for cookie changes.

        * UIProcess/API/efl/ewk_cookie_manager.cpp:
        * UIProcess/API/efl/ewk_cookie_manager.h:
        * UIProcess/API/efl/tests/test_ewk2_cookie_manager.cpp: Add unit tests
        for cookie changes watching.

2012-07-27  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Stop using C API to interact with the page in Ewk_View
        https://bugs.webkit.org/show_bug.cgi?id=92463

        Reviewed by Simon Hausmann.

        Stop using C API to interact with the PageProxy in Ewk_View
        and use the PageProxy object directly. This avoids useless
        converting to WK type using toAPI() all the time.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_base_add):
        (ewk_view_uri_update):
        (ewk_view_uri_set):
        (ewk_view_reload):
        (ewk_view_reload_bypass_cache):
        (ewk_view_stop):
        (ewk_view_load_progress_get):
        (ewk_view_device_pixel_ratio_set):
        (ewk_view_theme_get):
        (ewk_view_cursor_set):
        (ewk_view_back):
        (ewk_view_forward):
        (ewk_view_intent_deliver):
        (ewk_view_back_possible):
        (ewk_view_forward_possible):
        (ewk_view_setting_encoding_custom_get):
        (ewk_view_setting_encoding_custom_set):

2012-07-27  Dominik Röttsches  <dominik.rottsches@intel.com>

        [Cairo] Add complex font drawing using HarfbuzzNG
        https://bugs.webkit.org/show_bug.cgi?id=91864

        Reviewed by Simon Hausmann and Martin Robinson.

        Adding includes for harfbuzz folders.

        * CMakeLists.txt:

2012-07-27  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add more Ewk_View unit tests
        https://bugs.webkit.org/show_bug.cgi?id=92407

        Reviewed by Kenneth Rohde Christiansen.

        Add more unit tests for WebKit2 Ewk_View API.
        In particular, navigation, HTML loading and
        device pixel ratio functions are now tested.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::SetUp): Call ewk_init() instead
        of duplicating initialization code.
        (EWK2UnitTest::EWK2UnitTestBase::TearDown): call ewk_shutdown().
        (TitleChangedData):
        (EWK2UnitTest):
        (EWK2UnitTest::onTitleChanged):
        (EWK2UnitTest::EWK2UnitTestBase::waitUntilTitleChangedTo): Add convenience
        method to wait until the view main frame title changes to a given value.
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        (EWK2UnitTestBase):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):
        (serverCallbackNavigation):

2012-07-27  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Keyboard events miss key location data.
        https://bugs.webkit.org/show_bug.cgi?id=92235

        Reviewed by Simon Hausmann.

        EFL WK2 did not initialize WebKeyboardEvent::m_isKeypad field.
        This caused failure of fast/events/keydown-numpad-keys.html test.

        * Shared/efl/WebEventFactory.cpp: WebKeyboardEvent::m_isKeypad is initialized.
        (WebKit::WebEventFactory::createWebKeyboardEvent):

2012-07-27  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Fix wrong return value in EWK_VIEW_XXX macro.
        https://bugs.webkit.org/show_bug.cgi?id=92466

        Reviewed by Simon Hausmann.

        There are wrong return values in EWK_VIEW_XXX macros. The wrong return values
        should be fixed. In addition, API description is also modified according to returned
        value change.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_uri_set):
        (ewk_view_load_progress_get):
        (ewk_view_device_pixel_ratio_get):
        * UIProcess/API/efl/ewk_view.h:

2012-07-27  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add unit tests for Ewk_View form client
        https://bugs.webkit.org/show_bug.cgi?id=92468

        Reviewed by Simon Hausmann.

        Add unit test for form client functionality in
        Ewk_View.

        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (onFormAboutToBeSubmitted):
        (TEST_F):

2012-07-26  Zeno Albisser  <zeno@webkit.org>

        Unreviewed Qt buildfix after r123786.

        Qt-minimal builds with ENABLE_REQUEST_ANIMATION_FRAME=0.
        Therefore adding #ifdefs to allow for that configuration.

        * WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.cpp:
        (WebKit):
        * WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-07-26  Zeno Albisser  <zeno@webkit.org>

        [Qt] requestAnimationFrame should only trigger when a new frame can be displayed.
        https://bugs.webkit.org/show_bug.cgi?id=88638

        Disable REQUEST_ANIMATION_FRAME_TIMER for the Qt port and tie
        the servicing of scripted animations to layer syncing for WK2.
        For WK1 we rely on the RefreshAnimation that is based on QAbstractAnimation.

        Reviewed by Jocelyn Turcotte.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit):
        (WebKit::WebChromeClient::scheduleAnimation):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):
        * WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::performScheduledLayerFlush):
        (WebKit::LayerTreeCoordinator::scheduleAnimation):
        (WebKit):
        * WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):
        * WebProcess/WebPage/LayerTreeHost.h:
        (LayerTreeHost):

2012-07-26  Jer Noble  <jer.noble@apple.com>

        Add a ChromeClient method to send diagnostic logging messages from WebCore to the client.
        https://bugs.webkit.org/show_bug.cgi?id=92340

        Reviewed by Anders Carlsson.

        Pipe the ChromeClient logDiagnosticMessage() function through WebKit2 to a new bundle class
        InjectedBundlePageDiagnosticLoggingClient, to be implemented by the client.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetDiagnosticLoggingClient): Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageDiagnosticLoggingClient.cpp: Added.
        (WebKit::InjectedBundlePageDiagnosticLoggingClient::logDiagnosticMessage):
        * WebProcess/InjectedBundle/InjectedBundlePageDiagnosticLoggingClient.h: Added.
        (InjectedBundlePageDiagnosticLoggingClient):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::logDiagnosticMessage):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::initializeInjectedBundleDiagnosticLoggingClient):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::injectedBundleDiagnosticLoggingClient):

        Add a convenience class to retrieve the diagnostic message keys:
        * WebProcess/InjectedBundle/InjectedBundlePageDiagnosticLoggingClient.cpp: Added.
        (WebKit::InjectedBundlePageDiagnosticLoggingClient::logDiagnosticMessage):
        * WebProcess/InjectedBundle/InjectedBundlePageDiagnosticLoggingClient.h: Added.
        (InjectedBundlePageDiagnosticLoggingClient):

        Add the InjectedBundlePageDiagnosticLoggingClient.cpp,h files.
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * win/WebKit2.vcproj:
        * WebKit2.xcodeproj/project.pbxproj: 

2012-07-25  Jer Noble  <jer.noble@apple.com>

        Add setting to enable and disable diagnostic logging.
        https://bugs.webkit.org/show_bug.cgi?id=92337

        Reviewed by Anders Carlsson.

        Add a WebKit2 WKPreferences API to set set the WebCore diagnosticLoggingEnabled setting.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetDiagnosticLoggingEnabled):
        (WKPreferencesGetDiagnosticLoggingEnabled):
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Ensure this preference is propagated to Settings
            whenever the preferences change.

2012-07-26  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL][WK2] Regression(r123731): Linking errors due to efreet functions
        https://bugs.webkit.org/show_bug.cgi?id=92378

        Unreviewed build fix.

        The library list created by PlatformEfl.cmake was being erased by a
        SET called after including the platform specific file. Luckily the
        dependencies were fulfilled by other targets until efreet was add.

        * CMakeLists.txt:

2012-07-26  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Compilation warning in EWK2UnitTestServer.cpp
        https://bugs.webkit.org/show_bug.cgi?id=92387

        Reviewed by Kenneth Rohde Christiansen.

        Fix compilation warning in EWK2UnitTestServer.cpp.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestServer.cpp:
        (EWK2UnitTestServer::EWK2UnitTestServer):

2012-07-26  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Implement Network Information provider
        https://bugs.webkit.org/show_bug.cgi?id=92343

        Reviewed by Kenneth Rohde Christiansen.

        Add Network Information provider for WebKit2 EFL
        by using NetworkInfoProviderEfl class from
        WebCore.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * UIProcess/API/efl/NetworkInfoProvider.cpp: Added.
        (toNetworkInfoProvider):
        (startUpdatingCallback):
        (stopUpdatingCallback):
        (getBandwidthCallback):
        (isMeteredCallback):
        (NetworkInfoProvider::create):
        (NetworkInfoProvider::NetworkInfoProvider):
        (NetworkInfoProvider::~NetworkInfoProvider):
        (NetworkInfoProvider::bandwidth):
        (NetworkInfoProvider::metered):
        (NetworkInfoProvider::startUpdating):
        (NetworkInfoProvider::stopUpdating):
        * UIProcess/API/efl/NetworkInfoProvider.h: Added.
        (NetworkInfoProvider):

2012-07-26  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Compilation warning in EWK2UnitTestServer.cpp
        https://bugs.webkit.org/show_bug.cgi?id=92387

        Reviewed by Kenneth Rohde Christiansen.

        Fix compilation warning in EWK2UnitTestServer.cpp.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestServer.cpp:
        (EWK2UnitTestServer::EWK2UnitTestServer):

2012-07-26  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL][WK2] Regression(r123731): Linking errors due to efreet functions
        https://bugs.webkit.org/show_bug.cgi?id=92378

        Unreviewed build fix.

        The library list created by PlatformEfl.cmake was being erased by a
        SET called after including the platform specific file. Luckily the
        dependencies were fulfilled by other targets until efreet was add.

        * CMakeLists.txt:

2012-07-26  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Compilation warning in EWK2UnitTestServer.cpp
        https://bugs.webkit.org/show_bug.cgi?id=92387

        Reviewed by Kenneth Rohde Christiansen.

        Fix compilation warning in EWK2UnitTestServer.cpp.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestServer.cpp:
        (EWK2UnitTestServer::EWK2UnitTestServer):

2012-07-26  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Implement Network Information provider
        https://bugs.webkit.org/show_bug.cgi?id=92343

        Reviewed by Kenneth Rohde Christiansen.

        Add Network Information provider for WebKit2 EFL
        by using NetworkInfoProviderEfl class from
        WebCore.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * UIProcess/API/efl/NetworkInfoProvider.cpp: Added.
        (toNetworkInfoProvider):
        (startUpdatingCallback):
        (stopUpdatingCallback):
        (getBandwidthCallback):
        (isMeteredCallback):
        (NetworkInfoProvider::create):
        (NetworkInfoProvider::NetworkInfoProvider):
        (NetworkInfoProvider::~NetworkInfoProvider):
        (NetworkInfoProvider::bandwidth):
        (NetworkInfoProvider::metered):
        (NetworkInfoProvider::startUpdating):
        (NetworkInfoProvider::stopUpdating):
        * UIProcess/API/efl/NetworkInfoProvider.h: Added.
        (NetworkInfoProvider):

2012-07-26  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Compilation warning in EWK2UnitTestServer.cpp
        https://bugs.webkit.org/show_bug.cgi?id=92387

        Reviewed by Kenneth Rohde Christiansen.

        Fix compilation warning in EWK2UnitTestServer.cpp.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestServer.cpp:
        (EWK2UnitTestServer::EWK2UnitTestServer):

2012-07-26  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add unit tests for Ewk_Context
        https://bugs.webkit.org/show_bug.cgi?id=92005

        Reviewed by Antonio Gomes.

        Add unit tests for WebKit2 Ewk_Context.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_url_scheme_request.cpp:
        (ewk_url_scheme_request_finish):
        * UIProcess/API/efl/ewk_url_scheme_request.h: Mark content_data
        argument as const.
        * UIProcess/API/efl/tests/test_ewk2_context.cpp: Added.
        (TEST_F):
        (schemeRequestCallback):

2012-07-26  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add form client for Ewk_View
        https://bugs.webkit.org/show_bug.cgi?id=92358

        Reviewed by Kenneth Rohde Christiansen.

        Implement a form client for EFL port in order to
        send a "form,request,new" signal on the Ewk_View
        whenever a form will be submitted.

        The Ewk_Form_Submission_Request type is
        introduced to provide the client with information
        about the form (e.g. text fields contained in the
        form) and to submit it.

        This is typically used to store login information
        that can be used later to pre-fill the form.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_form_submission_request.cpp: Added.
        (_Ewk_Form_Submission_Request):
        (_Ewk_Form_Submission_Request::_Ewk_Form_Submission_Request):
        (_Ewk_Form_Submission_Request::~_Ewk_Form_Submission_Request):
        (ewk_form_submission_request_ref):
        (ewk_form_submission_request_unref):
        (ewk_form_submission_request_field_names_get):
        (ewk_form_submission_request_field_value_get):
        (ewk_form_submission_request_submit):
        (ewk_form_submission_request_new):
        * UIProcess/API/efl/ewk_form_submission_request.h: Added.
        * UIProcess/API/efl/ewk_form_submission_request_private.h: Added.
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_base_add):
        (ewk_view_form_submission_request_new):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_form_client.cpp: Added.
        (willSubmitForm):
        (ewk_view_form_client_attach):
        * UIProcess/API/efl/ewk_view_form_client_private.h: Added.
        * UIProcess/API/efl/ewk_view_private.h:

2012-07-26  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] WebPage::handleEditingKeyboardEvent does not check whether the node allows editing.
        https://bugs.webkit.org/show_bug.cgi?id=92364

        Reviewed by Kenneth Rohde Christiansen.

        Added a check whether the input node allows editing. If editing is not allowed
        text input event will not be emitted.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::handleEditingKeyboardEvent):

2012-07-26  Zoltan Nyul  <zoltan.nyul@intel.com>

        [EFL] EFL port should use XDG paths
        https://bugs.webkit.org/show_bug.cgi?id=91719

        Reviewed by Kenneth Rohde Christiansen.

        Setting xdg paths for application cache, web-database and local-storage.

        * PlatformEfl.cmake:
        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::applicationCacheDirectory):
        (WebKit::WebContext::platformDefaultDatabaseDirectory):
        (WebKit::WebContext::platformDefaultLocalStorageDirectory):

2012-07-26  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] [WK2] Memory leak in ewk_view_resource_load_client.cpp
        https://bugs.webkit.org/show_bug.cgi?id=92099

        Reviewed by Kentaro Hara.

        Fix a memory leak by clearing the loadingResources HashMap on exit.

        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data::~_Ewk_View_Private_Data):
        (_ewk_view_priv_loading_resources_clear):
        (ewk_view_load_provisional_started):

2012-07-26  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [DRT] LTC:: pageNumberForElementById() could be moved to Internals
        https://bugs.webkit.org/show_bug.cgi?id=92091

        Reviewed by Kentaro Hara.

        Missing a symbol filter for Mac win port.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-07-25  Seokju Kwon  <seokju.kwon@samsung.com>

        [EFL][WK2] Implement the inspector for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=92213

        Reviewed by Ryosuke Niwa.

        Partial Implementation of WebInspectorProxyEfl for WebkitTestRunner.
        And Web Inspector resources installation.

        * PlatformEfl.cmake:
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::WebInspectorProxy):
        * UIProcess/WebInspectorProxy.h:
        (WebInspectorProxy):
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        (WebKit::WebInspectorProxy::platformDidClose):
        (WebKit::WebInspectorProxy::inspectorPageURL):
        (WebKit::WebInspectorProxy::inspectorBaseURL):

2012-07-25  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Create a specialized struct for use in HashMap iterators
        https://bugs.webkit.org/show_bug.cgi?id=92137

        Reviewed by Ryosuke Niwa.

        * Platform/CoreIPC/ArgumentCoders.h: Add encode/decode for KeyValuePair.

2012-07-25  Anders Carlsson  <andersca@apple.com>

        Crash when calling PluginView::pluginFocusOrWindowFocusChanged when the web page is null
        https://bugs.webkit.org/show_bug.cgi?id=92289
        <rdar://problem/11785352>

        Reviewed by Andreas Kling.

        Plug-in views that outlive their containing web page for various reasons (such as being protected from
        destruction) need to null check the web page.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::pluginFocusOrWindowFocusChanged):
        (WebKit::PluginView::setComplexTextInputState):

2012-07-25  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WTR] LayoutTestController.sendWebIntentResponse() needs to be implemented
        https://bugs.webkit.org/show_bug.cgi?id=92227

        Reviewed by Kenneth Rohde Christiansen.

        Add new InjectedBundleIntentRequest class to wrap WebCore's
        IntentRequest and use it in InjectedBundle's
        didReceiveIntentForFrame callback. The WebKitTestRunner needs
        to be able to reply to a Web intent request in order to
        implement LayoutTestController.sendWebIntentResponse(). As
        a consequence, passing a WebIntentData type in not enough.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        * Shared/IntentData.cpp:
        (WebKit::IntentData::IntentData):
        (WebKit):
        * Shared/IntentData.h:
        (WebCore):
        (WebKit::IntentData::IntentData):
        (IntentData):
        * Target.pri:
        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        (WebKit):
        * WebProcess/InjectedBundle/API/c/WKBundleIntentRequest.cpp: Copied from Source/WebKit2/Shared/IntentData.cpp.
        (WKBundleIntentRequestGetTypeID):
        (WKBundleIntentRequestCopyIntent):
        (WKBundleIntentRequestPostResult):
        (WKBundleIntentRequestPostFailure):
        * WebProcess/InjectedBundle/API/c/WKBundleIntentRequest.h: Copied from Source/WebKit2/Shared/IntentData.h.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundleIntentRequest.cpp: Copied from Source/WebKit2/Shared/IntentData.cpp.
        (WebKit):
        (WebKit::InjectedBundleIntentRequest::create):
        (WebKit::InjectedBundleIntentRequest::InjectedBundleIntentRequest):
        (WebKit::InjectedBundleIntentRequest::postResult):
        (WebKit::InjectedBundleIntentRequest::postFailure):
        (WebKit::InjectedBundleIntentRequest::intent):
        * WebProcess/InjectedBundle/InjectedBundleIntentRequest.h: Copied from Source/WebKit2/Shared/IntentData.h.
        (WebCore):
        (WebKit):
        (InjectedBundleIntentRequest):
        (WebKit::InjectedBundleIntentRequest::type):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::didReceiveIntentForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        (WebKit):
        (InjectedBundlePageLoaderClient):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchIntent):

2012-07-25  Anders Carlsson  <andersca@apple.com>

        Crash when a web page is closed with outstanding scrolling thread barriers
        https://bugs.webkit.org/show_bug.cgi?id=92280
        <rdar://problem/11630200>

        Reviewed by Andreas Kling.

        There was a check in forceRepaintAsync to handle the drawing area going away before the block had
        been invoked,  but this check needs to be done earlier (as the FIXME suggested).
        Move this check to dispatchAfterEnsuringUpdatedScrollPosition instead.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::forceRepaintAsync):
        (WebKit::TiledCoreAnimationDrawingArea::dispatchAfterEnsuringUpdatedScrollPosition):

2012-07-25  Alexey Proskuryakov  <ap@apple.com>

        Chinese IM receives incorrect/duplicated key events in text fields in webpages in Safari.
        https://bugs.webkit.org/show_bug.cgi?id=89048
        <rdar://problem/11786384>

        Reviewed by Andreas Kling.

        Cannot test text input from UI process side.

        Stop relying on IPC to handle key events in order. There are too many complications
        where out of order delivery is performed. Instead, queue the events at UI process
        side.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleKeyboardEvent):
        (WebKit::WebPageProxy::didReceiveEvent):

2012-07-25  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Use eina_stringshare_add instead of strdup.
        https://bugs.webkit.org/show_bug.cgi?id=92072

        Reviewed by Kentaro Hara.

        Eina of EFL libraries supports a string functionality that replaces strdup. So, EFL port needs
        to replace strdup with eina_stringshare_add function.

        * UIProcess/API/efl/ewk_intent.cpp:
        (ewk_intent_suggestions_get):
        (ewk_intent_extra_get):
        * UIProcess/API/efl/ewk_intent.h:

2012-07-25  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Add ewk_view_cursor_set to change cursor.
        https://bugs.webkit.org/show_bug.cgi?id=89140

        Reviewed by Hajime Morita.

        Implement ewk_view_cursor_set to support cursor changes.

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::setCursor): Called ewk_view_cursor_set.
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::~_Ewk_View_Private_Data):
        (_ewk_view_priv_new): Check whether ecore_x can be used.
        (_ewk_view_smart_add):
        Change order of initialization to use base structure in _ewk_view_priv_new.
        (ewk_view_cursor_set): Added to set cursor.
        * UIProcess/API/efl/ewk_view_private.h:

2012-07-25  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Update uri when the active URI is changed while loading.
        https://bugs.webkit.org/show_bug.cgi?id=92001

        Reviewed by Hajime Morita.

        For now, ewk_view_uri_get just return the last uri of setter.
        This patch updates the uri of ewk_view when it is changed while loading.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_uri_update):
        Added to check whether current active URI has changed and send uri,changed
        signal if it has changed.
        (ewk_view_uri_set):
        Called ewk_view_uri_update to make sure the active uri is updated when the
        load operation is started.
        (ewk_view_reload): Ditto.
        (ewk_view_reload_bypass_cache): Ditto.
        (ewk_view_load_finished): Ditto.
        (ewk_view_load_provisional_redirect): Ditto.
        (ewk_view_load_provisional_started): Ditto.
        (ewk_view_html_string_load): Ditto.
        * UIProcess/API/efl/ewk_view.h: Updated comment for uri,changed signal.
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.cpp: 
        (EWK2UnitTest::EWK2UnitTestEnvironment::urlForResource):
        Added to get url of custom resource for test.
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.h:
        * UIProcess/API/efl/tests/resources/redirect_uri_to_default.html:
        Added to test ewk_view_uri_get when the page is redirected.
        * UIProcess/API/efl/tests/test_ewk2_view.cpp: Ditto.
        (onLoadFinishedForRedirection):
        (TEST_F): Added new test case whether ewk_view_uri_get returns correct uri when
        the page is redirected.

2012-07-25  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Add ewk_main.{cpp,h} to EFL WK2
        https://bugs.webkit.org/show_bug.cgi?id=92101

        Reviewed by Kenneth Rohde Christiansen.

        Added a centralized place for general initialization in UI process for EFL WK2.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_main.cpp: Added.
        (ewk_init): General initialization.
        (ewk_shutdown): General freeing. 
        (_ewk_init_body): An aux function.
        * UIProcess/API/efl/ewk_main.h: Added.

2012-07-24  Jae Hyun Park  <jae.park@company100.net>

        WKContextGetGlobalStatistics() assigns wrong value to wkFrameCount in WKContextStatistics
        https://bugs.webkit.org/show_bug.cgi?id=92173

        Reviewed by John Sullivan.

        In WKContextGetGlobalStatistics(), wkViewCount in WebContext::Statistics
        is assigned to wkFrameCount in WKContextStatistics.
        wkFrameCount in WebContext:Statistics should be assigned to wkFrameCount in WKContextStatistics.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetGlobalStatistics):

2012-07-24  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL][WK2] Add unit tests for custom text encoding setting
        https://bugs.webkit.org/show_bug.cgi?id=91983

        Reviewed by Dirk Pranke.

        Add unit tests for get and set custom text encoding methods. Also, fix
        a style nit for r123177.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_setting_encoding_custom_set): Fix a style nit - add newline
        before return.
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2012-07-24  Ryosuke Niwa  <rniwa@webkit.org>

        WinCairo build fix attempt.

        * win/WebKit2CFLite.def:

2012-07-24  Ryosuke Niwa  <rniwa@webkit.org>

        Windows build fix attempt.

        * win/WebKit2.def:

2012-07-24  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Make sure that an AC sync is triggered when the canvas contents is updated.
        https://bugs.webkit.org/show_bug.cgi?id=92128

        Reviewed by Kenneth Rohde Christiansen.

        This would cause missed frames when animating an accelerated 2D canvas without
        touching the document.

        * WebProcess/WebPage/LayerTreeCoordinator/WebGraphicsLayer.cpp:
        (WebCore::WebGraphicsLayer::setContentsNeedsDisplay):

2012-07-24  Alexey Proskuryakov  <ap@apple.com>

        [Mac WK2] Improve text input logging
        https://bugs.webkit.org/show_bug.cgi?id=92147

        Reviewed by Andreas Kling.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView insertText:replacementRange:]):
        (-[WKView keyUp:]):
        (-[WKView keyDown:]):
        (-[WKView flagsChanged:]):
        (-[WKView _executeSavedKeypressCommands]):
        (-[WKView _notifyInputContextAboutDiscardedComposition]):
        (-[WKView _interpretKeyEvent:savingCommandsTo:WebCore::]):
        (-[WKView _updateSecureInputState]):

2012-07-24  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Provide more useful output when an injected bundle cannot be loaded
        https://bugs.webkit.org/show_bug.cgi?id=92136

        Reviewed by Kenneth Rohde Christiansen.

        Call eina_error_get() in case an injected bundle cannot be
        loaded in order to print more information about the error.

        * WebProcess/InjectedBundle/efl/InjectedBundleEfl.cpp:
        (WebKit::InjectedBundle::load):

2012-07-24  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL][WK2] Add vibration client
        https://bugs.webkit.org/show_bug.cgi?id=91371

        Reviewed by Antonio Gomes.

        Implement Vibration provider for WebKit2 EFL and add an API to set
        vibration client callbacks by application to handle the tactile
        feedback in the application when the page content ask for vibration.

        * CMakeLists.txt: Add WebCore/Modules/vibration to include path.
        * PlatformEfl.cmake: Add VibrationProvider.cpp file to the build
        system.
        * UIProcess/API/efl/VibrationProvider.cpp: Added.
        (_Ewk_Vibration_Client): Structure contains the vibration client
        callbacks.
        (_Ewk_Vibration_Client::_Ewk_Vibration_Client):
        (toVibrationProvider): Helper function to cast the clientinfo to
        VibrationProvider.
        (vibrateCallback):
        (cancelVibrationCallback):
        (VibrationProvider::create):
        (VibrationProvider::VibrationProvider):
        (VibrationProvider::~VibrationProvider):
        (VibrationProvider::vibrate):
        (VibrationProvider::cancelVibration):
        (VibrationProvider::setVibrationClientCallbacks):
        * UIProcess/API/efl/VibrationProvider.h: Added.
        (VibrationProvider):
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context):
        (createDefaultEwkContext):
        (ewk_context_vibration_client_callbacks_set): API to set vibration
        client callbacks.
        * UIProcess/API/efl/ewk_context.h:

2012-07-24  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix compilation after QtQuick API changes
        https://bugs.webkit.org/show_bug.cgi?id=91822

        Reviewed by Kenneth Rohde Christiansen.

        QQuickCanvas is now QQuickWindow, QQuickItem::canvas() is window() and rootItem()
        is contentItem(). Also QQuickWindow::grabFrameBuffer() is now grabWindow().

        * UIProcess/API/qt/qquickwebpage.cpp:
        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::updateIcon):
        * UIProcess/API/qt/tests/qquickwebview/tst_qquickwebview.cpp:
        (tst_QQuickWebView::multipleWebViews):
        (tst_QQuickWebView::basicRenderingSanity):
        (tst_QQuickWebView::transparentWebViews):
        * UIProcess/API/qt/tests/testwindow.h:
        (TestWindow::TestWindow):
        * UIProcess/qt/QtPageClient.cpp:
        (WebKit::QtPageClient::isViewVisible):
        * UIProcess/qt/QtWebPageEventHandler.cpp:
        (WebKit::QtWebPageEventHandler::startDrag):

2012-07-24  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Add quirks for running the web process in a profiler shell, like valgrind
        https://bugs.webkit.org/show_bug.cgi?id=87672

        Reviewed by Jocelyn Turcotte.

        If environment variables QT_WEBKIT_WEB_PROCESS_COMMAND_PREFIX
        and/or QT_WEBKIT_PLUGIN_PROCESS_COMMAND_PREFIX are set, use their
        values as the prefix of the command when launching the child process.
        Example usage:
            export QT_WEB_PROCESS_COMMAND_PREFIX="valgrind --smc-check=all"
            ./MiniBrowser http://somepage.html
            ./WebKitTestRunner --no-timeout-at-all some_layouttest.html

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::ProcessLauncher::launchProcess):

2012-07-23  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        [Qt] Fix compilation against namespaced Qt

        Reviewed by Simon Hausmann.

        * Platform/CoreIPC/Connection.h:
        * Platform/PlatformProcessIdentifier.h:
        * Platform/WorkQueue.h:
        * Shared/qt/QtNetworkRequestData.h:
        * Shared/qt/WebEventFactoryQt.h:
        * UIProcess/API/C/qt/WKNativeEvent.h:
        * UIProcess/API/qt/qquickwebview_p.h:
        * UIProcess/API/qt/qwebnavigationhistory_p.h:
        * UIProcess/API/qt/raw/qrawwebview_p.h:
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/Launcher/ThreadLauncher.h:
        * UIProcess/LayerTreeCoordinatorProxy.h:
        * UIProcess/qt/QtViewportHandler.h:
        * UIProcess/qt/QtWebPageSGNode.h:
        * UIProcess/qt/WebColorChooserProxyQt.h:
        * UIProcess/qt/WebGeolocationProviderQt.h:
        * UIProcess/qt/WebPopupMenuProxyQt.h:
        * WebProcess/WebProcess.h:

2012-07-24  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Remove unneeded WebURLRequestEfl and WebURLResponseEfl
        https://bugs.webkit.org/show_bug.cgi?id=92087

        Reviewed by Kenneth Rohde Christiansen.

        Remove WebURLRequestEfl and WebURLResponseEfl classes
        and their corresponding C APIs since we don't need / use
        them.

        * Shared/API/c/efl/WKURLRequestEfl.cpp: Removed.
        * Shared/API/c/efl/WKURLRequestEfl.h: Removed.
        * Shared/API/c/efl/WKURLResponseEfl.cpp: Removed.
        * Shared/API/c/efl/WKURLResponseEfl.h: Removed.
        * Shared/efl/WebURLRequestEfl.cpp: Removed.
        * Shared/efl/WebURLRequestEfl.h: Removed.
        * Shared/efl/WebURLResponseEfl.cpp: Removed.
        * Shared/efl/WebURLResponseEfl.h: Removed.
        * UIProcess/API/efl/ewk_url_request.cpp:

2012-07-24  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Enable touch slider when touch events are enabled
        https://bugs.webkit.org/show_bug.cgi?id=91013

        Reviewed by Kenneth Rohde Christiansen.

        TOUCH_SLIDER guards are used in WebCore, so we should really
        be setting the corresponding ENABLE define in features.prf.

        * Target.pri:

2012-07-24  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Fix possible crash in didSendRequestForResource
        https://bugs.webkit.org/show_bug.cgi?id=92077

        Reviewed by Kenneth Rohde Christiansen.

        Add NULL check for wkRedirectResponse in
        didSendRequestForResource() before using it. The
        argument may be NULL if there was no redirection.

        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_resource_load_client.cpp:
        (didSendRequestForResource):

2012-07-24  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][EFL][GTK] Share WebCoreArgumentCoders for soup-related types
        https://bugs.webkit.org/show_bug.cgi?id=92073

        Reviewed by Kenneth Rohde Christiansen.

        Move WebCoreArgumentCoders for soup-related types such as
        ResourceRequest, ResourceResponse and ResourceError from
        port specific file to Shared/soup/WebCoreArgumentCodersSoup.cpp.
        This way, the different ports using libsoup can share
        code and avoid duplication.

        * GNUmakefile.list.am:
        * PlatformEfl.cmake:
        * Shared/efl/WebCoreArgumentCodersEfl.cpp: Removed.
        * Shared/soup/WebCoreArgumentCodersSoup.cpp: Renamed from Source/WebKit2/Shared/gtk/WebCoreArgumentCodersGtk.cpp.
        (CoreIPC):
        (CoreIPC::::encode):
        (CoreIPC::::decode):

2012-07-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r123184, r123195, and r123197.
        http://trac.webkit.org/changeset/123184
        http://trac.webkit.org/changeset/123195
        http://trac.webkit.org/changeset/123197
        https://bugs.webkit.org/show_bug.cgi?id=92049

        pagecycler regression (Requested by morrita on #webkit).

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-07-23  Simon Fraser  <simon.fraser@apple.com>

        Part 2 of: Implement sticky positioning
        https://bugs.webkit.org/show_bug.cgi?id=90046

        Reviewed by Ojan Vafai.

        Turn on ENABLE_CSS_STICKY_POSITION.

        * Configurations/FeatureDefines.xcconfig:

2012-07-23  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] WebKitTestRunner needs to print information about Web intents
        https://bugs.webkit.org/show_bug.cgi?id=90873

        Reviewed by Anders Carlsson.

        Add Bundle API for Web Intents. This is needed by the WebKitTestRunner
        to print information about the new intent requests and the intent
        service registrations.

        * CMakeLists.txt: Move WebIntentData and WebIntentServiceInfo from
        UIProcess/ to Shared/.
        * GNUmakefile.list.am: Move WebIntentData and WebIntentServiceInfo from
        UIProcess/ to Shared/.
        * Shared/APIClientTraits.h:
        * Shared/WebIntentData.cpp: Renamed from Source/WebKit2/UIProcess/WebIntentData.cpp.
        (WebKit):
        (WebKit::WebIntentData::WebIntentData):
        (WebKit::WebIntentData::data):
        (WebKit::WebIntentData::suggestions):
        (WebKit::WebIntentData::extra):
        (WebKit::WebIntentData::extras):
        * Shared/WebIntentData.h: Renamed from Source/WebKit2/UIProcess/WebIntentData.h.
        (WebKit):
        (WebIntentData):
        (WebKit::WebIntentData::create):
        (WebKit::WebIntentData::~WebIntentData):
        (WebKit::WebIntentData::action):
        (WebKit::WebIntentData::payloadType):
        (WebKit::WebIntentData::service):
        (WebKit::WebIntentData::store):
        (WebKit::WebIntentData::type):
        * Shared/WebIntentServiceInfo.cpp: Renamed from Source/WebKit2/UIProcess/WebIntentServiceInfo.cpp.
        (WebKit):
        (WebKit::WebIntentServiceInfo::WebIntentServiceInfo):
        * Shared/WebIntentServiceInfo.h: Renamed from Source/WebKit2/UIProcess/WebIntentServiceInfo.h.
        (WebKit):
        (WebIntentServiceInfo):
        (WebKit::WebIntentServiceInfo::create):
        (WebKit::WebIntentServiceInfo::~WebIntentServiceInfo):
        (WebKit::WebIntentServiceInfo::action):
        (WebKit::WebIntentServiceInfo::payloadType):
        (WebKit::WebIntentServiceInfo::href):
        (WebKit::WebIntentServiceInfo::title):
        (WebKit::WebIntentServiceInfo::disposition):
        (WebKit::WebIntentServiceInfo::type):
        * Target.pri: Move WebIntentData and WebIntentServiceInfo from
        UIProcess/ to Shared/.
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        (didReceiveIntentForFrame):
        (registerIntentServiceForFrame):
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::didReceiveIntentForFrame):
        (WebKit::WebLoaderClient::registerIntentServiceForFrame):
        * UIProcess/WebLoaderClient.h:
        (WebLoaderClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::registerIntentServiceForFrame):
        (WebKit::WebPageProxy::didReceiveIntentForFrame):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit):
        (WebKit::InjectedBundlePageLoaderClient::didReceiveIntentForFrame):
        (WebKit::InjectedBundlePageLoaderClient::registerIntentServiceForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        (WebKit):
        (InjectedBundlePageLoaderClient):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchIntent):
        (WebKit::WebFrameLoaderClient::registerIntentService):
        * WebProcess/qt/QtBuiltinBundlePage.cpp:
        (WebKit::QtBuiltinBundlePage::QtBuiltinBundlePage):

2012-07-23  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add unit tests for Ewk_Cookie_Manager
        https://bugs.webkit.org/show_bug.cgi?id=91639

        Reviewed by Antonio Gomes.

        Add unit tests for Ewk_Cookie_Manager.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_cookie_manager.h: Fix "accept policy" documentation
        to indicate that only cookies set by the main document are accepted by default.
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestServer.cpp: Added.
        (EWK2UnitTestServer::EWK2UnitTestServer): Add HTTP server similar to the one
        used by GTK port unit tests.
        (EWK2UnitTestServer::~EWK2UnitTestServer):
        (EWK2UnitTestServer::run):
        (EWK2UnitTestServer::getURIForPath):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestServer.h: Added.
        (EWK2UnitTestServer):
        (EWK2UnitTestServer::baseURI):
        * UIProcess/API/efl/tests/test_ewk2_cookie_manager.cpp: Added.
        (serverCallback):
        (getAcceptPolicyCallback):
        (getAcceptPolicy):
        (getHostnamesWithCookiesCallback):
        (getHostnamesWithCookies):
        (freeHostNames):
        (countHostnamesWithCookies):
        (TEST_F):
        (cleanUpCookieFiles):

2012-07-23  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Enable touch slider when touch events are enabled
        https://bugs.webkit.org/show_bug.cgi?id=91013

        Reviewed by Antonio Gomes.

        Take advantage of the logic introduced in r122286.

        * Target.pri:

2012-07-23  Pierre Rossi  <pierre.rossi@gmail.com>

        Unify numTouchEventHandlersChanged and needTouchEvents in the chrome client
        https://bugs.webkit.org/show_bug.cgi?id=91006

        Reviewed by Ryosuke Niwa.

        Remove numTouchEventHandlersChanged stub.

        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):

2012-07-23  Simon Fraser  <simon.fraser@apple.com>

        Part 1 of: Implement sticky positioning
        https://bugs.webkit.org/show_bug.cgi?id=90046

        Reviewed by Ojan Vafai.

        Add ENABLE_CSS_STICKY_POSITION, defaulting to off initially.
        
        Sort the ENABLE_CSS lines in the file. Make sure all the flags
        are in FEATURE_DEFINES.

        * Configurations/FeatureDefines.xcconfig:

2012-07-23  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add request manager client
        https://bugs.webkit.org/show_bug.cgi?id=91193

        Reviewed by Kenneth Rohde Christiansen.

        Add a URL request manager client and attach it
        to the Ewk_Context.

        The client application can now register a URL scheme
        via the Ewk_Context API and provide a callback handler
        that will get called whenever a URL request with this
        scheme is made.

        A new Ewk_Url_Scheme_Request type is introduced to
        provide information about the request to the client
        and to allow the client to finish it by setting its
        contents.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Url_Scheme_Handler):
        (_Ewk_Url_Scheme_Handler::_Ewk_Url_Scheme_Handler):
        (_Ewk_Context):
        (_Ewk_Context::_Ewk_Context):
        (ewk_context_request_manager_get):
        (ewk_context_url_scheme_request_received):
        (createDefaultEwkContext):
        (ewk_context_uri_scheme_register):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_private.h:
        * UIProcess/API/efl/ewk_context_request_manager_client.cpp: Added.
        (toEwkContext):
        (didReceiveURIRequest):
        (ewk_context_request_manager_client_attach):
        * UIProcess/API/efl/ewk_context_request_manager_client_private.h: Added.
        * UIProcess/API/efl/ewk_url_scheme_request.cpp: Added.
        (_Ewk_Url_Scheme_Request):
        (_Ewk_Url_Scheme_Request::_Ewk_Url_Scheme_Request):
        (_Ewk_Url_Scheme_Request::~_Ewk_Url_Scheme_Request):
        (ewk_url_scheme_request_ref):
        (ewk_url_scheme_request_unref):
        (ewk_url_scheme_request_scheme_get):
        (ewk_url_scheme_request_url_get):
        (ewk_url_scheme_request_path_get):
        (ewk_url_scheme_request_id_get):
        (ewk_url_scheme_request_finish):
        (ewk_url_scheme_request_new):
        * UIProcess/API/efl/ewk_url_scheme_request.h: Added.
        * UIProcess/API/efl/ewk_url_scheme_request_private.h: Added.

2012-07-23  KwangYong Choi  <ky0.choi@samsung.com>

        [EFL][WK2] ProcessExecutablePath is required
        https://bugs.webkit.org/show_bug.cgi?id=89719

        Reviewed by Kenneth Rohde Christiansen.

        Added executablePathOfWebProcess and executablePathOfPluginProcess.
        It's used for getting the location of WebProcess and PluginProcess.

        * PlatformEfl.cmake: Added LIBEXECDIR definition
        * Shared/efl/ProcessExecutablePathEfl.cpp: Added.
        (WebKit):
        (WebKit::findWebKitProcess):
        (WebKit::executablePathOfWebProcess): Get the absolute path of WebProcess
        (WebKit::executablePathOfPluginProcess): Get the absolute path of PluginProcess
        * UIProcess/Launcher/efl/ProcessLauncherEfl.cpp:
        (WebKit::ProcessLauncher::launchProcess): Modified to use above routines

2012-07-23  Christophe Dumez  <christophe.dumez@intel.com>

        WebKit2 needs layoutTestController.setAlwaysAcceptCookies
        https://bugs.webkit.org/show_bug.cgi?id=42778

        Reviewed by Kenneth Rohde Christiansen.

        Add setAlwaysAcceptCookies() method to InjectedBundle
        so that we can use it in LayoutTestController.
        The method uses WebCookieManager::setHTTPCookieAcceptPolicy()
        internally.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetAlwaysAcceptCookies):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setAlwaysAcceptCookies):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):

2012-07-23  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [WK2] SQL Database cannot be disabled at build time
        https://bugs.webkit.org/show_bug.cgi?id=91837

        Reviewed by Kenneth Rohde Christiansen.

        WebKit2 had no #ifdefs for SQL Database. This patch adds these
        statments and it can now be disabled at build time.

        * Shared/OriginAndDatabases.cpp:
        * Shared/OriginAndDatabases.h:
        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetDatabaseManager):
        * UIProcess/API/C/WKDatabaseManager.cpp:
        (WKDatabaseManagerGetTypeID):
        (WKDatabaseManagerGetOriginKey):
        (WKDatabaseManagerGetOriginQuotaKey):
        (WKDatabaseManagerGetOriginUsageKey):
        (WKDatabaseManagerGetDatabaseDetailsKey):
        (WKDatabaseManagerGetDatabaseDetailsNameKey):
        (WKDatabaseManagerGetDatabaseDetailsDisplayNameKey):
        (WKDatabaseManagerGetDatabaseDetailsExpectedUsageKey):
        (WKDatabaseManagerGetDatabaseDetailsCurrentUsageKey):
        (WKDatabaseManagerSetClient):
        (WKDatabaseManagerGetDatabasesByOrigin):
        (callGetDatabasesByOriginBlockAndDispose):
        (WKDatabaseManagerGetDatabasesByOrigin_b):
        (WKDatabaseManagerGetDatabaseOrigins):
        (callGetDatabaseOriginsBlockBlockAndDispose):
        (WKDatabaseManagerGetDatabaseOrigins_b):
        (WKDatabaseManagerDeleteDatabasesWithNameForOrigin):
        (WKDatabaseManagerDeleteDatabasesForOrigin):
        (WKDatabaseManagerDeleteAllDatabases):
        (WKDatabaseManagerSetQuotaForOrigin):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::shouldTerminate):
        (WebKit::WebContext::disconnectProcess):
        (WebKit::WebContext::didReceiveMessage):
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebDatabaseManagerProxy.cpp:
        * UIProcess/WebDatabaseManagerProxy.h:
        * UIProcess/WebDatabaseManagerProxy.messages.in:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::clearAllDatabases):
        (WebKit::InjectedBundle::setDatabaseQuota):
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:
        * WebProcess/WebCoreSupport/WebDatabaseManager.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage):

2012-07-23  Kent Tamura  <tkent@chromium.org>

        Rename ENABLE_METER_TAG and ENABLE_PROGRESS_TAG to ENABLE_METER_ELEMENT and ENABLE_PROGRESS_ELEMENT respectively
        https://bugs.webkit.org/show_bug.cgi?id=91941

        Reviewed by Kentaro Hara.

        A flag name for an elmement should be ENABLE_*_ELEMENT.

        * Configurations/FeatureDefines.xcconfig:

2012-07-22  Kent Tamura  <tkent@chromium.org>

        Rename ENABLE_DETAILS to ENABLE_DETAILS_ELEMENT
        https://bugs.webkit.org/show_bug.cgi?id=91928

        Reviewed by Kentaro Hara.

        A flag name for an elmement should be ENABLE_*_ELEMENT.

        * Configurations/FeatureDefines.xcconfig:

2012-07-20  Kent Tamura  <tkent@chromium.org>

        Rename ENABLE_DATALIST to ENABLE_DATALIST_ELEMENT
        https://bugs.webkit.org/show_bug.cgi?id=91846

        Reviewed by Kentaro Hara.

        A flag name for an elmement should be ENABLE_*_ELEMENT.

        * Configurations/FeatureDefines.xcconfig:

2012-07-20  Rafael Brandao  <rafael.lobo@openbossa.org>

        QtNetworkAccessManager should not rely on signal sslErrors when QT_NO_SSL is defined
        https://bugs.webkit.org/show_bug.cgi?id=91866

        Reviewed by Noam Rosenthal.

        * WebProcess/qt/QtNetworkAccessManager.cpp:
        (WebKit::QtNetworkAccessManager::QtNetworkAccessManager): QNAM's signal is only defined when
        that flag is undefined. Removed the connection when we have the flag set.
        (WebKit::QtNetworkAccessManager::onSslErrors): When the flag is set, this slot becomes unused.

2012-07-20  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Proxy configuration should honor the no_proxy environment variable
        https://bugs.webkit.org/show_bug.cgi?id=91747

        Reviewed by Kenneth Rohde Christiansen.

        Use the new custom proxy resolver from WebCore in
        WebKit2-EFL so that it is possible for the client
        to set proxy exceptions via the "no_proxy"
        environment variable.

        By default, the proxy set in the "http_proxy"
        environment variable will not be used for requests
        to localhost or 127.0.0.1.

        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainEfl):

2012-06-01  Dinu Jacob  <dinu.jacob@nokia.com>

        [Qt][WK2] Add support for multi-select list
        https://bugs.webkit.org/show_bug.cgi?id=85527

        Reviewed by Kenneth Rohde Christiansen.

        Added support for multi-select list:
        - Added multi-selection flag to PlatformPopupMenuData to indicate whether to accept multiple selections or not.
        - Added selected state to WebPopupItem.
        - Modified WebPopupMenuQt to support multiple selections.

        * Shared/PlatformPopupMenuData.cpp:
        (WebKit::PlatformPopupMenuData::PlatformPopupMenuData):
        (WebKit::PlatformPopupMenuData::encode):
        (WebKit::PlatformPopupMenuData::decode):
        * Shared/PlatformPopupMenuData.h:
        (PlatformPopupMenuData):
        * Shared/WebPopupItem.cpp:
        (WebKit::WebPopupItem::WebPopupItem):
        (WebKit::WebPopupItem::encode):
        (WebKit::WebPopupItem::decode):
        * Shared/WebPopupItem.h:
        * UIProcess/API/qt/tests/qmltests/WebView/tst_multiSelect.qml: Added.
        * UIProcess/API/qt/tests/qmltests/common/multiselect.html: Added.
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPopupMenuProxy.h:
        (Client):
        * UIProcess/qt/WebPageProxyQt.cpp:
        (WebKit::WebPageProxy::changeSelectedIndex):
        (WebKit):
        (WebKit::WebPageProxy::closePopupMenu):
        * UIProcess/qt/WebPopupMenuProxyQt.cpp:
        (WebKit::PopupMenuItemModel::multiple):
        (PopupMenuItemModel):
        (WebKit::PopupMenuItemModel::Item::Item):
        (ItemSelectorContextObject):
        (WebKit::ItemSelectorContextObject::allowMultiSelect):
        (WebKit::ItemSelectorContextObject::reject):
        (WebKit::ItemSelectorContextObject::dismiss):
        (WebKit::ItemSelectorContextObject::ItemSelectorContextObject):
        (WebKit):
        (WebKit::ItemSelectorContextObject::onIndexUpdate):
        (WebKit::ItemSelectorContextObject::accept):
        (WebKit::PopupMenuItemModel::PopupMenuItemModel):
        (WebKit::PopupMenuItemModel::select):
        (WebKit::PopupMenuItemModel::toggleItem):
        (WebKit::PopupMenuItemModel::buildItems):
        (WebKit::WebPopupMenuProxyQt::showPopupMenu):
        (WebKit::WebPopupMenuProxyQt::hidePopupMenu):
        (WebKit::WebPopupMenuProxyQt::selectIndex):
        (WebKit::WebPopupMenuProxyQt::createItem):
        * UIProcess/qt/WebPopupMenuProxyQt.h:
        (WebPopupMenuProxyQt):
        * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
        (WebKit::WebPopupMenu::didChangeSelectedIndex):
        (WebKit::WebPopupMenu::populateItems):
        * WebProcess/WebCoreSupport/WebPopupMenu.h:
        (WebPopupMenu):
        * WebProcess/WebCoreSupport/qt/WebPopupMenuQt.cpp:
        (WebKit::WebPopupMenu::setUpPlatformData):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didChangeSelectedIndexForActivePopupMenu):
        (WebKit):
        (WebKit::WebPage::changeSelectedIndex):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (WebKit::WebPage::selectedIndex):
        (WebKit):
        (WebKit::WebPage::hidePopupMenu):

2012-07-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, rolling out r123085.
        http://trac.webkit.org/changeset/123085
        https://bugs.webkit.org/show_bug.cgi?id=91719

        r123085 causes crashes on EFL layout test bot.

        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::applicationCacheDirectory):

2012-07-20  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Use "load,finished" signal in EWK2UnitTestBase::loadUrlSync() instead of "load,progress"
        https://bugs.webkit.org/show_bug.cgi?id=91721

        Reviewed by Kenneth Rohde Christiansen.

        The purpose of EWK2UnitTestBase::loadUrlSync() is to load
        a URL in the view and wait synchronously for the load to finish.
        The current implementation uses the "load,progress" signal to
        detect when the load is finished, which is inefficient because
        it gets emitted several times.

        It is better to wait for the "load,finished" signal which gets
        emitted only once when the load is complete.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::onLoadFinished):
        (EWK2UnitTest::EWK2UnitTestBase::EWK2UnitTestBase):
        (EWK2UnitTest::EWK2UnitTestBase::loadUrlSync):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        (EWK2UnitTestBase):

2012-07-19  MORITA Hajime  <morrita@google.com>

        [Refactoring] Replace Node's Document pointer with a TreeScope pointer
        https://bugs.webkit.org/show_bug.cgi?id=59816

        Reviewed by Ryosuke Niwa.

        * win/WebKit2.def: Added newly exported symbols.
        * win/WebKit2CFLite.def: Ditto.

2012-07-19  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] [WK2] Add methods to get/set a custom text encoding
        https://bugs.webkit.org/show_bug.cgi?id=90604

        Reviewed by Kenneth Rohde Christiansen.

        Add methods to get/set custom character encoding.

        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_ewk_view_priv_del):
        (ewk_view_setting_encoding_custom_get):
        (ewk_view_setting_encoding_custom_set):
        * UIProcess/API/efl/ewk_view.h:

2012-07-19  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed. Fix build break because of changing parameter type of
        vibration virtual function on EFL port.

        * WebProcess/WebCoreSupport/WebVibrationClient.cpp:
        (WebKit::WebVibrationClient::vibrate):
        * WebProcess/WebCoreSupport/WebVibrationClient.h:
        (WebVibrationClient):

2012-07-19  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [WK2] Add Vibration API integration to WebContext and WebPage
        https://bugs.webkit.org/show_bug.cgi?id=91081

        Reviewed by Anders Carlsson.

        Integrate Vibration API to WebPage, WebContext and properly route
        messages to the WebVibrationProxy.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetVibration):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::disconnectProcess):
        (WebKit::WebContext::didReceiveMessage):
        * UIProcess/WebContext.h:
        (WebKit):
        (WebContext):
        (WebKit::WebContext::vibrationProxy):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):

2012-07-19  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] Enable CSS shaders in Qt (software mode)
        https://bugs.webkit.org/show_bug.cgi?id=85140

        Reviewed by Simon Hausmann.

        Add CSSCustomFilterEnabled to QWebPreferences. It's disabled by default.

        * UIProcess/API/qt/qwebpreferences.cpp:
        (QWebPreferencesPrivate::testAttribute):
        (QWebPreferencesPrivate::setAttribute):
        * UIProcess/API/qt/qwebpreferences_p_p.h:

2012-07-19  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] Enable CSS shaders in Qt (software mode)
        https://bugs.webkit.org/show_bug.cgi?id=85140

        Reviewed by Simon Hausmann.

        Add CSSCustomFilterEnabled to QWebPreferences. It's disabled by default.

        * UIProcess/API/qt/qwebpreferences.cpp:
        (QWebPreferencesPrivate::testAttribute):
        (QWebPreferencesPrivate::setAttribute):
        * UIProcess/API/qt/qwebpreferences_p_p.h:

2012-07-19  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt][WK2] Map the elementRect exposed in QML to the view for popup menu
        https://bugs.webkit.org/show_bug.cgi?id=91645

        Reviewed by Simon Hausmann.

        This way the geometry of the QML item is still sensible even if we panned
        and zoomed.

        * UIProcess/qt/WebPopupMenuProxyQt.cpp:
        (ItemSelectorContextObject):
        (WebKit::ItemSelectorContextObject::elementRect):
        (WebKit::ItemSelectorContextObject::ItemSelectorContextObject):
        (WebKit::WebPopupMenuProxyQt::showPopupMenu):

2012-07-19  Zoltan Nyul  <zoltan.nyul@intel.com>

        [EFL][WK2] Using different cache directory for each WTR process
        https://bugs.webkit.org/show_bug.cgi?id=91719

        Reviewed by Kenneth Rohde Christiansen.

        Make sure we return a valid application cache directory in
        WebContextEfl.

        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::applicationCacheDirectory):

2012-07-18  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] EFL should use DownloadSoup instead of defining DownloadEfl
        https://bugs.webkit.org/show_bug.cgi?id=91602

        Reviewed by Kenneth Rohde Christiansen.

        Reuse WebProcess/Downloads/soup/DownloadSoup.cpp in EFL port
        instead of redefining our own DownloadEfl.cpp. The EFL port
        is also using libsoup so it is best to avoid code duplication.

        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * PlatformEfl.cmake:
        * WebProcess/Downloads/Download.h:
        (WebKit):
        (Download):
        * WebProcess/Downloads/efl/DownloadEfl.cpp: Removed.
        * WebProcess/Downloads/efl/DownloadSoupErrorsEfl.cpp: Added.
        (WebKit):
        (WebKit::platformDownloadNetworkError):
        (WebKit::platformDownloadDestinationError):
        * WebProcess/Downloads/efl/FileDownloaderEfl.cpp: Removed.
        * WebProcess/Downloads/efl/FileDownloaderEfl.h: Removed.
        * WebProcess/Downloads/gtk/DownloadSoupErrorsGtk.cpp: Added.
        (WebKit):
        (WebKit::platformDownloadNetworkError):
        (WebKit::platformDownloadDestinationError):
        * WebProcess/Downloads/soup/DownloadSoup.cpp: Make the code
        compile for other ports than GTK.
        (WebKit::DownloadClient::didReceiveResponse):
        (WebKit::DownloadClient::didReceiveData):
        (WebKit::DownloadClient::didFail):
        (WebKit::Download::continueWithoutCredential):
        (WebKit):
        (WebKit::Download::useCredential):
        (WebKit::Download::cancelAuthenticationChallenge):
        * WebProcess/Downloads/soup/DownloadSoupErrors.h: Added.
        (WebKit):

2012-07-18  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] Add C API for Network Information API
        https://bugs.webkit.org/show_bug.cgi?id=90762

        Reviewed by Kenneth Rohde Christiansen.

        Add C API for WKNetworkInfo and WKNetworkInfoManager
        so that they can be used by the client.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetNetworkInfoManager):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/WKNetworkInfo.cpp: Copied from Source/WebKit2/UIProcess/API/C/WKNetworkInfoManager.cpp.
        (WKNetworkInfoGetTypeID):
        (WKNetworkInfoCreate):
        * UIProcess/API/C/WKNetworkInfo.h: Copied from Source/WebKit2/UIProcess/API/C/WKNetworkInfoManager.cpp.
        * UIProcess/API/C/WKNetworkInfoManager.cpp:
        (WKNetworkInfoManagerSetProvider):
        (WKNetworkInfoManagerProviderDidChangeNetworkInformation):
        * UIProcess/API/C/WKNetworkInfoManager.h:

2012-07-18  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] ewk_cookie_manager_persistent_storage_set is not exported
        https://bugs.webkit.org/show_bug.cgi?id=91647

        Reviewed by Gustavo Noronha Silva.

        Properly export ewk_cookie_manager_persistent_storage_set in
        ewk_cookie_manager.h by using EAPI.

        * UIProcess/API/efl/ewk_cookie_manager.h:

2012-07-18  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Add central error management to EFL port
        https://bugs.webkit.org/show_bug.cgi?id=91598

        Reviewed by Kenneth Rohde Christiansen.

        Make use of ErrorsEfl header from WebCore in
        WebKit2, for Ewk_Web_Error and WebErrorsEfl.

        * UIProcess/API/efl/ewk_web_error.cpp:
        (ewk_web_error_type_get):
        * UIProcess/API/efl/ewk_web_error.h:
        * WebProcess/WebCoreSupport/efl/WebErrorsEfl.cpp:
        (WebKit::cancelledError):
        (WebKit::blockedError):
        (WebKit::cannotShowURLError):
        (WebKit::interruptedForPolicyChangeError):
        (WebKit::cannotShowMIMETypeError):
        (WebKit::fileDoesNotExistError):
        (WebKit::pluginWillHandleLoadError):

2012-07-18  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] Set a theme for EFL WebKit2 unit test fixture
        https://bugs.webkit.org/show_bug.cgi?id=91618

        Reviewed by Kenneth Rohde Christiansen.

        The test fixture should load the theme generated by the build
        instead of trying to load the system theme.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::SetUp):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.cpp:
        (EWK2UnitTest::EWK2UnitTestEnvironment::defaultTheme):
        (EWK2UnitTest):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.h:
        (EWK2UnitTestEnvironment):

2012-07-18  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] QQuickWebView shouldn't recieve mouse events while dialogs are active
        https://bugs.webkit.org/show_bug.cgi?id=91634

        Reviewed by Alexis Menard.

        One side-effect of reimplementing childMouseEventFilter() in r122438 is that it can end up
        bypassing the mouseArea mechanism used in QML dialogs and still forward some mouse events
        over to the web process. We can rely on the same m_dialogActive mechanism already used for
        touch events in there as well.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebView::childMouseEventFilter): ignore events and return early if a dialog is active.

2012-07-18  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Build fix for ENABLE_TOUCH_EVENTS=0

        Rubber-stamped by No'am Rosenthal.

        Add the appropriate ENABLE(TOUCH_EVENTS) where they're needed.

        * UIProcess/API/qt/raw/qrawwebview.cpp:
        * UIProcess/API/qt/raw/qrawwebview_p.h: include Platform.h so we can use the ENABLE macro.
        * UIProcess/InspectorServer/qt/WebInspectorServerQt.cpp: Also add the missing QFile include.
        * UIProcess/qt/QtWebPageEventHandler.cpp:
        (WebKit::QtWebPageEventHandler::deactivateTapHighlight):

2012-07-18  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add Ewk class for cookie manager
        https://bugs.webkit.org/show_bug.cgi?id=91053

        Reviewed by Gustavo Noronha Silva.

        Add new Ewk_Cookie_Manager class to allow the client
        to set/get the cookie acceptance policy, support
        persistent cookie storage and clear cookies.

        The Ewk_Cookie_Manager instance can be retrieved
        from the Ewk_Context API.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context):
        (_Ewk_Context::_Ewk_Context):
        (_Ewk_Context::~_Ewk_Context):
        (ewk_context_cookie_manager_get):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_cookie_manager.cpp: Added.
        (_Ewk_Cookie_Manager):
        (_Ewk_Cookie_Manager::_Ewk_Cookie_Manager):
        (ewk_cookie_manager_persistent_storage_set):
        (ewk_cookie_manager_accept_policy_set):
        (Get_Policy_Async_Data):
        (getAcceptPolicyCallback):
        (ewk_cookie_manager_async_accept_policy_get):
        (Get_Hostnames_Async_Data):
        (getHostnamesWithCookiesCallback):
        (ewk_cookie_manager_async_hostnames_with_cookies_get):
        (ewk_cookie_manager_hostname_cookies_clear):
        (ewk_cookie_manager_cookies_clear):
        (ewk_cookie_manager_free):
        (ewk_cookie_manager_new):
        * UIProcess/API/efl/ewk_cookie_manager.h: Added.
        * UIProcess/API/efl/ewk_cookie_manager_private.h: Added.

2012-07-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add WebKitWebView::submit-form signal to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=91605

        Reviewed by Gustavo Noronha Silva.

        The signal is emitted when a form is about to submitted, with a
        form submission request that can be used to get the text fields
        and to continue the form submission wheh done.

        * GNUmakefile.list.am: Add new files to compilation.
        * UIProcess/API/gtk/WebKitFormClient.cpp: Added.
        (willSubmitForm): Create a WebKitFormSubmissionRequest and call
        webkitWebViewSubmitFormRequest() with the request.
        (attachFormClientToView): Add impementation for willSubmitForm
        callback.
        * UIProcess/API/gtk/WebKitFormClient.h: Added.
        * UIProcess/API/gtk/WebKitFormSubmissionRequest.cpp: Added.
        (webkit_form_submission_request_init):
        (webkitFormSubmissionRequestFinalize):
        (webkit_form_submission_request_class_init):
        (webkitFormSubmissionRequestCreate): Create a new
        WebKitFormSubmissionRequest for the given values dictionary and
        submission listener.
        (webkit_form_submission_request_get_text_fields): Create a
        GHashTable with the text fields values and return it.
        (webkit_form_submission_request_submit): Continue the form
        submission.
        * UIProcess/API/gtk/WebKitFormSubmissionRequest.h: Added.
        * UIProcess/API/gtk/WebKitFormSubmissionRequestPrivate.h: Added.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewConstructed): Attach web view to form client.
        (webkit_web_view_class_init): Add WebKitWebView::submit-form
        signal.
        (webkitWebViewSubmitFormRequest): Emit WebKitWebView::submit-form
        signal.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add new section for
        WebKitFormSubmissionRequest.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.
        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
        (testWebViewSubmitForm):
        (beforeAll):
        * UIProcess/API/gtk/webkit2.h: Include
        WebKitFormSubmissionRequest.h.

2012-07-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] No main resource in WebView when page has been loaded from history cache
        https://bugs.webkit.org/show_bug.cgi?id=91478

        Reviewed by Gustavo Noronha Silva.

        We are assuming that a resource loaded for the main frame that is
        provisionally loading is the main resource of the web view. However
        that's not true for pages loaded from history cache, so when you
        go back/forward webkit_web_view_get_main_resource() always returns
        NULL. We can assume that the first resource loaded for the main
        frame is the main resource of the web view when
        pageIsProvisionallyLoading is false.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewResourceLoadStarted): Make sure we always have a
        main resource for the web view.
        * UIProcess/API/gtk/tests/TestResources.cpp:
        (testWebViewResourcesHistoryCache): Test we always have a main
        resource even after going back/forward.
        (beforeAll): Add new test case.

2012-07-18  Seokju Kwon  <seokju.kwon@samsung.com>

        [EFL] Rename WebInspectorEfl.cpp as WebInspectorProxyEfl.cpp
        https://bugs.webkit.org/show_bug.cgi?id=91585

        Reviewed by Andreas Kling.

        Rename WebInspectorEfl.cpp as WebInspectorProxyEfl.cpp
        since it implements the platform specific methods of WebInspectorProxy.

        * PlatformEfl.cmake:
        * UIProcess/efl/WebInspectorProxyEfl.cpp: Renamed from Source/WebKit2/UIProcess/efl/WebInspectorEfl.cpp.
        (WebKit):
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        (WebKit::WebInspectorProxy::platformOpen):
        (WebKit::WebInspectorProxy::platformDidClose):
        (WebKit::WebInspectorProxy::platformBringToFront):
        (WebKit::WebInspectorProxy::platformIsFront):
        (WebKit::WebInspectorProxy::platformInspectedURLChanged):
        (WebKit::WebInspectorProxy::inspectorPageURL):
        (WebKit::WebInspectorProxy::inspectorBaseURL):
        (WebKit::WebInspectorProxy::platformInspectedWindowHeight):
        (WebKit::WebInspectorProxy::platformAttach):
        (WebKit::WebInspectorProxy::platformDetach):
        (WebKit::WebInspectorProxy::platformSetAttachedWindowHeight):

2012-07-18  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Modify the using of the QImage::Format enum to the appropriate functions from NativeImageQt
        https://bugs.webkit.org/show_bug.cgi?id=91600

        Reviewed by Andreas Kling.

        Use NativeImageQt::defaultFormatForAlphaEnabledImages() and NativeImageQt::defaultFormatForOpaqueImages()
        instead of the direct imagetypes at the appropriate places.

        * Shared/qt/ShareableBitmapQt.cpp:
        (WebKit::ShareableBitmap::createQImage):

2012-07-18  Zeno Albisser  <zeno@webkit.org>

        [Qt][WK2] Caching of ShareableSurfaces breaks tiling.
        https://bugs.webkit.org/show_bug.cgi?id=91609

        A ShareableSurface should only be cached,
        when it is GraphicsSurface based.

        Reviewed by Kenneth Rohde Christiansen.

        * UIProcess/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::updateTileForLayer):
        * UIProcess/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):

2012-07-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix a crash due to an invalid assert
        https://bugs.webkit.org/show_bug.cgi?id=91614

        Reviewed by Xan Lopez.

        In webkitWebViewBaseContainerAdd() there's
        ASSERT(priv->inspectorView); that should be the opposite, since we
        shoulnd't have an inspector view when the inspector view is added.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseContainerAdd):

2012-07-18  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [CMake] Make gtest a shared library
        https://bugs.webkit.org/show_bug.cgi?id=90973

        Reviewed by Daniel Bates.

        No need to link with gtest dependencies now since it is a shared library.

        * PlatformEfl.cmake:

2012-07-18  YoungTaeck Song  <youngtaeck.song@samsung.com>

        [WK2][EFL] Add a common code using Color instead of QColor
        https://bugs.webkit.org/show_bug.cgi?id=91580

        Reviewed by Simon Hausmann.

        This patch is a subset of Efl's UI_SIDE_COMPOSITING implementation.
        drawBorder's argument is QColor. So add a common code using Color to be used by Efl.

        * UIProcess/texmap/LayerBackingStore.cpp:
        (WebKit::LayerBackingStore::paintToTextureMapper):

2012-07-17  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Replace 0 by NULL in public headers documentation
        https://bugs.webkit.org/show_bug.cgi?id=91470

        Reviewed by Dirk Pranke.

        Use NULL instead of 0 for pointer types in public
        C headers.

        * UIProcess/API/efl/ewk_intent.h:
        * UIProcess/API/efl/ewk_intent_service.h:
        * UIProcess/API/efl/ewk_url_request.h:
        * UIProcess/API/efl/ewk_url_response.h:
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_web_resource.h:

2012-07-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use deprecated soup API in WebKit2APITests/TestResources
        https://bugs.webkit.org/show_bug.cgi?id=91496

        Reviewed by Martin Robinson.

        soup_message_headers_get() is deprecated, use
        soup_message_headers_get_one() instead.

        * UIProcess/API/gtk/tests/TestResources.cpp:
        (serverCallback):

2012-07-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix a typo in WebKit2APITests/TestResources
        https://bugs.webkit.org/show_bug.cgi?id=91495

        Reviewed by Xan Lopez.

        * UIProcess/API/gtk/tests/TestResources.cpp:
        (testWebResourceLoading):
        (testWebResourceResponse):
        (testWebResourceMimeType):
        (testWebResourceActiveURI):

2012-07-17  Vivek Galatage  <vivekgalatage@gmail.com>

        Web Inspector: refactor InspectorController::connectFrontend() to accept InspectorFrontendChannel.
        https://bugs.webkit.org/show_bug.cgi?id=91196

        Reviewed by Pavel Feldman.

        Refactoring InspectorClients. InspectorClient::openInspectorFrontend
        now returning the InspectorFrontendChannel.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::openInspectorFrontend):
        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        (WebInspectorClient):

2012-07-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Paste primary selection when middle clicking in X11 WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=91411

        Reviewed by Xan Lopez.

        Handle middle click events to paste primary selection as expected
        in any X11 application.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::handleMouseEvent): Call handleMousePressedEvent() for GTK+
        platform.
        * WebProcess/WebPage/WebPage.h:
        (WebPage): Add handleMousePressedEvent() for GTK+ platform.
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::handleMousePressedEvent): Handle middle click
        events to paste primary selection like we do in WebKit1.

2012-07-17  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Move codes related to theme setting from Widget to RenderTheme
        https://bugs.webkit.org/show_bug.cgi?id=89842

        Reviewed by Kenneth Rohde Christiansen.

        * CMakeLists.txt: Added html/shadow to WebKit_INCLUDE_DIRECTORIES.
        * WebProcess/WebPage/efl/WebPageEfl.cpp:
        (WebKit::WebPage::setThemePath): Called RenderThemeEfl::setThemePath instead of setting theme in FrameView.

2012-07-17  David Barr  <davidbarr@chromium.org>

        Introduce ENABLE_CSS_IMAGE_ORIENTATION compile flag
        https://bugs.webkit.org/show_bug.cgi?id=89055

        Reviewed by Kent Tamura.

        The css3-images module is at candidate recommendation.
        http://www.w3.org/TR/2012/CR-css3-images-20120417/#the-image-orientation

        Add a configuration option for CSS image-orientation support, disabling it by default.

        * Configurations/FeatureDefines.xcconfig:

2012-07-16  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Add RegisterProtocolHandlerClient to the Modules/protocolhandler
        https://bugs.webkit.org/show_bug.cgi?id=90940

        Reviewed by Hajime Morita.

        As a step to let protocol handler be moved to the modules, RegisterProtocolHandlerClient needs
        to be added to the Modules/protocolhandler. Because ChromeClient has some virtual functions for
        protocol handlers, virtual functions should be moved to RegisterProtocolHandlerClient.

        In order to support this, WebRegisterProtocolHandlerClient class is added. However, this is not implemented yet.
        In addition, existing virtual functions in WebChromeClient are moved to WebRegisterProtocolHandlerClient.

        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebRegisterProtocolHandlerClient.h: Added.
        (WebKit):
        (WebRegisterProtoclHandlerClient):
        (WebKit::WebRegisterProtoclHandlerClient::isProtocolHandlerRegistered):
        (WebKit::WebRegisterProtoclHandlerClient::unregisterProtocolHandler):

2012-07-16  Pete Williamson  <petewil@google.com>

        Export the iconURL list to make it available to the Internals class for testing
        https://bugs.webkit.org/show_bug.cgi?id=88665

        Reviewed by Kent Tamura.

        * win/WebKit2.def: export the DocumentL::iconURLs function

2012-07-16  Hajime Morrita  <morrita@chromium.org>

        WebCore needs WEBCORE_TESTING macro to mark methods being exported for testing.
        https://bugs.webkit.org/show_bug.cgi?id=90764

        Reviewed by Adam Barth.

        Removed symbols which are now covered by WEBCORE_TESTING.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-07-16  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Implement decidePolicyForResponse in policy client
        https://bugs.webkit.org/show_bug.cgi?id=91401

        Reviewed by Kenneth Rohde Christiansen.

        Provide implementation for decidePolicyForResponse callback
        in WebKit2 EFL's policy client.

        * UIProcess/API/efl/ewk_view_policy_client.cpp:
        (decidePolicyForResponseCallback):
        (ewk_view_policy_client_attach):

2012-07-16  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Add APIs to support theme.
        https://bugs.webkit.org/show_bug.cgi?id=90107

        Reviewed by Hajime Morita.

        RenderThemeEfl uses edj file to render native theme of form elements.
        This patch provides default theme and a way to change edj theme file for
        WebKit2/Efl.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (ewk_view_base_add):
        (ewk_view_theme_set):
        (ewk_view_theme_get):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/efl/WebPageProxyEfl.cpp:
        (WebKit::WebPageProxy::setThemePath):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/efl/WebPageEfl.cpp:
        (WebKit::WebPage::setThemePath):

2012-07-16  Kihong Kwon  <kihong.kwon@samsung.com>

        Remove setController from BatteryClient
        https://bugs.webkit.org/show_bug.cgi?id=90944

        Reviewed by Adam Barth.

        Remove WebBatteryClient::setController function.

        * WebProcess/WebCoreSupport/WebBatteryClient.cpp:
        * WebProcess/WebCoreSupport/WebBatteryClient.h:
        (WebBatteryClient):

2012-07-16  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Make Ewk_Navigation_Policy_Decision ref counted
        https://bugs.webkit.org/show_bug.cgi?id=91343

        Reviewed by Antonio Gomes.

        Make Ewk_Navigation_Policy_Decision ref counted so that the
        client can make navigation policy decisions asynchronously
        by ref'ing the Ewk_Navigation_Policy_Decision object passed
        with the "policy,*" signals.

        * UIProcess/API/efl/ewk_navigation_policy_decision.cpp:
        (_Ewk_Navigation_Policy_Decision):
        (_Ewk_Navigation_Policy_Decision::_Ewk_Navigation_Policy_Decision):
        (_Ewk_Navigation_Policy_Decision::~_Ewk_Navigation_Policy_Decision):
        (ewk_navigation_policy_decision_ref):
        (ewk_navigation_policy_decision_unref):
        * UIProcess/API/efl/ewk_navigation_policy_decision.h:
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_policy_client.cpp:
        (decidePolicyForNavigationAction):
        (decidePolicyForNewWindowAction):

2012-07-16  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Change NativeImagePtr from QPixmap* to QImage*
        https://bugs.webkit.org/show_bug.cgi?id=88785

        Reviewed by Simon Hausmann.

        Since we use raster engine there is no difference between QPixmap and QImage, so we are going
        to use QImage everywhere where it is possible. This refactoring contains the change of the
        NativeImagePtr typedef from QPixmap* to QImage* and covers the related modifications.

        Part of the change is similar to Viatcheslav Ostapenko's internal work.

        Covered by existing tests.

        * Shared/qt/ShareableBitmapQt.cpp:
        (WebKit::ShareableBitmap::createImage):
        * UIProcess/qt/QtWebIconDatabaseClient.cpp:
        (WebKit::QtWebIconDatabaseClient::iconImageForPageURL):
        * WebProcess/WebCoreSupport/qt/WebDragClientQt.cpp:
        (WebKit::convertQImageToShareableBitmap):
        (WebKit::WebDragClient::startDrag):
        * WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::adoptImageBackingStore):

2012-07-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * UIProcess/API/gtk/tests/GNUmakefile.am: Add test resources to
        EXTRA_DIST.

2012-07-15  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Define destructors for Ewk structures
        https://bugs.webkit.org/show_bug.cgi?id=91338

        Reviewed by Kentaro Hara.

        Add destructors to Ewk structures and move
        memory freeing code from *_free() or *_unref()
        functions to the destructors.

        * UIProcess/API/efl/ewk_intent.cpp:
        (_Ewk_Intent::_Ewk_Intent):
        (_Ewk_Intent):
        (_Ewk_Intent::~_Ewk_Intent):
        (ewk_intent_unref):
        * UIProcess/API/efl/ewk_intent_service.cpp:
        (_Ewk_Intent_Service):
        (_Ewk_Intent_Service::~_Ewk_Intent_Service):
        (ewk_intent_service_unref):
        * UIProcess/API/efl/ewk_navigation_policy_decision.cpp:
        (_Ewk_Navigation_Policy_Decision):
        (_Ewk_Navigation_Policy_Decision::~_Ewk_Navigation_Policy_Decision):
        (ewk_navigation_policy_decision_free):
        * UIProcess/API/efl/ewk_url_request.cpp:
        (_Ewk_Url_Request):
        (_Ewk_Url_Request::~_Ewk_Url_Request):
        (ewk_url_request_unref):
        * UIProcess/API/efl/ewk_url_response.cpp:
        (_Ewk_Url_Response):
        (_Ewk_Url_Response::~_Ewk_Url_Response):
        (ewk_url_response_unref):
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::~_Ewk_View_Private_Data):
        (_ewk_view_priv_del):
        * UIProcess/API/efl/ewk_web_error.cpp:
        (_Ewk_Web_Error):
        (_Ewk_Web_Error::~_Ewk_Web_Error):
        (ewk_web_error_free):
        * UIProcess/API/efl/ewk_web_resource.cpp:
        (_Ewk_Web_Resource):
        (_Ewk_Web_Resource::~_Ewk_Web_Resource):
        (ewk_web_resource_unref):

2012-07-14  Eric Carlson  <eric.carlson@apple.com>

        Enable AVCF hardware video decoding
        https://bugs.webkit.org/show_bug.cgi?id=90015
        <rdar://problem/10770317>

        Reviewed by Anders Carlsson.

        * DerivedSources.make: Define HAVE_AVCF if necessary.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit):
        (WebKit::WebChromeClient::graphicsDeviceAdapter): New, return the layer tree host's
            graphics adapter.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebCore):
        (LayerTreeHost):
        (WebKit::LayerTreeHost::graphicsDeviceAdapter): New, default implementation.

        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.h:
        (LayerTreeHostCAWin):

2012-07-13  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [CMake] Proper handling of ENABLE_API_TESTS build option
        https://bugs.webkit.org/show_bug.cgi?id=91221

        Reviewed by Rob Buis.

        Build unit tests only if ENABLE_API_TESTS is set.

        * PlatformEfl.cmake:

2012-07-13  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Make new public Ewk headers as installable
        https://bugs.webkit.org/show_bug.cgi?id=91232

        Reviewed by Antonio Gomes.

        Make new public Ewk headers installable.

        * PlatformEfl.cmake:

2012-07-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement disk cache in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=90797

        Reviewed by Xan Lopez.

        * WebProcess/gtk/WebProcessGtk.cpp:
        (WebKit::getCacheDiskFreeSize): Use an ASSERT instead of an early
        return since the cache feature is now always added to the session.
        (WebKit::WebProcess::platformSetCacheModel): Get the cache from
        the session and set the maximum cache size as computed by
        calculateCacheSizes().
        (WebKit::WebProcess::platformClearResourceCaches): Call
        soup_cache_clear().
        (WebKit::WebProcess::platformTerminate): Make sure all pending
        data is saved to the disk before the web process finishes.
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        (WebKit::WebProcessMainGtk): Create a SoupCache feature and add it
        to the default SoupSession.

2012-07-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix disk cache size computation in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=91226

        Reviewed by Xan Lopez.

        We are passing the free disk space value in bytes to
        calculateCacheSizes() which expects values in MB.

        * WebProcess/gtk/WebProcessGtk.cpp:
        (WebKit::WebProcess::platformSetCacheModel):

2012-07-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKit2 crash when going back/forward
        https://bugs.webkit.org/show_bug.cgi?id=91220

        Reviewed by Xan Lopez.

        For some reason when a page is loaded from the backforward list,
        when the didCommitLoadForFrame callback is called for the main
        frame, the callback didInitiateLoadForResource hasn't been called
        yet, so we don't even have a main resource at that point. We were
        assuming we always had a main resource with a response. For now we
        just check whether we have a resource before trying to set the
        certificate to fix the crash, but we need to figue out why this is
        happening an how to properly fix it.

        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        (didCommitLoadForFrame): Check whether we have a main resource
        before setting the certificate.

2012-07-13  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Use eina stringsharing for Ewk_Web_Resource's url
        https://bugs.webkit.org/show_bug.cgi?id=91200

        Reviewed by Kenneth Rohde Christiansen.

        Use eina stringsharing for Ewk_Web_Resource's url
        for consistency.

        * UIProcess/API/efl/ewk_web_resource.cpp:
        (_Ewk_Web_Resource):
        (_Ewk_Web_Resource::_Ewk_Web_Resource):
        (ewk_web_resource_unref):
        (ewk_web_resource_url_get):
        * UIProcess/API/efl/ewk_web_resource.h:

2012-07-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitWebView::mouse-target-changed is not emitted when moved to/from edtiable content
        https://bugs.webkit.org/show_bug.cgi?id=91216

        Reviewed by Xan Lopez.

        The problem is that the function to check whether two hit test
        results are equal doesn't check the editable flag.

        * UIProcess/API/gtk/WebKitHitTestResult.cpp:
        (webkitHitTestResultCompare): Check also the editable flag.

2012-07-13  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Add *explicit* keyword to constructor which has a parameter
        https://bugs.webkit.org/show_bug.cgi?id=91207

        Reviewed by Zoltan Herczeg.

        Add *explicit* keyword to contructor which has a parameter in order to avoid implicit type conversion.

        * WebProcess/WebCoreSupport/efl/WebFrameNetworkingContext.h:
        (WebFrameNetworkingContext::WebFrameNetworkingContext):

2012-07-13  Zeno Albisser  <zeno@webkit.org>

        [Qt][WK2] Implement GraphicsSurface for Linux/GLX.
        https://bugs.webkit.org/show_bug.cgi?id=90881

        Add a GLX based GraphicsSurface implementation for Linux.

        Reviewed by Noam Rosenthal.

        * Shared/ShareableSurface.cpp:
        (WebKit::ShareableSurface::create):
            Only create a GraphicsSurface from a ShareableSurface::Handle
            in case the Handle contains a valid GraphicsSurface token.
            Otherwise fall back to creating a ShareableBitmap.
        * UIProcess/LayerTreeCoordinatorProxy.cpp:
        (WebKit::createLayerTileUniqueKey):
            Create a unique key for a surface based on tileID and layerID.
        (WebKit::LayerTreeCoordinatorProxy::updateTileForLayer):
            Even when GraphicsSurface is enabled, not all ShareableSurfaces
            will necessarily be backed by a GraphicsSurface. In case of
            a ShareableSurface being backed by a ShareableBitmap instead,
            the GraphicsSurface token will always be null.
            So instead of using the GraphicsSurface token as a key for
            storing surfaces in a map, we create a unique key from
            layerID and tileID.
        * UIProcess/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):

2012-07-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to get HTTPS status to WebKit2 GTK+
        https://bugs.webkit.org/show_bug.cgi?id=91100

        Reviewed by Martin Robinson.

        Add webkit_uri_response_get_https_status() to return
        GTlsCertificate and GTlsCertificateFlags with information about
        the SSL certificate and the possible errors with the certificate.

        * GNUmakefile.list.am: Add new files to compilation.
        * PlatformEfl.cmake: Ditto.
        * Shared/efl/PlatformCertificateInfo.h: Removed.
        * Shared/soup/PlatformCertificateInfo.cpp: Added.
        (WebKit::PlatformCertificateInfo::PlatformCertificateInfo):
        (WebKit::PlatformCertificateInfo::~PlatformCertificateInfo):
        (WebKit::PlatformCertificateInfo::encode): Encode the
        GTlsCertificate and GTlsCertificateFlags.
        (WebKit::PlatformCertificateInfo::decode): Decode
        PlatformCertificateInfo into a GTlsCertificate and GTlsCertificateFlags.
        * Shared/soup/PlatformCertificateInfo.h: Renamed from Source/WebKit2/Shared/gtk/PlatformCertificateInfo.h.
        (WebKit::PlatformCertificateInfo::certificate): Return the certificate.
        (WebKit::PlatformCertificateInfo::tlsErrors): Return the TLS errors
        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        (didCommitLoadForFrame): Set the certificate of the current frame
        to the response of the main resource.
        * UIProcess/API/gtk/WebKitURIResponse.cpp:
        (webkit_uri_response_get_https_status): Return GTlsCertificate and
        GTlsCertificateFlags.
        (webkitURIResponseSetCertificateInfo): Update the internal
        ResourceResponse with the GTlsCertificate and GTlsCertificateFlags
        of the given PlatformCertificateInfo.
        * UIProcess/API/gtk/WebKitURIResponse.h:
        * UIProcess/API/gtk/WebKitURIResponsePrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbol.
        * UIProcess/API/gtk/tests/GNUmakefile.am:
        * UIProcess/API/gtk/tests/TestMain.h:
        (Test::getResourcesDir): Helper function to get the resources
        directory of the WebKit2 API tests.
        * UIProcess/API/gtk/tests/TestSSL.cpp: Added.
        (testSSL):
        (serverCallback):
        (beforeAll):
        (afterAll):
        * UIProcess/API/gtk/tests/WebKitTestServer.cpp:
        (WebKitTestServer::WebKitTestServer): Add support por SSL test
        servers.
        * UIProcess/API/gtk/tests/WebKitTestServer.h:
        (WebKitTestServer): Add ssl parameter to create a HTTPS server.
        * UIProcess/API/gtk/tests/resources/test-cert.pem: Added.
        * UIProcess/API/gtk/tests/resources/test-key.pem: Added.

2012-07-12  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][EFL] Facilitate debugging of the Web Process
        https://bugs.webkit.org/show_bug.cgi?id=90768

        Reviewed by Kenneth Rohde Christiansen.

        The EFL port now checks if the WEB_PROCESS_CMD_PREFIX
        environment variable is set and uses it as prefix
        when spawning the Web process if it is. This is used
        for debugging purposes with prefixes such as:
        "xterm -title renderer -e gdb --args".

        * UIProcess/Launcher/ProcessLauncher.h:
        (LaunchOptions):
        * UIProcess/Launcher/efl/ProcessLauncherEfl.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::connect):

2012-07-12  Timothy Hatcher  <timothy@apple.com>

        Make the "Inspect Element" context menu item appear in nightly builds again.

        https://webkit.org/b/89323

        Reviewed by Anders Carlsson.

        * Shared/API/c/WKContextMenuItem.cpp:
        (compatibleContextMenuItemTag): Added. Checks for the specific version of Safari 6 that needs the
        tag fixed up to match values it expects.
        (WKContextMenuItemGetTag): On Mac platforms call compatibleContextMenuItemTag to fix up the tag
        before returning it.
        * Shared/API/c/WKContextMenuItemTypes.h: Fix the order of the WKContextMenuItemTag enum
        to be binary compatible with older versions of WebKit2.

2012-07-12  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] Port the test framework to WebKit 2
        https://bugs.webkit.org/show_bug.cgi?id=90606

        Reviewed by Kenneth Rohde Christiansen.

        This port of EFL's WebKit 1 test framework uses a more gtest-ish
        way of writing tests and it is based on a test fixture that loads a
        page synchronously as convenience (if needed). This base fixture can be
        easily extended by just inheriting from it.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp: Added.
        (EWK2UnitTest):
        (EWK2UnitTest::onLoadProgress):
        (EWK2UnitTest::EWK2UnitTestBase::EWK2UnitTestBase):
        (EWK2UnitTest::EWK2UnitTestBase::SetUp):
        (EWK2UnitTest::EWK2UnitTestBase::TearDown):
        (EWK2UnitTest::EWK2UnitTestBase::loadUrlSync):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h: Added.
        (EWK2UnitTest):
        (EWK2UnitTestBase):
        (EWK2UnitTest::EWK2UnitTestBase::setLoadProgress):
        (EWK2UnitTest::EWK2UnitTestBase::webView):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.cpp: Added.
        (EWK2UnitTest):
        (EWK2UnitTest::EWK2UnitTestEnvironment::EWK2UnitTestEnvironment):
        (EWK2UnitTest::EWK2UnitTestEnvironment::defaultTestPageUrl):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.h: Added.
        (EWK2UnitTest):
        (EWK2UnitTestEnvironment):
        (EWK2UnitTest::EWK2UnitTestEnvironment::useX11Window):
        (EWK2UnitTest::EWK2UnitTestEnvironment::defaultWidth):
        (EWK2UnitTest::EWK2UnitTestEnvironment::defaultHeight):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestMain.cpp: Added.
        (parseArguments):
        (main):
        * UIProcess/API/efl/tests/resources/default_test_page.html: Added.
        * UIProcess/API/efl/tests/test_ewk2_view.cpp: Added.
        (TEST_F):

2012-07-12  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] Add missing Network Information API integration to WebContext and WebPage
        https://bugs.webkit.org/show_bug.cgi?id=90781

        Reviewed by Anders Carlsson.

        Integrate Network Information API to WebPage, WebContext and
        properly route messages to the WebNetworkInfoManagerProxy.
        Without this, the Network Information tests are crashing for
        WebKit2.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::disconnectProcess):
        (WebKit::WebContext::didReceiveMessage):
        (WebKit::WebContext::didReceiveSyncMessage):
        * UIProcess/WebContext.h:
        (WebKit):
        (WebContext):
        (WebKit::WebContext::networkInfoManagerProxy):
        * UIProcess/WebNetworkInfoManagerProxy.cpp:
        (WebKit::WebNetworkInfoManagerProxy::didReceiveSyncMessage):
        (WebKit):
        * UIProcess/WebNetworkInfoManagerProxy.h:
        (WebNetworkInfoManagerProxy):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):

2012-07-12  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Move TextureMapperAnimation and texmap/LayerTransform to platform/graphics
        https://bugs.webkit.org/show_bug.cgi?id=91111

        Reviewed by Kenneth Rohde Christiansen.

        Include the new filenames.

        * WebProcess/WebPage/LayerTreeCoordinator/WebGraphicsLayer.h:
        (WebGraphicsLayer):

2012-07-12  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        [Qt][WK2] Implement web notifications support
        https://bugs.webkit.org/show_bug.cgi?id=80702

        Reviewed by Noam Rosenthal.

        Adding a new type of permission request for Desktop Notifications (plus required code
        to register the handle for this requests).

        * UIProcess/API/qt/qwebpermissionrequest.cpp:
        (QWebPermissionRequestPrivate::QWebPermissionRequestPrivate):
        (QWebPermissionRequestPrivate):
        (QWebPermissionRequest::create):
        (QWebPermissionRequest::QWebPermissionRequest):
        (QWebPermissionRequest::setAllow):
        * UIProcess/API/qt/qwebpermissionrequest_p.h:
        * UIProcess/API/qt/tests/qmltests/WebView/tst_notification.qml: Added.
        * UIProcess/API/qt/tests/qmltests/common/notification.html: Added.
        * UIProcess/qt/QtWebPageUIClient.cpp:
        (WebKit::QtWebPageUIClient::QtWebPageUIClient):
        (WebKit::QtWebPageUIClient::policyForNotificationPermissionRequest):
        (WebKit):
        * UIProcess/qt/QtWebPageUIClient.h:

2012-07-12  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL][WK2] Browser crashes running BatteryStatus tests.
        https://bugs.webkit.org/show_bug.cgi?id=91065

        Reviewed by Kentaro Hara.

        clientInfo was incorrectly casted to BatteryProviderEfl in helper
        function. This patch fixes the issue.

        * UIProcess/API/efl/BatteryProvider.cpp:
        (toBatteryProvider):

2012-07-12  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] [WK2] regression(r122411) Crashes in Ewk_View
        https://bugs.webkit.org/show_bug.cgi?id=91068

        Reviewed by Kentaro Hara.

        Avoid using calloc() to allocate memory for structures
        and use new operator instead. calloc() causes unwanted
        behavior when allocing a structure which contains
        non-pointer types (e.g. a HashMap) and leads to
        crashes.

        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context::_Ewk_Context):
        * UIProcess/API/efl/ewk_intent.cpp:
        (_Ewk_Intent):
        (_Ewk_Intent::_Ewk_Intent):
        (ewk_intent_unref):
        (ewk_intent_new):
        * UIProcess/API/efl/ewk_intent_service.cpp:
        (_Ewk_Intent_Service):
        (_Ewk_Intent_Service::_Ewk_Intent_Service):
        (ewk_intent_service_unref):
        (ewk_intent_service_new):
        * UIProcess/API/efl/ewk_navigation_policy_decision.cpp:
        (_Ewk_Navigation_Policy_Decision):
        (_Ewk_Navigation_Policy_Decision::_Ewk_Navigation_Policy_Decision):
        (ewk_navigation_policy_decision_free):
        (ewk_navigation_policy_decision_new):
        * UIProcess/API/efl/ewk_url_request.cpp:
        (_Ewk_Url_Request):
        (_Ewk_Url_Request::_Ewk_Url_Request):
        (ewk_url_request_unref):
        (ewk_url_request_new):
        * UIProcess/API/efl/ewk_url_response.cpp:
        (_Ewk_Url_Response):
        (_Ewk_Url_Response::_Ewk_Url_Response):
        (ewk_url_response_unref):
        (ewk_url_response_new):
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::_Ewk_View_Private_Data):
        (_ewk_view_priv_new):
        (_ewk_view_priv_del):
        * UIProcess/API/efl/ewk_web_error.cpp:
        (_Ewk_Web_Error):
        (_Ewk_Web_Error::_Ewk_Web_Error):
        (ewk_web_error_free):
        (ewk_web_error_new):
        * UIProcess/API/efl/ewk_web_resource.cpp:
        (_Ewk_Web_Resource):
        (_Ewk_Web_Resource::_Ewk_Web_Resource):
        (ewk_web_resource_unref):
        (ewk_web_resource_new):

2012-07-11  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] ASSERT: "!m_viewportItem->isMoving()" in QtViewportHandler::flickMoveEnded()
        https://bugs.webkit.org/show_bug.cgi?id=90875

        Reviewed by Kenneth Rohde Christiansen.

        Since MultiPointTouchArea and PinchArea use the childMouseEventFilter
        method to filter touch events and because Flickable filters child mouse
        events the canvas calls this function before propagating the touch event
        to the WebView. Since Flickable does not accept touch events the canvas
        tries to propagate a synthesized mouse event through the base class
        childMouseEventFilter function which is accepted by Flickable and
        interferes with the input events we send to Flicakble hence messes up
        the internal state of the WebView.
        This patch reimplements the virtual childMouseEventFilter method so that all
        the mouse and touch events can be processed by WebKit before they arrive to
        Flickable.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebView::childMouseEventFilter):
        * UIProcess/API/qt/qquickwebview_p.h:

2012-07-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ debug build after r122425.

        * WebProcess/Cookies/soup/WebKitSoupCookieJarSqlite.cpp:
        (webkitSoupCookieJarSqliteNew):

2012-07-12  Sergio Villar Senin  <svillar@igalia.com>

        [WK2] Performance issue in FindController::findString
        https://bugs.webkit.org/show_bug.cgi?id=78132

        Reviewed by Anders Carlsson.

        FindController should not unmark all text matches by default. It
        will be done only if the string is not found or if
        markAllTextMatches() is called. This will allow clients to look
        for the next/previous without having to unmark() + mark() all the
        text matches for every single search operation.

        * UIProcess/API/gtk/WebKitFindController.cpp:
        (webKitFindControllerPerform):
        (webkit_find_controller_search_next):
        (webkit_find_controller_search_previous):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindUIAfterPageScroll):
        (WebKit::FindController::findString):

2012-07-12  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][EFL] Add policy client to Ewk_View
        https://bugs.webkit.org/show_bug.cgi?id=90953

        Reviewed by Kenneth Rohde Christiansen.

        Emit new "policy,decision,navigation" and "policy,decision,new,window"
        on the Ewk_View when policy decisions should be taken by the client.

        A new Ewk_Navigation_Policy_Decision type is introduced to provide
        information about the navigation request and make a decision.
        By default, the navigation request is accepted.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_navigation_policy_decision.cpp: Added.
        (_Ewk_Navigation_Policy_Decision):
        (ewk_navigation_policy_decision_free):
        (ewk_navigation_policy_navigation_type_get):
        (ewk_navigation_policy_mouse_button_get):
        (ewk_navigation_policy_modifiers_get):
        (ewk_navigation_policy_frame_name_get):
        (ewk_navigation_policy_request_get):
        (ewk_navigation_policy_decision_accept):
        (ewk_navigation_policy_decision_reject):
        (ewk_navigation_policy_decision_download):
        (ewk_navigation_policy_decision_new):
        * UIProcess/API/efl/ewk_navigation_policy_decision.h: Added.
        * UIProcess/API/efl/ewk_navigation_policy_decision_private.h: Added.
        * UIProcess/API/efl/ewk_private.h: Added.
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_base_add):
        (ewk_view_navigation_policy_decision):
        (ewk_view_new_window_policy_decision):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_policy_client.cpp: Added.
        (toEwkView):
        (decidePolicyForNavigationAction):
        (decidePolicyForNewWindowAction):
        (ewk_view_policy_client_attach):
        * UIProcess/API/efl/ewk_view_policy_client_private.h: Added.
        * UIProcess/API/efl/ewk_view_private.h:

2012-07-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add webkit_cookie_manager_set_persistent_storage() to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=83016

        Reviewed by Martin Robinson.

        Add a custom implementation of SoupCookieJarSqlite based on
        libsoup code but using WebCore SQLite classes. SoupCookieJarSqlite
        is part of libsoup-gnome, it's not a lot of code and it doesn't
        change often, so it's better to simply have our own implementation
        instead of making this important feature depend on an optional
        dependency. There are plans to move the implementation to libsoup,
        if that eventually happens we will remove our code to use libsoup
        directly.

        * GNUmakefile.am: Add new dirs to include path.
        * GNUmakefile.list.am: Add new files to compilation.
        * PlatformEfl.cmake: Ditto.
        * Shared/soup/SoupCookiePersistentStorageType.h: Added.
        * UIProcess/API/gtk/WebKitCookieManager.cpp:
        (webkit_cookie_manager_set_persistent_storage): Set a persistent
        storage for cookies.
        * UIProcess/API/gtk/WebKitCookieManager.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols
        * UIProcess/API/gtk/tests/TestCookieManager.cpp:
        (testCookieManagerPersistentStorage):
        (serverCallback):
        (beforeAll):
        (afterAll):
        * UIProcess/WebCookieManagerProxy.h:
        (WebCookieManagerProxy): Add setCookiePersistentStorage() method
        when using soup.
        * UIProcess/soup/WebCookieManagerProxySoup.cpp: Added.
        (WebKit::WebCookieManagerProxy::setCookiePersistentStorage): Send
        SetCookiePersistentStorage message to the web process.
        * WebProcess/Cookies/WebCookieManager.h:
        (WebCookieManager): Add setCookiePersistentStorage() method when
        using soup.
        * WebProcess/Cookies/WebCookieManager.messages.in: Add
        SetCookiePersistentStorage message when using soup.
        * WebProcess/Cookies/soup/WebCookieManagerSoup.cpp:
        (WebKit::WebCookieManager::setCookiePersistentStorage): Create a
        new cookie jar for the given filename and storage type and add it
        to the soup session.
        * WebProcess/Cookies/soup/WebKitSoupCookieJarSqlite.cpp: Added.
        (webkitSoupCookieJarSqliteOpenDatabase): Open SQLite database.
        (webkitSoupCookieJarSqliteCreateTable): Create moz_cookies if it
        doesn't exist.
        (webkitSoupCookieJarSqliteLoad): Load the initial set of cookies
        from the database.
        (webkitSoupCookieJarSqliteInsertCookie): Insert a new cookie into
        the database.
        (webkitSoupCookieJarSqliteDeleteCookie): Delete an exising cookie
        from the database.
        (webkitSoupCookieJarSqliteChanged): Insert/delete cookies
        depending on the change.
        (webkitSoupCookieJarSqliteFinalize):
        (webkit_soup_cookie_jar_sqlite_init):
        (webkit_soup_cookie_jar_sqlite_class_init):
        (webkitSoupCookieJarSqliteNew):
        * WebProcess/Cookies/soup/WebKitSoupCookieJarSqlite.h: Added.

2012-07-11  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][EFL] Ewk_View should provide more resource loading notifications
        https://bugs.webkit.org/show_bug.cgi?id=90601

        Reviewed by Antonio Gomes.

        Add new "resource,request,sent", "resource,request,response",
        "resource,request,failed" and "resource,request,finished" to
        Ewk_View in order to notify the clients of the main resource
        load state changes.

        Introduce new Ewk_Url_Response type that is used to provide
        information to the clients regarding the resource load
        responses that are received.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_url_response.cpp: Added.
        (_Ewk_Url_Response):
        (ewk_url_response_ref):
        (ewk_url_response_unref):
        (ewk_url_response_url_get):
        (ewk_url_response_status_code_get):
        (ewk_url_response_mime_type_get):
        (ewk_url_response_new):
        * UIProcess/API/efl/ewk_url_response.h: Added.
        * UIProcess/API/efl/ewk_url_response_private.h: Added.
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (ewk_view_resource_load_initiated):
        (ewk_view_resource_load_response):
        (ewk_view_resource_load_failed):
        (ewk_view_resource_load_finished):
        (ewk_view_resource_request_sent):
        (ewk_view_load_provisional_started):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/ewk_view_resource_load_client.cpp:
        (toEwkView):
        (didInitiateLoadForResource):
        (didSendRequestForResource):
        (didReceiveResponseForResource):
        (didFinishLoadForResource):
        (didFailLoadForResource):
        (ewk_view_resource_load_client_attach):

2012-07-11  Mark Rowe  <mrowe@apple.com>

        Fix a logic error in the #if so that the correct code is compiled on Snow Leopard.

        I introduced this in r122403 when I inverted the sense of the #if.

        * UIProcess/mac/WKFullScreenWindowController.mm:

2012-07-11  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/91024> Build against the latest SDK when targeting older OS X versions.

        Reviewed by Dan Bernstein.

        The deployment target is already set to the version that we're targeting, and it's that setting
        which determines which functionality from the SDK is available to us.

        * Configurations/Base.xcconfig:

2012-07-11  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/91022> WebFullScreenController and WKFullScreenWindowController shouldn't add unprefixed methods to AppKit classes

        Reviewed by Dan Bernstein.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (convertRectToScreen): Add a static helper method that calls through to -[NSWindow convertRectToScreen:] on OS versions where it exists
        but otherwise provides a compatibility implementation of it.
        (-[WKFullScreenWindowController enterFullScreen:]): Call our new helper.

2012-07-11  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/91015> Remove BUILDING_ON / TARGETING macros in favor of system availability macros

        This removal was handled by a script that translates the relevant macros in to the equivalent checks
        using the system availability macros.

        Reviewed by Filip Pizlo.

        * Shared/DictionaryPopupInfo.cpp:
        * Shared/DictionaryPopupInfo.h:
        * Shared/mac/PasteboardTypes.mm:
        * Shared/mac/WebEventFactory.mm:
        * UIProcess/API/mac/PDFViewController.mm:
        * UIProcess/API/mac/PageClientImpl.mm:
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/Launcher/mac/DynamicLinkerEnvironmentExtractor.h:
        * UIProcess/Launcher/mac/DynamicLinkerEnvironmentExtractor.mm:
        * UIProcess/Launcher/mac/EnvironmentVariables.cpp:
        * UIProcess/Launcher/mac/EnvironmentVariables.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/TextCheckerMac.mm:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        * UIProcess/mac/WebContextMac.mm:
        * UIProcess/mac/WebPageProxyMac.mm:
        * WebKit2Prefix.h:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        * WebProcess/Plugins/Netscape/mac/NetscapeSandboxFunctions.mm:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        * WebProcess/com.apple.WebProcess.sb.in:
        * WebProcess/mac/KeychainItemShimMethods.mm:
        * WebProcess/mac/SecItemShimMethods.mm:
        * WebProcess/mac/WebProcessMac.mm:
        * WebProcess/mac/WebProcessMainMac.mm:
        * WebProcess/mac/WebProcessShim.mm:

2012-07-11  Simon Fraser  <simon.fraser@apple.com>

        pagesPerView param is misnamed for WKPageSetPageLength()
        https://bugs.webkit.org/show_bug.cgi?id=91033

        Rubber-stamped by Dan Bernstein.

        The name of the second parameter to WKPageSetPageLength(),
        'pagesPerView', was confusing; it's a page size (normally width)
        in pixels.

        * UIProcess/API/C/WKPagePrivate.h:

2012-07-11  Anders Carlsson  <andersca@apple.com>

        Add -Wtautological-compare and -Wsign-compare warning flags
        https://bugs.webkit.org/show_bug.cgi?id=90994

        Reviewed by Mark Rowe.

        * Configurations/Base.xcconfig:

2012-07-11  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt][WK2] Test actual rendering results in API tests
        https://bugs.webkit.org/show_bug.cgi?id=80609

        Reviewed by Alexis Menard.

        Added a very basic test to tst_QQuickWebView to make sure rendering actually occurs.

        * UIProcess/API/qt/tests/qquickwebview/tst_qquickwebview.cpp:
        (tst_QQuickWebView):
        (tst_QQuickWebView::basicRenderingSanity):

2012-07-11  Mark Rowe  <mrowe@apple.com>

        Add a Mountain Lion version of libWebKitSystemInterface.a.

        Reviewed by John Sullivan.

        * Configurations/DebugRelease.xcconfig: Look for the library under its expected name.

2012-07-11  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] QRawWebView should notify when rendering is done, so that pixel results can be grabbed at the appropriate moment.
        https://bugs.webkit.org/show_bug.cgi?id=90641

        Reviewed by Jocelyn Turcotte.

        Implement LayerTreeCoordinator::forceRepaint with logic equivalent to the one in
        LayerTreeHostCA. If we flush the layers synchronously when forceRepaint is called,when
        WKPageForceRepaint returns we are guaranteed to have an up-to-date image, as the visible
        tiles are also synchronously updated.

        * UIProcess/API/qt/tests/qrawwebview/tst_qrawwebview.cpp:
        (WebView::WebView):
        (WebView::viewNeedsDisplay):
        (WebView::frameLoaded):
        (WebView):
        (WebView::onRepaintDone):
        (WebView::finishForceRepaint):
        (WebView::finishFirstLayoutForFrame):
        (tst_qrawwebview::doNoBackground1):
        (tst_qrawwebview::doNoBackground2):
        (tst_qrawwebview::doNoBackground3):
        (tst_qrawwebview::run):
            The test for QRawWebView has been updated to use the WebKit2 ForcePaint API prior to
            generating the pixel results. This has exposed a timing bug in the test - setting the
            transparentBackground property of a page has to be done before it's created. This has
            been fixed in the test.

        * WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::forceRepaint):
        (WebKit::LayerTreeCoordinator::performScheduledLayerFlush):
        (WebKit):

2012-07-11  MORITA Hajime  <morrita@google.com>

        WebCoreSupport needs objects each of which follows major WebCore objects
        https://bugs.webkit.org/show_bug.cgi?id=88499

        Reviewed by Alexey Proskuryakov.

        Added exporting symbols.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-07-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r122318.
        http://trac.webkit.org/changeset/122318
        https://bugs.webkit.org/show_bug.cgi?id=90961

        It made 11 fast/events/touch fail (Requested by bbandix on
        #webkit).

        * UIProcess/API/qt/qquickwebview.cpp:
        * UIProcess/API/qt/qquickwebview_p.h:

2012-07-11  Keunsoon Lee  <keunsoon.lee@samsung.com>

        [EFL][Wk2] WebErrorsEfl.cpp needs to return non-empty errors
        https://bugs.webkit.org/show_bug.cgi?id=90688

        Reviewed by Hajime Morita.

        Return meaningful error for each case.

        * WebProcess/WebCoreSupport/efl/WebErrorsEfl.cpp:
        (WebKit::cancelledError): create ResourceError for "request canceled".
        (WebKit::blockedError): create ResourceError for "request blocked".
        (WebKit::cannotShowURLError): create ResourceError for "cannot show url".
        (WebKit::interruptedForPolicyChangeError): create ResourceError for "Frame load interrupted by policy change".
        (WebKit::cannotShowMIMETypeError): create ResourceError for "Cannot show mimetype".
        (WebKit::fileDoesNotExistError): create ResourceError for "File does not exist".
        (WebKit::pluginWillHandleLoadError): create ResourceError for "Plugin will handle load".

2012-07-11  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Fix wheel scrolling for simple pages
        https://bugs.webkit.org/show_bug.cgi?id=90793

        Reviewed by Kenneth Rohde Christiansen.

        Call WebPage::setFixedLayoutSize in setResizesToContentsUsingLayoutSize
        instead of setting the view size manually and scheduling a relayout.
        Since setFixedLayoutSize forces a relayout it also updates the scrollbars
        after the visible rect is available.
        This fixes scrolling with wheel events for a QML WebView loading a simple
        local page which previously ended up in a state where scrolling was disabled
        because the scrollbar update happened before the correct visible rect size was
        available.

        Add a QML test and infrastructure to QWebKitTest to cover this case.

        * UIProcess/API/qt/qwebkittest.cpp:
        (QWebKitTest::wheelEvent):
        * UIProcess/API/qt/qwebkittest_p.h:
        * UIProcess/API/qt/tests/qmltests/WebView/tst_wheelEventHandling.qml: Added.
        * UIProcess/API/qt/tests/qmltests/common/test4.html: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setResizesToContentsUsingLayoutSize):

2012-07-11  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] ASSERT: "!m_viewportItem->isMoving()" in QtViewportHandler::flickMoveEnded()
        https://bugs.webkit.org/show_bug.cgi?id=90875

        Reviewed by Kenneth Rohde Christiansen.

        Since MultiPointTouchArea and PinchArea use the childMouseEventFilter
        method to filter touch events too, and because Flickable filters child
        mouse events the canvas calls this function before propagating the touch
        event to the WebView. Since Flickable does not accept touch events the
        canvas tries to propagate a synthesized mouse event through the base
        class childMouseEventFilter function which is accepted by Flickable and
        interferes with the input events we send to Flicakble hence messes up
        the internal state of the WebView.
        This patch reimplements the virtual childMouseEventFilter method so that all
        the mouse and touch events can be processed by WebKit before they arrive to
        Flickable.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebView::childMouseEventFilter):
        * UIProcess/API/qt/qquickwebview_p.h:

2012-07-10  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][EFL] Add Battery Status Provider
        https://bugs.webkit.org/show_bug.cgi?id=90543

        Reviewed by Kenneth Rohde Christiansen.

        Define a battery status provider for WebKit2 EFL which
        relies on WebCore::BatteryProviderEfl.

        * CMakeLists.txt: Add WebCore/Modules/battery to include
        paths.
        * PlatformEfl.cmake: Add BatteryProvider class to CMake.
        * UIProcess/API/efl/BatteryProvider.cpp: Added.
        (toBatteryProvider):
        (startUpdatingCallback):
        (stopUpdatingCallback):
        (BatteryProvider::~BatteryProvider):
        (BatteryProvider::create):
        (BatteryProvider::BatteryProvider):
        (BatteryProvider::startUpdating):
        (BatteryProvider::stopUpdating):
        (BatteryProvider::didChangeBatteryStatus):
        * UIProcess/API/efl/BatteryProvider.h: Added.
        (BatteryProvider):
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context): Add BatteryProvider to Ewk_Context.
        (createDefaultEwkContext):
        (ewk_context_default_get):

2012-07-10  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] Enable antialiasing for TextureMapper
        https://bugs.webkit.org/show_bug.cgi?id=90915

        Reviewed by Martin Robinson.

        Enable the new antialiasing functionality for WebLayerTreeRendering.
        This will make one-tile layers antialiased when using UI_SIDE_COMPOSITING.

        * UIProcess/WebLayerTreeRenderer.cpp:
        (WebKit::WebLayerTreeRenderer::ensureRootLayer):

2012-07-10  Adam Barth  <abarth@webkit.org>

        WebCore::Settings for Hixie76 WebSocket protocol doesn't do anything and should be removed
        https://bugs.webkit.org/show_bug.cgi?id=90910

        Reviewed by Eric Seidel.

        * Shared/WebPreferencesStore.h:
        (WebKit):
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetHixie76WebSocketProtocolEnabled):
        (WKPreferencesGetHixie76WebSocketProtocolEnabled):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2012-07-10  Helder Correia  <helder.correia@nokia.com>

        [Qt] Repaint counter for accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=90116

        Reviewed by Noam Rosenthal.

        No new tests, just introducing a debug feature.

        For this feature to be enabled, the environment variable
        QT_WEBKIT_SHOW_COMPOSITING_DEBUG_VISUALS must be set to 1. Once enabled,
        both repaint counters and tile borders will be painted.

        Important notes:
        - Only WebKit2 is targetted for now.
        - There is no integration with Preferences. That aproach was
        taken initially but revealed complex and overkill for such a
        debugging-only functionality. Thus, to disable it simply restart with
        the environment variable unset or set to some other value.

        A Qt-specific drawRepaintCounter() function was added to
        TextureMapperGL. A QImage is used as scratch buffer to paint borders and
        counters. It is then uploaded to a BitmapTexture acquired from the pool
        and finally draw by TextureMapper. The actual compositing happens inside
        LayerBackingStore::paintToTextureMapper(). Each LayerBackingStoreTile
        now has a repaint counter which gets incremented in
        LayerBackingStore::updateTile().

        * UIProcess/texmap/LayerBackingStore.cpp:
        (WebKit::LayerBackingStore::updateTile):
        (WebKit):
        (WebKit::shouldShowTileDebugVisuals):
        (WebKit::LayerBackingStore::paintToTextureMapper):
        * UIProcess/texmap/LayerBackingStore.h:
        (WebKit::LayerBackingStoreTile::LayerBackingStoreTile):
        (LayerBackingStoreTile):
        (WebKit::LayerBackingStoreTile::incrementRepaintCount):
        (WebKit::LayerBackingStoreTile::repaintCount):

2012-07-10  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [WK2] Add Vibration API support for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=90058

        Reviewed by Anders Carlsson.

        Add support for Vibration API to WebKit2.

        * CMakeLists.txt:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Platform/CoreIPC/MessageID.h:
        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        * Target.pri:
        * UIProcess/API/C/WKAPICast.h:
        (WebKit):
        * UIProcess/API/C/WKVibration.cpp: Added.
        (WKVibrationGetTypeID):
        (WKVibrationSetProvider):
        * UIProcess/API/C/WKVibration.h: Added.
        * UIProcess/WebVibrationProvider.cpp: Added.
        (WebKit):
        (WebKit::WebVibrationProvider::vibrate):
        (WebKit::WebVibrationProvider::cancelVibration):
        * UIProcess/WebVibrationProvider.h: Added.
        (WebKit):
        (WebVibrationProvider):
        * UIProcess/WebVibrationProxy.cpp: Added.
        (WebKit):
        (WebKit::WebVibrationProxy::create):
        (WebKit::WebVibrationProxy::WebVibrationProxy):
        (WebKit::WebVibrationProxy::~WebVibrationProxy):
        (WebKit::WebVibrationProxy::invalidate):
        (WebKit::WebVibrationProxy::initializeProvider):
        (WebKit::WebVibrationProxy::didReceiveMessage):
        (WebKit::WebVibrationProxy::vibrate):
        (WebKit::WebVibrationProxy::cancelVibration):
        * UIProcess/WebVibrationProxy.h: Added.
        (CoreIPC):
        (WebKit):
        (WebVibrationProxy):
        (WebKit::WebVibrationProxy::clearContext):
        (WebKit::WebVibrationProxy::type):
        * UIProcess/WebVibrationProxy.messages.in: Added.
        * WebProcess/WebCoreSupport/WebVibrationClient.cpp: Added.
        (WebKit):
        (WebKit::WebVibrationClient::vibrate):
        (WebKit::WebVibrationClient::cancelVibration):
        (WebKit::WebVibrationClient::vibrationDestroyed):
        * WebProcess/WebCoreSupport/WebVibrationClient.h: Added.
        (WebKit):
        (WebVibrationClient):
        (WebKit::WebVibrationClient::WebVibrationClient):
        (WebKit::WebVibrationClient::~WebVibrationClient):

2012-07-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to clear the cache to WebKit2 GTK+
        https://bugs.webkit.org/show_bug.cgi?id=90856

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_clear_cache): Call
        WKResourceCacheManagerClearCacheForAllOrigins() to clear all
        resources currently cached.
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbol.

2012-07-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r122178.
        http://trac.webkit.org/changeset/122178
        https://bugs.webkit.org/show_bug.cgi?id=90857

        browser tests, PrerenderBrowserTest.PrerenderFavicon and other
        tests, started to fail (Requested by hayato on #webkit).

        * win/WebKit2.def:

2012-07-09  Matt Falkenhagen  <falken@chromium.org>

        Add ENABLE_DIALOG_ELEMENT and skeleton files
        https://bugs.webkit.org/show_bug.cgi?id=90521

        Reviewed by Kent Tamura.

        * Configurations/FeatureDefines.xcconfig:

2012-07-09  Pete Williamson  <petewil@google.com>

        Export the iconURL list to make it available to the Internals class for testing
        https://bugs.webkit.org/show_bug.cgi?id=88665

        Reviewed by Kent Tamura.

        * win/WebKit2.def: export the DocumentL::iconURLs function

2012-07-09  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] Add missing Battery Status API integration to WebContext and WebPage
        https://bugs.webkit.org/show_bug.cgi?id=90784

        Reviewed by Anders Carlsson.

        Integrate Battery Status API to WebPage, WebContext and
        properly route messages to the WebBatteryManagerProxy.
        Without this, the Battery Status tests are crashing for
        WebKit2.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetBatteryManager):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::disconnectProcess):
        (WebKit::WebContext::didReceiveMessage):
        * UIProcess/WebContext.h:
        (WebKit):
        (WebContext):
        (WebKit::WebContext::batteryManagerProxy):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        * WebProcess/WebCoreSupport/WebBatteryClient.cpp:
        (WebKit::WebBatteryClient::setController):
        (WebKit):
        * WebProcess/WebCoreSupport/WebBatteryClient.h:
        (WebBatteryClient):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):

2012-07-09  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] [WK2] ASSERTION FAILED: !HashTranslator::equal(KeyTraits::emptyValue(), key)
        https://bugs.webkit.org/show_bug.cgi?id=90464

        Reviewed by Daniel Bates.

        HashMap has the property that 0 is the empty value for integer
        keys, so do not use 0 as a key in the HashMap.

        * Platform/efl/WorkQueueEfl.cpp:
        (WorkQueue::dispatchAfterDelay):

2012-07-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add a setting to enable/disable page cache to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=90773

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webKitSettingsSetProperty):
        (webKitSettingsGetProperty):
        (webkit_settings_class_init):
        (webkit_settings_get_enable_page_cache):
        (webkit_settings_set_enable_page_cache):
        * UIProcess/API/gtk/WebKitSettings.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:
        * UIProcess/API/gtk/tests/TestWebKitSettings.cpp:
        (testWebKitSettings):

2012-07-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r122107.
        http://trac.webkit.org/changeset/122107
        https://bugs.webkit.org/show_bug.cgi?id=90794

        Build failure on Mac debug bots (Requested by falken_ on
        #webkit).

        * Configurations/FeatureDefines.xcconfig:

2012-07-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix inspector detach when inspector was attached by the client
        https://bugs.webkit.org/show_bug.cgi?id=90763

        Reviewed by Martin Robinson.

        When the inspector is detached, we are unconditionally removing it
        from the inspected view, but if the inspector was attached by the
        client, the parent might be another widget.

        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformDetach): Remove the inspector
        view from its parent widget.

2012-07-09  Matt Falkenhagen  <falken@chromium.org>

        Add ENABLE_DIALOG_ELEMENT and skeleton files
        https://bugs.webkit.org/show_bug.cgi?id=90521

        Reviewed by Kent Tamura.

        * Configurations/FeatureDefines.xcconfig:

2012-07-09  Dan Bernstein  <mitz@apple.com>

        Fix the Mac build when codesign_allocate is not installed at /usr/bin.

        * PluginProcess/mac/add-entitlements.sh: Let codesign(1) know where the codesign_allocate
        tool is by setting the CODESIGN_ALLOCATE environment variable to its path as obtained with
        xcrun.

2012-07-06  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] Add support for Network Information API
        https://bugs.webkit.org/show_bug.cgi?id=89870

        Reviewed by Anders Carlsson.

        Add Network Information API support for WebKit2.

        * CMakeLists.txt:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * Platform/CoreIPC/MessageID.h:
        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        * Shared/WebNetworkInfo.cpp: Added.
        (WebKit):
        (WebKit::WebNetworkInfo::WebNetworkInfo):
        (WebKit::WebNetworkInfo::~WebNetworkInfo):
        (WebKit::WebNetworkInfo::Data::encode):
        (WebKit::WebNetworkInfo::Data::decode):
        * Shared/WebNetworkInfo.h: Added.
        (WebKit):
        (WebNetworkInfo):
        (Data):
        (WebKit::WebNetworkInfo::create):
        (WebKit::WebNetworkInfo::bandwidth):
        (WebKit::WebNetworkInfo::metered):
        (WebKit::WebNetworkInfo::data):
        (WebKit::WebNetworkInfo::type):
        * Target.pri:
        * UIProcess/API/C/WKAPICast.h:
        (WebKit):
        * UIProcess/API/C/WKNetworkInfoManager.cpp: Added.
        (WKNetworkInfoManagerGetTypeID):
        * UIProcess/API/C/WKNetworkInfoManager.h: Added.
        * UIProcess/WebNetworkInfoManagerProxy.cpp: Added.
        (WebKit):
        (WebKit::WebNetworkInfoManagerProxy::create):
        (WebKit::WebNetworkInfoManagerProxy::WebNetworkInfoManagerProxy):
        (WebKit::WebNetworkInfoManagerProxy::~WebNetworkInfoManagerProxy):
        (WebKit::WebNetworkInfoManagerProxy::invalidate):
        (WebKit::WebNetworkInfoManagerProxy::initializeProvider):
        (WebKit::WebNetworkInfoManagerProxy::providerDidChangeNetworkInformation):
        (WebKit::WebNetworkInfoManagerProxy::didReceiveMessage):
        (WebKit::WebNetworkInfoManagerProxy::startUpdating):
        (WebKit::WebNetworkInfoManagerProxy::stopUpdating):
        (WebKit::WebNetworkInfoManagerProxy::getBandwidth):
        (WebKit::WebNetworkInfoManagerProxy::isMetered):
        * UIProcess/WebNetworkInfoManagerProxy.h: Added.
        (CoreIPC):
        (WebKit):
        (WebNetworkInfoManagerProxy):
        (WebKit::WebNetworkInfoManagerProxy::clearContext):
        (WebKit::WebNetworkInfoManagerProxy::type):
        * UIProcess/WebNetworkInfoManagerProxy.messages.in: Added.
        * UIProcess/WebNetworkInfoProvider.cpp: Added.
        (WebKit):
        (WebKit::WebNetworkInfoProvider::startUpdating):
        (WebKit::WebNetworkInfoProvider::stopUpdating):
        (WebKit::WebNetworkInfoProvider::bandwidth):
        (WebKit::WebNetworkInfoProvider::metered):
        * UIProcess/WebNetworkInfoProvider.h: Added.
        (WebKit):
        (WebNetworkInfoProvider):
        * WebKit2.pri:
        * WebProcess/NetworkInfo/WebNetworkInfoManager.cpp: Added.
        (WebKit):
        (WebKit::WebNetworkInfoManager::WebNetworkInfoManager):
        (WebKit::WebNetworkInfoManager::~WebNetworkInfoManager):
        (WebKit::WebNetworkInfoManager::didReceiveMessage):
        (WebKit::WebNetworkInfoManager::registerWebPage):
        (WebKit::WebNetworkInfoManager::unregisterWebPage):
        (WebKit::WebNetworkInfoManager::bandwidth):
        (WebKit::WebNetworkInfoManager::metered):
        (WebKit::WebNetworkInfoManager::didChangeNetworkInformation):
        * WebProcess/NetworkInfo/WebNetworkInfoManager.h: Added.
        (CoreIPC):
        (WebKit):
        (WebNetworkInfoManager):
        * WebProcess/NetworkInfo/WebNetworkInfoManager.messages.in: Added.
        * WebProcess/WebCoreSupport/WebNetworkInfoClient.cpp: Added.
        (WebKit):
        (WebKit::WebNetworkInfoClient::~WebNetworkInfoClient):
        (WebKit::WebNetworkInfoClient::bandwidth):
        (WebKit::WebNetworkInfoClient::metered):
        (WebKit::WebNetworkInfoClient::startUpdating):
        (WebKit::WebNetworkInfoClient::stopUpdating):
        * WebProcess/WebCoreSupport/WebNetworkInfoClient.h: Added.
        (WebKit):
        (WebNetworkInfoClient):
        (WebKit::WebNetworkInfoClient::WebNetworkInfoClient):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/WebProcess.h:
        (WebProcess):
        (WebKit::WebProcess::networkInfoManager):

2012-07-06  Jessie Berlin  <jberlin@apple.com>

        WKContext should ask for its injected bundle initialization user data when it needs it so the
        client doesn't have to keep it up to date.
        https://bugs.webkit.org/show_bug.cgi?id=90627

        Reviewed by Anders Carlsson.

        Add a getInjectedBundleInitializationUserData callback to WKContextInjectedBundleClient.

        * Shared/APIClientTraits.cpp:
        Allow the WKContextInjectedBundleClient API to be versioned.
        * Shared/APIClientTraits.h:

        * UIProcess/API/C/WKContext.h:
        Add the callback and bump the version of WKContextInjectedBundleClient.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureWebProcess):
        Prefer any user data returned when the callback is invoked over that set with
        WKContextSetInitializationUserDataForInjectedBundle.

        * UIProcess/WebContextInjectedBundleClient.cpp:
        (WebKit::WebContextInjectedBundleClient::getInjectedBundleInitializationUserData):
        Invoke the callback if the client has registered for it.
        * UIProcess/WebContextInjectedBundleClient.h:

2012-07-06  Jessie Berlin  <jberlin@apple.com>

        WebContext::injectedBundleInitializationUserData() is unused, should be removed
        https://bugs.webkit.org/show_bug.cgi?id=90486

        Reviewed by Anders Carlsson.

        * UIProcess/WebContext.h:
        Remove it.

2012-07-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add site specific quirks setting to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=90663

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webKitSettingsSetProperty):
        (webKitSettingsGetProperty):
        (webkit_settings_class_init):
        (webkit_settings_get_enable_site_specific_quirks):
        (webkit_settings_set_enable_site_specific_quirks):
        * UIProcess/API/gtk/WebKitSettings.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:
        * UIProcess/API/gtk/tests/TestWebKitSettings.cpp:
        (testWebKitSettings):

2012-07-06  Dominik Röttsches  <dominik.rottsches@intel.com>

        ProcessLauncher's WorkQueue's name is too long on Windows
        https://bugs.webkit.org/show_bug.cgi?id=44041

        Reviewed by Andreas Kling.

        Shorten thread name for process launcher so that we can silence the warning
        for thread names getting truncated under VisualStudio -
        see createThread() in  Threading.cpp.

        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::processLauncherWorkQueue):

2012-07-06  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] WebKit-EFL headers do not build with gcc < 4.6
        https://bugs.webkit.org/show_bug.cgi?id=90681

        Unreviewed EFL build fix.

        Remove several forward declarations from ewk_view
        header to avoid typedef redefinitions which are
        illegal in C.

        * UIProcess/API/efl/ewk_view.h:

2012-07-06  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Buildfix for newer Qt5
        https://bugs.webkit.org/show_bug.cgi?id=90519

        Reviewed by Tor Arne Vestbø.

        * UIProcess/API/qt/qwebkittest.cpp: Include qpa/qwindowsysteminterface.h instead of deprecated qwindowsysteminterface_qpa.h.

2012-07-06  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        [Qt] Adjust to changed generation of master include file

        The responsiblity for creating the master include was moved out of syncqt.
        @ignore_for_master_contents still stays, as syncqt (ab-)uses this for
        determining whether a header is private.

        https://bugs.webkit.org/show_bug.cgi?id=90461

        Reviewed by Tor Arne Vestbø.

        * UIProcess/API/qt/tests/bytearraytestdata.h:
        * UIProcess/API/qt/tests/testwindow.h:

2012-07-05  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][EFL] Ewk_View needs to report load status changes
        https://bugs.webkit.org/show_bug.cgi?id=90566

        Reviewed by Kenneth Rohde Christiansen.

        Add new "load,finished", "load,provisional,failed",
        "load,provisional,redirect" and "load,provisional,started"
        signals on the Ewk_View to notify the client of different
        load state changes.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_load_finished):
        (ewk_view_load_provisional_failed):
        (ewk_view_load_provisional_redirect):
        (ewk_view_load_provisional_started):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        (didFinishLoadForFrame):
        (didFailLoadWithErrorForFrame):
        (didStartProvisionalLoadForFrame):
        (didReceiveServerRedirectForProvisionalLoadForFrame):
        (didFailProvisionalLoadWithErrorForFrame):
        (ewk_view_loader_client_attach):
        * UIProcess/API/efl/ewk_view_private.h:

2012-07-05  Luiz Agostini  <luiz.agostini@nokia.com>

        [Qt] Transform should be applied to the clip rect in QRawWebView::paint
        https://bugs.webkit.org/show_bug.cgi?id=90652

        Reviewed by Kenneth Rohde Christiansen.

        Applying the transformation matrix to the clip rect in QRawWebView::paint.

        * UIProcess/API/qt/raw/qrawwebview.cpp:
        (QRawWebView::paint):

2012-07-05  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][EFL] Ewk_View should provide API to set/get device pixel ratio
        https://bugs.webkit.org/show_bug.cgi?id=90590

        Reviewed by Kenneth Rohde Christiansen.

        Add API to Ewk_View so retrieve and set the device
        pixel ratio.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_device_pixel_ratio_set):
        (ewk_view_device_pixel_ratio_get):
        * UIProcess/API/efl/ewk_view.h:

2012-07-05  Anders Carlsson  <andersca@apple.com>

        Type-ahead doesn't work in options inside optgroups
        https://bugs.webkit.org/show_bug.cgi?id=90647
        <rdar://problem/5604894>

        Reviewed by Dan Bernstein.

        Set the title of the menu item to a string that doesn't contain any leading or trailing whitespace.

        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::populate):

2012-07-05  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] Add C API for Battery Status API
        https://bugs.webkit.org/show_bug.cgi?id=90545

        Reviewed by Anders Carlsson.

        Add C API for WKBatteryManager and WKBatteryStatus
        so that clients can support the Battery Status API
        in WebKit2.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * UIProcess/API/C/WKBatteryManager.cpp:
        (WKBatteryManagerProviderDidChangeBatteryStatus):
        (WKBatteryManagerProviderUpdateBatteryStatus):
        * UIProcess/API/C/WKBatteryStatus.cpp: Copied from Source/WebKit2/UIProcess/API/C/WKBatteryManager.cpp.
        (WKBatteryStatusGetTypeID):
        (WKBatteryStatusCreate):
        * UIProcess/API/C/WKBatteryStatus.h: Copied from Source/WebKit2/UIProcess/API/C/WKBatteryManager.cpp.

2012-07-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r121899.
        http://trac.webkit.org/changeset/121899
        https://bugs.webkit.org/show_bug.cgi?id=90623

        Unauthorized WK2 API breakage (Requested by andersca on
        #webkit).

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toCopiedURLAPI):

2012-07-05  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] WTR crashes if a URL is passed as a parameter
        https://bugs.webkit.org/show_bug.cgi?id=88093

        Reviewed by Zoltan Herczeg.

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toCopiedURLAPI):
        Don't special case null string. It's handled
        fine by WebURL and passing 0 is not suitable
        to the API.

2012-07-05  Dongwoo Im  <dw.im@samsung.com>

        [EFL] Enable the CUSTOM_SCHEME_HANDLER feature as default.
        https://bugs.webkit.org/show_bug.cgi?id=88608

        Reviewed by Hajime Morita.

        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebKit::WebChromeClient::isProtocolHandlerRegistered): Add a stub function.
        (WebKit::WebChromeClient::unregisterProtocolHandler): Add a stub function.
        (WebChromeClient):

2012-07-05  Ryuan Choi  <ryuan.choi@samsung.com>

        [Wk2][EFL] EFL needs a WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=87659

        Reviewed by Kenneth Rohde Christiansen.

        * PlatformEfl.cmake: Added WKImageCairo.cpp in source list.

2012-07-05  Hyerim Bae  <hyerim.bae@samsung.com>

        [EFL][WK2] Add ewk_view_reload_bypass_cache API.
        https://bugs.webkit.org/show_bug.cgi?id=89413

        Reviewed by Kenneth Rohde Christiansen.

        Add API, which is for reloading documents without cache.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_reload_bypass_cache):
        * UIProcess/API/efl/ewk_view.h:

2012-07-05  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][EFL] Ewk_View needs API to load HTML data
        https://bugs.webkit.org/show_bug.cgi?id=90540

        Reviewed by Kenneth Rohde Christiansen.

        Add method to Ewk_View to load provided HTML data.
        This is used for e.g. when an URL cannot be reached
        and we need to display an error page.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_html_load):
        * UIProcess/API/efl/ewk_view.h:

2012-07-05  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][EFL] Ewk_View needs to report new resource requests
        https://bugs.webkit.org/show_bug.cgi?id=90577

        Reviewed by Kenneth Rohde Christiansen.

        Add new "resource,request,new" signal to Ewk_View to
        notify clients of the resource requests being initiated.
        New Ewk_Url_Request and Ewk_Web_Resource types are
        introduced in order to provide the clients with the
        needed information regarding the resource requests.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_url_request.cpp: Added.
        (_Ewk_Url_Request):
        (ewk_url_request_ref):
        (ewk_url_request_unref):
        (ewk_url_request_url_get):
        (ewk_request_first_party_get):
        (ewk_url_request_http_method_get):
        (ewk_url_request_new):
        * UIProcess/API/efl/ewk_url_request.h: Added.
        * UIProcess/API/efl/ewk_url_request_private.h: Added.
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_base_add):
        (ewk_view_resource_load_initiated):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/ewk_view_resource_load_client.cpp: Added.
        (didInitiateLoadForResource):
        (ewk_view_resource_load_client_attach):
        * UIProcess/API/efl/ewk_view_resource_load_client_private.h: Added.
        * UIProcess/API/efl/ewk_web_resource.cpp: Added.
        (_Ewk_Web_Resource):
        (ewk_web_resource_ref):
        (ewk_web_resource_unref):
        (ewk_web_resource_uri_get):
        (ewk_web_resource_new):
        (ewk_web_resource_main_get):
        * UIProcess/API/efl/ewk_web_resource.h: Added.
        * UIProcess/API/efl/ewk_web_resource_private.h: Added.

2012-07-04  John Mellor  <johnme@chromium.org>

        Text Autosizing: Add compile flag and runtime setting
        https://bugs.webkit.org/show_bug.cgi?id=87394

        This patch renames Font Boosting to Text Autosizing.

        Reviewed by Adam Barth.

        * Configurations/FeatureDefines.xcconfig:

2012-07-04  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Ewk_View should report load errors
        https://bugs.webkit.org/show_bug.cgi?id=90479

        Reviewed by Kenneth Rohde Christiansen.

        The Ewk_View now emits a "load,error" signal when the
        main frame fails loading. Information about the error
        is provided via the new Ewk_Web_Error type.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_load_error):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        (didFailLoadWithErrorForFrame):
        (ewk_view_loader_client_attach):
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/ewk_web_error.cpp: Added.
        (_Ewk_Web_Error):
        (ewk_web_error_free):
        (ewk_web_error_domain_get):
        (ewk_web_error_url_get):
        (ewk_web_error_code_get):
        (ewk_web_error_description_get):
        (ewk_web_error_cancellation_get):
        (ewk_web_error_new):
        * UIProcess/API/efl/ewk_web_error.h: Added.
        * UIProcess/API/efl/ewk_web_error_private.h: Added.

2012-07-03  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][EFL] Ewk_View should report the load progress
        https://bugs.webkit.org/show_bug.cgi?id=90457

        Reviewed by Kenneth Rohde Christiansen.

        The Ewk_View now reports the estimated load progress
        of the page via the new "load,progress".
        A method is also added to Ewk_View in order to
        retrieve the current load progress.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_load_progress_get):
        (ewk_view_load_progress_changed):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        (didChangeProgress):
        (ewk_view_loader_client_attach):
        * UIProcess/API/efl/ewk_view_private.h:

2012-07-03  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] Add support for Battery Status API
        https://bugs.webkit.org/show_bug.cgi?id=89558

        Reviewed by Anders Carlsson.

        Add support for Battery Status API to WebKit2.

        * CMakeLists.txt:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * Platform/CoreIPC/MessageID.h:
        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        * Shared/WebBatteryStatus.cpp: Added.
        (WebKit):
        (WebKit::WebBatteryStatus::WebBatteryStatus):
        (WebKit::WebBatteryStatus::~WebBatteryStatus):
        (WebKit::WebBatteryStatus::Data::encode):
        (WebKit::WebBatteryStatus::Data::decode):
        * Shared/WebBatteryStatus.h: Added.
        (WebKit):
        (WebBatteryStatus):
        (Data):
        (WebKit::WebBatteryStatus::create):
        (WebKit::WebBatteryStatus::isCharging):
        (WebKit::WebBatteryStatus::chargingTime):
        (WebKit::WebBatteryStatus::dischargingTime):
        (WebKit::WebBatteryStatus::level):
        (WebKit::WebBatteryStatus::data):
        (WebKit::WebBatteryStatus::type):
        * Target.pri:
        * UIProcess/API/C/WKAPICast.h:
        (WebKit):
        * UIProcess/API/C/WKBatteryManager.cpp: Added.
        (WKBatteryManagerGetTypeID):
        * UIProcess/API/C/WKBatteryManager.h: Added.
        * UIProcess/WebBatteryManagerProxy.cpp: Added.
        (WebKit):
        (WebKit::WebBatteryManagerProxy::create):
        (WebKit::WebBatteryManagerProxy::WebBatteryManagerProxy):
        (WebKit::WebBatteryManagerProxy::~WebBatteryManagerProxy):
        (WebKit::WebBatteryManagerProxy::invalidate):
        (WebKit::WebBatteryManagerProxy::initializeProvider):
        (WebKit::WebBatteryManagerProxy::didReceiveMessage):
        (WebKit::WebBatteryManagerProxy::startUpdating):
        (WebKit::WebBatteryManagerProxy::stopUpdating):
        (WebKit::WebBatteryManagerProxy::providerDidChangeBatteryStatus):
        (WebKit::WebBatteryManagerProxy::providerUpdateBatteryStatus):
        * UIProcess/WebBatteryManagerProxy.h: Added.
        (CoreIPC):
        (WebKit):
        (WebBatteryManagerProxy):
        (WebKit::WebBatteryManagerProxy::clearContext):
        (WebKit::WebBatteryManagerProxy::type):
        * UIProcess/WebBatteryManagerProxy.messages.in: Added.
        * UIProcess/WebBatteryProvider.cpp: Added.
        (WebKit):
        (WebKit::WebBatteryProvider::startUpdating):
        (WebKit::WebBatteryProvider::stopUpdating):
        * UIProcess/WebBatteryProvider.h: Added.
        (WebKit):
        (WebBatteryProvider):
        * WebKit2.pri:
        * WebProcess/Battery/WebBatteryManager.cpp: Added.
        (WebKit):
        (WebKit::WebBatteryManager::WebBatteryManager):
        (WebKit::WebBatteryManager::~WebBatteryManager):
        (WebKit::WebBatteryManager::didReceiveMessage):
        (WebKit::WebBatteryManager::registerWebPage):
        (WebKit::WebBatteryManager::unregisterWebPage):
        (WebKit::WebBatteryManager::didChangeBatteryStatus):
        (WebKit::WebBatteryManager::updateBatteryStatus):
        * WebProcess/Battery/WebBatteryManager.h: Added.
        (CoreIPC):
        (WebKit):
        (WebBatteryManager):
        * WebProcess/Battery/WebBatteryManager.messages.in: Added.
        * WebProcess/WebCoreSupport/WebBatteryClient.cpp: Added.
        (WebKit):
        (WebKit::WebBatteryClient::startUpdating):
        (WebKit::WebBatteryClient::stopUpdating):
        (WebKit::WebBatteryClient::batteryControllerDestroyed):
        * WebProcess/WebCoreSupport/WebBatteryClient.h: Added.
        (WebKit):
        (WebBatteryClient):
        (WebKit::WebBatteryClient::WebBatteryClient):
        (WebKit::WebBatteryClient::~WebBatteryClient):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/WebProcess.h:
        (WebProcess):
        (WebKit::WebProcess::batteryManager):

2012-07-03  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make use of .qmake.cache for caching features

        Instead of loading() features from the files that need them (and re-running
        a bunch of checks), we now run feature detection as part of configure.pro,
        and have build-webkit write the computed feature-defines and CONFIG to
        .qmake.cache, which is then loaded by qmake _before_ even defaults_pre
        when building WebKit.pro.

        At some point we'll be able to selectivly prevent running of config tests
        in configure.pro, which means we don't need a separate code-path for
        the build-webkit --help case.

        We should also move the code in build-webkit that now uses .webkit.config
        to detect clean builds, to use .qmake.cache, since we now store the same
        thing there.

        Original patch by Oswald Buddenhagen <oswald.buddenhagen@nokia.com>

        Reviewed by Tor Arne Vestbø.

        * DerivedSources.pri:
        * Target.pri:

2012-07-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r121766.
        http://trac.webkit.org/changeset/121766
        https://bugs.webkit.org/show_bug.cgi?id=90465

        It caused flakey build errors on the bots (Requested by Ossy
        on #webkit).

        * DerivedSources.pri:
        * Target.pri:

2012-07-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add WebKitWebView::context-menu-dismissed signal to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=90386

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_class_init): Add context-menu-dismissed signal.
        (contextMenuDismissed): Emit context-menu-dismissed signal.
        (webkitWebViewPopulateContextMenu): Connect to deactivate signal
        of the GtkMenu and emit WebKitWebView::context-menu-dismissed when
        the gtk menu is deactivated.
        * UIProcess/API/gtk/WebKitWebView.h:
        (_WebKitWebViewClass): Add virtual methos for
        context-menu-dismissed signal.
        * UIProcess/API/gtk/tests/TestContextMenu.cpp:
        (testContextMenuDismissed):
        (beforeAll):
        * UIProcess/gtk/WebContextMenuProxyGtk.h:
        (WebKit::WebContextMenuProxyGtk::gtkMenu): Get the GtkMenu built
        for the context menu proxy.

2012-07-03  Piotr Roguski  <p.roguski@samsung.com>

        [EFL][WK2] Added missing WebPageProxy::ViewIsFocused flag to WebPageProxy::viewStateDidChange()
        call in _ewk_view_smart_focus_out() function.
        https://bugs.webkit.org/show_bug.cgi?id=89877

        Reviewed by Andreas Kling.

        Although name of the flag suggest it should be used only on focus in,
        omitting it in case of focus out will prevent WebPageProxy::viewStateDidChange()
        from sending Messages::WebPage::SetFocused(false).

        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_focus_out):

2012-07-03  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        [Qt][WK2] API tests randomly asserts in QQuickWebPage::setContentsScale(qreal)
        https://bugs.webkit.org/show_bug.cgi?id=88679

        Reviewed by Csaba Osztrogonác.

        Viewport parameters cannot be calculated while viewport is not visible and 
        viewport size is 0, so let's delay calculation of viewport parameters until view 
        becomes visible.

        * UIProcess/qt/QtViewportHandler.cpp:
        (WebKit::QtViewportHandler::pageContentsSizeChanged):

2012-07-03  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make use of .qmake.cache for caching features

        Instead of loading() features from the files that need them (and re-running
        a bunch of checks), we now run feature detection as part of configure.pro,
        and have build-webkit write the computed feature-defines and CONFIG to
        .qmake.cache, which is then loaded by qmake _before_ even defaults_pre
        when building WebKit.pro.

        At some point we'll be able to selectivly prevent running of config tests
        in configure.pro, which means we don't need a separate code-path for
        the build-webkit --help case.

        We should also move the code in build-webkit that now uses .webkit.config
        to detect clean builds, to use .qmake.cache, since we now store the same
        thing there.

        Original patch by Oswald Buddenhagen <oswald.buddenhagen@nokia.com>

        Reviewed by Tor Arne Vestbø.

        * DerivedSources.pri:
        * Target.pri:

2012-07-03  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt] When calling accept() on the FilePickerContextObject with an empty list, early return and call reject().
        https://bugs.webkit.org/show_bug.cgi?id=89755

        Reviewed by Simon Hausmann.

        When calling accept with an empty list of files we can just bailout
        and call reject(). Any other processing is pointless.

       * UIProcess/API/qt/tests/qmltests/WebView/tst_singleFileUpload.qml:
       * UIProcess/qt/QtDialogRunner.cpp:
        (WebKit::FilePickerContextObject::accept):

2012-07-03  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] fast/viewport/viewport-91.html still fails after r121555 and r121661
        https://bugs.webkit.org/show_bug.cgi?id=90376

        Reviewed by Csaba Osztrogonác.

        layoutTestController.dumpConfigurationForViewport still need
        to use the constant target DPI of 160.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::viewportConfigurationAsText):

2012-07-03  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add API to deliver a Web Intent to a frame
        https://bugs.webkit.org/show_bug.cgi?id=90067

        Reviewed by Kenneth Rohde Christiansen.

        Add ewk_view_intent_deliver() method on the Ewk_View
        to deliver a Web Intent to the view's main frame.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_intent_deliver):
        * UIProcess/API/efl/ewk_view.h:

2012-07-02  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add API to inspect a Web Intent service
        https://bugs.webkit.org/show_bug.cgi?id=90066

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL API to inspect a Web Intent Service and emit
        a signal on the view when a new intent service
        registers.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_intent_service.cpp: Added.
        (_Ewk_Intent_Service):
        (ewk_intent_service_ref):
        (ewk_intent_service_unref):
        (ewk_intent_service_action_get):
        (ewk_intent_service_type_get):
        (ewk_intent_service_href_get):
        (ewk_intent_service_title_get):
        (ewk_intent_service_disposition_get):
        (ewk_intent_service_new):
        * UIProcess/API/efl/ewk_intent_service.h: Added.
        * UIProcess/API/efl/ewk_intent_service_private.h: Copied from Source/WebKit2/UIProcess/API/efl/ewk_view_loader_client.cpp.
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_intent_service_register):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        (registerIntentServiceForFrame):
        (ewk_view_loader_client_attach):
        * UIProcess/API/efl/ewk_view_private.h:

2012-07-02  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][EFL] Free Ewk_Intent calloc'd memory with free() instead of delete
        https://bugs.webkit.org/show_bug.cgi?id=90433

        Reviewed by Kenneth Rohde Christiansen.

        Free calloc'd memory with free() instead of delete in Ewk_Intent.
        Add blank lines before return statements for consistency.

        * UIProcess/API/efl/ewk_intent.cpp:
        (ewk_intent_unref):
        (ewk_intent_action_get):
        (ewk_intent_type_get):
        (ewk_intent_service_get):
        (ewk_intent_suggestions_get):
        (ewk_intent_extra_get):
        (ewk_intent_extra_names_get):
        (ewk_intent_new):

2012-07-02  Martin Robinson  <mrobinson@igalia.com>

        [TextureMapper] The TextureMapper should support edge-distance anti-antialiasing
        https://bugs.webkit.org/show_bug.cgi?id=90308

        Reviewed by Noam Rosenthal.

        * UIProcess/texmap/LayerBackingStore.cpp:
        (WebKit::LayerBackingStore::paintToTextureMapper): Update the method to call paint with
        the new argument.

2012-07-02  Benjamin Poulain  <bpoulain@apple.com>

        Do not do any logging initialization when logging is disabled
        https://bugs.webkit.org/show_bug.cgi?id=90228

        Reviewed by Simon Fraser.

        * Platform/Logging.cpp:
        * Platform/Logging.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):

2012-07-02  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt][WK2] New API tests introduced in r121620 fail
        https://bugs.webkit.org/show_bug.cgi?id=90372

        Reviewed by Luiz Agostini.

        Updated the pixel comparison to produce more predictable results.

        * UIProcess/API/qt/tests/qrawwebview/tst_qrawwebview.cpp:
        (compareImages):

2012-07-02  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt] Fix WebProcess crash on Mac when accessing a site with video tag.
        https://bugs.webkit.org/show_bug.cgi?id=90384

        Reviewed by Jocelyn Turcotte.

        We need to initialize the private symbols used by MediaPlayerPrivateQTKit
        otherwise they will be null and it will lead to a crash. We copy WebSystemInterface
        files for WK2 just like the Mac port as WK2 may have different needs than WK1 layer (we
        may add or remove symbols in here). It doesn't fix the video rendering yet but it's
        first step.

        * Target.pri:
        * WebProcess/WebCoreSupport/qt/WebSystemInterface.h: Added.
        * WebProcess/WebCoreSupport/qt/WebSystemInterface.mm: Added.
        (InitWebCoreSystemInterfaceForWK2):
        * WebProcess/qt/WebProcessMainQt.cpp:
        (WebKit::WebProcessMainQt):

2012-07-02  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] [WK2] Remove content sniffer and decoder initialization from WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=90275

        Reviewed by Martin Robinson.

        Do not initialize content sniffer and decoder in the WebProcess
        because the initialization is now done in WebCore.

        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainEfl):

2012-07-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r120329, r121113, and r121138.
        http://trac.webkit.org/changeset/120329
        http://trac.webkit.org/changeset/121113
        http://trac.webkit.org/changeset/121138
        https://bugs.webkit.org/show_bug.cgi?id=90368

        Introduced noticeable keyboard-related spins due to
        synchronous IPC. (Requested by kling on #webkit).

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleKeyboardEvent):
        (WebKit::WebPageProxy::didReceiveEvent):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::keyEvent):

2012-07-01  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add API to inspect a Web Intent
        https://bugs.webkit.org/show_bug.cgi?id=89749

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL API to inspect a Web Intent and emit a signal
        on the view when a new intent request is made.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_intent.cpp: Added.
        (_Ewk_Intent):
        (ewk_intent_ref):
        (ewk_intent_unref):
        (ewk_intent_action_get):
        (ewk_intent_type_get):
        (ewk_intent_service_get):
        (ewk_intent_suggestions_get):
        (ewk_intent_extra_get):
        (ewk_intent_extra_names_get):
        (ewk_intent_new):
        * UIProcess/API/efl/ewk_intent.h: Added.
        * UIProcess/API/efl/ewk_intent_private.h: Copied from Source/WebKit2/UIProcess/API/efl/ewk_view_loader_client.cpp.
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_intent_request_new):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        (didReceiveIntentForFrame):
        (ewk_view_loader_client_attach):
        * UIProcess/API/efl/ewk_view_private.h:

2012-06-29  Luiz Agostini  <luiz.agostini@nokia.com>

        [Qt][WK2] Private non-QtQuick API
        https://bugs.webkit.org/show_bug.cgi?id=84532

        Reviewed by Noam Rosenthal.

        Adding new private non-QtQuick API. This new C++ API makes it possible
        to have control over the lower levels of WebKit without going via QML.

        This is a first version of the API, enough to show pages on the screen.
        Many features are not implemented.

        * Target.pri:
        * UIProcess/API/qt/raw/qrawwebview.cpp: Added.
        * UIProcess/API/qt/raw/qrawwebview_p.h: Added.
        * UIProcess/API/qt/raw/qrawwebview_p_p.h: Added.

        The tests for the new API are pixel tests. They use QRawWebView to load
        html files and generate images, and them compare those images to the ones
        in UIProcess/API/qt/tests/html/resources.

        * UIProcess/API/qt/tests/html/bluesquare.html: Added.
        * UIProcess/API/qt/tests/html/redsquare.html: Added.
        * UIProcess/API/qt/tests/html/resources/qwkview_noBackground1.png: Added.
        * UIProcess/API/qt/tests/html/resources/qwkview_noBackground3.png: Added.
        * UIProcess/API/qt/tests/html/resources/qwkview_paint.png: Added.
        * UIProcess/API/qt/tests/qrawwebview/qrawwebview.pro: Added.
        * UIProcess/API/qt/tests/qrawwebview/tst_qrawwebview.cpp: Added.

2012-06-29  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] Move intent delivery code from the frame to the page
        https://bugs.webkit.org/show_bug.cgi?id=89974

        Reviewed by Anders Carlsson.

        Move the intent delivery code from the frame to the page
        and add the corresponding C API for WKPage.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageDeliverIntentToFrame):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::stopLoading):
        * UIProcess/WebFrameProxy.h:
        (WebKit):
        * UIProcess/WebPageProxy.cpp:
        (WebKit):
        (WebKit::WebPageProxy::deliverIntentToFrame):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):

2012-06-29  Dan Bernstein  <mitz@apple.com>

        Can’t get basic element info from a WKRenderObject
        https://bugs.webkit.org/show_bug.cgi?id=90301

        Reviewed by Anders Carlsson.

        Moved the element info (tag name, id and class names) from WebRenderLayer to WebRenderObject,
        and gave WebRenderLayer a reference to a (shallow) WebRenderObject. Added WKRenderObject API
        for getting element info, while leaving the WKRenderLayer API in place for now for Safari.

        * Shared/API/c/WKRenderLayer.cpp:
        (WKRenderLayerGetRenderer): Added this wrapper.
        (WKRenderLayerCopyRendererName): Changed to get the name from the renderer.
        (WKRenderLayerCopyElementTagName): Changed to go through the renderer.
        (WKRenderLayerCopyElementID): Ditto.
        (WKRenderLayerGetElementClassNames): Ditto.
        * Shared/API/c/WKRenderLayer.h: Added declaration of WKRenderLayerGetRenderer() and comments
        about removing older API.
        * Shared/API/c/WKRenderObject.cpp:
        (WKRenderObjectCopyElementTagName): Added this wrapper.
        (WKRenderObjectCopyElementID): Ditto.
        (WKRenderObjectGetElementClassNames): Ditto.
        * Shared/API/c/WKRenderObject.h:
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode): Removed the element info from the encoding of
        WebRenderLayer, and added the renderer. Added the element info to the encoding of
        WebRenderObject.
        (WebKit::UserMessageDecoder::baseDecode): Updated to match the encoding changes.
        * Shared/WebRenderLayer.cpp:
        (WebKit::WebRenderLayer::WebRenderLayer): Changed to initialize the m_renderer member
        variable with a WebRenderObject for the layer’s renderer, and removed the initialization of
        the element-related member variables that were removed.
        * Shared/WebRenderLayer.h:
        (WebKit::WebRenderLayer::create): Changed to take a renderer instead of renderer and element
        info.
        (WebKit::WebRenderLayer::renderer): Added this getter.
        (WebKit::WebRenderLayer::WebRenderLayer): Changed to take a renderer instead of renderer and
        element info.
        * Shared/WebRenderObject.cpp:
        (WebKit::WebRenderObject::create): Changed to pass true for the shouldIncludeDescendants
        parameter.
        (WebKit::WebRenderObject::WebRenderObject): Added a shouldIncludeDescdendants boolean
        parameter. When it is false, the m_children array remains null. Added initialization of
        member variables with the element’s tag name, id and class list.
        * Shared/WebRenderObject.h:
        (WebKit::WebRenderObject::create): Added an overload that takes a RenderObject and creates
        a shallow WebRenderObject.
        (WebRenderObject): Changed to take element tag name, id and class list.
        (WebKit::WebRenderObject::elementTagName): Added this getter.
        (WebKit::WebRenderObject::elementID): Ditto.
        (WebKit::WebRenderObject::elementClassNames): Ditto.
        (WebKit::WebRenderObject::WebRenderObject): 

2012-06-29  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling out r121572.
        http://trac.webkit.org/changeset/121572
        https://bugs.webkit.org/show_bug.cgi?id=90249

        Breaks Mac build since it depends on r121547, which was rolled
        out

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::shouldEraseMarkersAfterChangeSelection):
        * WebProcess/WebCoreSupport/WebEditorClient.h:

2012-06-29  Eric Seidel  <eric@webkit.org>

        Remove BUILDING_ON_LEOPARD now that no ports build on Leopard
        https://bugs.webkit.org/show_bug.cgi?id=90249

        Reviewed by Ryosuke Niwa.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::shouldEraseMarkersAfterChangeSelection):
        * WebProcess/WebCoreSupport/WebEditorClient.h:

2012-06-29  Konrad Piascik  <kpiascik@rim.com>

        Don't hardcode target dpi of 160 (it should be 96 on desktop)
        https://bugs.webkit.org/show_bug.cgi?id=88114

        Reviewed by Adam Barth.

        Updated the call to computeViewportAttributes.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::sendViewportAttributesChanged):
        (WebKit::WebPage::viewportConfigurationAsText):

2012-06-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r121529.
        http://trac.webkit.org/changeset/121529
        https://bugs.webkit.org/show_bug.cgi?id=90260

        Failed to compile on Chromium WebKitMacBuilder (Requested by
        keishi on #webkit).

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]):
        (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:WebCore::finalFrame:WebCore::]):
        * WebProcess/Plugins/Netscape/mac/NetscapeSandboxFunctions.mm:
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2012-06-29  Eric Seidel  <eric@webkit.org>

        Remove more BUILDING_ON_LEOPARD branches now that no port builds on Leopard
        https://bugs.webkit.org/show_bug.cgi?id=90252

        Reviewed by Ryosuke Niwa.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]):
        (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:WebCore::finalFrame:WebCore::]):
        * WebProcess/Plugins/Netscape/mac/NetscapeSandboxFunctions.mm:
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2012-06-28  MORITA Hajime  <morrita@google.com>

        [Refactoring] NodeRenderingContext ctor could be built on top of the ComposedShadowTreeWalker
        https://bugs.webkit.org/show_bug.cgi?id=89732

        Reviewed by Dimitri Glazkov.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-06-28  John Sullivan  <sullivan@apple.com>

        <https://bugs.webkit.org/show_bug.cgi?id=90216>
        <rdar://problem/11766518>
        Undo handling in WebKit2 is not robust against some page-closing code paths

        Reviewed by Enrica Casucci.

        * UIProcess/API/mac/PageClientImpl.h:
        Declared public function viewWillMoveToAnotherWindow().
        
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::viewWillMoveToAnotherWindow):
        New function, calls clearAllEditCommands() to remove any Undo actions from the stack.
        This guarantees that no Undo actions will be abandoned when the PageClientImpl is dealloc'ed.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewWillMoveToWindow:]):
        Now informs PageClientImpl via new function PageClientImpl::viewWillMoveToAnotherWindow().

2012-06-28  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] Add C API to inspect a Web Intent service
        https://bugs.webkit.org/show_bug.cgi?id=89276

        Reviewed by Anders Carlsson.

        Add C API for Web intent service so that it can be queried
        on client side.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * UIProcess/API/C/WKIntentServiceInfo.cpp: Added.
        (WKIntentServiceInfoGetTypeID):
        (WKIntentServiceInfoCopyAction):
        (WKIntentServiceInfoCopyType):
        (WKIntentServiceInfoCopyHref):
        (WKIntentServiceInfoCopyTitle):
        (WKIntentServiceInfoCopyDisposition):
        * UIProcess/API/C/WKIntentServiceInfo.h: Added.

2012-06-28  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] KURL assert at fast/loader/opaque-base-url.html
        https://bugs.webkit.org/show_bug.cgi?id=89468

        Reviewed by Simon Hausmann.

        Don't use the KURL(ParsedURLStringTag, const String&) constructor.
        We cannot be sure that the url in encode was valid and even if it
        was the message could have been corrupted.
        * Shared/qt/WebCoreArgumentCodersQt.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):

2012-06-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix the build without TEXTURE_MAPPER_GL.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::platformInitialize):

2012-06-25  Mark Hahnenberg  <mhahnenberg@apple.com>

        JSLock should be per-JSGlobalData
        https://bugs.webkit.org/show_bug.cgi?id=89123

        Reviewed by Geoffrey Garen.

        Changed all sites that used JSLock to instead use the new JSLockHolder
        and pass in the correct JS context that the code is about to interact with that 
        needs protection. Also added a couple JSLocks to places that didn't already 
        have it that needed it.

        * Shared/mac/WebMemorySampler.mac.mm:
        (WebKit::WebMemorySampler::sampleWebKit):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::javaScriptObjectsCount):
        (WebKit::InjectedBundle::reportException):
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::callMethod):
        (WebKit::JSNPObject::callObject):
        (WebKit::JSNPObject::callConstructor):
        (WebKit::JSNPObject::put):
        (WebKit::JSNPObject::deleteProperty):
        (WebKit::JSNPObject::getOwnPropertyNames):
        (WebKit::JSNPObject::propertyGetter):
        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::NPJSObject::hasMethod):
        (WebKit::NPJSObject::invoke):
        (WebKit::NPJSObject::invokeDefault):
        (WebKit::NPJSObject::hasProperty):
        (WebKit::NPJSObject::getProperty):
        (WebKit::NPJSObject::setProperty):
        (WebKit::NPJSObject::removeProperty):
        (WebKit::NPJSObject::enumerate):
        (WebKit::NPJSObject::construct):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::convertJSValueToNPVariant):
        (WebKit::NPRuntimeObjectMap::evaluate):
        (WebKit::NPRuntimeObjectMap::moveGlobalExceptionToExecState):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::jsWrapperForWorld):
        (WebKit::WebFrame::computedStyleIncludingVisitedInfo):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInMainFrame):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::getWebCoreStatistics):

2012-06-27  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        REGRESSION(r121135): It made qmltests::WebViewColorChooser::test_accept() fail
        https://bugs.webkit.org/show_bug.cgi?id=89871

        Reviewed by Simon Hausmann.

        Added proper event synchronization to the test case.

        * UIProcess/API/qt/tests/qmltests/WebView/tst_colorChooser.qml:

2012-06-27  Brady Eidson  <beidson@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=87513
        WebBackForwardList needs an overhaul to consistently and clearly handle error conditions.

        Reviewed by Darin Adler.

        - We think a null entry might somehow be getting in the list so we now try to prevent that.
        - We think a null entry might somehow be in the list so we now null check when indexing into m_entries.
        - A lot of index math - especially tracking "no current index" - was implicit or wrong.
        - Operating on a WebBackForwardList whose page has been closed is now an explicit no-op.
        - The session state data reading and writing code was fragile and needed an overhaul.
        - This includes adding a new V1 format of the session data that is easier to validate when reading back in.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::~WebBackForwardList):
        (WebKit::WebBackForwardList::pageClosed):
        (WebKit::WebBackForwardList::addItem):
        (WebKit::WebBackForwardList::goToItem):
        (WebKit::WebBackForwardList::backListCount):
        (WebKit::WebBackForwardList::forwardListCount):
        (WebKit::WebBackForwardList::backListAsImmutableArrayWithLimit):
        (WebKit::WebBackForwardList::forwardListAsImmutableArrayWithLimit):
        (WebKit::WebBackForwardList::clear):

        * UIProcess/WebBackForwardList.h:
        (WebBackForwardList):

        * UIProcess/cf/WebBackForwardListCF.cpp:
        (WebKit::createEmptySessionHistoryDictionary):
        (WebKit::WebBackForwardList::createCFDictionaryRepresentation):
        (WebKit::WebBackForwardList::restoreFromCFDictionaryRepresentation):
        (WebKit::WebBackForwardList::restoreFromV0CFDictionaryRepresentation):
        (WebKit::WebBackForwardList::restoreFromV1CFDictionaryRepresentation):
        (WebKit::extractBackForwardListEntriesFromArray):

2012-06-27  Zan Dobersek  <zandobersek@gmail.com>

        [Gtk] Add support for the Gamepad API
        https://bugs.webkit.org/show_bug.cgi?id=87503

        Reviewed by Carlos Garcia Campos.

        Add the Gamepad feature dependencies libraries to the LIBADD
        list for the libwebkitgtk2 library.

        * GNUmakefile.am:

2012-06-26  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Avoid use of deprecated Qt API

        Reviewed by Tor Arne Vestbø.

        QGuiApplication::inputPanel() has been deprecated in favour of
        inputMethod().

        * UIProcess/qt/QtWebPageEventHandler.cpp:
        (WebKit::QtWebPageEventHandler::QtWebPageEventHandler):
        (WebKit::QtWebPageEventHandler::~QtWebPageEventHandler):
        (WebKit::setInputPanelVisible):
        (WebKit::QtWebPageEventHandler::inputPanelVisibleChanged):
        (WebKit::QtWebPageEventHandler::updateTextInputState):

2012-06-26  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][GTK] Uninitialized variable in TextCheckerGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=89948

        Reviewed by Martin Robinson.

        Properly initialize didInitializeState in
        TextChecker::state().

        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::TextChecker::state):

2012-06-25  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Make it possible to build WebKit without QtWidgets
        https://bugs.webkit.org/show_bug.cgi?id=78109

        Reviewed by Tor Arne Vestbø.

        * WebKit2.pri: Add missing WK2 specific dependencies.
        * qt/MainQt.cpp: Do the QStyle initialization hook only if we are
        compiling with QtWidgets support.
        (WebKit):
        (main):

2012-06-25  Raphael Kubo da Costa  <rakuco@webkit.org>

        [EFL][WK2] Include unistd.h in PlatformProcessIdentifier.h.
        https://bugs.webkit.org/show_bug.cgi?id=89804

        Reviewed by Hajime Morita.

        The pid_t typedef ends up coming from stdlib.h (indirectly via WTF
        includes) on Mac and Linux, even though that is not mandated by
        POSIX and breaks other platforms (such as FreeBSD). Fix that by
        explicitly including unistd.h, which is where the typedef is
        supposed to come from.

        * Platform/PlatformProcessIdentifier.h:

2012-06-25  YoungTaeck Song  <youngtaeck.song@samsung.com>

        [WK2][Qt][EFL] Extract common code from LayerTreeHostQt
        https://bugs.webkit.org/show_bug.cgi?id=89837

        Reviewed by Noam Rosenthal.

        Extract common code from LayerTreeHostQt to be used by both Qt and Efl.
        I renamed LayerTreeHost to LayerTreeCoordinator, and these are moved under WebProcess/WebPage/LayerTreeCoordinator.
        I Modified LayerTreeHostProxy to LayerTreeCoordinatorProxy too, Because LayerTreeHostProxy and LayerTreeHost were pair.
        Also WebGraphicsLayer moved under that directory.

        * CMakeLists.txt:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Platform/CoreIPC/MessageID.h:
        * Target.pri:
        * UIProcess/API/qt/qquickwebpage.cpp:
        (QQuickWebPagePrivate::paint):
        (QQuickWebPage::updatePaintNode):
        (QQuickWebPagePrivate::updateSize):
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::didReceiveLayerTreeCoordinatorProxyMessage):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit):
        (WebKit::DrawingAreaProxy::layerTreeCoordinatorProxy):
        (DrawingAreaProxy):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl):
        (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxyImpl::didReceiveLayerTreeCoordinatorProxyMessage):
        (WebKit::DrawingAreaProxyImpl::setVisibleContentsRect):
        * UIProcess/DrawingAreaProxyImpl.h:
        (WebKit):
        (DrawingAreaProxyImpl):
        * UIProcess/LayerTreeCoordinatorProxy.cpp: Renamed from Source/WebKit2/UIProcess/LayerTreeHostProxy.cpp.
        (WebKit):
        (WebKit::LayerTreeCoordinatorProxy::LayerTreeCoordinatorProxy):
        (WebKit::LayerTreeCoordinatorProxy::~LayerTreeCoordinatorProxy):
        (WebKit::LayerTreeCoordinatorProxy::updateViewport):
        (WebKit::LayerTreeCoordinatorProxy::dispatchUpdate):
        (WebKit::LayerTreeCoordinatorProxy::createTileForLayer):
        (WebKit::LayerTreeCoordinatorProxy::updateTileForLayer):
        (WebKit::LayerTreeCoordinatorProxy::removeTileForLayer):
        (WebKit::LayerTreeCoordinatorProxy::deleteCompositingLayer):
        (WebKit::LayerTreeCoordinatorProxy::setRootCompositingLayer):
        (WebKit::LayerTreeCoordinatorProxy::setCompositingLayerState):
        (WebKit::LayerTreeCoordinatorProxy::setCompositingLayerChildren):
        (WebKit::LayerTreeCoordinatorProxy::setCompositingLayerFilters):
        (WebKit::LayerTreeCoordinatorProxy::didRenderFrame):
        (WebKit::LayerTreeCoordinatorProxy::createDirectlyCompositedImage):
        (WebKit::LayerTreeCoordinatorProxy::destroyDirectlyCompositedImage):
        (WebKit::LayerTreeCoordinatorProxy::setContentsSize):
        (WebKit::LayerTreeCoordinatorProxy::setVisibleContentsRect):
        (WebKit::LayerTreeCoordinatorProxy::renderNextFrame):
        (WebKit::LayerTreeCoordinatorProxy::didChangeScrollPosition):
        (WebKit::LayerTreeCoordinatorProxy::syncCanvas):
        (WebKit::LayerTreeCoordinatorProxy::purgeBackingStores):
        * UIProcess/LayerTreeCoordinatorProxy.h: Renamed from Source/WebKit2/UIProcess/LayerTreeHostProxy.h.
        (WebKit):
        (LayerTreeCoordinatorProxy):
        (WebKit::LayerTreeCoordinatorProxy::layerTreeRenderer):
        * UIProcess/LayerTreeCoordinatorProxy.messages.in: Renamed from Source/WebKit2/UIProcess/LayerTreeHostProxy.messages.in.
        * UIProcess/WebLayerTreeRenderer.cpp:
        (WebKit::WebLayerTreeRenderer::WebLayerTreeRenderer):
        (WebKit::WebLayerTreeRenderer::updateViewport):
        (WebKit::WebLayerTreeRenderer::renderNextFrame):
        (WebKit::WebLayerTreeRenderer::purgeBackingStores):
        (WebKit::WebLayerTreeRenderer::detach):
        * UIProcess/WebLayerTreeRenderer.h:
        (WebKit):
        (WebLayerTreeRenderer):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        * WebKit2.pri:
        * WebProcess/WebPage/DrawingArea.h:
        (DrawingArea):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::didReceiveLayerTreeCoordinatorMessage):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        (DrawingAreaImpl):
        * WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp.
        (WebKit):
        (WebKit::LayerTreeCoordinator::create):
        (WebKit::LayerTreeCoordinator::~LayerTreeCoordinator):
        (WebKit::LayerTreeCoordinator::LayerTreeCoordinator):
        (WebKit::LayerTreeCoordinator::setLayerFlushSchedulingEnabled):
        (WebKit::LayerTreeCoordinator::scheduleLayerFlush):
        (WebKit::LayerTreeCoordinator::cancelPendingLayerFlush):
        (WebKit::LayerTreeCoordinator::setShouldNotifyAfterNextScheduledLayerFlush):
        (WebKit::LayerTreeCoordinator::setRootCompositingLayer):
        (WebKit::LayerTreeCoordinator::invalidate):
        (WebKit::LayerTreeCoordinator::setNonCompositedContentsNeedDisplay):
        (WebKit::LayerTreeCoordinator::scrollNonCompositedContents):
        (WebKit::LayerTreeCoordinator::forceRepaint):
        (WebKit::LayerTreeCoordinator::sizeDidChange):
        (WebKit::LayerTreeCoordinator::didInstallPageOverlay):
        (WebKit::LayerTreeCoordinator::didUninstallPageOverlay):
        (WebKit::LayerTreeCoordinator::setPageOverlayNeedsDisplay):
        (WebKit::LayerTreeCoordinator::setPageOverlayOpacity):
        (WebKit::LayerTreeCoordinator::flushPendingLayerChanges):
        (WebKit::LayerTreeCoordinator::syncLayerState):
        (WebKit::LayerTreeCoordinator::syncLayerChildren):
        (WebKit::LayerTreeCoordinator::syncCanvas):
        (WebKit::LayerTreeCoordinator::syncLayerFilters):
        (WebKit::LayerTreeCoordinator::attachLayer):
        (WebKit::LayerTreeCoordinator::detachLayer):
        (WebKit::updateOffsetFromViewportForSelf):
        (WebKit::updateOffsetFromViewportForLayer):
        (WebKit::LayerTreeCoordinator::syncFixedLayers):
        (WebKit::LayerTreeCoordinator::performScheduledLayerFlush):
        (WebKit::LayerTreeCoordinator::layerFlushTimerFired):
        (WebKit::LayerTreeCoordinator::createPageOverlayLayer):
        (WebKit::LayerTreeCoordinator::destroyPageOverlayLayer):
        (WebKit::LayerTreeCoordinator::adoptImageBackingStore):
        (WebKit::LayerTreeCoordinator::releaseImageBackingStore):
        (WebKit::LayerTreeCoordinator::notifyAnimationStarted):
        (WebKit::LayerTreeCoordinator::notifySyncRequired):
        (WebKit::LayerTreeCoordinator::paintContents):
        (WebKit::LayerTreeCoordinator::showDebugBorders):
        (WebKit::LayerTreeCoordinator::showRepaintCounter):
        (WebKit::LayerTreeHost::supportsAcceleratedCompositing):
        (WebKit::LayerTreeCoordinator::createTile):
        (WebKit::LayerTreeCoordinator::updateTile):
        (WebKit::LayerTreeCoordinator::removeTile):
        (WebKit::LayerTreeCoordinator::visibleContentsRect):
        (WebKit::LayerTreeCoordinator::setVisibleContentsRect):
        (WebKit::LayerTreeCoordinator::renderNextFrame):
        (WebKit::LayerTreeCoordinator::layerTreeTileUpdatesAllowed):
        (WebKit::LayerTreeCoordinator::purgeBackingStores):
        (WebKit::LayerTreeCoordinator::beginContentUpdate):
        * WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.h: Renamed from Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.h.
        (WebKit):
        (LayerTreeCoordinator):
        (WebKit::LayerTreeCoordinator::layerTreeContext):
        (WebKit::LayerTreeCoordinator::pageOverlayShouldApplyFadeWhenPainting):
        (WebKit::LayerTreeCoordinator::pauseRendering):
        (WebKit::LayerTreeCoordinator::resumeRendering):
        (WebKit::LayerTreeCoordinator::deviceScaleFactorDidChange):
        * WebProcess/WebPage/LayerTreeCoordinator/LayerTreeCoordinator.messages.in: Renamed from Source/WebKit2/WebProcess/WebPage/LayerTreeHost.messages.in.
        * WebProcess/WebPage/LayerTreeCoordinator/WebGraphicsLayer.cpp: Renamed from Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp.
        (WebCore):
        (WebCore::layerByIDMap):
        (WebCore::WebGraphicsLayer::layerByID):
        (WebCore::toWebLayerID):
        (WebCore::WebGraphicsLayer::didChangeLayerState):
        (WebCore::WebGraphicsLayer::didChangeChildren):
        (WebCore::WebGraphicsLayer::didChangeFilters):
        (WebCore::WebGraphicsLayer::setShouldUpdateVisibleRect):
        (WebCore::WebGraphicsLayer::didChangeGeometry):
        (WebCore::WebGraphicsLayer::WebGraphicsLayer):
        (WebCore::WebGraphicsLayer::~WebGraphicsLayer):
        (WebCore::WebGraphicsLayer::willBeDestroyed):
        (WebCore::WebGraphicsLayer::setChildren):
        (WebCore::WebGraphicsLayer::addChild):
        (WebCore::WebGraphicsLayer::addChildAtIndex):
        (WebCore::WebGraphicsLayer::addChildAbove):
        (WebCore::WebGraphicsLayer::addChildBelow):
        (WebCore::WebGraphicsLayer::replaceChild):
        (WebCore::WebGraphicsLayer::removeFromParent):
        (WebCore::WebGraphicsLayer::setPosition):
        (WebCore::WebGraphicsLayer::setAnchorPoint):
        (WebCore::WebGraphicsLayer::setSize):
        (WebCore::WebGraphicsLayer::setTransform):
        (WebCore::WebGraphicsLayer::setChildrenTransform):
        (WebCore::WebGraphicsLayer::setPreserves3D):
        (WebCore::WebGraphicsLayer::setMasksToBounds):
        (WebCore::WebGraphicsLayer::setDrawsContent):
        (WebCore::WebGraphicsLayer::setContentsOpaque):
        (WebCore::WebGraphicsLayer::setBackfaceVisibility):
        (WebCore::WebGraphicsLayer::setOpacity):
        (WebCore::WebGraphicsLayer::setContentsRect):
        (WebCore::WebGraphicsLayer::setContentsNeedsDisplay):
        (WebCore::WebGraphicsLayer::setContentsToCanvas):
        (WebCore::WebGraphicsLayer::setFilters):
        (WebCore::WebGraphicsLayer::setContentsToImage):
        (WebCore::WebGraphicsLayer::setMaskLayer):
        (WebCore::WebGraphicsLayer::setReplicatedByLayer):
        (WebCore::WebGraphicsLayer::setNeedsDisplay):
        (WebCore::WebGraphicsLayer::setNeedsDisplayInRect):
        (WebCore::WebGraphicsLayer::id):
        (WebCore::WebGraphicsLayer::syncCompositingState):
        (WebCore::toWebGraphicsLayer):
        (WebCore::WebGraphicsLayer::syncChildren):
        (WebCore::WebGraphicsLayer::syncFilters):
        (WebCore::WebGraphicsLayer::syncLayerState):
        (WebCore::WebGraphicsLayer::syncCanvas):
        (WebCore::WebGraphicsLayer::ensureImageBackingStore):
        (WebCore::WebGraphicsLayer::syncCompositingStateForThisLayerOnly):
        (WebCore::WebGraphicsLayer::tiledBackingStorePaintBegin):
        (WebCore::WebGraphicsLayer::setRootLayer):
        (WebCore::WebGraphicsLayer::setVisibleContentRectTrajectoryVector):
        (WebCore::WebGraphicsLayer::setContentsScale):
        (WebCore::WebGraphicsLayer::effectiveContentsScale):
        (WebCore::WebGraphicsLayer::adjustContentsScale):
        (WebCore::WebGraphicsLayer::createBackingStore):
        (WebCore::WebGraphicsLayer::tiledBackingStorePaint):
        (WebCore::WebGraphicsLayer::tiledBackingStorePaintEnd):
        (WebCore::WebGraphicsLayer::tiledBackingStoreUpdatesAllowed):
        (WebCore::WebGraphicsLayer::tiledBackingStoreContentsRect):
        (WebCore::WebGraphicsLayer::shouldUseTiledBackingStore):
        (WebCore::WebGraphicsLayer::tiledBackingStoreVisibleRect):
        (WebCore::WebGraphicsLayer::tiledBackingStoreBackgroundColor):
        (WebCore::WebGraphicsLayer::beginContentUpdate):
        (WebCore::WebGraphicsLayer::createTile):
        (WebCore::WebGraphicsLayer::updateTile):
        (WebCore::WebGraphicsLayer::removeTile):
        (WebCore::WebGraphicsLayer::updateContentBuffers):
        (WebCore::WebGraphicsLayer::purgeBackingStores):
        (WebCore::WebGraphicsLayer::setWebGraphicsLayerClient):
        (WebCore::WebGraphicsLayer::adjustVisibleRect):
        (WebCore::WebGraphicsLayer::computeTransformedVisibleRect):
        (WebCore::createWebGraphicsLayer):
        (WebCore::WebGraphicsLayer::initFactory):
        (WebCore::WebGraphicsLayer::selfOrAncestorHaveNonAffineTransforms):
        * WebProcess/WebPage/LayerTreeCoordinator/WebGraphicsLayer.h: Renamed from Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.h.
        (WebCore):
        (WebKit):
        (WebGraphicsLayerClient):
        (WebGraphicsLayer):
        (WebCore::WebGraphicsLayer::image):
        (WebCore::WebGraphicsLayer::fixedToViewport):
        (WebCore::WebGraphicsLayer::setFixedToViewport):
        (WebCore::WebGraphicsLayer::maskTarget):
        (WebCore::WebGraphicsLayer::setMaskTarget):
        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create):
        * WebProcess/WebPage/LayerTreeHost.h:
        (LayerTreeHost):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveMessage):

2012-06-25  Anders Carlsson  <andersca@apple.com>

        [Lion WK2] fast/loader/reload-zero-byte-plugin.html hits assert
        https://bugs.webkit.org/show_bug.cgi?id=89611
        <rdar://problem/11714023>

        Reviewed by Sam Weinig.

        Make sure to send the response along to the plug-in in the case where the stream was empty.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::finishedLoading):

2012-06-25  YoungTaeck Song  <youngtaeck.song@samsung.com>

        [WK2][Qt][EFL] Move LayerBackingStore into common directory
        https://bugs.webkit.org/show_bug.cgi?id=89838

        Reviewed by Noam Rosenthal.

        Move LayerBackingStore into 'Source/WebKit2/UIProcess/texmap' to be used by both Qt and Efl.

        * Target.pri:
        * UIProcess/texmap/LayerBackingStore.cpp: Renamed from Source/WebKit2/UIProcess/qt/LayerBackingStore.cpp.
        (WebKit):
        (WebKit::LayerBackingStoreTile::swapBuffers):
        (WebKit::LayerBackingStoreTile::setBackBuffer):
        (WebKit::LayerBackingStore::createTile):
        (WebKit::LayerBackingStore::removeTile):
        (WebKit::LayerBackingStore::updateTile):
        (WebKit::LayerBackingStore::texture):
        (WebKit::LayerBackingStore::paintToTextureMapper):
        (WebKit::LayerBackingStore::commitTileOperations):
        * UIProcess/texmap/LayerBackingStore.h: Renamed from Source/WebKit2/UIProcess/qt/LayerBackingStore.h.
        (WebKit):
        (LayerBackingStoreTile):
        (WebKit::LayerBackingStoreTile::LayerBackingStoreTile):
        (WebKit::LayerBackingStoreTile::scale):
        (LayerBackingStore):
        (WebKit::LayerBackingStore::create):
        (WebKit::LayerBackingStore::LayerBackingStore):

2012-06-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Test /webkit2/WebKitWebView/permission-requests fails due to a runtime warning
        https://bugs.webkit.org/show_bug.cgi?id=89858

        Reviewed by Xan Lopez.

        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
        (testWebViewPermissionRequests): Make runtime warnings non-fatal
        for test /webkit2/WebKitWebView/permission-requests.

2012-06-25  Huang Dongsung  <luxtella@company100.net>

        [GTK] Remove unused code in LayerTreeHostGtk.
        https://bugs.webkit.org/show_bug.cgi?id=89854

        LayerTreeHostGtk::deviceScaleFactor() is unused and LayerTreeHost does not have
        virtual float deviceScaleFactor() const;

        Reviewed by Martin Robinson.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:
        (LayerTreeHostGtk):

2012-06-24  Andreas Kling  <kling@webkit.org>

        REGRESSION(r120329): Intermittent WebProcess shutdowns due to out-of-line DidReceiveEvent messages.
        <rdar://problem/11686974>
        <http://webkit.org/b/89659>

        Unreviewed tests assertion fix, handleKeyboardEvent() should call didReceiveKeyEvent()
        rather than didReceiveEvent().

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleKeyboardEvent):
        (WebKit::WebPageProxy::didReceiveKeyEvent):

2012-06-24  YoungTaeck Song  <youngtaeck.song@samsung.com>

        [WK2][Qt][EFL] Modify Qt specific code to common code
        https://bugs.webkit.org/show_bug.cgi?id=89839

        Reviewed by Noam Rosenthal.

        Modify paintToGraphicsContext’s first argument QPainter to PlatformGraphicsContext to be used by both Qt and Efl.

        * UIProcess/WebLayerTreeRenderer.cpp:
        (WebKit::WebLayerTreeRenderer::paintToGraphicsContext):

2012-06-24  Simon Fraser  <simon.fraser@apple.com>

        Rename isPositioned to isOutOfFlowPositioned for clarity
        https://bugs.webkit.org/show_bug.cgi?id=89836

        Reviewed by Antti Koivisto.
        
        RenderObject and RenderStyle had an isPositioned() method that was
        confusing, because it excluded relative positioning. Rename to 
        isOutOfFlowPositioned(), which makes it clearer that it only applies
        to absolute and fixed positioning.

        Simple rename; no behavior change.

        * WebProcess/WebPage/qt/LayerTreeHostQt.cpp:
        (WebKit::updateOffsetFromViewportForSelf):

2012-06-24  Andreas Kling  <kling@webkit.org>

        REGRESSION(r120329): Intermittent WebProcess shutdowns due to out-of-line DidReceiveEvent messages.
        <rdar://problem/11686974>
        <http://webkit.org/b/89659>

        Reviewed by Sam Weinig.

        Instead of sending DidReceiveEvent for key events as DispatchMessageEvenWhenWaitingForSyncReply,
        use proper synchronous messages. This makes the WebProcess block while the UIProcess handles
        the event but prevents a weird race condition where DidReceiveEvent gets dispatched just before
        a synchronous DecidePolicyForNavigationAction and something happens below DidReceiveEvent that
        invalidates the frame ID passed to DecidePolicyForNavigationAction.

        This is a speculative fire-fighting fix.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveKeyEvent):
        (WebKit::WebPageProxy::didReceiveEvent):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::keyEvent):

2012-06-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r121058.
        http://trac.webkit.org/changeset/121058
        https://bugs.webkit.org/show_bug.cgi?id=89809

        Patch causes plugins tests to crash in GTK debug builds
        (Requested by zdobersek on #webkit).

        * Shared/mac/WebMemorySampler.mac.mm:
        (WebKit::WebMemorySampler::sampleWebKit):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::javaScriptObjectsCount):
        (WebKit::InjectedBundle::reportException):
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::callMethod):
        (WebKit::JSNPObject::callObject):
        (WebKit::JSNPObject::callConstructor):
        (WebKit::JSNPObject::put):
        (WebKit::JSNPObject::deleteProperty):
        (WebKit::JSNPObject::getOwnPropertyNames):
        (WebKit::JSNPObject::propertyGetter):
        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::NPJSObject::hasMethod):
        (WebKit::NPJSObject::invoke):
        (WebKit::NPJSObject::invokeDefault):
        (WebKit::NPJSObject::hasProperty):
        (WebKit::NPJSObject::getProperty):
        (WebKit::NPJSObject::setProperty):
        (WebKit::NPJSObject::removeProperty):
        (WebKit::NPJSObject::enumerate):
        (WebKit::NPJSObject::construct):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::convertJSValueToNPVariant):
        (WebKit::NPRuntimeObjectMap::evaluate):
        (WebKit::NPRuntimeObjectMap::moveGlobalExceptionToExecState):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::jsWrapperForWorld):
        (WebKit::WebFrame::computedStyleIncludingVisitedInfo):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInMainFrame):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::getWebCoreStatistics):

2012-06-23  Zan Dobersek  <zandobersek@gmail.com>

        Unreviewed build fix for GTK's WebKit2 build after r121093.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewPopulateContextMenu):

2012-06-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix several GTK+ unit tests.

        GTK+ unit tests using WebViewTest::wait() started to fail due to a
        bug introduced in r121093.

        * UIProcess/API/gtk/tests/WebViewTest.cpp:
        (WebViewTest::wait): Use this instead of m_mainLoop as user data
        for the idle callback.

2012-06-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add ContextMenu API to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=81011

        Reviewed by Martin Robinson.

        Add WebKitWebView::context-menu signal and WebKitContextMenu and
        WebKitContextMenuItem objects to customize the default menu or
        buils new menus.

        * GNUmakefile.list.am: Add new files to destination.
        * UIProcess/API/gtk/WebKitContextMenu.cpp: Added.
        (webkitContextMenuFinalize):
        (webkit_context_menu_init):
        (webkit_context_menu_class_init):
        (webkitContextMenuPopulate): Populate the given vector of
        ContextMenuItems with the WebKitContextMenu items releasing the
        items added to the vector.
        (webkitContextMenuCreate): Create a new WebKitContextMenu for the
        given WKArrayRef of WKContextMenuItemRef.
        (webkitContextMenuSetParentItem): Set the parent menu item of the
        menu. Used when a menu is added as a submenu of a menu item.
        (webkitContextMenuGetParentItem): Return the parent menu item of
        the menu.
        (webkit_context_menu_new): Create a new WebKitContextMenu.
        (webkit_context_menu_new_with_items): Create a new
        WebKitContextMenu using the given list of WebKitContextMenuItem.
        (webkit_context_menu_prepend): Add item at the beginning.
        (webkit_context_menu_append): Add item at the end.
        (webkit_context_menu_insert): Insert item at a random position.
        (webkit_context_menu_move_item): Move an existing item to a new
        position.
        (webkit_context_menu_get_items): Get the list of items.
        (webkit_context_menu_get_n_items): Get the number of items.
        (webkit_context_menu_first): Get the first item.
        (webkit_context_menu_last): Get the last item.
        (webkit_context_menu_get_item_at_position): Get the item at the
        given position.
        (webkit_context_menu_remove): Remove the given item.
        (webkit_context_menu_remove_all): Remove all items.
        * UIProcess/API/gtk/WebKitContextMenu.h: Added.
        * UIProcess/API/gtk/WebKitContextMenuActions.cpp: Added.
        (webkitContextMenuActionIsCheckable): Check if the given stock
        action is a toggle action.
        (webkitContextMenuActionGetActionTag): Get the WebCore
        ContextMenuAction corresponding to the given stock action.
        (webkitContextMenuActionGetForContextMenuItem): Get the stock
        action corresponding to the given WebCore ContextMenuAction.
        (webkitContextMenuActionGetLabel): Get the label string of the
        given stock action.
        * UIProcess/API/gtk/WebKitContextMenuActions.h: Added.
        * UIProcess/API/gtk/WebKitContextMenuActionsPrivate.h: Added.
        * UIProcess/API/gtk/WebKitContextMenuItem.cpp: Added.
        (webkitContextMenuItemFinalize):
        (webkit_context_menu_item_init):
        (webkit_context_menu_item_class_init):
        (checkAndWarnIfMenuHasParentItem): Check whether the given menu
        is already inside another menu showing a warning in such case.
        (webkitContextMenuItemSetSubMenu): Set the submenu of a menu item,
        checking that the menu is not part of another menu and setting the
        item as the parent of the submenu.
        (webkitContextMenuItemCreate): Create a new WebKitContextMenuItem
        for the given WKContextMenuItemRef.
        (webkitContextMenuItemCreateForGtkItem): Create a new
        WebKitContextMenuItem using the given GtkMenuItem.
        (webkitContextMenuItemSetSubMenuFromGtkMenu): Set the given
        GtkMenu as submenu of the item. This is used only to add Input
        Methods submenu that is created by GTK.
        (webkitContextMenuItemRelease): Release the WebCore
        ContextMenuItem associated to the item.
        (webkit_context_menu_item_new): Create a new WebKitContextMenuItem
        for the given GtkAction.
        (webkit_context_menu_item_new_from_stock_action): Create a new
        WebKitContextMenuItem for a stock action.
        (webkit_context_menu_item_new_from_stock_action_with_label):
        Create a new WebKitContextMenuItem for a stock action using a
        custom label.
        (webkit_context_menu_item_new_with_submenu): Create a new
        WebKitContextMenuItem with a submenu.
        (webkit_context_menu_item_new_separator): Create a new separator
        menu item.
        (webkit_context_menu_item_get_action): Get the GtkAction of the item.
        (webkit_context_menu_item_get_stock_action): Get the stock action
        of the item.
        (webkit_context_menu_item_is_separator): Whether item is a separator.
        (webkit_context_menu_item_set_submenu): Set or replace the
        submenu of the item.
        (webkit_context_menu_item_get_submenu): Get the submenu of the item.
        * UIProcess/API/gtk/WebKitContextMenuItem.h: Added.
        * UIProcess/API/gtk/WebKitContextMenuItemPrivate.h: Added.
        * UIProcess/API/gtk/WebKitContextMenuPrivate.h: Added.
        * UIProcess/API/gtk/WebKitDefines.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_class_init): Add WebKitWebView::context-menu signal.
        (getUnicodeMenuItemPosition): Helper function that returns the
        position of the unicode menu item in the proposed context menu.
        (webkitWebViewCreateAndAppendInputMethodsMenuItem): Use
        WebKitContextMenu API to add the input methods submenu to the
        default context menu.
        (webkitWebViewPopulateContextMenu): Create a WebKitContextMenu for
        the default context menu and emit WebKitWebView::context-menu
        signal. Then populate the context menu proxy with the resulting
        WebKitContextMenu.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseButtonPressEvent): In case of right click save
        the event to be used by context menu signal.
        (webkitWebViewBaseTakeContextMenuEvent): Return and release the
        saved button event.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add sections for
        WebKitContextMenu and WebKitContextMenuItem.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.
        * UIProcess/API/gtk/docs/webkit2gtk.types: Add
        webkit_context_menu_get_type and webkit_context_menu_item_get_type.
        * UIProcess/API/gtk/tests/GNUmakefile.am: Add new test for context menu.
        * UIProcess/API/gtk/tests/TestContextMenu.cpp: Added.
        (testContextMenuDefaultMenu):
        (testContextMenuPopulateMenu):
        (testContextMenuCustomMenu):
        (testContextMenuDisableMenu):
        (testContextMenuSubMenu):
        (beforeAll):
        (afterAll):
        * UIProcess/API/gtk/tests/TestMain.h:
        (Test::addLogFatalFlag): Add a log level flag to the mask of flags
        causing the program to abort.
        (Test::removeLogFatalFlag): Remove a log level flag to the mask of
        flags causing the program to abort.
        * UIProcess/API/gtk/tests/WebViewTest.cpp:
        (WebViewTest::quitMainLoop): Finish the main loop.
        (WebViewTest::quitMainLoopAfterProcessingPendingEvents): Finish
        the main loop when all pending events have been processed.
        (quitMainLoopIdleCallback):
        (WebViewTest::wait):
        * UIProcess/API/gtk/tests/WebViewTest.h:
        * UIProcess/API/gtk/webkit2.h: Include WebKitContextMenu.h,
        WebKitContextMenuItem.h and WebKitContextMenuActions.h.
        * UIProcess/API/gtk/webkit2marshal.list:
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::showContextMenu): Attach the
        popup menu to the view widget before showing it.

2012-06-22  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Shaders] Re-enable the CSS Shaders compile time flag on Safari Mac
        https://bugs.webkit.org/show_bug.cgi?id=89781

        Reviewed by Dean Jackson.

        Added ENABLE_CSS_SHADERS flag as enabled by default on Safari for Mac.

        * Configurations/FeatureDefines.xcconfig:

2012-06-22  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Support keyboard event
        https://bugs.webkit.org/show_bug.cgi?id=89268

        Reviewed by Chang Shu.

        * WebProcess/WebCoreSupport/efl/WebEditorClientEfl.cpp:
        (WebKit::WebEditorClient::handleKeyboardEvent): Implemented default behavior.
        * WebProcess/WebPage/efl/WebPageEfl.cpp:
        (WebKit::WebPage::interpretKeyEvent): Implemented like WebKit1/Efl did.

2012-06-20  Mark Hahnenberg  <mhahnenberg@apple.com>

        JSLock should be per-JSGlobalData
        https://bugs.webkit.org/show_bug.cgi?id=89123

        Reviewed by Gavin Barraclough.

        Changed all sites that used JSLock to instead use the new JSLockHolder
        and pass in the correct JS context that the code is about to interact with that 
        needs protection.

        * Shared/mac/WebMemorySampler.mac.mm:
        (WebKit::WebMemorySampler::sampleWebKit):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::javaScriptObjectsCount):
        (WebKit::InjectedBundle::reportException):
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::callMethod):
        (WebKit::JSNPObject::callObject):
        (WebKit::JSNPObject::callConstructor):
        (WebKit::JSNPObject::put):
        (WebKit::JSNPObject::deleteProperty):
        (WebKit::JSNPObject::getOwnPropertyNames):
        (WebKit::JSNPObject::propertyGetter):
        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::NPJSObject::hasMethod):
        (WebKit::NPJSObject::invoke):
        (WebKit::NPJSObject::invokeDefault):
        (WebKit::NPJSObject::hasProperty):
        (WebKit::NPJSObject::getProperty):
        (WebKit::NPJSObject::setProperty):
        (WebKit::NPJSObject::removeProperty):
        (WebKit::NPJSObject::enumerate):
        (WebKit::NPJSObject::construct):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::convertJSValueToNPVariant):
        (WebKit::NPRuntimeObjectMap::evaluate):
        (WebKit::NPRuntimeObjectMap::moveGlobalExceptionToExecState):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::jsWrapperForWorld):
        (WebKit::WebFrame::computedStyleIncludingVisitedInfo):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInMainFrame):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::getWebCoreStatistics):

2012-06-22  Jocelyn Turcotte  <turcotte.j@gmail.com>

        [Qt] Fix the remote inspector loading problems on Mac
        https://bugs.webkit.org/show_bug.cgi?id=89747

        Reviewed by Simon Hausmann.

        Reverse the creation order of the inter-dependent WebSocketServerConnection
        and SocketStreamHandle to make sure that the later has a client properly
        set on construction.

        This is to work around the assert on m_state in SocketStreamHandle::setClient.

        * UIProcess/InspectorServer/WebSocketServer.cpp:
        (WebKit::WebSocketServer::didAcceptConnection):
        * UIProcess/InspectorServer/WebSocketServer.h:
        (WebKit::WebSocketServer::client):
        (WebSocketServer):
        * UIProcess/InspectorServer/WebSocketServerConnection.cpp:
        (WebKit::WebSocketServerConnection::WebSocketServerConnection):
        (WebKit::WebSocketServerConnection::setSocketHandle):
        (WebKit):
        * UIProcess/InspectorServer/WebSocketServerConnection.h:
        (WebSocketServerConnection):
        * UIProcess/InspectorServer/qt/WebSocketServerQt.cpp:
        (WebKit::QtTcpServerHandler::handleNewConnection):

2012-06-22  Sergio Villar Senin  <svillar@igalia.com>

        [WK2] FindController::hideFindUI should unmark highlighted text matches
        https://bugs.webkit.org/show_bug.cgi?id=77747

        Reviewed by Carlos Garcia Campos.

        Unmark all text matches whenever FindController::hideFindUI is
        called to allow callers using the ShowHighlight find option to
        remove highlighting.

        This patch enables a unit test for the WebKitFindController
        previously guarded by a #if(0) after r109222.

        * UIProcess/API/gtk/tests/TestWebKitFindController.cpp:
        (testFindControllerHide):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::hideFindUI):

2012-06-21  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] Add C API to inspect a Web Intent
        https://bugs.webkit.org/show_bug.cgi?id=89275

        Reviewed by Anders Carlsson.

        Add C API for Web Intent so that it can be queried
        on client side.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * UIProcess/API/C/WKIntentData.cpp: Copied from Source/WebKit2/UIProcess/WebIntentData.cpp.
        (WKIntentDataGetTypeID):
        (WKIntentDataCopyAction):
        (WKIntentDataCopyType):
        (WKIntentDataCopyService):
        (WKIntentDataCopySuggestions):
        (WKIntentDataCopyExtra):
        (WKIntentDataCopyExtras):
        * UIProcess/API/C/WKIntentData.h: Copied from Source/WebKit2/UIProcess/WebIntentData.cpp.
        * UIProcess/WebIntentData.cpp:
        (WebKit::WebIntentData::suggestions):
        (WebKit):
        (WebKit::WebIntentData::extra):
        (WebKit::WebIntentData::extras):
        * UIProcess/WebIntentData.h:
        (WebIntentData):

2012-06-21  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] Properly encode/decode service in IntentData
        https://bugs.webkit.org/show_bug.cgi?id=89460

        Reviewed by Gustavo Noronha Silva.

        Update IntentData::encode() and IntentData::decode()
        so that the "service" member is properly encoded
        and decoded.

        * Shared/IntentData.cpp:
        (WebKit::IntentData::encode):
        (WebKit::IntentData::decode):

2012-06-21  Ryuan Choi  <ryuan.choi@gmail.com>

        [EFL][WK2] Make WebKit2/Efl headers and resources installable.
        https://bugs.webkit.org/show_bug.cgi?id=88207

        Reviewed by Chang Shu.

        * CMakeLists.txt: Install WebProcess.
        * PlatformEfl.cmake: Generate ewebkit2.pc and install it.
        * efl/ewebkit2.pc.in: Added.

2012-06-21  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL[WK2] Add WKViewEfl and WebKit2 API Object to represent Evas_Object.
        https://bugs.webkit.org/show_bug.cgi?id=88935

        Reviewed by Chang Shu.

        Add WKViewEfl to support WTR/Efl.

        * PlatformEfl.cmake:
        * Shared/API/c/WKBase.h:
        * Shared/API/c/efl/WKBaseEfl.h: Added.
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/efl/WKAPICastEfl.h: Added.
        (WebKit):
        * UIProcess/API/C/efl/WKView.cpp: Added.
        (WKViewCreate):
        (WKViewGetPage):
        * UIProcess/API/C/efl/WKView.h: Added.
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_page_get):
        * UIProcess/API/efl/ewk_view_private.h:

2012-06-21  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [Qt] API tests for ColorChooser
        https://bugs.webkit.org/show_bug.cgi?id=88101

        Reviewed by Kenneth Rohde Christiansen.

        The test uses the value sanitization to detect if the feature is
        enabled or disabled and will just pass when disabled.

        * UIProcess/API/qt/tests/qmltests/WebView/tst_colorChooser.qml: Added.
        * UIProcess/API/qt/tests/qmltests/common/colorChooser.html: Added.

2012-06-21  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [WK2][Qt] Color chooser API missing
        https://bugs.webkit.org/show_bug.cgi?id=87749

        Reviewed by Kenneth Rohde Christiansen.

        Added public experimental API for ColorChooser. This will
        allow the browser to define a custom dialog for selecting
        color when a input field of type "color" get focus.

        The current implementation gives a model to the QML Component
        that has methods for canceling a request, selecting a color
        and fetching what is the current value of the HTML input.

        * Target.pri:
        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::QQuickWebViewPrivate):
        (QQuickWebViewExperimental::colorChooser):
        (QQuickWebViewExperimental::setColorChooser):
        * UIProcess/API/qt/qquickwebview_p.h:
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):
        * UIProcess/qt/QtPageClient.cpp:
        (WebKit::QtPageClient::createColorChooserProxy):
        * UIProcess/qt/WebColorChooserProxyQt.cpp: Added.
        (WebKit):
        (ColorChooserContextObject):
        (WebKit::ColorChooserContextObject::ColorChooserContextObject):
        (WebKit::ColorChooserContextObject::currentColor):
        (WebKit::ColorChooserContextObject::accept):
        (WebKit::ColorChooserContextObject::reject):
        (WebKit::WebColorChooserProxyQt::WebColorChooserProxyQt):
        (WebKit::WebColorChooserProxyQt::~WebColorChooserProxyQt):
        (WebKit::WebColorChooserProxyQt::createItem):
        (WebKit::WebColorChooserProxyQt::createContext):
        (WebKit::WebColorChooserProxyQt::setSelectedColor):
        (WebKit::WebColorChooserProxyQt::notifyColorSelected):
        (WebKit::WebColorChooserProxyQt::endChooser):
        * UIProcess/qt/WebColorChooserProxyQt.h: Added.
        (WebCore):
        (WebKit):
        (WebColorChooserProxyQt):
        (WebKit::WebColorChooserProxyQt::create):

2012-06-21  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Add support for window.showModalDialog in WebKit2GTK+
        https://bugs.webkit.org/show_bug.cgi?id=79500

        Reviewed by Carlos Garcia Campos.

        Implement runModal in WebKitUIClient to make the WebKitWebView
        emit a 'run-as-modal' signal when requested, creating a new
        mainloop there to block user interaction with the original window
        while the modal dialog is showing.

        * UIProcess/API/gtk/WebKitUIClient.cpp:
        (runModal): Call to the new webkitWebViewRunAsModalPage function.
        (attachUIClientToView): Add runModal.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (_WebKitWebViewPrivate): Add an atribute for a new main loop.
        (webkitWebViewFinalize): Make sure the main loop for main dialogs,
        if any, is stopped if it was still running.
        (webkit_web_view_class_init): Declare new signal 'run-as-modal'.
        (webkitWebViewRunAsModal): Emit the 'run-as-modal' signal and, if
        handled, create and run a new main loop.
        * UIProcess/API/gtk/WebKitWebView.h:
        (_WebKitWebViewClass): New handler for the 'run-as-modal' signal.
        * UIProcess/API/gtk/WebKitWebViewPrivate.h: Add webkitWebViewRunAsModalPage.

        Allow setting and getting the value of WebPage's canRunModal
        attribute in the WebProcess from the UIProcess after the creation
        of a WebPage, to allow using it from WebKitWebView to allow the
        client application to decide whether to allow create modal
        dialogs, which would result in launching an additional nested
        event loop in the web process, after creating the dialog.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Initialize the new
        m_canRunModal attribute, to cache the current status of the
        WebPage in the WebProcess.
        (WebKit::WebPageProxy::initializeUIClient): Call the new function
        setCanRunModal, instead of manually sending the SetCanRunModal message.
        (WebKit::WebPageProxy::creationParameters): Use m_canRunModal
        instead of m_uiClient.canRunModal when preparing the parameters.
        (WebKit::WebPageProxy::setCanRunModal): New public function, it
        sets the value of m_canRunModal and sends a message to the Web
        process for updating the WebPage, whenever possible.
        (WebKit::WebPageProxy::canRunModal): New public function, returns
        the value of the m_canRunModal attribute.
        * UIProcess/WebPageProxy.h:
        (WebPageProxy): Added new public functions and private attribute.

        New property in WebKitSettings to be able to decide whether it is
        allowed to create and run new child webviews as modal dialogs.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (_WebKitSettingsPrivate): New attribute allowModalDialogs.
        (webKitSettingsSetProperty): Handle the new property.
        (webKitSettingsGetProperty): Ditto.
        (webkit_settings_class_init): Install the new property.
        (webkitSettingsAttachSettingsToPage): Make sure the WebPage is
        initialized with the value of the new property.
        (webkit_settings_set_allow_modal_dialogs): New setter.
        (webkit_settings_get_allow_modal_dialogs): New getter.
        * UIProcess/API/gtk/WebKitSettings.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Added new accessors.

        Connect to the 'notify::allow-modal-dialogs' signal from
        WebKitSettings to ensure that canRunModal property of the WebPage
        is kept up to date. Ensure that signal handlers for monitoring
        settings are disconnected when the webview is finalized.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewSetSettings): Connect to the new signal
        'notify::allow-modal-dialogs', from WebKitSettings.
        (allowModalDialogsChanged): Callback to update WebPage's
        canRunModal property when updated through WebKitSettings.
        (webkitWebViewDisconnectSettingsSignalHandlers): Disconnect signal
        handlers for monitoring WebKitSettings properties.
        (webkitWebViewFinalize): Ensure signal handlers are disconnected.
        (webkit_web_view_set_settings): Ditto.
        * UIProcess/API/gtk/WebKitWebView.h:

        Add new unit tests to check the 'run-as-modal' signal is emitted
        only when the new property in WebKitSettings is set to TRUE.

        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
        (testWebViewAllowModalDialogs): New unit test to check that modal
        dialogs are properly created from JavaScript when allowed.
        (testWebViewDisallowModalDialogs): New unit test to check that
        it's not possible to create modal dialogs when not allowed.
        (beforeAll): Add the new unit test.

2012-06-20  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [WK2] Color chooser API missing
        https://bugs.webkit.org/show_bug.cgi?id=87495

        Reviewed by Andreas Kling.

        Added ColorChooser API to WebKit2. This API allows the
        embedder to define a custom color picker for <input type="color">.

        Only one ColorChooser can be active for a page at a time. Although
        the implementation doesn't not assume a modal dialog, no other
        color chooser will be created until the active one is closed.

        Also added stubs for all platforms, so it wont break the build when
        enabling color chooser, even though they don't have the backend
        implemented yet.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit):
        (WebKit::PageClientImpl::createColorChooserProxy):
        * UIProcess/API/efl/PageClientImpl.h:
        (PageClientImpl):
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit):
        (WebKit::PageClientImpl::createColorChooserProxy):
        * UIProcess/API/gtk/PageClientImpl.h:
        (PageClientImpl):
        * UIProcess/API/mac/PageClientImpl.h:
        (PageClientImpl):
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit):
        (WebKit::PageClientImpl::createColorChooserProxy):
        * UIProcess/PageClient.h:
        (WebKit):
        (PageClient):
        * UIProcess/WebColorChooserProxy.h: Added.
        (WebCore):
        (WebKit):
        (WebColorChooserProxy):
        (Client):
        (WebKit::WebColorChooserProxy::Client::~Client):
        (WebKit::WebColorChooserProxy::~WebColorChooserProxy):
        (WebKit::WebColorChooserProxy::invalidate):
        (WebKit::WebColorChooserProxy::WebColorChooserProxy):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        (WebKit):
        (WebKit::WebPageProxy::showColorChooser):
        (WebKit::WebPageProxy::setColorChooserColor):
        (WebKit::WebPageProxy::endColorChooser):
        (WebKit::WebPageProxy::didChooseColor):
        (WebKit::WebPageProxy::didEndColorChooser):
        (WebKit::WebPageProxy::processDidCrash):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/qt/QtPageClient.cpp:
        (WebKit):
        (WebKit::QtPageClient::createColorChooserProxy):
        * UIProcess/qt/QtPageClient.h:
        (QtPageClient):
        * UIProcess/win/WebView.cpp:
        (WebKit):
        (WebKit::WebView::createColorChooserProxy):
        * UIProcess/win/WebView.h:
        (WebView):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createColorChooser):
        * WebProcess/WebCoreSupport/WebColorChooser.cpp: Added.
        (WebKit):
        (WebKit::WebColorChooser::WebColorChooser):
        (WebKit::WebColorChooser::~WebColorChooser):
        (WebKit::WebColorChooser::didChooseColor):
        (WebKit::WebColorChooser::didEndChooser):
        (WebKit::WebColorChooser::disconnectFromPage):
        (WebKit::WebColorChooser::setSelectedColor):
        (WebKit::WebColorChooser::endChooser):
        * WebProcess/WebCoreSupport/WebColorChooser.h: Added.
        (WebCore):
        (WebKit):
        (WebColorChooser):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::close):
        (WebKit):
        (WebKit::WebPage::setActiveColorChooser):
        (WebKit::WebPage::didEndColorChooser):
        (WebKit::WebPage::didChooseColor):
        * WebProcess/WebPage/WebPage.h:
        (WebKit):
        (WebPage):
        (WebKit::WebPage::activeColorChooser):
        * WebProcess/WebPage/WebPage.messages.in:
        * win/WebKit2.vcproj:

2012-06-20  Brady Eidson  <beidson@apple.com>

        <rdar://problem/11653784> and https://bugs.webkit.org/show_bug.cgi?id=89590
        showModalDialog message handling is flaky in WebKit2

        Because RunLoop::performWork() swaps the function queue to a temporary Vector before calling
        the functions an inner run-loop - such as we see with running a modal dialog - does not have
        a change to handle any of the functions that were queued after the WebPageProxy::RunModal message.

        By servicing the functions in the queue one at a time we can give the RunLoop a chance to pick up
        where it left off if RunLoop::performWork is re-entered.

        To guarantee RunLoop::performWork is re-entered to handle those functions we also need to signal
        its source before entering the modal run loop so our RunLoop is woken up.

        Reviewed by Darin Adler.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::wakeUpRunLoop): Added so the WebPageProxy can signal the runloop to be woken up
          before it enters the modal dialog run loop.
        * Platform/CoreIPC/Connection.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runModal): Call wakeUpRunLoop() before entering the modal dialog run loop.

2012-06-20  Julien Chaffraix  <jchaffraix@webkit.org>

        Use IntSize in RenderLayer to represent scroll offsets
        https://bugs.webkit.org/show_bug.cgi?id=89154

        Reviewed by Eric Seidel.

        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::gestureDidScroll):
        Updated to pass an IntSize to scrollByRecursively.

2012-06-20  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] Implement Web Intent delivery
        https://bugs.webkit.org/show_bug.cgi?id=88989

        Reviewed by Anders Carlsson.

        Add a deliverIntent() method to the WebFrame so that
        Web intents can be delivered once matched to a
        specific service.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit):
        (WebKit::WebFrameProxy::deliverIntent):
        * UIProcess/WebFrameProxy.h:
        (WebKit):
        (WebFrameProxy):
        * UIProcess/WebIntentData.h:
        (WebKit::WebIntentData::store):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit):
        (WebKit::WebFrame::deliverIntent):
        * WebProcess/WebPage/WebFrame.h:
        (WebKit):
        (WebFrame):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit):
        (WebKit::WebPage::deliverIntentToFrame):
        * WebProcess/WebPage/WebPage.h:
        (WebKit):
        (WebPage):
        * WebProcess/WebPage/WebPage.messages.in:

2012-06-20  Alexis Menard  <alexis.menard@openbossa.org>

        REGRESSION (120705) : LayerTreeHostQt asserts in debug.
        https://bugs.webkit.org/show_bug.cgi?id=89487

        Reviewed by Noam Rosenthal.

        We try to call createHandle twice on the same handle when the
        first matching atlas is full. This patch solved the problem by
        moving the createHandle call inside UpdateAtlas and call createHandle
        only when the atlas is not full. We can also remove the surface()
        getter as it is not used anymore.

        * WebProcess/WebPage/UpdateAtlas.cpp:
        (WebKit::UpdateAtlas::beginPaintingOnAvailableBuffer):
        * WebProcess/WebPage/UpdateAtlas.h:
        (UpdateAtlas):
        * WebProcess/WebPage/qt/LayerTreeHostQt.cpp:
        (WebKit::LayerTreeHostQt::beginContentUpdate):

2012-06-19  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][Regression] Build break after r120786
        https://bugs.webkit.org/show_bug.cgi?id=89549

        Unreviewed build fix for Efl port.

        * CMakeLists.txt: Added disassembler in includes.

2012-06-19  Dan Bernstein  <mitz@apple.com>

        WebKit2 part of: Paginated display API doesn’t allow setting the page progression direction
        https://bugs.webkit.org/show_bug.cgi?id=89394

        Reviewed by Darin Adler.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPaginationMode): Changed to map new WKPaginationMode values to new
        Pagination::Mode values.
        (WKPageGetPaginationMode): Similarly, in the opposite direction.
        * UIProcess/API/C/WKPagePrivate.h: Replaced WKPaginationMode values with ones that specify
        an axis and a direction along that axis.
        * UIProcess/API/mac/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController setPaginationMode:]): Changed to handle new values.
        (-[WKBrowsingContextController paginationMode]): Ditto.
        * UIProcess/API/mac/WKBrowsingContextControllerPrivate.h: Replaced
        WKBrowsingContextPaginationMode values with ones that specify an axis and a direction along
        that axis.

2012-06-19  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt] Create an extra atlas when there is no available buffer space.
        https://bugs.webkit.org/show_bug.cgi?id=89012

        Reviewed by Noam Rosenthal.

        In case of the desktop mode when we scroll the view all the tiles
        are updated. It can happen that there no available buffer space for
        the currently used atlas(especially when scrolling fast). In that case 
        we can create a new one. One future improvement could be to make a timer and 
        delete this extra atlas when it is not used.

        * WebProcess/WebPage/qt/LayerTreeHostQt.cpp:
        (WebKit::beginContentUpdateInAtlas):
        (WebKit::LayerTreeHostQt::beginContentUpdate):
        * WebProcess/WebPage/qt/LayerTreeHostQt.h:
        (LayerTreeHostQt):

2012-06-19  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Buildfix for newer Qt5, use QPointer instead of the deprecated QWeakPointer.
        https://bugs.webkit.org/show_bug.cgi?id=89449

        Reviewed by Simon Hausmann.

        * UIProcess/API/qt/qquicknetworkreply_p.h:

2012-06-19  Mike West  <mkwst@chromium.org>

        Introduce ENABLE_CSP_NEXT configuration flag.
        https://bugs.webkit.org/show_bug.cgi?id=89300

        Reviewed by Adam Barth.

        The 1.0 draft of the Content Security Policy spec is just about to
        move to Last Call. We'll hide work on the upcoming 1.1 spec behind
        this ENABLE flag, disabled by default.

        Spec: https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html

        * Configurations/FeatureDefines.xcconfig:

2012-06-19  Mike West  <mkwst@chromium.org>

        Add a scheme registry for bypassing Content Security Policy.
        https://bugs.webkit.org/show_bug.cgi?id=89373

        Reviewed by Adam Barth.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-06-16  Adam Barth  <abarth@webkit.org>

        Settings::devicePixelRatio doesn't do anything and is confusing
        https://bugs.webkit.org/show_bug.cgi?id=89272

        Reviewed by James Robinson.

        * Shared/WebPreferencesStore.h:
        (WebKit):
            - Remove boilerplate code for the setting.
        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewExperimental::devicePixelRatio):
        (QQuickWebViewExperimental::setDevicePixelRatio):
            - Change these functions to get and set the real device scale factor.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::sendViewportAttributesChanged):
            - Use the real device scale factor for the viewport calculation.
        (WebKit::WebPage::updatePreferences):
            - Remove boilerplate code for the setting.

2012-06-15  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] Add support for explicit intents
        https://bugs.webkit.org/show_bug.cgi?id=89206

        Reviewed by Kenneth Rohde Christiansen.

        Expose the service URL of a Web Intent. This URL
        is set for explicit intents.

        * Shared/IntentData.h:
        (IntentData):
        * UIProcess/WebIntentData.h:
        (WebKit::WebIntentData::service):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchIntent):

2012-06-15  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add title support to Ewk_View
        https://bugs.webkit.org/show_bug.cgi?id=89095

        Reviewed by Kenneth Rohde Christiansen.

        Add a method to get the title of the main frame in
        an Ewk_View. A "title,changed" signal is now emitted
        on the view to notify clients that the main frame
        title was changed.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_ewk_view_priv_del):
        (ewk_view_base_add):
        (ewk_view_title_get):
        (ewk_view_title_changed):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_loader_client.cpp: Added.
        (didReceiveTitleForFrame):
        (ewk_view_loader_client_attach):
        * UIProcess/API/efl/ewk_view_loader_client_private.h: Added.
        * UIProcess/API/efl/ewk_view_private.h:

2012-06-15  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][EFL] Implement navigation back/forward in Ewk_View
        https://bugs.webkit.org/show_bug.cgi?id=89173

        Reviewed by Kenneth Rohde Christiansen.

        Add API for Ewk_View to ask the main frame to navigate backwards
        or forwards in history. Also add API to query if such navigation
        is possible.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_back):
        (ewk_view_forward):
        (ewk_view_back_possible):
        (ewk_view_forward_possible):
        * UIProcess/API/efl/ewk_view.h:

2012-06-15  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Implement reload / stop in Ewk_View
        https://bugs.webkit.org/show_bug.cgi?id=89168

        Reviewed by Kenneth Rohde Christiansen.

        Add API on the Ewk_View to reload the main frame
        and to stop the current load.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_reload):
        (ewk_view_stop):
        * UIProcess/API/efl/ewk_view.h:

2012-06-14  Kent Tamura  <tkent@chromium.org>

        Validate form state strings in FormController::setStateForNewFormElements()
        https://bugs.webkit.org/show_bug.cgi?id=88768

        Reviewed by Hajime Morita.

        * win/WebKit2.def: Expose some symbols used by Internals.cpp.
        * win/WebKit2CFLite.def: ditto.

2012-06-14  Tim Horton  <timothy_horton@apple.com>

        DrawingArea: Painting is being resumed while the view is not visible
        https://bugs.webkit.org/show_bug.cgi?id=88940
        <rdar://problem/11652545>

        Reviewed by Dean Jackson.

        Using requestAnimationFrame and the fullscreen API on a DrawingArea-backed window would cause
        rAF to permanently suspend animations after entering full-screen mode, because of the following:

        0. JavaScript causes fullscreen transition to start.
        1. Painting (and rAF) are suspended.
        2. The page changes size.
            a. DrawingAreaProxyImpl::sizeDidChange() calls DrawingAreaImpl::updateBackingStoreState, which calls DrawingAreaImpl::resumePainting.
            b. DrawingAreaImpl::resumePainting resumes painting, but does *not* resume rAF, because windowIsVisible is (legitimately) false.
        3. The view becomes visible, windowIsVisible is updated to true.
        4. visibilityDidChange() calls resumePainting again, but this time it early exits because painting is not suspended.

        Notice that because of the early exit in 4, rAF is never resumed.

        To solve this and prevent any further bugs caused by these unnecessary calls to resume/suspendPainting,
        temporarily stop sending SuspendPainting/ResumePainting messages from DrawingAreaProxyImpl::visibilityDidChange
        during the window animations that occur while entering and exiting full-screen.

        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView setAutomaticallySuspendAndResumePainting:]):
        (-[WKView automaticallySuspendAndResumePainting]):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::visibilityDidChange):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::setShouldSuspendAndResumePainting):
        (WebKit::WebPageProxy::shouldSuspendAndResumePainting):
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController enterFullScreen:]):
        (-[WKFullScreenWindowController _startEnterFullScreenAnimationWithDuration:]):

2012-06-14  Jia Pu  <jpu@apple.com>

        Mark text with text alternative with blue underline.
        https://bugs.webkit.org/show_bug.cgi?id=83047

        Reviewed by Enrica Casucci.

        Changes in WebKit2 include implementation of new functions declared in AlternativeTextClient,
        and logic for calling Editor::insertDictatedText() instead of Editor::insertText() when there's
        alternatives attached to the input string.

        * Shared/API/c/WKContextMenuItemTypes.h:
        * Shared/API/c/WKSharedAPICast.h:
        * Shared/WebCoreArgumentCoders.cpp:
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::PageClientImpl):
        (WebKit::PageClientImpl::pageClosed):
        (WebKit::PageClientImpl::addDictationAlternatives):
        (WebKit::PageClientImpl::removeDictationAlternatives):
        (WebKit::PageClientImpl::showDictationAlternativeUI):
        (WebKit::PageClientImpl::dictationAlternatives):
        (WebKit::PageClientImpl::dismissDictationAlternativeUI):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView insertText:replacementRange:]):
        (-[WKView validAttributesForMarkedText]):
        (-[WKView handleAcceptedAlternativeText:]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showDictationAlternativeUI):
        (WebKit::WebPageProxy::dismissDictationAlternativeUI):
        (WebKit::WebPageProxy::removeDictationAlternatives):
        (WebKit::WebPageProxy::dictationAlternatives):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/CorrectionPanel.mm:
        (correctionIndicatorType):
        (WebKit::CorrectionPanel::handleAcceptedReplacement):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::insertDictatedText):
        * WebProcess/WebCoreSupport/WebAlternativeTextClient.h:
        (WebAlternativeTextClient):
        * WebProcess/WebCoreSupport/mac/WebAlternativeTextClient.cpp:
        (WebKit::WebAlternativeTextClient::showCorrectionAlternative):
        (WebKit::WebAlternativeTextClient::dismissAlternative):
        (WebKit::WebAlternativeTextClient::dismissAlternativeSoon):
        (WebKit::WebAlternativeTextClient::recordAutocorrectionResponse):
        (WebKit::WebAlternativeTextClient::removeDictationAlternatives):
        (WebKit::WebAlternativeTextClient::showDictationAlternativeUI):
        (WebKit::WebAlternativeTextClient::dismissDictationAlternativeUI):
        (WebKit::WebAlternativeTextClient::dictationAlternatives):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::insertDictatedText):

2012-06-13  Andreas Kling  <kling@webkit.org>

        Chinese IM receives incorrect/duplicated key events in text fields in webpages in Safari.
        <http://webkit.org/b/89048>
        <rdar://problem/11449702>

        Reviewed by Darin Adler.

        Send the DidReceiveEvent message with the DispatchMessageEvenWhenWaitingForSyncReply flag
        for keyboard events. This ensures that it always arrives before the corresponding synchronous
        InterpretQueuedKeyEvent message.

        The problem was that we relied on DidReceiveEvent / InterpretQueuedKeyEvent always arriving in
        the same order they were sent. This was not always true, since DidReceiveEvent (async) would
        get deferred during an unrelated waitForSyncReply() whereas InterpretQueuedKeyEvent (sync)
        gets dispatched right away.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::keyEvent):

2012-06-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add input methods submenu item to the default context menu for editable content
        https://bugs.webkit.org/show_bug.cgi?id=80600

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Add new files to compilation.
        * UIProcess/API/gtk/WebKitContextMenuClient.cpp: Added.
        (getContextMenuFromProposedMenu): Call webkitWebViewContextMenu().
        (attachContextMenuClientToView): Add implementation for
        getContextMenuFromProposedMenu callback.
        * UIProcess/API/gtk/WebKitContextMenuClient.h: Added.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewConstructed): Attach context menu client to view.
        (webkitWebViewCreateAndAppendDefaultMenuItems): Helper function to
        add default context menu items to the new context menu items vector.
        (webkitWebViewShouldShowInputMethodsMenu): Helper function to
        check whether to show the input methods submenu according to the
        gtk-show-input-method-menu GTK+ setting.
        (webkitWebViewCreateAndAppendInputMethodsMenuItem): Helper
        function to add input methods submenu to the new context menu
        items vector.
        (webkitWebViewContextMenu): Create a new context menu items vector
        containing default items and input methods submenu in case of
        editable content. The active content menu is populated using that
        new vector.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseSetActiveContextMenu): Set the active context menu.
        (webkitWebViewBaseGetActiveContextMenu): Get the active context menu.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/API/gtk/WebKitWebViewPrivate.h:
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::append): Helper method to add a
        new item to the context menu.
        (WebKit::WebContextMenuProxyGtk::populate): Add items to the
        context menu.
        (WebKit::WebContextMenuProxyGtk::showContextMenu): Populate the
        menu with the given items and popup the menu if it's not empty.
        (WebKit::WebContextMenuProxyGtk::hideContextMenu): Get the GtkMenu
        from the WebCore ContextMenu to popdown it.
        (WebKit::WebContextMenuProxyGtk::WebContextMenuProxyGtk): Call
        webkitWebViewBaseSetActiveContextMenu() to set the menu as the current
        active one for the view.
        (WebKit::WebContextMenuProxyGtk::~WebContextMenuProxyGtk): Call
        webkitWebViewBaseSetActiveContextMenu() with NULL to reset the
        current active context of the view. GtkMenu is destroyed by
        WebCore ContextMenu in its destructor.
        * UIProcess/gtk/WebContextMenuProxyGtk.h:

2012-06-14  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] Add implementation for registerIntentService in WebFrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=88399

        Reviewed by Kenneth Rohde Christiansen.

        Add implementation for registerIntentService() in
        WebFrameLoaderClient.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Shared/API/c/WKBase.h:
        * Shared/APIClientTraits.h:
        * Shared/APIObject.h:
        * Shared/IntentServiceInfo.cpp: Added.
        (WebKit):
        (WebKit::IntentServiceInfo::encode):
        (WebKit::IntentServiceInfo::decode):
        * Shared/IntentServiceInfo.h: Added.
        (CoreIPC):
        (WebKit):
        (IntentServiceInfo):
        * Target.pri:
        * UIProcess/API/C/WKAPICast.h:
        (WebKit):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        (attachLoaderClientToView):
        * UIProcess/WebIntentServiceInfo.cpp: Added.
        (WebKit):
        (WebKit::WebIntentServiceInfo::WebIntentServiceInfo):
        * UIProcess/WebIntentServiceInfo.h: Added.
        (WebKit):
        (WebIntentServiceInfo):
        (WebKit::WebIntentServiceInfo::create):
        (WebKit::WebIntentServiceInfo::~WebIntentServiceInfo):
        (WebKit::WebIntentServiceInfo::action):
        (WebKit::WebIntentServiceInfo::payloadType):
        (WebKit::WebIntentServiceInfo::href):
        (WebKit::WebIntentServiceInfo::title):
        (WebKit::WebIntentServiceInfo::disposition):
        (WebKit::WebIntentServiceInfo::type):
        * UIProcess/WebLoaderClient.cpp:
        (WebKit):
        (WebKit::WebLoaderClient::registerIntentServiceForFrame):
        * UIProcess/WebLoaderClient.h:
        (WebKit):
        (WebLoaderClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit):
        (WebKit::WebPageProxy::registerIntentServiceForFrame):
        * UIProcess/WebPageProxy.h:
        (WebKit):
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit):
        (WebKit::WebFrameLoaderClient::registerIntentService):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        (WebFrameLoaderClient):

2012-06-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WK2] Add WKHitTestResultIsContentEditable()
        https://bugs.webkit.org/show_bug.cgi?id=80597

        Reviewed by Martin Robinson.

        * Shared/WebHitTestResult.cpp:
        (WebKit::WebHitTestResult::Data::encode): Encode isContentEditable.
        (WebKit::WebHitTestResult::Data::decode): Decode isContentEditable.
        * Shared/WebHitTestResult.h:
        (Data): Add isContentEditable.
        (WebKit::WebHitTestResult::Data::Data): Initialize
        isContentEditable.
        (WebKit::WebHitTestResult::isContentEditable): Returns whether
        hit test result target is editable content.
        * UIProcess/API/C/WKHitTestResult.cpp:
        (WKHitTestResultIsContentEditable): C API to get whether hit test
        result target is editable content.
        * UIProcess/API/C/WKHitTestResult.h:
        * UIProcess/API/gtk/WebKitHitTestResult.cpp:
        (webkitHitTestResultCreate): Add
        WEBKIT_HIT_TEST_RESULT_CONTEXT_EDITABLE flags to the context if
        hit test result target is editable content.
        (webkit_hit_test_result_context_is_editable): Returns TRUE if
        WEBKIT_HIT_TEST_RESULT_CONTEXT_EDITABLE flags is present in
        context.
        * UIProcess/API/gtk/WebKitHitTestResult.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.
        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
        (testWebViewMouseTarget): Add tests for
        WEBKIT_HIT_TEST_RESULT_CONTEXT_EDITABLE.

2012-06-14  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [WK2] Fix client interface size for WKPageLoaderClient.
        https://bugs.webkit.org/show_bug.cgi?id=88764

        Reviewed by Anders Carlsson.

        Fixes offset of WKPageLoaderClient for version 0 by adding didDetectXSSForFrame.
        The offset should be off the first new callback that was added in the new version.

        * Shared/APIClientTraits.cpp:
        (WebKit):

2012-06-13  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] Add implementation for dispatchIntent in WebFrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=88340

        Reviewed by Kenneth Rohde Christiansen.

        Add implementation for dispatchIntent() in WebFrameLoaderClient.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Shared/API/c/WKBase.h:
        * Shared/APIClientTraits.h:
        * Shared/APIObject.h:
        * Shared/IntentData.cpp: Added.
        (WebKit):
        (WebKit::IntentData::encode):
        (WebKit::IntentData::decode):
        * Shared/IntentData.h: Added.
        (CoreIPC):
        (WebKit):
        (IntentData):
        * Target.pri:
        * UIProcess/API/C/WKAPICast.h:
        (WebKit):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        (attachLoaderClientToView):
        * UIProcess/WebIntentData.cpp: Added.
        (WebKit):
        (WebKit::WebIntentData::WebIntentData):
        (WebKit::WebIntentData::data):
        * UIProcess/WebIntentData.h: Added.
        (WebKit):
        (WebIntentData):
        (WebKit::WebIntentData::create):
        (WebKit::WebIntentData::~WebIntentData):
        (WebKit::WebIntentData::action):
        (WebKit::WebIntentData::payloadType):
        (WebKit::WebIntentData::extras):
        (WebKit::WebIntentData::suggestions):
        (WebKit::WebIntentData::type):
        * UIProcess/WebLoaderClient.cpp:
        (WebKit):
        (WebKit::WebLoaderClient::didReceiveIntentForFrame):
        * UIProcess/WebLoaderClient.h:
        (WebKit):
        (WebLoaderClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit):
        (WebKit::WebPageProxy::didReceiveIntentForFrame):
        * UIProcess/WebPageProxy.h:
        (WebKit):
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchIntent):

2012-06-13  Tim Horton  <timothy_horton@apple.com>

        Rename _swapView:with: to _replaceView:with:
        https://bugs.webkit.org/show_bug.cgi?id=89037

        Reviewed by Darin Adler.
        
        _swapView:with: is a misnomer - after calling it, the first view is no longer
        contained within the view hierarchy. "Replace" is a more accurate term.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController enterFullScreen:]):
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]):
        (-[WKFullScreenWindowController _replaceView:with:]):

2012-06-13  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Add an accelerated compositing implementation for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=86037

        Reviewed by Alejandro G. Castro.

        Add an implementation of LayerTreeHost for GTK+ that uses TextureMapperGL.
        Later this implementation will fall back to using the ImageBuffer TextureMapper.

        * GNUmakefile.am: Add new files to the compilation.
        * Shared/LayerTreeContext.h:
        (LayerTreeContext): The GTK+ version of the LayerTreeContext just holds window handle.
        * Shared/gtk/LayerTreeContextGtk.cpp: Copied from Source/WebKit2/WebProcess/WebPage/LayerTreeHost.cpp.
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h: Added.
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp: Added.
        Add this LayerTreeHost implementation that just creates a GL context from the widget X11 window ID.
        Later implementations might find a more cross-platform solution.
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::platformInitialize): Initialize the native window handle to be zero.
        (WebKit::WebPage::widgetMapped): When mapping the widget, try to get the native window
        handle and send it to the WebProcess.

2012-06-13  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] ASSERT(m_rawAttributes.initialScale > 0) in QtViewportHandler::initialRect()
        https://bugs.webkit.org/show_bug.cgi?id=89026

        Reviewed by Csaba Osztrogonác.

        Only act on viewport attribute changes if the layout size is valid.

        * UIProcess/qt/QtViewportHandler.cpp:
        (WebKit::QtViewportHandler::setInitialScaleIfNeeded):
        (WebKit::QtViewportHandler::viewportAttributesChanged):

2012-06-13  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Build fix after Windows export definition file change.

        * win/WebKit2CFLite.def: Add missing symbol exports.

2012-06-13  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] Fixed visible content rect lost during page-load
        https://bugs.webkit.org/show_bug.cgi?id=88991

        Reviewed by Kenneth Rohde Christiansen.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):

2012-06-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r120209.
        http://trac.webkit.org/changeset/120209
        https://bugs.webkit.org/show_bug.cgi?id=89007

        Broke the WebKit2 mac build. (Requested by andersca on
        #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Shared/API/c/WKBase.h:
        * Shared/APIClientTraits.h:
        * Shared/APIObject.h:
        * Shared/IntentData.cpp: Removed.
        * Shared/IntentData.h: Removed.
        * Target.pri:
        * UIProcess/API/C/WKAPICast.h:
        (WebKit):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        (attachLoaderClientToView):
        * UIProcess/WebIntentData.cpp: Removed.
        * UIProcess/WebIntentData.h: Removed.
        * UIProcess/WebLoaderClient.cpp:
        * UIProcess/WebLoaderClient.h:
        (WebKit):
        (WebLoaderClient):
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        (WebKit):
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchIntent):

2012-06-13  Alexis Menard  <alexis.menard@openbossa.org>

        Web Inspector: add a way to get the remote inspector url for a given page.
        https://bugs.webkit.org/show_bug.cgi?id=88902

        Reviewed by Jocelyn Turcotte.

        Expose the remote inspector url for a given page in the API. If you want
        to create a web view and load directly the inspector for the page you want to inspect,
        it helps to get the url as it is impossible to figure it out from the API layer.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewExperimental::remoteInspectorUrl):
        * UIProcess/API/qt/qquickwebview_p.h:
        * UIProcess/InspectorServer/WebInspectorServer.cpp:
        (WebKit):
        (WebKit::WebInspectorServer::inspectorUrlForPageID):
        * UIProcess/InspectorServer/WebInspectorServer.h:
        (WebInspectorServer):
        * UIProcess/InspectorServer/WebSocketServer.cpp:
        (WebKit::WebSocketServer::WebSocketServer):
        (WebKit::WebSocketServer::listen):
        (WebKit::WebSocketServer::close):
        * UIProcess/InspectorServer/WebSocketServer.h:
        (WebKit::WebSocketServer::bindAddress):
        (WebKit::WebSocketServer::port):
        (WebKit::WebSocketServer::serverState):
        (WebSocketServer):
        * UIProcess/InspectorServer/qt/WebInspectorServerQt.cpp:
        (WebKit::remoteInspectorPagePath):
        (WebKit):
        (WebKit::WebInspectorServer::inspectorUrlForPageID):
        (WebKit::WebInspectorServer::buildPageList):
        * UIProcess/WebInspectorProxy.h:
        (WebKit::WebInspectorProxy::remoteInspectionPageID):

2012-06-13  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2] Add implementation for dispatchIntent in WebFrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=88340

        Reviewed by Kenneth Rohde Christiansen.

        Add implementation for dispatchIntent() in WebFrameLoaderClient.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Shared/API/c/WKBase.h:
        * Shared/APIClientTraits.h:
        * Shared/APIObject.h:
        * Shared/IntentData.cpp: Added.
        (WebKit):
        (WebKit::IntentData::encode):
        (WebKit::IntentData::decode):
        * Shared/IntentData.h: Added.
        (CoreIPC):
        (WebKit):
        (IntentData):
        * Target.pri:
        * UIProcess/API/C/WKAPICast.h:
        (WebKit):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        (attachLoaderClientToView):
        * UIProcess/WebIntentData.cpp: Added.
        (WebKit):
        (WebKit::WebIntentData::WebIntentData):
        (WebKit::WebIntentData::data):
        * UIProcess/WebIntentData.h: Added.
        (WebKit):
        (WebIntentData):
        (WebKit::WebIntentData::create):
        (WebKit::WebIntentData::~WebIntentData):
        (WebKit::WebIntentData::action):
        (WebKit::WebIntentData::payloadType):
        (WebKit::WebIntentData::extras):
        (WebKit::WebIntentData::suggestions):
        (WebKit::WebIntentData::type):
        * UIProcess/WebLoaderClient.cpp:
        (WebKit):
        (WebKit::WebLoaderClient::didReceiveIntentForFrame):
        * UIProcess/WebLoaderClient.h:
        (WebKit):
        (WebLoaderClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit):
        (WebKit::WebPageProxy::didReceiveIntentForFrame):
        * UIProcess/WebPageProxy.h:
        (WebKit):
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchIntent):

2012-06-13  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] Scanning plugins blocks the UI for a long time
        https://bugs.webkit.org/show_bug.cgi?id=88535

        Reviewed by Simon Hausmann.

        Implement a persistent cache for the meta data of plugins.
        This way the UI process will not block for too long when
        it's time to scan the plugins (except the first time).
        The cache is a json file stored in a standard hidden cache
        directory.

        * Shared/qt/QtDefaultDataLocation.cpp: Added.
        (WebKit):
        (WebKit::defaultDataLocation):
        * Shared/qt/QtDefaultDataLocation.h: Added.
        (WebKit):
        Added a common helper for the path we use to
        put stuff into.

        * Target.pri:
        * UIProcess/Plugins/qt/PluginProcessProxyQt.cpp:
        (WebKit::cacheFile):
        (WebKit):
        (WebKit::readMetaDataFromCacheFile):
        (WebKit::writeToCacheFile):
        (WebKit::appendToCacheFile):
        (WebKit::tryReadPluginMetaDataFromCacheFile):
        (WebKit::PluginProcessProxy::scanPlugin):
        * UIProcess/qt/WebContextQt.cpp:

2012-06-13  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Do not set contents pos to the current position
        https://bugs.webkit.org/show_bug.cgi?id=88990

        Reviewed by Laszlo Gombos.

        This is basically an optimization but it also solves flickering
        in some cases.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebView::setContentPos):

2012-06-12  MORITA Hajime  <morrita@google.com>

        Shadow Pseudo ID should be able to nest to point nested shadow DOM.
        https://bugs.webkit.org/show_bug.cgi?id=62218

        Reviewed by Dimitri Glazkov.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-06-12  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed build fix.

        * UIProcess/qt/QtViewportHandler.cpp:
        (WebKit::QtViewportHandler::initialRect):

2012-06-11  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Using extrernal ICU library on case unsensitive drives will not work
        https://bugs.webkit.org/show_bug.cgi?id=70913

        Reviewed by Csaba Osztrogonác.

        * WebProcess/WebPage/UpdateAtlas.cpp:

2012-06-12  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Do not move/scale content while the user is interacting with it
        https://bugs.webkit.org/show_bug.cgi?id=88872

        Reviewed by Simon Hausmann.

        Don't try moving content into valid bounds when the content
        size changes and the user is interacting with the content.

        Only apply the viewport initial scale after user interaction
        has ended.

        * UIProcess/qt/QtViewportHandler.cpp:
        (WebKit::ViewportUpdateDeferrer::~ViewportUpdateDeferrer):
        (WebKit::QtViewportHandler::setInitialScaleIfNeeded):
        (WebKit::QtViewportHandler::viewportAttributesChanged):
        (WebKit::QtViewportHandler::pageContentsSizeChanged):
        (WebKit::QtViewportHandler::initialRect):
        (WebKit):
        * UIProcess/qt/QtViewportHandler.h:
        (QtViewportHandler):

2012-06-11  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        [DRT] LTC:: counterValueForElementById() could be moved to Internals.
        https://bugs.webkit.org/show_bug.cgi?id=84406

        Reviewed by Hajime Morita.

        Exporting Internals::counterValueForElement symbols for the win build.

        * win/WebKit2.def:

2012-06-11  Ryuan Choi  <ryuan.choi@samsung.com>

        [CMAKE][WK2] Make WebProcess target name more clear.
        https://bugs.webkit.org/show_bug.cgi?id=88767

        Reviewed by Ryosuke Niwa.

        * CMakeLists.txt: Change WebProcess_NAME to WebProcess_EXECUTABLE_NAME.

2012-06-11  Alexis Menard  <alexis.menard@openbossa.org>

        [CSS3 Backgrounds and Borders] Protect box-decoration-break behind a feature flag.
        https://bugs.webkit.org/show_bug.cgi?id=88804

        Reviewed by Tony Chang.

        Protect box-decoration-break behind a feature flag enabled by default.

        * Configurations/FeatureDefines.xcconfig:

2012-06-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CMAKE][EFL] Remove duplicated executable output path
        https://bugs.webkit.org/show_bug.cgi?id=88765

        Reviewed by Daniel Bates.

        CMake files for EFL port have redefined executable output path. However, EFL port doesn't
        need to define again because it is already defined in top-level CMake file.

        * CMakeLists.txt:

2012-06-11  Anders Carlsson  <andersca@apple.com>

        Pass the right color space over to the web process so we can set it on our CA context
        https://bugs.webkit.org/show_bug.cgi?id=88819
        <rdar://problem/11629050>

        Reviewed by John Sullivan.

        * Platform/mac/LayerHostingContext.h:
        (LayerHostingContext):
        * Platform/mac/LayerHostingContext.mm:
        (WebKit::LayerHostingContext::createForPort):
        (WebKit::LayerHostingContext::createForWindowServer):
        Use a single constructor and explicitly set up the parameters of the constructed object.

        (WebKit::LayerHostingContext::setColorSpace):
        (WebKit::LayerHostingContext::colorSpace):
        Add getter and setter.

        * Scripts/webkit2/messages.py:
        (struct_or_class):
        WebKit::ColorSpaceData is a struct.

        * Shared/WebPageCreationParameters.cpp:
        Encode and decode the color space parameter.

        * Shared/WebPageCreationParameters.h:
        Add the color space.

        * Shared/mac/ColorSpaceData.h: Added.
        * Shared/mac/ColorSpaceData.mm: Added.
        Add a new class that represents a color space that can be sent over the wire.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::colorSpace):
        Call through to the WKView.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _windowDidChangeBackingProperties:]):
        Fix whitespace.

        (-[WKView viewDidChangeBackingProperties]):
        Check if our new color space is different from the current one and null the current one out if that is the case,
        it will be reinitialized by the next call to -[WKView _colorSpace].
        
        (-[WKView _colorSpace:]):
        Compute the color space. If we're not in a window we'll get the main screen's color space.

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::colorSpaceDidChange):
        Add empty stub.

        * UIProcess/PageClient.h:
        Add colorSpace getter.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        Initialize the color space.

        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::colorSpaceDidChange):
        Send the new color space over to the web process.

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::colorSpace):
        Call through to the page client.

        * WebKit2.xcodeproj/project.pbxproj:
        Add ColorSpaceData.h and ColorSpaceData.mm.

        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingArea.messages.in:
        Add SetColorSpace message.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        Set the color space from the creation parameters.

        (WebKit::TiledCoreAnimationDrawingArea::setColorSpace):
        Set the color space on the layer hosting context.

        (WebKit::TiledCoreAnimationDrawingArea::updateLayerHostingContext):
        Make sure we apply the color space from the previous layer hosting context if one exists.

2012-06-11  Anders Carlsson  <andersca@apple.com>

        Crash when a plug-in tries to use the NPRuntime API with JavaScript disabled
        https://bugs.webkit.org/show_bug.cgi?id=88797
        <rdar://problem/11574844>

        Reviewed by Brady Eidson.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::initialize):
        Handle the windowNPObjectID being 0.

        (WebKit::PluginControllerProxy::windowScriptNPObject):
        Handle m_windownPObject being null.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::windowScriptNPObject):
        Return null if JavaScript is disabled.

        (WebKit::PluginView::pluginElementNPObject):
        Ditto.

2012-06-11  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Add QML api for setting device width and height
        https://bugs.webkit.org/show_bug.cgi?id=88777

        Reviewed by Simon Hausmann.

        Add the new API and set the default values to 0 (unset). The
        current values were introduced by Qt and only Qt depends on them.

        * Shared/WebPreferencesStore.h:
        (WebKit):
        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewExperimental::deviceWidth):
        (QQuickWebViewExperimental::setDeviceWidth):
        (QQuickWebViewExperimental::deviceHeight):
        (QQuickWebViewExperimental::setDeviceHeight):
        * UIProcess/API/qt/qquickwebview_p.h:
        * UIProcess/qt/QtViewportHandler.cpp:
        (WebKit::QtViewportHandler::viewportItemSizeChanged):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::sendViewportAttributesChanged):

2012-06-11  Michael Brüning  <michael.bruning@nokia.com>

        [Qt][WK2] Compute and set cache capacities using the current CacheModel
        https://bugs.webkit.org/show_bug.cgi?id=73918

        Reviewed by Kenneth Rohde Christiansen.

        Added implementation of cache model for Qt WK 2 port including supporting
        functionality such as WebProcess creation parameters and default values
        for disk cache directories.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        (WebProcessCreationParameters):
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::defaultDiskCacheDirectory):
        (WebKit):
        (WebKit::WebContext::platformInitializeWebProcess):
        * WebProcess/qt/WebProcessQt.cpp:
        (WebKit::physicalMemorySizeInBytes):
        (WebKit::WebProcess::platformSetCacheModel):
        (WebKit::WebProcess::platformInitializeWebProcess):

2012-06-10  Darin Adler  <darin@apple.com>

        Remove unneeded callRemovedLastRef function from TreeShared refactoring
        https://bugs.webkit.org/show_bug.cgi?id=88653

        Reviewed by Sam Weinig.

        * win/WebKit2.def: Export removedLastRef instead of callRemovedLastRef.
        * win/WebKit2CFLite.def: Ditto.

2012-06-10  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Add and refactor ewk API in order to support MiniBrowser without WK API.
        https://bugs.webkit.org/show_bug.cgi?id=84124

        Reviewed by Chang Shu.

        Modify ewk_view and add ewk_context to provide a platform-depedent WebKit2
        API.
        This patch provides the minimum to support MiniBrowser.

        * PlatformEfl.cmake: add ewk_context.cpp.
        * UIProcess/API/efl/EWebKit2.h: Added.
        * UIProcess/API/efl/ewk_context.cpp: Added.
        (_Ewk_Context):
        (createDefaultWebContext):
        (ewk_context_WKContext_get):
        (ewk_context_default_get):
        * UIProcess/API/efl/ewk_context.h: Added.
        * UIProcess/API/efl/ewk_context_private.h: Added.
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_ewk_view_priv_del):
        (ewk_view_base_add):
        (ewk_view_add_with_context):
        (ewk_view_add):
        (ewk_view_uri_set):
        (ewk_view_uri_get):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_private.h:

2012-06-09  Sukolsak Sakshuwong  <sukolsak@google.com>

        Add UNDO_MANAGER flag
        https://bugs.webkit.org/show_bug.cgi?id=87908

        Reviewed by Tony Chang.

        * Configurations/FeatureDefines.xcconfig:

2012-06-08  Brent Fulgham  <bfulgham@webkit.org>
        [WinCairo] Build fix after Windows export definition file change.

        * win/WebKit2CFLite.def: This file needs to be kept in sync with
        WebKit2.def (aside from the WebKitInterface exports.)

2012-06-08  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        [Qt] [WK2] API tests randomly assert in WebLayerTreeRenderer::assignImageToLayer
        https://bugs.webkit.org/show_bug.cgi?id=88667

        Reviewed by Noam Rosenthal.

        Move deactivation of WebLayerTreeRenderer from LayerTreeHostProxy::purgeBackingStores 
        to WebLayerTreeRenderer::purgeGLResources. LayerTreeHostProxy::purgeBackingStores is 
        invoked on main thread after going through call gate and it is too late to deactivate
        renderer here, because some update messages are able to go through. 
        WebLayerTreeRenderer::purgeGLResources is called directly from render node deallocation
        and it is right place to deactivate renderer.

        * UIProcess/LayerTreeHostProxy.cpp:
        (WebKit::LayerTreeHostProxy::purgeBackingStores):
        * UIProcess/WebLayerTreeRenderer.cpp:
        (WebKit::WebLayerTreeRenderer::purgeGLResources):

2012-06-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to get the library version to WebKit2 GTK+
        https://bugs.webkit.org/show_bug.cgi?id=88426

        Reviewed by Martin Robinson.

        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * UIProcess/API/gtk/WebKitVersion.cpp: Added.
        (webkit_get_major_version):
        (webkit_get_minor_version):
        (webkit_get_micro_version):
        * UIProcess/API/gtk/WebKitVersion.h.in: Added.
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add new symbols.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new section
        for WebKitVersion.
        * UIProcess/API/gtk/tests/GNUmakefile.am:
        * UIProcess/API/gtk/tests/TestWebKitVersion.cpp: Added.
        (testWebKitVersion):
        (testWebKitCheckVersion):
        (beforeAll):
        (afterAll):
        * UIProcess/API/gtk/webkit2.h: Include WebKitVersion.h.

2012-06-08  Dan Bernstein  <mitz@apple.com>

        Tried to fix the Snow Leopard build after r119806.

        * WebKit2Prefix.h:

2012-06-08  Andy Estes  <aestes@apple.com>

        [WebKit2] Move Mac-specific bits from config.h to WebKit2Prefix.h
        https://bugs.webkit.org/show_bug.cgi?id=88625

        Reviewed by Dan Bernstein.

        Since the Mac supports prefix headers, there is no point in having
        Mac-specific code in WebKit2's config.h. Move it to WebKit2Prefix.h.

        * WebKit2Prefix.h:
        * config.h:

2012-06-07  Kentaro Hara  <haraken@chromium.org>

        Reduce Node object size from 72 byte to 64 byte
        https://bugs.webkit.org/show_bug.cgi?id=88528

        Reviewed by Ryosuke Niwa.

        Added a symbol for callRemovedLastRef().

        * mac/WebKit2.order:
        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-06-07  Andy Estes  <aestes@apple.com>

        [WebKit2] Explicitly include CoreFoundation.h in config.h
        https://bugs.webkit.org/show_bug.cgi?id=88619

        Reviewed by Dan Bernstein.

        WebKit2 relies (probably unintentionally) on CoreFoundation.h being
        included by CoreGraphics.h (via CGSession.h), but some versions of
        CoreGraphics headers don't include CoreFoundation.h. WebKit2 should
        include it explicitly in config.h.

        * config.h: Import CoreFoundation.h.

2012-06-07  Andy Estes  <aestes@apple.com>

        [WebKit2] Only include Cocoa.h on platforms that use AppKit
        https://bugs.webkit.org/show_bug.cgi?id=88517

        Reviewed by Sam Weinig.

        * WebKit2Prefix.h: Include Platform.h to get USE() macros. GTK needs to
        include autotoolsconfig.h before including Platform.h, so do that first
        if building on GTK. Then, if compiling an Objective-C file, it's safe
        to include Foundation.h, but not necessarily Cocoa.h; only include the
        latter if USE(APPKIT) is true.
        * config.h: There's no need to import Cocoa.h since this is already
        imported in the prefix header.

2012-06-07  Anders Carlsson  <andersca@apple.com>

        Search highlight does not scroll with the content of the page, and find overlay doesn't work, on large-enough window
        https://bugs.webkit.org/show_bug.cgi?id=88577
        <rdar://problem/11430118>

        Reviewed by John Sullivan.

        Prevent the page overlay layer from falling into tiled mode.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::createPageOverlayLayer):

2012-06-07  Alexander Færøy  <ahf@0x90.dk>

        Add QML API tests for Device Pixel Ratio
        https://bugs.webkit.org/show_bug.cgi?id=88531

        Reviewed by Kenneth Rohde Christiansen.

        This patch adds an initial test case for the QML device pixel ratio
        API. The test currently fails and is therefore marked as being
        expected to fail. This will be fixed in a separated patch.

        * UIProcess/API/qt/tests/qmltests/WebView/tst_devicePixelRatio.qml: Added.

2012-06-07  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] WebKit2-EFL does not link in debug mode
        https://bugs.webkit.org/show_bug.cgi?id=88518

        Unreviewed. Fix WebKit2-EFL linking error in debug mode.

        * CMakeLists.txt:

2012-06-07  Simon Pena  <spena@igalia.com>

        [GTK] Fix broken build due to missing <SECTION> in GTK-DOC
        https://bugs.webkit.org/show_bug.cgi?id=88525

        Unreviewed gardening. Added missing <SECTION> tag.

        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:

2012-06-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to register custom URI schemes to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=84133

        Reviewed by Martin Robinson.

        * GNUmakefile.list.am: Add new files to compilation.
        * UIProcess/API/gtk/WebKitPrivate.h:
        * UIProcess/API/gtk/WebKitRequestManagerClient.cpp: Added.
        (didReceiveURIRequest): Callback emitted by the C API when a
        request for a custom URI scheme has been received. Call
        webkitWebContextReceivedURIRequest() to handle the request.
        (didFailToLoadURIRequest): Callback emitted by the C API when a
        request for a custom URI scheme failed to load. Call
        webkitWebContextDidFailToLoadURIRequest() to noitfy the web
        context.
        (attachRequestManagerClientToContext): Initialize the
        WKSoupRequestManagerClient.
        * UIProcess/API/gtk/WebKitRequestManagerClient.h: Added.
        * UIProcess/API/gtk/WebKitURISchemeRequest.cpp: Added.
        (webkit_uri_scheme_request_init):
        (webkitURISchemeRequestFinalize):
        (webkit_uri_scheme_request_class_init):
        (webkitURISchemeRequestCreate): Create a new
        WebKitURISchemeRequest for the given URI and request identifier.
        (webkitURISchemeRequestGetID): Return the request identifier.
        (webkitURISchemeRequestCancel): Cancel the request operation.
        (webkit_uri_scheme_request_get_scheme): Return the scheme of the
        request.
        (webkit_uri_scheme_request_get_uri): Return the full URI of the
        request.
        (webkit_uri_scheme_request_get_path): Return the path of the URI.
        (webkitURISchemeRequestReadCallback): Read callback emitted when
        reading the contents of the input stream.
        (webkit_uri_scheme_request_finish): Finish the request by reading
        the contents of the input stream and sending the data to the
        WebProcess.
        * UIProcess/API/gtk/WebKitURISchemeRequest.h: Added.
        * UIProcess/API/gtk/WebKitURISchemeRequestPrivate.h: Added.
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (WebKitURISchemeHandler::WebKitURISchemeHandler): Helper struct to
        save callback and user data of registered URI schemes.
        (createDefaultWebContext): Initialize the SoupRequestManager.
        (webkit_web_context_register_uri_scheme): Public API to register a
        custom URI scheme providing a callback that will be called to
        handle requests for that URI scheme.
        (webkitWebContextGetRequestManager): Helper private method to
        return the SoupRequestManager.
        (webkitWebContextReceivedURIRequest): Get the
        WebKitURISchemeHandler for the given request identifier and call
        the callback. Save the request in the request map.
        (webkitWebContextDidFailToLoadURIRequest): Cancel the ongoing
        request.
        (webkitWebContextDidFinishURIRequest): Remove the request from the
        map.
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/WebKitWebContextPrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add
        WebKitURISchemeRequest section.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.
        * UIProcess/API/gtk/docs/webkit2gtk.types: Add
        webkit_uri_scheme_request_get_type.
        * UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:
        (testWebContextURIScheme):
        (beforeAll):
        * UIProcess/API/gtk/webkit2.h: Include WebKitURISchemeRequest.h.

2012-06-07  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] setPageItemRectVisible() is not guarded by ViewportUpdateDeferrer at scaleAnimationValueChanged()
        https://bugs.webkit.org/show_bug.cgi?id=87954

        Reviewed by Kenneth Rohde Christiansen.

        Resetting the end value, the easing curve or the duration of the scale animation triggers
        a recalculation of the animation interval. This might change the current value of the
        animated property.
        Since guarding of setPageItemRectVisible() relies on animation state change we have to
        make sure we only act on animation value changes if the animation is in active state.

        * UIProcess/qt/QtViewportHandler.cpp:
        (WebKit::QtViewportHandler::QtViewportHandler):
        (WebKit::QtViewportHandler::animatePageItemRectVisible):
        (WebKit::QtViewportHandler::scaleAnimationValueChanged):

2012-06-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] WebSoupRequestManager should handle loading errors and zero-length replies
        https://bugs.webkit.org/show_bug.cgi?id=88087

        Reviewed by Martin Robinson.

        * UIProcess/API/C/soup/WKSoupRequestManager.h:
        * UIProcess/soup/WebSoupRequestManagerClient.cpp:
        (WebKit::WebSoupRequestManagerClient::didFailToLoadURIRequest):
        Call didFailToLoadURIRequest in the client if present.
        * UIProcess/soup/WebSoupRequestManagerClient.h:
        * UIProcess/soup/WebSoupRequestManagerProxy.cpp:
        (WebKit::WebSoupRequestManagerProxy::WebSoupRequestManagerProxy):
        Initialize m_loadFailed.
        (WebKit::WebSoupRequestManagerProxy::didReceiveURIRequestData):
        Don't send more data to the web process if the resource failed to
        load.
        (WebKit::WebSoupRequestManagerProxy::didFailToLoadURIRequest): Set
        m_loadFailed and notifiy the client calling didFailToLoadURIRequest.
        * UIProcess/soup/WebSoupRequestManagerProxy.h:
        * UIProcess/soup/WebSoupRequestManagerProxy.messages.in: Add
        DidFailToLoadURIRequest message.
        * WebProcess/soup/WebKitSoupRequestGeneric.cpp:
        (webkitSoupRequestGenericSendAsync): Pass the cancellable to the
        WebSoupRequestManager.
        * WebProcess/soup/WebSoupRequestManager.cpp:
        (WebKit::WebSoupRequestAsyncData::WebSoupRequestAsyncData): Helper
        struct to save requests.
        (WebSoupRequestAsyncData): Add a weak pointer to invalidate the
        request when it's destroyed before the operation has finished.
        (WebKit::WebSoupRequestAsyncData::~WebSoupRequestAsyncData):
        Remove the weak pointer.
        (WebKit::WebSoupRequestAsyncData::requestFailed): Return whther
        the request failed.
        (WebKit::WebSoupRequestAsyncData::releaseResult): Return the
        result and clear the pointer.
        (WebKit::WebSoupRequestManager::didHandleURIRequest): Create and
        empty memory stream for zero-length replies instead of creating an
        error.
        (WebKit::WebSoupRequestManager::didReceiveURIRequestData): If the
        request failed and more data expected from the UI process, send a
        message to the UI process to notify that the resource load failed.
        (WebKit::WebSoupRequestManager::send): Save request information in
        the request map.
        * WebProcess/soup/WebSoupRequestManager.h:

2012-06-06  Andy Estes  <aestes@apple.com>

        Wrap uppercaseWord, lowercaseWord, and capitalizeWord with USE(APPKIT)
        https://bugs.webkit.org/show_bug.cgi?id=88504

        Reviewed by Dan Bernstein.

        uppercaseWord, lowercaseWord, and capitalizeWord are methods declared
        by NSResponder that subclasses are expected to implement. WebKit should
        only support these implementations on platforms that use AppKit.

        * UIProcess/WebPageProxy.h:
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2012-06-06  chandra Shekar Vallala  <chandra.vallala@motorola.com>

        [WK2-Gtk]Compilation errors with flag CONTEXT_MENUS=0
        https://bugs.webkit.org/show_bug.cgi?id=87842

        Reviewed by Martin Robinson.

        Fix for compilation errors while building webkit2-gtk with CONTEXT_MENUS=0

        * UIProcess/gtk/WebContextMenuProxyGtk.cpp: Added code under CONTEXT_MENUS CC
        * UIProcess/gtk/WebContextMenuProxyGtk.h: Ditto
        * WebProcess/WebCoreSupport/gtk/WebContextMenuClientGtk.cpp: Ditto

2012-06-06  Michael Brüning  <michael.bruning@nokia.com>

        [Qt][WK2] Add preferredMinimumContentsWidth to the viewport info in MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=88327

        Reviewed by Kenneth Rohde Christiansen.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewExperimental::setPreferredMinimumContentsWidth):
        * UIProcess/API/qt/qquickwebview_p.h:

2012-06-06  Tim Horton  <timothy_horton@apple.com>

        WebPage::windowIsVisible is incorrect during resumePainting
        https://bugs.webkit.org/show_bug.cgi?id=88374
        <rdar://problem/11587039>

        Reviewed by Simon Fraser.

        Currently, when changing window visibility, WKView calls viewStateDidChange(ViewIsVisible)
        and then _updateWindowVisibility. This means that during viewStateDidChange, the WebPage's
        windowIsVisible state is incorrect.

        viewStateDidChange(ViewIsVisible) can end up in (one of the DrawingArea implementations)::resumePainting(),
        which uses windowIsVisible to determine whether or not to unpause requestAnimationFrame.

        This results in a state where, with some configurations, doing the following:

            1. requestAnimationFrame()
            2. requestFullScreen()
            3. requestAnimationFrame()
            4. cancelFullScreen()
            5. requestAnimationFrame()

        Will cause the second and third rAF calls to have no effect. Even after cancelFullScreen() is called,
        the fact that we have had unpaired suspend/resumeScriptedAnimations will cause the suspend count
        on the ScriptedAnimationController to never return to zero, which will cause us to never
        recover rAF functionality.

        The fix is very simple: we should _updateWindowVisibility *before* viewStateDidChange, so that it is
        always correct for any code called underneath that method.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewDidMoveToWindow]):
        (-[WKView _windowDidOrderOffScreen:]):
        (-[WKView _windowDidOrderOnScreen:]):

2012-06-05  Dinu Jacob  <dinu.jacob@nokia.com>

        [Qt][WK2] Use Component.onCompleted in API tests for single and multi file upload tests.
        https://bugs.webkit.org/show_bug.cgi?id=88247

        Reviewed by Kenneth Rohde Christiansen.

        With r116936, Component.onCompleted can be used for callback instead of the
        1s timer in single and multi file upload tests.

        * UIProcess/API/qt/tests/qmltests/WebView/tst_multiFileUpload.qml:
        * UIProcess/API/qt/tests/qmltests/WebView/tst_singleFileUpload.qml:

2012-06-04  Stephanie Lewis  <slewis@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=88370
        Memory sampler should trigger low memory signal

        Reviewed by Geoff Garen.

        Send low memory signal when running the memory sampler.  We'd
        like to test memory that cannot be freed.

        * Shared/WebMemorySampler.cpp:
        (WebKit::WebMemorySampler::sampleTimerFired):
        * Shared/WebMemorySampler.h:
        (WebMemorySampler):
        * Shared/mac/WebMemorySampler.mac.mm:
        (WebKit):
        (WebKit::WebMemorySampler::sendMemoryPressureEvent):

2012-06-05  Brady Eidson  <beidson@apple.com>

        <rdar://problem/11575898> and https://bugs.webkit.org/show_bug.cgi?id=88372
        REGRESSION(110494): Can no longer drag-and-drop links into FileMaker Pro 12

        - Before r110494 we used to write the NSStringPboardType to the pasteboard.
          After r110494 we write NSURLPboardType instead.
          That's basically a no-op, but the NSStringPboardType needs to be restored.
        - Before r110494 we wrote the link destination URL to the pasteboard.
          After r110494 we write the image src URL if the link is an image.
          We need to revert to writing the link URL.

        Fortunately these changes can be accomplished with a 2-line fix.

        Reviewed by Enrica Casucci.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setPromisedData:WebCore::withFileName:withExtension:withTitle:withURL:withVisibleURL:withArchive:WebCore::forPasteboard:]):
        n

2012-06-05  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Implement log channel initialization for WebKit2

        Reviewed by Alexis Menard.

        * Platform/Logging.cpp:
        (WebKit):
        * Platform/Logging.h:
        (WebKit):
        * Platform/qt/LoggingQt.cpp: Copied from Source/WebKit2/Platform/gtk/LoggingGtk.cpp
        (WebKit):
        (WebKit::initializeLogChannel):
        * Target.pri:

2012-06-05  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        WebLayerTreeRenderer behaves wrongly when no contentsScale is set.
        https://bugs.webkit.org/show_bug.cgi?id=88357

        Reviewed by Alexis Menard.

        The contentsScale needs to get a default value in case no
        value is explicitely set yet.
        This fixes the blank-until-resize problem when running MiniBrowser
        in --desktop mode.

        * UIProcess/WebLayerTreeRenderer.cpp:
        (WebKit::WebLayerTreeRenderer::WebLayerTreeRenderer):

2012-06-05  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt] Don't propagate viewport size changes if the viewport is empty.
        https://bugs.webkit.org/show_bug.cgi?id=88336

        Reviewed by Tor Arne Vestbø.

        Qt Quick sequentially set the x, y, width, height of the view. We really want to
        start propagating further when the size of the viewport becomes valid, i.e. both
        height and width are defined. In any case lower level classes are discarding an empty
        size such as WebPage::sendViewportAttributesChanged() so it was pointless to send the size
        through the IPC bus for nothing.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewLegacyPrivate::updateViewportSize):

2012-06-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add webkit_download_get_received_data_length to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=88323

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitDownload.cpp:
        (webkit_download_get_received_data_length):
        * UIProcess/API/gtk/WebKitDownload.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:
        * UIProcess/API/gtk/tests/TestDownloads.cpp:

2012-06-05  Dongwoo Im  <dw.im@samsung.com>

        Add 'isProtocolHandlerRegistered' and 'unregisterProtocolHandler'.
        https://bugs.webkit.org/show_bug.cgi?id=73176

        Reviewed by Adam Barth.

        Two more APIs are added in Custom Scheme Handler specification.
        http://dev.w3.org/html5/spec/Overview.html#custom-handlers
        One is 'isProtocolHandlerRegistered' to query whether the specific URL
        is registered or not.
        The other is 'unregisterProtocolHandler' to remove the registered URL.

        * Configurations/FeatureDefines.xcconfig: Add a macro 'ENABLE_CUSTOM_SCHEME_HANDLER'.

2012-06-05  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] WebKit2-EFL does not link with gold linker
        https://bugs.webkit.org/show_bug.cgi?id=88295

        Unreviewed. Fix linking when using gold linker.

        * PlatformEfl.cmake:

2012-06-05  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK][WK2] Implement API for Geolocation permission requests in the GTK port
        https://bugs.webkit.org/show_bug.cgi?id=83879

        Reviewed by Carlos Garcia Campos.

        Added a new kind of permission request for supporting the
        Geolocation API in WebKit2GTK+.

        New WebKitGeolocationPermissionRequest class, implementing the
        WebKitPermissionRequest interface, to enabling client applications
        to allow or deny geolocation permission requests.

        * GNUmakefile.list.am: Added new files.
        * UIProcess/API/gtk/WebKitGeolocationPermissionRequest.cpp: Added.
        (_WebKitGeolocationPermissionRequestPrivate):
        (webkitGeolocationPermissionRequestAllow):
        (webkitGeolocationPermissionRequestDeny):
        (webkit_permission_request_interface_init):
        (webkit_geolocation_permission_request_init):
        (webkitGeolocationPermissionRequestFinalize):
        (webkit_geolocation_permission_request_class_init):
        (webkitGeolocationPermissionRequestCreate):
        * UIProcess/API/gtk/WebKitGeolocationPermissionRequest.h: Added.
        (_WebKitGeolocationPermissionRequest):
        (_WebKitGeolocationPermissionRequestClass):
        * UIProcess/API/gtk/WebKitGeolocationPermissionRequestPrivate.h: Added.

        Include WKGeolocationPermissionRequest.h in WebKitPrivate.h, so we
        can use it from the new WebKitGeolocationPermissionRequest class.

        * UIProcess/API/gtk/WebKitPrivate.h: Added new include.

        Implement geolocation permission requests in the UI client.

        * UIProcess/API/gtk/WebKitUIClient.cpp:
        (decidePolicyForGeolocationPermissionRequest): Create a new
        instance of the WebKitGeolocationPermissionRequest class and call
        to webkitWebViewMakePermissionRequest().
        (attachUIClientToView): Provide an implementation function for
        decidePolicyForGeolocationPermissionRequest.
        * UIProcess/API/gtk/WebKitWebView.h: Add new element to
        WebKitPermissionRequestType enumeration for geolocation requests.
        * UIProcess/API/gtk/webkit2.h: Added header file for
        WebKitGeolocationPermissionRequest

        New unit tests to test allowing and denying permission requests.

        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
        (testWebViewPermissionRequests): New test that loads a simple HTML
        with JavaScript code requesting the current location.
        (beforeAll): Added new test.

        Updated documentation files.

        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:

2012-06-04  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        [chromium] Fix software rendering for device-scale-factor > 1
        https://bugs.webkit.org/show_bug.cgi?id=88136

        Reviewed by Darin Fisher.

        Export WebCore::Page::setDeviceScaleFactor and WebCore::Settings::setDefaultDeviceScaleFactor.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-06-04  Andy Estes  <aestes@apple.com>

        Use ENABLE() and USE() macros in a few more places
        https://bugs.webkit.org/show_bug.cgi?id=88245

        Reviewed by Anders Carlsson.

        * UIProcess/API/C/WKPluginSiteDataManager.cpp: Only include npapi.h if
        Netscape plug-in API is enabled.
        * UIProcess/mac/CorrectionPanel.h: Wrap with USE(AUTOCORRECTION_PANEL)
        * WebProcess/Authentication/AuthenticationManager.cpp: Use the stub
        version of tryUsePlatformCertificateInfoForChallenge if
        Security.framework isn't available.
        * WebProcess/WebProcess.messages.in: Only generate two messages if
        Security.framework is available.
        * WebProcess/mac/KeychainItemShimMethods.mm: Wrap with
        USE(SECURITY_FRAMEWORK).

2012-06-04  Andy Estes  <aestes@apple.com>

        Add stub WebKit2 implementations of PLUGIN_PROXY_FOR_VIDEO methods declared in FrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=88244

        Reviewed by Anders Carlsson.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createMediaPlayerProxyPlugin): Add a stub implementation.
        (WebKit::WebFrameLoaderClient::hideMediaPlayerProxyPlugin): Ditto.
        (WebKit::WebFrameLoaderClient::showMediaPlayerProxyPlugin): Ditto.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2012-06-04  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK][WK2] Implement geolocation provider for the GTK port
        https://bugs.webkit.org/show_bug.cgi?id=83877

        Reviewed by Carlos Garcia Campos.

        Add a new client-based geolocation provider for WebKit2GTK+, relying the
        new Geoclue-based geolocation provider available in WebCore.

        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * UIProcess/API/gtk/WebKitGeolocationProvider.cpp: Added.
        (toGeolocationProvider):
        (startUpdatingCallback):
        (stopUpdatingCallback):
        (WebKitGeolocationProvider::~WebKitGeolocationProvider):
        (WebKitGeolocationProvider::create):
        (WebKitGeolocationProvider::WebKitGeolocationProvider):
        (WebKitGeolocationProvider::startUpdating):
        (WebKitGeolocationProvider::stopUpdating):
        (WebKitGeolocationProvider::notifyPositionChanged):
        (WebKitGeolocationProvider::notifyErrorOccurred):
        * UIProcess/API/gtk/WebKitGeolocationProvider.h: Added.
        * UIProcess/API/gtk/WebKitPrivate.h:
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (_WebKitWebContextPrivate):
        (createDefaultWebContext):

2012-06-04  Zalan Bujtas  <zbujtas@gmail.com>

        [Qt][WK2] Rename QtViewportInteractionEngine to QtViewportHandler.
        https://bugs.webkit.org/show_bug.cgi?id=88226

        Reviewed by Kenneth Rohde Christiansen.

        * Target.pri:
        * UIProcess/API/qt/qquickwebpage_p_p.h:
        (WebKit):
        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewFlickablePrivate::~QQuickWebViewFlickablePrivate):
        (QQuickWebViewFlickablePrivate::onComponentComplete):
        (QQuickWebViewFlickablePrivate::didChangeViewportProperties):
        (QQuickWebViewFlickablePrivate::updateViewportSize):
        (QQuickWebViewFlickablePrivate::pageDidRequestScroll):
        (QQuickWebViewFlickablePrivate::didChangeContentsSize):
        * UIProcess/API/qt/qquickwebview_p.h:
        (WebKit):
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (WebKit):
        (QQuickWebViewPrivate::viewportHandler):
        (QQuickWebViewFlickablePrivate::viewportHandler):
        (QQuickWebViewFlickablePrivate):
        * UIProcess/API/qt/qwebkittest.cpp:
        (QWebKitTest::contentsScale):
        (QWebKitTest::devicePixelRatio):
        (QWebKitTest::initialScale):
        (QWebKitTest::minimumScale):
        (QWebKitTest::maximumScale):
        (QWebKitTest::isScalable):
        (QWebKitTest::layoutSize):
        * UIProcess/qt/QtGestureRecognizer.cpp:
        (WebKit::QtGestureRecognizer::viewportHandler):
        * UIProcess/qt/QtGestureRecognizer.h:
        (WebKit):
        * UIProcess/qt/QtPanGestureRecognizer.cpp:
        (WebKit::QtPanGestureRecognizer::update):
        (WebKit::QtPanGestureRecognizer::finish):
        (WebKit::QtPanGestureRecognizer::cancel):
        * UIProcess/qt/QtPinchGestureRecognizer.cpp:
        (WebKit::QtPinchGestureRecognizer::update):
        (WebKit::QtPinchGestureRecognizer::finish):
        (WebKit::QtPinchGestureRecognizer::cancel):
        * UIProcess/qt/QtViewportHandler.cpp: Copied from Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp.
        (WebKit::ViewportUpdateDeferrer::ViewportUpdateDeferrer):
        (WebKit::ViewportUpdateDeferrer::~ViewportUpdateDeferrer):
        (ViewportUpdateDeferrer):
        (WebKit::QtViewportHandler::suspendPageContent):
        (WebKit::QtViewportHandler::resumePageContent):
        (WebKit::QtViewportHandler::cssScaleFromItem):
        (WebKit::QtViewportHandler::itemScaleFromCSS):
        (WebKit::QtViewportHandler::itemCoordFromCSS):
        (WebKit::QtViewportHandler::itemRectFromCSS):
        (WebKit::QtViewportHandler::QtViewportHandler):
        (WebKit::QtViewportHandler::~QtViewportHandler):
        (WebKit::QtViewportHandler::innerBoundedCSSScale):
        (WebKit::QtViewportHandler::outerBoundedCSSScale):
        (WebKit::QtViewportHandler::viewportAttributesChanged):
        (WebKit::QtViewportHandler::pageContentsSizeChanged):
        (WebKit::QtViewportHandler::setPageItemRectVisible):
        (WebKit::QtViewportHandler::animatePageItemRectVisible):
        (WebKit::QtViewportHandler::flickMoveStarted):
        (WebKit::QtViewportHandler::flickMoveEnded):
        (WebKit::QtViewportHandler::pageItemPositionChanged):
        (WebKit::QtViewportHandler::pageContentPositionRequested):
        (WebKit::QtViewportHandler::scaleAnimationStateChanged):
        (WebKit::QtViewportHandler::scaleAnimationValueChanged):
        (WebKit::QtViewportHandler::touchBegin):
        (WebKit::QtViewportHandler::touchEnd):
        (WebKit::QtViewportHandler::computePosRangeForPageItemAtScale):
        (WebKit::QtViewportHandler::focusEditableArea):
        (WebKit::QtViewportHandler::zoomToAreaGestureEnded):
        (WebKit::QtViewportHandler::nearestValidBounds):
        (WebKit::QtViewportHandler::setCSSScale):
        (WebKit::QtViewportHandler::currentCSSScale):
        (WebKit::QtViewportHandler::scrollAnimationActive):
        (WebKit::QtViewportHandler::panGestureActive):
        (WebKit::QtViewportHandler::panGestureStarted):
        (WebKit::QtViewportHandler::panGestureRequestUpdate):
        (WebKit::QtViewportHandler::panGestureEnded):
        (WebKit::QtViewportHandler::panGestureCancelled):
        (WebKit::QtViewportHandler::scaleAnimationActive):
        (WebKit::QtViewportHandler::cancelScrollAnimation):
        (WebKit::QtViewportHandler::interruptScaleAnimation):
        (WebKit::QtViewportHandler::pinchGestureActive):
        (WebKit::QtViewportHandler::pinchGestureStarted):
        (WebKit::QtViewportHandler::pinchGestureRequestUpdate):
        (WebKit::QtViewportHandler::pinchGestureEnded):
        (WebKit::QtViewportHandler::pinchGestureCancelled):
        (WebKit::QtViewportHandler::visibleContentsRect):
        (WebKit::QtViewportHandler::informVisibleContentChange):
        (WebKit::QtViewportHandler::viewportItemSizeChanged):
        (WebKit::QtViewportHandler::scaleContent):
        * UIProcess/qt/QtViewportHandler.h: Copied from Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.h.
        (QtViewportHandler):
        * UIProcess/qt/QtViewportInteractionEngine.cpp: Removed.
        * UIProcess/qt/QtViewportInteractionEngine.h: Removed.
        * UIProcess/qt/QtWebPageEventHandler.cpp:
        (WebKit::QtWebPageEventHandler::QtWebPageEventHandler):
        (WebKit::QtWebPageEventHandler::setViewportHandler):
        (WebKit::QtWebPageEventHandler::inputPanelVisibleChanged):
        (WebKit::QtWebPageEventHandler::doneWithTouchEvent):
        (WebKit::QtWebPageEventHandler::didFindZoomableArea):
        * UIProcess/qt/QtWebPageEventHandler.h:
        (WebKit):
        (QtWebPageEventHandler):
        (WebKit::QtWebPageEventHandler::viewportHandler):

2012-06-04  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: FeatureDefines.xcconfig should match across projects

        * Configurations/FeatureDefines.xcconfig:
        - Add missing ENABLE_LEGACY_CSS_VENDOR_PREFIXES.

2012-06-04  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] Tap-to-zoom overshoot animation.
        https://bugs.webkit.org/show_bug.cgi?id=87108

        Reviewed by Tor Arne Vestbø.

        Reverts the change in animation, so the default is more "neutral".
        This should be made configurable later.

        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::QtViewportInteractionEngine::animatePageItemRectVisible):

2012-06-04  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Refactor the tap gesture recognizer
        https://bugs.webkit.org/show_bug.cgi?id=88096

        Reviewed by Simon Hausmann.

        Refactor the tap gesture recognizer so that its internal state machine is
        self contained and independent of input event types.
        Also change the internal API for tap highlighting to make the code easier
        to understand on the caller side.

        This patch makes the tap gesture recognizer more robust, consistent with
        other gesture recognizers and fixes some issues related to highlighting
        and link activation with respect to native touch events.

        * UIProcess/qt/QtTapGestureRecognizer.cpp:
        (WebKit::QtTapGestureRecognizer::QtTapGestureRecognizer):
        (WebKit::QtTapGestureRecognizer::withinDistance):
        (WebKit::QtTapGestureRecognizer::update):
        (WebKit::QtTapGestureRecognizer::finish):
        (WebKit::QtTapGestureRecognizer::cancel):
        (WebKit::QtTapGestureRecognizer::highlightTimeout):
        (WebKit::QtTapGestureRecognizer::singleTapTimeout):
        (WebKit::QtTapGestureRecognizer::tapAndHoldTimeout):
        (WebKit::QtTapGestureRecognizer::reset):
        * UIProcess/qt/QtTapGestureRecognizer.h:
        (QtTapGestureRecognizer):
        * UIProcess/qt/QtWebPageEventHandler.cpp:
        (WebKit::QtWebPageEventHandler::QtWebPageEventHandler):
        (WebKit::QtWebPageEventHandler::activateTapHighlight):
        (WebKit::QtWebPageEventHandler::deactivateTapHighlight):
        (WebKit):
        (WebKit::QtWebPageEventHandler::handleSingleTapEvent):
        (WebKit::QtWebPageEventHandler::handleDoubleTapEvent):
        (WebKit::QtWebPageEventHandler::doneWithTouchEvent):
        * UIProcess/qt/QtWebPageEventHandler.h:
        (QtWebPageEventHandler):

2012-06-02  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the Windows build.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-06-02  Andy Estes  <aestes@apple.com>

        [WebKit2] Use USE(), ENABLE(), and HAVE() macros in more places
        https://bugs.webkit.org/show_bug.cgi?id=88182

        Reviewed by Sam Weinig.

        Use USE(APPKIT):
        * Shared/mac/NativeWebKeyboardEventMac.mm:
        * Shared/mac/NativeWebMouseEventMac.mm:
        * Shared/mac/NativeWebWheelEventMac.mm:
        * Shared/mac/WebEventFactory.h:
        * UIProcess/API/mac/WKTextInputWindowController.h:
        * UIProcess/API/mac/WKTextInputWindowController.mm:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:

        Use ENABLE(NETSCAPE_PLUGIN_API):
        * UIProcess/API/C/WKPluginSiteDataManager.cpp:
        (WKPluginSiteDataManagerClearSiteData):
        (WKPluginSiteDataManagerClearAllSiteData):

        Use USE(AUTOCORRECTION_PANEL):
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::showCorrectionPanel):
        (WebKit::PageClientImpl::dismissCorrectionPanel):
        (WebKit::PageClientImpl::dismissCorrectionPanelSoon):
        * UIProcess/mac/CorrectionPanel.mm:

        Use HAVE(HOSTED_CORE_ANIMATION):
        * UIProcess/mac/WebContextMac.mm:

        Put ENABLE(FULLSCREEN_API) in the right place:
        * UIProcess/mac/WebFullScreenManagerProxyMac.mm:

        Remove unnecessary use of USE(APPKIT):
        * UIProcess/mac/WebPageProxyMac.mm:

        Use USE(SECURITY_FRAMEWORK):
        * WebProcess/Authentication/mac/AuthenticationManager.mac.mm:

        Use ENABLE(CONTEXT_MENUS):
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:

        Use USE(SECURITY_FRAMEWORK):
        * WebProcess/WebProcess.h:

        Remove unnecessary use of USE(SECURITY_FRAMEWORK):
        * WebProcess/mac/WebProcessMac.mm:

2012-06-02  Andy Estes  <aestes@apple.com>

        Remove a duplicate INIT() from WebSystemInterface.mm
        https://bugs.webkit.org/show_bug.cgi?id=88181

        Reviewed by Anders Carlsson.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2012-06-02  Andy Estes  <aestes@apple.com>

        Remove unnecessary import of <Cocoa/Cocoa.h>
        https://bugs.webkit.org/show_bug.cgi?id=88180

        Reviewed by Sam Weinig.

        * UIProcess/mac/WKFullKeyboardAccessWatcher.h:

2012-06-02  Andy Estes  <aestes@apple.com>

        Ensure cpu_type_t is defined by including <mach/machine.h>
        https://bugs.webkit.org/show_bug.cgi?id=88178

        Reviewed by Anders Carlsson.

        * Shared/Plugins/PluginModuleInfo.h:

2012-06-02  Sam Weinig  <sam@webkit.org>

        InjectedBundles' sandbox extensions don't do what we think they do
        https://bugs.webkit.org/show_bug.cgi?id=88177

        Reviewed by Anders Carlsson.

        This cannot be tested with our current infrastructure (or any modifications of the
        infrastructure I can think of) since it relies on the bundle being put outside
        the build directory where WebKit is put.

        * WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp:
        (WebKit::InjectedBundle::load):
        Use SandboxExtension::consumePermanently() rather than consume(), otherwise,
        nulling out the SandboxExtension a few lines later invalidates the extension
        we just consumed.

2012-06-02  Dan Bernstein  <mitz@apple.com>

        Reverted the last change.

        * WebKit2.xcodeproj/project.pbxproj:

2012-06-02  Dan Bernstein  <mitz@apple.com>

        Stop treating two Python scripts as private headers.

        * WebKit2.xcodeproj/project.pbxproj: Removed model.py and parser.py from the Copy Headers
        build phase.

2012-06-02  Zeno Albisser  <zeno@webkit.org>

        Fix and enable WebGL for WebKit2 on Qt.
        https://bugs.webkit.org/show_bug.cgi?id=86214

        Added glue code to make use of GraphicsSurface
        as a backend for the webgl-canvas in case of WK2.

        Reviewed by Noam Rosenthal.

        * UIProcess/API/qt/qwebpreferences.cpp:
        (QWebPreferencesPrivate::testAttribute):
        (QWebPreferencesPrivate::setAttribute):
        (QWebPreferences::webGLEnabled):
        (QWebPreferences::setWebGLEnabled):
        * UIProcess/API/qt/qwebpreferences_p.h:
        * UIProcess/API/qt/qwebpreferences_p_p.h:
        Added WebGLEnabled enum to allow enabling/disabling of
        WebGL using QWebPreferences.

        * UIProcess/LayerTreeHostProxy.cpp:
        (WebKit::LayerTreeHostProxy::syncCanvas):
        Dispatch syncCanvas calls to the apropriate
        WebLayerTreeRenderer.

        * UIProcess/LayerTreeHostProxy.h:
        (LayerTreeHostProxy):
        * UIProcess/LayerTreeHostProxy.messages.in:
        * UIProcess/WebLayerTreeRenderer.h:
        (WebLayerTreeRenderer):
        * UIProcess/WebLayerTreeRenderer.cpp:
        (WebKit::WebLayerTreeRenderer::syncCanvas):
        (WebKit::WebLayerTreeRenderer::deleteLayer):
        (WebKit::WebLayerTreeRenderer::purgeGLResources):
        Create a TextureMapperSurfaceBackingStore for the canvas
        if necessary and pass or update the graphicsSurfaceToken
        for to be used with the backing store.

        * WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:
        (WebCore::WebGraphicsLayer::WebGraphicsLayer):
        (WebCore):
        (WebCore::WebGraphicsLayer::setContentsToCanvas):
        (WebCore::WebGraphicsLayer::syncCanvas):
        Copy the multisample framebuffer contents onto the GraphicsSurface.
        Notify the UIProcess of the availability of a new texture.
        (WebCore::WebGraphicsLayer::syncCompositingStateForThisLayerOnly):
        Sync the canvas as well.

        * WebProcess/WebCoreSupport/WebGraphicsLayer.h:
        Added a pure virtual function syncCanvas.
        This is guarded by PLATFORM(QT).
        (WebGraphicsLayerClient):
        (WebGraphicsLayer):

        * WebProcess/WebPage/qt/LayerTreeHostQt.cpp:
        (WebKit::LayerTreeHostQt::syncLayerChildren):
        (WebKit):
        (WebKit::LayerTreeHostQt::syncCanvas):
        * WebProcess/WebPage/qt/LayerTreeHostQt.h:
        (LayerTreeHostQt):

2012-06-01  Brady Eidson  <beidson@apple.com>

        <rdar://problem/11335622> and https://bugs.webkit.org/show_bug.cgi?id=88119
        REGRESSION (r99448) Zero-sized plug-ins no longer get an NPP_SetWindow call
        
        Followup to r119260

        Rubber-stamped by Anders Carlsson. 

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::callSetWindow): Set the m_hasCalledSetWindow here...
        (WebKit::NetscapePlugin::geometryDidChange): ...instead of here.

2012-06-01  Brady Eidson  <beidson@apple.com>

        <rdar://problem/11335622> and https://bugs.webkit.org/show_bug.cgi?id=88119
        REGRESSION (r99448) Zero-sized plug-ins no longer get an NPP_SetWindow call

        Reviewed by Oliver Hunt.

        Add a flag to NetscapePlugin to track whether or not NPP_SetWindow has ever been called.
        Check this flag in geometryDidChange to make sure every plug-in gets the call at least once.

        "Everybody gets one.  Tell him, Peter."
        "Apparently everybody gets one."
        "Bingo."

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin):
        (WebKit::NetscapePlugin::geometryDidChange):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        (NetscapePlugin):

2012-06-01  Dinu Jacob  <dinu.jacob@nokia.com>

        [WK2] WebLayerTreeRenderer::setContentsSize called synchronously
        https://bugs.webkit.org/show_bug.cgi?id=88091

        Reviewed by Noam Rosenthal.

        Do not call WebLayerTreeRenderer::setContentsSize synchronously
        from LayerTreeHostProxy.
 
        * UIProcess/LayerTreeHostProxy.cpp:
        (WebKit::LayerTreeHostProxy::setContentsSize):

2012-06-01  Dinu Jacob  <dinu.jacob@nokia.com>

        [Qt][WK2] Set QWebKitTest::isScalable default as false
        https://bugs.webkit.org/show_bug.cgi?id=88095

        Reviewed by Tor Arne Vestbø.

        Set QWebKitTest::isScalable default as false

        * UIProcess/API/qt/qwebkittest.cpp:
        (QWebKitTest::isScalable):

2012-06-01  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] Remove QtViewportInteractionEngine::pageItemSizeChanged.
        https://bugs.webkit.org/show_bug.cgi?id=88082

        Reviewed by Kenneth Rohde Christiansen.

        The function was causing flickering, and after testing it was verified
        that it was no longer needed either.

        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::QtViewportInteractionEngine::QtViewportInteractionEngine):
        * UIProcess/qt/QtViewportInteractionEngine.h:
        (QtViewportInteractionEngine):

2012-06-01  Dinu Jacob  <dinu.jacob@nokia.com>

        [Qt][WK2] Contents not rendered in MiniBrowser for some pages
        https://bugs.webkit.org/show_bug.cgi?id=87922

        Reviewed by Kenneth Rohde Christiansen.

        Set drawing area visible contents rect if new visible contents rect is different from
        the previous one.

        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::QtViewportInteractionEngine::informVisibleContentChange):
        * UIProcess/qt/QtViewportInteractionEngine.h:
        (QtViewportInteractionEngine):

2012-06-01  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Move suspension to QtViewportInteractionEngine
        https://bugs.webkit.org/show_bug.cgi?id=88078

        Reviewed by Simon Hausmann.

        Next step is to take care of visibility changes.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewFlickablePrivate::QQuickWebViewFlickablePrivate):
        (QQuickWebViewFlickablePrivate::onComponentComplete):
        * UIProcess/API/qt/qquickwebview_p.h:
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):
        (QQuickWebViewFlickablePrivate):
        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::ViewportUpdateDeferrer::ViewportUpdateDeferrer):
        (WebKit::ViewportUpdateDeferrer::~ViewportUpdateDeferrer):
        (WebKit::QtViewportInteractionEngine::suspendPageContent):
        (WebKit):
        (WebKit::QtViewportInteractionEngine::resumePageContent):
        * UIProcess/qt/QtViewportInteractionEngine.h:
        (QtViewportInteractionEngine):

2012-06-01  Dinu Jacob  <dinu.jacob@nokia.com>

        [Qt][W2] Qml Error in ViewportInfoItem.qml in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=87999

        Reviewed by Kenneth Rohde Christiansen.

        Return default viewport attributes rather than invalid QVariant.

        * UIProcess/API/qt/qwebkittest.cpp:
        (QWebKitTest::contentsScale):
        (QWebKitTest::devicePixelRatio):
        (QWebKitTest::initialScale):
        (QWebKitTest::minimumScale):
        (QWebKitTest::maximumScale):
        (QWebKitTest::isScalable):
        (QWebKitTest::layoutSize):

2012-05-31  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Clean up our viewport handling mess
        https://bugs.webkit.org/show_bug.cgi?id=87977

        Reviewed by Simon Hausmann.

        Consolidated functionality from QQuickWebViewPrivate* into
        ViewportInteractionEngine that belongs there, in preparation for
        renaming ViewportInteractionEngine in the future.

        Remove unneeded methods and move others to private.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewFlickablePrivate::QQuickWebViewFlickablePrivate):
        (QQuickWebViewFlickablePrivate::onComponentComplete):
        (QQuickWebViewFlickablePrivate::didChangeViewportProperties):
        (QQuickWebViewFlickablePrivate::updateViewportSize):
        (QQuickWebViewFlickablePrivate::_q_resume):
        (QQuickWebViewFlickablePrivate::pageDidRequestScroll):
        * UIProcess/API/qt/qquickwebview_p.h:
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):
        (QQuickWebViewFlickablePrivate):
        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::ViewportUpdateDeferrer::~ViewportUpdateDeferrer):
        (WebKit::QtViewportInteractionEngine::QtViewportInteractionEngine):
        (WebKit::QtViewportInteractionEngine::viewportAttributesChanged):
        (WebKit::QtViewportInteractionEngine::pageContentsSizeChanged):
        (WebKit::QtViewportInteractionEngine::pageItemPositionChanged):
        (WebKit::QtViewportInteractionEngine::pageContentPositionRequested):
        (WebKit::QtViewportInteractionEngine::visibleContentsRect):
        (WebKit):
        (WebKit::QtViewportInteractionEngine::informVisibleContentChange):
        (WebKit::QtViewportInteractionEngine::viewportItemSizeChanged):
        * UIProcess/qt/QtViewportInteractionEngine.h:
        (WebKit):
        (QtViewportInteractionEngine):

2012-05-31  Hajime Morrita  <morrita@chromium.org>

        REGRESSION(r117572): editing/spelling/spellcheck-async-remove-frame.html crashes on Mac
        https://bugs.webkit.org/show_bug.cgi?id=86859

        Reviewed by Ryosuke Niwa.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::requestCheckingOfString):
        * WebProcess/WebCoreSupport/WebEditorClient.h:

2012-05-31  Andy Estes  <aestes@apple.com>

        [WebKit2] Remove nested #if conditions from messages.in files
        https://bugs.webkit.org/show_bug.cgi?id=88039

        Reviewed by Filip Pizlo.

        The code generator that processes messages.in files can't handle nested
        #if conditions. Sadly I added said conditions in r117700 but failed to
        verify the generated result. Un-nest the conditions I added.

        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.messages.in:

2012-05-31  Andy Estes  <aestes@apple.com>

        Disentangle code that relies on USE(AUTOMATIC_TEXT_REPLACEMENT) from that which merely relies on PLATFORM(MAC)
        https://bugs.webkit.org/show_bug.cgi?id=87933

        Reviewed by Dan Bernstein.

        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:

2012-05-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add webkit_download_get_request to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=87957

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitDownload.cpp:
        (webkit_download_get_request): Return the WebKitURIRequest
        representing the request that originated the download.
        * UIProcess/API/gtk/WebKitDownload.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbol.
        * UIProcess/API/gtk/tests/TestDownloads.cpp:
        (testDownloadLocalFile):
        (testDownloadRemoteFile):

2012-05-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] WebProcess crashes when a download is started from an existing ResourceHandle
        https://bugs.webkit.org/show_bug.cgi?id=87953

        Reviewed by Martin Robinson.

        The output stream to write the downloaded data is created in the
        didReceiveResponse callback of the download client. When a
        download is created for an existing ResourceHandle (this happens
        for example when policy decision is download), the response has
        already been received. In this case we should make sure that the
        download client is notified about the response, so that when data
        actually arrives the output stream has already been created.

        * WebProcess/Downloads/soup/DownloadSoup.cpp:
        (WebKit::Download::startWithHandle):

2012-05-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix webkit_web_view_can_execute_editing_command() API doc
        https://bugs.webkit.org/show_bug.cgi?id=87930

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebView.cpp:

2012-05-31  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Simplify QT_VERSION_CHECKS for Qt5 by introducing HAVE(QT5)
        https://bugs.webkit.org/show_bug.cgi?id=87955

        Reviewed by Simon Hausmann.

        * UIProcess/API/qt/tests/publicapi/tst_publicapi.cpp:

2012-05-31  Zalan Bujtas  <zbujtas@gmail.com>

        [Qt][WK2] Add missing ViewportUpdateDeferrer guarding to setPageItemRectVisible() calls.
        https://bugs.webkit.org/show_bug.cgi?id=87936

        Reviewed by Kenneth Rohde Christiansen.

        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::QtViewportInteractionEngine::viewportAttributesChanged):
        (WebKit::QtViewportInteractionEngine::pageContentsSizeChanged):

2012-05-31  Keunsoon Lee  <keunsoon.lee@samsung.com>

        [EFL][WK2] Add WKURLRequestEfl and WKURLResponseEfl
        https://bugs.webkit.org/show_bug.cgi?id=70231

        Reviewed by Chang Shu.

        These codes can be used for WKPageDecidePolicyForResponseCallback on page policy callbacks.
        The callback conveys WKURLResponseRef and WKURLRequestRef as parameter.

        By the way, EFL browser needs content type from response to decide correct policy.
        Another information, cookie, is necessary with similar reason.
        But, there is no way to obtain such information on WebKit2 main stream, except for WKURLRequestCopyURL().

        So, EFL port created those files to extract necessary information from WKURLResponseRef and WKURLRequestRef,
        and not to desturb WebKit2 main stream. 

        * Shared/API/c/efl/WKURLRequestEfl.cpp: Added.
        (WKURLRequestEflCopyCookies): extracting cookie information from WKURLRequestRef.
        * Shared/API/c/efl/WKURLRequestEfl.h: Added.
        * Shared/API/c/efl/WKURLResponseEfl.cpp: Added.
        (WKURLResponseEflCopyContentType): extracting content type (i.e. MIME type) from WKURLResponseRef.
        * Shared/API/c/efl/WKURLResponseEfl.h: Added.
        * Shared/efl/WebCoreArgumentCodersEfl.cpp: Added.
        (CoreIPC):
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        * Shared/efl/WebURLRequestEfl.cpp: Added.
        (WebKit):
        (WebKit::WebURLRequestEfl::WebURLRequestEfl):
        (WebKit::WebURLRequestEfl::cookies): obtaining cookie information from ResourceRequest.
        * Shared/efl/WebURLRequestEfl.h: Added.
        (WebKit):
        (WebURLRequestEfl):
        (WebKit::WebURLRequestEfl::create):
        * Shared/efl/WebURLResponseEfl.cpp: Added.
        (WebKit):
        (WebKit::WebURLResponseEfl::WebURLResponseEfl):
        (WebKit::WebURLResponseEfl::contentType): obtaining content type (i.e. MIME type) from ResourceResponse.
        * Shared/efl/WebURLResponseEfl.h: Added.
        (WebKit):
        (WebURLResponseEfl):
        (WebKit::WebURLResponseEfl::create):

2012-05-31  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][WK2] Rename ewk_private.h to ewk_view_private.h
        https://bugs.webkit.org/show_bug.cgi?id=87923

        Reviewed by Kenneth Rohde Christiansen.

        EFL WK1 decided to divide up ewk_private.h into each file's XXX_private.h file in order to maintain
        internal functions more easily. EFL WK2 needs to adjust this as well.

        * UIProcess/API/efl/PageClientImpl.cpp:
        * UIProcess/API/efl/ewk_view_private.h: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_private.h.
        (WebCore):
        * UIProcess/cairo/BackingStoreCairo.cpp:

2012-05-31  Andy Estes  <aestes@apple.com>

        Move the specification of framework and library linking out of WebKit2.xcodeproj and into WebKit2.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=87932

        Reviewed by Dan Bernstein.

        Doing this makes it easier to vary linking based on SDK or other factors.

        * Configurations/WebKit2.xcconfig: Create FRAMEWORK_AND_LIBRARY_LDFLAGS,
        which specifies the same list of frameworks and libraries that were
        previously in WebKit2's 'Link Binary With Libraries' build phase, and
        append it to $(OTHER_LDFLAGS).
        * WebKit2.xcodeproj/project.pbxproj: Remove all frameworks and
        libraries from the 'Link Binary With Libraries' build phase.

2012-05-30  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [GTK] [WK2] Memory leak in webkitWebViewBaseStartDrag
        https://bugs.webkit.org/show_bug.cgi?id=87756

        Reviewed by Carlos Garcia Campos.

        Fixed memory leaks in drag and drop by using adoptRef instead
        of just getting new references.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseStartDrag):

2012-05-30  Luiz Agostini  <luiz.agostini@nokia.com>

        [Qt] handled touchmove events should not cancel tap gesture recognition
        https://bugs.webkit.org/show_bug.cgi?id=87808

        Reviewed by Kenneth Rohde Christiansen.

        Tap gesture recognition should not be canceled if a touchmove event is handled
        by the web process.

        * UIProcess/qt/QtWebPageEventHandler.cpp:
        (WebKit::QtWebPageEventHandler::doneWithTouchEvent):

2012-05-30  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK][WK2] Errors in documentation about  webkit_web_view_run_javascript()
        https://bugs.webkit.org/show_bug.cgi?id=87866

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebView.cpp: Fix errors.

2012-05-30  Andy Estes  <aestes@apple.com>

        WebProcessMainMac.mm doesn't need to import WKView.h.

        Rubber-stamped by Anders Carlsson. 

        * WebProcess/mac/WebProcessMainMac.mm:

2012-05-30  Marcelo Lira  <marcelo.lira@openbossa.org>

        WebKit2: Implement layoutTestController.setPluginsEnabled() in WebKitTestRunner.
        https://bugs.webkit.org/show_bug.cgi?id=58593

        Adds the ability to change the pluginsEnabled flag in WebCore::Settings
        to WebKitTestRunner's LayoutTestController. The flag is modified via the
        public C API of the WebProcess.

        Reviewed by Darin Adler.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetPluginsEnabled):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setPluginsEnabled): Calls the setPluginsEnabled
        method for the WebCore::Settings of each WebCore::Page in the current
        page group.
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):

2012-05-30  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        HashTable.h has using directives for std::pair and std::make_pair
        https://bugs.webkit.org/show_bug.cgi?id=29919

        Reviewed by Darin Adler.

        Change code to use std::pair and std::make_pair.

        * UIProcess/Launcher/mac/DynamicLinkerEnvironmentExtractor.mm:
        (WebKit::DynamicLinkerEnvironmentExtractor::processEnvironmentVariable):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::postMessageToInjectedBundle):

2012-05-30  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed: Fix wrongly typed Qt slot.

        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::QtViewportInteractionEngine::QtViewportInteractionEngine):

2012-05-30  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Move ViewportAttribute related methods to the interaction engine.
        https://bugs.webkit.org/show_bug.cgi?id=87855

        Reviewed by Simon Hausmann.

        Move the logic of didChange{ViewportProperties|ContentsSize} to the
        interaction engine and update our testing object.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewLegacyPrivate::QQuickWebViewLegacyPrivate):
        (QQuickWebViewFlickablePrivate::didChangeViewportProperties):
        (QQuickWebViewFlickablePrivate::didChangeContentsSize):
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):
        * UIProcess/API/qt/qwebkittest.cpp:
        (QWebKitTest::contentsScale):
        (QWebKitTest::devicePixelRatio):
        (QWebKitTest::initialScale):
        (QWebKitTest::minimumScale):
        (QWebKitTest::maximumScale):
        (QWebKitTest::isScalable):
        (QWebKitTest::layoutSize):
        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::QtViewportInteractionEngine::viewportAttributesChanged):
        (WebKit):
        (WebKit::QtViewportInteractionEngine::pageContentsSizeChanged):
        * UIProcess/qt/QtViewportInteractionEngine.h:
        (QtViewportInteractionEngine):

2012-05-30  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Do renames in ViewportInteractionEngine as agreed upon
        https://bugs.webkit.org/show_bug.cgi?id=87845

        Reviewed by Simon Hausmann.

        Mostly moving methods around and renaming them to be more
        consistent and avoid terminology clashes.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewFlickablePrivate::didChangeViewportProperties):
        (QQuickWebViewFlickablePrivate::pageDidRequestScroll):
        (QQuickWebViewFlickablePrivate::didChangeContentsSize):
        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::boundPosition):
        (WebKit):
        (WebKit::QtViewportInteractionEngine::QtViewportInteractionEngine):
        (WebKit::QtViewportInteractionEngine::setPageItemRectVisible):
        (WebKit::QtViewportInteractionEngine::animatePageItemRectVisible):
        (WebKit::QtViewportInteractionEngine::flickMoveStarted):
        (WebKit::QtViewportInteractionEngine::flickMoveEnded):
        (WebKit::QtViewportInteractionEngine::pageItemPositionChanged):
        (WebKit::QtViewportInteractionEngine::pageContentPositionRequest):
        (WebKit::QtViewportInteractionEngine::scaleAnimationValueChanged):
        (WebKit::QtViewportInteractionEngine::computePosRangeForPageItemAtScale):
        (WebKit::QtViewportInteractionEngine::focusEditableArea):
        (WebKit::QtViewportInteractionEngine::zoomToAreaGestureEnded):
        (WebKit::QtViewportInteractionEngine::nearestValidBounds):
        (WebKit::QtViewportInteractionEngine::cancelScrollAnimation):
        (WebKit::QtViewportInteractionEngine::pinchGestureEnded):
        (WebKit::QtViewportInteractionEngine::pageItemSizeChanged):
        * UIProcess/qt/QtViewportInteractionEngine.h:
        (WebKit::QtViewportInteractionEngine::setDevicePixelRatio):
        (QtViewportInteractionEngine):

2012-05-30  Mariusz Grzegorczyk  <mariusz.g@samsung.com>, Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Fix WebKit2-EFL build
        https://bugs.webkit.org/show_bug.cgi?id=83693

        Reviewed by Carlos Garcia Campos.

        * CMakeLists.txt: Move IDL generator codes to generate port specific *.messages.in.
        * PlatformEfl.cmake: Add soup related files after r115411 and includes to fix build break.
        * UIProcess/API/efl/PageClientImpl.cpp: Fix build break with ENABLE_TOUCH_EVENTS.
        (WebKit):
        (WebKit::PageClientImpl::doneWithTouchEvent):
        * UIProcess/API/efl/PageClientImpl.h:
        (PageClientImpl):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp: Fix build break with ENABLE_INPUT_TYPE_COLOR and ENABLE_REGISTER_PROTOCOL_HANDLER.
        (WebKit):
        (WebKit::WebChromeClient::createColorChooser):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: Fix build break with ENABLE_WEB_INTENTS
        (WebKit):
        (WebKit::WebFrameLoaderClient::dispatchIntent):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        (WebCore):
        (WebFrameLoaderClient):
        * WebProcess/WebProcess.cpp: Guard PLATFORM_STRATEGIES codes.
        (WebKit::WebProcess::didGetPlugins):
        * WebProcess/soup/WebSoupRequestManager.cpp: Try to share with EFL port.
        (WebKit::WebSoupRequestManager::didHandleURIRequest):

2012-05-30  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Variable renaming as preparation of further refactoring.

        Rubberstamped by Simon Hausmann.

        Change m_viewport to m_viewportItem and m_content to m_pageItem.

        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::QtViewportInteractionEngine::QtViewportInteractionEngine):
        (WebKit::QtViewportInteractionEngine::setItemRectVisible):
        (WebKit::QtViewportInteractionEngine::animateItemRectVisible):
        (WebKit::QtViewportInteractionEngine::flickableMoveStarted):
        (WebKit::QtViewportInteractionEngine::flickableMoveEnded):
        (WebKit::QtViewportInteractionEngine::flickableMovingPositionUpdate):
        (WebKit::QtViewportInteractionEngine::scaleAnimationStateChanged):
        (WebKit::QtViewportInteractionEngine::pagePositionRequest):
        (WebKit::QtViewportInteractionEngine::computePosRangeForItemAtScale):
        (WebKit::QtViewportInteractionEngine::focusEditableArea):
        (WebKit::QtViewportInteractionEngine::zoomToAreaGestureEnded):
        (WebKit::QtViewportInteractionEngine::nearestValidBounds):
        (WebKit::QtViewportInteractionEngine::reset):
        (WebKit::QtViewportInteractionEngine::setCSSScale):
        (WebKit::QtViewportInteractionEngine::currentCSSScale):
        (WebKit::QtViewportInteractionEngine::scrollAnimationActive):
        (WebKit::QtViewportInteractionEngine::panGestureActive):
        (WebKit::QtViewportInteractionEngine::panGestureStarted):
        (WebKit::QtViewportInteractionEngine::panGestureRequestUpdate):
        (WebKit::QtViewportInteractionEngine::panGestureEnded):
        (WebKit::QtViewportInteractionEngine::panGestureCancelled):
        (WebKit::QtViewportInteractionEngine::cancelScrollAnimation):
        (WebKit::QtViewportInteractionEngine::pinchGestureStarted):
        (WebKit::QtViewportInteractionEngine::pinchGestureRequestUpdate):
        (WebKit::QtViewportInteractionEngine::scaleContent):
        * UIProcess/qt/QtViewportInteractionEngine.h:
        (QtViewportInteractionEngine):

2012-05-30  Zalan Bujtas  <zbujtas@gmail.com>

        [Qt][WK2] Do not use anonymous variables for ViewportUpdateDeferrer.
        https://bugs.webkit.org/show_bug.cgi?id=87831

        Reviewed by Kenneth Rohde Christiansen.

        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::QtViewportInteractionEngine::pagePositionRequest):
        (WebKit::QtViewportInteractionEngine::cancelScrollAnimation):
        (WebKit::QtViewportInteractionEngine::itemSizeChanged):

2012-05-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebKit2GTK+ API tests in the bots.

        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
        (testWebViewCanShowMIMEType): Remove the check for multimedia and
        plugins MIME types since they depend on the configuration and they
        are not available in the bots.

2012-05-29  Jer Noble  <jer.noble@apple.com>

        Noticeable delay taking an HTML5 trailer fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=87794

        Reviewed by Darin Adler.

        Work around a not-entirely understood delay when using the results of a CGWindowListCreateImage()
        call as the contents of a placeholder view.  The backing of the resulting CGImageRef resides on
        the WindowServer, and drawing that image requires synchronous calls to the WindowServer process.
        By copying the image data, up front, into our own process, we can avoid those synchronous calls
        later and avoid the delay-causing drawing behavior.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (CGImageDeepCopy): Added a helper function which copies the image data into a new CGImage.
        (-[WKFullScreenWindowController enterFullScreen:]): Use the above.

2012-05-29  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [GTK] [WK2] Reproducible crash in performDragControllerAction
        https://bugs.webkit.org/show_bug.cgi?id=87744

        Reviewed by Martin Robinson.

        Fix a crash by using deref() instead of delete to dereference and
        release the platformData of DragData.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performDragControllerAction):

2012-05-29  Simon Pena  <spena@igalia.com>

        [GTK] Missing field initializers for WKPageLoaderClient and WKPageUIClient
        https://bugs.webkit.org/show_bug.cgi?id=87745

        Reviewed by Carlos Garcia Campos.

        Add missing initializers for WKPageLoaderClient and
        WKPageUIClient, for callbacks WKPagePluginDidFailCallback and
        WKPageUnavailablePluginButtonClickedCallback, introduced in
        revision r116716.

        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        (attachLoaderClientToView): Initialize WKPagePluginDidFailCallback
        * UIProcess/API/gtk/WebKitUIClient.cpp:
        (attachUIClientToView): Initialize callback
        WKPageUnavailablePluginButtonClickedCallback

2012-05-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Policy decision headers are not included in the main webkit2.h header
        https://bugs.webkit.org/show_bug.cgi?id=87753

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/webkit2.h: Include
        WebKitNavigationPolicyDecision.h and WebKitResponsePolicyDecision.h.

2012-05-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add webkit_web_view_can_show_mime_type() to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=85998

        Reviewed by Martin Robinson.

        And use it in the default handler of WebKitWebView::decide-policy
        signal to decide whether to use or ignore a response policy
        decision depending on whether the mime type of the response can be
        displayed in the WebView or not.

        * UIProcess/API/gtk/WebKitURIResponse.cpp:
        (webkitURIResponseGetProperty): Add getter for mime-type property.
        (webkit_uri_response_class_init): Add mime-type property.
        (webkit_uri_response_get_mime_type): Return the mime type of the
        response.
        * UIProcess/API/gtk/WebKitURIResponse.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewDecidePolicy): In case of response policy decisions,
        use the URI response to decide what to do: download if the
        response is an attachment, use if the mime type is supported by
        the web view or ignore otherwise.
        (webkit_web_view_can_show_mime_type): Returns whether the given
        mime type can be displayed in the WebView or not.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.
        * UIProcess/API/gtk/tests/TestResources.cpp:
        (testWebResourceResponse):
        (testWebResourceMimeType):
        (serverCallback):
        (beforeAll):
        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
        (testWebViewCanShowMIMEType):
        (beforeAll):

2012-05-29  David Barr  <davidbarr@chromium.org>

        Introduce ENABLE_CSS_IMAGE_RESOLUTION compile flag
        https://bugs.webkit.org/show_bug.cgi?id=87685

        Reviewed by Eric Seidel.

        Add a configuration option for CSS image-resolution support, disabling it by default.

        * Configurations/FeatureDefines.xcconfig:

2012-05-29  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Move tests from DesktopBehavior which can be made to work
        https://bugs.webkit.org/show_bug.cgi?id=87736

        Rubberstamped by Simon Hausmann.

        Move and modify the following tests to WebView/ and make them
        use touch events.

        * UIProcess/API/qt/tests/qmltests/WebView/tst_itemSelector.qml: Renamed from Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_itemSelector.qml.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_messaging.qml: Renamed from Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_messaging.qml.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_multiFileUpload.qml: Renamed from Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_multiFileUpload.qml.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_singleFileUpload.qml: Renamed from Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_singleFileUpload.qml.

2012-05-29  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Sync up favicon-implementation with WebView url changes in r118158

        https://bugs.webkit.org/show_bug.cgi?id=87133

        We now base64-encode the page url in the image-provider url, so that any
        normalization done by QUrl will not mess up the page-url. The logic of
        creating and parsing the provider-url has been moved into the image
        provider, to keep it in one place.

        We were also releasing icons (even ones we hadn't retained), which we can't
        do since we don't know when the icon url is no longer in use.

        Reviewed-by Simon Hausmann.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::initialize):
        (QQuickWebViewPrivate::loadProgressDidChange):
        (QQuickWebViewPrivate::_q_onUrlChanged):
        (QQuickWebViewPrivate::_q_onIconChangedForPageURL):
        (QQuickWebViewPrivate::updateIcon):
        (QQuickWebView::icon):
        * UIProcess/API/qt/qquickwebview_p.h:
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):
        * UIProcess/API/qt/qwebiconimageprovider.cpp:
        (QWebIconImageProvider::iconURLForPageURLInContext):
        (QWebIconImageProvider::requestImage):
        * UIProcess/API/qt/qwebiconimageprovider_p.h:
        (WebKit):
        * UIProcess/API/qt/tests/qmltests/WebView/tst_favIconLoad.qml:
        * UIProcess/qt/QtWebIconDatabaseClient.cpp:
        (WebKit::QtWebIconDatabaseClient::didChangeIconForPageURL):
        (WebKit::QtWebIconDatabaseClient::iconForPageURL):
        (WebKit):
        (WebKit::QtWebIconDatabaseClient::iconImageForPageURL):
        * UIProcess/qt/QtWebIconDatabaseClient.h:
        (QtWebIconDatabaseClient):

2012-05-29  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt][WK2] Fix failing qmltests::FitToView::test_basic()
        https://bugs.webkit.org/show_bug.cgi?id=87236

        Reviewed by Simon Hausmann.

        The fix is a combination of things. First of all some events
        were emitted at the wrong times or when nothing had changed.

        We also initialized the view saying it was suspended which is
        not correct.

        Another bug was that the touch tap, didn't result in marking
        the view as having user interaction. This was recently fixed
        in r118493.

        * UIProcess/API/qt/qquickwebpage.cpp:
        (QQuickWebPage::setContentsScale):
        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewFlickablePrivate::QQuickWebViewFlickablePrivate):

            Make sure pageIsSuspended is initialized to false.

        (QQuickWebViewFlickablePrivate::_q_onInformVisibleContentChange):

            Early bail out if there is no change.

            Inform contentScaleCommitted if the scale changed since last time.

        (QQuickWebViewFlickablePrivate::didChangeContentsSize):

            Make sure to commit the right signals, ie. *Changed and not *Committed.

        * UIProcess/API/qt/qquickwebview_p.h:
        * UIProcess/API/qt/qwebkittest.cpp:
        (touchPoint):
        (QWebKitTest::sendTouchEvent):
        (QWebKitTest::touchTap):
        (QWebKitTest::touchDoubleTap):

            Add proper touch emulation for the testing system. Call directly
            to our WebKit API (avoid Qt event loop) to ensure all events gets
            delivered.

        * UIProcess/API/qt/qwebkittest_p.h:
        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::QtViewportInteractionEngine::setItemRectVisible):

            Assert that a ViewportUpdateDeferrer is always used when calling
            this method.

        (WebKit::QtViewportInteractionEngine::animateItemRectVisible):

            Remove work around now we have the proper fix in place.

        (WebKit::QtViewportInteractionEngine::pagePositionRequest):

            Do not send the informVisibleContentChange manually, use the
            ViewportUpdateDeferrer instead.

        (WebKit::QtViewportInteractionEngine::cancelScrollAnimation):

            Add missing ViewportUpdateDeferrer.

        (WebKit::QtViewportInteractionEngine::pinchGestureStarted):

            No reason to emit informVisibleContentChange before pinch
            start, as it is always done on end (due to the ViewportUpdateDeferrer).

        (WebKit::QtViewportInteractionEngine::itemSizeChanged):

            Add missing ViewportUpdateDeferrer.

2012-05-29  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] [WK2] Allow user to inject JS scripts when the page loads
        https://bugs.webkit.org/show_bug.cgi?id=85827

        Reviewed by Simon Hausmann.

        Create a new experimental property to list URLs of JS scripts that should be
        loaded when a page is loaded. These scripts will run in the normal JS environment
        of the page.

        The supported URL schemes are file:/// and qrc:///. The scripts are read from the
        UI process and transfered to the Web process.

        Together with the experimental messaging API this provides a way for the
        application to manipulate the DOM (by injecting a script that does the
        manipulation and communicating with it via postMessage). This covers some of the
        use cases of QWebElement in our WK1 API.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::didRelaunchProcess):
        (readUserScript):
        (QQuickWebViewPrivate::updateUserScripts):
        (QQuickWebViewExperimental::userScripts):
        (QQuickWebViewExperimental::setUserScripts):
        * UIProcess/API/qt/qquickwebview_p.h:
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):
        * UIProcess/API/qt/tests/qmltests/WebView.pro:
        * UIProcess/API/qt/tests/qmltests/WebView/tst_userScripts.qml: Added.
        * UIProcess/API/qt/tests/qmltests/common/append-document-title.js: Added.
        * UIProcess/API/qt/tests/qmltests/common/big-user-script.js: Added.
        * UIProcess/API/qt/tests/qmltests/common/change-document-title.js: Added.
        * UIProcess/API/qt/tests/qmltests/resources.qrc: Added.
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/qt/WebPageProxyQt.cpp:
        (WebKit::WebPageProxy::setUserScripts):
        (WebKit):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (WebKit::WebPage::setUserScripts):
        (WebKit):

2012-05-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r118752.
        http://trac.webkit.org/changeset/118752
        https://bugs.webkit.org/show_bug.cgi?id=87731

        incomplete patch (Requested by cmarcelo on #webkit).

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::didRelaunchProcess):
        * UIProcess/API/qt/qquickwebview_p.h:
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):
        * UIProcess/API/qt/tests/qmltests/WebView.pro:
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/qt/WebPageProxyQt.cpp:
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/qt/WebPageQt.cpp:

2012-05-21  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] [WK2] Allow user to inject JS scripts when the page loads
        https://bugs.webkit.org/show_bug.cgi?id=85827

        Reviewed by Simon Hausmann.

        Create a new experimental property to list URLs of JS scripts that should be
        loaded when a page is loaded. These scripts will run in the normal JS environment
        of the page.

        The supported URL schemes are file:/// and qrc:///. The scripts are read from the
        UI process and transfered to the Web process.

        Together with the experimental messaging API this provides a way for the
        application to manipulate the DOM (by injecting a script that does the
        manipulation and communicating with it via postMessage). This covers some of the
        use cases of QWebElement in our WK1 API.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::didRelaunchProcess):
        (readUserScript):
        (QQuickWebViewPrivate::updateUserScripts):
        (QQuickWebViewExperimental::userScripts):
        (QQuickWebViewExperimental::setUserScripts):
        * UIProcess/API/qt/qquickwebview_p.h:
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):
        * UIProcess/API/qt/tests/qmltests/WebView.pro:
        * UIProcess/API/qt/tests/qmltests/WebView/tst_userScripts.qml: Added.
        * UIProcess/API/qt/tests/qmltests/common/append-document-title.js: Added.
        * UIProcess/API/qt/tests/qmltests/common/big-user-script.js: Added.
        * UIProcess/API/qt/tests/qmltests/common/change-document-title.js: Added.
        * UIProcess/API/qt/tests/qmltests/resources.qrc: Added.
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/qt/WebPageProxyQt.cpp:
        (WebKit::WebPageProxy::setUserScripts):
        (WebKit):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (WebKit::WebPage::setUserScripts):
        (WebKit):

2012-05-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add return value information to WebKitWebView::load-failed signal documentation
        https://bugs.webkit.org/show_bug.cgi?id=87704

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_class_init):

2012-05-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add WebKitWebInspector.h to the list of WebKit2 GTK public headers
        https://bugs.webkit.org/show_bug.cgi?id=87703

        Reviewed by Martin Robinson.

        * GNUmakefile.list.am: Add WebKitWebInspector.h to webkit2gtk_h_api.

2012-05-25  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        WebKitTestRunner needs to support layoutTestController.setJavaScriptProfilingEnabled
        https://bugs.webkit.org/show_bug.cgi?id=42328

        Reviewed by Eric Seidel.

        Removed unneeded setJavaScriptProfilingEnabled function from WTR after its
        move to windows.internals.settings.

        * WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleInspector.h:
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::setJavaScriptProfilingEnabled):
        * win/WebKit2.def:

2012-05-28  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Remove unused argument coders for animation
        https://bugs.webkit.org/show_bug.cgi?id=87435

        Reviewed by Sam Weinig.

        Left the used argument coders only, behind a proper USE(UI_SIDE_COMPOSITING) flag.

        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC):
        * Shared/WebCoreArgumentCoders.h:

2012-05-28  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Move allowRoundingHacks to Internals interface
        https://bugs.webkit.org/show_bug.cgi?id=87328

        Reviewed by Hajime Morita.

        * win/WebKit2.def: Add setAllowsRoundingHacks() to symbol filter.

2012-05-26  Geoffrey Garen  <ggaren@apple.com>

        WebKit should be lazy-finalization-safe (esp. the DOM) v2
        https://bugs.webkit.org/show_bug.cgi?id=87581

        Reviewed by Oliver Hunt.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::destroy):
        (WebKit::JSNPObject::leakNPObject):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::finalize): Use static_cast instead of jsCast because
        jsCast does Structure-based validation, and our Structure is not guaranteed
        to be alive when we get finalized.

2012-05-25  Maciej Stachowiak  <mjs@apple.com>

        REGRESSION (r116720): Subframe PDF scrolls extremely slowly
        https://bugs.webkit.org/show_bug.cgi?id=87557
        <rdar://problem/11499408>

        Reviewed by Anders Carlsson.
        
        It's not possible to make an automated test for this.

        * WebProcess/Plugins/PDF/BuiltInPDFView.mm:
        (WebKit::BuiltInPDFView::wantsWheelEvents): Return true instead of false and delete
        misleading comment. While the built-in PDF view would get added to the set of scrollable
        areas anyway, there are some code paths that check wantsWheelEvents explicitly, so it seems
        necessary to reutrn true.

2012-05-25  Brady Eidson  <beidson@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=87418
        WebBackForwardList should separate "has no current index" from the integer value of the current index

        This patch also renames "m_current" to "m_currentIndex" for clarity and symmetry with
        other variable names that reference "index",

        It also removes the m_closed and m_enabled flags which were never actually used.

        Reviewed by Darin Adler.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::WebBackForwardList):
        (WebKit::WebBackForwardList::addItem):
        (WebKit::WebBackForwardList::goToItem):
        (WebKit::WebBackForwardList::currentItem):
        (WebKit::WebBackForwardList::backItem):
        (WebKit::WebBackForwardList::forwardItem):
        (WebKit::WebBackForwardList::itemAtIndex):
        (WebKit::WebBackForwardList::backListCount):
        (WebKit::WebBackForwardList::forwardListCount):
        (WebKit::WebBackForwardList::backListAsImmutableArrayWithLimit):
        (WebKit::WebBackForwardList::forwardListAsImmutableArrayWithLimit):
        (WebKit::WebBackForwardList::clear):

        * UIProcess/WebBackForwardList.h:
        (WebKit::WebBackForwardList::currentIndex):
        (WebBackForwardList):

        * UIProcess/cf/WebBackForwardListCF.cpp:
        (WebKit::WebBackForwardList::createCFDictionaryRepresentation):
        (WebKit::WebBackForwardList::restoreFromCFDictionaryRepresentation):

2012-05-25  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=87529
        Background tabs hosted in window server flash before painting 
        when they first become active

        Reviewed by Anders Carlsson.

        Initialize to LayerHostingModeInWindowServer if that is 
        available to avoid having to re-make the context and re-set 
        everything later on.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):

2012-05-25  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK][WK2] Implement API for generic permission requests
        https://bugs.webkit.org/show_bug.cgi?id=84018

        Reviewed by Martin Robinson.

        Added new 'permission-request' signal to WebKitWebView, to be
        fired when WebKit needs confirmation from the user on whether to
        allow or deny certain operations, such as sharing the user's
        location with web site through the Geolocation API.

        New WebKitPermissionRequest interface, providing allow() and
        deny() operations, to be called over the objects implementing it
        when emitted along with the new 'permission-request' signal.

        * UIProcess/API/gtk/WebKitPermissionRequest.cpp: Added.
        (webkit_permission_request_default_init):
        (webkit_permission_request_allow):
        (webkit_permission_request_deny):
        * UIProcess/API/gtk/WebKitPermissionRequest.h: Added.
        (_WebKitPermissionRequestIface):
        * GNUmakefile.am: Added new files.

        Added the new signal to WebKitWebView, providing a default handler
        that will just deny the request when the signal is not handled.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewDecidePermissionRequest): Default handler.
        (webkit_web_view_class_init): Declare the new signal and connect
        to the default handler.
        (webkitWebViewMakePermissionRequest): Helper function to create a
        make a new permission request and emit the new signal signal.
        * UIProcess/API/gtk/WebKitWebView.h:
        (_WebKitWebViewClass):
        * UIProcess/API/gtk/WebKitWebViewPrivate.h: Declare the creational
        function webkitWebViewMakePermissionRequest for internal use only.

        Updated documentation files.

        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:

2012-05-25  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [WK2] Fix client interface size for WKPageContextMenuClient.
        https://bugs.webkit.org/show_bug.cgi?id=87472

        Reviewed by Carlos Garcia Campos.

        Add correct offset for version 1 and 2 of WKPageContextMenuClient.
        Revision 109750 introduces a new API and increases size of interfaceSizesByVersion
        but the table is not properly initialized for newly introduced version 2.

        * Shared/APIClientTraits.cpp:
        (WebKit):

2012-05-24  Andreas Kling  <kling@webkit.org>

        Mac bots crashing under PluginInfo destructor.
        <http://webkit.org/b/87414>
        <rdar://problem/11527172>

        Reviewed by Darin Adler.

        We can't safely pass WTF::String to another thread without a deref() race,
        so pass the PluginInfo vector by pointer instead of by value.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::sendDidGetPlugins):
        (WebKit::WebContext::handleGetPlugins):
        * UIProcess/WebContext.h:

2012-05-25  Zalan Bujtas  <zbujtas@gmail.com>

        [Qt][WK2] Fix failing qmltests::FitToView::test_basic()
        https://bugs.webkit.org/show_bug.cgi?id=87236

        Reviewed by Kenneth Rohde Christiansen.

        Rename contentViewportChanged to informVisibleContentChange() to
        reflect its functionality better. Centralize m_hadUserInteraction flag
        setting and add assertions on it to ensure that designated
        functions are called only on user interaction.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewFlickablePrivate::onComponentComplete):
        (QQuickWebViewFlickablePrivate::updateViewportSize):
        (QQuickWebViewFlickablePrivate::_q_onInformVisibleContentChange):
        (QQuickWebViewFlickablePrivate::_q_resume):
        * UIProcess/API/qt/qquickwebview_p.h:
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate::_q_onInformVisibleContentChange):
        (QQuickWebViewFlickablePrivate):
        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::ViewportUpdateDeferrer::~ViewportUpdateDeferrer):
        (WebKit::QtViewportInteractionEngine::flickableMovingPositionUpdate):
        (WebKit::QtViewportInteractionEngine::pagePositionRequest):
        (WebKit::QtViewportInteractionEngine::touchBegin):
        (WebKit::QtViewportInteractionEngine::focusEditableArea):
        (WebKit::QtViewportInteractionEngine::zoomToAreaGestureEnded):
        (WebKit::QtViewportInteractionEngine::panGestureStarted):
        (WebKit::QtViewportInteractionEngine::pinchGestureStarted):
        * UIProcess/qt/QtViewportInteractionEngine.h:
        (QtViewportInteractionEngine):

2012-05-24  Tim Horton  <timothy_horton@apple.com>

        Add feature defines for web-facing parts of CSS Regions and Exclusions
        https://bugs.webkit.org/show_bug.cgi?id=87442
        <rdar://problem/10887709>

        Reviewed by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig:

2012-05-24  Geoffrey Garen  <ggaren@apple.com>

        WebKit should be lazy-finalization-safe (esp. the DOM)
        https://bugs.webkit.org/show_bug.cgi?id=87456

        Reviewed by Filip Pizlo.

        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::getOrCreateJSObject): Use the new idioms.

        (WebKit::NPRuntimeObjectMap::invalidate): Check for null while iterating,
        since that's possible now.

        (WebKit::NPRuntimeObjectMap::finalize): Use the new idioms.

2012-05-24  Brady Eidson  <beidson@apple.com>

        Fix the build after http://trac.webkit.org/changeset/118441
        Also fix a glaring bug with the new code, will run it by original reviewer retroactively.

        * UIProcess/cf/WebBackForwardListCF.cpp:
        (WebKit::WebBackForwardList::restoreFromCFDictionaryRepresentation): Fix up the types of the ? operands
          to appease super-strict compilers. Don't allow negative indexes (besides the -1 "No index" index).

2012-05-24  Brady Eidson  <beidson@apple.com>

        <rdar://problem/10090764> and https://bugs.webkit.org/show_bug.cgi?id=87417
        (Unrepro) Crashes saving session state in WebBackForwardList

        Reviewed by Darin Adler.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::addItem): Null check the proposed item and also m_page, to make
          sure the page hasn't been closed making this list inactive. Be more aggressive about
          clearing the current entries out if there is no current item index.
        (WebKit::WebBackForwardList::itemAtIndex): Early null return if there is no current index.
        (WebKit::WebBackForwardList::clear): Don't put the current item back in the array if there was
          no current item.

        * UIProcess/cf/WebBackForwardListCF.cpp:
        (WebKit::WebBackForwardList::createCFDictionaryRepresentation): Don't create a meaningless WebURL.
          Don't successfully return a dictionary if any of the entries were null. Be more aggressive about
          validating the current index we plan to return in the dictionary.
        (WebKit::WebBackForwardList::restoreFromCFDictionaryRepresentation): More aggressively validate the
          current index read from disk. Replace a meaningless sanity check with our typical ASSERT.

2012-05-24  Anders Carlsson  <andersca@apple.com>

        Make sure that the layer hosting mode is up-to-date when reconnecting to a new web process
        https://bugs.webkit.org/show_bug.cgi?id=87421
        <rdar://problem/11510337>

        Reviewed by Beth Dakin.

        Send over the layer hosting mode as part of the web page creation parameters and create the right
        layer hosting context based on the mode.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        (WebPageCreationParameters):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (TiledCoreAnimationDrawingArea):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        (WebKit::TiledCoreAnimationDrawingArea::setLayerHostingMode):
        (WebKit):
        (WebKit::TiledCoreAnimationDrawingArea::updateLayerHostingContext):

2012-05-24  John Mellor  <johnme@chromium.org>

        Font Boosting: Add compile flag and runtime setting
        https://bugs.webkit.org/show_bug.cgi?id=87394

        Reviewed by Adam Barth.

        Add ENABLE_FONT_BOOSTING.

        * Configurations/FeatureDefines.xcconfig:

2012-05-24  Yael Aharon  <yael.aharon@nokia.com>

        [Qt] Stop using the flag FIXED_POSITION_CREATES_STACKING_CONTEXT
        https://bugs.webkit.org/show_bug.cgi?id=87392

        Reviewed by Antonio Gomes.

        Turn on the setting setFixedPositionCreatesStackingContext.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setResizesToContentsUsingLayoutSize):

2012-05-24  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Let the client give local files universal access on a case by case basis
        https://bugs.webkit.org/show_bug.cgi?id=87174
        <rdar://problem/11024330>

        Reviewed by Maciej Stachowiak.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::shouldForceUniversalAccessFromLocalURL):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::shouldForceUniversalAccessFromLocalURL):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/qt/QtBuiltinBundlePage.cpp:
        (WebKit::QtBuiltinBundlePage::QtBuiltinBundlePage):
        Added glue code to call bundle client.

2012-05-24  Alexander Færøy  <alexander.faeroy@nokia.com>

        Reorder arguments to compare() in the QML WebView tests
        https://bugs.webkit.org/show_bug.cgi?id=87374

        Reviewed by Simon Hausmann.

        Based on patch by Kenneth Rohde Christiansen.

        The reordering is necessary to get correct information printed when
        the tests fails. Without this, the test suite will display the bogus
        value and not the expected value.

        This patch also removes the delayed windowShown since this is not
        needed anymore, due to us using the touch events instead of mouse
        events.

        * UIProcess/API/qt/tests/qmltests/WebView/tst_doubleTapToZoom.qml:

2012-05-24  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] Tiles not painted after wheel or keyboard scroll.
        https://bugs.webkit.org/show_bug.cgi?id=87358

        Reviewed by Kenneth Rohde Christiansen.

        After performing a scroll requested from the WebProcess we also need
        to inform the painting layer of the viewport change.

        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::QtViewportInteractionEngine::pagePositionRequest):

2012-05-24  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Fix bounce-back animation on pinch->pan
        https://bugs.webkit.org/show_bug.cgi?id=87266

        Reviewed by Kenneth Rohde Christiansen.

        If ending an out-of-bounds pinch gesture with releasing one finger
        (transition to a pan gesture) the bounce back animation blinks in
        the end position immediately first, then animates the content back
        into bounds.

        QtViewportInteractionEngine::cancelScrollAnimation should return
        early if there is no active kinetic animation.

        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::QtViewportInteractionEngine::cancelScrollAnimation):

2012-05-23  Ojan Vafai  <ojan@chromium.org>

        add back the ability to disable flexbox
        https://bugs.webkit.org/show_bug.cgi?id=87147

        Reviewed by Tony Chang.

        * Configurations/FeatureDefines.xcconfig:

2012-05-23  Jer Noble  <jer.noble@apple.com>

        REGRESSION (117623) - Entering/exiting fullscreen HTML5 videos, there is a quick animated fade
        https://bugs.webkit.org/show_bug.cgi?id=87294

        Reviewed by Darin Adler.

        When setting the sublayers array on the layer hosting view, wrap the call in a CATransaction which disables
        animations.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _updateAcceleratedCompositingMode:WebKit::]):

2012-05-23  Dinu Jacob  <dinu.jacob@nokia.com>

        [Qt][Wk2] Assertion failure when selecting an option in select list with size attribute greater than one
        https://bugs.webkit.org/show_bug.cgi?id=86974

        Reviewed by Simon Hausmann.

        Select list with size attribute greater than one will not initially have any
        item in selected state (if no option has 'selected' tag), resulting in
        m_selectedModelIndex in WebPopupMenuProxyQt to be invalid. Hence, need to check
        whether the old index is invalid before accessing the item at that index.

        * UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_itemSelector.qml: Added new test that
          tests selection in a select list with size attribute value of 2.
        * UIProcess/API/qt/tests/qmltests/common/selectwithsize.html: Added.
        * UIProcess/qt/WebPopupMenuProxyQt.cpp:
        (WebKit::PopupMenuItemModel::select): Check whether old index is valid before accessing
          the item at that index.

2012-05-23  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r116188): After exiting full screen, Safari window is frozen, then inline video speeds through frames as it catches up with audio
        https://bugs.webkit.org/show_bug.cgi?id=87206

        Reviewed by Darin Adler.

        When re-enabling the Safari window's autodisplay flag, also force the window to re-display.
        Otherwise, the window will not repaint itself until it is forced to by user interaction.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController completeFinishExitFullScreenAnimationAfterRepaint]):

2012-05-23  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [WebKit2] Add an API to enable and disable composited layer indicators
        https://bugs.webkit.org/show_bug.cgi?id=87053

        Reviewed by Carlos Garcia Campos.

        Add a WebKitSetting that allows the client to enable and disable debug
        borders and repaint counters for accelerated content.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webKitSettingsSetProperty): Added.
        (webKitSettingsGetProperty): Added.
        (webkit_settings_class_init): Add the new property.
        (webkit_settings_set_draw_compositing_indicators): Added.
        (webkit_settings_get_draw_compositing_indicators): Added.
        * UIProcess/API/gtk/WebKitSettings.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add the new API points to the
        documentation.
        * UIProcess/API/gtk/test/TestWebKitSettings.h: Add a new unit test.

2012-05-23  Michael Brüning  <michael.bruning@nokia.com>

        [Qt][WK2] Small refactoring WebPage::confirmComposition.
        https://bugs.webkit.org/show_bug.cgi?id=87243

        Reviewed by Kenneth Rohde Christiansen.

        Change nested if into an early return to reduce complexity.

        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (WebKit::WebPage::confirmComposition):

2012-05-22  Alexander Færøy  <alexander.faeroy@nokia.com>

        [Qt] Missing tests for the evaluateJavaScript API
        https://bugs.webkit.org/show_bug.cgi?id=86351

        Reviewed by Kenneth Rohde Christiansen.

        * UIProcess/API/qt/tests/qmltests/WebView/tst_evaluateJavaScript.qml:
        * UIProcess/API/qt/tests/qmltests/common/evaluatejavascript.html: Added.

2012-05-23  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] FloatSize Qt Support
        https://bugs.webkit.org/show_bug.cgi?id=87237

        Reviewed by Andreas Kling.

        Basic cleanup possible to new Qt support in FloatSize.

        * UIProcess/API/qt/qquickwebpage.cpp:
        (QQuickWebPagePrivate::updateSize):
        * UIProcess/API/qt/qwebkittest.cpp:
        (QWebKitTest::layoutSize):

2012-04-18  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make the web view's url property follow the active url

        https://bugs.webkit.org/show_bug.cgi?id=77554

        The url property of the webview now reflects the 'active' url of the
        page, which maps to either the currently loading url, in the case of
        an ongoing load, or the result of a load, even when the load failed.

        In practice this means that setting the url though QML, or navigating
        to a new url in the page by e.g clicking, will both instantly change
        the url-property of the webview to the target url. This differs from
        earlier behavior, where we would update the url when the load
        committed.

        An optional argument is added to loadHtml(), to allow setting
        the unreachable url when providing replacement content for failed
        loads.

        Finally, the location bar in the minibrowser is updated to behave
        a bit more like normal browsers in terms of when the url will change
        and how active focus is handled.

        Reviewed by Simon Hausmann.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::onComponentComplete):
        (QQuickWebView::reload):
        (QQuickWebView::url):
        (QQuickWebView::setUrl):
        (QQuickWebView::loadHtml):
        * UIProcess/API/qt/qquickwebview_p.h:
        * UIProcess/API/qt/tests/qmltests/DesktopBehavior.pro:
        * UIProcess/API/qt/tests/qmltests/WebView.pro:
        * UIProcess/API/qt/tests/qmltests/WebView/tst_loadUrl.qml:
        * UIProcess/API/qt/tests/qmltests/common/link.html: Added.
        * UIProcess/API/qt/tests/qmltests/common/redirect.html: Added.
        * UIProcess/qt/QtWebPageLoadClient.cpp:
        (QtWebPageLoadClient::QtWebPageLoadClient):
        (QtWebPageLoadClient::didStartProvisionalLoadForFrame):
        (QtWebPageLoadClient::didReceiveServerRedirectForProvisionalLoadForFrame):
        (QtWebPageLoadClient::didCommitLoadForFrame):
        (QtWebPageLoadClient::dispatchLoadFailed):
        (QtWebPageLoadClient::didFailProvisionalLoadWithErrorForFrame):
        (QtWebPageLoadClient::didFailLoadWithErrorForFrame):
        * UIProcess/qt/QtWebPageLoadClient.h:
        (QtWebPageLoadClient):

2012-05-23  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Race condition in LayerTreeHost/Proxy can cause blank rendering
        https://bugs.webkit.org/show_bug.cgi?id=87239

        Reviewed by Kenneth Rohde Christiansen.

        On the UI process side the WebLayerTreeRenderer/LayerTreeHostProxy pair is
        created with m_active = false, which makes it ignore any incoming layer updates.
        It remains inactive until the ContentsSGNode is created and setActive(true) is called.

        On the web process side the LayerTreeHost is created with m_waitingForUIProcess = false.

        Those two variables must be in sync, otherwise a race condition can
        happen: The web process sends updates to the ui process before the
        ContentsSGNode is created. This can happen for example when re-using an
        existing WebProcess to create a QQuickWebView and load a page very fast
        from the disk cache. The update arrives on the ui process side, but it
        is discarded because setActive(true) hasn't been called yet. As a
        result any updates that would for example create and populate the tiles
        required for rendering are ignored.

        This patch ensures that the variables are initialized with the same values and that calling
        setActive(true) will trigger the rendering of the next frame.

        * UIProcess/WebLayerTreeRenderer.cpp:
        (WebKit::WebLayerTreeRenderer::setActive):
        * WebProcess/WebPage/qt/LayerTreeHostQt.cpp:
        (WebKit::LayerTreeHostQt::LayerTreeHostQt):

2012-05-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make QtWebError return the failing URL as a QString instead of QUrl

        We don't want to use QUrl inside QtWebKit (only in the API layer), due
        to how QUrl normalizes the url.

        Reviewed by Simon Hausmann.

        * UIProcess/qt/QtWebError.cpp:
        (WebKit::QtWebError::url):
        * UIProcess/qt/QtWebError.h:

2012-05-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add inspector API to WebKit2 GTK+
        https://bugs.webkit.org/show_bug.cgi?id=87113

        Reviewed by Martin Robinson.

        * GNUmakefile.list.am: Add new files to compilation.
        * UIProcess/API/C/gtk/WKInspectorClientGtk.cpp: Added.
        (WKInspectorSetInspectorClientGtk):
        * UIProcess/API/C/gtk/WKInspectorClientGtk.h: Added.
        * UIProcess/API/gtk/WebKitPrivate.h:
        * UIProcess/API/gtk/WebKitWebInspector.cpp: Added.
        (webkitWebInspectorFinalize):
        (webkit_web_inspector_init):
        (webkit_web_inspector_class_init):
        (openWindow): Emit WebKitWebInspector::open-window singal.
        (didClose): Emit WebKitWebInspector::closed signal.
        (bringToFront): Emit WebKitWebInspector::bring-to-front singal.
        (inspectedURLChanged): Set the inspected URI and emit
        GObject::notify signal if it changed.
        (attach): Emit WebKitWebInspector::attach signal.
        (detach): Emit WebKitWebInspector::detach signal.
        (didChangeAttachedHeight): Set the attached height and emit
        GObject::notify signal if it changed.
        (webkitWebInspectorCreate): Ceate a new WebKitWebInspector object
        for the given WKInspector. Also initialize and set the inspector
        client.
        (webkit_web_inspector_get_web_view): Return the web view used to
        render the inspector.
        (webkit_web_inspector_get_inspected_uri): Return the URI that is
        being inspected.
        (webkit_web_inspector_is_attached): Whether the inspector view is
        currently attached.
        (webkit_web_inspector_attach): Request to attach the inspector.
        (webkit_web_inspector_detach): Request to detach the inspector.
        (webkit_web_inspector_show): Request to show the inspector.
        (webkit_web_inspector_close): Request to close the inspector.
        (webkit_web_inspector_get_attached_height): Return the height that
        the inspector view should have when attached.
        * UIProcess/API/gtk/WebKitWebInspector.h: Added.
        * UIProcess/API/gtk/WebKitWebInspectorPrivate.h: Added.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_get_inspector): Return the WebKitWebInspector
        associated to the web view.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add new section for
        WebKitWebInspector.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Ad new symbols.
        * UIProcess/API/gtk/docs/webkit2gtk.types: Add
        webkit_web_inspector_get_type.
        * UIProcess/API/gtk/tests/GNUmakefile.am: Add new test for the
        inspector API.
        * UIProcess/API/gtk/tests/TestInspector.cpp: Added.
        (testInspectorDefault):
        (testInspectorCustom):
        (testInspectorWindowDestroyed):
        (beforeAll):
        (afterAll):
        * UIProcess/API/gtk/tests/WebViewTest.cpp:
        (WebViewTest::showInWindowAndWaitUntilMapped): Add optional
        parameter to create a toplevel or popup window.
        (WebViewTest::resizeView): Helper function to set the widget
        allocation to a given size.
        * UIProcess/API/gtk/tests/WebViewTest.h:
        * UIProcess/API/gtk/webkit2.h: Include WebKitWebInspector.h
        * UIProcess/WebInspectorProxy.h:
        (WebKit::WebInspectorProxy::inspectorView): Return the view used
        to render the inspector.
        * UIProcess/gtk/WebInspectorClientGtk.cpp: Added.
        (WebKit::WebInspectorClientGtk::openWindow):
        (WebKit::WebInspectorClientGtk::didClose):
        (WebKit::WebInspectorClientGtk::bringToFront):
        (WebKit::WebInspectorClientGtk::inspectedURLChanged):
        (WebKit::WebInspectorClientGtk::attach):
        (WebKit::WebInspectorClientGtk::detach):
        (WebKit::WebInspectorClientGtk::didChangeAttachedHeight):
        * UIProcess/gtk/WebInspectorClientGtk.h: Added.
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::inspectorViewDestroyed): Close the inspector page when
        the inspector view is destroyed, instead of when the inspector
        window is deleted, because the inspector view can now be inside a
        window created by the user.
        (WebKit::WebInspectorProxy::initializeInspectorClientGtk):
        Initialze the inspector client.
        (WebKit::WebInspectorProxy::platformCreateInspectorPage): Add a
        weak pointer to the inspector view to make sure it's NULL when
        destroyed.
        (WebKit::WebInspectorProxy::createInspectorWindow): Call
        openWindow on the inspector client, and return early if the
        callback was handled.
        (WebKit::WebInspectorProxy::platformOpen): Connect to destroy
        signal of the inspector view to close the page when the view is
        destroyed.
        (WebKit::WebInspectorProxy::platformDidClose): Call didClose on
        the inspector client.
        (WebKit::WebInspectorProxy::platformBringToFront): Call
        bringToFront on the inspector client, and return early if the
        callback was handled.
        (WebKit::WebInspectorProxy::platformInspectedURLChanged): Call
        inspectedURLChanged on the inspector client.
        (WebKit::WebInspectorProxy::platformAttach): Call attach on the
        inspector client and return if the callback was handled.
        (WebKit::WebInspectorProxy::platformDetach): Call detach on the
        inspector client and return if the callback was handled.
        (WebKit::WebInspectorProxy::platformSetAttachedWindowHeight): Call
        didChangeAttachedHeight on the inspector client.

2012-05-22  Anders Carlsson  <andersca@apple.com>

        Functions dispatched by dispatchAfterEnsuringUpdatedScrollPosition can be called after drawing area has been destroyed
        https://bugs.webkit.org/show_bug.cgi?id=87173
        <rdar://problem/11474087>

        Reviewed by Beth Dakin.

        Don't try to call forceRepaint if the drawing area has already been destroyed.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::forceRepaintAsync):

2012-05-22  Anders Carlsson  <andersca@apple.com>

        Crash when a plug-in view outlives its containing WebPage
        https://bugs.webkit.org/show_bug.cgi?id=87163
        <rdar://problem/10849258>

        Reviewed by Dan Bernstein.

        In rare cases, when a plug-in is kept alive for some reason it can outlive its WebPage. When that happens,
        the PluginView destructor will try to access the (deleted) web page and we'll crash.

        Fix this by making the WebPage destructor iterate over all the registered plug-ins and null out the m_webPage pointer.
        Don't try to access the WebPage object if it's null.

        Also, remove PLATFORM(MAC) ifdefs around the HashSet of known plug-in views as well as the member functions that access the set;
        we want this to be cross platform now.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::PluginView):
        (WebKit::PluginView::~PluginView):
        (WebKit::PluginView::webPageDestroyed):
        (WebKit):
        * WebProcess/Plugins/PluginView.h:
        (PluginView):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::~WebPage):
        (WebKit::WebPage::scalePage):
        (WebKit):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):

== Rolled over to ChangeLog-2012-05-22 ==
