2011-11-17  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] Expose setUseTraditionalDesktopBehaviour() in QML experimental API
        https://bugs.webkit.org/show_bug.cgi?id=72610

        Reviewed by Kenneth Rohde Christiansen.

        * UIProcess/API/qt/qquickwebview_p.h:

2011-11-17  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Print warning for the Qt port when a process crashes and is relaunched
        https://bugs.webkit.org/show_bug.cgi?id=72607

        Reviewed by Antonio Gomes.

        Make the QtViewInterface::processDidCrash take a URL string argument,
        for being able to say which url was the origin of the crash.

        We now additionally store the load state and url at process exit. This
        is needed for printing the warning and for further crash handling.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::processDidCrash):
        * UIProcess/qt/QtViewInterface.cpp:
        (WebKit::QtViewInterface::processDidCrash):
        (WebKit::QtViewInterface::didRelaunchProcess):
        * UIProcess/qt/QtViewInterface.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::processDidCrash):
        * UIProcess/qt/QtWebPageProxy.h:

2011-11-17  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt][WK2] Cleanup dead code in QtWebPageProxy.
        https://bugs.webkit.org/show_bug.cgi?id=72608

        Reviewed by Simon Hausmann.

        Remove some dead code after we merged our views.
        QQuickWebView is now using AC which means that this
        path is never called now.

        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::didReceiveDownloadResponse):
        * UIProcess/qt/QtWebPageProxy.h:

2011-11-17  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Remove forwarding header for WebKit2 C API

        The Qt port of WebKit does not provide a C-API for the View classes.

        Reviewed by Simon Hausmann.

        * UIProcess/API/C/WebKit2.h:
        * UIProcess/API/qt/WKView.h: Removed.

2011-11-17  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Resolve import and web-process paths automatically for QML tests

        Reviewed by Kenneth Rohde Christiansen.

        * UIProcess/API/qt/tests/qmltests/qmltests.pro:
        * UIProcess/API/qt/tests/qmltests/tst_qmltests.cpp:
        (main):

2011-11-17  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Move WebKit2 C++ APIs to private API and build QML extension plugin on top of that

        A new extension object has been added to QQuickWebView (the same approach should be used
        for other API classes that need experimental APIs). The QML extension mechanism is then
        built on top of the experimental object.

        https://bugs.webkit.org/show_bug.cgi?id=72522

        Reviewed by Simon Hausmann.

        * Target.pri:
        * UIProcess/API/qt/qquickwebpage.cpp:
        * UIProcess/API/qt/qquickwebpage.h: Removed.
        * UIProcess/API/qt/qquickwebpage_p.h:
        * UIProcess/API/qt/qquickwebpage_p_p.h: Renamed from Source/WebKit2/UIProcess/API/qt/qquickwebviewprivateextension_p.h.
        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewExperimental::QQuickWebViewExperimental):
        (QQuickWebViewExperimental::~QQuickWebViewExperimental):
        (QQuickWebViewExperimental::setUseTraditionalDesktopBehaviour):
        (QQuickWebView::QQuickWebView):
        (QQuickWebView::experimental):
        * UIProcess/API/qt/qquickwebview.h: Removed.
        * UIProcess/API/qt/qquickwebview_p.h:
        * UIProcess/API/qt/qquickwebview_p_p.h: Copied from Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h.
        * UIProcess/API/qt/qquickwebviewprivateextension.cpp: Removed.
        * UIProcess/API/qt/qwebdownloaditem.cpp:
        * UIProcess/API/qt/qwebdownloaditem.h: Removed.
        * UIProcess/API/qt/qwebdownloaditem_p.h:
        * UIProcess/API/qt/qwebdownloaditem_p_p.h: Copied from Source/WebKit2/UIProcess/API/qt/qwebdownloaditem_p.h.
        (QWebDownloadItemPrivate::didReceiveResponse):
        * UIProcess/API/qt/qwebpreferences.cpp:
        * UIProcess/API/qt/qwebpreferences.h: Removed.
        * UIProcess/API/qt/qwebpreferences_p.h:
        * UIProcess/API/qt/tests/qmltests/qmltests.pro:
        * UIProcess/API/qt/tests/qmltests/tst_qmltests.cpp:
        (DesktopWebView::DesktopWebView):
        * UIProcess/API/qt/tests/qquickwebview/qquickwebview.pro:
        * UIProcess/API/qt/tests/qquickwebview/tst_qquickwebview.cpp:
        * UIProcess/qt/QtDownloadManager.cpp:
        * UIProcess/qt/QtViewInterface.cpp:
        * UIProcess/qt/QtWebError.h:
        * UIProcess/qt/QtWebPageProxy.cpp:

2011-11-17  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed build fix.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):

2011-11-16  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Make use-fixed-layout work reliable
        https://bugs.webkit.org/show_bug.cgi?id=72511

        Reviewed by Simon Hausmann.

        The code handling use-fixed-layout wasn't 100% reliable. The code
        was changed to make sure the value is always correct.

        It also doesn't set the value by looking at the previous FrameView,
        as that wouldn't work in cases, such as when the web process has
        crashed.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::setResizesToContentsUsingLayoutSize):
        (WebKit::WebPage::setUseFixedLayout):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::useFixedLayout):

            Store the state as m_useFixedLayout so that it can be used
            from the WebFrameLoaderClient.

2011-11-17  Zalan Bujtas  <zbujtas@gmail.com>

        [Qt][WK2] Do not apply new viewport properties until after the first visually non-empty layout.
        https://bugs.webkit.org/show_bug.cgi?id=72508

        Delay applying viewport properties on the viewport item until after the first visually non-empty
        layout finished. It enables the viewport to be intact until the new page is ready to be rendered.

        Reviewed by Kenneth Rohde Christiansen.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::QQuickWebViewPrivate):
        (QQuickWebViewPrivate::loadDidCommit):
        (QQuickWebViewPrivate::didFinishFirstNonEmptyLayout):
        (QQuickWebViewPrivate::didChangeContentsSize):
        (QQuickWebViewPrivate::didChangeViewportProperties):
        (QQuickWebViewPrivate::updateViewportSize):
        (QQuickWebViewPrivate::computeViewportConstraints):
        * UIProcess/API/qt/qquickwebview_p.h:
        (PostTransitionState::isTransitioningToNewPage):
        * UIProcess/qt/ClientImpl.cpp:
        (qt_wk_didFirstVisuallyNonEmptyLayoutForFrame):
        (setupPageLoaderClient):
        * UIProcess/qt/QtViewInterface.cpp:
        (WebKit::QtViewInterface::didFinishFirstNonEmptyLayout):
        (WebKit::QtViewInterface::didChangeContentsSize):
        (WebKit::QtViewInterface::didChangeViewportProperties):
        (WebKit::QtViewInterface::startDrag):
        * UIProcess/qt/QtViewInterface.h:
        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::QtViewportInteractionEngine::reset):
        (WebKit::QtViewportInteractionEngine::applyConstraints):
        * UIProcess/qt/QtViewportInteractionEngine.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::didFinishFirstNonEmptyLayout):
        (QtWebPageProxy::didChangeContentsSize):
        (QtWebPageProxy::didChangeViewportProperties):
        (QtWebPageProxy::startDrag):
        * UIProcess/qt/QtWebPageProxy.h:

2011-11-17  Eunmi Lee  <eunmi15.lee@samsung.com>

        Reviewed by Martin Robinson.

        [WK2] Move gtk/BackingStoreGtk.cpp to cairo/BackingStoreCairo.cpp to share with EFL port.
        https://bugs.webkit.org/show_bug.cgi?id=62444

        Rename gtk/BackingStoreGtk.cpp to cairo/BackingStoreCairo.cpp to share with EFL port.
        The gtk/BackingStoreGtk.cpp only has cairo dependency, so it can be shared with other port
        that uses cairo.

        * GNUmakefile.am:
        * UIProcess/BackingStore.h:
        * UIProcess/cairo/BackingStoreCairo.cpp: Renamed from Source/WebKit2/UIProcess/gtk/BackingStoreGtk.cpp.
        (WebKit::BackingStore::paint):
        (WebKit::BackingStore::incorporateUpdate):
        (WebKit::BackingStore::scroll):

2011-11-17  Nayan Kumar K  <nayankk@motorola.com>

        [WebKit2][gtk] Add few more properties to WebKitSettings
        https://bugs.webkit.org/show_bug.cgi?id=72468

        Reviewed by Martin Robinson.

        Add 'enable-private-browsing', 'enable-developer-extras, 'enable-resizable-text-areas'
        and 'enable-tabs-to-links' properties to WebKitSettings.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webKitSettingsSetProperty): Add new set functions.
        (webKitSettingsGetProperty): Add new get functions.
        (webkit_settings_class_init): Add new properties.
        (webkit_settings_get_enable_private_browsing): Get 'enable-private-browsing' property.
        (webkit_settings_set_enable_private_browsing): Set 'enable-private-browsing' property.
        (webkit_settings_get_enable_developer_extras): Get 'enable-developer-extras' property.
        (webkit_settings_set_enable_developer_extras): Set 'enable-developer-extras' property.
        (webkit_settings_get_enable_resizable_text_areas): Get 'enable-resizable-text-areas' property.
        (webkit_settings_set_enable_resizable_text_areas): Set 'enable-resizable-text-areas' property.
        (webkit_settings_get_enable_tabs_to_links): Get 'enable-tabs-to-links' property.
        (webkit_settings_set_enable_tabs_to_links): Set 'enable-tabs-to-links' property.
        * UIProcess/API/gtk/WebKitSettings.h: New public APIs added.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: New APIs added.
        * UIProcess/API/gtk/tests/TestWebKitSettings.cpp:
        (testWebKitSettings): Add new tests.

2011-11-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebKit2 GTK+ build after r100569.

        * WebProcess/Downloads/soup/DownloadSoup.cpp:
        (WebKit::DownloadClient::didReceiveResponse):

2011-11-17  Nayan Kumar K  <nayankk@motorola.com>

        [WebKit2][gtk] Fix assert while running TestWebKitSettings
        https://bugs.webkit.org/show_bug.cgi?id=72469

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/tests/TestWebKitSettings.cpp:
        (testWebKitSettings): Correct the test.

2011-11-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use a URI instead of local path to create download destination in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=72500

        Reviewed by Philippe Normand.

        * WebProcess/Downloads/soup/DownloadSoup.cpp:
        (WebKit::DownloadClient::didReceiveResponse): Use
        g_file_new_for_uri() instad of g_file_new_for_path(). Also use
        adoptGRef to fix a memory leak.

2011-11-16  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] Fix build after WTR AX support
        https://bugs.webkit.org/show_bug.cgi?id=72560

        Reviewed by Geoffrey Garen.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKAccessibilityRootObject):
        (WKAccessibilityFocusedObject):

2011-11-11  Adrienne Walker  <enne@google.com>

        [chromium] Expose mock scrollbars to window.internals
        https://bugs.webkit.org/show_bug.cgi?id=72195

        Reviewed by James Robinson.

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

2011-11-16  Dan Bernstein  <mitz@apple.com>

        WebKit2 part of <rdar://problem/10262242> Add API for paginated display
        https://bugs.webkit.org/show_bug.cgi?id=72537

        Reviewed by Anders Carlsson.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode): Encode the pagination mode and gap between pages.
        (WebKit::WebPageCreationParameters::decode): Decode the pagination mode and gap between pages.
        * Shared/WebPageCreationParameters.h: Added paginationMode and gapBetweenPages members.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPaginationMode): Added this API wrapper.
        (WKPageGetPaginationMode): Ditto.
        (WKPageSetGapBetweenPages): Ditto.
        (WKPageGetGapBetweenPages): Ditto.
        (WKPageGetPageCount): Ditto.
        * UIProcess/API/C/WKPagePrivate.h: Added an enum and a definition of WKPaginationMode and
        accessors.
        * UIProcess/API/mac/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController setPaginationMode:]): Added this API wrapper.
        (-[WKBrowsingContextController paginationMode]): Ditto.
        (-[WKBrowsingContextController setGapBetweenPages:]): Ditto.
        (-[WKBrowsingContextController gapBetweenPages]): Ditto.
        (-[WKBrowsingContextController pageCount]): Ditto.
        * UIProcess/API/mac/WKBrowsingContextControllerPrivate.h: Added. Includes an enum and a definition
        of WKBrowsingContextPaginationMode and property declarations.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Added intialization of m_paginationMode, m_gapBetweenPages,
        and m_pageCount.
        (WebKit::WebPageProxy::setPaginationMode): Added this accessor, which caches the value and sends
        a message to the WebPage.
        (WebKit::WebPageProxy::setGapBetweenPages): Ditto.
        (WebKit::WebPageProxy::creationParameters): Set the pagination mode and gap between pages in the
        creation parameters.
        (WebKit::WebPageProxy::didChangePageCount): Added. Updates the cached page count.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::paginationMode): Added this getter that returns a cached value.
        (WebKit::WebPageProxy::gapBetweenPages): Ditto.
        (WebKit::WebPageProxy::pageCount): Ditto.
        * UIProcess/WebPageProxy.messages.in: Added DidChangedPageCount, sent when the page count changes
        after layout.
        * WebKit2.xcodeproj/project.pbxproj: Added WKBrowsingContextControllerPrivate.h.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: 
        (WebKit::WebFrameLoaderClient::dispatchDidLayout): Added a call to WebPage::mainFrameDidLayout(),
        allowing the page to respond to changes in the column count.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Added initializer for m_cachedPageCount.
        (WebKit::WebPage::setPaginationMode): Added.
        (WebKit::WebPage::setGapBetweenPages): Added.
        (WebKit::WebPage::mainFrameDidLayout): Added. Sends a DidChangePageCount message to the UI process
        if the page count has changed.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Added SetPaginationMode and SetGapBetweenPages messages.

2011-11-16  Chris Fleizach  <cfleizach@apple.com>

        WebKitTestRunner needs to support accessibility-related DRT APIs
        https://bugs.webkit.org/show_bug.cgi?id=42131

        Allow the injected bundle to retrieve the focused and root accessibility
        objects.

        Reviewed by Beth Dakin.

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

2011-11-16  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=72400
        Scrollbar uiStateTransitionProgress requires tracking the mouse all the time
        -and corresponding-
        <rdar://problem/10409328>

        Reviewed by Darin Adler.

        Set up our initial tracking area based on the currently recommended scrollbar 
        style. Track the mouse all the time if the style is legacy.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:contextRef:pageGroupRef:]):

        Now that we might be getting mouseMoved events all the time even when the window 
        is not key, make sure we opt into the new 'onlyUpdateScrollbars' mode for 
        EventHandler::mouseMoved() when the window is not focused.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::handleMouseEvent):
        (WebKit::WebPage::mouseEvent):
        (WebKit::WebPage::mouseEventSyncForTesting):

2011-11-16  Martin Robinson  <mrobinson@igalia.com>

        [GTK][WEBKIT2] Link error running gtkdoc-scangobj
        https://bugs.webkit.org/show_bug.cgi?id=72365

        Reviewed by Xan Lopez.

        * webkit2gtk.pc.in: Add a libjavascriptcore requirement to the WebKit2 pkgconfig
        file so that the compiler links to it.

2011-11-16  Balazs Kelemen  <kbalazs@webkit.org>

        [WK2][X11] Don't leak the colormap we created for the plugin
        https://bugs.webkit.org/show_bug.cgi?id=72144

        Reviewed by Xan Lopez.

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePlugin::platformDestroy):

2011-11-16  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        [Qt] [WK2] Crash in Connection::readyReadHandler() on socket error
        https://bugs.webkit.org/show_bug.cgi?id=72392

        Reviewed by Simon Hausmann.

        Add QWeakPointer to SocketNotifierResourceGuard::m_socketNotifier to track
        deallocation of referenced object.

        * Platform/CoreIPC/unix/ConnectionUnix.cpp:
        (CoreIPC::SocketNotifierResourceGuard::SocketNotifierResourceGuard):
        (CoreIPC::SocketNotifierResourceGuard::~SocketNotifierResourceGuard):

2011-11-16  Zeno Albisser  <zeno@webkit.org>

        [Qt][WK2][Mac] MiniBrowser cannot create socketpair.
        https://bugs.webkit.org/show_bug.cgi?id=72389

        Use SOCK_DGRAM on mac instead of SOCK_SEQPACKET.

        Reviewed by Tor Arne Vestbø.

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:

2011-11-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add webkit_web_view_load_request() to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=72380

        Reviewed by Martin Robinson.

        It adds an initial implementation of WebKitNetworkRequest
        class that only contains a URI for now.

        * GNUmakefile.am:
        * UIProcess/API/gtk/WebKitNetworkRequest.cpp: Added.
        (webkitNetworkRequestFinalize):
        (webkitNetworkRequestGetProperty):
        (webkitNetworkRequestSetProperty):
        (webkit_network_request_class_init):
        (webkit_network_request_init):
        (webkit_network_request_new):
        (webkit_network_request_get_uri):
        * UIProcess/API/gtk/WebKitNetworkRequest.h: Added.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_load_request): Use WKPageLoadURLRequest() to load
        the given WebKitNetworkRequest.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.
        * UIProcess/API/gtk/tests/TestWebKitWebLoaderClient.cpp:
        (testLoadRequest):
        (beforeAll):
        * UIProcess/API/gtk/tests/WebViewTest.cpp:
        (WebViewTest::loadRequest):
        * UIProcess/API/gtk/tests/WebViewTest.h:
        * UIProcess/API/gtk/webkit2.h:

2011-11-15  Andy Estes  <aestes@apple.com>

        Consolidate the logic that creates run loop observers for flushing layer tree changes to CoreAnimation
        https://bugs.webkit.org/show_bug.cgi?id=72106

        Reviewed by Anders Carlsson.

        Remove code that schedules layer flushes and use LayerFlushScheduler instead.

        * WebProcess/WebPage/ca/mac/LayerTreeHostCAMac.h: Replace
        m_flushPendingLayerChangesRunLoopObserver with m_layerFlushScheduler
        and implement the LayerFlushSchedulerClient interface.
        * WebProcess/WebPage/ca/mac/LayerTreeHostCAMac.mm:
        (WebKit::LayerTreeHostCAMac::LayerTreeHostCAMac): Instantiate
        m_layerFlushScheduler with the LayerTreeHost as the client.
        (WebKit::LayerTreeHostCAMac::~LayerTreeHostCAMac):
        (WebKit::LayerTreeHostCAMac::scheduleLayerFlush): Call LayerFlushScheduler::schedule().
        (WebKit::LayerTreeHostCAMac::setLayerFlushSchedulingEnabled): Call
        LayerFlushScheduler::suspend() or LayerFlushScheduler::resume().
        (WebKit::LayerTreeHostCAMac::invalidate): Call LayerFlushScheduler::invalidate().
        (WebKit::LayerTreeHostCAMac::flushLayers): Do the work that
        flushPendingLayerChangesRunLoopObserverCallback() used to do.
        (WebKit::LayerTreeHostCAMac::didPerformScheduledLayerFlush): Call LayerFlushScheduler::invalidate().

2011-11-15  Sam Weinig  <sam@webkit.org>

        Add a connection client to the WKContext, to notify when new connections to the WebProcess are established
        https://bugs.webkit.org/show_bug.cgi?id=72433

        Reviewed by Anders Carlsson.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetConnectionClient):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::initializeConnectionClient):
        * UIProcess/WebContext.h:
        Add connection client API.

        * UIProcess/WebContextConnectionClient.cpp: Added.
        (WebKit::WebContextConnectionClient::didCreateConnection):
        * UIProcess/WebContextConnectionClient.h: Added.
        Add basic implementation of the client. It is currently never triggered.

2011-11-15  Jongseok Yang  <js45.yang@samsung.com>

        [SOUP][WK2] Add initial WebCookieManagerSoup.cpp for webkit2
        https://bugs.webkit.org/show_bug.cgi?id=72235

        Reviewed by Gustavo Noronha Silva.

        Add WebCookieManagerSoup.cpp and implement functions for the cookie accept policy.
        It's required when using the soup network backend.
        Remove WebCookieManagerEfl.cpp and WebCookieManagerGtk.cpp because GTK port and
        EFL port use soup network backend without a network backend of their own.

        * GNUmakefile.am:
        * WebProcess/Cookies/efl/WebCookieManagerEfl.cpp: Removed.
        * WebProcess/Cookies/gtk/WebCookieManagerGtk.cpp: Removed.
        * WebProcess/Cookies/soup/WebCookieManagerSoup.cpp: Added.
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManager::platformGetHTTPCookieAcceptPolicy):

2011-11-15  Jochen Eisinger  <jochen@chromium.org>

        Rename ReferrerPolicy to clarify its meaning
        https://bugs.webkit.org/show_bug.cgi?id=72420

        Reviewed by Nate Chapin.

        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::searchWithGoogle):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::linkClicked):

2011-11-15  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * win/WebKit2Generated.make:

2011-11-15  Sam Weinig  <sam@webkit.org>

        Add WebKit2 API object to represent a connection
        https://bugs.webkit.org/show_bug.cgi?id=72421

        Reviewed by Anders Carlsson.

        * GNUmakefile.am:
        * Target.pri:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Add new files.

        * Shared/API/c/WKBase.h:
        Add type.

        * Shared/API/c/WKConnectionRef.cpp: Added.
        (WKConnectionGetTypeID):
        (WKConnectionSetConnectionClient):
        (WKConnectionPostMessage):
        * Shared/API/c/WKConnectionRef.h: Added.
        Expose interface. Currently no support for synchronous messages.

        * Shared/API/c/WKSharedAPICast.h:
        Define relationship between WebConnection <-> WKConnectionRef.

        * Shared/APIObject.h:
        Add API type.

        * Shared/WebConnection.cpp: Added.
        (WebKit::WebConnection::~WebConnection):
        (WebKit::WebConnection::initializeConnectionClient):
        * Shared/WebConnection.h: Added.
        (WebKit::WebConnection::type):
        Sketch out the connection object. It is currently abstract
        to allow different implementations for the UI and WebProcess sides
        while retaining the same interface.

        * Shared/WebConnectionClient.cpp: Added.
        (WebKit::WebConnectionClient::didReceiveMessage):
        (WebKit::WebConnectionClient::didClose):
        * Shared/WebConnectionClient.h: Added.
        Add simple client.

        * UIProcess/API/C/WebKit2.h:
        Add new file.

2011-11-15  Chris Fleizach2  <cfleizach@apple.com>

        AX: WKAccessibilityWebObjectPage should not call super in accessibilityAttributeValue:
        https://bugs.webkit.org/show_bug.cgi?id=72344

        Reviewed by Beth Dakin.

        * WebProcess/WebPage/mac/WKAccessibilityWebPageObject.mm:
        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:]):

2011-11-15  Anders Carlsson  <andersca@apple.com>

        HostWindow screenToWindow/windowToScreen should be screenToRootView/rootViewToScreen
        https://bugs.webkit.org/show_bug.cgi?id=72397

        Reviewed by Dan Bernstein.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::screenToRootView):
        (WebKit::WebChromeClient::rootViewToScreen):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2011-11-14  Anders Carlsson  <andersca@apple.com>

        HostWindow invalidation functions should use root view coordinates
        https://bugs.webkit.org/show_bug.cgi?id=72338

        Reviewed by Dan Bernstein.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::invalidateRootView):
        (WebKit::WebChromeClient::invalidateContentsAndRootView):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2011-11-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement download support in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=72258

        Reviewed by Martin Robinson.

        * WebProcess/Downloads/Download.h:
        * WebProcess/Downloads/soup/DownloadSoup.cpp:
        (WebKit::DownloadClient::DownloadClient):
        (WebKit::DownloadClient::downloadFailed):
        (WebKit::DownloadClient::didReceiveResponse):
        (WebKit::DownloadClient::didReceiveData):
        (WebKit::DownloadClient::didFinishLoading):
        (WebKit::DownloadClient::didFail):
        (WebKit::DownloadClient::wasBlocked):
        (WebKit::DownloadClient::cannotShowURL):
        (WebKit::Download::start):
        (WebKit::Download::startWithHandle):
        (WebKit::Download::cancel):
        (WebKit::Download::platformInvalidate):

2011-11-15  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK][WEBKIT2] Add enable-caret-browsing property to WebKitSettings
        https://bugs.webkit.org/show_bug.cgi?id=72267

        Reviewed by Martin Robinson.

        Allow getting and setting the 'enable-caret-browsing' property
        through WebKitSettings.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webKitSettingsSetProperty): Added property setter.
        (webKitSettingsGetProperty): Added propery getter.
        (webkit_settings_class_init): Install property.
        (webkit_settings_get_enable_caret_browsing): Added.
        (webkit_settings_set_enable_caret_browsing): Added.
        * UIProcess/API/gtk/WebKitSettings.h: Expose new public APIs.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new sections for gtk-doc generation.
        * UIProcess/API/gtk/tests/TestWebKitSettings.cpp:
        (testWebKitSettings): Added new API test.

2011-11-14  Julien Chaffraix  <jchaffraix@webkit.org>

        Add --css-grid-layout to build-webkit and the build systems
        https://bugs.webkit.org/show_bug.cgi?id=72320

        Reviewed by Ojan Vafai.

        * Configurations/FeatureDefines.xcconfig:

2011-11-14  Tony Chang  <tony@chromium.org>

        Remove the CSS3_FLEXBOX compile time flag and enable on all ports
        https://bugs.webkit.org/show_bug.cgi?id=72196

        Reviewed by Ojan Vafai.

        * Configurations/FeatureDefines.xcconfig:

2011-11-14  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Intermittent asserts in TextureMapperGL::bindSurface on MiniBrowser startup
        https://bugs.webkit.org/show_bug.cgi?id=72299

        Reviewed by Noam Rosenthal.

        Added check that clipping rect is valid.
        Clear GL error that might remain from QT GL operations.
        Added GL error assert for scissor test operations.

        * UIProcess/API/qt/qquickwebpage.cpp:
        (QQuickWebPagePrivate::paintToCurrentGLContext):

2011-11-14  Anders Carlsson  <andersca@apple.com>

        Only send progress notifications for the main frame
        https://bugs.webkit.org/show_bug.cgi?id=72302

        Reviewed by Sam Weinig.

        Since it's impossible in the API to tell which frame the progress notifications are for, just send them to the main frame for now.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::postProgressStartedNotification):
        (WebKit::WebFrameLoaderClient::postProgressEstimateChangedNotification):
        (WebKit::WebFrameLoaderClient::postProgressFinishedNotification):

2011-11-14  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt][WK2] Cleanup QML tests.
        https://bugs.webkit.org/show_bug.cgi?id=72259

        Reviewed by Simon Hausmann.

        Cleanup QML tests. This patch removes the duplicates after the merge of both views.
        I also isolated the desktop specific bits into its own directory.

        * UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_download.qml: Renamed from Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_download.qml.
        * UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_linkHovered.qml: Renamed from Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_linkHovered.qml.
        * UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_messaging.qml: Renamed from Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_messaging.qml.
        * UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_navigationPolicyForUrl.qml: Renamed from Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_navigationPolicyForUrl.qml.
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_loadProgressSignal.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_loadZeroSizeView.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_properties.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_load.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadFail.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadNegativeSizeView.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadProgress.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_loadFail.qml: Renamed from Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_loadFail.qml.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_loadProgress.qml: Renamed from Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_loadProgress.qml.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_loadProgressSignal.qml: Renamed from Source/WebKit2/UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadProgressSignal.qml.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_loadZeroSizeView.qml: Renamed from Source/WebKit2/UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadZeroSizeView.qml.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_preferences.qml: Renamed from Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_preferences.qml.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_properties.qml: Renamed from Source/WebKit2/UIProcess/API/qt/tests/qmltests/TouchWebView/tst_properties.qml.
        * UIProcess/API/qt/tests/qmltests/qmltests.pro:

2011-11-14  Mario Sanchez Prada  <msanchez@igalia.com>

        Add support for the caretBrowsingEnabled preference in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=72266

        Reviewed by Chris Fleizach.

        * Shared/WebPreferencesStore.h: Add caretBrowsingEnabled getter
        and setter macro.
        * UIProcess/API/C/WKPreferences.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetCaretBrowsingEnabled): Added.
        (WKPreferencesGetCaretBrowsingEnabled): Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Update the
        caretBrowsingEnabledKey preference.

2011-11-14  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] Remove reference to QWebNavigationController
        https://bugs.webkit.org/show_bug.cgi?id=72257

        Reviewed by Simon Hausmann.

        QWebNavigationController was removed in r99946, this is just a leftover.

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

2011-11-10  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] the QQuickWebView should support double-tap to zoom
        https://bugs.webkit.org/show_bug.cgi?id=72030

        Reviewed by Andreas Kling.

        * UIProcess/qt/QtViewInterface.cpp:
        * UIProcess/qt/QtViewInterface.h:
        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::QtViewportInteractionEngine::animateItemRectVisible):
        (WebKit::QtViewportInteractionEngine::zoomToAreaGestureEnded):
        (WebKit::QtViewportInteractionEngine::ensureContentWithinViewportBoundary):
        * UIProcess/qt/QtViewportInteractionEngine.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::didFindZoomableArea):

2011-11-14  Zalan Bujtas  <zbujtas@gmail.com>

        Build breaks with --no-javascript-debugger --no-inspector
        https://bugs.webkit.org/show_bug.cgi?id=72228

        Reviewed by Simon Hausmann.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):

2011-11-13  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit build.

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::initializeSandbox): Use a format specifier and cast that works on more architectures.

2011-11-12  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        [Qt][Symbian] Remove support for WINSCW compiler
        https://bugs.webkit.org/show_bug.cgi?id=70178

        Reviewed by Chang Shu.

        * Shared/API/c/WKString.h:

2011-11-12  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10294191> REGRESSION (WebKit2): Lookup bubble sized and positioned incorrectly (vertically off)
        https://bugs.webkit.org/show_bug.cgi?id=72217

        Reviewed by Dave Hyatt.

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformDictionaryLookup): Rather than adding the NSFont’s ascender
        to the top of the text rect to establish the baseline here...
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupForRange): ...do it here, using the WebCore::Font’s
        ascender, which is what’s actually used when drawing the text.

2011-11-11  Nayan Kumar K  <nayankk@motorola.com>

        [GTK][WEBKIT2] Add font and charset properties to WebKitWebSettings
        https://bugs.webkit.org/show_bug.cgi?id=68996

        Reviewed by Martin Robinson.

        Provision to query and set the font related properties (such as
        font-family, font-size) and charset properties (such as default-
        charset) is added.

        * UIProcess/API/gtk/WebKitSettings.cpp: Added font and encoding properties.
        (webKitSettingsSetProperty): GObject set property function.
        (webKitSettingsGetProperty): GObject get property function.
        (webkit_settings_class_init): Few more signals installed.
        (webkit_settings_init): Initialization of instance variables.
        (webkit_web_settings_get_default_font_family): Get 'default-font-family'.
        (webkit_web_settings_set_default_font_family): Set 'default-font-family'.
        (webkit_web_settings_get_monospace_font_family): Get 'monospace-font-family'.
        (webkit_web_settings_set_monospace_font_family): Set 'monospace-font-family'.
        (webkit_web_settings_get_serif_font_family): Get 'serif-font-family'.
        (webkit_web_settings_set_serif_font_family): Set 'serif-font-family'.
        (webkit_web_settings_get_sans_serif_font_family): Get 'sans-serif-font-family'.
        (webkit_web_settings_set_sans_serif_font_family): Get 'sans-serif-font-family'.
        (webkit_web_settings_get_cursive_font_family): Get 'cursive-font-family'.
        (webkit_web_settings_set_cursive_font_family): Set 'cursive-font-family'.
        (webkit_web_settings_get_fantasy_font_family): Get 'fantasy-font-family'.
        (webkit_web_settings_set_fantasy_font_family): Set 'fantasy-font-family'.
        (webkit_web_settings_get_pictograph_font_family): Get 'pictograph-font-family'.
        (webkit_web_settings_set_pictograph_font_family): Set 'pictograph-font-family'.
        (webkit_web_settings_get_default_font_size): Get 'default-font-size'.
        (webkit_web_settings_set_default_font_size): Set 'default-font-size'.
        (webkit_web_settings_get_default_monospace_font_size): Get 'default-monospace-font-size'.
        (webkit_web_settings_set_default_monospace_font_size): Set 'default-monospace-font-size'.
        (webkit_web_settings_get_minimum_font_size): Get 'minimum-font-size'.
        (webkit_web_settings_set_minimum_font_size): Set 'minimum-font-size'.
        (webkit_web_settings_get_default_charset): Get 'default-charset'.
        (webkit_web_settings_set_default_charset): Set 'default-charset'.
        * UIProcess/API/gtk/WebKitSettings.h: Add new sections for gtk-doc generation.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Expose new public APIs.
        * UIProcess/API/gtk/tests/TestWebKitSettings.cpp:
        (testWebKitSettings): Add new tests.

2011-11-11  Shinya Kawanaka  <shinyak@google.com>

        Implement legacy text check emulation in unified text check interface.
        https://bugs.webkit.org/show_bug.cgi?id=70299

        Reviewed by Hajime Morita.

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

2011-11-11  Alexey Proskuryakov  <ap@apple.com>

        WebProcess should use AppSandbox style quarantine
        https://bugs.webkit.org/show_bug.cgi?id=72168
        <rdar://problem/10434292>

        Reviewed by Darin Adler.

        * WebProcess/mac/WebProcessMac.mm: (WebKit::initializeSandbox): Just enable it.

2011-11-11  Darin Adler  <darin@apple.com>

        * WebKit2.xcodeproj/project.pbxproj: Let a newer Xcode update this file.
        If an older Xcode downgrades this file and we have a risk of some kind of
        oscillating commit situation, please contact me so I know not to do this again.

2011-11-11  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add jsCast to replace static_cast
        https://bugs.webkit.org/show_bug.cgi?id=72071

        Reviewed by Geoffrey Garen.

        Added new jsCast and changed all of the static_cast sites in functions that 
        are in the MethodTable to use jsCast instead.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::getCallData):
        (WebKit::JSNPObject::getConstructData):
        (WebKit::JSNPObject::getOwnPropertySlot):
        (WebKit::JSNPObject::getOwnPropertyDescriptor):
        (WebKit::JSNPObject::put):
        (WebKit::JSNPObject::deleteProperty):
        (WebKit::JSNPObject::deletePropertyByIndex):
        (WebKit::JSNPObject::getOwnPropertyNames):

2011-11-11  Timothy Hatcher  <timothy@apple.com>

        Only use the textured window style mask when there is no override inspector page.

        https://webkit.org/b/72142

        Reviewed by Dan Bernstein.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformOpen): Don't set NSTexturedBackgroundWindowMask if
        there is an override inspector page. Make setAutorecalculatesContentBorderThickness:,
        setContentBorderThickness: and WKNSWindowMakeBottomCornersSquare conditional.

2011-11-11  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Remove dead MeeGoTouch code.

        Reviewed by Tor Arne Vestbø.

        * WebProcess/qt/WebProcessMainQt.cpp:
        (WebKit::WebProcessMainQt):

2011-11-11  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt] Add a way to have experimental features in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=67707

        Reviewed by Kenneth Rohde Christiansen.

        Add new QML extensions for our public view. This extension
        returns the private object of the view so that the user could
        use unstable/unreleased APIs. This requires our private class
        to be exported and QObject subclass.

        * Target.pri:
        * UIProcess/API/qt/qquickwebview.cpp:
        * UIProcess/API/qt/qquickwebview_p.h:
        * UIProcess/API/qt/qquickwebviewprivateextension.cpp: Added.
        (QQuickWebViewPrivateExtension::QQuickWebViewPrivateExtension):
        (QQuickWebViewPrivateExtension::viewPrivate):
        * UIProcess/API/qt/qquickwebviewprivateextension_p.h: Added.

2011-11-11  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][WK2] Remove QWebNavigationController
        https://bugs.webkit.org/show_bug.cgi?id=72113

        Reviewed by Andreas Kling.

        Fold the functions and properties of QWebNavigationController into
        QQuickWebView.

        * Target.pri:
        * UIProcess/API/qt/WKView.h:
        * UIProcess/API/qt/qquickwebpage.cpp:
        (QQuickWebPagePrivate::QQuickWebPagePrivate):
        * UIProcess/API/qt/qquickwebpage.h:
        * UIProcess/API/qt/qquickwebpage_p.h:
        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::initialize):
        (QQuickWebView::goBack):
        (QQuickWebView::goForward):
        (QQuickWebView::stop):
        (QQuickWebView::reload):
        (QQuickWebView::canGoBack):
        (QQuickWebView::canGoForward):
        (QQuickWebView::canStop):
        (QQuickWebView::canReload):
        (QQuickWebView::title):
        * UIProcess/API/qt/qquickwebview.h:
        * UIProcess/API/qt/qwebnavigationcontroller.cpp: Removed.
        * UIProcess/API/qt/qwebnavigationcontroller.h: Removed.
        * UIProcess/API/qt/tests/qquickwebview/tst_qquickwebview.cpp:
        (tst_QQuickWebView::navigationStatusAtStartup):
        (LoadStartedCatcher::onLoadStarted):
        (tst_QQuickWebView::stopEnabledAfterLoadStarted):
        (tst_QQuickWebView::backAndForward):
        (tst_QQuickWebView::reload):
        (tst_QQuickWebView::stop):

2011-11-10  Beth Dakin  <bdakin@apple.com>

        Once more for the QT build.

        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::setFindIndicator):
        * UIProcess/qt/QtWebPageProxy.h:

2011-11-10  Beth Dakin  <bdakin@apple.com>

        More attempted build fix.

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::setFindIndicator):
        * UIProcess/API/efl/PageClientImpl.h:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::setFindIndicator):
        * UIProcess/API/gtk/PageClientImpl.h:

2011-11-10  Anders Carlsson  <andersca@apple.com>

        Fix 32-bit build.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (-[WKContentLayer drawInContext:]):

2011-11-10  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::setFindIndicator):
        * UIProcess/win/WebView.h:

2011-11-10  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=66584
        WebKit2's find bouncy looks blurry after dragging window onto >1.0 scale factor 
        display
        -and corresponding-
        <rdar://problem/9987559>

        Reviewed by Anders Carlsson.

        The setFindIndicator message and various functions of the same name must all take 
        an additional parameter indicating whether or not setting the find indicator 
        should result in a bounce animation. This is because when the device scale factor 
        changes, if there is currently a find indicator, it must be re-set to a higher or 
        lower resolution version, but we don't want the bounce animation to happen again.
        * UIProcess/API/mac/FindIndicatorWindow.h:
        * UIProcess/API/mac/FindIndicatorWindow.mm:
        (WebKit::FindIndicatorWindow::setFindIndicator):
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setFindIndicator):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setFindIndicator:fadeOut:animate:]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setFindIndicator):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        New function FindController::isShowingOverlay() is used to determine if 
        FindController::deviceScaleFactorDidChange() needs to be called.
        * WebProcess/WebPage/FindController.h:
        (WebKit::FindController::isShowingOverlay): 

        FindController::deviceScaleFactorDidChange() calls updateFindIndicator to re-
        generate the bitmap at the appropriate scale factor, but tells it not to animate 
        this time.
        (WebKit::FindController::deviceScaleFactorDidChange):

        updateFindIndicator() takes a new parameter indicating whether or not the 
        FindIndicator should animate. It defaults to true since the deviceScaleFactor 
        changing is the only case currently where we do not want it to animate.
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindIndicator):
        (WebKit::FindController::hideFindIndicator):

        Calls into FindController::deviceScaleFactorDidChange() when the scale factor has 
        changed and the find overlay is showing.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setDeviceScaleFactor):

2011-11-10  Timothy Hatcher  <timothy@apple.com>

        Make WKViews in NSPopovers render as they would in active windows.

        The NSWindowDid{Become,Resign}KeyNotifications are not fired when NSPopovers
        are shown or hidden since they share key with the parent window. So WKView
        needs to update the active state during order on/off screen notifications.

        https://webkit.org/b/68435

        Reviewed by John Sullivan.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _windowDidOrderOffScreen:]): Call viewStateDidChange with WebPageProxy::ViewWindowIsActive.
        (-[WKView _windowDidOrderOnScreen:]): Ditto.

2011-11-10  Anders Carlsson  <andersca@apple.com>

        Add a simple content layer to TiledCoreAnimationDrawingArea
        https://bugs.webkit.org/show_bug.cgi?id=72044

        Reviewed by Darin Adler.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        Add a content layer member variable.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (-[WKContentLayer _initWithWebPage:WebKit::]):
        Add initializer.

        (-[WKContentLayer drawInContext:]):
        Lay out and draw the web page.

        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        Add the content layer as a sublayer of the root layer.

        (WebKit::TiledCoreAnimationDrawingArea::setNeedsDisplay):
        (WebKit::TiledCoreAnimationDrawingArea::scroll):
        Tell the content layer to paint.

        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):
        Resize the content layer as well.

2011-11-10  Anders Carlsson  <andersca@apple.com>

        The WKView layer hosting subview needs to be flipped
        https://bugs.webkit.org/show_bug.cgi?id=72042

        Reviewed by Darin Adler.

        In order to match the Core Animation layer hierarchy, the layer hosting WKView
        subview needs to be flipped.

        * UIProcess/API/mac/WKView.mm:
        (-[WKFlippedView isFlipped]):
        Add a NSView subview whose sole purpose is to be flipped.

        (-[WKView _enterAcceleratedCompositingMode:]):
        Create a WKFlippedView instead of a regular NSView.

2011-11-10  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] X11 plugins need to be reworked for Qt5
        https://bugs.webkit.org/show_bug.cgi?id=70023

        Reviewed by Simon Hausmann.

        * Target.pri:
        * UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp:
        (WebKit::PluginInfoStore::pluginsDirectories):
        Kill the last dependency from the WebKit1 plugin system.
        This is necessary because currently we don't build the WebKit1
        plugin code. The function is equivalent with the XP_UNIX part of
        PluginDatabase::defaultPluginDirectories.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::getPluginDisplay):
        (WebKit::x11Screen):
        (WebKit::displayDepth):
        (WebKit::rootWindowID):
        (WebKit::NetscapePlugin::x11HostDisplay):
        (WebKit::NetscapePlugin::platformPostInitialize):
        (WebKit::NetscapePlugin::platformDestroy):
        (WebKit::NetscapePlugin::platformGeometryDidChange):
        (WebKit::NetscapePlugin::platformPaint):
        (WebKit::initializeXEvent):
        Rework plugin initialization and drawing model.

2011-11-10  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [WebKit2] Fix remaining gtkdoc errors
        https://bugs.webkit.org/show_bug.cgi?id=71990

        Reviewed by Philippe Normand.

        * UIProcess/API/gtk/WebKitWebView.cpp: Update add the phrase "property" to
        references to properties, because the gtkdoc stylesheet does not differeniate
        between properties and signals. Standardize the way we talk about property
        notifications.
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add an include to silence 
        warnings about GIR annotations.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add the decorators the private section.

2011-11-10  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Clean up how singe / double taps are handled
        https://bugs.webkit.org/show_bug.cgi?id=72024

        Reviewed by Simon Hausmann.

        Move all decision making to the QtWebPageProxy.

        * UIProcess/qt/QtTapGestureRecognizer.cpp:
        (WebKit::QtTapGestureRecognizer::QtTapGestureRecognizer):
        (WebKit::QtTapGestureRecognizer::recognize):
        (WebKit::QtTapGestureRecognizer::tapTimeout):
        * UIProcess/qt/QtTapGestureRecognizer.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::QtWebPageProxy):
        (QtWebPageProxy::handleSingleTapEvent):
        (QtWebPageProxy::handleDoubleTapEvent):
        * UIProcess/qt/QtWebPageProxy.h:

2011-11-10  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Clean up build system

        Reviewed by Tor Arne Vestbø.

        Now that we use whole-archive linking we can fold the files that contain exported
        symbols back into the WebKit2 static library.

        * Target.pri: Fold in sources from WebKit2.pri.
        * WebKit2.pri: Removed.

2011-11-10  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt] Merge QTouchWebView and QDesktopWebView into one class
        https://bugs.webkit.org/show_bug.cgi?id=71355

        Reviewed by Kenneth Rohde Christiansen.

        Merge QTouchWebView and QDesktopWebView into one class called
        QQuickWebView and its attached page QQuickWebPage. You can switch to the
        traditional desktop use case with the private header. Also now on desktop
        platforms AC is turn on by default. I also merged our two
        subclasses of QtViewInterface into one as the split doesn't make
        that much sense anymore. In the future we want to be able to enable the
        traditional desktop use case depending the platform the code is running.
        API tests and QML tests have been updated.

        * Target.pri:
        * UIProcess/API/qt/WKView.h:
        * UIProcess/API/qt/qbasewebview.cpp: Removed.
        * UIProcess/API/qt/qbasewebview_p.h: Removed.
        * UIProcess/API/qt/qdesktopwebview.cpp: Removed.
        * UIProcess/API/qt/qdesktopwebview.h: Removed.
        * UIProcess/API/qt/qdesktopwebview_p.h: Removed.
        * UIProcess/API/qt/qquickwebpage.cpp: Renamed from Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp.
        (QQuickWebPage::QQuickWebPage):
        (QQuickWebPage::~QQuickWebPage):
        (QQuickWebPage::keyPressEvent):
        (QQuickWebPage::keyReleaseEvent):
        (QQuickWebPage::inputMethodEvent):
        (QQuickWebPage::focusInEvent):
        (QQuickWebPage::focusOutEvent):
        (QQuickWebPage::mousePressEvent):
        (QQuickWebPage::mouseMoveEvent):
        (QQuickWebPage::mouseReleaseEvent):
        (QQuickWebPage::mouseDoubleClickEvent):
        (QQuickWebPage::wheelEvent):
        (QQuickWebPage::hoverEnterEvent):
        (QQuickWebPage::hoverMoveEvent):
        (QQuickWebPage::hoverLeaveEvent):
        (QQuickWebPage::dragMoveEvent):
        (QQuickWebPage::dragEnterEvent):
        (QQuickWebPage::dragLeaveEvent):
        (QQuickWebPage::dropEvent):
        (QQuickWebPage::geometryChanged):
        (QQuickWebPage::event):
        (QQuickWebPage::touchEvent):
        (QQuickWebPage::itemChange):
        (QQuickWebPagePrivate::QQuickWebPagePrivate):
        (QQuickWebPagePrivate::initializeSceneGraphConnections):
        (QQuickWebPagePrivate::setPageProxy):
        (computeEffectiveOpacity):
        (QQuickWebPagePrivate::paintToCurrentGLContext):
        (QQuickWebPagePrivate::_q_onAfterSceneRender):
        (QQuickWebPagePrivate::_q_onSceneGraphInitialized):
        * UIProcess/API/qt/qquickwebpage.h: Renamed from Source/WebKit2/UIProcess/API/qt/qtouchwebpage.h.
        * UIProcess/API/qt/qquickwebpage_p.h: Renamed from Source/WebKit2/UIProcess/API/qt/qtouchwebpage_p.h.
        * UIProcess/API/qt/qquickwebview.cpp: Added.
        (QQuickWebViewPrivate::QQuickWebViewPrivate):
        (QQuickWebViewPrivate::enableMouseEvents):
        (QQuickWebViewPrivate::disableMouseEvents):
        (QQuickWebViewPrivate::initialize):
        (QQuickWebViewPrivate::initializeDesktop):
        (QQuickWebViewPrivate::initializeTouch):
        (QQuickWebViewPrivate::loadDidCommit):
        (QQuickWebViewPrivate::contentSizeChanged):
        (QQuickWebViewPrivate::scrollPositionRequested):
        (QQuickWebViewPrivate::_q_viewportUpdated):
        (QQuickWebViewPrivate::_q_viewportTrajectoryVectorChanged):
        (QQuickWebViewPrivate::_q_onVisibleChanged):
        (QQuickWebViewPrivate::updateViewportSize):
        (QQuickWebViewPrivate::updateViewportConstraints):
        (QQuickWebViewPrivate::didChangeViewportProperties):
        (QQuickWebViewPrivate::runJavaScriptAlert):
        (QQuickWebViewPrivate::runJavaScriptConfirm):
        (QQuickWebViewPrivate::runJavaScriptPrompt):
        (QQuickWebViewPrivate::chooseFiles):
        (QQuickWebViewPrivate::_q_onOpenPanelFilesSelected):
        (QQuickWebViewPrivate::_q_onOpenPanelFinished):
        (QQuickWebViewPrivate::setUseTraditionalDesktopBehaviour):
        (toPolicyAction):
        (hasMetaMethod):
        (QQuickWebViewPrivate::navigationPolicyForURL):
        (QQuickWebViewPrivate::setPageProxy):
        (QQuickWebView::QQuickWebView):
        (QQuickWebView::~QQuickWebView):
        (QQuickWebView::page):
        (QQuickWebView::load):
        (QQuickWebView::postMessage):
        (QQuickWebView::url):
        (QQuickWebView::loadProgress):
        (QQuickWebView::title):
        (QQuickWebView::navigationController):
        (QQuickWebView::preferences):
        (QQuickWebView::geometryChanged):
        (QQuickWebView::touchEvent):
        (QQuickWebView::pageRef):
        * UIProcess/API/qt/qquickwebview.h: Renamed from Source/WebKit2/UIProcess/API/qt/qbasewebview.h.
        * UIProcess/API/qt/qquickwebview_p.h: Added.
        * UIProcess/API/qt/qtouchwebview.cpp: Removed.
        * UIProcess/API/qt/qtouchwebview.h: Removed.
        * UIProcess/API/qt/qtouchwebview_p.h: Removed.
        * UIProcess/API/qt/tests/commonviewtests/commonviewtests.pro: Removed.
        * UIProcess/API/qt/tests/commonviewtests/tst_commonviewtests.cpp: Removed.
        * UIProcess/API/qt/tests/commonviewtests/webviewabstraction.cpp: Removed.
        * UIProcess/API/qt/tests/commonviewtests/webviewabstraction.h: Removed.
        * UIProcess/API/qt/tests/qdesktopwebview/tst_qdesktopwebview.cpp: Removed.
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_download.qml:
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_linkHovered.qml:
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_loadFail.qml:
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_loadProgress.qml:
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_loadProgressSignal.qml:
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_loadZeroSizeView.qml:
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_messaging.qml:
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_navigationPolicyForUrl.qml:
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_preferences.qml:
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_properties.qml:
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_load.qml:
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadFail.qml:
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadNegativeSizeView.qml:
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadProgress.qml:
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadProgressSignal.qml:
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadZeroSizeView.qml:
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_properties.qml:
        * UIProcess/API/qt/tests/qmltests/qmltests.pro:
        * UIProcess/API/qt/tests/qmltests/tst_qmltests.cpp:
        (DesktopWebView::DesktopWebView):
        (main):
        * UIProcess/API/qt/tests/qquickwebview/qquickwebview.pro: Renamed from Source/WebKit2/UIProcess/API/qt/tests/qdesktopwebview/qdesktopwebview.pro.
        * UIProcess/API/qt/tests/qquickwebview/tst_qquickwebview.cpp: Added.
        (tst_QQuickWebView::tst_QQuickWebView):
        (tst_QQuickWebView::init):
        (tst_QQuickWebView::cleanup):
        (tst_QQuickWebView::webView):
        (tst_QQuickWebView::accessPage):
        (tst_QQuickWebView::navigationStatusAtStartup):
        (LoadStartedCatcher::LoadStartedCatcher):
        (LoadStartedCatcher::onLoadStarted):
        (tst_QQuickWebView::stopEnabledAfterLoadStarted):
        (tst_QQuickWebView::baseUrl):
        (tst_QQuickWebView::loadEmptyUrl):
        (tst_QQuickWebView::loadEmptyPageViewVisible):
        (tst_QQuickWebView::loadEmptyPageViewHidden):
        (tst_QQuickWebView::loadNonexistentFileUrl):
        (tst_QQuickWebView::backAndForward):
        (tst_QQuickWebView::reload):
        (tst_QQuickWebView::stop):
        (tst_QQuickWebView::loadProgress):
        (tst_QQuickWebView::show):
        * UIProcess/API/qt/tests/qtouchwebview/qtouchwebview.pro: Removed.
        * UIProcess/API/qt/tests/qtouchwebview/tst_qtouchwebview.cpp: Removed.
        * UIProcess/API/qt/tests/testwindow.h:
        * UIProcess/TiledDrawingAreaProxy.h:
        * UIProcess/qt/QtGestureRecognizer.cpp:
        (WebKit::QtGestureRecognizer::QtGestureRecognizer):
        (WebKit::QtGestureRecognizer::setViewportInteractionEngine):
        * UIProcess/qt/QtGestureRecognizer.h:
        * UIProcess/qt/QtPanGestureRecognizer.cpp:
        (WebKit::QtPanGestureRecognizer::setViewportInteractionEngine):
        (WebKit::QtPanGestureRecognizer::recognize):
        * UIProcess/qt/QtPanGestureRecognizer.h:
        * UIProcess/qt/QtPinchGestureRecognizer.cpp:
        (WebKit::QtPinchGestureRecognizer::recognize):
        (WebKit::QtPinchGestureRecognizer::setViewportInteractionEngine):
        * UIProcess/qt/QtPinchGestureRecognizer.h:
        * UIProcess/qt/QtTouchViewInterface.cpp: Removed.
        * UIProcess/qt/QtTouchViewInterface.h: Removed.
        * UIProcess/qt/QtViewInterface.cpp: Added.
        (WebKit::QtViewInterface::QtViewInterface):
        (WebKit::QtViewInterface::didFindZoomableArea):
        (WebKit::QtViewInterface::sceneGraphUpdateQueue):
        (WebKit::QtViewInterface::setViewNeedsDisplay):
        (WebKit::QtViewInterface::drawingAreaSize):
        (WebKit::QtViewInterface::contentSizeChanged):
        (WebKit::QtViewInterface::scrollPositionRequested):
        (WebKit::QtViewInterface::isActive):
        (WebKit::QtViewInterface::hasFocus):
        (WebKit::QtViewInterface::isVisible):
        (WebKit::QtViewInterface::startDrag):
        (WebKit::QtViewInterface::didChangeViewportProperties):
        (WebKit::QtViewInterface::didChangeUrl):
        (WebKit::QtViewInterface::didChangeTitle):
        (WebKit::QtViewInterface::didChangeToolTip):
        (WebKit::QtViewInterface::didChangeStatusText):
        (WebKit::QtViewInterface::didChangeCursor):
        (WebKit::QtViewInterface::loadDidBegin):
        (WebKit::QtViewInterface::loadDidCommit):
        (WebKit::QtViewInterface::loadDidSucceed):
        (WebKit::QtViewInterface::loadDidFail):
        (WebKit::QtViewInterface::didChangeLoadProgress):
        (WebKit::QtViewInterface::didMouseMoveOverElement):
        (WebKit::QtViewInterface::showContextMenu):
        (WebKit::QtViewInterface::hideContextMenu):
        (WebKit::QtViewInterface::runJavaScriptAlert):
        (WebKit::QtViewInterface::runJavaScriptConfirm):
        (WebKit::QtViewInterface::runJavaScriptPrompt):
        (WebKit::QtViewInterface::processDidCrash):
        (WebKit::QtViewInterface::didRelaunchProcess):
        (WebKit::QtViewInterface::engine):
        (WebKit::QtViewInterface::downloadRequested):
        (WebKit::QtViewInterface::chooseFiles):
        * UIProcess/qt/QtViewInterface.h:
        * UIProcess/qt/QtWebPageProxy.h:
        (QtWebPageProxy::setViewportInteractionEngine):
        * UIProcess/qt/TiledDrawingAreaProxyQt.cpp:
        * WebKit2.pri:

2011-11-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck build.

        * GNUmakefile.am: Fix typos in gtk-doc files and scripts.

2011-11-10  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed Mac build fix: Remove TapAndHold gesture type.

        It broke the build because it's unhandled. Remove it since it's not
        supported at the moment anyway. (looks like an accidental addition?)

        * Shared/WebEvent.h:
        * UIProcess/qt/QtTapGestureRecognizer.cpp:
        (WebKit::QtTapGestureRecognizer::tapAndHoldTimeout):

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Enable exports and constructor functions in static libs

        Reviewed by Tor Arne Vestbø.

        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (WebKit::WebPage::platformInitialize): Remove unnecessary manual Qt resource
        initialization.

2011-11-10  Zeno Albisser  <zeno.albisser@nokia.com>

        [Qt][WK2] Add Tap Gesture recognition to UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=71841

        Add a Tap gesture recognizer that delivers GestureSingleTap
        and GestureTapAndHold events through the WebPageProxy.
        Add a GestureTapAndHold to WebEvent.
        Add a DoubleTap gesture for zooming in and out.

        This patch is based on work of Benjamin Poulain.

        Reviewed by Kenneth Rohde Christiansen.

        * Shared/WebEvent.h:
        * Target.pri:
        * UIProcess/qt/QtTapGestureRecognizer.cpp: Added.
        (WebKit::QtTapGestureRecognizer::QtTapGestureRecognizer):
        (WebKit::QtTapGestureRecognizer::setWebPageProxy):
        (WebKit::QtTapGestureRecognizer::recognize):
        (WebKit::QtTapGestureRecognizer::tapTimeout):
        (WebKit::QtTapGestureRecognizer::tapAndHoldTimeout):
        (WebKit::QtTapGestureRecognizer::reset):
        (WebKit::QtTapGestureRecognizer::timerEvent):
        * UIProcess/qt/QtTapGestureRecognizer.h: Added.
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::QtWebPageProxy):
        (QtWebPageProxy::processDidCrash):
        (QtWebPageProxy::doneWithTouchEvent):
        * UIProcess/qt/QtWebPageProxy.h:

2011-11-09  Shinya Kawanaka  <shinyak@google.com>

        Internals.markerRangeForNode should be able to take markers by specifying a marker type.
        https://bugs.webkit.org/show_bug.cgi?id=71792

        Reviewed by Hajime Morita.

        * win/WebKit2.def: Exposed necessary references.
        * win/WebKit2CFLite.def: ditto.

2011-10-26  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [WebKit] Replace the gtkdoc autools magic with something more flexible
        https://bugs.webkit.org/show_bug.cgi?id=70877

        Reviewed by Philippe Normand.

        Add a script that runs gtkdoc manually instead of using the autotools
        magic. Remove now unused gtkdoc files.

        * GNUmakefile.am: Remove references to removed gtkdoc files.
        * UIProcess/API/gtk/docs/GNUmakefile.am: Removed.
        * UIProcess/API/gtk/docs/build-gtkdoc: Added.
        * UIProcess/API/gtk/docs/gtkdoc.py: Added.
        * UIProcess/API/gtk/docs/version.xml.in: Removed.

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

        <rdar://problem/10423024> WebProcess doesn't use AuthBrokerAgent for proxy credentials
        https://bugs.webkit.org/show_bug.cgi?id=71964

        Reviewed by Darin Adler.

        * WebProcess/com.apple.WebProcess.sb: Allow mach-lookup of com.apple.cfnetwork.AuthBrokerAgent.

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

        Element::boundsInWindowSpace should be Element::boundsInRootViewSpace
        https://bugs.webkit.org/show_bug.cgi?id=71955

        Reviewed by Sam Weinig.

        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::elementBounds):
        Call Element::boundsInRootViewSpace.

2011-11-09  Alexis Menard  <alexis.menard@openbossa.org>

        WebGraphicsLayer behaves wrongly when no contentsScale is set.
        https://bugs.webkit.org/show_bug.cgi?id=71959

        Reviewed by Noam Rosenthal.

        The contentsScale needs to get a default value just like
        TiledBackingStore in case no value is explicitely set.

        It is covered by existing tests.

        * WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:
        (WebCore::WebGraphicsLayer::WebGraphicsLayer):

2011-11-09  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSObject::getOwnPropertyDescriptor
        https://bugs.webkit.org/show_bug.cgi?id=71523

        Reviewed by Sam Weinig.

        Added getOwnPropertyDescriptor to the MethodTable, changed all of the 
        virtual versions of getOwnPropertyDescriptor to static ones, and 
        changed all of the call sites to the corresponding lookup in the MethodTable.

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

2011-11-09  Alexandru Chiculita  <achicu@adobe.com>

        Fixing build on MacOSX SL after 71838
        https://bugs.webkit.org/show_bug.cgi?id=71912

        Reviewed by Anders Carlsson.

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

2011-11-09  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [WebKit2] Prepare viewport meta handling for desktop usage
        https://bugs.webkit.org/show_bug.cgi?id=71907

        Reviewed by Simon Hausmann.

        This is only used by Qt so far. Now we don't always layout pages
        without the viewport meta tag, using 980 as the layout width, but
        instead we use that value (it is a setting) as a minimum value, or
        else we use the viewport width.

        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebViewPrivate::updateViewportSize):
        (QTouchWebViewPrivate::updateViewportConstraints):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::dispatchViewportPropertiesDidChange):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setViewportSize):

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed, rolling out r99701.
        http://trac.webkit.org/changeset/99701

        Breaks Qt mac build

        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (initResources):
        (WebKit::WebPage::platformInitialize):

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Enable exports and constructor functions in static libs

        Reviewed by Tor Arne Vestbø.

        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (WebKit::WebPage::platformInitialize): Remove unnecessary manual Qt resource
        initialization.

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix geolocation enabled build.

        Reviewed by Tor Arne Vestbø.

        * Target.pri: Add QT += location to get the right module includes.
        * UIProcess/qt/WebGeolocationProviderQt.cpp: Include the moc file with the right name (GeoLocation -> Geolocation)
        * UIProcess/qt/WebGeolocationProviderQt.h: Removed the ENABLE(GEOLOCATION) guards, otherwise moc doesn't generate
        code, because it can't interpret the ENABLE() macro.

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Build system cleanup
        https://bugs.webkit.org/show_bug.cgi?id=71815

        Reviewed by Kenneth Rohde Christiansen.

        * Target.pri: Removed duplicated sources that are compiled also into QtWebKit.so through api.pri.
        * UIProcess/qt/WebGeolocationProviderQt.cpp: Include the moc file here, as it should only be compiled
        if geolocation is enabled.
        * UIProcess/qt/WebGeolocationProviderQt.h: Provide ENABLE(GEOLOCATION) guards around class definition.

2011-11-08  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Replace use of QApplication with QGuiApplication
        https://bugs.webkit.org/show_bug.cgi?id=71794

        Reviewed by Andreas Kling.

        * Platform/CoreIPC/unix/ConnectionUnix.cpp: Remove unnecessary QApplication inclusion.
        * Platform/qt/RunLoopQt.cpp: Replace QApplication include with QCoreApplication.
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp: Ditto.
        * UIProcess/Launcher/qt/ThreadLauncherQt.cpp: Remove unnecessary QApplication inclusion.
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::handleMousePressEvent): Replace QApplication usage with QStyleHints.
        (QtWebPageProxy::handleMouseDoubleClickEvent): Ditto.

2011-11-07  Adam Barth  <abarth@webkit.org>

        Move static "policy" state from SecurityOrigin.cpp to SecurityPolicy.cpp
        https://bugs.webkit.org/show_bug.cgi?id=71755

        Reviewed by Eric Seidel.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::addOriginAccessWhitelistEntry):
        (WebKit::InjectedBundle::removeOriginAccessWhitelistEntry):
        (WebKit::InjectedBundle::resetOriginAccessWhitelists):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::loadURL):

2011-11-08  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed build fix after r99613.

        * win/WebKit2CFLite.def: Add missing export.

2011-11-08  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed build fix after r98624 and r99613.

        * win/WebKit2CFLite.def: Add missing exports.

2011-11-08  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=71856
        WebKit should use new NSWindowDidChangeBackingPropertiesNotification instead of 
        old NSWindowDidChangeResolutionNotification
        -and corresponding-
        <rdar://problem/10317253>

        Reviewed by Tim Hatcher.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView addWindowObserversForWindow:]):
        (-[WKView removeWindowObservers]):

        We have to check that the backing scale factor actually changed since this 
        notification can also be used to signify other changes. 
        (-[WKView _windowDidChangeBackingProperties:]):

2011-11-08  Anders Carlsson  <andersca@apple.com>

        Add a basic layer hierarchy to the Core Animation drawing area
        https://bugs.webkit.org/show_bug.cgi?id=71838

        Reviewed by Sam Weinig.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView drawRect:]):
        Return early if we're using a tiled drawing area.

        (-[WKView initWithFrame:contextRef:pageGroupRef:]):
        If we're using a tiled drawing area, make the WKView layer backed and set its layer
        to a simple CALayer with a white background and set the view's content redraw policy
        to never to avoid ever calling drawRect.

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::didUpdateGeometry):
        * UIProcess/DrawingAreaProxy.messages.in:
        Add a new didUpdateGeometry message.

        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::TiledCoreAnimationDrawingAreaProxy):
        Initialize m_isWaitingForDidUpdateGeometry.

        (WebKit::TiledCoreAnimationDrawingAreaProxy::sizeDidChange):
        Send an UpdateGeometry message to the web process and wait for a reply.

        (WebKit::TiledCoreAnimationDrawingAreaProxy::enterAcceleratedCompositingMode):
        Tell the web page proxy to enter accelerated compositing mode.

        (WebKit::TiledCoreAnimationDrawingAreaProxy::exitAcceleratedCompositingMode):
        Assert that this function is never called.

        (WebKit::TiledCoreAnimationDrawingAreaProxy::didUpdateGeometry):
        Send another UpdateGeometry message if needed.

        (WebKit::TiledCoreAnimationDrawingAreaProxy::sendUpdateGeometry):
        Add helper function to actually send the UpdateGeometry message.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::updateGeometry):
        * WebProcess/WebPage/DrawingArea.messages.in:
        Add UpdateGeometry message.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        Create a red root layer and a remote layer client that hosts it.

        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):
        Resize the root layer and tell the UI process that we've updated the geometry.

2011-11-08  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10262225> Allow RenderView to have columns
        https://bugs.webkit.org/show_bug.cgi?id=71840

        * win/WebKit2.def: Export Page::setPagination() for WebCoreTestSupport.

2011-11-08  Jon Lee  <jonlee@apple.com>

        [WK2] Expose acceptMIMETypes for file inputs
        https://bugs.webkit.org/show_bug.cgi?id=71836
        <rdar://problem/10407367>

        Reviewed by Anders Carlsson.

        * Shared/WebOpenPanelParameters.cpp:
        (WebKit::WebOpenPanelParameters::acceptMIMETypes):
        * Shared/WebOpenPanelParameters.h:
        * UIProcess/API/C/WKOpenPanelParameters.cpp:
        (WKOpenPanelParametersCopyAcceptedMIMETypes):
        * UIProcess/API/C/WKOpenPanelParameters.h:

2011-11-08  Zan Dobersek  <zandobersek@gmail.com>

        [WK2][GTK] The default database & local storage directory names should note they exist for Gtk port's needs
        https://bugs.webkit.org/show_bug.cgi?id=71837

        Reviewed by Martin Robinson.

        Ensure that directories for databases and local storage are in a 'webkitgtk'
        directory in current user's data directory, noting they originate from the Gtk port.

        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformDefaultDatabaseDirectory):
        (WebKit::WebContext::platformDefaultLocalStorageDirectory):

2011-11-08  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] Workaround some problems in QML API tests
        https://bugs.webkit.org/show_bug.cgi?id=71818

        Reviewed by Tor Arne Vestbø.

        This commit workaround the issue of QML's QtTest crashing when we run tests after
        "windowShown". We delay to the next run of the mainloop. This workaround is not
        pretty but shouldn't affect the semantics of the tests. And we benefit more from
        having working tests right now.

        This patch also improves Download to: wait for the load before emitting click, and
        properly identifying the "succeeded" signal of the downloadItem object.

        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_download.qml:
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_linkHovered.qml:
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_navigationPolicyForUrl.qml:

2011-11-08  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Clean up QtViewportInteractionEngine

        Reviewed by Simon Hausmann.

        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::QtViewportInteractionEngine::QtViewportInteractionEngine):
        (WebKit::QtViewportInteractionEngine::setItemRectVisible):

            Rename the method to make it more obvious what it does. Avoid implicit
            conversion to/from QVariant.

        (WebKit::QtViewportInteractionEngine::pagePositionRequest):
        (WebKit::QtViewportInteractionEngine::ensureContentWithinViewportBoundary):
        (WebKit::QtViewportInteractionEngine::itemSizeChanged):

            Only call this method on item size changes, and not for every interaction
            with the viewport item. Before this change it was even being called during
            animations.

        * UIProcess/qt/QtViewportInteractionEngine.h:
        (WebKit::QtViewportInteractionEngine::scaleAnimationValueChanged):

            Rename to make it clean that this is called from the animator.

2011-11-08  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Improve the animation time constant
        https://bugs.webkit.org/show_bug.cgi?id=71790

        Reviewed by Simon Hausmann.

        Use 250 milliseconds instead of 400, which feels a lot more natural
        and makes the mini browser feel more responsive.

        * UIProcess/qt/QtViewportInteractionEngine.cpp:

2011-11-08  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt] Merge QtDesktopWebPageProxy and QtTouchWebPageProxy into QtWebPageProxy.
        https://bugs.webkit.org/show_bug.cgi?id=71355

        Reviewed by Simon Hausmann.

        As we try to unify our public API offer we need to merge our double
        WebPageProxy implementations first into a common class. That will help
        to merge our TouchWebView and DesktopWebView views into one class later.
        This commit just merge stuff around and doesn't contain any functional changes.

        * Target.pri:
        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebViewPrivate::init):
        * UIProcess/API/qt/qtouchwebpage.cpp:
        (QTouchWebPagePrivate::paintToCurrentGLContext):
        * UIProcess/API/qt/qtouchwebpage.h:
        * UIProcess/API/qt/qtouchwebpage_p.h:
        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebViewPrivate::init):
        (QTouchWebViewPrivate::_q_viewportUpdated):
        (QTouchWebViewPrivate::_q_viewportTrajectoryVectorChanged):
        * UIProcess/API/qt/qtouchwebview_p.h:
        * UIProcess/qt/QtDesktopWebPageProxy.cpp: Removed.
        * UIProcess/qt/QtDesktopWebPageProxy.h: Removed.
        * UIProcess/qt/QtTouchWebPageProxy.cpp: Removed.
        * UIProcess/qt/QtTouchWebPageProxy.h: Removed.
        * UIProcess/qt/QtWebPageProxy.cpp:
        (dragOperationToDropAction):
        (QtWebPageProxy::QtWebPageProxy):
        (QtWebPageProxy::handleEvent):
        (QtWebPageProxy::handleMouseMoveEvent):
        (QtWebPageProxy::handleMousePressEvent):
        (QtWebPageProxy::handleMouseReleaseEvent):
        (QtWebPageProxy::handleMouseDoubleClickEvent):
        (QtWebPageProxy::handleWheelEvent):
        (QtWebPageProxy::handleHoverLeaveEvent):
        (QtWebPageProxy::handleHoverMoveEvent):
        (QtWebPageProxy::handleDragEnterEvent):
        (QtWebPageProxy::handleDragLeaveEvent):
        (QtWebPageProxy::handleDragMoveEvent):
        (QtWebPageProxy::handleDropEvent):
        (QtWebPageProxy::timerEvent):
        (QtWebPageProxy::processDidCrash):
        (QtWebPageProxy::didReceiveDownloadResponse):
        (QtWebPageProxy::paintContent):
        (QtWebPageProxy::createDrawingAreaProxy):
        (QtWebPageProxy::renderToCurrentGLContext):
        (QtWebPageProxy::doneWithTouchEvent):
        (QtWebPageProxy::setVisibleContentRectAndScale):
        (QtWebPageProxy::setVisibleContentRectTrajectoryVector):
        (QtWebPageProxy::touchEvent):
        (QtWebPageProxy::findZoomableAreaForPoint):
        * UIProcess/qt/QtWebPageProxy.h:

2011-11-08  Zan Dobersek  <zandobersek@gmail.com>

        [WK2][GTK] Application cache directory is incorrectly set
        https://bugs.webkit.org/show_bug.cgi?id=70680

        Reviewed by Philippe Normand.

        Correctly set application cache directory to be in current
        user's default cache directory.

        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::applicationCacheDirectory):

2011-11-07  Emil A Eklund  <eae@chromium.org>

        Revert platform and scrolling to ints
        https://bugs.webkit.org/show_bug.cgi?id=71585

        Reviewed by Eric Seidel.

        Replace all uses of LayoutUnit and related types with ints in platform
        and scrolling code.

        * WebProcess/Plugins/PDF/BuiltInPDFView.cpp:
        (WebKit::BuiltInPDFView::invalidateScrollbarRect):
        (WebKit::BuiltInPDFView::visibleHeight):
        (WebKit::BuiltInPDFView::visibleWidth):
        * WebProcess/Plugins/PDF/BuiltInPDFView.h:

2011-11-07  Adam Barth  <abarth@webkit.org>

        Move DomainRelaxationForbidden scheme registry to SchemeRegistry
        https://bugs.webkit.org/show_bug.cgi?id=71750

        Reviewed by Eric Seidel.

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

2011-11-07  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=71490
        Support uiStateTransitionProgress for scrollbars
        -and corresponding-
        <rdar://problem/9849612>

        Reviewed by Sam Weinig.

        Scrollbar::mouseUp() now takes a PlatformMouseEvent as a parameter.
        * UIProcess/win/WebPopupMenuProxyWin.cpp:
        (WebKit::WebPopupMenuProxyWin::onLButtonUp):
        * WebProcess/Plugins/PDF/BuiltInPDFView.cpp:
        (WebKit::BuiltInPDFView::handleMouseEvent):

2011-11-07  Alexey Proskuryakov  <ap@apple.com>

        The Full Keyboard Access preference should be read in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=71734
        <rdar://problem/9237619>

        Reviewed by Darin Adler.

        This is consistent with how other global preferences (like language) are handled, and lets
        us tighten up the sandbox a little.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        Added fullKeyboardAccessEnabled, so that newly started processes have the right preference value.

        * UIProcess/WebContext.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::fullKeyboardAccessModeChanged): If preference changes while a web process
        is already running, tell it.
        (WebKit::WebContext::ensureWebProcess): Set parameters.fullKeyboardAccessEnabled from current
        preference.

        * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::fullKeyboardAccessEnabled):
        * UIProcess/mac/WebProcessProxyMac.mm: (WebKit::WebProcessProxy::fullKeyboardAccessEnabled):
        * UIProcess/WebProcessProxy.h:
        Proxy it to Objective-C code. WebProcessProxy is as good place to have the static function
        as any. One day, we will make code more consistent with language and other global preferences.

        * UIProcess/mac/WKFullKeyboardAccessWatcher.h: Copied from Source/WebKit2/WebProcess/mac/WKFullKeyboardAccessWatcher.h.
        * UIProcess/mac/WKFullKeyboardAccessWatcher.mm: Copied from Source/WebKit2/WebProcess/mac/WKFullKeyboardAccessWatcher.mm.
        * WebProcess/mac/WKFullKeyboardAccessWatcher.h: Removed.
        * WebProcess/mac/WKFullKeyboardAccessWatcher.mm: Removed.
        (-[WKFullKeyboardAccessWatcher retrieveKeyboardUIModeFromPreferences:]): Once retrieved,
        push the preference value.

        * WebKit2.xcodeproj/project.pbxproj: WKFullKeyboardAccessWatcher is now in UI process.

        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::fullKeyboardAccessModeChanged):
        (WebKit::WebProcess::fullKeyboardAccessEnabled):
        * WebProcess/mac/WebProcessMac.mm:
        WebCprocess now holds the preference value in a mamber value, which UI process pushes
        updates to.

        * WebProcess/WebProcess.messages.in: Added a message for changes preference value.

        * WebProcess/com.apple.WebProcess.sb: We no longer need read access to com.apple.universalaccess.plist.

2011-11-07  Anders Carlsson  <andersca@apple.com>

        Add TiledCoreAnimationDrawingArea stub classes
        https://bugs.webkit.org/show_bug.cgi?id=71729

        Reviewed by Sam Weinig.

        * Shared/DrawingAreaInfo.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _shouldUseTiledDrawingArea]):
        (-[WKView WebKit::]):
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h: Copied from Source/WebKit2/Shared/DrawingAreaInfo.h.
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm: Copied from Source/WebKit2/WebProcess/WebPage/DrawingArea.cpp.
        (WebKit::TiledCoreAnimationDrawingAreaProxy::create):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::TiledCoreAnimationDrawingAreaProxy):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::~TiledCoreAnimationDrawingAreaProxy):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::deviceScaleFactorDidChange):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::sizeDidChange):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: Copied from Source/WebKit2/WebProcess/WebPage/DrawingArea.cpp.
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Copied from Source/WebKit2/WebProcess/WebPage/DrawingArea.cpp.
        (WebKit::TiledCoreAnimationDrawingArea::create):
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        (WebKit::TiledCoreAnimationDrawingArea::~TiledCoreAnimationDrawingArea):
        (WebKit::TiledCoreAnimationDrawingArea::setNeedsDisplay):
        (WebKit::TiledCoreAnimationDrawingArea::scroll):
        (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer):
        (WebKit::TiledCoreAnimationDrawingArea::scheduleCompositingLayerSync):

2011-11-07  Anders Carlsson  <andersca@apple.com>

        Follow-up build fix.

        * WebProcess/WebPage/DrawingAreaImpl.h:

2011-11-07  Anders Carlsson  <andersca@apple.com>

        Remove unused DrawingArea::syncCompositingLayers
        https://bugs.webkit.org/show_bug.cgi?id=71717

        Reviewed by John Sullivan.

        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        * WebProcess/WebPage/TiledDrawingArea.h:

2011-11-07  Anders Carlsson  <andersca@apple.com>

        Rename NetscapePlugin::wantsWindowRelativeNPWindowCoordinates to NetscapePlugin::wantsPluginRelativeNPWindowCoordinates
        https://bugs.webkit.org/show_bug.cgi?id=71708

        Reviewed by Sam Weinig.

        The name wantsPluginRelativeNPWindowCoordinates is more clear than wantsWindowRelativeNPWindowCoordinates. Rename the functions
        everywhere and, since the meaning is now inverted, invert the checks and return values.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::callSetWindow):
        (WebKit::NetscapePlugin::geometryDidChange):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/NetscapePluginNone.cpp:
        (WebKit::NetscapePlugin::wantsPluginRelativeNPWindowCoordinates):
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::wantsPluginRelativeNPWindowCoordinates):
        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::NetscapePlugin::wantsPluginRelativeNPWindowCoordinates):
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePlugin::wantsPluginRelativeNPWindowCoordinates):

2011-11-07  Anders Carlsson  <andersca@apple.com>

        NetscapePlugin::wantsWindowRelativeNPWindowCoordinates should return false on Mac
        https://bugs.webkit.org/show_bug.cgi?id=71707

        Reviewed by Sam Weinig.

        This changes the way the fake Carbon plug-in window is positioned, so that it's always the same size
        and location as the plug-in (relative to the screen).

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformGeometryDidChange):
        Call updateFakeWindowBounds.

        (WebKit::NetscapePlugin::updateFakeWindowBounds):
        Convert the plug-in position to screen coordinates and set the window bounds to be the location and
        size of the plug-in, where the location is relative to the screen.

        (WebKit::NetscapePlugin::wantsWindowRelativeNPWindowCoordinates):
        Return false.

        (WebKit::NetscapePlugin::windowAndViewFramesChanged):
        Call updateFakeWindowBounds.

2011-11-07  Sam Weinig  <sam@webkit.org>

        WKPage.h should be in PrivateHeaders.

        Rubber-stamped by Anders Carlsson.

        * WebKit2.xcodeproj/project.pbxproj:
        Mark WKPage.h private.

2011-11-07  Anders Carlsson  <andersca@apple.com>

        Simplify NetscapePlugin::convertPoint and make it work (in theory) with transformed plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=71699

        Reviewed by Sam Weinig.

        Add a getScreenTransform function which given a coordinate space returns a transform that converts a
        point from that coordinate space to the screen coordinate space. We then get the source -> screen transform
        and the destination -> screen transform. We invert the destination -> screen transform, multiply it with the
        source -> screen transform and use mapPoint to get a complete affine transform from the source to the destination space
        and use mapPoint to map the source point and return the destination point.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::getScreenTransform):
        (WebKit::NetscapePlugin::convertPoint):

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::initializePlugin):
        Call windowAndViewFramesChanged before viewGeometryDidChange so that the window and view frames will be up to date by
        the time NPP_SetWindow is called in the plug-in.

2011-11-07  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Put handling of gestures and their interaction in one place
        https://bugs.webkit.org/show_bug.cgi?id=71682

        Reviewed by Simon Hausmann.

        Before this patch, the interaction (ie. cancelling animations, events)
        was handled in the respective recognizers which then knew about each
        others.

        * UIProcess/qt/QtGestureRecognizer.h:
        (WebKit::QtGestureRecognizer::isRecognized):
        * UIProcess/qt/QtPanGestureRecognizer.cpp:
        (WebKit::QtPanGestureRecognizer::recognize):
        * UIProcess/qt/QtPanGestureRecognizer.h:
        * UIProcess/qt/QtPinchGestureRecognizer.cpp:
        (WebKit::QtPinchGestureRecognizer::recognize):
        * UIProcess/qt/QtPinchGestureRecognizer.h:
        * UIProcess/qt/QtTouchWebPageProxy.cpp:
        (QtTouchWebPageProxy::QtTouchWebPageProxy):
        (QtTouchWebPageProxy::doneWithTouchEvent):
        * UIProcess/qt/QtTouchWebPageProxy.h:
        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::QtViewportInteractionEngine::pagePositionRequest):
        (WebKit::QtViewportInteractionEngine::ensureContentWithinViewportBoundary):
        (WebKit::QtViewportInteractionEngine::scrollAnimationActive):
        (WebKit::QtViewportInteractionEngine::interruptScrollAnimation):
        (WebKit::QtViewportInteractionEngine::panGestureActive):
        (WebKit::QtViewportInteractionEngine::scaleAnimationActive):
        (WebKit::QtViewportInteractionEngine::interruptScaleAnimation):
        (WebKit::QtViewportInteractionEngine::pinchGestureActive):
        * UIProcess/qt/QtViewportInteractionEngine.h:

2011-11-07  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Make it possible to include qdesktopwebview.h from apps

        Reviewed by Tor Arne Vestbø.

        * UIProcess/API/qt/qdesktopwebview.h: Don't include C API headers, forward
        declare the structs manually.

2011-11-07  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix failing inspector tests after build system changes
        https://bugs.webkit.org/show_bug.cgi?id=71677

        Reviewed by Tor Arne Vestbø.

        Ensure symbols from the qt resource system are referenced
        from outside the static webcore library. One way of doing that is
        to initialize the resources right away, as explained in the documentation
        of th Qt resource system.

        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (initResources):
        (WebKit::WebPage::platformInitialize):

2011-11-03  Anders Carlsson  <andersca@apple.com>

        Add NetscapePlugin::convertFromRootView
        https://bugs.webkit.org/show_bug.cgi?id=71526

        Reviewed by Sam Weinig.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::convertFromRootView):
        New function that converts a point from root view coordinates to plug-in coordinates.
        Returns false if the conversion can't be done.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::fillInCocoaEventFromMouseEvent):
        (WebKit::initializeMouseEvent):
        (WebKit::NetscapePlugin::platformHandleMouseEvent):
        (WebKit::NetscapePlugin::platformHandleWheelEvent):
        (WebKit::NetscapePlugin::platformHandleMouseEnterEvent):
        (WebKit::NetscapePlugin::platformHandleMouseLeaveEvent):
        Use convertFromRootView instead of subtracting m_frameRectInWindowCoordinates.location() from the
        event position (which is in root view coordinates).

2011-11-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Refactor and clean up the qmake build system

        The qmake build system has accumulated a bit of cruft and redundancy
        over time. There's also a fairly tight coupling between how to build
        the various targets, and _what_ to build, making it harder to add new
        rules or sources. This patch aims to elevate these issues somewhat.

        This is a short-list of the changes:

          * The rules for how to build targets are now mostly contained as
            prf-files in Tools/qmake/mkspecs/features. Using mkspecs also
            allows us to do pre- and post-processing of each project file,
            which helps to clean up the actual project files.

          * Derived sources are no longer generated as a separate make-step
            but is part of each target's project file as a subdir. Makefile
            rules are used to ensure that we run make on the derived sources
            before running qmake on the actual target makefile. This makes
            it easier to keep a proper dependency between derived sources
            and the target.

          * We use GNU make and the compiler to generate dependencies on
            UNIX-based systems running Qt 5. This allows us to lessen the
            need to run qmake, which should reduce compile time.

          * WebKit2 is now build by default if building with Qt 5. It can
            be disabled by passing --no-webkit2 to build-webkit.

        The result of these changes are hopefully a cleaner and easier
        build system to modify, and faster build times due to no longer
        running qmake on every single build. It's also a first step
        towards possibly generating the list of sources using another
        build system.

        https://bugs.webkit.org/show_bug.cgi?id=71222

        Reviewed by Simon Hausmann.

        * DerivedSources.pri: Renamed from Source/WebKit2/DerivedSources.pro.
        * Target.pri: Copied from Source/WebKit2/WebKit2.pro.
        * UIProcess/API/qt/tests/tests.pri:
        * UIProcess/API/qt/tests/tests.pro: Removed.
        * WebKit2.pri:
        * WebKit2.pro:
        * WebKit2API.pri: Removed.
        * WebProcess.pro:

2011-11-04  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Support programmatic scrolling with the QTouchWebView

        Reviewed by Simon Hausmann.

        As more code can be shared between the programmatic scrolling and the
        method for ensuring that the contents are within valid bounds, this
        patch includes a bit of refactoring as well.

        * UIProcess/API/qt/qdesktopwebview_p.h:
        (QDesktopWebViewPrivate::scrollPositionRequested):
        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebViewPrivate::scrollPositionRequested):
        * UIProcess/API/qt/qtouchwebview_p.h:
        * UIProcess/qt/QtTouchViewInterface.cpp:
        (WebKit::QtTouchViewInterface::scrollPositionRequested):
        * UIProcess/qt/QtTouchViewInterface.h:
        * UIProcess/qt/QtViewInterface.h:
        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::QtViewportInteractionEngine::event):
        (WebKit::boundPosition):
        (WebKit::QtViewportInteractionEngine::pagePositionRequest):
        (WebKit::QtViewportInteractionEngine::computePosRangeForItemAtScale):
        (WebKit::QtViewportInteractionEngine::ensureContentWithinViewportBoundary):
        (WebKit::QtViewportInteractionEngine::setConstraints):
        (WebKit::QtViewportInteractionEngine::pinchGestureEnded):
        (WebKit::QtViewportInteractionEngine::contentViewportChanged):
        * UIProcess/qt/QtViewportInteractionEngine.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::pageDidRequestScroll):
        * UIProcess/qt/QtWebPageProxy.h:

2011-11-03  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSObject::getPropertyNames
        https://bugs.webkit.org/show_bug.cgi?id=71306

        Reviewed by Darin Adler.

        Added getPropertyNames to the MethodTable, changed all the virtual 
        implementations of getPropertyNames to static ones, and replaced 
        all call sites with corresponding lookups in the MethodTable.

        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::NPJSObject::enumerate):

2011-11-03  Anders Carlsson  <andersca@apple.com>

        Get rid of NetscapePlugin::m_clipRectInWindowCoordinates
        https://bugs.webkit.org/show_bug.cgi?id=71521

        Reviewed by Dan Bernstein.

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

2011-11-03  Anders Carlsson  <andersca@apple.com>

        Use convertToRootView(IntPoint()) instead of m_frameRectInWindowCoordinates.location() where possible
        https://bugs.webkit.org/show_bug.cgi?id=71520

        Reviewed by Dan Bernstein.

        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::NetscapePlugin::scheduleWindowedGeometryUpdate):
        (WebKit::NetscapePlugin::platformPaint):
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePlugin::platformHandleMouseEvent):
        (WebKit::NetscapePlugin::platformHandleWheelEvent):
        (WebKit::NetscapePlugin::platformHandleMouseEnterEvent):
        (WebKit::NetscapePlugin::platformHandleMouseLeaveEvent):

2011-11-03  Anders Carlsson  <andersca@apple.com>

        Add NetscapePlugin::convertToRootView
        https://bugs.webkit.org/show_bug.cgi?id=71519

        Reviewed by Darin Adler.

        Yet another step towards eliminating uses of m_frameRectInWindowCoordinates.

        Also, use the "root view" terminology, since that's really what we mean here.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::callSetWindow):
        Use convertToRootView to get the plug-in location and clip rect in root view coordinates.

        (WebKit::NetscapePlugin::convertToRootView):
        Apply the m_pluginToRootViewTransform.mapPoint transform.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        Add convertToRootView.

2011-11-03  Anders Carlsson  <andersca@apple.com>

        Move plug-in size and backing store checks to PluginProxy::updateBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=71508

        Reviewed by Darin Adler.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::geometryDidChange):
        Remove code to send back an empty backing store if the plug-in size is empty
        or doesn't need a backing store. This check is now done...

        (WebKit::PluginProxy::updateBackingStore):
        ...here.

2011-11-03  Anders Carlsson  <andersca@apple.com>

        Get rid of PluginControllerProxy::m_frameRectInWindowCoordinates
        https://bugs.webkit.org/show_bug.cgi?id=71506

        Reviewed by Darin Adler.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::geometryDidChange):
        This no longer needs to take the frame rect in window coordinates.

        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginControllerProxy.messages.in:
        Remove frameRectInWindowCoordinates from the GeometryDidChange message.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::geometryDidChange):
        Don't pass frameRectInWindowCoordinates when sending GeometryDidChange.

2011-11-03  Anders Carlsson  <andersca@apple.com>

        Get rid of Plugin::wantsWindowRelativeCoordinates()
        https://bugs.webkit.org/show_bug.cgi?id=71504

        Reviewed by Darin Adler.

        Since all Plugin subclasses now return false for wantsWindowRelativeCoordinates,
        we can go ahead and remove it.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::paint):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::snapshot):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/PDF/BuiltInPDFView.cpp:
        * WebProcess/Plugins/PDF/BuiltInPDFView.h:
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::paint):

2011-11-03  Anders Carlsson  <andersca@apple.com>

        NetscapePlugin::wantsWindowRelativeCoordinates should return false for all ports
        https://bugs.webkit.org/show_bug.cgi?id=71501

        Reviewed by Darin Adler.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::wantsWindowRelativeCoordinates):
        Return false.

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePlugin::platformGeometryDidChange):
        Use m_pluginSize instead of m_frameRectInWindowCoordinates.size().

        (WebKit::NetscapePlugin::platformPaint):
        No need to translate back and forth between window and plug-in relative coordinates anymore.

2011-11-03  Darin Adler  <darin@apple.com>

        Change remaining callers of releaseRef to call leakRef
        https://bugs.webkit.org/show_bug.cgi?id=71422

        Reviewed by Darin Fisher.

        * Platform/mac/ModuleMac.mm:
        (WebKit::Module::load):
        * Shared/API/c/WKArray.cpp:
        (WKArrayCreate):
        * Shared/API/c/WKData.cpp:
        (WKDataCreate):
        * Shared/API/c/WKDictionary.cpp:
        (WKDictionaryCopyKeys):
        * Shared/API/c/WKGeometry.cpp:
        (WKPointCreate):
        (WKSizeCreate):
        (WKRectCreate):
        * Shared/API/c/WKMutableArray.cpp:
        (WKMutableArrayCreate):
        * Shared/API/c/WKMutableDictionary.cpp:
        (WKMutableDictionaryCreate):
        * Shared/API/c/WKNumber.cpp:
        (WKBooleanCreate):
        (WKDoubleCreate):
        (WKUInt64Create):
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toCopiedAPI):
        (WebKit::toCopiedURLAPI):
        * Shared/API/c/cf/WKErrorCF.cpp:
        (WKErrorCreateWithCFError):
        * Shared/API/c/cf/WKURLRequestCF.cpp:
        (WKURLRequestCreateWithCFURLRequest):
        * Shared/API/c/cf/WKURLResponseCF.cpp:
        (WKURLResponseCreateWithCFURLResponse):
        * Shared/API/c/mac/WKURLRequestNS.mm:
        (WKURLRequestCreateWithNSURLRequest):
        * Shared/API/c/mac/WKURLResponseNS.mm:
        (WKURLResponseCreateWithNSURLResponse):
        * Shared/cf/ArgumentCodersCF.cpp:
        (CoreIPC::decode):
        * UIProcess/API/C/WKBackForwardList.cpp:
        (WKBackForwardListCopyBackListWithLimit):
        (WKBackForwardListCopyForwardListWithLimit):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextCreate):
        (WKContextCreateWithInjectedBundlePath):
        * UIProcess/API/C/WKCredential.cpp:
        (WKCredentialCreate):
        (WKCredentialCreateWithCertificateInfo):
        * UIProcess/API/C/WKDatabaseManager.cpp:
        (WKDatabaseManagerGetOriginKey):
        (WKDatabaseManagerGetOriginQuotaKey):
        (WKDatabaseManagerGetOriginUsageKey):
        (WKDatabaseManagerGetDatabaseDetailsKey):
        (WKDatabaseManagerGetDatabaseDetailsNameKey):
        (WKDatabaseManagerGetDatabaseDetailsDisplayNameKey):
        (WKDatabaseManagerGetDatabaseDetailsExpectedUsageKey):
        (WKDatabaseManagerGetDatabaseDetailsCurrentUsageKey):
        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameCopyChildFrames):
        * UIProcess/API/C/WKGeolocationPosition.cpp:
        (WKGeolocationPositionCreate):
        * UIProcess/API/C/WKGrammarDetail.cpp:
        (WKGrammarDetailCreate):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetSessionHistoryURLValueType):
        (WKPageCopySessionState):
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesCreateWithIdentifier):
        * UIProcess/API/C/win/WKView.cpp:
        (WKViewCreate):
        * UIProcess/win/WebUndoClient.cpp:
        (WebKit::WebUndoClient::registerEditCommand):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameCopyChildFrames):
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleCreate):
        (WKBundleNodeHandleCopyDocument):
        (WKBundleNodeHandleCopyHTMLTableCellElementCellAbove):
        (WKBundleNodeHandleCopyDocumentFrame):
        (WKBundleNodeHandleCopyHTMLFrameElementContentFrame):
        (WKBundleNodeHandleCopyHTMLIFrameElementContentFrame):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCopyTrackedRepaintRects):
        * WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.cpp:
        (WKBundleScriptWorldCreateWorld):
        Use leakRef.

2011-11-02  Darin Adler  <darin@apple.com>

        Change remaining callers of releaseRef to call leakRef
        https://bugs.webkit.org/show_bug.cgi?id=71422

        Reviewed by Darin Fisher.

        * Platform/mac/ModuleMac.mm:
        (WebKit::Module::load): Use leakRef.
        (WebKit::Module::unload): Use leakRef, and cast to void
        to avoid unused return value warning.

        * Shared/API/c/WKArray.cpp:
        (WKArrayCreate):
        * Shared/API/c/WKData.cpp:
        (WKDataCreate):
        * Shared/API/c/WKDictionary.cpp:
        (WKDictionaryCopyKeys):
        * Shared/API/c/WKGeometry.cpp:
        (WKPointCreate):
        (WKSizeCreate):
        (WKRectCreate):
        * Shared/API/c/WKMutableArray.cpp:
        (WKMutableArrayCreate):
        * Shared/API/c/WKMutableDictionary.cpp:
        (WKMutableDictionaryCreate):
        * Shared/API/c/WKNumber.cpp:
        (WKBooleanCreate):
        (WKDoubleCreate):
        (WKUInt64Create):
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toCopiedAPI):
        (WebKit::toCopiedURLAPI):
        * Shared/API/c/cf/WKErrorCF.cpp:
        (WKErrorCreateWithCFError):
        * Shared/API/c/cf/WKURLRequestCF.cpp:
        (WKURLRequestCreateWithCFURLRequest):
        * Shared/API/c/cf/WKURLResponseCF.cpp:
        (WKURLResponseCreateWithCFURLResponse):
        * Shared/API/c/mac/WKURLRequestNS.mm:
        (WKURLRequestCreateWithNSURLRequest):
        * Shared/API/c/mac/WKURLResponseNS.mm:
        (WKURLResponseCreateWithNSURLResponse):
        * Shared/cf/ArgumentCodersCF.cpp:
        (CoreIPC::decode):
        * UIProcess/API/C/WKBackForwardList.cpp:
        (WKBackForwardListCopyBackListWithLimit):
        (WKBackForwardListCopyForwardListWithLimit):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextCreate):
        (WKContextCreateWithInjectedBundlePath):
        * UIProcess/API/C/WKCredential.cpp:
        (WKCredentialCreate):
        (WKCredentialCreateWithCertificateInfo):
        * UIProcess/API/C/WKDatabaseManager.cpp:
        (WKDatabaseManagerGetOriginKey):
        (WKDatabaseManagerGetOriginQuotaKey):
        (WKDatabaseManagerGetOriginUsageKey):
        (WKDatabaseManagerGetDatabaseDetailsKey):
        (WKDatabaseManagerGetDatabaseDetailsNameKey):
        (WKDatabaseManagerGetDatabaseDetailsDisplayNameKey):
        (WKDatabaseManagerGetDatabaseDetailsExpectedUsageKey):
        (WKDatabaseManagerGetDatabaseDetailsCurrentUsageKey):
        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameCopyChildFrames):
        * UIProcess/API/C/WKGeolocationPosition.cpp:
        (WKGeolocationPositionCreate):
        * UIProcess/API/C/WKGrammarDetail.cpp:
        (WKGrammarDetailCreate):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetSessionHistoryURLValueType):
        (WKPageCopySessionState):
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesCreateWithIdentifier):
        * UIProcess/API/C/win/WKView.cpp:
        (WKViewCreate):
        * UIProcess/win/WebUndoClient.cpp:
        (WebKit::WebUndoClient::registerEditCommand):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameCopyChildFrames):
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleCreate):
        (WKBundleNodeHandleCopyDocument):
        (WKBundleNodeHandleCopyHTMLTableCellElementCellAbove):
        (WKBundleNodeHandleCopyDocumentFrame):
        (WKBundleNodeHandleCopyHTMLFrameElementContentFrame):
        (WKBundleNodeHandleCopyHTMLIFrameElementContentFrame):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCopyTrackedRepaintRects):
        * WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.cpp:
        (WKBundleScriptWorldCreateWorld):
        Use leakRef.

2011-11-03  Anders Carlsson  <andersca@apple.com>

        NetscapePlugin should use plug-in relative coordinates on Mac
        https://bugs.webkit.org/show_bug.cgi?id=71486

        Reviewed by Adam Roben.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::paint):
        Don't translate the graphics context when the plug-in doesn't want window relative coordinates.
        This also fixed a bug I introduced in my previous commit where we'd always pass the dirty rect in
        plug-in coordinates even if the plug-in wants window relative coordinates.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::snapshot):
        Don't do the whole translate dance if the plug-in doesn't want window relative coordinates.

        (WebKit::NetscapePlugin::wantsWindowRelativeCoordinates):
        Return false for PLATFORM_ARCHITECTURE(MAC).

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformPaint):
        Simplify code now that we know that the we're always given plug-in relative coordinates.

2011-11-03  Anders Carlsson  <andersca@apple.com>

        PluginControllerProxy's dirty rect should be in plug-in coordinates
        https://bugs.webkit.org/show_bug.cgi?id=71481

        Reviewed by Sam Weinig.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::paint):
        Convert the dirty rect to window coordinates before passing it to the plug-in.

        (WebKit::PluginControllerProxy::invalidate):
        No need to convert the dirty rect to window coordinates.

        (WebKit::PluginControllerProxy::paintEntirePlugin):
        Use m_pluginSize instead of m_frameRectInWindowCoordinates.isEmpty.

2011-11-03  Anders Carlsson  <andersca@apple.com>

        Use the right function to determine whether NPWindow coordinates should be window relative
        https://bugs.webkit.org/show_bug.cgi?id=71480

        Reviewed by Adam Roben.

        We want to use wantsWindowRelativeNPWindowCoordinates here, and not wantsWindowRelativeCoordinates
        which is a temporary function that will be removed (and that returns the wrong value!)

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::geometryDidChange):

2011-11-03  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed build fix after r99195.

        The right name is restrictMinimumScaleFactorToViewportSize.

        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebViewPrivate::updateViewportConstraints):

2011-11-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use WEBKIT_API instead of WK_EXPORT in WebKitEnumTypes.h
        https://bugs.webkit.org/show_bug.cgi?id=71457

        Reviewed by Martin Robinson.

        * GNUmakefile.am:

2011-11-03  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Bounce back limits are wrong in some situations
        https://bugs.webkit.org/show_bug.cgi?id=71471

        Reviewed by Simon Hausmann.

        The valid position points were in viewport coordinates, but we were
        requiring valid position points in content coordinates.

        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::QtViewportInteractionEngine::animateContentIntoBoundariesIfNeeded):

2011-11-03  Fady Samuel  <fsamuel@chromium.org>

        Removing line in computeViewportAttributes that enforces a minimum scale factor to never allow zooming out more than viewport
        https://bugs.webkit.org/show_bug.cgi?id=70609

        Reviewed by Kenneth Rohde Christiansen.

        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebViewPrivate::updateViewportConstraints):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::viewportConfigurationAsText):

2011-11-03  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Fix the signal signature of the loadFailed API test.

        Rubber-stamped by Simon Hausmann.

        * UIProcess/API/qt/tests/commonviewtests/webviewabstraction.cpp:
        (WebViewAbstraction::touchViewLoadFailed):
        (WebViewAbstraction::desktopViewLoadFailed):

2011-11-03  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Fix an assertion under WebPage::setViewportSize.
        https://bugs.webkit.org/show_bug.cgi?id=71473

        Reviewed by Simon Hausmann.

        The web view can have an empty size and it causes the assert in computeViewportAttributes.
        Don't notify the web page of such a size change in this case.

        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebViewPrivate::updateViewportSize):

2011-11-03  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [WK2] State variable name refactor in WebPageProxy.cpp
        https://bugs.webkit.org/show_bug.cgi?id=71467

        Reviewed by Andreas Kling.

        Renaming m_inDecidePolicyForMIMEType to m_inDecidePolicyForResponse after
        https://bugs.webkit.org/show_bug.cgi?id=55827 .

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        * UIProcess/WebPageProxy.h:

2011-11-03  Nayan Kumar K  <nayankk@motorola.com>

        [GTK][WEBKIT2] Add support for title property in WebKitWebView.
        https://bugs.webkit.org/show_bug.cgi?id=68074

        Reviewed by Philippe Normand.

        Support for 'title' property is added in WebKitWebView.
        Functions to get the value of this property is provided.

        * UIProcess/API/gtk/WebKitWebLoaderClient.cpp:
        (didReceiveTitleForFrame): LoaderClient titleRecieve callback.
        (webkitWebLoaderClientAttachLoaderClientToPage): Register didReceiveTitleForFrame callback.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewGetProperty): 'title' property get function.
        (webkit_web_view_class_init): Register new property.
        (webkitWebViewSetTitle): Notify WebKitWebView about title receive.
        (webkit_web_view_get_title): API to get main frame title.
        * UIProcess/API/gtk/WebKitWebView.h: webkit_web_view_get_title API expose.
        * UIProcess/API/gtk/WebKitWebViewPrivate.h: Added private API.
        * UIProcess/API/gtk/tests/TestWebKitWebLoaderClient.cpp:
        (testWebViewTitle): Test webkit_web_view_get_title API.
        (beforeAll): Add testWebViewTitle test.

2011-11-03  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt][WK2] Download support and API in UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=68962

        Reviewed by Simon Hausmann.

        We implement our WkContextDownloadClient and the needed callbacks.
        We also add APIs by exposing QWebDownloadItem. Objects from this type
        have their ownership handled by QDesktopWebView and will be created or
        destroyed as needed. Classes implementing ViewInterface (QDesktopWebViewPrivate
        and TouchViewInterface) will receive a signal (downloadRequested) with a pointer
        to the recently created QWebDownloadItem. With that they can connect the proper
        signals and slots, set the download destination path and then call start().
        Objects of this type will provide the progress of a download, a slot to cancel it,
        and signals for getting finished or failure status.
        QWebDownloadItem was also exposed in QML.
        Qt needed an asynchronous way for UIProcess to return a destination path to WebProcess,
        therefore the startTransfer API was added to WebKit2's Download handlers.

        * Shared/qt/WebCoreArgumentCodersQt.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        Add encoding and decoding of suggestedFilename for ResourceResponse.

        * UIProcess/API/qt/WKView.h:
        * UIProcess/API/qt/qbasewebview.h: Add signal downloadRequested.
        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebViewPrivate::downloadRequested):
        * UIProcess/API/qt/qdesktopwebview_p.h:

        * UIProcess/API/qt/qwebdownloaditem.cpp: Added.
        (QWebDownloadItemPrivate::QWebDownloadItemPrivate):
        (QWebDownloadItem::QWebDownloadItem):
        (QWebDownloadItem::~QWebDownloadItem):
        (QWebDownloadItem::url):
        (QWebDownloadItem::destinationPath):
        (QWebDownloadItem::setDestinationPath):
        (QWebDownloadItem::suggestedFilename):
        (QWebDownloadItem::mimeType):
        (QWebDownloadItem::expectedContentLength):
        (QWebDownloadItem::totalBytesReceived):
        (QWebDownloadItem::cancel):
        (QWebDownloadItem::start):
        * UIProcess/API/qt/qwebdownloaditem.h: Added.
        * UIProcess/API/qt/qwebdownloaditem_p.h: Added.
        (QWebDownloadItemPrivate::didReceiveResponse):

        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_download.qml: Added.
        * UIProcess/API/qt/tests/qmltests/common/download.html: Added.
        * UIProcess/API/qt/tests/qmltests/common/download.zip: Added.
        * UIProcess/API/qt/tests/qmltests/qmltests.pro:

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::startTransfer): Qt only function added.
        * UIProcess/Downloads/DownloadProxy.h:

        * UIProcess/PageClient.h: Added Qt specific function to call handleDownloadRequest from QtWebPageProxy.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::download):
        Using WebPageProxy::handleDownloadRequest to bootstrap a download through PageClient.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        Using handleDownloadRequest() to bootstrap a download through PageClient.
        (WebKit::WebPageProxy::handleDownloadRequest): Calls PageClient::handleDownloadRequest().
        * UIProcess/WebPageProxy.h:

        * UIProcess/qt/QtDownloadManager.cpp: Added.
        (WebKit::toQtDownloadManager):
        (WebKit::qt_wk_didReceiveResponse):
        (WebKit::qt_wk_didCreateDestination):
        (WebKit::qt_wk_didFinishDownload):
        (WebKit::qt_wk_didFailDownload):
        (WebKit::qt_wk_didReceiveDataForDownload):
        (QtDownloadManager::downloadReceivedResponse): Will reach QtWebPageProxy::didReceiveDownloadResponse.
        (QtDownloadManager::downloadCreatedDestination):
        (QtDownloadManager::downloadFinished):
        (QtDownloadManager::downloadFailed):
        (QtDownloadManager::downloadDataReceived):
        * UIProcess/qt/QtDownloadManager.h: Added.
        Bootstrap our WKContextDownloadClient and set its callbacks.
        This entity will also handle all downloads and keep a map of them.
        It will be kept alive together with the WebContext as a static member
        of QtWebPageProxy, so we can keep it across several WebPages and, therefore,
        WebViews.

        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::defaultWKContext):
        (QtWebPageProxy::~QtWebPageProxy):
        (QtWebPageProxy::handleDownloadRequest):
        (QtWebPageProxy::didReceiveDownloadResponse):
        * UIProcess/qt/QtWebPageProxy.h:
        From now on it will keep a static QtDownloadManager to live together
        with the default WebContext. It implements PageClient::handleDownloadRequest.
        QtWebPageProxy::didReceiveDownloadResponse will emit the view's signal downloadRequested.

       * UIProcess/qt/QtTouchViewInterface.h:
        (WebKit::QtTouchViewInterface::downloadRequested):
        * UIProcess/qt/QtViewInterface.h:

        * UIProcess/qt/qweberror.cpp:
        (QWebError::description):
        * UIProcess/qt/qweberror.h:
        (QWebError::errorCodeAsDownloadError):
        Add Download error handling to QWebError and a new API
        to retrieve the error description from the original ResourceError.
        Also, it now has QWebDownloadItem::DownloadError errorCodeAsDownloadError()
        that returns the error code as a DownloadError.

        * WebKit2.pro:
        * WebKit2API.pri:

        * WebProcess/Downloads/Download.h:
        * WebProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startTransfer):
        * WebProcess/Downloads/DownloadManager.h:
        Adding Qt specific startTransfer function.

        * WebProcess/Downloads/qt/DownloadQt.cpp:
        (WebKit::Download::start):
        (WebKit::Download::startWithHandle):
        (WebKit::Download::didDecideDestination):
        (WebKit::Download::startTransfer):
        * WebProcess/Downloads/qt/QtFileDownloader.cpp:
        (WebKit::QtFileDownloader::init): start() was renamed to init().
        (WebKit::QtFileDownloader::determineFilename):
        Calling onReadyRead() here was unnecessary and it was triggering the overall
        download process even before DownloadManager finished startDownload(). This
        was leading to a DownloadManager with an empty list of downloads.
        (WebKit::QtFileDownloader::startTransfer): decidedDestination() became startTransfer().
        (WebKit::QtFileDownloader::abortDownloadWritingAndEmitError):
        (WebKit::QtFileDownloader::handleDownloadResponse):
        (WebKit::QtFileDownloader::onReadyRead):
        (WebKit::QtFileDownloader::onFinished):
        (WebKit::QtFileDownloader::cancel):
        * WebProcess/Downloads/qt/QtFileDownloader.h:

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::startTransfer):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        Adding Qt specific message StartTransfer and handling function.

2011-11-03  Nayan Kumar K  <nayankk@motorola.com>

        Add webkit_web_view_load_html and webkit_web_view_load_plain_text APIs.
        https://bugs.webkit.org/show_bug.cgi?id=69249

        Reviewed by Philippe Normand.

        This patch adds support for 2 more load APIs, namely
        webkit_web_view_load_html and webkit_web_view_load_plain_text.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_load_html): New API to load html string.
        (webkit_web_view_load_plain_text): New API to load plain text.
        * UIProcess/API/gtk/WebKitWebView.h: Public API addition.
        * UIProcess/API/gtk/tests/TestWebKitWebLoaderClient.cpp:
        (testLoadHtml): Test webkit_web_view_load_html API.
        (testLoadPlainText): Test webkit_web_view_load_plain_text API.
        (beforeAll): Add new tests.
        * UIProcess/API/gtk/tests/WebViewTest.cpp:
        (WebViewTest::loadHtml): Test webkit_web_view_load_html API.
        (WebViewTest::loadPlainText): Test webkit_web_view_load_plain_text API.
        * UIProcess/API/gtk/tests/WebViewTest.h:

2011-11-03  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][WK2] Failing assertion with desktop webview when touch mocking in MinBrowser
        https://bugs.webkit.org/show_bug.cgi?id=71452

        Reviewed by Andreas Kling.

        Don't re-implement touchEvent(), we don't intend to support touch events as we
        receive them from the QQuickCanvas at this point.

        * UIProcess/API/qt/qdesktopwebview.cpp:
        * UIProcess/API/qt/qdesktopwebview.h:

2011-11-03  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] [WK2] MiniBrowser assert in QtWebProccess on startup in debug build.
        https://bugs.webkit.org/show_bug.cgi?id=71196

        Reviewed by Kenneth Rohde Christiansen.

        Ensure AC is turned off for the desktop view before we launch the process.
        This avoids "accidential" enterAc/exitAc calls that cause failing assertions
        because we don't really support AC in this setup.

        The touch side works the same way, i.e. enable the preference before calling
        init().

        * UIProcess/qt/QtDesktopWebPageProxy.cpp:
        (QtDesktopWebPageProxy::QtDesktopWebPageProxy):

2011-11-03  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] X11 plugins need to be reworked for Qt5
        https://bugs.webkit.org/show_bug.cgi?id=70023

        Reviewed by Simon Hausmann.

        Disable X11 plugins.
        * config.h:

2011-11-03  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed Qt build fix(es).

        * UIProcess/qt/QtDesktopWebPageProxy.cpp:
        (QtDesktopWebPageProxy::handleDragMoveEvent): Adapt to dragSession API change.
        (QtDesktopWebPageProxy::handleDropEvent): Ditto.
        * WebProcess/Plugins/Netscape/NetscapePluginNone.cpp:
        (WebKit::NetscapePlugin::wantsWindowRelativeNPWindowCoordinates): Implement here
        also, for plugin-disabled builds.

2011-11-03  ChangSeok Oh  <shivamidow@gmail.com>

        [GTK] Fix build-break on r99143
        https://bugs.webkit.org/show_bug.cgi?id=71440

        Reviewed by Philippe Normand.

        dragOperation() should be replaced with dragSession().operation since it was removed.
        And didDetectXSSForFrame of WKPageLoaderClient should be relocated.

        * UIProcess/API/gtk/WebKitWebLoaderClient.cpp:
        (webkitWebLoaderClientAttachLoaderClientToPage):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDragDataReceived):
        (webkitWebViewBaseDragMotion):

2011-11-03  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        [Qt] Flagging usage of X11 headers under PLAT_ARCH(X11)
        https://bugs.webkit.org/show_bug.cgi?id=71409

        Reviewed by Simon Hausmann.

        Build fix for building qtwebkit with latest qt5 which has removed Qt X11 headers.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:

2011-11-03  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix after r99093...

        * PluginProcess/PluginControllerProxy.h:

2011-11-02  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        [Qt] [WK] Debug build broken
        https://bugs.webkit.org/show_bug.cgi?id=71417

        Add WKNumber.h for WKBooleanGetTypeID
        Replace WKGetTypeId with WKGetTypeID
        Add initialization for didDetectXSSForFrame member in WKBundlePageLoaderClient
        instance.

        Reviewed by Noam Rosenthal.

        * WebProcess/qt/QtBuiltinBundle.cpp:
        (WebKit::QtBuiltinBundle::handleSetNavigatorQtObjectEnabled):
        * WebProcess/qt/QtBuiltinBundlePage.cpp:
        (WebKit::QtBuiltinBundlePage::QtBuiltinBundlePage):

2011-11-02  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSObject::getOwnPropertyNames
        https://bugs.webkit.org/show_bug.cgi?id=71307

        Reviewed by Darin Adler.

        Added getOwnPropertyNames to the MethodTable, changed all the virtual 
        implementations of getOwnPropertyNames to static ones, and replaced 
        all call sites with corresponding lookups in the MethodTable.

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

2011-11-02  Anders Carlsson  <andersca@apple.com>

        Don't call NPP_SetWindow if the plug-in size or clip rect hasn't changed if the plug-in isn't using window relative coordinates
        https://bugs.webkit.org/show_bug.cgi?id=71418

        Reviewed by Adam Roben.

        This avoids calling into the plug-in when only the plug-in position relative to the window changes.
    
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::geometryDidChange):

2011-11-02  Jon Lee  <jonlee@apple.com>

        Fix syntax error.

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

2011-11-02  Jon Lee  <jonlee@apple.com>

        Fix build error from r99108.

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

2011-11-02  Dean Jackson  <dino@apple.com>

        Add ENABLE_CSS_SHADERS flag
        https://bugs.webkit.org/show_bug.cgi?id=71394

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:

2011-11-02  Anders Carlsson  <andersca@apple.com>

        Allow the various plug-in ports to decide whether NPWindow coordinates should be window-relative
        https://bugs.webkit.org/show_bug.cgi?id=71415

        Reviewed by Darin Adler.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::callSetWindow):
        Remove the PLUGIN_ARCHITECTURE(X11) ifdef and set the NPWindow members
        based on the return value of wantsWindowRelativeNPWindowCoordinates.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::wantsWindowRelativeNPWindowCoordinates):
        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::NetscapePlugin::wantsWindowRelativeNPWindowCoordinates):
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePlugin::wantsWindowRelativeNPWindowCoordinates):
        Add platform specific implementations.

2011-11-02  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        [Qt] [WK] Debug build broken after r99065
        https://bugs.webkit.org/show_bug.cgi?id=71397

        Remove reference to panGestureActive becuase it is not defined anywhere.

        Reviewed by Simon Hausmann.

        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::QtViewportInteractionEngine::panGestureStarted):

2011-11-02  Jon Lee  <jonlee@apple.com>

        Update dragging info on mac when user is dragging files into view
        https://bugs.webkit.org/show_bug.cgi?id=71325
        <rdar://problem/10379193>

        Reviewed by Darin Adler.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView draggingUpdated:]): Based on the DragSession, we update NSDraggingInfo
        to update the badge and dragging formation.

2011-11-02  Jon Lee  <jonlee@apple.com>

        Expand DragController to provide more information about the dragging session
        https://bugs.webkit.org/show_bug.cgi?id=71324
        <rdar://problem/10379175>

        Reviewed by Darin Adler.

        We now pass the DragSession struct from the Web to the UI process, instead of the
        DragOperation enum.

        * Scripts/webkit2/messages.py:
        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView draggingUpdated:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): We now cache the last known DragSession state
        (WebKit::WebPageProxy::didPerformDragControllerAction):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::dragSession):
        (WebKit::WebPageProxy::resetDragOperation):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::keyStateToDragOperation):
        (WebKit::WebView::DragEnter):
        (WebKit::WebView::DragOver):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performDragControllerAction):

2011-11-02  Anders Carlsson  <andersca@apple.com>

        Get rid of Plugin::deprecatedGeometryDidChange
        https://bugs.webkit.org/show_bug.cgi?id=71411

        Reviewed by Sam Weinig.

        Now that all Plugin subclasses implement geometryDidChange and do all the work there
        we can get rid of deprecatedGeometryDidChange.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/PDF/BuiltInPDFView.cpp:
        * WebProcess/Plugins/PDF/BuiltInPDFView.h:
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::viewGeometryDidChange):

2011-11-02  Anders Carlsson  <andersca@apple.com>

        Move back functions that were not added.

        * UIProcess/API/C/WKPage.h:

2011-11-02  Anders Carlsson  <andersca@apple.com>

        Fix build and WebKit2 ABI.

        * Shared/APIClientTraits.cpp:
        * Shared/APIClientTraits.h:
        Add page loader client sizes.

        * UIProcess/API/C/WKPage.h:
        Move the newly added callback functions in the loader client last and bump the
        WKPageLoaderClient version.
        
2011-11-02  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * WebProcess/Plugins/PluginView.h:

2011-11-02  Tom Sepez  <tsepez@chromium.org>

        XSSAuditor is silent
        https://bugs.webkit.org/show_bug.cgi?id=70973

        Reviewed by Adam Barth.

        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/gtk/WebKitWebLoaderClient.cpp:
        (webkitWebLoaderClientAttachLoaderClientToPage):
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::didDetectXSSForFrame):
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didDetectXSSForFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::didDetectXSSForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::didDetectXSS):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2011-11-02  Anders Carlsson  <andersca@apple.com>

        More window relative coordinate usage removal
        https://bugs.webkit.org/show_bug.cgi?id=71393

        Reviewed by Adam Roben.

        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::NetscapePlugin::scheduleWindowedGeometryUpdate):
        Just use m_clipRect instead of converting m_clipRectInWindowCoordinates to plug-in coordinates.

        (WebKit::NetscapePlugin::platformPaint):
        Use m_pluginSize instead of m_frameRectInWindowCoordinates.size().

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePlugin::platformPaint):
        Ditto.

2011-11-02  Anders Carlsson  <andersca@apple.com>

        Fix non-Mac builds and remove #if PLATFORM(MAC) around all contents scale factor functions.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::PluginControllerProxy):
        (WebKit::PluginControllerProxy::contentsScaleFactor):
        (WebKit::PluginControllerProxy::geometryDidChange):
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginCreationParameters.cpp:
        (WebKit::PluginCreationParameters::PluginCreationParameters):
        (WebKit::PluginCreationParameters::encode):
        (WebKit::PluginCreationParameters::decode):
        * PluginProcess/PluginCreationParameters.h:
        * PluginProcess/mac/PluginControllerProxyMac.mm:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::contentsScaleFactor):
        (WebKit::NetscapePlugin::getAuthenticationInfo):
        (WebKit::NetscapePlugin::snapshot):
        (WebKit::NetscapePlugin::contentsScaleFactorChanged):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::initialize):
        (WebKit::PluginProxy::contentsScaleFactorChanged):
        (WebKit::PluginProxy::contentsScaleFactor):
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::contentsScaleFactor):

2011-11-02  Anders Carlsson  <andersca@apple.com>

        Use m_pluginSize instead of m_frameRectInWindowCoordinates.size() in NetscapePlugin.
        https://bugs.webkit.org/show_bug.cgi?id=71390

        Reviewed by Adam Roben.

        m_pluginSize is always equal to m_frameRectInWindowCoordinates.size() and this moves us one
        sall step further towards eliminating m_frameRectInWindowCoordinates.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::invalidate):
        (WebKit::NetscapePlugin::snapshot):

2011-11-02  Anders Carlsson  <andersca@apple.com>

        Fix non-Mac builds.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::snapshot):

2011-11-02  Anders Carlsson  <andersca@apple.com>

        Plug-in snapshots are blurry in HiDPI
        https://bugs.webkit.org/show_bug.cgi?id=71387
        <rdar://problem/10385393>

        Reviewed by Adam Roben.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::snapshot):
        Create the backing store in the right size and apply the contents scale factor
        to the newly created graphics context.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::paint):
        Pass the scale factor to ShareableBitmap::paint.

2011-11-02  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] Implement message exchange between WebView and the web page
        https://bugs.webkit.org/show_bug.cgi?id=70545

        Reviewed by Noam Rosenthal.

        Adds a mechanism for the WebView to send messages to the JavaScript environment
        of the web page. In the WebView we have a method postMessage() and a signal
        messageReceived(), while in the web page we expose a navigator.qt object with a
        postMessage() method and a onmessage property. The messages are objects that
        follow the same structure as MessageEvents.

        The feature is disabled by default, and can be enabled by setting
        QWebPreferences::navigatorQtObjectEnabled property to true. Changes take effect
        after the next load(). QML tests are included.

        * UIProcess/qt/ClientImpl.h:
        * UIProcess/qt/ClientImpl.cpp:
        (setupContextInjectedBundleClient): Helper to register the injected bundle client.
        (qt_wk_didReceiveMessageFromInjectedBundle): Decode and dispatch a message received
        from the WebProcess to the WebPageProxy.

        * UIProcess/PageClient.h:
        (WebKit::PageClient::didReceiveMessageFromNavigatorQtObject):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessageFromNavigatorQtObject):
        * UIProcess/WebPageProxy.h:
        Handle messages received from the navigator.qt object via the injected bundle. Called
        from the ClientImpl.

        * UIProcess/API/qt/qbasewebview.cpp:
        (QBaseWebView::postMessage):
        (QBaseWebViewPrivate::setPageProxy):
        * UIProcess/API/qt/qbasewebview.h:
        * UIProcess/API/qt/qwebpreferences.cpp:
        (QWebPreferences::navigatorQtObjectEnabled):
        (QWebPreferences::setNavigatorQtObjectEnabled):
        * UIProcess/API/qt/qwebpreferences.h:
        The signal, slot and the setting to enable the feature.

        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::defaultWKContext): setup the injected bundle client for this the
        default context so we can listen to messages from it.

        (QtWebPageProxy::QtWebPageProxy):
        (QtWebPageProxy::didReceiveMessageFromNavigatorQtObject):
        (QtWebPageProxy::setNavigatorQtObjectEnabled):
        (QtWebPageProxy::postMessageToNavigatorQtObject):
        * UIProcess/qt/QtWebPageProxy.h:
        (QtWebPageProxy::navigatorQtObjectEnabled):
        Enabling and sending messages to the navigator.qt object are done by sending messages to
        the injected bundle, identifying the page that we want to act on.

        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_messaging.qml: Added.
        * UIProcess/API/qt/tests/qmltests/common/messaging.html: Added.
        * UIProcess/API/qt/tests/qmltests/qmltests.pro:
        * WebProcess/qt/QtBuiltinBundle.cpp:
        (WebKit::QtBuiltinBundle::initialize):
        (WebKit::QtBuiltinBundle::didReceiveMessage):
        (WebKit::QtBuiltinBundle::handleMessageToNavigatorQtObject):
        (WebKit::QtBuiltinBundle::handleSetNavigatorQtObjectEnabled):
        * WebProcess/qt/QtBuiltinBundle.h:
        * WebProcess/qt/QtBuiltinBundlePage.cpp:
        (WebKit::QtBuiltinBundlePage::QtBuiltinBundlePage):
        (WebKit::QtBuiltinBundlePage::~QtBuiltinBundlePage):
        (WebKit::QtBuiltinBundlePage::didClearWindowForFrame):
        (WebKit::qt_postMessageCallback):
        (WebKit::QtBuiltinBundlePage::postMessageFromNavigatorQtObject):
        (WebKit::createWrappedMessage):
        (WebKit::QtBuiltinBundlePage::didReceiveMessageToNavigatorQtObject):
        (WebKit::QtBuiltinBundlePage::setNavigatorQtObjectEnabled):
        (WebKit::QtBuiltinBundlePage::registerNavigatorQtObject):
        (WebKit::QtBuiltinBundlePage::navigatorQtObjectClass):
        * WebProcess/qt/QtBuiltinBundlePage.h:
        (WebKit::QtBuiltinBundlePage::navigatorQtObjectEnabled):

2011-11-02  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Fix qmltest API test failures related to r98973.
        https://bugs.webkit.org/show_bug.cgi?id=71280

        Reviewed by Noam Rosenthal.

        Most of the API was moved from TouchWebView.page to TouchWebView directly.
        Fixed the qml tests to reflect this change.

        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_load.qml:
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadFail.qml:
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadNegativeSizeView.qml:
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadProgress.qml:
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadProgressSignal.qml:
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadZeroSizeView.qml:
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_properties.qml:

2011-11-02  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Handle interruption of page interaction better
        https://bugs.webkit.org/show_bug.cgi?id=71366

        Reviewed by Simon Hausmann.

        Touching the screen when a kinetic scrolling animation is running or
        it is bouncing back because it was out of bounds, the animation is
        immediately stopped and the content is immediately put into valid
        bounds.

        Touching the screen when the contents is bouncing back from a pinch
        zoom which was out of bounds, we do not stop the animation, but
        instead ignored the touch events while the animation lasts.

        In the future we want to queue the events instead.

        This also fixes some issues which was present before: As the bounce
        back animation from pinch zoom centers the content using the contents
        point which was in the center of the viewport, this animation could
        not be used when stopping a pan animation, as it wouldn't position the
        content at the place it was when the pan animation was interrupted.

        * UIProcess/qt/QtPanGestureRecognizer.cpp:
        (WebKit::QtPanGestureRecognizer::recognize):
        * UIProcess/qt/QtPinchGestureRecognizer.cpp:
        (WebKit::QtPinchGestureRecognizer::recognize):
        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::QtViewportInteractionEngine::animateContentIntoBoundariesIfNeeded):
        (WebKit::QtViewportInteractionEngine::reset):
        (WebKit::QtViewportInteractionEngine::setConstraints):
        (WebKit::QtViewportInteractionEngine::panAnimationActive):
        (WebKit::QtViewportInteractionEngine::panGestureStarted):
        (WebKit::QtViewportInteractionEngine::panGestureCancelled):
        (WebKit::QtViewportInteractionEngine::pinchAnimationActive):
        * UIProcess/qt/QtViewportInteractionEngine.h:

2011-11-02  Zalan Bujtas  <zbujtas@gmail.com>

        [Qt][WK2] Move content to resize (setResizesToContentsUsingLayoutSize) from UI process to Web process
        https://bugs.webkit.org/show_bug.cgi?id=71107

        Reviewed by Kenneth Rohde Christiansen.

        Reduce the number of IPC calls to WebProcess by moving the content to resize
        calls from UI process to Web process.

        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebViewPrivate::updateViewportSize):
        (QTouchWebViewPrivate::updateViewportConstraints):
        (QTouchWebView::geometryChanged):
        * UIProcess/API/qt/qtouchwebview_p.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setViewportSize):
        (WebKit::WebPageProxy::preferencesDidChange):
        * UIProcess/WebPageProxy.h:
        * UIProcess/qt/QtTouchWebPageProxy.cpp:
        * UIProcess/qt/QtTouchWebPageProxy.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::dispatchViewportPropertiesDidChange):
        * WebProcess/WebPage/WebPage.messages.in:

2011-10-18  Dinu Jacob  <dinu.jacob@nokia.com>

        [Qt][WK2]: Shouldn't send unhandled TouchCancel event to gesture recognizers
        https://bugs.webkit.org/show_bug.cgi?id=70333

        Reviewed by Simon Hausmann.

        Gesture recognizers should be reset for unhandled TouchCancel event.

        * UIProcess/qt/qtouchwebpageproxy.cpp:
        (QTouchWebPageProxy::doneWithTouchEvent):

2011-11-02  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][WK2] Add support for touch event testing to WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=71310

        Reviewed by Kenneth Rohde Christiansen.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleTouchEvent): Add support for m_shouldSendEventsSynchronously.
        * UIProcess/qt/QtDesktopWebPageProxy.cpp:
        (QtDesktopWebPageProxy::handleEvent): Handle plain touch events in the desktop page proxy by
        forwarding them appropriately. We will receive them from WTR through ::event, but we won't
        receive them from QQuickCanvas (i.e. the user) because that doesn't uses ::event but only
        dedicated fooEvent() handlers, of which we don't re-implement the touch version.
        (QtDesktopWebPageProxy::handleTouchEvent): Forward touch events to WebPageProxy.
        * UIProcess/qt/QtDesktopWebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::touchEventSyncForTesting): Add support for synchronous touch event testing,
        similar to the way it's done for mouse events.
        * WebProcess/WebPage/WebPage.h: Ditto.
        * WebProcess/WebPage/WebPage.messages.in: Ditto.

2011-11-02  Simon Hausmann  <simon.hausmann@nokia.com>

        [WK2] Remove unused/duplicated modifiers member from WebTouchEvent
        https://bugs.webkit.org/show_bug.cgi?id=71353

        Reviewed by Kenneth Rohde Christiansen.

        WebTouchEvent::m_[ctrl,alt,meta,shift]Key are redundant compared to
        WebEvent::m_modifiers. The latter is fully populated and used, the former
        can be safely removed.

        * Shared/WebEvent.h:
        * Shared/WebTouchEvent.cpp:
        (WebKit::WebTouchEvent::WebTouchEvent):
        * Shared/qt/WebEventFactoryQt.cpp:
        (WebKit::WebEventFactory::createWebTouchEvent):

2011-11-02  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, skip testWebKitSettingsNewWithSettings affected by bug
        70127.

        * UIProcess/API/gtk/tests/TestWebKitSettings.cpp:
        (testWebKitSettingsNewWithSettings):

2011-11-01  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Make API tests less noisy
        https://bugs.webkit.org/show_bug.cgi?id=71295

        Reviewed by Simon Hausmann.

        Suppress superfluous debug messages of Qt5.

        * UIProcess/API/qt/tests/commonviewtests/tst_commonviewtests.cpp:
        * UIProcess/API/qt/tests/qdesktopwebview/tst_qdesktopwebview.cpp:
        * UIProcess/API/qt/tests/qmltests/qmltests.pro:
        * UIProcess/API/qt/tests/qmltests/tst_qmltests.cpp:
        (main):
        * UIProcess/API/qt/tests/qtouchwebview/tst_qtouchwebview.cpp:
        * UIProcess/API/qt/tests/util.cpp:
        (messageHandler):
        * UIProcess/API/qt/tests/util.h:

2011-11-01  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Merge common desktop and touch view APIs under a base class.
        https://bugs.webkit.org/show_bug.cgi?id=71280

        Reviewed by Andreas Kling.

        - Make QDesktopWebView and QTouchWebView inherit from QBaseWebView.
        - Move methods from QTouchWebPage to QTouchWebView (through the base class).

        We use the same convenience macros as Qt internally by hiding QObject::d_ptr
        with QBaseWebView::d_ptr instead of inheriting QBaseWebViewPrivate from
        QQuickItemPrivate.
        Also, QBaseWebView currently inherits from QQuickPaintedItem since QDesktopWebView
        needs it, but should be changed as soon as this is not required anymore.

        * UIProcess/API/qt/qbasewebview.cpp: Added.
        (QBaseWebViewPrivate::QBaseWebViewPrivate):
        (QBaseWebViewPrivate::setPageProxy):
        (QBaseWebView::QBaseWebView):
        (QBaseWebView::~QBaseWebView):
        (QBaseWebView::load):
        (QBaseWebView::url):
        (QBaseWebView::loadProgress):
        (QBaseWebView::title):
        (QBaseWebView::navigationController):
        (QBaseWebView::preferences):
        * UIProcess/API/qt/qbasewebview.h: Copied from Source/WebKit2/UIProcess/API/qt/qtouchwebpage.h.
        * UIProcess/API/qt/qbasewebview_p.h: Copied from Source/WebKit2/UIProcess/API/qt/qtouchwebpage_p.h.
        (QBaseWebViewPrivate::~QBaseWebViewPrivate):
        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebViewPrivate::QDesktopWebViewPrivate):
        (QDesktopWebViewPrivate::enableMouseEvents):
        (QDesktopWebViewPrivate::disableMouseEvents):
        (QDesktopWebViewPrivate::webView):
        (QDesktopWebViewPrivate::setViewNeedsDisplay):
        (QDesktopWebViewPrivate::drawingAreaSize):
        (QDesktopWebViewPrivate::hasFocus):
        (QDesktopWebViewPrivate::isVisible):
        (QDesktopWebViewPrivate::startDrag):
        (QDesktopWebViewPrivate::didChangeUrl):
        (QDesktopWebViewPrivate::didChangeTitle):
        (QDesktopWebViewPrivate::didChangeStatusText):
        (QDesktopWebViewPrivate::loadDidBegin):
        (QDesktopWebViewPrivate::loadDidSucceed):
        (QDesktopWebViewPrivate::loadDidFail):
        (QDesktopWebViewPrivate::didChangeLoadProgress):
        (QDesktopWebViewPrivate::showContextMenu):
        (QDesktopWebViewPrivate::runJavaScriptAlert):
        (QDesktopWebViewPrivate::runJavaScriptConfirm):
        (QDesktopWebViewPrivate::runJavaScriptPrompt):
        (QDesktopWebView::QDesktopWebView):
        (QDesktopWebViewPrivate::init):
        (QDesktopWebView::~QDesktopWebView):
        (QDesktopWebView::geometryChanged):
        (QDesktopWebView::paint):
        (QDesktopWebView::event):
        (QDesktopWebView::pageRef):
        (QDesktopWebViewPrivate::processDidCrash):
        (QDesktopWebViewPrivate::didRelaunchProcess):
        (QDesktopWebViewPrivate::engine):
        (QDesktopWebViewPrivate::chooseFiles):
        (QDesktopWebViewPrivate::_q_onOpenPanelFilesSelected):
        (QDesktopWebViewPrivate::_q_onOpenPanelFinished):
        (QDesktopWebViewPrivate::didMouseMoveOverElement):
        (QDesktopWebViewPrivate::navigationPolicyForURL):
        * UIProcess/API/qt/qdesktopwebview.h:
        * UIProcess/API/qt/qdesktopwebview_p.h:
        * UIProcess/API/qt/qtouchwebpage.cpp:
        (QTouchWebPage::event):
        (QTouchWebPage::geometryChanged):
        (QTouchWebPagePrivate::QTouchWebPagePrivate):
        (QTouchWebPagePrivate::setPageProxy):
        (QTouchWebPagePrivate::paintToCurrentGLContext):
        * UIProcess/API/qt/qtouchwebpage.h:
        * UIProcess/API/qt/qtouchwebpage_p.h:
        (QTouchWebPagePrivate::touchPageProxy):
        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebViewPrivate::init):
        (QTouchWebViewPrivate::loadDidCommit):
        (QTouchWebViewPrivate::_q_viewportUpdated):
        (QTouchWebViewPrivate::_q_viewportTrajectoryVectorChanged):
        (QTouchWebViewPrivate::updateViewportConstraints):
        (QTouchWebView::QTouchWebView):
        (QTouchWebView::~QTouchWebView):
        (QTouchWebView::page):
        (QTouchWebView::geometryChanged):
        (QTouchWebView::onVisibleChanged):
        * UIProcess/API/qt/qtouchwebview.h:
        * UIProcess/API/qt/qtouchwebview_p.h:
        (QTouchWebViewPrivate::touchPageProxy):
        * UIProcess/API/qt/tests/commonviewtests/tst_commonviewtests.cpp:
        (tst_CommonViewTests::loadNonexistentFileUrl):
        * UIProcess/API/qt/tests/commonviewtests/webviewabstraction.cpp:
        (WebViewAbstraction::WebViewAbstraction):
        (WebViewAbstraction::load):
        (WebViewAbstraction::url):
        (WebViewAbstraction::loadProgress):
        (WebViewAbstraction::goBack):
        (WebViewAbstraction::goForward):
        (WebViewAbstraction::stop):
        (WebViewAbstraction::reload):
        (WebViewAbstraction::touchViewLoadFailed):
        (WebViewAbstraction::desktopViewLoadFailed):
        * UIProcess/API/qt/tests/commonviewtests/webviewabstraction.h:
        * UIProcess/API/qt/tests/qtouchwebview/tst_qtouchwebview.cpp:
        (tst_QTouchWebView::navigationStatusAtStartup):
        * UIProcess/qt/QtDesktopWebPageProxy.cpp:
        (QtDesktopWebPageProxy::createPopupMenuProxy):
        * UIProcess/qt/QtTouchViewInterface.cpp:
        (WebKit::QtTouchViewInterface::didChangeViewportProperties):
        (WebKit::QtTouchViewInterface::didChangeUrl):
        (WebKit::QtTouchViewInterface::didChangeTitle):
        (WebKit::QtTouchViewInterface::loadDidBegin):
        (WebKit::QtTouchViewInterface::loadDidCommit):
        (WebKit::QtTouchViewInterface::loadDidSucceed):
        (WebKit::QtTouchViewInterface::loadDidFail):
        (WebKit::QtTouchViewInterface::didChangeLoadProgress):
        * WebKit2API.pri:

2011-10-31  Anders Carlsson  <andersca@apple.com>

        PluginProxy shouldn't use window-relative coordinates
        https://bugs.webkit.org/show_bug.cgi?id=71261

        Reviewed by Adam Roben.

        Change PluginProxy::wantsWindowRelativeCoordinates to return false and remove
        m_frameRectInWindowCoordinates and m_clipRectInWindowCoordinates. This is yet another step
        towards eliminating window-relative coordinates wherever possible.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::paint):
        Since the dirty rect passed to paint is now in plug-in coordinates, there's no need to convert it
        from window coordinates to plug-in coordinates before passing it to BackingStore::paint.

        (WebKit::PluginProxy::deprecatedGeometryDidChange):
        Assert that we're not calling this anymore.

        (WebKit::PluginProxy::wantsWindowRelativeCoordinates):
        Return false.

2011-11-01  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        The QtViewportInteractionEngine should consider DPI adjustment
        https://bugs.webkit.org/show_bug.cgi?id=71283

        Reviewed by Simon Hausmann.

        * UIProcess/API/qt/qtouchwebview.cpp:

            Add some default values for now to make sure we are testing the
            DPI adjustment / CSS-item space conversion.

        (QTouchWebViewPrivate::updateViewportConstraints):
        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::ViewportUpdateGuard::ViewportUpdateGuard):
        (WebKit::ViewportUpdateGuard::~ViewportUpdateGuard):

            Clean up the guard to be more understandable.

        (WebKit::QtViewportInteractionEngine::cssScaleFromItem):
        (WebKit::QtViewportInteractionEngine::itemScaleFromCSS):

            Add methods for converting between CSS and item space.

        (WebKit::QtViewportInteractionEngine::innerBoundedCSSScale):
        (WebKit::QtViewportInteractionEngine::outerBoundedCSSScale):

            Make it clean which methods uses which coord space.

        (WebKit::QtViewportInteractionEngine::updateVisibleRect):
        (WebKit::QtViewportInteractionEngine::event):
        (WebKit::QtViewportInteractionEngine::computePosRangeForItemScale):

            Rename calculateBoundariesForScale and change its implementation to
            be correct. The new name reflects the space in which the computation
            takes place and reflects similar Qt API.

        (WebKit::QtViewportInteractionEngine::animateContentIntoBoundariesIfNeeded):
        (WebKit::QtViewportInteractionEngine::pinchGestureRequestUpdate):
        (WebKit::QtViewportInteractionEngine::scaleContent):

            Make sure to consider the right coord space.

        * UIProcess/qt/QtViewportInteractionEngine.h:
        (WebKit::QtViewportInteractionEngine::Constraints::Constraints):

            Add the devicePixelRatio.

2011-11-01  Simon Hausmann  <simon.hausmann@nokia.com>

        Prospective clang build fix.

        Reviewed by Andreas Kling.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveEvent): Handle GestureSingleTap in the event type switch.

2011-11-01  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] Create infrastructure for Qt's builtin bundle in web process.
        https://bugs.webkit.org/show_bug.cgi?id=71279

        Reviewed by Simon Hausmann.

        Create a builtin bundle for Qt port: an InjectedBundle which the code is together
        with the Qt's web process instead of being in a different library. This gives us
        access to many hooks at web process (using WKBundle* functions of C API) without
        adding any maintenance burden to cross-port code.

        Since we also use a InjectedBundle in the WebKitTestRunner, we only install our
        builtin bundle if there's no other installed. This is fine because WTR won't use
        the extra runtime features that we plan to provide with the builtin bundle.

        * WebKit2.pro:
        * WebProcess/qt/QtBuiltinBundle.cpp: Added.
        (WebKit::QtBuiltinBundle::~QtBuiltinBundle):
        (WebKit::QtBuiltinBundle::shared):
        (WebKit::QtBuiltinBundle::initialize):
        (WebKit::QtBuiltinBundle::didCreatePage):
        (WebKit::QtBuiltinBundle::willDestroyPage):
        (WebKit::QtBuiltinBundle::bundlePageForPageRef):
        * WebProcess/qt/QtBuiltinBundle.h: Added.
        (WebKit::QtBuiltinBundle::toRef):
        Object that holds a WKBundleRef and keeps track of the pages in the current context.

        * WebProcess/qt/QtBuiltinBundlePage.cpp: Added.
        (WebKit::QtBuiltinBundlePage::QtBuiltinBundlePage):
        (WebKit::QtBuiltinBundlePage::~QtBuiltinBundlePage):
        * WebProcess/qt/QtBuiltinBundlePage.h: Added.
        (WebKit::QtBuiltinBundlePage::page):
        Our representation for pages from the bundle perspective. This will be the right
        place to registering page related clients.

        * WebProcess/qt/WebProcessQt.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):
        If there's no bundle to be loaded, initialize Qt builtin bundle, which will register the
        bundle client for this context.

2011-11-01  Simon Hausmann  <simon.hausmann@nokia.com>

        [WK2] Add WebGestureEvents to the Qt build and enable PlatformGestureEvent::TapType
        https://bugs.webkit.org/show_bug.cgi?id=71274

        Reviewed by Kenneth Christiansen.

        * Shared/WebEvent.h: Add GestureSingleTap as gesture type.
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformGestureEvent::WebKit2PlatformGestureEvent): Support converting
        WebEven::GestureSingleTap to PlatformGestureEvent::TapType.
        * Shared/WebGestureEvent.cpp:
        (WebKit::WebGestureEvent::isGestureEventType): GestureSingleTap is a valid gesture event type.
        * WebKit2.pro: Add WebGestureEvent.cpp to the build.

2011-10-31  Anders Carlsson  <andersca@apple.com>

        PluginProxy::Update should pass the painted rect in plug-in coordinates
        https://bugs.webkit.org/show_bug.cgi?id=71257

        Reviewed by Adam Roben.

        This is one step in the process of migrating away from window relative coordinates
        and use plug-in relative coordinates instead, since window relative coordinates won't work
        with transforms.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::paint):
        Convert the dirty rect back to plug-in coordinates.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::update):
        No need to convert the painted rect back to plug-in coordinates anymore.

        * WebProcess/Plugins/PluginProxy.messages.in:
        Document that the painted rect is in plug-in coordinates.

2011-10-31  Anders Carlsson  <andersca@apple.com>

        PluginControllerProxy should call Plugin::geometryDidChange
        https://bugs.webkit.org/show_bug.cgi?id=71255

        Reviewed by Sam Weinig.

        Pass enough information over in the GeometryDidChange message sent from
        PluginProxy to PluginControllerProxy so that PluginControllerProxy can call
        Plugin::geometryDidChange.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::paint):
        (WebKit::PluginControllerProxy::invalidate):
        (WebKit::PluginControllerProxy::paintEntirePlugin):
        Update for rename from m_frameRect to m_frameRectInWindowCoordinates.

        (WebKit::PluginControllerProxy::geometryDidChange):
        This now takes the plug-in size and the plug-in to root view transform as well.

        * PluginProcess/PluginControllerProxy.h:
        Store the plug-in size and rename m_frameRect to m_frameRectInWindowCoordinates.

        * PluginProcess/PluginControllerProxy.messages.in:
        Update message signature.

        * PluginProcess/mac/PluginControllerProxyMac.mm:
        (WebKit::PluginControllerProxy::platformGeometryDidChange):
        Use the plug-in size instead of the frame rect size.

        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        * Shared/WebCoreArgumentCoders.h:
        Add encoder/decoder for WebCore::AffineTransform.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::geometryDidChange):
        Compute the frame rect in window coordinates and send it over.

        (WebKit::PluginProxy::deprecatedGeometryDidChange):
        Move call to geometryDidChange() from here to the new PluginProxy::geometryDidChange.

2011-10-31  Anders Carlsson  <andersca@apple.com>

        Remove some uses of m_frameRectInWindowCoordinates from PluginProxy
        https://bugs.webkit.org/show_bug.cgi?id=71252

        Reviewed by Darin Adler.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::paint):
        (WebKit::PluginProxy::geometryDidChange):
        (WebKit::PluginProxy::updateBackingStore):
        (WebKit::PluginProxy::pluginBounds):
        * WebProcess/Plugins/PluginProxy.h:

2011-10-31  Anders Carlsson  <andersca@apple.com>

        Implement PluginProxy::geometryDidChange
        https://bugs.webkit.org/show_bug.cgi?id=71251

        Reviewed by Sam Weinig.

        Keep track of the plug-in size, the clip rect in plug-in coordinates and the
        transformation matrix from the root view to the plug-in.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::geometryDidChange):
        * WebProcess/Plugins/PluginProxy.h:

2011-10-31  Anders Carlsson  <andersca@apple.com>

        Fix the X11 build.

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePlugin::platformGeometryDidChange):
        (WebKit::NetscapePlugin::platformPaint):
        (WebKit::NetscapePlugin::platformHandleMouseEvent):
        (WebKit::NetscapePlugin::platformHandleWheelEvent):
        (WebKit::NetscapePlugin::platformHandleMouseEnterEvent):
        (WebKit::NetscapePlugin::platformHandleMouseLeaveEvent):

2011-10-31  Anders Carlsson  <andersca@apple.com>

        Factor code to resize the plug-in backing store out into a separate function
        https://bugs.webkit.org/show_bug.cgi?id=71250

        Reviewed by Adam Roben.

        Add a PluginProxy::contentsScaleFactor helper function to get rid of a bunch of PLATFORM(MAC) #ifdefs,
        and move the code to update the backing store out into a separate function.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::initialize):
        (WebKit::PluginProxy::paint):
        (WebKit::PluginProxy::geometryDidChange):
        (WebKit::PluginProxy::contentsScaleFactor):
        (WebKit::PluginProxy::updateBackingStore):
        (WebKit::PluginProxy::update):
        * WebProcess/Plugins/PluginProxy.h:

2011-10-31  Jeff Miller  <jeffm@apple.com>

        Add more APIs to WKUserContentURLPattern.h
        https://bugs.webkit.org/show_bug.cgi?id=71245
        
        Add additional WKUserContentURLPattern APIs to match what was provided by
        the equivalent WebKit1 API.

        Reviewed by Darin Adler.

        * Shared/API/c/WKUserContentURLPattern.cpp:
        (WKUserContentURLPatternCopyHost): Added.
        (WKUserContentURLPatternCopyScheme): Added.
        (WKUserContentURLPatternIsValid): Added.
        (WKUserContentURLPatternMatchesSubdomains): Added.
        
        * Shared/API/c/WKUserContentURLPattern.h: Added new APIs.
        
        * Shared/WebUserContentURLPattern.h:
        (WebKit::WebUserContentURLPattern::host): Added.
        (WebKit::WebUserContentURLPattern::scheme): Added.
        (WebKit::WebUserContentURLPattern::isValid): Added.
        (WebKit::WebUserContentURLPattern::matchesSubdomains): Added.

2011-10-31  Anders Carlsson  <andersca@apple.com>

        More work on making plug-ins work better with transforms
        https://bugs.webkit.org/show_bug.cgi?id=71241

        Reviewed by Darin Adler.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::geometryDidChange):
        Implement NetscapePlugin::geometryDidChange and store the plug-in size,
        the clip rect and the root view transform. Use the transform to compute the window
        relative frame and clip rects.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        Add new member variables.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::viewGeometryDidChange):
        Always call the new Plugin::geometryDidChange.

2011-10-27  Anders Carlsson  <andersca@apple.com>

        Rename a couple of NetscapePlugin and PluginProxy member variables
        https://bugs.webkit.org/show_bug.cgi?id=71086

        Reviewed by Sam Weinig.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::invalidate):
        (WebKit::NetscapePlugin::callSetWindow):
        (WebKit::NetscapePlugin::snapshot):
        (WebKit::NetscapePlugin::deprecatedGeometryDidChange):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformPaint):
        (WebKit::NetscapePlugin::platformHandleMouseEvent):
        (WebKit::NetscapePlugin::platformHandleWheelEvent):
        (WebKit::NetscapePlugin::platformHandleMouseEnterEvent):
        (WebKit::NetscapePlugin::platformHandleMouseLeaveEvent):
        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::NetscapePlugin::scheduleWindowedGeometryUpdate):
        (WebKit::NetscapePlugin::platformPaint):
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::paint):
        (WebKit::PluginProxy::geometryDidChange):
        (WebKit::PluginProxy::deprecatedGeometryDidChange):
        (WebKit::PluginProxy::update):
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::viewGeometryDidChange):

2011-10-31  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Fix qmltests after r98460 added widgets dependency.

        Reviewed by Simon Hausmann.

        Use QApplication and QtWidgets until we get rid of the widgets dependency of QScroller.

        * UIProcess/API/qt/tests/qmltests/qmltests.pro:
        * UIProcess/API/qt/tests/qmltests/tst_qmltests.cpp:
        (main):

2011-10-31  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] Make QWebPreferences hold a QtWebPageProxy
        https://bugs.webkit.org/show_bug.cgi?id=71219

        Reviewed by Andreas Kling.

        Change QWebPreferences to keep a pointer to QtWebPageProxy.  The reason is that
        some features we want to control (like the messaging exchange between WebView and
        the web process) are not available via WKPreferencesRef.

        QtWebPageProxy now uses an OwnPtr to keep the QWebPreferences to clarify the
        ownership relationship. Before this change the QWebPreferences created was leaking.

        * UIProcess/API/qt/qwebpreferences.cpp:
        (QWebPreferencesPrivate::createPreferences):
        (QWebPreferencesPrivate::testAttribute):
        (QWebPreferencesPrivate::setAttribute):
        (QWebPreferencesPrivate::setFontFamily):
        (QWebPreferencesPrivate::fontFamily):
        (QWebPreferencesPrivate::setFontSize):
        (QWebPreferencesPrivate::fontSize):
        (QWebPreferencesPrivate::preferencesRef):
        * UIProcess/API/qt/qwebpreferences.h:
        * UIProcess/API/qt/qwebpreferences_p.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::QtWebPageProxy):
        (QtWebPageProxy::preferences):
        * UIProcess/qt/QtWebPageProxy.h:

2011-10-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add webkit_settings_new_with_settings() to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=71111

        Reviewed by Martin Robinson.

        Convenient method to create a WebKitSettings object with initial
        settings.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webkit_settings_new_with_settings):
        * UIProcess/API/gtk/WebKitSettings.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:
        * UIProcess/API/gtk/tests/TestWebKitSettings.cpp:
        (testWebKitSettingsNewWithSettings):
        (beforeAll):

2011-10-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add methods to get/set the settings of a web view to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=71109

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Add WebKitSettingsPrivate.h.
        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webkitSettingsAttachSettingsToPage): Set the preferences of the
        given WebKitSettings object to the page group of the given WKPage.
        * UIProcess/API/gtk/WebKitSettingsPrivate.h: Added.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewConstructed): Create the default WebKitSettings for
        the view.
        (webkit_web_view_set_settings):
        (webkit_web_view_get_settings):
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:
        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
        (testWebViewSettings):
        (beforeAll):

2011-10-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck build.

        * GNUmakefile.am: Remove docs/GNUmakefile.in from EXTRA_DIST,
        since its generation was removed from configure.ac in r98498.

2011-10-28  Jeff Miller  <jeffm@apple.com>

        More work on WebKit2 should respect WebKitOmitPDFSupport preference on the Mac
        https://bugs.webkit.org/show_bug.cgi?id=71156
        
        Don't include PDF and PostScript types in the set of MIME types with custom representations
        when initializing the web process if WebKitOmitPDFSupport is set.
        
        I believe the previous patch r98513 was actually sufficient to prevent PDFs from being
        shown inline when this preference was set, but to be complete we should exclude the MIME
        types here as well.

        Reviewed by Alexey Proskuryakov.

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):

2011-10-28  John Sullivan  <sullivan@apple.com>

        WebKit2 part of:
        https://bugs.webkit.org/show_bug.cgi?id=71142
        Whether backspace goes Back should be configurable

        Reviewed by Sam Weinig.

        * Shared/WebPreferencesStore.h:
        Declared backspaceKeyNavigationEnabled property using macro. This initializes
        it to true, to match current behavior.
        
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetBackspaceKeyNavigationEnabled):
        New function, pass value to impl.
        (WKPreferencesGetBackspaceKeyNavigationEnabled):
        New function, returns result from impl.
        
        * UIProcess/API/C/WKPreferences.h:
        Declared API functions for new preference.
        
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        Updates WebCore settings from WebKit2 prefs.

2011-10-28  Timothy Hatcher  <timothy@apple.com>

        Support using a different front-end for the Web Inspector in WebKit2.

        rdar://problem/10318665
        https://webkit.org/b/71089

        Reviewed by Sam Weinig.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode): Added webInspectorBasePath and webInspectorLocalizedStringsPath.
        (WebKit::WebProcessCreationParameters::decode): Ditto.
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetOverrideWebInspectorBaseDirectory): Added. Calls through to WebContext.
        (WKContextSetOverrideWebInspectorPagePath): Ditto.
        (WKContextSetOverrideWebInspectorLocalizedStringsPath): Ditto.
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureWebProcess): Set webInspectorBasePath and webInspectorLocalizedStringsPath.
        * UIProcess/WebContext.h:
        (WebKit::WebContext::overrideWebInspectorBaseDirectory): Added.
        (WebKit::WebContext::setOverrideWebInspectorBaseDirectory): Added.
        (WebKit::WebContext::overrideWebInspectorPagePath): Added.
        (WebKit::WebContext::setOverrideWebInspectorPagePath): Added.
        (WebKit::WebContext::setOverrideWebInspectorLocalizedStringsPath): Added.
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::inspectorPageURL): Use WebContext::overrideWebInspectorPagePath if set.
        (WebKit::WebInspectorProxy::inspectorBaseURL): Use WebContext::overrideWebInspectorBaseDirectory if set.
        * WebProcess/WebPage/WebInspector.h:
        * WebProcess/WebPage/mac/WebInspectorMac.mm:
        (WebKit::globalInspectorLocalizedStringsURL): Added. Static storage for the setting.
        (WebKit::WebInspector::setLocalizedStringsPath): Added. Set globalInspectorLocalizedStringsURL.
        (WebKit::WebInspector::localizedStringsURL): Return globalInspectorLocalizedStringsURL.
        * WebProcess/com.apple.WebProcess.sb: Added read-only subpath for WEBKIT_WEB_INSPECTOR_DIR.
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::appendReadonlySandboxDirectory): Check path for empty to prevent an exception when
        calling through to fileSystemRepresentation.
        (WebKit::initializeSandbox): Added WEBKIT_WEB_INSPECTOR_DIR parameter.
        (WebKit::WebProcess::platformInitializeWebProcess): Call WebInspector::setLocalizedStringsPath.

2011-10-28  Alexey Proskuryakov  <ap@apple.com>

        Clean up BuiltInPDFView a little
        https://bugs.webkit.org/show_bug.cgi?id=71133

        Reviewed by Daniel Bates.

        * WebProcess/Plugins/PDF/BuiltInPDFView.cpp: (WebKit::BuiltInPDFView::createScrollbar):
        Removed an incorrect FIXME. Custom scrollbars specified in a document don't apply
        to subframes, and thus shouldn't apply to PDFs.

        * WebProcess/Plugins/PDF/BuiltInPDFView.h: (WebKit::BuiltInPDFView::zoomAnimatorTransformChanged):
        Moved to a correct location. This is not a Plugin method, but a ScrollView one.

2011-10-28  Jochen Eisinger  <jochen@chromium.org>

        Rename a number of methods mentioning JavaScript to just Script instead
        https://bugs.webkit.org/show_bug.cgi?id=71105

        Reviewed by Adam Barth.

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

2011-10-28  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Adapt to QSG* to QQuick* API change in qtdeclarative
        https://bugs.webkit.org/show_bug.cgi?id=70494

        One more buildfix. (unreviewed)

        * UIProcess/API/qt/qtouchwebpage.cpp:
        (computeEffectiveOpacity):
        (QTouchWebPage::itemChange):

2011-10-28  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Adapt to QSG* to QQuick* API change in qtdeclarative
        https://bugs.webkit.org/show_bug.cgi?id=70494

        Reviewed by Kenneth Christiansen.

        Use QQuick* instead of QSG* as well as QStandardPaths
        instead of QDesktopLocation.

        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebView::QDesktopWebView):
        (QDesktopWebView::geometryChanged):
        (QDesktopWebView::event):
        (QDesktopWebViewPrivate::engine):
        * UIProcess/API/qt/qdesktopwebview.h:
        * UIProcess/API/qt/qtouchwebpage.cpp:
        (QTouchWebPage::QTouchWebPage):
        (QTouchWebPage::event):
        (QTouchWebPage::geometryChanged):
        * UIProcess/API/qt/qtouchwebpage.h:
        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebView::QTouchWebView):
        (QTouchWebView::geometryChanged):
        (QTouchWebView::touchEvent):
        * UIProcess/API/qt/qtouchwebview.h:
        * UIProcess/API/qt/tests/testwindow.h:
        (TestWindow::TestWindow):
        (TestWindow::resizeEvent):
        * UIProcess/qt/QtDesktopWebPageProxy.cpp:
        (QtDesktopWebPageProxy::createPopupMenuProxy):
        * UIProcess/qt/QtSGUpdateQueue.cpp:
        (WebKit::QtSGUpdateQueue::QtSGUpdateQueue):
        * UIProcess/qt/QtSGUpdateQueue.h:
        * UIProcess/qt/QtTouchViewInterface.cpp:
        (WebKit::QtTouchViewInterface::engine):
        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::contentRectInViewportCoordinates):
        (WebKit::QtViewportInteractionEngine::QtViewportInteractionEngine):
        * UIProcess/qt/QtViewportInteractionEngine.h:
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::defaultDataLocation):
        * UIProcess/qt/WebPopupMenuProxyQtDesktop.cpp:
        (WebKit::WebPopupMenuProxyQtDesktop::WebPopupMenuProxyQtDesktop):
        * UIProcess/qt/WebPopupMenuProxyQtDesktop.h:
        (WebKit::WebPopupMenuProxyQtDesktop::create):

2011-10-28  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Make the kinetic engine use the same curve and constants as on the N9
        https://bugs.webkit.org/show_bug.cgi?id=71102

        Reviewed by Simon Hausmann.

        Now that we are using the QScroller for kinetic scrolling and page
        interaction, we need to make sure it uses the same curve (exponential)
        and the same values as the MeeGo Touch physics engine used on the N9.

        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::QtViewportInteractionEngine::reset):

2011-10-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add webkit_web_view_get_uri() to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=70814

        Reviewed by Gustavo Noronha Silva.

        * UIProcess/API/gtk/WebKitWebLoaderClient.cpp:
        (didStartProvisionalLoadForFrame): Update WebView URI to make sure
        it's updated to provisional URL.
        (didReceiveServerRedirectForProvisionalLoadForFrame): Update
        WebView URI if there's a server redirection.
        (didCommitLoadForFrame): Update WebView URI to make sure it
        contains the final one.
        (didSameDocumentNavigationForFrame): Update WebView URI when a
        navigation action within the same document is performed.
        (webkitWebLoaderClientAttachLoaderClientToPage): Add
        implementation for didSameDocumentNavigationForFrame callback.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_class_init): Add URI property.
        (webkitWebViewUpdateURI): Check whether current active URI has
        changed to updated it and emit ::notify signal if it changes.
        (webkit_web_view_load_uri): Call webkitWebViewUpdateURI() to make
        sure the active URI is updated when load operation is started.
        (webkit_web_view_load_alternate_html): 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_get_uri): Ditto.
        (webkit_web_view_go_to_back_forward_list_item): Ditto.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/WebKitWebViewPrivate.h: Add
        webkitWebViewUpdateURI().
        * UIProcess/API/gtk/tests/LoadTrackingTest.cpp:
        (provisionalLoadStartedCallback): Check provisional URL is the
        requested URI.
        (provisionalLoadReceivedServerRedirectCallback): Check provisional
        URL after server redirection is the expected redirected URI.
        (provisionalLoadFailedCallback): Check active URI.
        (loadCommittedCallback): Ditto.
        (loadFinishedCallback): Ditto.
        (loadFailedCallback): Ditto
        (LoadTrackingTest::LoadTrackingTest): Check active URI is NULL
        before any loading operation has started.
        * UIProcess/API/gtk/tests/LoadTrackingTest.h:
        (LoadTrackingTest::setRedirectURI): Set the redirect URI to check
        it after a server redirection.
        * UIProcess/API/gtk/tests/TestBackForwardList.cpp:
        (testBackForwardListNavigation): Use WebViewTest methods for
        navigation actions instead of using WebKitWebView API directly.
        (testBackForwardListLimitAndCache): Ditto.
        * UIProcess/API/gtk/tests/TestWebKitWebLoaderClient.cpp:
        (testLoadingStatus): Ditto.
        (testLoadingError): Ditto.
        (testLoadAlternateContent): Ditto.
        (testLoadCancelled): Ditto.
        (testWebViewReload): Ditto.
        (testLoadProgress): Ditto.
        (testWebViewActiveURI): Add a test to check that notify signal is
        emitted when active URI changes and it's correctly updated when
        loader client signals are emitted.
        (beforeAll): Add active-uri test.
        * UIProcess/API/gtk/tests/WebViewTest.cpp: Add custom load methods
        wrapping the WebKitWebView ones, to initialize the active URI to
        the requested one, so that it can be checked by the loader client
        test.
        (WebViewTest::loadURI):
        (WebViewTest::loadAlternateHTML):
        (WebViewTest::goBack):
        (WebViewTest::goForward):
        (WebViewTest::goToBackForwardListItem):
        * UIProcess/API/gtk/tests/WebViewTest.h:

2011-10-21  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt][WK2] Synchronize tiling with accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=69151

        Reviewed by Simon Hausmann.

        Make QTouchWebView always render with accelerated compositing.
        At first, the web content would only render after the rest of the scene has rendered. In a
        future patch we'll enable rendering the web content via an FBO, which would cover all other
        cases as well.

        Right now this only works for QTouchWebView, and thus accelerated compositing is disabled
        for desktop web-views. This required adding some settings enablers in Q
        WebPreferencesPrivate. Those are not exposed to the public API, as they are an implementation
        detail.

        * UIProcess/API/qt/qtouchwebpage.cpp:
        (QTouchWebPage::QTouchWebPage):
        (QTouchWebPage::initSceneGraphConnections):
        (QTouchWebPagePrivate::QTouchWebPagePrivate):
        (QTouchWebPagePrivate::setPage):
        (computeEffectiveOpacity):
        (QTouchWebPagePrivate::paintToCurrentGLContext):
        (QTouchWebPagePrivate::_q_onAfterSceneRender):
        (QTouchWebPagePrivate::_q_onSceneGraphInitialized):
        (QTouchWebPage::itemChange):
        * UIProcess/API/qt/qtouchwebpage.h:
        * UIProcess/API/qt/qtouchwebpage_p.h:
        * UIProcess/API/qt/qwebpreferences.cpp:
        (QWebPreferencesPrivate::testAttribute):
        (QWebPreferencesPrivate::setAttribute):
        (QWebPreferencesPrivate::get):
        * UIProcess/API/qt/qwebpreferences_p.h:
        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::renderNextFrame):
        * UIProcess/qt/QtDesktopWebPageProxy.cpp:
        (QtDesktopWebPageProxy::QtDesktopWebPageProxy):
        * UIProcess/qt/QtTouchViewInterface.cpp:
        (WebKit::QtTouchViewInterface::setViewNeedsDisplay):
        * UIProcess/qt/QtTouchWebPageProxy.cpp:
        (QtTouchWebPageProxy::QtTouchWebPageProxy):
        (QtTouchWebPageProxy::createDrawingAreaProxy):
        (QtTouchWebPageProxy::renderToCurrentGLContext):
        (QtTouchWebPageProxy::setVisibleContentRectAndScale):
        (QtTouchWebPageProxy::setVisibleContentRectTrajectoryVector):
        (QtTouchWebPageProxy::renderNextFrame):
        * UIProcess/qt/QtTouchWebPageProxy.h:
        * WebProcess/WebPage/qt/LayerTreeHostQt.cpp:
        (WebKit::LayerTreeHost::supportsAcceleratedCompositing):
        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (WebKit::WebPage::platformInitialize):
        * WebProcess/qt/WebProcessMainQt.cpp:
        (WebKit::WebProcessMainQt):

2011-10-27  Martin Robinson  <mrobinson@igalia.com>

        Fix the GTK+ build after r98664.

        * WebProcess/Plugins/Plugin.h: Add an IntSize forward declaration.

2011-10-27  Anders Carlsson  <andersca@apple.com>

        Add a Plugin::geometryDidChange that will work with transforms
        https://bugs.webkit.org/show_bug.cgi?id=71072

        Reviewed by Simon Fraser.

        Add a new Plugin::geometryDidChange pure virtual member function, that takes
        the size of the plug-in, the clip rect (in plug-in coordinates), and a matrix that makes
        it possible to convert between root view coordinates and plug-in coordinates.

        PluginView only calls this new geometryDidChange member function if 
        Plugin::wantsWindowRelativeCoordinates returns false, which is only true for BuiltInPDFView right now.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::geometryDidChange):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        Add stub.

        * WebProcess/Plugins/PDF/BuiltInPDFView.cpp:
        (WebKit::BuiltInPDFView::updateScrollbars):
        (WebKit::BuiltInPDFView::pdfDocumentDidLoad):
        (WebKit::BuiltInPDFView::paintContent):
        (WebKit::BuiltInPDFView::deprecatedGeometryDidChange):
        (WebKit::BuiltInPDFView::geometryDidChange):
        (WebKit::BuiltInPDFView::setScrollOffset):
        (WebKit::BuiltInPDFView::maximumScrollPosition):
        (WebKit::BuiltInPDFView::visibleHeight):
        (WebKit::BuiltInPDFView::visibleWidth):
        * WebProcess/Plugins/PDF/BuiltInPDFView.h:
        There's no need to keep track of the plug-in rect anymore.

        * WebProcess/Plugins/Plugin.h:
        Add and document geometryDidChange.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::geometryDidChange):
        * WebProcess/Plugins/PluginProxy.h:
        Add stub.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::viewGeometryDidChange):
        Call geometryDidChange.

2011-10-27  Joseph Pecoraro  <pecoraro@apple.com>

        Reviewed by David Kilzer.

        Make FeatureDefines Identical Across OS X Projects
        https://bugs.webkit.org/show_bug.cgi?id=71051

        * Configurations/FeatureDefines.xcconfig:

2011-10-27  Anders Carlsson  <andersca@apple.com>

        Rename Plugin::geometryDidChange to Plugin::deprecatedGeometryDidChange
        https://bugs.webkit.org/show_bug.cgi?id=71065

        Reviewed by Simon Fraser.

        In preparation for adding a version of geometryDidChange that doesn't take window coordinates.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::geometryDidChange):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::deprecatedGeometryDidChange):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/PDF/BuiltInPDFView.cpp:
        (WebKit::BuiltInPDFView::deprecatedGeometryDidChange):
        * WebProcess/Plugins/PDF/BuiltInPDFView.h:
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::deprecatedGeometryDidChange):
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::viewGeometryDidChange):

2011-10-27  Michael Saboff  <msaboff@apple.com>

        Investigate storing strings in 8-bit buffers when possible
        https://bugs.webkit.org/show_bug.cgi?id=66161

        Added export of StringImpl::getData16SlowCase for linking tests.

        Reviewed by Geoffrey Garen.

        * win/WebKit2.def:

2011-10-27  Sam Weinig  <sam@webkit.org>

        Add allowsPlugIns property to WKBrowsingContextGroup
        https://bugs.webkit.org/show_bug.cgi?id=70987

        Reviewed by Anders Carlsson.

        Test: WKBrowsingContextGroupTest.GetSetPluginsEnabled

        * UIProcess/API/mac/WKBrowsingContextGroup.h:
        * UIProcess/API/mac/WKBrowsingContextGroup.mm:
        (-[WKBrowsingContextGroup allowsJavaScript]):
        (-[WKBrowsingContextGroup setAllowsJavaScript:]):
        Rename to allowsJavaScript/setAllowsJavaScript.

        (-[WKBrowsingContextGroup allowsPlugIns]):
        (-[WKBrowsingContextGroup setAllowsPlugIns:]):
        Add allowsPlugIns/setAllowsPlugIns.

2011-10-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Cairo] Implement ShareableBitmap::paint() when scaleFactor=1
        https://bugs.webkit.org/show_bug.cgi?id=71027

        Reviewed by Martin Robinson.

        Fixes windowless plugins in GTK+ port.

        * Shared/cairo/ShareableBitmapCairo.cpp:
        (WebKit::ShareableBitmap::paint): When scaleFactor is 1, simply
        call the paint method that doesn't receive a scaleFactor.

2011-10-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r98556.
        http://trac.webkit.org/changeset/98556
        https://bugs.webkit.org/show_bug.cgi?id=71031

        The test added by the patch doesn't pass on Snow Leopard
        (Requested by rniwa on #webkit).

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

2011-10-27  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSCell::toThisObject
        https://bugs.webkit.org/show_bug.cgi?id=70958

        Reviewed by Geoffrey Garen.

        Converted all instances of toThisObject to static functions, 
        added toThisObject to the MethodTable, and replaced all call sites
        with a corresponding lookup in the MethodTable.

        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::NPJSObject::invoke):

2011-10-27  Adam Roben  <aroben@apple.com>

        Add WKBundlePageGetBackingScaleFactor

        Fixes <http://webkit.org/b/71025> <rdar://problem/10355037> REGRESSION (r97191): Clients
        can't reliably determine the scale factor of snapshots returned via
        WKBundlePageCreateSnapshot* API

        Reviewed by Sam Weinig.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageGetBackingScaleFactor):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        Added. Calls through to WebPage::deviceScaleFactor.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::deviceScaleFactor):
        * WebProcess/WebPage/WebPage.h:
        Added. Calls through to Page::deviceScaleFactor.

2011-10-27  Zalan Bujtas  <zbujtas@gmail.com>

        [Qt][WK2]Add setViewportSize API to WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=71006

        Reviewed by Kenneth Rohde Christiansen.

        Fixed layout rendering needs the viewport size information on the WebProcess
        side to be able to do viewport attribute calculations.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setViewportSize):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::viewportSize):
        * WebProcess/WebPage/WebPage.messages.in:

2011-10-27  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt][WK2] Move the C API callback setup out of QtWebPageProxy
        https://bugs.webkit.org/show_bug.cgi?id=70965

        Reviewed by Andreas Kling.

        Move out the setup of C API callback into ClientImpl file
        so that QtWebPageProxy will be less polluted.

        * UIProcess/qt/ClientImpl.cpp:
        (qt_wk_didStartProvisionalLoadForFrame):
        (qt_wk_didFailProvisionalLoadWithErrorForFrame):
        (qt_wk_didCommitLoadForFrame):
        (qt_wk_didFinishLoadForFrame):
        (qt_wk_didFailLoadWithErrorForFrame):
        (qt_wk_didSameDocumentNavigationForFrame):
        (qt_wk_didReceiveTitleForFrame):
        (qt_wk_didStartProgress):
        (qt_wk_didChangeProgress):
        (qt_wk_didFinishProgress):
        (qt_wk_runJavaScriptAlert):
        (qt_wk_runJavaScriptConfirm):
        (qt_wk_runJavaScriptPrompt):
        (qt_wk_setStatusText):
        (qt_wk_runOpenPanel):
        (qt_wk_mouseDidMoveOverElement):
        (qt_wk_decidePolicyForNavigationAction):
        (qt_wk_decidePolicyForResponse):
        (setupPageLoaderClient):
        (setupPageUiClient):
        (setupPagePolicyClient):
        * UIProcess/qt/ClientImpl.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::init):
        * UIProcess/qt/QtWebPageProxy.h:
        (QtWebPageProxy::viewInterface):

2011-10-27  Zeno Albisser  <zeno.albisser@nokia.com>

        [Qt][WK2] Remove QAction from MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=70525

        This fixes the commonview tests that were failing
        after r98447.
        WebViewAbstraction must forward actions to both
        the TouchWebView and the DesktopWebView.

        Reviewed by Kenneth Rohde Christiansen.

        * UIProcess/API/qt/tests/commonviewtests/webviewabstraction.cpp:
        (WebViewAbstraction::goBack):
        (WebViewAbstraction::goForward):
        (WebViewAbstraction::stop):
        (WebViewAbstraction::reload):

2011-10-27  Zalan Bujtas  <zbujtas@gmail.com>

        [Qt][WK2]Content size changed event does not require viewport attribute calculation.
        https://bugs.webkit.org/show_bug.cgi?id=70920

        Reviewed by Kenneth Rohde Christiansen.
        
        Remove unnecessary recalculation of viewport attributes.

        * UIProcess/qt/QtTouchViewInterface.cpp:
        (WebKit::QtTouchViewInterface::contentSizeChanged):

2011-10-27  Shinya Kawanaka  <shinyak@google.com>

        Implement legacy text check emulation in unified text check interface.
        https://bugs.webkit.org/show_bug.cgi?id=70299

        Reviewed by Hajime Morita.

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

2011-10-27  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] WebAudio AudioFileReader implementation
        https://bugs.webkit.org/show_bug.cgi?id=69834

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Link against libfftw.

2011-10-26  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r98153): Safari crashes if WebProcess crashed during printing
        https://bugs.webkit.org/show_bug.cgi?id=70982

        Reviewed by Dan Bernstein.

        * UIProcess/API/mac/WKPrintingView.mm: (-[WKPrintingView _delayedResumeAutodisplayTimerFired]):
        Null check page, it may be invalid already.

2011-10-26  Jeff Miller  <jeffm@apple.com>

        WebKit2 should respect secret WebKitOmitPDFSupport preference on the Mac
        https://bugs.webkit.org/show_bug.cgi?id=70943
        
        If WebKitOmitPDFSupport pref is set, disable both the new "plug-in" for subframes and the PDFKit-based support for the main frame only.

        Reviewed by Alexey Proskuryakov.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::getPlugins): Don't register built-in PDF plugin if WebKitOmitPDFSupport pref is set.
        
        * UIProcess/WebContext.h: Added omitPDFSupport().
        
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::canShowMIMEType): Don't show PDFs if WebKitOmitPDFSupport is set.
        
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::omitPDFSupport): Added.

2011-10-26  Sam Weinig  <sam@webkit.org>

        Add initial setting to WKBrowsingContextGroup
        https://bugs.webkit.org/show_bug.cgi?id=70942

        Reviewed by Anders Carlsson.

        Test: WKBrowsingContextGroupTest.

        * UIProcess/API/mac/WKBrowsingContextGroup.h:
        * UIProcess/API/mac/WKBrowsingContextGroup.mm:
        (-[WKBrowsingContextGroup isJavaScriptEnabled]):
        (-[WKBrowsingContextGroup setJavaScriptEnabled:]):
        Add setting to enabled/disable javascript. By default it is enabled. 

2011-10-25  Alexey Proskuryakov  <ap@apple.com>

        Embedded PDFs should be known to DocumentLoader
        https://bugs.webkit.org/show_bug.cgi?id=70864

        Reviewed by Darin Adler.

        * WebProcess/Plugins/Plugin.h: Plugin stream load notifications now contain a suggested
        file name, in case the plug-in wants to save the file properly.

        * WebProcess/Plugins/PDF/BuiltInPDFView.h:
        * WebProcess/Plugins/PDF/BuiltInPDFView.cpp:
        (WebKit::BuiltInPDFView::addArchiveResource): Add the PDF as resource in DocumentLoader.
        (WebKit::BuiltInPDFView::pdfDocumentDidLoad): Call addArchiveResource.
        (WebKit::BuiltInPDFView::initialize): We need to remember source URL to create a resource
        for that. The URL needs to match one in HitTestResult, so we can't use response URL.
        (WebKit::BuiltInPDFView::streamDidReceiveResponse): Remember suggested file name, so
        that we could put it in archive resource later.
        (WebKit::BuiltInPDFView::manualStreamDidReceiveResponse): Ditto.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::streamDidReceiveResponse):
        (WebKit::PluginControllerProxy::manualStreamDidReceiveResponse):
        Pass an empty string for suggested file name. No plug-in that runs in a separate process
        cares about it, so it's not sent to the plugin process.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::streamDidReceiveResponse):
        (WebKit::NetscapePlugin::manualStreamDidReceiveResponse):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        Updated for new signatures.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::streamDidReceiveResponse):
        (WebKit::PluginProxy::manualStreamDidReceiveResponse):
        * WebProcess/Plugins/PluginProxy.h:
        Updated for new signatures.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::Stream::didReceiveResponse):
        (WebKit::PluginView::manualLoadDidReceiveResponse):
        Pass suggested file name to plug-in, in case the plug-in wants to save the file properly.

2011-10-26  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove getOwnPropertySlotVirtual
        https://bugs.webkit.org/show_bug.cgi?id=70741

        Reviewed by Geoffrey Garen.

        Removed all declarations and definitions of getOwnPropertySlotVirtual.
        Also replaced all call sites to getOwnPropertyVirtualVirtual with a 
        corresponding lookup in the MethodTable.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        * WebProcess/Plugins/Netscape/JSNPObject.h:

2011-10-26  Alejandro G. Castro  <alex@igalia.com>

        [GTK] [WK2] Add WebKit2 distcheck support
        https://bugs.webkit.org/show_bug.cgi?id=70933

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Add a bunch of missing files from API and
        sources, also include more files in the EXTRA_DIST.
        * UIProcess/API/gtk/docs/GNUmakefile.am: Add the version.xml to
        the cleaning section.

2011-10-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix gtk-doc warnings and style issues in WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=70930

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitBackForwardListItem.cpp:
        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webkit_settings_class_init):
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:

2011-10-26  Anders Carlsson  <andersca@apple.com>

        Use the right contents scale factor for non-Mac plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=70939

        Reviewed by Adam Roben.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::paint):
        (WebKit::PluginProxy::geometryDidChange):
        (WebKit::PluginProxy::update):

2011-10-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add missing symbols to WebKit2 gtk-doc files
        https://bugs.webkit.org/show_bug.cgi?id=70927

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add sections for
        WebKitBackForwardList, WebKitBackForwardListItem and WebKitSettings.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add missing symbols.
        * UIProcess/API/gtk/docs/webkit2gtk.types: Add missing types.

2011-10-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Inconsistent name of WebKitSettings macros
        https://bugs.webkit.org/show_bug.cgi?id=70924

        Reviewed by Martin Robinson.

        Rename WEBKIT_TYPE_WEB_SETTINGS as WEBKIT_TYPE_SETTINGS and
        WEBKIT_IS_WEB_SETTINGS as WEBKIT_IS_SETTINGS.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webkit_settings_init):
        (webkit_settings_new):
        (webkit_settings_get_enable_javascript):
        (webkit_settings_set_enable_javascript):
        (webkit_settings_get_auto_load_images):
        (webkit_settings_set_auto_load_images):
        (webkit_settings_get_load_icons_ignoring_image_load_setting):
        (webkit_settings_set_load_icons_ignoring_image_load_setting):
        (webkit_settings_get_enable_offline_web_application_cache):
        (webkit_settings_set_enable_offline_web_application_cache):
        (webkit_settings_get_enable_html5_local_storage):
        (webkit_settings_set_enable_html5_local_storage):
        (webkit_settings_get_enable_html5_database):
        (webkit_settings_set_enable_html5_database):
        (webkit_settings_get_enable_xss_auditor):
        (webkit_settings_set_enable_xss_auditor):
        (webkit_settings_get_enable_frame_flattening):
        (webkit_settings_set_enable_frame_flattening):
        (webkit_settings_get_enable_plugins):
        (webkit_settings_set_enable_plugins):
        (webkit_settings_get_enable_java):
        (webkit_settings_set_enable_java):
        (webkit_settings_get_javascript_can_open_windows_automatically):
        (webkit_settings_set_javascript_can_open_windows_automatically):
        (webkit_settings_get_enable_hyperlink_auditing):
        (webkit_settings_set_enable_hyperlink_auditing):
        * UIProcess/API/gtk/WebKitSettings.h:

2011-10-26  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Rename clean-up of QtPinchGestureRecognizer and QtViewportInteractionEngine
        https://bugs.webkit.org/show_bug.cgi?id=70903

        Reviewed by Kenneth Rohde Christiansen.

        Rename computeTouchCenter to computePinchCenter,
        and use the plural form of coordinate where appropriate.

        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebViewPrivate::_q_viewportUpdated):
        * UIProcess/qt/QtPinchGestureRecognizer.cpp:
        (WebKit::computePinchCenter):
        (WebKit::QtPinchGestureRecognizer::recognize):
        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::contentRectInViewportCoordinates):
        (WebKit::QtViewportInteractionEngine::event):
        (WebKit::QtViewportInteractionEngine::pinchGestureStarted):
        (WebKit::QtViewportInteractionEngine::pinchGestureRequestUpdate):
        (WebKit::QtViewportInteractionEngine::scaleContent):
        * UIProcess/qt/QtViewportInteractionEngine.h:

2011-10-26  Zalan Bujtas  <zbujtas@gmail.com>

        Name viewport change event consistently.
        https://bugs.webkit.org/show_bug.cgi?id=70901

        Reviewed by Kenneth Rohde Christiansen.

        Use ViewportPropertiesDidChange term consistently throughout WebKit.

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::didChangeViewportProperties):
        * UIProcess/API/efl/PageClientImpl.h:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::didChangeViewportProperties):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didChangeViewportProperties):
        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebViewPrivate::didChangeViewportProperties):
        * UIProcess/API/qt/qdesktopwebview_p.h:
        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebViewPrivate::didChangeViewportProperties):
        * UIProcess/API/qt/qtouchwebview_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didChangeViewportProperties):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/qt/QtDesktopWebPageProxy.cpp:
        (QtDesktopWebPageProxy::didChangeViewportProperties):
        * UIProcess/qt/QtDesktopWebPageProxy.h:
        * UIProcess/qt/QtTouchViewInterface.cpp:
        (WebKit::QtTouchViewInterface::didChangeViewportProperties):
        * UIProcess/qt/QtTouchViewInterface.h:
        * UIProcess/qt/QtViewInterface.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::didChangeViewportProperties):
        * UIProcess/qt/QtWebPageProxy.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::didChangeViewportProperties):
        * UIProcess/win/WebView.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::dispatchViewportPropertiesDidChange):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2011-10-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove g_thread_init() calls from gtk-doc scanner too
        https://bugs.webkit.org/show_bug.cgi?id=70908

        Reviewed by Gustavo Noronha Silva.

        * UIProcess/API/gtk/docs/GNUmakefile.am:

2011-10-25  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Add the animations on the ViewportInteractionEngine
        https://bugs.webkit.org/show_bug.cgi?id=66664

        Reviewed by Kenneth Rohde Christiansen.

        Introduce a QScroller based panning and a QVariantAnimation based scale animation.
        QScroller also handles flick gestures and animates overshoot.
        If a pinch gesture ends, the scale animation will scale and reposition the content
        such that it is within valid boundaries. The content is by default animated such
        that the content position as seen in the center of the visible viewport stays
        in the center, unless the content would be out of valid bounds.
        The patch also simplifies the ViewportUpdateGuard by using reference counting
        instead of a boolean for defering update requests.

        * UIProcess/qt/QtPanGestureRecognizer.cpp:
        (WebKit::QtPanGestureRecognizer::recognize):
        * UIProcess/qt/QtPanGestureRecognizer.h:
        * UIProcess/qt/QtPinchGestureRecognizer.cpp:
        (WebKit::QtPinchGestureRecognizer::recognize):
        * UIProcess/qt/QtTouchWebPageProxy.cpp:
        (QtTouchWebPageProxy::doneWithTouchEvent):
        * UIProcess/qt/QtViewportInteractionEngine.cpp:
        (WebKit::bindToScaleLimits):
        (WebKit::ViewportUpdateGuard::ViewportUpdateGuard):
        (WebKit::ViewportUpdateGuard::~ViewportUpdateGuard):
        (WebKit::QtViewportInteractionEngine::QtViewportInteractionEngine):
        (WebKit::QtViewportInteractionEngine::innerBoundedScale):
        (WebKit::QtViewportInteractionEngine::outerBoundedScale):
        (WebKit::QtViewportInteractionEngine::updateVisibleRect):
        (WebKit::QtViewportInteractionEngine::scaleAnimationStateChanged):
        (WebKit::QtViewportInteractionEngine::event):
        (WebKit::QtViewportInteractionEngine::stopAnimations):
        (WebKit::QtViewportInteractionEngine::calculateBoundariesForScale):
        (WebKit::QtViewportInteractionEngine::animateContentIntoBoundariesIfNeeded):
        (WebKit::QtViewportInteractionEngine::reset):
        (WebKit::QtViewportInteractionEngine::setConstraints):
        (WebKit::QtViewportInteractionEngine::panGestureStarted):
        (WebKit::QtViewportInteractionEngine::panGestureRequestUpdate):
        (WebKit::QtViewportInteractionEngine::panGestureCancelled):
        (WebKit::QtViewportInteractionEngine::panGestureEnded):
        (WebKit::QtViewportInteractionEngine::pinchGestureStarted):
        (WebKit::QtViewportInteractionEngine::pinchGestureRequestUpdate):
        (WebKit::QtViewportInteractionEngine::pinchGestureEnded):
        (WebKit::QtViewportInteractionEngine::contentViewportChanged):
        * UIProcess/qt/QtViewportInteractionEngine.h:
        (WebKit::QtViewportInteractionEngine::scroller):
        (WebKit::QtViewportInteractionEngine::ScaleAnimation::ScaleAnimation):
        (WebKit::QtViewportInteractionEngine::ScaleAnimation::updateCurrentValue):

2011-10-26  Zeno Albisser  <zeno.albisser@nokia.com>

        [Qt][WK2] Rewrite MiniBrowser in QML
        https://bugs.webkit.org/show_bug.cgi?id=70315

        Add the first QML based implementation of MiniBrowser.

        Patch by Jocelyn Turcotte <jocelyn.turcotte@nokia.com>,
                 Zeno Albisser <zeno.albisser@nokia.com>

        Reviewed by Tor Arne Vestbø.

        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebView::mousePressEvent):

 2011-10-20  Zeno Albisser  <zeno.albisser@nokia.com>

        [Qt][WK2] Disable Context Menus until we have a proper QML implementation
        https://bugs.webkit.org/show_bug.cgi?id=70537

        This is just a temporary fix to avoid crashes in QtGui based
        MiniBrowser that does not link to QtWidgets.

        Patch by Jocelyn Turcotte <jocelyn.turcotte@nokia.com>,
                 Zeno Albisser <zeno.albisser@nokia.com>

        Reviewed by Simon Hausmann.

        * UIProcess/qt/WebContextMenuProxyQt.cpp:
        (WebKit::WebContextMenuProxyQt::showContextMenu):
        (WebKit::WebContextMenuProxyQt::createContextMenu):

2011-10-25  Zeno Albisser  <zeno.albisser@nokia.com>

        [Qt][WK2] Remove QAction from MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=70525

        In order to rewrite MiniBrowser in QML we need a suitable
        mechanism for triggering navigation actions.
        Due to the QtWidgets dependency of QAction the current
        solution is not suitable anymore. Therefore we introduce
        invokable methods and export properties in QWebNavigationController.

        Patch by Jocelyn Turcotte <jocelyn.turcotte@nokia.com>,
                 Zeno Albisser <zeno.albisser@nokia.com>

        Reviewed by Simon Hausmann.

        * UIProcess/API/qt/WKView.h:
        * UIProcess/API/qt/qdesktopwebview.h:
        * UIProcess/API/qt/qtouchwebpage.h:
        * UIProcess/API/qt/qwebkittypes.h: Removed.
        * UIProcess/API/qt/qwebnavigationcontroller.cpp:
        (QWebNavigationController::QWebNavigationController):
        (QWebNavigationController::canGoBack):
        (QWebNavigationController::canGoForward):
        (QWebNavigationController::canStop):
        (QWebNavigationController::canReload):
        (QWebNavigationController::goBack):
        (QWebNavigationController::goForward):
        (QWebNavigationController::stop):
        (QWebNavigationController::reload):
        * UIProcess/API/qt/qwebnavigationcontroller.h:
        * UIProcess/API/qt/tests/commonviewtests/tst_commonviewtests.cpp:
        (tst_CommonViewTests::backAndForward):
        (tst_CommonViewTests::reload):
        (tst_CommonViewTests::stop):
        * UIProcess/API/qt/tests/commonviewtests/webviewabstraction.cpp:
        (WebViewAbstraction::goBack):
        (WebViewAbstraction::goForward):
        (WebViewAbstraction::stop):
        (WebViewAbstraction::reload):
        * UIProcess/API/qt/tests/commonviewtests/webviewabstraction.h:
        * UIProcess/API/qt/tests/qdesktopwebview/tst_qdesktopwebview.cpp:
        (tst_QDesktopWebView::navigationStatusAtStartup):
        (LoadStartedCatcher::onLoadStarted):
        (tst_QDesktopWebView::stopEnabledAfterLoadStarted):
        * UIProcess/API/qt/tests/qtouchwebview/tst_qtouchwebview.cpp:
        (tst_QTouchWebView::navigationStatusAtStartup):
        * UIProcess/qt/ClientImpl.cpp:
        (dispatchLoadSucceeded):
        (dispatchLoadFailed):
        (qt_wk_didStartProvisionalLoadForFrame):
        (qt_wk_didCommitLoadForFrame):
        (qt_wk_didSameDocumentNavigationForFrame):
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::QtWebPageProxy):
        (QtWebPageProxy::canGoBack):
        (QtWebPageProxy::goBack):
        (QtWebPageProxy::canGoForward):
        (QtWebPageProxy::goForward):
        (QtWebPageProxy::canStop):
        (QtWebPageProxy::stop):
        (QtWebPageProxy::canReload):
        (QtWebPageProxy::reload):
        (QtWebPageProxy::navigationStateChanged):
        (QtWebPageProxy::didRelaunchProcess):
        (QtWebPageProxy::processDidCrash):
        * UIProcess/qt/QtWebPageProxy.h:
        * WebKit2API.pri:

2011-10-26  Ryosuke Niwa  <rniwa@webkit.org>

        Another GTK build fix attempt after r98413 and r98416.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::paint):
        (WebKit::PluginProxy::geometryDidChange):
        (WebKit::PluginProxy::update):

2011-10-25  Ryosuke Niwa  <rniwa@webkit.org>

        C/C++ needs ; after each statement.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::geometryDidChange):

2011-10-25  Ryosuke Niwa  <rniwa@webkit.org>

        GTK build fix attempt after r98413 and r98416.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::paint):
        (WebKit::PluginControllerProxy::geometryDidChange):

2011-10-25  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove deletePropertyVirtual
        https://bugs.webkit.org/show_bug.cgi?id=70738

        Reviewed by Geoffrey Garen.

        Removed all declarations and definitions of deletePropertyVirtual.
        Also replaced all call sites to deletePropertyVirtual with a 
        corresponding lookup in the MethodTable.

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

2011-10-25  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed build fix after r97587.

        * win/WebKit2CFLite.def:

2011-10-25  Anders Carlsson  <andersca@apple.com>

        CG plug-ins are always given a context with a scale factor of 1, even when the device scale factor is something else
        https://bugs.webkit.org/show_bug.cgi?id=67227
        <rdar://problem/10048319>

        Reviewed by Sam Weinig.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::paint):
        Apply the scale factor when painting.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::paint):
        Apply the scale factor when painting.

        (WebKit::PluginProxy::geometryDidChange):
        Make sure to apply the contents scale factor to the backing store size.

        (WebKit::PluginProxy::update):
        Apply the scale factor (when painting).

2011-10-25  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove putVirtual
        https://bugs.webkit.org/show_bug.cgi?id=70740

        Reviewed by Geoffrey Garen.

        Removed all declarations and definitions of putVirtual.
        Also replaced all call sites to putVirtual with a 
        corresponding lookup in the MethodTable.

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

2011-10-25  Anders Carlsson  <andersca@apple.com>

        Plug-ins have no way to find out when the device scale factor changes
        https://bugs.webkit.org/show_bug.cgi?id=67226
        <rdar://problem/10048276>

        Reviewed by Sam Weinig.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::geometryDidChange):
        * PluginProcess/PluginControllerProxy.h:
        This now takes the contentsScaleFactor and calls contentsScaleFactorChanged on its plug-in
        if the scale factor changes.

        * PluginProcess/PluginControllerProxy.messages.in:
        GeometryDidChange now takes a contents scale factor parameter.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::contentsScaleFactorChanged):
        Implement contentsScaleFactorChanged and call NPP_SetValue with the new scale factor.

        * WebProcess/Plugins/PDF/BuiltInPDFView.cpp:
        (WebKit::BuiltInPDFView::contentsScaleFactorChanged):
        * WebProcess/Plugins/PDF/BuiltInPDFView.h:
        Add stub.

        * WebProcess/Plugins/Plugin.h:
        Add pure virtual contentsScaleFactorChanged member function.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::geometryDidChange):
        Add geometryDidChange overload that doesn't take any parameters. Make it send over the
        new scale factor to the plug-in process.

        (WebKit::PluginProxy::contentsScaleFactorChanged):
        Call geometryDidChange.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::setDeviceScaleFactor):
        Call Plugin::contentsScaleFactorChanged.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setDeviceScaleFactor):
        Call setDeviceScaleFactor on all registered plug-ins.

2011-10-25  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=70852
        Setting up a HiDPI base-level GraphicsContext should be more straightforward for 
        WebKit2

        Reviewed by Dan Bernstein.

        When we need a base-level HiDPI GraphicsContext, call into new GraphicsContext api 
        GraphicsContext::applyDeviceScaleFactor() rather than manually scaling and 
        adjusting the base CTM.
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::display):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::snapshotInViewCoordinates):
        (WebKit::WebPage::scaledSnapshotInDocumentCoordinates):

2011-10-25  Anders Carlsson  <andersca@apple.com>

        Plug-ins have to use JavaScript to find out the current device scale factor
        https://bugs.webkit.org/show_bug.cgi?id=67225
        <rdar://problem/10048258>

        Reviewed by Darin Adler.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::PluginControllerProxy):
        Initialize m_contentsScaleFactor.

        * PluginProcess/PluginControllerProxy.h:
        Add contentsScaleFactor member function and m_contentsScaleFactor member variable.

        * PluginProcess/PluginCreationParameters.cpp:
        (WebKit::PluginCreationParameters::PluginCreationParameters):
        (WebKit::PluginCreationParameters::encode):
        (WebKit::PluginCreationParameters::decode):
        * PluginProcess/PluginCreationParameters.h:
        Add contentsScaleFactor to the creation parameters.

        * PluginProcess/mac/PluginControllerProxyMac.mm:
        (WebKit::PluginControllerProxy::contentsScaleFactor):
        Return the cached m_contentsScaleFactor.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue):
        Handle getting the scale factor by calling NetscapePlugin::contentsScaleFactor.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::contentsScaleFactor):
        Ask the plug-in controller for the contents scale factor.

        * WebProcess/Plugins/PluginController.h:
        Add contentsScaleFactor pure virtual member function.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::initialize):
        Set contentsScaleFactor in the creation parameters.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::contentsScaleFactor):
        Get the device scale factor from the page.

        * WebProcess/Plugins/PluginView.h:
        Add contentsScaleFactor().

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setDeviceScaleFactor):
        Bail if the scale factor didn't change.

2011-10-25  Sam Weinig  <sam@webkit.org>

        Flesh out WKBrowsingContextLoadDelegate a bit
        https://bugs.webkit.org/show_bug.cgi?id=70846

        Add didReceiveServerRedirectForProvisionalLoad, didFailProvisionalLoad
        and didFailLoad.

        Reviewed by Anders Carlsson.

        Test: WKBrowsingContextLoadDelegateTest

        * UIProcess/API/mac/WKBrowsingContextController.mm:
        (didReceiveServerRedirectForProvisionalLoadForFrame):
        (didFailProvisionalLoadWithErrorForFrame):
        (didFailLoadWithErrorForFrame):
        (setUpPageLoaderClient):
        * UIProcess/API/mac/WKBrowsingContextLoadDelegate.h:

2011-10-25  Anders Carlsson  <andersca@apple.com>

        Assertion failure when zooming a PDF in an iframe
        https://bugs.webkit.org/show_bug.cgi?id=70849

        Reviewed by Alexey Proskuryakov.

        If the plug-in doesn't want window relative coordinates, we shouldn't give the plug-in window relative coordinates.

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

2011-10-25  Sam Weinig  <sam@webkit.org>

        Make loadFileURL:restrictToFilesWithin: work, albeit, without the correct
        restrictions for now.

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController loadFileURL:restrictToFilesWithin:]):

2011-10-25  Anders Carlsson  <andersca@apple.com>

        PDF SUBFRAMES: Incomplete repaint after pinch to zoom
        https://bugs.webkit.org/show_bug.cgi?id=70821
        <rdar://problem/10312733>

        Reviewed by Simon Fraser.

        Add a new pure virtual member function, Plugin::wantsWindowRelativeCoordinates.
        If a plug-in subclass returns true, we'll keep giving the plug-in coordinates that
        are relative to the containing window. If a plug-in subclass returns false, we'll give it
        coordinates in a much more sane coordinate system, with the origin at the top left corner of the plug-in.

        Change BuiltinPDFView to return false so that it'll work correctly with pinch to zoom.
        
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::wantsWindowRelativeCoordinates):
        Make wantsWindowRelativeCoordinates return true.

        * WebProcess/Plugins/PDF/BuiltInPDFView.cpp:
        (WebKit::BuiltInPDFView::paint):
        Remove translation since the graphics context is already set up in the right way.

        (WebKit::BuiltInPDFView::paintContent):
        No need to offset by the plug-in view location anymore.

        (WebKit::BuiltInPDFView::paintControls):
        Account for the scrollbars being children of the parent scroll view here.

        (WebKit::BuiltInPDFView::wantsWindowRelativeCoordinates):
        Return false.

        (WebKit::BuiltInPDFView::convertFromContainingViewToScrollbar):
        Implement this so that scrollbar hit testing works correctly.

        * WebProcess/Plugins/Plugin.h:
        Add wantsWindowRelativeCoordinates.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::wantsWindowRelativeCoordinates):
        Return true for now.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::renderer):
        Add simple getter.

        (WebKit::PluginView::paint):
        Handle the case when the plug-in doesn't want window relative coordinates.

        (WebKit::PluginView::transformsAffectFrameRect):
        Return true here.

        (WebKit::PluginView::viewGeometryDidChange):
        No need to adjust the bounds to account for the scale factor now, since the frame rect will always be the
        same regardless of the transform.

        (WebKit::PluginView::clipRectInWindowCoordinates):
        Ditto.

2011-10-25  John Sullivan  <sullivan@apple.com>

        "Open with" item missing from PDF context menu in some cases
        https://bugs.webkit.org/show_bug.cgi?id=70828
        <rdar://problem/10034302>

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/PDFViewController.mm:
        (insertOpenWithDefaultPDFMenuItem):
        New helper function, extracted from -menuForEvent:. Identical to original code except
        that it inserts the item at a specified index, rather than always at the end.
        (-[WKPDFView menuForEvent:]):
        Now keeps track of whether the Open With item has been inserted while iterating through
        the PDFKit-supplied menu items looking for a "Copy" item. If a "Copy" item is not found,
        inserts the Open With item at the top of the context menu.

2011-10-25  Zeno Albisser  <zeno.albisser@nokia.com>

        [Qt][WK2] QDesktopWebView and QTouchWebView should be declared in the meta type system.
        https://bugs.webkit.org/show_bug.cgi?id=70693

        This change allows us to use the template based features of the meta type system
        such as using the WebView classes as types for QVariant.

        Reviewed by Simon Hausmann.

        * UIProcess/API/qt/qdesktopwebview.h:
        * UIProcess/API/qt/qtouchwebview.h:

2011-10-25  Zalan Bujtas  <zbujtas@gmail.com>

        [Qt][WK2] Remove redundant setPageIsVisible() API
        https://bugs.webkit.org/show_bug.cgi?id=70520

        Use DrawingAreaProxy::visibilityDidChange() instead of DrawingAreaProxy::setPageIsVisible()
        Remove DrawingAreaProxy::setPageIsVisible(), not used anymore.
        This change disables the ability of suspending and resuming painting for TiledDrawingAreaProxy.
        However, TiledDrawingAreaProxy is about to be deprecated by using DrawingAreaProxyImpl
        as the UI process drawing area proxy for tiled based rendering.

        Reviewed by Simon Hausmann.

        * UIProcess/API/qt/qtouchwebpage.cpp:
        (QTouchWebPage::QTouchWebPage):
        (QTouchWebPagePrivate::setPage):
        * UIProcess/API/qt/qtouchwebpage.h:
        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebView::QTouchWebView):
        (QTouchWebView::touchEvent):
        (QTouchWebView::onVisibleChanged):
        * UIProcess/API/qt/qtouchwebview.h:
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::TiledDrawingAreaProxy):
        (WebKit::TiledDrawingAreaProxy::deviceScaleFactorDidChange):
        * UIProcess/TiledDrawingAreaProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewStateDidChange):
        * UIProcess/qt/QtWebPageProxy.cpp:
        * UIProcess/qt/QtWebPageProxy.h:

2011-10-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add go_to_back_forward_list_item() to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=69825

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitBackForwardListItem.cpp:
        (webkitBackForwardListItemGetWKItem):
        * UIProcess/API/gtk/WebKitBackForwardListPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_go_to_back_forward_list_item):
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/tests/TestBackForwardList.cpp:
        (testBackForwardListNavigation):

2011-10-25  Vamshikrishna Yellenki  <vamshi@motorola.com>

        [WK2]Critical warning while building WebKit2 GTK+
        https://bugs.webkit.org/show_bug.cgi?id=70591

        Reviewed by Martin Robinson.

        * WebProcess/WebPage/WebPage.cpp: Included DataObjectGtk.h to avoid warnings for GTK

2011-10-24  Sam Weinig  <sam@webkit.org>

        Simplify url accessors on WKBrowsingContextController
        https://bugs.webkit.org/show_bug.cgi?id=70797

        Reviewed by Anders Carlsson.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageCopyActiveURL):
        (WKPageCopyProvisionalURL):
        (WKPageCopyCommittedURL):
        * UIProcess/API/C/WKPage.h:
        Add accessors to C SPI.

        * UIProcess/API/mac/WKBrowsingContextController.h:
        Remove unreachableURL accessor for now. It may make a glorious return when we have
        error page support.

        * UIProcess/API/mac/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController activeURL]):
        (-[WKBrowsingContextController provisionalURL]):
        (-[WKBrowsingContextController committedURL]):
        Implement these in terms of the new C SPI.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::activeURL):
        Add computation of the "active" URL, which is the URL one would show
        in an address field. It is the pending URL when there is one, the provisional
        URL when there is one, and otherwise the committed/final URL.

        (WebKit::WebPageProxy::provisionalURL):
        (WebKit::WebPageProxy::committedURL):
        Add access to the main frame URL.
        * UIProcess/WebPageProxy.h:

2011-10-24  Sam Weinig  <sam@webkit.org>

        Hook up minimalist load delegate to WKBrowsingContextController
        https://bugs.webkit.org/show_bug.cgi?id=70764

        Reviewed by Simon Fraser.

        * UIProcess/API/mac/WKBrowsingContextController.h:
        * UIProcess/API/mac/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController loadDelegate]):
        (-[WKBrowsingContextController setLoadDelegate:]):
        Add loadDelegate getter/setter. As per convention, the delegate is not
        retained.

        (didStartProvisionalLoadForFrame):
        (didCommitLoadForFrame):
        (didFinishLoadForFrame):
        (setUpPageLoaderClient):
        (-[WKBrowsingContextController initWithPageRef:]):
        Hookup the delegate to a WKPageLoaderClient.

        * UIProcess/API/mac/WKBrowsingContextLoadDelegate.h: Added.
        Add load delegate as a proper protocol.

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

2011-10-24  Michael Saboff  <msaboff@apple.com>

        WebKit doesn't build with recent changes to libdispatch
        https://bugs.webkit.org/show_bug.cgi?id=70737

        Added initialization for new WebKitSystemInterface function 
        CreateVMPressureDispatchOnMainQueue.

        Reviewed by Geoffrey Garen.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-10-24  Sam Weinig  <sam@webkit.org>

        Add URL getters for the WKBrowsingContextController
        https://bugs.webkit.org/show_bug.cgi?id=70752

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKBrowsingContextController.h:
        * UIProcess/API/mac/WKBrowsingContextController.mm:
        (autoreleased):
        Added helpers for autoreleasing.

        (-[WKBrowsingContextController activeURL]):
        Added buy not implemented yet.

        (-[WKBrowsingContextController pendingURL]):
        (-[WKBrowsingContextController provisionalURL]):
        (-[WKBrowsingContextController commitedURL]):
        (-[WKBrowsingContextController unreachableURL]):
        Added getters.

        (-[WKBrowsingContextController title]):
        Convert to new autoreleased helper.

2011-10-24  Sam Weinig  <sam@webkit.org>

        Add zoom and title support to Objective-C WebKit2 API
        https://bugs.webkit.org/show_bug.cgi?id=70744

        Reviewed by Darin Adler.

        * UIProcess/API/mac/WKBrowsingContextController.h:
        * UIProcess/API/mac/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController title]):
        (-[WKBrowsingContextController textZoom]):
        (-[WKBrowsingContextController setTextZoom:]):
        (-[WKBrowsingContextController pageZoom]):
        (-[WKBrowsingContextController setPageZoom:]):

2011-10-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix make distcheck build
        https://bugs.webkit.org/show_bug.cgi?id=69745

        Reviewed by Martin Robinson.

        * GNUmakefile.am:

2011-10-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Initial implementation of back forward list for WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=69343

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Add new files to compilation.
        * UIProcess/API/gtk/WebKitBackForwardList.cpp: Added.
        (webkitBackForwardListFinalize):
        (webkit_back_forward_list_init):
        (webkit_back_forward_list_class_init):
        (webkitBackForwardListGetOrCreateItem): Helper function that
        creates a new WebKitBackForwardListItem for the given
        WebBackForwardListItem or returns it from the cache if it's
        already cached.
        (webkitBackForwardListCreateList): Helper function to convert a
        WKArray of WebBackForwardListItems into a GList of
        WebKitBackForwardListItems.
        (webkitBackForwardListCreate): Create a new WebKitBackForwardList.
        (webkitBackForwardListChanged): Emits changed signal when the back
        forward list changes.
        (webkit_back_forward_list_get_current_item):
        (webkit_back_forward_list_get_back_item):
        (webkit_back_forward_list_get_forward_item):
        (webkit_back_forward_list_get_nth_item):
        (webkit_back_forward_list_get_length):
        (webkit_back_forward_list_get_back_list):
        (webkit_back_forward_list_get_back_list_with_limit):
        (webkit_back_forward_list_get_forward_list):
        (webkit_back_forward_list_get_forward_list_with_limit):
        * UIProcess/API/gtk/WebKitBackForwardList.h: Added.
        * UIProcess/API/gtk/WebKitBackForwardListItem.cpp: Added.
        (webkitBackForwardListItemFinalize):
        (webkit_back_forward_list_item_init):
        (webkit_back_forward_list_item_class_init):
        (historyItemsMap): Global cache for WebKitBackForwardListItems.
        (webkitBackForwardListItemFinalized):
        (webkitBackForwardListItemGetOrCreate): Helper function that
        creates a new WebKitBackForwardListItem for the given
        WebBackForwardListItem or returns it from the global cache if it's
        already cached.
        (webkit_back_forward_list_item_get_uri):
        (webkit_back_forward_list_item_get_title):
        (webkit_back_forward_list_item_get_original_uri):
        * UIProcess/API/gtk/WebKitBackForwardListItem.h: Added.
        * UIProcess/API/gtk/WebKitBackForwardListPrivate.h: Added.
        * UIProcess/API/gtk/WebKitWebLoaderClient.cpp:
        (didChangeBackForwardList): Call webkitBackForwardListChanged() to
        notify that the list has changed.
        (webkitWebLoaderClientAttachLoaderClientToPage): Add
        implementation for didChangeBackForwardList.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewConstructed):
        (webkit_web_view_get_back_forward_list): Return the back forward
        list of the view.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/tests/GNUmakefile.am: Add new test.
        * UIProcess/API/gtk/tests/TestBackForwardList.cpp: Added.
        (serverCallback):
        (testBackForwardListNavigation):
        (testBackForwardListLimitAndCache):
        (beforeAll):
        (afterAll):
        * UIProcess/API/gtk/tests/TestMain.h:
        (Test::~Test): Check there are no objects leaked.
        (Test::objectFinalized): Callback called when a GObject is
        deleted, used to remove the watched object the list.
        (Test::assertObjectIsDeletedWhenTestFinishes): Add an object to
        the list of watched objects and add a weak pointer to remove it
        from the list when the object is finalized. If there aren't
        objects leaked, the list should be empty when the test finishes.
        * UIProcess/API/gtk/tests/WebViewTest.cpp:
        (WebViewTest::WebViewTest): Watch the web view to make sure it's
        not leaked.
        * UIProcess/API/gtk/tests/WebViewTest.h: Make WebViewTest inherit
        from Test class.
        * UIProcess/API/gtk/webkit2.h: Include WebKitBackForwardList.h and
        WebKitBackForwardListItem.h.
        * UIProcess/API/gtk/webkit2marshal.list:

2011-10-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add helper function to set the loader client in WebKitWebView
        https://bugs.webkit.org/show_bug.cgi?id=70594

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewSetLoaderClient): Helper function to set the loader
        client.
        (webkitWebViewConstructed): Use webkitWebViewSetLoaderClient() to
        avoid unnecessary checks.
        (webkit_web_view_set_loader_client): Use
        webkitWebViewSetLoaderClient().

2011-10-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove g_thread_init() calls
        https://bugs.webkit.org/show_bug.cgi?id=70717

        Reviewed by Xan Lopez.

        With newer glib it's not needed anymore and with previous versions
        it was already called by g_type_init().

        * UIProcess/API/gtk/tests/TestMain.cpp:
        (main):

2011-10-24  Zeno Albisser  <zeno.albisser@nokia.com>

        [Qt][WK2] WebView does not get focus when being clicked / touched in MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=70613

        Make TouchWebView and DesktopWebView take the focus whenever it receives
        a MouseClick or a TouchEvent.

        Reviewed by Simon Hausmann.

        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebView::mousePressEvent):
        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebView::touchEvent):
        * UIProcess/API/qt/qtouchwebview.h:

2011-10-24  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [GTK] [WK2] Memory leaks in WebContextGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=70505

        Free the output of g_build_filename()

        Reviewed by Martin Robinson.

        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformDefaultDatabaseDirectory):
        (WebKit::WebContext::platformDefaultLocalStorageDirectory):

2011-10-23  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove getConstructDataVirtual
        https://bugs.webkit.org/show_bug.cgi?id=70638

        Reviewed by Darin Adler.

        Removed all declarations and definitions of getConstructDataVirtual.
        Also replaced all call sites to getConstructDataVirtual with a 
        corresponding lookup in the MethodTable.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        * WebProcess/Plugins/Netscape/JSNPObject.h:

2011-10-21  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Clicking a print button in a PDF doesn't do anything
        https://bugs.webkit.org/show_bug.cgi?id=70663
        <rdar://problem/9795014>

        Reviewed by Dan Bernstein.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::printMainFrame): Added a public method
        that PDFViewController could call.

        * UIProcess/API/mac/PDFViewController.h:
        * UIProcess/API/mac/PDFViewController.mm:
        (-[WKPDFView PDFViewPerformPrint:]):
        (WebKit::PDFViewController::print):
        Connect PDFView delegate method for printing.

2011-10-21  Sam Weinig  <sam@webkit.org>

        Lookup does not work on text using web fonts in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=70669
        <rdar://problem/10147441>

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupForRange):
        If the font for the range is web font (and therefore no NSFont is 
        available), use the system font of the same size. While not great,
        it approximates what WebKit1 does.

2011-10-21  Sam Weinig  <sam@webkit.org>

        Fix crash below CoreIPC::MessageSender<WebKit::WebPage>::send<Messages::WebPageProxy::DidPerformDictionaryLookup>
        https://bugs.webkit.org/show_bug.cgi?id=70667
        <rdar://problem/9622186>

        Reviewed by Anders Carlsson.

        * Shared/DictionaryPopupInfo.cpp:
        (WebKit::DictionaryPopupInfo::encode):
        (WebKit::DictionaryPopupInfo::decode):
        Account for the fact that the options dictionary can be null. This is due to Lookup passing
        back a null, rather than empty, dictionary when it could not find any interesting characteristics.

2011-10-21  Sam Weinig  <sam@webkit.org>

        Add WKBrowsingContextGroup which wraps WKPageGroupRef
        https://bugs.webkit.org/show_bug.cgi?id=70665

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKBrowsingContextGroup.h: Added.
        * UIProcess/API/mac/WKBrowsingContextGroup.mm: Added.
        (-[WKBrowsingContextGroup initWithIdentifier:]):
        (-[WKBrowsingContextGroup dealloc]):
        (-[WKBrowsingContextGroup pageGroupRef]):
        * UIProcess/API/mac/WKBrowsingContextGroupInternal.h: Added.
        * UIProcess/API/mac/WKView.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:processGroup:browsingContextGroup:]):
        * WebKit2.xcodeproj/project.pbxproj:

2011-10-21  Sam Weinig  <sam@webkit.org>

        Mark member variables of WebKit2 API @private
        https://bugs.webkit.org/show_bug.cgi?id=70655

        Reviewed by Simon Fraser.

        * UIProcess/API/mac/WKBrowsingContextController.h:
        * UIProcess/API/mac/WKView.h:

2011-10-21  Sam Weinig  <sam@webkit.org>

        Rename WKProcessCluster to WKProcessGroup
        https://bugs.webkit.org/show_bug.cgi?id=70654

        Reviewed by Simon Fraser.

        * UIProcess/API/mac/WKProcessCluster.h: Removed.
        * UIProcess/API/mac/WKProcessCluster.mm: Removed.
        * UIProcess/API/mac/WKProcessClusterInternal.h: Removed.
        * UIProcess/API/mac/WKProcessGroup.h: Copied from Source/WebKit2/UIProcess/API/mac/WKProcessCluster.h.
        * UIProcess/API/mac/WKProcessGroup.mm: Copied from Source/WebKit2/UIProcess/API/mac/WKProcessCluster.mm.
        (-[WKProcessGroup initWithInjectedBundleURL:]):
        * UIProcess/API/mac/WKProcessGroupInternal.h: Copied from Source/WebKit2/UIProcess/API/mac/WKProcessClusterInternal.h.
        * UIProcess/API/mac/WKView.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:processCluster:]):
        * WebKit2.xcodeproj/project.pbxproj:

2011-10-21  Sam Weinig  <sam@webkit.org>

        Remove ability to create a WKView without a WKContextRef and WKPageGroupRef
        https://bugs.webkit.org/show_bug.cgi?id=70653

        Reviewed by Simon Fraser.

        Requiring a context and pagegroup removes the concept of global contexts,
        which is something that is both confusing, and makes Objective-C wrapping
        harder.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:processCluster:]):
        * UIProcess/API/mac/WKViewPrivate.h:
        Remove init methods that didn't take both a context and a pagegroup.

2011-10-21  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Crash after printing a view with accelerated compositing content
        https://bugs.webkit.org/show_bug.cgi?id=70643
        <rdar://problem/9479083>

        Reviewed by Darin Adler.

        * UIProcess/API/mac/WKPrintingView.mm: (-[WKPrintingView _delayedResumeAutodisplayTimerFired]):
        We cannot rely on -[WKView drawRect:] calling endPrinting() for us. That call to endPrinting()
        is still necessary to paint e.g. when resizing a window while a print dialog is present.

2011-10-21  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [WK2] WebFrameLoaderClient::shouldFallback() should use a port-specific implementation
        https://bugs.webkit.org/show_bug.cgi?id=70055

        Reviewed by Luiz Agostini.

        In QtWebKit 1, our FrameLoaderClient::shouldFallback was checking for InterruptedForPolicyChange
        error. In WebKit2, we are relying on the common implementation for WebFrameLoaderClient::shouldFallback
        which doesn't check for the same error. Here we add this check only for Qt.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::shouldFallBack):

2011-10-21  Anders Carlsson  <andersca@apple.com>

        Flash of white when loading a page after a web process crash
        https://bugs.webkit.org/show_bug.cgi?id=70615
        <rdar://problem/10306906>

        Reviewed by Darin Adler.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _processDidCrash]):
        (-[WKView _didRelaunchProcess]):
        Remove calls to setNeedsDisplay here.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::processDidCrash):
        Call setNeedsDisplay, but only if calling out to the loader client didn't relaunch the web process.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::setPaintingEnabled):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        (WebKit::DrawingAreaImpl::setNeedsDisplay):
        (WebKit::DrawingAreaImpl::scroll):
        (WebKit::DrawingAreaImpl::setPaintingEnabled):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        Add a way to disable painting completely for a drawing area.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        Disable painting while setting up the web page, otherwise we'll get paint requests when we set the
        active state of the web page.

2011-10-21  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][WK2] Buildfix for newer Qt5. Remove duplicated defines.

        Reviewed by Simon Hausmann.

        * UIProcess/API/qt/tests/util.h:

2011-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebKit2 GTK+ build after r98081.

        * UIProcess/API/gtk/WebKitWebView.h:

2011-10-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r98085.
        http://trac.webkit.org/changeset/98085
        https://bugs.webkit.org/show_bug.cgi?id=70589

        It broke the build (Requested by Ossy on #webkit).

        * UIProcess/API/qt/tests/util.h:

2011-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix API documentation comment for webkit_web_view_get_estimated_load_progress()
        https://bugs.webkit.org/show_bug.cgi?id=70587

        Reviewed by Philippe Normand.

        It's should start with /** to be recognized as API documentation.

        * UIProcess/API/gtk/WebKitWebView.cpp:

2011-10-21  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][WK2] Unreviewed buildfix for newer Qt5. Remove duplicated defines.

        * UIProcess/API/qt/tests/util.h:

2011-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add can_go_back/forward methods to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=69823

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_go_back):
        (webkit_web_view_can_go_back):
        (webkit_web_view_go_forward):
        (webkit_web_view_can_go_forward):
        * UIProcess/API/gtk/WebKitWebView.h:

2011-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add webkit_web_view_stop_loading() to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=69610

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_stop_loading):
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/tests/LoadTrackingTest.cpp:
        (provisionalLoadFailedCallback):
        (loadFailedCallback):
        * UIProcess/API/gtk/tests/TestWebKitWebLoaderClient.cpp:
        (LoadStopTrackingTest::loadCommitted):
        (LoadStopTrackingTest::loadFailed):
        (LoadStopTrackingTest::loadFinished):
        (testLoadCancelled):
        (serverCallback):
        (beforeAll):

2011-10-20  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt][WK2] qweberror* should follow the new file and class naming rules
        https://bugs.webkit.org/show_bug.cgi?id=70550

        Reviewed by Noam Rosenthal.

        Renaming qweberror* files and class to QtWebError*.
        QWebErrorPrivate is now merged into QtWebError.

        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebViewPrivate::loadDidFail):
        * UIProcess/API/qt/qdesktopwebview_p.h:
        * UIProcess/qt/ClientImpl.cpp:
        (dispatchLoadFailed):
        * UIProcess/qt/QtTouchViewInterface.cpp:
        (WebKit::QtTouchViewInterface::loadDidFail):
        * UIProcess/qt/QtTouchViewInterface.h:
        * UIProcess/qt/QtViewInterface.h:
        * UIProcess/qt/QtWebError.cpp: Renamed from Source/WebKit2/UIProcess/qt/qweberror.cpp.
        (QtWebError::QtWebError):
        (QtWebError::type):
        (QtWebError::errorCode):
        (QtWebError::url):
        * UIProcess/qt/QtWebError.h: Renamed from Source/WebKit2/UIProcess/qt/qweberror.h.
        (QtWebError::errorCodeAsHttpStatusCode):
        (QtWebError::errorCodeAsNetworkError):
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::loadDidFail):
        * UIProcess/qt/QtWebPageProxy.h:
        * UIProcess/qt/qweberror_p.h: Removed.
        * WebKit2.pro:

2011-10-20  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r96823): Contextual menu closes immediately when control-clicking in Flash plug-in
        https://bugs.webkit.org/show_bug.cgi?id=70534
        <rdar://problem/10308827>

        Reviewed by Darin Adler.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp: (WebKit::NetscapePlugin::handleContextMenuEvent):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginProxy.cpp: (WebKit::PluginProxy::handleContextMenuEvent):
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::handleEvent):
        Return true when handling contextmenu event, so that plug-ins won't get a default WebKit
        context menu. We can't know if the plug-in is handling mousedown (or even mouseup) by
        displaying a menu.

        * WebProcess/Plugins/PDF/BuiltInPDFView.h:
        * WebProcess/Plugins/PDF/BuiltInPDFView.cpp: (WebKit::BuiltInPDFView::handleContextMenuEvent):
        PDF is the only "plug-in" that wants default WebKit menu now.

2011-10-20  Sam Weinig  <sam@webkit.org>

        Put the WebKit2 C SPI in PrivateHeaders
        https://bugs.webkit.org/show_bug.cgi?id=70549

        Reviewed by Dan Bernstein.

        No change in behavior.

        * WebKit2.xcodeproj/project.pbxproj:

2011-10-20  Brady Eidson  <beidson@apple.com>

        <rdar://problem/9412849> and https://bugs.webkit.org/show_bug.cgi?id=70535
        WK2 - Crash deref'ing a null context menu

        Reviewed by Darin Adler.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didSelectItemFromActiveContextMenu): In some cases that we still can't reproduce,
          this message can be received in the WebProcess after the context menu has been cleared, leading
          to a crash. Turning the ASSERT in to an early return will prevent the crash while we try to learn more
          about how this could happen.

2011-10-20  Gustavo Noronha Silva  <gns@gnome.org>

        GTK+ build fix. Wk2 documentation will be dealt with in future
        patches.

        * UIProcess/API/gtk/docs/GNUmakefile.am:

2011-10-20  Mark Hahnenberg  <mhahnenberg@apple.com>

        Rename static deleteProperty to deletePropertyByIndex
        https://bugs.webkit.org/show_bug.cgi?id=70257

        Reviewed by Geoffrey Garen.

        Renaming versions of deleteProperty that use an unsigned as the property
        name to "deletePropertyByIndex" in preparation for adding them to the 
        MethodTable, which requires unique names for each method.

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

2011-10-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove WebKitWebLoaderClientPrivate
        https://bugs.webkit.org/show_bug.cgi?id=70488

        Reviewed by Philippe Normand.

        It's unused since r97920.

        * GNUmakefile.am: Add WebKitWebLoaderClientPrivate.h.
        * UIProcess/API/gtk/WebKitWebLoaderClient.cpp:
        (webkitWebLoaderClientAttachLoaderClientToPage): Renamed to make
        it clear it's a private method of WebKitWebLoaderClient.
        (webkit_web_loader_client_init): Remove
        WebKitWebLoaderClientPrivate initialization.
        (webkit_web_loader_client_class_init): Removed adding
        WebKitWebLoaderClientPrivate struct as private data.
        * UIProcess/API/gtk/WebKitWebLoaderClient.h: Remove
        WebKitWebLoaderClientPrivate definition.
        * UIProcess/API/gtk/WebKitWebLoaderClientPrivate.h: Move
        webkitWebLoaderClientAttachLoaderClientToPage method here since
        it's a private method implemented in WebKitWebLoaderClient, not in
        WebKitWebView.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_set_loader_client): Use
        webkitWebLoaderClientAttachLoaderClientToPage.
        * UIProcess/API/gtk/WebKitWebViewPrivate.h: Remove
        webkitWebLoaderClientAttachLoaderClientToPage prototype.

2011-10-10  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [WebKit2] Allow sharing page clients between WebViews
        https://bugs.webkit.org/show_bug.cgi?id=69814

        No longer associate WebPage client wrappers with a WebKitWebView. This allows the
        same client to be used with more than one WebKitWebView.

        Reviewed by Xan Lopez.

        * GNUmakefile.am: Add the new WebKitWebViewPrivate header.
        * UIProcess/API/gtk/WebKitDefines.h: Added some forward declarations for API classes.
        * UIProcess/API/gtk/WebKitWebLoaderClient.cpp: C API callbacks now convert their WKPageRef argument
        into a WebKitWebView directly and pass it as a parameter to signals. Remove the web-view property.
        * UIProcess/API/gtk/WebKitWebLoaderClient.h: Move the estimated-progress property to WebKitWebView.
        * UIProcess/API/gtk/WebKitWebView.cpp: Add an estimated-load-progress property.
        (webkitWebViewConstructed):Only allocate one default WebKitWebLoaderClient.
        (webkitWebViewGetProperty): Add support for the new property.
        (webkit_web_view_class_init): Ditto.
        (webkitWebViewSetEstimatedLoadProgress): Added this private method so that the WebKitWebLoaderClient
        can update the appropriate WebKitWebView.
        (webkit_web_view_set_loader_client): Attach the C API callbacks here now.
        (webkit_web_view_get_estimated_load_progress): Moved from WebKitWebLoaderClient.
        * UIProcess/API/gtk/WebKitWebView.h: Added new method definition.
        * UIProcess/API/gtk/WebKitWebViewPrivate.h: Copied from Source/WebKit2/UIProcess/API/gtk/WebKitDefines.h.
        * UIProcess/API/gtk/tests/LoadTrackingTest.cpp: Updated the load tracking tests callbacks to take the new parameter.
        (LoadTrackingTest::LoadTrackingTest): Listen to the WebKitWebView property now.
        (LoadTrackingTest::estimatedProgressChanged):
        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp: Added a test to verify that two WebViews share the same default client.
        * UIProcess/API/gtk/webkit2marshal.list: Updated the marshallers here.

2011-10-19  Anders Carlsson  <andersca@apple.com>

        White flash when painting a previously crashed WKView
        https://bugs.webkit.org/show_bug.cgi?id=70453
        <rdar://problem/10306906>

        Reviewed by John Sullivan.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcess):
        Call waitForBackingStoreUpdateOnNextPaint so we'll wait for the next paint instead of painting white.

2011-10-19  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=70396
        Focus rings are too thin in HiDPI in WebKit2
        -and corresponding-
        <rdar://problem/10086876>

        Reviewed by Dan Bernstein.

        Rename wkSetPatternBaseCTM to wkSetBaseCTM
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

        When setting up a HiDPI context, we must also set the base CTM.
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::display):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scaledSnapshotInDocumentCoordinates):
        (WebKit::WebPage::snapshotInViewCoordinates):

2011-10-19  Sam Weinig  <sam@webkit.org>

        Add skeleton of an Objective-C WebKit2 API
        https://bugs.webkit.org/show_bug.cgi?id=70438

        Reviewed by Anders Carlsson.

        Adds WKBrowsingContextController (WKPageRef wrapper) and WKProcessCluster
        (WKContextRef wrapper) as initial files of an Objective-C WebKit2 API. Also,
        hook them up so that you can get a WKBrowsingContextController from the WKView
        and you can create a WKView associated with a WKProcessCluster. These names are
        not final, and this work is mainly about getting the wrapper lifetimes worked
        out.

        * UIProcess/API/mac/WKBrowsingContextController.h: Added.
        * UIProcess/API/mac/WKBrowsingContextController.mm: Added.
        (-[WKBrowsingContextController dealloc]):
        (-[WKBrowsingContextController pageRef]):
        (-[WKBrowsingContextController loadRequest:]):
        (-[WKBrowsingContextController loadFileURL:restrictToFilesWithin:]):
        (-[WKBrowsingContextController stopLoading]):
        (-[WKBrowsingContextController reload]):
        (-[WKBrowsingContextController reloadFromOrigin]):
        (-[WKBrowsingContextController goForward]):
        (-[WKBrowsingContextController canGoForward]):
        (-[WKBrowsingContextController goBack]):
        (-[WKBrowsingContextController canGoBack]):
        (-[WKBrowsingContextController initWithPageRef:]):
        * UIProcess/API/mac/WKBrowsingContextControllerInternal.h: Added.
        Add wrapper for WKPageRef.

        * UIProcess/API/mac/WKProcessCluster.h: Added.
        * UIProcess/API/mac/WKProcessCluster.mm: Added.
        (-[WKProcessCluster init]):
        (-[WKProcessCluster initWithInjectedBundleURL:]):
        (-[WKProcessCluster dealloc]):
        (-[WKProcessCluster contextRef]):
        * UIProcess/API/mac/WKProcessClusterInternal.h: Added.
        Add wrapper for WKContextRef.

        * UIProcess/API/mac/WKView.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:processCluster:]):
        Add new init method which takes a WKProcessCluster.

        (-[WKView browsingContextController]):
        Add accessor for the WKBrowsingContextController. This works by lazily creating
        the wrapper and caching it in the view itself.

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

2011-10-19  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] [WK2] Rename files and classes to follow conventions
        https://bugs.webkit.org/show_bug.cgi?id=70391

        Reviewed by Noam Rosenthal.

        Rename the files and classes following the agreed conventions on
        QtWebKit mailing list -- which are based on existing usage we have.

        - Public API follow Qt conventions: qsomething.cpp qsomething.h with class named QSomething

        - Private classes for public API classes follow Qt conventions:
          qsomething_p.h qsomething_p.cpp (if needed), with class named QSomethingPrivate

        - Subclasses and Qt-specific implementations of WebKit/WebCore classes use Qt suffix:
          FrameLoaderClientQt.cpp

        - Other classes created for using in our port use Qt prefix: QtFileDownloader, QtViewInterface

        This is documented in https://trac.webkit.org/wiki/QtWebKitHacking

        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebViewPrivate::chooseFiles):
        (toPolicyAction):
        (QDesktopWebViewPrivate::navigationPolicyForURL):
        * UIProcess/API/qt/qdesktopwebview_p.h:
        * UIProcess/API/qt/qtouchwebpage.cpp:
        (QTouchWebPage::updatePaintNode):
        (QTouchWebPagePrivate::setPage):
        * UIProcess/API/qt/qtouchwebpage.h:
        * UIProcess/API/qt/qtouchwebpage_p.h:
        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebViewPrivate::updateViewportConstraints):
        * UIProcess/API/qt/qtouchwebview.h:
        * UIProcess/API/qt/qtouchwebview_p.h:
        * UIProcess/TiledDrawingAreaProxy.h:
        * UIProcess/qt/ClientImpl.cpp:
        (toQtViewInterface):
        (toQtPolicyInterface):
        (qt_wk_runJavaScriptAlert):
        (qt_wk_runJavaScriptConfirm):
        (qt_wk_runJavaScriptPrompt):
        (qt_wk_setStatusText):
        (qt_wk_runOpenPanel):
        (qt_wk_mouseDidMoveOverElement):
        (qt_wk_decidePolicyForNavigationAction):
        * UIProcess/qt/QtDesktopWebPageProxy.cpp: Renamed from Source/WebKit2/UIProcess/qt/qdesktopwebpageproxy.cpp.
        (dragOperationToDropAction):
        (QtDesktopWebPageProxy::QtDesktopWebPageProxy):
        (QtDesktopWebPageProxy::createDrawingAreaProxy):
        (QtDesktopWebPageProxy::paintContent):
        (QtDesktopWebPageProxy::setViewportArguments):
        (QtDesktopWebPageProxy::doneWithTouchEvent):
        (QtDesktopWebPageProxy::createPopupMenuProxy):
        (QtDesktopWebPageProxy::handleEvent):
        (QtDesktopWebPageProxy::handleMouseMoveEvent):
        (QtDesktopWebPageProxy::handleMousePressEvent):
        (QtDesktopWebPageProxy::handleMouseReleaseEvent):
        (QtDesktopWebPageProxy::handleMouseDoubleClickEvent):
        (QtDesktopWebPageProxy::handleWheelEvent):
        (QtDesktopWebPageProxy::handleHoverLeaveEvent):
        (QtDesktopWebPageProxy::handleHoverMoveEvent):
        (QtDesktopWebPageProxy::handleDragEnterEvent):
        (QtDesktopWebPageProxy::handleDragLeaveEvent):
        (QtDesktopWebPageProxy::handleDragMoveEvent):
        (QtDesktopWebPageProxy::handleDropEvent):
        (QtDesktopWebPageProxy::timerEvent):
        * UIProcess/qt/QtDesktopWebPageProxy.h: Renamed from Source/WebKit2/UIProcess/qt/qdesktopwebpageproxy.h.
        * UIProcess/qt/QtGestureRecognizer.cpp:
        (WebKit::QtGestureRecognizer::QtGestureRecognizer):
        * UIProcess/qt/QtGestureRecognizer.h:
        * UIProcess/qt/QtPanGestureRecognizer.cpp:
        (WebKit::QtPanGestureRecognizer::QtPanGestureRecognizer):
        * UIProcess/qt/QtPanGestureRecognizer.h:
        * UIProcess/qt/QtPinchGestureRecognizer.cpp:
        (WebKit::QtPinchGestureRecognizer::QtPinchGestureRecognizer):
        * UIProcess/qt/QtPinchGestureRecognizer.h:
        * UIProcess/qt/QtPolicyInterface.h: Renamed from Source/WebKit2/UIProcess/qt/PolicyInterface.h.
        * UIProcess/qt/QtSGTileNode.cpp: Renamed from Source/WebKit2/UIProcess/qt/SGTileNode.cpp.
        (WebKit::QtSGTileNode::QtSGTileNode):
        (WebKit::QtSGTileNode::setBackBuffer):
        (WebKit::QtSGTileNode::swapBuffersIfNeeded):
        * UIProcess/qt/QtSGTileNode.h: Renamed from Source/WebKit2/UIProcess/qt/SGTileNode.h.
        * UIProcess/qt/QtSGUpdateQueue.cpp: Renamed from Source/WebKit2/UIProcess/qt/SGUpdateQueue.cpp.
        (WebKit::NodeUpdateCreateTile::NodeUpdateCreateTile):
        (WebKit::NodeUpdateRemoveTile::NodeUpdateRemoveTile):
        (WebKit::NodeUpdateSetBackBuffer::NodeUpdateSetBackBuffer):
        (WebKit::NodeUpdateSwapTileBuffers::NodeUpdateSwapTileBuffers):
        (WebKit::QtSGUpdateQueue::QtSGUpdateQueue):
        (WebKit::QtSGUpdateQueue::createTileNode):
        (WebKit::QtSGUpdateQueue::removeTileNode):
        (WebKit::QtSGUpdateQueue::setNodeBackBuffer):
        (WebKit::QtSGUpdateQueue::swapTileBuffers):
        (WebKit::QtSGUpdateQueue::applyUpdates):
        (WebKit::QtSGUpdateQueue::getScaleNode):
        * UIProcess/qt/QtSGUpdateQueue.h: Renamed from Source/WebKit2/UIProcess/qt/SGUpdateQueue.h.
        (WebKit::QtSGUpdateQueue::isSwapPending):
        (WebKit::NodeUpdate::NodeUpdate):
        (WebKit::NodeUpdate::~NodeUpdate):
        * UIProcess/qt/QtTouchViewInterface.cpp: Renamed from Source/WebKit2/UIProcess/qt/TouchViewInterface.cpp.
        (WebKit::QtTouchViewInterface::QtTouchViewInterface):
        (WebKit::QtTouchViewInterface::didFindZoomableArea):
        (WebKit::QtTouchViewInterface::sceneGraphUpdateQueue):
        (WebKit::QtTouchViewInterface::setViewNeedsDisplay):
        (WebKit::QtTouchViewInterface::drawingAreaSize):
        (WebKit::QtTouchViewInterface::contentSizeChanged):
        (WebKit::QtTouchViewInterface::isActive):
        (WebKit::QtTouchViewInterface::hasFocus):
        (WebKit::QtTouchViewInterface::isVisible):
        (WebKit::QtTouchViewInterface::startDrag):
        (WebKit::QtTouchViewInterface::didReceiveViewportArguments):
        (WebKit::QtTouchViewInterface::didChangeUrl):
        (WebKit::QtTouchViewInterface::didChangeTitle):
        (WebKit::QtTouchViewInterface::didChangeToolTip):
        (WebKit::QtTouchViewInterface::didChangeStatusText):
        (WebKit::QtTouchViewInterface::didChangeCursor):
        (WebKit::QtTouchViewInterface::loadDidBegin):
        (WebKit::QtTouchViewInterface::loadDidCommit):
        (WebKit::QtTouchViewInterface::loadDidSucceed):
        (WebKit::QtTouchViewInterface::loadDidFail):
        (WebKit::QtTouchViewInterface::didChangeLoadProgress):
        (WebKit::QtTouchViewInterface::showContextMenu):
        (WebKit::QtTouchViewInterface::hideContextMenu):
        (WebKit::QtTouchViewInterface::runJavaScriptAlert):
        (WebKit::QtTouchViewInterface::runJavaScriptConfirm):
        (WebKit::QtTouchViewInterface::runJavaScriptPrompt):
        (WebKit::QtTouchViewInterface::processDidCrash):
        (WebKit::QtTouchViewInterface::didRelaunchProcess):
        (WebKit::QtTouchViewInterface::engine):
        * UIProcess/qt/QtTouchViewInterface.h: Renamed from Source/WebKit2/UIProcess/qt/TouchViewInterface.h.
        (WebKit::QtTouchViewInterface::chooseFiles):
        (WebKit::QtTouchViewInterface::didMouseMoveOverElement):
        * UIProcess/qt/QtTouchWebPageProxy.cpp: Renamed from Source/WebKit2/UIProcess/qt/qtouchwebpageproxy.cpp.
        (QtTouchWebPageProxy::QtTouchWebPageProxy):
        (QtTouchWebPageProxy::createDrawingAreaProxy):
        (QtTouchWebPageProxy::processDidCrash):
        (QtTouchWebPageProxy::paintContent):
        (QtTouchWebPageProxy::doneWithTouchEvent):
        (QtTouchWebPageProxy::handleEvent):
        (QtTouchWebPageProxy::setVisibleContentRectAndScale):
        (QtTouchWebPageProxy::setVisibleContentRectTrajectoryVector):
        (QtTouchWebPageProxy::setResizesToContentsUsingLayoutSize):
        (QtTouchWebPageProxy::touchEvent):
        (QtTouchWebPageProxy::findZoomableAreaForPoint):
        (QtTouchWebPageProxy::renderNextFrame):
        * UIProcess/qt/QtTouchWebPageProxy.h: Renamed from Source/WebKit2/UIProcess/qt/qtouchwebpageproxy.h.
        (QtTouchWebPageProxy::touchViewInterface):
        (QtTouchWebPageProxy::drawingArea):
        * UIProcess/qt/QtViewInterface.h: Renamed from Source/WebKit2/UIProcess/qt/ViewInterface.h.
        * UIProcess/qt/QtViewportInteractionEngine.cpp: Renamed from Source/WebKit2/UIProcess/qt/ViewportInteractionEngine.cpp.
        (WebKit::visibleRectInContentCoordinate):
        (WebKit::contentRectInViewportCoordinate):
        (WebKit::ViewportUpdateGuard::ViewportUpdateGuard):
        (WebKit::ViewportUpdateGuard::~ViewportUpdateGuard):
        (WebKit::QtViewportInteractionEngine::QtViewportInteractionEngine):
        (WebKit::QtViewportInteractionEngine::~QtViewportInteractionEngine):
        (WebKit::QtViewportInteractionEngine::reset):
        (WebKit::QtViewportInteractionEngine::setConstraints):
        (WebKit::QtViewportInteractionEngine::panGestureStarted):
        (WebKit::QtViewportInteractionEngine::panGestureRequestUpdate):
        (WebKit::QtViewportInteractionEngine::panGestureCancelled):
        (WebKit::QtViewportInteractionEngine::panGestureEnded):
        (WebKit::QtViewportInteractionEngine::pinchGestureStarted):
        (WebKit::QtViewportInteractionEngine::pinchGestureRequestUpdate):
        (WebKit::QtViewportInteractionEngine::pinchGestureEnded):
        (WebKit::QtViewportInteractionEngine::contentViewportChanged):
        (WebKit::QtViewportInteractionEngine::updateContentIfNeeded):
        (WebKit::QtViewportInteractionEngine::updateContentScaleIfNeeded):
        (WebKit::QtViewportInteractionEngine::updateContentPositionIfNeeded):
        (WebKit::QtViewportInteractionEngine::animateContentIntoBoundariesIfNeeded):
        (WebKit::QtViewportInteractionEngine::animateContentPositionIntoBoundariesIfNeeded):
        (WebKit::QtViewportInteractionEngine::animateContentScaleIntoBoundariesIfNeeded):
        (WebKit::QtViewportInteractionEngine::scaleContent):
        * UIProcess/qt/QtViewportInteractionEngine.h: Renamed from Source/WebKit2/UIProcess/qt/ViewportInteractionEngine.h.
        (WebKit::QtViewportInteractionEngine::Constraints::Constraints):
        (WebKit::operator==):
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::QtWebPageProxy):
        (QtWebPageProxy::registerEditCommand):
        * UIProcess/qt/QtWebPageProxy.h:
        * UIProcess/qt/QtWebUndoCommand.cpp: Renamed from Source/WebKit2/UIProcess/qt/WebUndoCommandQt.cpp.
        (QtWebUndoCommand::QtWebUndoCommand):
        (QtWebUndoCommand::~QtWebUndoCommand):
        (QtWebUndoCommand::redo):
        (QtWebUndoCommand::undo):
        * UIProcess/qt/QtWebUndoCommand.h: Renamed from Source/WebKit2/UIProcess/qt/WebUndoCommandQt.h.
        (QtWebUndoCommand::inUndoRedo):
        * UIProcess/qt/TiledDrawingAreaProxyQt.cpp:
        (WebKit::TiledDrawingAreaProxy::updateWebView):
        * UIProcess/qt/WebContextMenuProxyQt.cpp:
        (WebKit::WebContextMenuProxyQt::WebContextMenuProxyQt):
        (WebKit::WebContextMenuProxyQt::create):
        * UIProcess/qt/WebContextMenuProxyQt.h:
        * WebKit2.pro:

2011-10-19  Tomasz Morawski  <t.morawski@samsung.com>

        [EFL][WK2] Added missing dummy interpretKeyEvent function
        https://bugs.webkit.org/show_bug.cgi?id=70311

        Reviewed by Ryosuke Niwa.

        Added missing dummy interpretKeyEvent function needed to compile WK2.

        * WebProcess/WebPage/efl/WebPageEfl.cpp:
        (WebKit::WebPage::interpretKeyEvent):

2011-10-18  Sam Weinig  <sam@webkit.org>

        Move uses of C SPI out of WKView.h and into WKViewPrivate.h
        https://bugs.webkit.org/show_bug.cgi?id=70387

        Reviewed by Dan Bernstein.

        * UIProcess/API/mac/WKViewPrivate.h:
        Move declarations here.

        * UIProcess/API/mac/WKView.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _updateRemoteAccessibilityRegistration:]):
        (-[WKView initWithFrame:]):
        (-[WKView initWithFrame:contextRef:]):
        (-[WKView _registerDraggedTypes]):
        (-[WKView initWithFrame:contextRef:pageGroupRef:]):
        (-[WKView pageRef]):
        (-[WKView canChangeFrameLayout:]):
        (-[WKView printOperationWithPrintInfo:forFrame:]):
        (-[WKView setFrame:andScrollBy:]):
        Move definitions to private category.

        * UIProcess/API/mac/PDFViewController.mm:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        Update to include WKViewPrivate.h where necessary.

2011-10-18  Sam Weinig  <sam@webkit.org>

        Stop leaking internal names in WKView API header
        https://bugs.webkit.org/show_bug.cgi?id=70380

        Reviewed by Anders Carlsson.

        Move _frameSizeUpdatesDisabledCount to WKViewData. Since we cannot change the size of
        WKView due to the fragile Objective-C ABI, we must rename the existing variable unused. If
        drop 32-bit support, we will be able to remove it.

        * UIProcess/API/mac/WKView.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView disableFrameSizeUpdates]):
        (-[WKView enableFrameSizeUpdates]):
        (-[WKView frameSizeUpdatesDisabled]):
        * WebKit2.xcodeproj/project.pbxproj:

2011-10-18  Alexey Proskuryakov  <ap@apple.com>

        Expose PDF information in hit test result
        https://bugs.webkit.org/show_bug.cgi?id=70353

        Reviewed by Sam Weinig.

        * Shared/WebHitTestResult.cpp:
        (WebKit::WebHitTestResult::Data::encode):
        (WebKit::WebHitTestResult::Data::decode):
        * Shared/WebHitTestResult.h:
        (WebKit::WebHitTestResult::absolutePDFURL):
        * UIProcess/API/C/WKHitTestResult.cpp:
        (WKHitTestResultCopyAbsolutePDFURL):
        * UIProcess/API/C/WKHitTestResult.h:
        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp:
        (WKBundleHitTestResultCopyAbsolutePDFURL):
        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.h:
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
        (WebKit::InjectedBundleHitTestResult::absolutePDFURL):
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::mouseDidMoveOverElement):
        Pass through PDF URL from hit testing to injected bundle client.

2011-10-18  Enrica Casucci  <enrica@apple.com>

        Crash in WebProcess at com.apple.AppKit: -[NSFilePromiseDragSource draggedImage:endedAt:operation:] + 101
        https://bugs.webkit.org/show_bug.cgi?id=70340
        <rdar://problem/9548174>
                
        We have seen a number of crash reports for this issue that seem to occurr when
        the user drags an image from a web page onto the desktop.
        We have not been able to reproduce this crash, therefore this is a speculative fix,
        but the theory is that the dragging source has been already released when draggedImage
        is called.
        This patch attempts a fix for the problem by retaining the dragging source when
        NSFilePromiseDragSource is created.

        Reviewed by Darin Adler.

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (-[WKPasteboardFilePromiseOwner initWithSource:]):
        (-[WKPasteboardFilePromiseOwner dealloc]):

2011-10-18  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Crash after storing credentials in Keychain
        https://bugs.webkit.org/show_bug.cgi?id=70376
        <rdar://problem/9647503>

        Reviewed by Dan Bernstein.

        * Shared/mac/SecKeychainItemResponseData.cpp:
        (WebKit::SecKeychainItemResponseData::encode):
        (WebKit::SecKeychainItemResponseData::decode):
        Actually send keychain item over, too. In shimSecKeychainItemCreateFromContent(), we are
        going to use it to override SecKeychainItemCreateFromContent(), and we cannot return noErr
        from this function without returning a non-null keychain item.

2011-10-18  Damian Kaleta  <dkaleta@apple.com>

        This revised fix doesn't break SL build.
        https://bugs.webkit.org/show_bug.cgi?id=70345

        Reviewed and landed by Sam Weinig.

        * UIProcess/API/mac/WKView.mm:
        (+[WKView hideWordDefinitionWindow]): Hides the definition window.
        * UIProcess/API/mac/WKViewPrivate.h:

2011-10-18  Sam Weinig  <sam@webkit.org>

        Move spellCheckerDocumentTag and handleCorrectionPanelResult from WKViewPrivate to WKViewInternal
        https://bugs.webkit.org/show_bug.cgi?id=70377

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView spellCheckerDocumentTag]):
        (-[WKView handleCorrectionPanelResult:]):
        Move definition of methods to (Internal) area.

        * UIProcess/API/mac/WKViewInternal.h:
        Add methods.

        * UIProcess/API/mac/WKViewPrivate.h:
        Remove methods.

        * UIProcess/cf/WebBackForwardListCF.cpp:
        Add missing newline.

        * UIProcess/mac/CorrectionPanel.mm:
        Change #include to WKViewInternal.h

        * WebKit2.xcodeproj/project.pbxproj:
        Sort some files.

2011-10-18  Sam Weinig  <sam@webkit.org>

        Move WKView helper files into a sub-group
        https://bugs.webkit.org/show_bug.cgi?id=70375

        Reviewed by Darin Adler.

        * WebKit2.xcodeproj/project.pbxproj:
        Move some files around.

2011-10-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r97788.
        http://trac.webkit.org/changeset/97788
        https://bugs.webkit.org/show_bug.cgi?id=70366

        broke compile (Requested by inferno-sec on #webkit).

        * UIProcess/API/mac/WKView.mm:
        * UIProcess/API/mac/WKViewPrivate.h:

2011-10-18  Damian Kaleta  <dkaleta@apple.com>

        Add WebKit API to hide the definition window
        https://bugs.webkit.org/show_bug.cgi?id=70345

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView hideWordDefinitionWindow]): Hides the definition window.
        * UIProcess/API/mac/WKViewPrivate.h:

2011-10-18  Adam Barth  <abarth@webkit.org>

        Always enable ENABLE(XPATH)
        https://bugs.webkit.org/show_bug.cgi?id=70217

        Reviewed by Eric Seidel.

        * Configurations/FeatureDefines.xcconfig:

2011-10-18  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Merge QML plugin for WebKit2 with the original WebKit1 plugin

        We don't need a separate plugin, as we no longer expose the WK2
        APIs under QtWebKit.experimental, but now use QtWebKit. The version
        was also changed to 3.0 instead of 5.0, as the original plugin was
        versioned 1.0, and bumping to 3.0 fits the scheme used by QtWebKit releases.

        Reviewed by Andreas Kling.

        * UIProcess/API/qt/qmlplugin/plugin.cpp: Removed.
        * UIProcess/API/qt/qmlplugin/qmldir: Removed.
        * UIProcess/API/qt/qmlplugin/qmlplugin.pro: Removed.
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_linkHovered.qml:
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_loadFail.qml:
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_loadProgress.qml:
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_loadProgressSignal.qml:
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_navigationPolicyForUrl.qml:
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_preferences.qml:
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_properties.qml:
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_load.qml:
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadFail.qml:
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadNegativeSizeView.qml:
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadProgress.qml:
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadProgressSignal.qml:
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadZeroSizeView.qml:
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_properties.qml:

2011-10-18  Dinu Jacob  <dinu.jacob@nokia.com>

        [Qt][WK2] ASSERT when displaying context menu in input field
        https://bugs.webkit.org/show_bug.cgi?id=69859

        Reviewed by Simon Hausmann.

        When creating a submenu in the context menu, the submenu of type
        QWidget is statically cast to QObject before calling setParent on
        it. QObject::setParent asserts if the object is a QWidget. So, call
        setParent of QWidget itself.

        * UIProcess/qt/WebContextMenuProxyQt.cpp:
        (WebKit::WebContextMenuProxyQt::createContextMenu):

2011-10-18  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] Fix linkHoveredDoesntEmitRepeated test in the bot
        https://bugs.webkit.org/show_bug.cgi?id=70329

        Reviewed by Andreas Kling.

        Use LoadSpy::wait() instead of the TestCase::tryCompare(). They should be equivalent,
        but I'm getting strange results with tryCompare(). This commit also adds an extra check
        to make sure the hovered link is the correct one.

        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_linkHovered.qml:

2011-10-18  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt][WK2] Some QML tests were accidentally committed.
        https://bugs.webkit.org/show_bug.cgi?id=70321

        Reviewed by Andreas Kling.

        These tests were committed by accident. They should not be there.

        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_preferences.qml:

2011-10-18  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] Send mouse move events when we handle HoverEnter/Leave in QDesktopWebView
        https://bugs.webkit.org/show_bug.cgi?id=70297

        Reviewed by Simon Hausmann.

        Qt treat the first and last hover movements as special HoverMove and HoverLeave events, but
        WebKit doesn't make the difference, so we need to create move events for them.

        While HoverEnter is in practice equivalent to HoverMove, the HoverLeave event is a bit
        different because we want to emulate that the mouse is not only leaving the current node, but
        completely leaving the whole document. The way to do this is to manufacture a move event with
        a very far position, and was inspired by WebView::handleMouseEvent() in
        Source/WebKit/win/WebView.cpp.

        This patch fixes DesktopWebViewLinkHovered QML tests.

        * UIProcess/qt/qdesktopwebpageproxy.cpp:
        (QDesktopWebPageProxy::handleEvent):
        (QDesktopWebPageProxy::handleHoverLeaveEvent):
        * UIProcess/qt/qdesktopwebpageproxy.h:

2011-10-18  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt][WK2] WebPreferences are impossible to use in QML.
        https://bugs.webkit.org/show_bug.cgi?id=70141

        Reviewed by Kenneth Rohde Christiansen.

        Make it possible to use qwkpreferences in QML. Renamed it
        to follow our new style regarding class names. This class is 
        now a QObject that is exposed as a property of the view.
        The tests give an idea of the usage.

        * UIProcess/API/qt/WKView.h:
        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebView::preferences):
        * UIProcess/API/qt/qdesktopwebview.h:
        * UIProcess/API/qt/qmlplugin/plugin.cpp:
        (WebKit2QmlPlugin::registerTypes):
        * UIProcess/API/qt/qtouchwebpage.cpp:
        (QTouchWebPage::preferences):
        * UIProcess/API/qt/qtouchwebpage.h:
        * UIProcess/API/qt/qwebpreferences.cpp: Added.
        (QWebPreferencesPrivate::createPreferences):
        (QWebPreferencesPrivate::testAttribute):
        (QWebPreferencesPrivate::setAttribute):
        (QWebPreferencesPrivate::setFontFamily):
        (QWebPreferencesPrivate::fontFamily):
        (QWebPreferencesPrivate::setFontSize):
        (QWebPreferencesPrivate::fontSize):
        (QWebPreferences::QWebPreferences):
        (QWebPreferences::~QWebPreferences):
        (QWebPreferences::autoLoadImages):
        (QWebPreferences::setAutoLoadImages):
        (QWebPreferences::javascriptEnabled):
        (QWebPreferences::setJavascriptEnabled):
        (QWebPreferences::pluginsEnabled):
        (QWebPreferences::setPluginsEnabled):
        (QWebPreferences::offlineWebApplicationCacheEnabled):
        (QWebPreferences::setOfflineWebApplicationCacheEnabled):
        (QWebPreferences::localStorageEnabled):
        (QWebPreferences::setLocalStorageEnabled):
        (QWebPreferences::XSSAuditingEnabled):
        (QWebPreferences::setXSSAuditingEnabled):
        (QWebPreferences::privateBrowsingEnabled):
        (QWebPreferences::setPrivateBrowsingEnabled):
        (QWebPreferences::dnsPrefetchEnabled):
        (QWebPreferences::setDnsPrefetchEnabled):
        (QWebPreferences::standardFontFamily):
        (QWebPreferences::setStandardFontFamily):
        (QWebPreferences::fixedFontFamily):
        (QWebPreferences::setFixedFontFamily):
        (QWebPreferences::serifFontFamily):
        (QWebPreferences::setSerifFontFamily):
        (QWebPreferences::sansSerifFontFamily):
        (QWebPreferences::setSansSerifFontFamily):
        (QWebPreferences::cursiveFontFamily):
        (QWebPreferences::setCursiveFontFamily):
        (QWebPreferences::fantasyFontFamily):
        (QWebPreferences::setFantasyFontFamily):
        (QWebPreferences::minimumFontSize):
        (QWebPreferences::setMinimumFontSize):
        (QWebPreferences::defaultFontSize):
        (QWebPreferences::setDefaultFontSize):
        (QWebPreferences::defaultFixedFontSize):
        (QWebPreferences::setDefaultFixedFontSize):
        * UIProcess/API/qt/qwebpreferences.h: Added.
        * UIProcess/API/qt/qwebpreferences_p.h: Added.
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_preferences.qml: Added.
        * UIProcess/API/qt/tests/qmltests/common/javascript.html: Added.
        * UIProcess/API/qt/tests/qmltests/common/localStorage.html: Added.
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::preferences):
        * UIProcess/qt/QtWebPageProxy.h:
        * UIProcess/qt/qwkpreferences.cpp: Removed.
        * UIProcess/qt/qwkpreferences.h: Removed.
        * UIProcess/qt/qwkpreferences_p.h: Removed.
        * WebKit2.pro:
        * WebKit2API.pri:

2011-10-18  Tomasz Morawski  <t.morawski@samsung.com>

        [EFL][WK2] Fix compilation error by include WebErrors.h file.
        https://bugs.webkit.org/show_bug.cgi?id=70309

        Unreviewed build fix

        Added a header file to fix compilation error.

        * WebProcess/WebCoreSupport/efl/WebErrorsEfl.cpp:

2011-10-18  Adenilson Cavalcanti  <adenilson.silva@openbossa.org>

        [Qt][WK2] Implement geolocation provider for qt port
        https://bugs.webkit.org/show_bug.cgi?id=59199

        Reviewed by Simon Hausmann.

        Based on patch by Kenneth Christiansen <kenneth.r.christiansen@nokia.com>

        Implements default location provider for WK2 QtWebKit (WebGeolocationProviderQt),
        allowing QtWebKit clients to implement or override their own provider using WK2 APIs.

        * UIProcess/API/C/WKGeolocationManager.h:
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):
        * UIProcess/qt/WebGeolocationProviderQt.cpp: Added.
        (toLocationProvider):
        (locationStartUpdating):
        (locationStopUpdating):
        (WebGeolocationProviderQt::create):
        (WebGeolocationProviderQt::provider):
        (WebGeolocationProviderQt::WebGeolocationProviderQt):
        (WebGeolocationProviderQt::~WebGeolocationProviderQt):
        (WebGeolocationProviderQt::updateTimeout):
        (WebGeolocationProviderQt::positionUpdated):
        (WebGeolocationProviderQt::startUpdating):
        (WebGeolocationProviderQt::stopUpdating):
        * UIProcess/qt/WebGeolocationProviderQt.h: Added.
        * WebKit2.pro:

2011-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [UNIX] Use SOCK_SEQPACKET when available
        https://bugs.webkit.org/show_bug.cgi?id=61287

        Reviewed by Darin Adler.

        Sockets of type SEQPACKET are actually DGRAM sockets but that
        notifies the other end when the connection is closed. When
        SEQPACKET sockets are not available GTK+ port uses STREAM sockets
        while Qt port uses DGRAM sockets.

        * PluginProcess/PluginProcess.cpp: Use SOCK_SEQPACKET if possible.
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess): Ditto.
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::ProcessLauncher::launchProcess): Ditto.

2011-10-17  Jon Lee  <jonlee@apple.com>

        Filtering of URLs when serializing back forward list saves bad current index value
        https://bugs.webkit.org/show_bug.cgi?id=70282
        <rdar://problem/10057763>

        Reviewed by Sam Weinig.

        When reading the serialized b-f list, perform a sanity check on the current index.
        If it is invalid, we set it to NoCurrentItemIndex to prevent further corruption of
        the list.

        When serializing the b-f list, currentIndex can be negative in the case where the list
        has one item only, and that item gets filtered out. In this instance currentIndex should
        just be -1. A crashing case showed an index that was more negative, a situation that I
        could not replicate. Since this value will get cleaned up when the b-f list is restored,
        I just strengthened the assertion to check for a more negative index in case we run into it again.

        * UIProcess/cf/WebBackForwardListCF.cpp:
        (WebKit::WebBackForwardList::createCFDictionaryRepresentation): Update the assertion
        in case we go beyond NoCurrentItemIndex (which, as an int, is -1).
        (WebKit::WebBackForwardList::restoreFromCFDictionaryRepresentation):

2011-10-14  Chris Marrin  <cmarrin@apple.com>

        Throttle rate of requestAnimationFrame when page is not visible
        https://bugs.webkit.org/show_bug.cgi?id=67873

        Reviewed by Anders Carlsson.

        Plumb through notification when the window is hidden/shown or
        minimized/unminimized

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::suspendPainting):
        (WebKit::DrawingAreaImpl::resumePainting):

2011-10-17  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt][WK2] Synchronize tiling with accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=69151

        Reviewed by Simon Hausmann.

        Make the tiled "non-composited" content and the composited layers go through the same
        code path on WebKit2. Instead of having a "drawing area" that handles the non-composited
        content and a seperate layer tree, we put everything in a layer tree, with the non-
        composited content being a layer in the tree.

        This allows fixing several issues with websites that have large content areas that are
        composited or overlap with composited layers.

        Layer-tree synchronization is done by passing WebKit2 messages between a LayerTreeHost
        on the WebProcess and a LayerTreeHostProxy on the UI process. Every layer in the tree has
        its own tiled backing store, and uses the LayerTreeHost communication channel to pass
        content up to the UI process. The UI process will later creates its own GraphicsLayer tree,
        based on TextureMapper, which can be painted directly with OpenGL.

        Several optimizations are available for the non-composited layer as well, e.g. specifying
        a trajectory and updating the visible rect together with the content scale.

        This code is currently disabled, a separate patch will enable it and glue it to
        QTouchWebPage.

        * DerivedSources.pro:
        * Platform/CoreIPC/MessageID.h:
        * Scripts/webkit2/messages.py:
        * Shared/LayerTreeContext.h:
        * Shared/WebLayerTreeInfo.cpp:
        (WebKit::WebLayerInfo::encode):
        (WebKit::WebLayerInfo::decode):
        * Shared/WebLayerTreeInfo.h:
        * Shared/qt/LayerTreeContextQt.cpp:
        (WebKit::LayerTreeContext::LayerTreeContext):
        (WebKit::LayerTreeContext::~LayerTreeContext):
        (WebKit::LayerTreeContext::encode):
        (WebKit::LayerTreeContext::decode):
        (WebKit::LayerTreeContext::isEmpty):
        (WebKit::operator==):
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::updateWebView):
        (WebKit::DrawingAreaProxy::contentsRect):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::viewportVisibleRect):
        (WebKit::DrawingAreaProxy::isBackingStoreReady):
        (WebKit::DrawingAreaProxy::paintToCurrentGLContext):
        (WebKit::DrawingAreaProxy::setVisibleContentsRectAndScale):
        (WebKit::DrawingAreaProxy::setVisibleContentRectTrajectoryVector):
        (WebKit::DrawingAreaProxy::createTileForLayer):
        (WebKit::DrawingAreaProxy::updateTileForLayer):
        (WebKit::DrawingAreaProxy::removeTileForLayer):
        (WebKit::DrawingAreaProxy::didReceiveLayerTreeHostProxyMessage):
        (WebKit::DrawingAreaProxy::page):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxyImpl::didReceiveLayerTreeHostProxyMessage):
        (WebKit::DrawingAreaProxyImpl::setVisibleContentsRectAndScale):
        (WebKit::DrawingAreaProxyImpl::setVisibleContentRectTrajectoryVector):
        (WebKit::DrawingAreaProxyImpl::paintToCurrentGLContext):
        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/LayerTreeHostProxy.h: Added.
        (WebKit::LayerTreeHostProxy::layerByID):
        (WebKit::LayerTreeHostProxy::rootLayer):
        (WebKit::LayerTreeHostProxy::notifyAnimationStarted):
        (WebKit::LayerTreeHostProxy::notifySyncRequired):
        (WebKit::LayerTreeHostProxy::showDebugBorders):
        (WebKit::LayerTreeHostProxy::showRepaintCounter):
        (WebKit::LayerTreeHostProxy::paintContents):
        * UIProcess/LayerTreeHostProxy.messages.in: Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        * UIProcess/qt/LayerTreeHostProxyQt.cpp: Added.
        * WebKit2.pro:
        * WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:
        (WebCore::WebGraphicsLayer::WebGraphicsLayer):
        (WebCore::WebGraphicsLayer::~WebGraphicsLayer):
        (WebCore::WebGraphicsLayer::setChildren):
        (WebCore::WebGraphicsLayer::addChild):
        (WebCore::WebGraphicsLayer::addChildAtIndex):
        (WebCore::WebGraphicsLayer::addChildAbove):
        (WebCore::WebGraphicsLayer::addChildBelow):
        (WebCore::WebGraphicsLayer::replaceChild):
        (WebCore::WebGraphicsLayer::removeFromParent):
        (WebCore::WebGraphicsLayer::setContentsNeedsDisplay):
        (WebCore::WebGraphicsLayer::setContentsToImage):
        (WebCore::WebGraphicsLayer::setNeedsDisplay):
        (WebCore::WebGraphicsLayer::setNeedsDisplayInRect):
        (WebCore::WebGraphicsLayer::syncCompositingState):
        (WebCore::WebGraphicsLayer::syncCompositingStateForThisLayerOnly):
        (WebCore::WebGraphicsLayer::tiledBackingStorePaintBegin):
        (WebCore::WebGraphicsLayer::setContentsScale):
        (WebCore::WebGraphicsLayer::setRootLayer):
        (WebCore::WebGraphicsLayer::setVisibleContentRectTrajectoryVector):
        (WebCore::WebGraphicsLayer::setVisibleContentRect):
        (WebCore::WebGraphicsLayer::tiledBackingStorePaint):
        (WebCore::WebGraphicsLayer::tiledBackingStorePaintEnd):
        (WebCore::WebGraphicsLayer::tiledBackingStoreUpdatesAllowed):
        (WebCore::WebGraphicsLayer::tiledBackingStoreContentsRect):
        (WebCore::WebGraphicsLayer::tiledBackingStoreVisibleRect):
        (WebCore::WebGraphicsLayer::tiledBackingStoreBackgroundColor):
        (WebCore::WebGraphicsLayer::createTile):
        (WebCore::WebGraphicsLayer::updateTile):
        (WebCore::WebGraphicsLayer::removeTile):
        (WebCore::WebGraphicsLayer::updateTileBuffersRecursively):
        (WebCore::WebGraphicsLayer::layerTreeTileClient):
        (WebCore::WebGraphicsLayer::updateContentBuffers):
        * WebProcess/WebCoreSupport/WebGraphicsLayer.h:
        (WebCore::WebGraphicsLayer::setLayerTreeTileClient):
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::didReceiveLayerTreeHostMessage):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create):
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit::LayerTreeHost::setVisibleContentRectAndScale):
        (WebKit::LayerTreeHost::setVisibleContentRectTrajectoryVector):
        (WebKit::LayerTreeHost::setVisibleContentRectForLayer):
        (WebKit::LayerTreeHost::renderNextFrame):
        * WebProcess/WebPage/LayerTreeHost.messages.in: Added.
        * WebProcess/WebPage/TiledDrawingArea.cpp:
        (WebKit::TiledDrawingArea::didReceiveLayerTreeHostMessage):
        * WebProcess/WebPage/TiledDrawingArea.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebPage/qt/LayerTreeHostQt.cpp:
        (WebKit::LayerTreeHostQt::create):
        (WebKit::LayerTreeHostQt::~LayerTreeHostQt):
        (WebKit::LayerTreeHostQt::LayerTreeHostQt):
        (WebKit::LayerTreeHostQt::setLayerFlushSchedulingEnabled):
        (WebKit::LayerTreeHostQt::scheduleLayerFlush):
        (WebKit::LayerTreeHostQt::cancelPendingLayerFlush):
        (WebKit::LayerTreeHostQt::setShouldNotifyAfterNextScheduledLayerFlush):
        (WebKit::LayerTreeHostQt::setRootCompositingLayer):
        (WebKit::LayerTreeHostQt::invalidate):
        (WebKit::LayerTreeHostQt::setNonCompositedContentsNeedDisplay):
        (WebKit::LayerTreeHostQt::scrollNonCompositedContents):
        (WebKit::LayerTreeHostQt::forceRepaint):
        (WebKit::LayerTreeHostQt::sizeDidChange):
        (WebKit::LayerTreeHostQt::didInstallPageOverlay):
        (WebKit::LayerTreeHostQt::didUninstallPageOverlay):
        (WebKit::LayerTreeHostQt::setPageOverlayNeedsDisplay):
        (WebKit::LayerTreeHostQt::flushPendingLayerChanges):
        (WebKit::LayerTreeHostQt::didSyncCompositingStateForLayer):
        (WebKit::LayerTreeHostQt::didDeleteLayer):
        (WebKit::LayerTreeHostQt::performScheduledLayerFlush):
        (WebKit::LayerTreeHostQt::layerFlushTimerFired):
        (WebKit::LayerTreeHostQt::createPageOverlayLayer):
        (WebKit::LayerTreeHostQt::destroyPageOverlayLayer):
        (WebKit::LayerTreeHostQt::adoptImageBackingStore):
        (WebKit::LayerTreeHostQt::releaseImageBackingStore):
        (WebKit::LayerTreeHostQt::notifyAnimationStarted):
        (WebKit::LayerTreeHostQt::notifySyncRequired):
        (WebKit::LayerTreeHostQt::paintContents):
        (WebKit::LayerTreeHostQt::showDebugBorders):
        (WebKit::LayerTreeHostQt::showRepaintCounter):
        (WebKit::LayerTreeHost::supportsAcceleratedCompositing):
        (WebKit::LayerTreeHostQt::createTile):
        (WebKit::LayerTreeHostQt::updateTile):
        (WebKit::LayerTreeHostQt::removeTile):
        (WebKit::LayerTreeHostQt::setVisibleContentRectForLayer):
        (WebKit::LayerTreeHostQt::setVisibleContentRectAndScale):
        (WebKit::LayerTreeHostQt::setVisibleContentRectTrajectoryVector):
        (WebKit::LayerTreeHostQt::renderNextFrame):
        (WebKit::LayerTreeHostQt::layerTreeTileUpdatesAllowed):
+

2011-10-17  Ada Chan  <adachan@apple.com>

        Calling WKPageLoadAlternateHTMLString() where baseURL does not point to a directory causes an invalid message to be returned from WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=70168

        Reviewed by Alexey Proskuryakov.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::assumeReadAccessToBaseURL): Add the file path of url's base URL to m_localPathsWithAssumedReadAccess,
        since url may not point to a directory.

2011-10-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add methods to get/set a custom text enconding to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=69524

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_get_custom_charset):
        (webkit_web_view_set_custom_charset):
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
        (testWebViewCustomCharset):
        (beforeAll):

2011-10-14  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt][WK2] Implement decidePolicyForResponse in our PolicyClient
        https://bugs.webkit.org/show_bug.cgi?id=69832

        Reviewed by Kenneth Rohde Christiansen.

        We implement decidePolicyForResponse in our PolicyClient in order to
        decide whether a given ResourceResponse should be downloaded or loaded.

        * Shared/qt/WebCoreArgumentCodersQt.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        Implement serialization of ResourceResponse.

        * UIProcess/qt/ClientImpl.cpp:
        (qt_wk_decidePolicyForResponse):
        * UIProcess/qt/ClientImpl.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::init):

2011-10-17  Nayan Kumar K  <nayankk@motorola.com>

        [WebKit2][gtk] Rename WEBKIT_POLICY_ERROR_CANNOT_SHOW_URL to WEBKIT_POLICY_ERROR_CANNOT_SHOW_URI
        https://bugs.webkit.org/show_bug.cgi?id=70040

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitError.cpp:
        * UIProcess/API/gtk/WebKitError.h:

2011-10-16  Adam Barth  <abarth@webkit.org>

        Always enable ENABLE(DOM_STORAGE)
        https://bugs.webkit.org/show_bug.cgi?id=70189

        Reviewed by Eric Seidel.

        * Configurations/FeatureDefines.xcconfig:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2011-10-15  Adam Barth  <abarth@webkit.org>

        Rename ENABLE(TILED_BACKING_STORE) to USE(TILED_BACKING_STORE)
        https://bugs.webkit.org/show_bug.cgi?id=70194

        Reviewed by Daniel Bates.

        * Shared/DrawingAreaInfo.h:
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxy.messages.in:
        * UIProcess/PageClient.h:
        * UIProcess/TiledDrawingAreaProxy.cpp:
        * UIProcess/TiledDrawingAreaProxy.h:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::contentsSizeChanged):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/TiledBackingStoreRemoteTile.cpp:
        * WebProcess/WebPage/TiledBackingStoreRemoteTile.h:
        * WebProcess/WebPage/TiledDrawingArea.cpp:
        * WebProcess/WebPage/TiledDrawingArea.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setSize):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2011-10-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r97559.
        http://trac.webkit.org/changeset/97559
        https://bugs.webkit.org/show_bug.cgi?id=70176

        Broke build on Mac (Requested by noamr_ on #webkit).

        * DerivedSources.pro:
        * Platform/CoreIPC/MessageID.h:
        * Scripts/webkit2/messages.py:
        * Shared/LayerTreeContext.h:
        * Shared/WebLayerTreeInfo.cpp:
        (WebKit::WebLayerInfo::encode):
        (WebKit::WebLayerInfo::decode):
        * Shared/WebLayerTreeInfo.h:
        * Shared/qt/LayerTreeContextQt.cpp:
        (WebKit::LayerTreeContext::LayerTreeContext):
        (WebKit::LayerTreeContext::~LayerTreeContext):
        (WebKit::LayerTreeContext::encode):
        (WebKit::LayerTreeContext::decode):
        (WebKit::LayerTreeContext::isEmpty):
        (WebKit::operator==):
        * UIProcess/DrawingAreaProxy.cpp:
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/LayerTreeHostProxy.h: Removed.
        * UIProcess/LayerTreeHostProxy.messages.in: Removed.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        * UIProcess/qt/LayerTreeHostProxyQt.cpp: Removed.
        * WebKit2.pro:
        * WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:
        (WebCore::deletedLayerIDs):
        (WebCore::WebGraphicsLayer::WebGraphicsLayer):
        (WebCore::WebGraphicsLayer::~WebGraphicsLayer):
        (WebCore::WebGraphicsLayer::setChildren):
        (WebCore::WebGraphicsLayer::addChild):
        (WebCore::WebGraphicsLayer::addChildAtIndex):
        (WebCore::WebGraphicsLayer::addChildAbove):
        (WebCore::WebGraphicsLayer::addChildBelow):
        (WebCore::WebGraphicsLayer::replaceChild):
        (WebCore::WebGraphicsLayer::removeFromParent):
        (WebCore::WebGraphicsLayer::setContentsRect):
        (WebCore::WebGraphicsLayer::setContentsToImage):
        (WebCore::WebGraphicsLayer::setNeedsDisplay):
        (WebCore::WebGraphicsLayer::setNeedsDisplayInRect):
        (WebCore::WebGraphicsLayer::setContentsNeedsDisplay):
        (WebCore::WebGraphicsLayer::didSynchronize):
        (WebCore::WebGraphicsLayer::layerInfo):
        (WebCore::WebGraphicsLayer::syncCompositingState):
        (WebCore::WebGraphicsLayer::needsDisplayRect):
        (WebCore::WebGraphicsLayer::takeLayersToDelete):
        (WebCore::WebGraphicsLayer::syncCompositingStateForThisLayerOnly):
        (WebCore::divideIntoTiles):
        (WebCore::collectCompositingInfoForThisLayer):
        (WebCore::collectCompositingInfoRecursively):
        (WebCore::WebGraphicsLayer::sendLayersToUIProcess):
        * WebProcess/WebCoreSupport/WebGraphicsLayer.h:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create):
        * WebProcess/WebPage/LayerTreeHost.h:
        * WebProcess/WebPage/LayerTreeHost.messages.in: Removed.
        * WebProcess/WebPage/TiledDrawingArea.cpp:
        * WebProcess/WebPage/TiledDrawingArea.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebPage/qt/LayerTreeHostQt.cpp:
        * WebProcess/WebPage/qt/LayerTreeHostQt.h: Removed.

2011-10-15  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt][WK2] Synchronize tiling with accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=69151

        Reviewed by Simon Hausmann.

        Make the tiled "non-composited" content and the composited layers go through the same
        code path on WebKit2. Instead of having a "drawing area" that handles the non-composited
        content and a seperate layer tree, we put everything in a layer tree, with the non-
        composited content being a layer in the tree.

        This allows fixing several issues with websites that have large content areas that are
        composited or overlap with composited layers.

        Layer-tree synchronization is done by passing WebKit2 messages between a LayerTreeHost
        on the WebProcess and a LayerTreeHostProxy on the UI process. Every layer in the tree has
        its own tiled backing store, and uses the LayerTreeHost communication channel to pass
        content up to the UI process. The UI process will later creates its own GraphicsLayer tree,
        based on TextureMapper, which can be painted directly with OpenGL.

        Several optimizations are available for the non-composited layer as well, e.g. specifying
        a trajectory and updating the visible rect together with the content scale.

        This code is currently disabled, a separate patch will enable it and glue it to
        QTouchWebPage.

        * DerivedSources.pro:
        * Platform/CoreIPC/MessageID.h:
        * Scripts/webkit2/messages.py:
        * Shared/LayerTreeContext.h:
        * Shared/WebLayerTreeInfo.cpp:
        (WebKit::WebLayerInfo::encode):
        (WebKit::WebLayerInfo::decode):
        * Shared/WebLayerTreeInfo.h:
        * Shared/qt/LayerTreeContextQt.cpp:
        (WebKit::LayerTreeContext::LayerTreeContext):
        (WebKit::LayerTreeContext::~LayerTreeContext):
        (WebKit::LayerTreeContext::encode):
        (WebKit::LayerTreeContext::decode):
        (WebKit::LayerTreeContext::isEmpty):
        (WebKit::operator==):
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::updateWebView):
        (WebKit::DrawingAreaProxy::contentsRect):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::viewportVisibleRect):
        (WebKit::DrawingAreaProxy::isBackingStoreReady):
        (WebKit::DrawingAreaProxy::paintToCurrentGLContext):
        (WebKit::DrawingAreaProxy::setVisibleContentsRectAndScale):
        (WebKit::DrawingAreaProxy::setVisibleContentRectTrajectoryVector):
        (WebKit::DrawingAreaProxy::createTileForLayer):
        (WebKit::DrawingAreaProxy::updateTileForLayer):
        (WebKit::DrawingAreaProxy::removeTileForLayer):
        (WebKit::DrawingAreaProxy::didReceiveLayerTreeHostProxyMessage):
        (WebKit::DrawingAreaProxy::page):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxyImpl::didReceiveLayerTreeHostProxyMessage):
        (WebKit::DrawingAreaProxyImpl::setVisibleContentsRectAndScale):
        (WebKit::DrawingAreaProxyImpl::setVisibleContentRectTrajectoryVector):
        (WebKit::DrawingAreaProxyImpl::paintToCurrentGLContext):
        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/LayerTreeHostProxy.h: Added.
        (WebKit::LayerTreeHostProxy::layerByID):
        (WebKit::LayerTreeHostProxy::rootLayer):
        (WebKit::LayerTreeHostProxy::notifyAnimationStarted):
        (WebKit::LayerTreeHostProxy::notifySyncRequired):
        (WebKit::LayerTreeHostProxy::showDebugBorders):
        (WebKit::LayerTreeHostProxy::showRepaintCounter):
        (WebKit::LayerTreeHostProxy::paintContents):
        * UIProcess/LayerTreeHostProxy.messages.in: Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        * UIProcess/qt/LayerTreeHostProxyQt.cpp: Added.
        * WebKit2.pro:
        * WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:
        (WebCore::WebGraphicsLayer::WebGraphicsLayer):
        (WebCore::WebGraphicsLayer::~WebGraphicsLayer):
        (WebCore::WebGraphicsLayer::setChildren):
        (WebCore::WebGraphicsLayer::addChild):
        (WebCore::WebGraphicsLayer::addChildAtIndex):
        (WebCore::WebGraphicsLayer::addChildAbove):
        (WebCore::WebGraphicsLayer::addChildBelow):
        (WebCore::WebGraphicsLayer::replaceChild):
        (WebCore::WebGraphicsLayer::removeFromParent):
        (WebCore::WebGraphicsLayer::setContentsNeedsDisplay):
        (WebCore::WebGraphicsLayer::setContentsToImage):
        (WebCore::WebGraphicsLayer::setNeedsDisplay):
        (WebCore::WebGraphicsLayer::setNeedsDisplayInRect):
        (WebCore::WebGraphicsLayer::syncCompositingState):
        (WebCore::WebGraphicsLayer::syncCompositingStateForThisLayerOnly):
        (WebCore::WebGraphicsLayer::tiledBackingStorePaintBegin):
        (WebCore::WebGraphicsLayer::setContentsScale):
        (WebCore::WebGraphicsLayer::setRootLayer):
        (WebCore::WebGraphicsLayer::setVisibleContentRectTrajectoryVector):
        (WebCore::WebGraphicsLayer::setVisibleContentRect):
        (WebCore::WebGraphicsLayer::tiledBackingStorePaint):
        (WebCore::WebGraphicsLayer::tiledBackingStorePaintEnd):
        (WebCore::WebGraphicsLayer::tiledBackingStoreUpdatesAllowed):
        (WebCore::WebGraphicsLayer::tiledBackingStoreContentsRect):
        (WebCore::WebGraphicsLayer::tiledBackingStoreVisibleRect):
        (WebCore::WebGraphicsLayer::tiledBackingStoreBackgroundColor):
        (WebCore::WebGraphicsLayer::createTile):
        (WebCore::WebGraphicsLayer::updateTile):
        (WebCore::WebGraphicsLayer::removeTile):
        (WebCore::WebGraphicsLayer::updateTileBuffersRecursively):
        (WebCore::WebGraphicsLayer::layerTreeTileClient):
        (WebCore::WebGraphicsLayer::updateContentBuffers):
        * WebProcess/WebCoreSupport/WebGraphicsLayer.h:
        (WebCore::WebGraphicsLayer::setLayerTreeTileClient):
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::didReceiveLayerTreeHostMessage):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create):
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit::LayerTreeHost::setVisibleContentRectAndScale):
        (WebKit::LayerTreeHost::setVisibleContentRectTrajectoryVector):
        (WebKit::LayerTreeHost::setVisibleContentRectForLayer):
        (WebKit::LayerTreeHost::renderNextFrame):
        * WebProcess/WebPage/LayerTreeHost.messages.in: Added.
        * WebProcess/WebPage/TiledDrawingArea.cpp:
        (WebKit::TiledDrawingArea::didReceiveLayerTreeHostMessage):
        * WebProcess/WebPage/TiledDrawingArea.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebPage/qt/LayerTreeHostQt.cpp:
        (WebKit::LayerTreeHostQt::create):
        (WebKit::LayerTreeHostQt::~LayerTreeHostQt):
        (WebKit::LayerTreeHostQt::LayerTreeHostQt):
        (WebKit::LayerTreeHostQt::setLayerFlushSchedulingEnabled):
        (WebKit::LayerTreeHostQt::scheduleLayerFlush):
        (WebKit::LayerTreeHostQt::cancelPendingLayerFlush):
        (WebKit::LayerTreeHostQt::setShouldNotifyAfterNextScheduledLayerFlush):
        (WebKit::LayerTreeHostQt::setRootCompositingLayer):
        (WebKit::LayerTreeHostQt::invalidate):
        (WebKit::LayerTreeHostQt::setNonCompositedContentsNeedDisplay):
        (WebKit::LayerTreeHostQt::scrollNonCompositedContents):
        (WebKit::LayerTreeHostQt::forceRepaint):
        (WebKit::LayerTreeHostQt::sizeDidChange):
        (WebKit::LayerTreeHostQt::didInstallPageOverlay):
        (WebKit::LayerTreeHostQt::didUninstallPageOverlay):
        (WebKit::LayerTreeHostQt::setPageOverlayNeedsDisplay):
        (WebKit::LayerTreeHostQt::flushPendingLayerChanges):
        (WebKit::LayerTreeHostQt::didSyncCompositingStateForLayer):
        (WebKit::LayerTreeHostQt::didDeleteLayer):
        (WebKit::LayerTreeHostQt::performScheduledLayerFlush):
        (WebKit::LayerTreeHostQt::layerFlushTimerFired):
        (WebKit::LayerTreeHostQt::createPageOverlayLayer):
        (WebKit::LayerTreeHostQt::destroyPageOverlayLayer):
        (WebKit::LayerTreeHostQt::adoptImageBackingStore):
        (WebKit::LayerTreeHostQt::releaseImageBackingStore):
        (WebKit::LayerTreeHostQt::notifyAnimationStarted):
        (WebKit::LayerTreeHostQt::notifySyncRequired):
        (WebKit::LayerTreeHostQt::paintContents):
        (WebKit::LayerTreeHostQt::showDebugBorders):
        (WebKit::LayerTreeHostQt::showRepaintCounter):
        (WebKit::LayerTreeHost::supportsAcceleratedCompositing):
        (WebKit::LayerTreeHostQt::createTile):
        (WebKit::LayerTreeHostQt::updateTile):
        (WebKit::LayerTreeHostQt::removeTile):
        (WebKit::LayerTreeHostQt::setVisibleContentRectForLayer):
        (WebKit::LayerTreeHostQt::setVisibleContentRectAndScale):
        (WebKit::LayerTreeHostQt::setVisibleContentRectTrajectoryVector):
        (WebKit::LayerTreeHostQt::renderNextFrame):
        (WebKit::LayerTreeHostQt::layerTreeTileUpdatesAllowed):

2011-10-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r97549.
        http://trac.webkit.org/changeset/97549
        https://bugs.webkit.org/show_bug.cgi?id=70174

        It broke the SL build (Requested by Ossy_weekend on #webkit).

        * DerivedSources.pro:
        * Platform/CoreIPC/MessageID.h:
        * Scripts/webkit2/messages.py:
        * Shared/LayerTreeContext.h:
        * Shared/WebLayerTreeInfo.cpp:
        (WebKit::WebLayerInfo::encode):
        (WebKit::WebLayerInfo::decode):
        * Shared/WebLayerTreeInfo.h:
        * Shared/qt/LayerTreeContextQt.cpp:
        (WebKit::LayerTreeContext::LayerTreeContext):
        (WebKit::LayerTreeContext::~LayerTreeContext):
        (WebKit::LayerTreeContext::encode):
        (WebKit::LayerTreeContext::decode):
        (WebKit::LayerTreeContext::isEmpty):
        (WebKit::operator==):
        * UIProcess/DrawingAreaProxy.cpp:
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/LayerTreeHostProxy.h: Removed.
        * UIProcess/LayerTreeHostProxy.messages.in: Removed.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        * UIProcess/qt/LayerTreeHostProxyQt.cpp: Removed.
        * WebKit2.pro:
        * WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:
        (WebCore::deletedLayerIDs):
        (WebCore::WebGraphicsLayer::WebGraphicsLayer):
        (WebCore::WebGraphicsLayer::~WebGraphicsLayer):
        (WebCore::WebGraphicsLayer::setChildren):
        (WebCore::WebGraphicsLayer::addChild):
        (WebCore::WebGraphicsLayer::addChildAtIndex):
        (WebCore::WebGraphicsLayer::addChildAbove):
        (WebCore::WebGraphicsLayer::addChildBelow):
        (WebCore::WebGraphicsLayer::replaceChild):
        (WebCore::WebGraphicsLayer::removeFromParent):
        (WebCore::WebGraphicsLayer::setContentsRect):
        (WebCore::WebGraphicsLayer::setContentsToImage):
        (WebCore::WebGraphicsLayer::setNeedsDisplay):
        (WebCore::WebGraphicsLayer::setNeedsDisplayInRect):
        (WebCore::WebGraphicsLayer::setContentsNeedsDisplay):
        (WebCore::WebGraphicsLayer::didSynchronize):
        (WebCore::WebGraphicsLayer::layerInfo):
        (WebCore::WebGraphicsLayer::syncCompositingState):
        (WebCore::WebGraphicsLayer::needsDisplayRect):
        (WebCore::WebGraphicsLayer::takeLayersToDelete):
        (WebCore::WebGraphicsLayer::syncCompositingStateForThisLayerOnly):
        (WebCore::divideIntoTiles):
        (WebCore::collectCompositingInfoForThisLayer):
        (WebCore::collectCompositingInfoRecursively):
        (WebCore::WebGraphicsLayer::sendLayersToUIProcess):
        * WebProcess/WebCoreSupport/WebGraphicsLayer.h:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create):
        * WebProcess/WebPage/LayerTreeHost.h:
        * WebProcess/WebPage/LayerTreeHost.messages.in: Removed.
        * WebProcess/WebPage/TiledDrawingArea.cpp:
        * WebProcess/WebPage/TiledDrawingArea.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebPage/qt/LayerTreeHostQt.cpp:
        * WebProcess/WebPage/qt/LayerTreeHostQt.h: Removed.

2011-10-15  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt][WK2] Synchronize tiling with accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=69151

        Reviewed by Simon Hausmann.

        Make the tiled "non-composited" content and the composited layers go through the same
        code path on WebKit2. Instead of having a "drawing area" that handles the non-composited
        content and a seperate layer tree, we put everything in a layer tree, with the non-
        composited content being a layer in the tree.

        This allows fixing several issues with websites that have large content areas that are
        composited or overlap with composited layers.

        Layer-tree synchronization is done by passing WebKit2 messages between a LayerTreeHost
        on the WebProcess and a LayerTreeHostProxy on the UI process. Every layer in the tree has
        its own tiled backing store, and uses the LayerTreeHost communication channel to pass
        content up to the UI process. The UI process will later creates its own GraphicsLayer tree,
        based on TextureMapper, which can be painted directly with OpenGL.

        Several optimizations are available for the non-composited layer as well, e.g. specifying
        a trajectory and updating the visible rect together with the content scale.

        This code is currently disabled, a separate patch will enable it and glue it to
        QTouchWebPage.

        * DerivedSources.pro:
        * Platform/CoreIPC/MessageID.h:
        * Scripts/webkit2/messages.py:
        * Shared/LayerTreeContext.h:
        * Shared/WebLayerTreeInfo.cpp:
        (WebKit::WebLayerInfo::encode):
        (WebKit::WebLayerInfo::decode):
        * Shared/WebLayerTreeInfo.h:
        * Shared/qt/LayerTreeContextQt.cpp:
        (WebKit::LayerTreeContext::LayerTreeContext):
        (WebKit::LayerTreeContext::~LayerTreeContext):
        (WebKit::LayerTreeContext::encode):
        (WebKit::LayerTreeContext::decode):
        (WebKit::LayerTreeContext::isEmpty):
        (WebKit::operator==):
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::updateWebView):
        (WebKit::DrawingAreaProxy::contentsRect):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::viewportVisibleRect):
        (WebKit::DrawingAreaProxy::isBackingStoreReady):
        (WebKit::DrawingAreaProxy::paintToCurrentGLContext):
        (WebKit::DrawingAreaProxy::setVisibleContentsRectAndScale):
        (WebKit::DrawingAreaProxy::setVisibleContentRectTrajectoryVector):
        (WebKit::DrawingAreaProxy::createTileForLayer):
        (WebKit::DrawingAreaProxy::updateTileForLayer):
        (WebKit::DrawingAreaProxy::removeTileForLayer):
        (WebKit::DrawingAreaProxy::didReceiveLayerTreeHostProxyMessage):
        (WebKit::DrawingAreaProxy::page):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxyImpl::didReceiveLayerTreeHostProxyMessage):
        (WebKit::DrawingAreaProxyImpl::setVisibleContentsRectAndScale):
        (WebKit::DrawingAreaProxyImpl::setVisibleContentRectTrajectoryVector):
        (WebKit::DrawingAreaProxyImpl::paintToCurrentGLContext):
        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/LayerTreeHostProxy.h: Added.
        (WebKit::LayerTreeHostProxy::layerByID):
        (WebKit::LayerTreeHostProxy::rootLayer):
        (WebKit::LayerTreeHostProxy::notifyAnimationStarted):
        (WebKit::LayerTreeHostProxy::notifySyncRequired):
        (WebKit::LayerTreeHostProxy::showDebugBorders):
        (WebKit::LayerTreeHostProxy::showRepaintCounter):
        (WebKit::LayerTreeHostProxy::paintContents):
        * UIProcess/LayerTreeHostProxy.messages.in: Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        * UIProcess/qt/LayerTreeHostProxyQt.cpp: Added.
        * WebKit2.pro:
        * WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:
        (WebCore::WebGraphicsLayer::WebGraphicsLayer):
        (WebCore::WebGraphicsLayer::~WebGraphicsLayer):
        (WebCore::WebGraphicsLayer::setChildren):
        (WebCore::WebGraphicsLayer::addChild):
        (WebCore::WebGraphicsLayer::addChildAtIndex):
        (WebCore::WebGraphicsLayer::addChildAbove):
        (WebCore::WebGraphicsLayer::addChildBelow):
        (WebCore::WebGraphicsLayer::replaceChild):
        (WebCore::WebGraphicsLayer::removeFromParent):
        (WebCore::WebGraphicsLayer::setContentsNeedsDisplay):
        (WebCore::WebGraphicsLayer::setContentsToImage):
        (WebCore::WebGraphicsLayer::setNeedsDisplay):
        (WebCore::WebGraphicsLayer::setNeedsDisplayInRect):
        (WebCore::WebGraphicsLayer::syncCompositingState):
        (WebCore::WebGraphicsLayer::syncCompositingStateForThisLayerOnly):
        (WebCore::WebGraphicsLayer::tiledBackingStorePaintBegin):
        (WebCore::WebGraphicsLayer::setContentsScale):
        (WebCore::WebGraphicsLayer::setRootLayer):
        (WebCore::WebGraphicsLayer::setVisibleContentRectTrajectoryVector):
        (WebCore::WebGraphicsLayer::setVisibleContentRect):
        (WebCore::WebGraphicsLayer::tiledBackingStorePaint):
        (WebCore::WebGraphicsLayer::tiledBackingStorePaintEnd):
        (WebCore::WebGraphicsLayer::tiledBackingStoreUpdatesAllowed):
        (WebCore::WebGraphicsLayer::tiledBackingStoreContentsRect):
        (WebCore::WebGraphicsLayer::tiledBackingStoreVisibleRect):
        (WebCore::WebGraphicsLayer::tiledBackingStoreBackgroundColor):
        (WebCore::WebGraphicsLayer::createTile):
        (WebCore::WebGraphicsLayer::updateTile):
        (WebCore::WebGraphicsLayer::removeTile):
        (WebCore::WebGraphicsLayer::updateTileBuffersRecursively):
        (WebCore::WebGraphicsLayer::layerTreeTileClient):
        (WebCore::WebGraphicsLayer::updateContentBuffers):
        * WebProcess/WebCoreSupport/WebGraphicsLayer.h:
        (WebCore::WebGraphicsLayer::setLayerTreeTileClient):
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::didReceiveLayerTreeHostMessage):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create):
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit::LayerTreeHost::setVisibleContentRectAndScale):
        (WebKit::LayerTreeHost::setVisibleContentRectTrajectoryVector):
        (WebKit::LayerTreeHost::setVisibleContentRectForLayer):
        (WebKit::LayerTreeHost::renderNextFrame):
        * WebProcess/WebPage/LayerTreeHost.messages.in: Added.
        * WebProcess/WebPage/TiledDrawingArea.cpp:
        (WebKit::TiledDrawingArea::didReceiveLayerTreeHostMessage):
        * WebProcess/WebPage/TiledDrawingArea.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebPage/qt/LayerTreeHostQt.cpp:
        (WebKit::LayerTreeHostQt::create):
        (WebKit::LayerTreeHostQt::~LayerTreeHostQt):
        (WebKit::LayerTreeHostQt::LayerTreeHostQt):
        (WebKit::LayerTreeHostQt::setLayerFlushSchedulingEnabled):
        (WebKit::LayerTreeHostQt::scheduleLayerFlush):
        (WebKit::LayerTreeHostQt::cancelPendingLayerFlush):
        (WebKit::LayerTreeHostQt::setShouldNotifyAfterNextScheduledLayerFlush):
        (WebKit::LayerTreeHostQt::setRootCompositingLayer):
        (WebKit::LayerTreeHostQt::invalidate):
        (WebKit::LayerTreeHostQt::setNonCompositedContentsNeedDisplay):
        (WebKit::LayerTreeHostQt::scrollNonCompositedContents):
        (WebKit::LayerTreeHostQt::forceRepaint):
        (WebKit::LayerTreeHostQt::sizeDidChange):
        (WebKit::LayerTreeHostQt::didInstallPageOverlay):
        (WebKit::LayerTreeHostQt::didUninstallPageOverlay):
        (WebKit::LayerTreeHostQt::setPageOverlayNeedsDisplay):
        (WebKit::LayerTreeHostQt::flushPendingLayerChanges):
        (WebKit::LayerTreeHostQt::didSyncCompositingStateForLayer):
        (WebKit::LayerTreeHostQt::didDeleteLayer):
        (WebKit::LayerTreeHostQt::performScheduledLayerFlush):
        (WebKit::LayerTreeHostQt::layerFlushTimerFired):
        (WebKit::LayerTreeHostQt::createPageOverlayLayer):
        (WebKit::LayerTreeHostQt::destroyPageOverlayLayer):
        (WebKit::LayerTreeHostQt::adoptImageBackingStore):
        (WebKit::LayerTreeHostQt::releaseImageBackingStore):
        (WebKit::LayerTreeHostQt::notifyAnimationStarted):
        (WebKit::LayerTreeHostQt::notifySyncRequired):
        (WebKit::LayerTreeHostQt::paintContents):
        (WebKit::LayerTreeHostQt::showDebugBorders):
        (WebKit::LayerTreeHostQt::showRepaintCounter):
        (WebKit::LayerTreeHost::supportsAcceleratedCompositing):
        (WebKit::LayerTreeHostQt::createTile):
        (WebKit::LayerTreeHostQt::updateTile):
        (WebKit::LayerTreeHostQt::removeTile):
        (WebKit::LayerTreeHostQt::setVisibleContentRectForLayer):
        (WebKit::LayerTreeHostQt::setVisibleContentRectAndScale):
        (WebKit::LayerTreeHostQt::setVisibleContentRectTrajectoryVector):
        (WebKit::LayerTreeHostQt::renderNextFrame):
        (WebKit::LayerTreeHostQt::layerTreeTileUpdatesAllowed):

2011-10-14  Mark Hahnenberg  <mhahnenberg@apple.com>

        Rename getOwnPropertySlot to getOwnPropertySlotVirtual
        https://bugs.webkit.org/show_bug.cgi?id=69810

        Reviewed by Geoffrey Garen.

        Renamed the virtual version of getOwnPropertySlot to getOwnPropertySlotVirtual
        in preparation for when we add the static getOwnPropertySlot to the MethodTable 
        in ClassInfo.

        Also added a few static getOwnPropertySlot functions where they had been overlooked 
        before (especially in CodeGeneratorJS.pm).

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

2011-10-14  Mark Hahnenberg  <mhahnenberg@apple.com>

        Rename virtual put to putVirtual
        https://bugs.webkit.org/show_bug.cgi?id=69851

        Reviewed by Darin Adler.

        Renamed virtual versions of put to putVirtual in prepration for 
        adding the static put to the MethodTable in ClassInfo since the 
        compiler gets mad if the virtual and static versions have the same 
        name.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::putVirtual):
        (WebKit::JSNPObject::put):
        * WebProcess/Plugins/Netscape/JSNPObject.h:
        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::NPJSObject::setProperty):

2011-10-14  Jeff Miller  <jeffm@apple.com>

        InjectedBundleHitTestResult::imageRect() should return rect in WKView coordinates
        https://bugs.webkit.org/show_bug.cgi?id=69963
        
        WebKit2 clients only have knowledge of the WKView's coordinate system, they have no way to
        convert from subframe view coordinates , so any rect that we expose through WK2 APIs should
        be in WKView coordinates.
        
        Reviewed by Simon Fraser.

        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
        (WebKit::InjectedBundleHitTestResult::imageRect): Use WebCore::FrameView::contentsToRootView() to convert the image rect to WKView coordinates.

2011-10-14  Mark Hahnenberg  <mhahnenberg@apple.com>

        Rename virtual deleteProperty to deletePropertyVirtual
        https://bugs.webkit.org/show_bug.cgi?id=69884

        Reviewed by Darin Adler.

        Renamed virtual versions of deleteProperty to deletePropertyVirtual in prepration for 
        adding the static deleteProperty to the MethodTable in ClassInfo since the 
        compiler gets mad if the virtual and static versions have the same name.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::deletePropertyVirtual):
        (WebKit::JSNPObject::deleteProperty):
        * WebProcess/Plugins/Netscape/JSNPObject.h:
        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::NPJSObject::removeProperty):

2011-10-14  Nayan Kumar K  <nayankk@motorola.com>

        [WebKit2][gtk] Add documentation for WebKitPluginError and WebKitPolicyError.
        https://bugs.webkit.org/show_bug.cgi?id=70016

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitError.h:

2011-10-14  Nayan Kumar K  <nayankk@motorola.com>

        [WebKit2][gtk] Skip TestWebKitSettings test.
        https://bugs.webkit.org/show_bug.cgi?id=70129

        Reviewed by Martin Robinson.

        Skip running TestWebKitSettings test till a bug
        https://bugs.webkit.org/show_bug.cgi?id=70127 gets fixed.

        * UIProcess/API/gtk/tests/TestWebKitSettings.cpp:
        (testWebKitSettings): Skip TestWebKitSettings test.

2011-10-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r97375.
        http://trac.webkit.org/changeset/97375
        https://bugs.webkit.org/show_bug.cgi?id=70115

        It breaks loading of webpages in QtWebKit2 (Requested by jeez_
        on #webkit).

        * UIProcess/qt/ClientImpl.cpp:
        (qt_wk_decidePolicyForNavigationAction):
        * UIProcess/qt/ClientImpl.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::init):

2011-10-12  Ryosuke Niwa  <rniwa@webkit.org>

        Make the interface of locationAndLengthFromRange and rangeFromLocationAndLength consistent
        https://bugs.webkit.org/show_bug.cgi?id=69964

        Reviewed by Enrica Casucci.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::getMarkedRange):
        (WebKit::WebPage::getSelectedRange):
        (WebKit::WebPage::characterIndexForPoint):
        (WebKit::convertToRange):

2011-10-14  Nayan Kumar K  <nayankk@motorola.com>

        [GTK] r97438: Inconsistent use of flattening vs flattering in function names/comments
        https://bugs.webkit.org/show_bug.cgi?id=70092

        Reviewed by Martin Robinson.

        Fixes the miss-spelling of 'PROP_ENABLE_FRAME_FLATTENING' as 'PROP_ENABLE_FRAME_FLATTERING'
        introduced with change set r97438.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webKitSettingsSetProperty): Property name correction.
        (webKitSettingsGetProperty): Property name correction.
        (webkit_settings_class_init): Property name correction.
        * UIProcess/API/gtk/tests/TestWebKitSettings.cpp:
        (testWebKitSettings): Spelling correction.

2011-10-14  Gopal Raghavan  <gopal.1.raghavan@nokia.com>

        [Qt] enable qmltests for qt5
        https://bugs.webkit.org/show_bug.cgi?id=70037

        Reviewed by Chang Shu.

        Qml tests seem to be disabled for some reason. This patch enables the tests by including qmltests to SUBDIRS.

        * UIProcess/API/qt/tests/tests.pro:

2011-10-14  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Do not cache m_resizesToContentsLayoutSize on WebKit2's WebPage
        https://bugs.webkit.org/show_bug.cgi?id=66134

        Unreviewed build fix after r97462.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):

2011-10-14  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Do not cache m_resizesToContentsLayoutSize on WebKit2's WebPage
        https://bugs.webkit.org/show_bug.cgi?id=66134

        Reviewed by Simon Hausmann.

        Do the resize to contents on the web process side.

        Based on patch by Zalan Bujtas.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setSize):
        (WebKit::WebPage::setResizesToContentsUsingLayoutSize):
        (WebKit::WebPage::resizeToContentsIfNeeded):
        * WebProcess/WebPage/WebPage.h:

2011-10-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Build is broken with new ld
        https://bugs.webkit.org/show_bug.cgi?id=70097

        Reviewed by Philippe Normand.

        * UIProcess/API/gtk/tests/GNUmakefile.am:

2011-10-12  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt][WK2] Fix build after QSGItem API changes
        https://bugs.webkit.org/show_bug.cgi?id=69926

        Reviewed by Kenneth Rohde Christiansen.

        Commit c825865cdd88445aa1db94cdf0da89426919acdb in qtdeclarative changed the
        signatures of the Drag & Drop event handlers in QSGItem. The SG specific events
        were replaced with the plain QDrag* events, which are now used for widgets as well
        as the Qt scene graph.

        This patch adapts the desktop webview as well as the page proxy to handle these
        kind of events.

        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebView::dragMoveEvent):
        (QDesktopWebView::dragEnterEvent):
        (QDesktopWebView::dragLeaveEvent):
        (QDesktopWebView::dropEvent):
        * UIProcess/API/qt/qdesktopwebview.h:
        * UIProcess/qt/qdesktopwebpageproxy.cpp:
        (QDesktopWebPageProxy::handleEvent):
        (QDesktopWebPageProxy::handleDragEnterEvent):
        (QDesktopWebPageProxy::handleDragLeaveEvent):
        (QDesktopWebPageProxy::handleDragMoveEvent):
        (QDesktopWebPageProxy::handleDropEvent):
        * UIProcess/qt/qdesktopwebpageproxy.h:

2011-10-13  Nayan Kumar K  <nayankk@motorola.com>

        [GTK][WEBKIT2] Add WebKitSettings GTK+ API.
        https://bugs.webkit.org/show_bug.cgi?id=68371

        Reviewed by Martin Robinson.

        WebKitSettings GTK+ object is created and first set of
        API's are written to get or set the properties of WebKitSettings.

        * GNUmakefile.am: Added new files for compilation.
        * UIProcess/API/gtk/WebKitSettings.cpp: Added.
        (_WebKitSettingsPrivate::_WebKitSettingsPrivate): Constructor.
        (webKitSettingsSetProperty): Set property function.
        (webKitSettingsGetProperty): Get property function.
        (webKitSettingsFinalize): Class finalize function.
        (webkit_settings_class_init): Class init function.
        (webkit_settings_init): Instance init function.
        (webkit_settings_new): Creates WebKitSettings GObject.
        (webkit_settings_get_enable_javascript): Function to get 'enable-javascript' property.
        (webkit_settings_set_enable_javascript): Function to set 'enable-javascript' property.
        (webkit_settings_get_auto_load_images): Get the 'auto-load-images' property.
        (webkit_settings_set_auto_load_images): Set the 'auto-load-images' property.
        (webkit_settings_get_load_icons_ignoring_image_load_setting): Function to get
        'load-icons-ignoring-image-load-setting' property.
        (webkit_settings_set_load_icons_ignoring_image_load_setting): Function to set
        'load-icons-ignoring-image-load-setting' property.
        (webkit_settings_get_enable_offline_web_application_cache): Function to get
        'enable-offline-web-application-cache' property.
        (webkit_settings_set_enable_offline_web_application_cache): Function to set
        'enable-offline-web-application-cache' property.
        (webkit_settings_get_enable_html5_local_storage): Get the property 'enable-html5-local-storage'.
        (webkit_settings_set_enable_html5_local_storage): Set the property 'enable-html5-local-storage'.
        (webkit_settings_get_enable_html5_database): Get the property 'enable-html5-database'.
        (webkit_settings_set_enable_html5_database): Set the property 'enable-html5-database'.
        (webkit_settings_get_enable_xss_auditor): Get property 'enable-xss-editor'.
        (webkit_settings_set_enable_xss_auditor): Set property 'enable-xss-editor'.
        (webkit_settings_get_enable_frame_flattening): Get the property 'enable-frame-flattening'.
        (webkit_settings_set_enable_frame_flattening): Set the property 'enable-frame-flattening'.
        (webkit_settings_get_enable_plugins): Get the property 'enable-plugins'.
        (webkit_settings_set_enable_plugins): Set the property 'enable-plugins'.
        (webkit_settings_get_enable_java): Function to get 'enable-java' property.
        (webkit_settings_set_enable_java): Function to set 'enable-java' property.
        (webkit_settings_get_javascript_can_open_windows_automatically): Get the property
        'javascript-can-open-windows-automatically'.
        (webkit_settings_set_javascript_can_open_windows_automatically): Set the property
        'javascript-can-open-windows-automatically'.
        (webkit_settings_get_enable_hyperlink_auditing): Get 'enable-hyperlink-auditing' property.
        (webkit_settings_set_enable_hyperlink_auditing): Set 'enable-hyperlink-auditing' property.
        * UIProcess/API/gtk/WebKitSettings.h: Added. Public API's.
        * UIProcess/API/gtk/tests/GNUmakefile.am: Added new test.
        * UIProcess/API/gtk/tests/TestWebKitSettings.cpp: Added.
        (testWebKitSettings): Add WebKitSetting unit test.
        (beforeAll): Pre-test function.
        (afterAll): Post-test function.
        * UIProcess/API/gtk/webkit2.h: Add WebKitSettings.h to exposed API list.

2011-10-13  Mark Hahnenberg  <mhahnenberg@apple.com>

        Rename virtual getConstructData to getConstructDataVirtual
        https://bugs.webkit.org/show_bug.cgi?id=69872

        Reviewed by Geoffrey Garen.

        Renamed virtual getConstructData functions to getConstructDataVirtual to 
        avoid conflicts when we add static getConstructData to the MethodTable.

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

2011-10-13  Sam Weinig  <sam@webkit.org>

        Another SnowLeopard build fix.

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::cachedImage):
        (WebKit::WebDragClient::declareAndWriteDragImage):
        (-[WKPasteboardOwner initWithImage:WebCore::]):

2011-10-13  Sam Weinig  <sam@webkit.org>

        Fix SnowLeopard build.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setCursor):
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:

2011-10-13  Alexey Proskuryakov  <ap@apple.com>

        [Mac] PDF Documents at epo.org look very blurry
        https://bugs.webkit.org/show_bug.cgi?id=70072

        Reviewed by Dan Bernstein.

        * WebProcess/Plugins/PDF/BuiltInPDFView.cpp: (WebKit::BuiltInPDFView::paintContent):
        Ensure integral coordinates. <rdar://problem/10283382> tracks lifting this limitation.

2011-10-13  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Wheel event handler counter is incorrect with PDF views
        https://bugs.webkit.org/show_bug.cgi?id=70062

        Reviewed by Dan Bernstein.

        * WebProcess/Plugins/PDF/BuiltInPDFView.h:
        * WebProcess/Plugins/PDF/BuiltInPDFView.cpp:
        (WebKit::BuiltInPDFView::didAddVerticalScrollbar): Added forgotten override for vertical case.
        (WebKit::BuiltInPDFView::willRemoveVerticalScrollbar): Ditto.
        (WebKit::BuiltInPDFView::createScrollbar): Notify self, do not make a shortcut to ScrollAnimator.
        (WebKit::BuiltInPDFView::destroyScrollbar): Ditto.
        (WebKit::BuiltInPDFView::destroy): Actually destroy the scrollbars.

2011-10-12  Chris Marrin  <cmarrin@apple.com>

        Sync requestAnimationFrame callback to CVDisplayLink on Mac
        https://bugs.webkit.org/show_bug.cgi?id=68911

        Reviewed by Simon Fraser.

        Add windowDidChangeScreen function which listens for the window changing
        screens and passes the new displayID along to WebCore::Page. It also sends
        one on windowDidBecomeKey, so the Page has a fresh displayID after it's
        created. Event is generated in the UIProcess and then sent over to the
        WebProcess, which actually sends it to WebCore::Page.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView addWindowObserversForWindow:]):
        (-[WKView removeWindowObservers]):
        (-[WKView _windowDidChangeScreen:]):
        (-[WKView _windowDidBecomeKey:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::windowScreenDidChange):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::windowScreenDidChange):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2011-10-13  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt][WK2] WebErrorsQt.cpp duplicates code from WKError.h and WebError.h
        https://bugs.webkit.org/show_bug.cgi?id=70053

        Reviewed by Kenneth Rohde Christiansen.

        Now we will be aligned with WKError.h and WebError.h by using the shared
        and pre-defined enum for error codes and WebError::webkitErrorDomain().

        * WebProcess/WebCoreSupport/qt/WebErrorsQt.cpp:
        (WebKit::blockedError):
        (WebKit::cannotShowURLError):
        (WebKit::interruptedForPolicyChangeError):
        (WebKit::cannotShowMIMETypeError):
        (WebKit::pluginWillHandleLoadError):

2011-10-13  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt][WK2] WebViews are emitting loadFailed for "private" error codes
        https://bugs.webkit.org/show_bug.cgi?id=70047

        Reviewed by Kenneth Rohde Christiansen.

        Both QDesktopWebView and QTouchWebView are emitting loadFailed for private errors
        like the ones defined in Source/WebKit2/WebProcess/WebCoreSupport/qt/WebErrorsQt.cpp.

        We now filter these by not emitting this signal for FrameLoadInterruptedByPolicyChange,
        PlugInWillHandleLoad and Cancellation, following previous decisions from WebKit 1.

        * UIProcess/qt/ClientImpl.cpp:
        (dispatchLoadFailed):

2011-10-13  Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com>

        Implement TextChecker for WebKit2 GTK+
        https://bugs.webkit.org/show_bug.cgi?id=68548

        Reviewed by Anders Carlsson.

        Added implementation for all functions in TextCheckerGtk.cpp removing earlier stubbed implementations.
        Moved couple of API earlier specific to win port to common section and added stubbed implementation
        of the same for remaining ports of Qt, Efl and Mac.

        * GNUmakefile.am: Added TextChecker implementation files.
        * UIProcess/TextChecker.h: Moved spellCheckingEnabled and grammarCheckingEnabled API outside of win port.
        * UIProcess/efl/TextCheckerEfl.cpp: Stubbed implementation of API which was moved outside win port.
        * UIProcess/gtk/TextCheckerGtk.cpp: Implementation of all TextChecker API.
        (WebKit::TextChecker::state):
        (WebKit::TextChecker::isContinuousSpellCheckingAllowed):
        (WebKit::TextChecker::setContinuousSpellCheckingEnabled):
        (WebKit::TextChecker::setGrammarCheckingEnabled):
        (WebKit::TextChecker::continuousSpellCheckingEnabledStateChanged):
        (WebKit::TextChecker::grammarCheckingEnabledStateChanged):
        (WebKit::TextChecker::uniqueSpellDocumentTag):
        (WebKit::TextChecker::closeSpellDocumentWithTag):
        (WebKit::TextChecker::checkSpellingOfString):
        (WebKit::TextChecker::checkGrammarOfString):
        (WebKit::TextChecker::spellingUIIsShowing):
        (WebKit::TextChecker::toggleSpellingUIIsShowing):
        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        (WebKit::TextChecker::getGuessesForWord):
        (WebKit::TextChecker::learnWord):
        (WebKit::TextChecker::ignoreWord):
        * UIProcess/mac/TextCheckerMac.mm: Implementation of API which was moved outside win port.
        * UIProcess/qt/TextCheckerQt.cpp: Stubbed implementation of API which was moved outside win port.

2011-10-13  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt][WK2] Implement decidePolicyForResponse in our PolicyClient
        https://bugs.webkit.org/show_bug.cgi?id=69832

        Reviewed by Kenneth Rohde Christiansen.

        We implement decidePolicyForResponse in our PolicyClient in order to
        decide whether a given ResourceResponse should be downloaded or loaded.

        * UIProcess/qt/ClientImpl.cpp:
        (qt_wk_decidePolicyForResponse):
        * UIProcess/qt/ClientImpl.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::init):

2011-10-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add WebKitTestServer class to WebKit2 GTK+ unit tests library
        https://bugs.webkit.org/show_bug.cgi?id=70010

        Reviewed by Martin Robinson.

        With this class tests using a soup server only need to implement
        the soup server callback.

        * UIProcess/API/gtk/tests/GNUmakefile.am: Add new files to compilation.
        * UIProcess/API/gtk/tests/TestWebKitWebLoaderClient.cpp: Use WebKitTestServer.
        (testLoadingStatus):
        (testLoadingError):
        (testLoadAlternateContent):
        (testWebViewReload):
        (testLoadProgress):
        (beforeAll):
        (afterAll):
        * UIProcess/API/gtk/tests/WebKitTestServer.cpp: Added.
        (WebKitTestServer::WebKitTestServer):
        (WebKitTestServer::~WebKitTestServer):
        (WebKitTestServer::run): Run the soup server and adds the given
        soup server callback to handle requests.
        (WebKitTestServer::getURIForPath): Returns the server absolute URI
        for the given relative path.
        * UIProcess/API/gtk/tests/WebKitTestServer.h: Added.
        (WebKitTestServer::baseURI):

2011-10-13  Nayan Kumar K  <nayankk@motorola.com>

        [WebKit2][gtk] Fix warnings while generating WebKit2-GTK+ documentation.
        https://bugs.webkit.org/show_bug.cgi?id=69928

        Reviewed by Philippe Normand.

        Patch fixes the warnings reported by gtk-doc while generating
        WebKit2-GTK+ documentation.

        * UIProcess/API/gtk/WebKitWebContext.h: Correct the documentation comment.
        * UIProcess/API/gtk/WebKitWebView.cpp: Parameter name correction.

2011-10-12  Joseph Pecoraro  <joepeck@webkit.org>

        Pass Parsed Accept Attribute MIME Types to WebKit Clients
        https://bugs.webkit.org/show_bug.cgi?id=69598

        Reviewed by David Kilzer.

        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):

2011-10-12  Joseph Pecoraro  <joepeck@webkit.org>

        Pass Parsed Accept Attribute MIME Types to WebKit Clients
        https://bugs.webkit.org/show_bug.cgi?id=69598

        Reviewed by Anders Carlsson.

        The WebOpenPanelParameters::Data struct was a mirror of
        the already existing WebCore::FileChooserSettings struct.
        So eliminate the excess struct and generate default
        WebCore coders for the WebCore::FileChooserSettings struct.

        * Scripts/webkit2/messages.py:
        Switch to the new type. FileChooserSetting's header needs
        to be special cased to FileChooser.h.

        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        Encode and decode all, non-deprecated, values. So we
        ignore deprecatedAcceptTypes. A follow-up patch will add it.

        * Shared/WebOpenPanelParameters.cpp:
        (WebKit::WebOpenPanelParameters::create):
        (WebKit::WebOpenPanelParameters::WebOpenPanelParameters):
        Switch to the new type.

        * Shared/WebOpenPanelParameters.h:
        (WebKit::WebOpenPanelParameters::allowMultipleFiles):
        (WebKit::WebOpenPanelParameters::selectedFileNames):
        FileChooserSettings had different property names.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runOpenPanel):
        Generate the WebOpenPanelParameters object here, before
        passing into the WebUIClient. This seems to be the convention
        to not have WebCore types in WebUIClient.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::runOpenPanel):
        * UIProcess/WebUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::runOpenPanel):
        Switch to the new type.

2011-10-12  Joseph Pecoraro  <joepeck@webkit.org>

        Pass Parsed Accept Attribute MIME Types to WebKit Clients
        https://bugs.webkit.org/show_bug.cgi?id=69598

        Reviewed by Kent Tamura.

        Switch to deprecated for now, but the next patches will
        remove the deprecated version from the WebKit2 path.

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

2011-10-12  Adam Barth  <abarth@webkit.org>

        Remove ENABLE(XHTMLMP) and associated code
        https://bugs.webkit.org/show_bug.cgi?id=69729

        Reviewed by David Levin.

        * Configurations/FeatureDefines.xcconfig:

2011-10-12  Dan Bernstein  <mitz@apple.com>

        Hang beneath PluginProcessProxy::createPropertyListFile() when using a thin build
        https://bugs.webkit.org/show_bug.cgi?id=69960

        Reviewed by Adam Roben.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::createPropertyListFile): Check for any non-zero return value
        from posix_spawn() rather than for a negative return value. The old, incorrect check, caused
        this function to hang in waitpid() after failing to spawn a plug-in process for a 32-bit plug-in
        when WebKit2 was built for 64-bit only.

2011-10-12  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt][WK2] Move qweberror* out of API/qt
        https://bugs.webkit.org/show_bug.cgi?id=69875

        Reviewed by Andreas Kling.

        Moving QWebError outside API/qt in order to keep our API folder (layer) aligned.

        * UIProcess/qt/qweberror.cpp: Renamed from Source/WebKit2/UIProcess/API/qt/qweberror.cpp.
        (QWebError::QWebError):
        (QWebErrorPrivate::createQWebError):
        (QWebErrorPrivate::QWebErrorPrivate):
        (QWebErrorPrivate::~QWebErrorPrivate):
        (QWebError::type):
        (QWebError::errorCode):
        (QWebError::url):
        * UIProcess/qt/qweberror.h: Renamed from Source/WebKit2/UIProcess/API/qt/qweberror.h.
        (QWebError::errorCodeAsHttpStatusCode):
        (QWebError::errorCodeAsNetworkError):
        * UIProcess/qt/qweberror_p.h: Renamed from Source/WebKit2/UIProcess/API/qt/qweberror_p.h.
        * WebKit2.pro:
        * WebKit2API.pri:

2011-10-12  Nayan Kumar K  <nayankk@motorola.com>

        [WebKit2][gtk] Add few more API's to gtk-doc section file.
        https://bugs.webkit.org/show_bug.cgi?id=69921

        Reviewed by Gustavo Noronha Silva.

        Generate documentation for existing WebKit2-GTK+ API's,
        which are not yet the part of gtk-doc documentation.

        * UIProcess/API/gtk/docs/GNUmakefile.am: List ignore files.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: API's addition.

2011-10-11  Simon Fraser  <simon.fraser@apple.com>

        Make custom scrollbar theme for use in DRT, to reduce pixel diffs between platforms
        https://bugs.webkit.org/show_bug.cgi?id=68134

        Reviewed by Darin Adler.

        Use ScrollbarThemeMock when the setting to use mock scrollbars is enabled.
        
        Make ScrollbarTheme::nativeTheme() private, and add a new static theme() method
        that reads the setting, and returns the mock theme if set. All callers now use
        theme() rther than nativeTheme(). Add the new ScrollbarTheme.cpp file to the build.

        * UIProcess/win/WebPopupMenuProxyWin.cpp:
        (WebKit::WebPopupMenuProxyWin::calculatePositionAndSize):
        * WebProcess/Plugins/PDF/BuiltInPDFView.cpp:
        (WebKit::BuiltInPDFView::paintControls):
        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::bounds):

2011-10-11  Simon Fraser  <simon.fraser@apple.com>

        Make custom scrollbar theme for use in DRT, to reduce pixel diffs between platforms
        https://bugs.webkit.org/show_bug.cgi?id=68134

        Reviewed by Darin Adler.

        ScrollbarTheme::nativeTheme() renamed to theme().

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

2011-10-10  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [WebKit2] Make adding another unit test easier
        https://bugs.webkit.org/show_bug.cgi?id=69409

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.am: Add the new WebKit2 API tests.
        * UIProcess/API/gtk/tests/GNUmakefile.am: Added.
        * UIProcess/API/gtk/tests/LoadTrackingTest.cpp: Added. A fixture for creating load tracking tests.
        * UIProcess/API/gtk/tests/LoadTrackingTest.h: Added.
        * UIProcess/API/gtk/tests/TestMain.cpp: Copied from Source/WebKit2/UIProcess/API/gtk/tests/testwebview.c.
        (main):
        * UIProcess/API/gtk/tests/TestMain.h: Added.
        * UIProcess/API/gtk/tests/TestWebKitWebContext.cpp: Copied from Source/WebKit2/UIProcess/API/gtk/tests/testwebview.c.
        * UIProcess/API/gtk/tests/TestWebKitWebLoaderClient.cpp: Added.
        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/testwebview.c.
        * UIProcess/API/gtk/tests/WebViewTest.cpp: Added. A fixture for generic WebView tests.
        * UIProcess/API/gtk/tests/WebViewTest.h: Added.
        * UIProcess/API/gtk/tests/testloading.c: Removed.
        * UIProcess/API/gtk/tests/testwebcontext.c: Removed.

2011-10-11  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Crash when opening an embedded PDF in a background tab
        https://bugs.webkit.org/show_bug.cgi?id=69880

        Reviewed by Darin Adler.

        * WebProcess/Plugins/PDF/BuiltInPDFView.cpp:
        (WebKit::BuiltInPDFView::BuiltInPDFView):
        (WebKit::BuiltInPDFView::~BuiltInPDFView):
        (WebKit::BuiltInPDFView::initialize):
        (WebKit::BuiltInPDFView::destroy):
        Moved initialization and destruction code from C++ constructor and destructor to designated
        functions. Not part of the fix, but seems related enough to fix.

2011-10-11  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Crash when opening an embedded PDF in a background tab
        https://bugs.webkit.org/show_bug.cgi?id=69880

        Reviewed by Darin Adler.

        * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::paint): Don't call plug-in that
        doesn't even have a controller yet.

2011-10-11  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=69874
        WebKit2 snapshot APIs should take the device scale factor into account 
        -and corresponding-
        <rdar://problem/10269112>

        Reviewed by Darin Adler.

        Add the deviceScaleFactor as a scale on the snapshot's context to create a 
        snapshot of the appropriate resolution. This matches the manner in which we scale 
        the context in DrawingAreaImpl::display().
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::snapshotInViewCoordinates):
        (WebKit::WebPage::scaledSnapshotInDocumentCoordinates):

2011-10-11  W. James MacLean  <wjmaclean@chromium.org>

        Loss of precision when converting from double to int and double to float in FrameView::zoomAnimatorTransformChanged()
        https://bugs.webkit.org/show_bug.cgi?id=69739

        Change 'double' parameters to 'float' to match changes in FrameView.

        Reviewed by Simon Fraser.

        * WebProcess/Plugins/PDF/BuiltInPDFView.h:
        (WebKit::BuiltInPDFView::zoomAnimatorTransformChanged):

2011-10-11  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Small embedded PDFs are not fully repainted when scrolling
        https://bugs.webkit.org/show_bug.cgi?id=69861

        Reviewed by Anders Carlsson.

        * WebProcess/Plugins/PDF/BuiltInPDFView.cpp: (WebKit::BuiltInPDFView::paintContent):
        Account for vertical centering when deciding which pages to paint.

2011-10-11  Alexey Proskuryakov  <ap@apple.com>

        Embedding of PDF's with <object> or <embed> fails when there is no MIME type specified
        https://bugs.webkit.org/show_bug.cgi?id=64934

        Reviewed by Dan Bernstein.

        * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::createPlugin): Check URL extension, too,
        like GetPluginPath does in UI process. One difference is that UI process additionally tries
        platform specific extension to MIME type mapping, but that doesn't matter for PDF, which
        does not have other standard extensions.

2011-10-11  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Should be able to display multi-page PDFs in subframes
        https://bugs.webkit.org/show_bug.cgi?id=69804

        Reviewed by Anders Carlsson.

        * WebProcess/Plugins/PDF/BuiltInPDFView.h:
        * WebProcess/Plugins/PDF/BuiltInPDFView.cpp:
        (WebKit::BuiltInPDFView::updateScrollbars): Page step should be exactly one page, so that
        one could step over the document page by page. It certainly shouldn't be a portion of the
        whole document.
        (WebKit::BuiltInPDFView::pdfDocumentDidLoad): Moved duplicated code from load callbacks here.
        (WebKit::BuiltInPDFView::calculateSizes): Calculate document size including gutters, and
        remember page boxes.
        (WebKit::BuiltInPDFView::paint): Split into separate functions.
        (WebKit::BuiltInPDFView::paintBackground): Just paint gray background for the whole dirty rect.
        (WebKit::BuiltInPDFView::paintContent): Paint pages and shadow under them. This code is still
        fairly naive, as it doesn't understand annotations or page rotation.
        Constants for shadows roughly match PDFView, but not quite, since it draws entirely custom
        shadows.
        (WebKit::BuiltInPDFView::paintControls): Moved scrollbar and scroll corner painting here.
        (WebKit::BuiltInPDFView::streamDidFinishLoading): Moved common code into pdfDocumentDidLoad().
        (WebKit::BuiltInPDFView::manualStreamDidFinishLoading): Ditto.

2011-10-11  Gopal Raghavan  <gopal.1.raghavan@nokia.com>

        [Qt] WebProcess using proxy settings for localhost as well
        https://bugs.webkit.org/show_bug.cgi?id=69611

        Reviewed by Chang Shu.

        Implemented checks in queryProxy to return QNetworkProxy::NoProxy for localhost and 127.0.0.1

        * WebProcess/qt/WebProcessMainQt.cpp:
        (WebKit::EnvHttpProxyFactory::queryProxy):

2011-10-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Remove all references to QTDIR_build and standalone_package

        Qt is now modularized, which means we no longer import WebKit into
        the Qt source tree. Instead we use git submodules, and building
        QtWebKit as "part of Qt" is really building QtWebKit as from trunk.

        To decrease the number of buildsystem configurations we also remove
        the standalone_package code-path used when we were providing tarballs
        with the derived sources pre-generated.

        Reviewed by Simon Hausmann.

        * DerivedSources.pro:
        * UIProcess/API/qt/qmlplugin/qmlplugin.pro:
        * UIProcess/API/qt/tests/tests.pri:
        * WebKit2.pri:
        * WebProcess.pro:

2011-10-10  Nate Chapin  <japhet@chromium.org>

        Use a CachedImageClient instead of CachedResourceClient
        in WebDragClientMac.
        https://bugs.webkit.org/show_bug.cgi?id=69790

        Reviewed by Adam Barth.

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (promisedDataClient):

2011-10-10  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove getCallDataVirtual methods
        https://bugs.webkit.org/show_bug.cgi?id=69186

        Reviewed by Geoffrey Garen.

        Removed all getCallDataVirtual methods and replaced their call sites 
        with an explicit lookup in the MethodTable.

        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        * WebProcess/Plugins/Netscape/JSNPMethod.h:
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        * WebProcess/Plugins/Netscape/JSNPObject.h:

2011-10-10  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix build with qreal == float on MeeGo 1.2 Harmattan

        Reviewed by Andreas Kling.

        Explicitly choose the qreal variant of qMin, since QPointF is using qreal.

        * UIProcess/qt/ViewportInteractionEngine.cpp:
        (WebKit::ViewportInteractionEngine::animateContentPositionIntoBoundariesIfNeeded):

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

        [GTK] Add methods to reload the view to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=69613

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_reload):
        (webkit_web_view_reload_bypass_cache):
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/tests/testloading.c:
        (loadReloadProvisionalLoadStarted):
        (loadReloadLoadFinished):
        (testLoadTimeoutFinishLoop):
        (testLoadReload):
        (main):

2011-10-09  Luke Macpherson   <macpherson@chromium.org>

        Fix Lion, Leopard and Snow Leopard builds after changeset 97034 <http://trac.webkit.org/changeset/97034>
        (https://bugs.webkit.org/show_bug.cgi?id=68035)
        https://bugs.webkit.org/show_bug.cgi?id=69735

        Reviewed by Daniel Bates.

        * WebProcess/Plugins/PDF/BuiltInPDFView.h:
        Add symbols that are now required by ScrollableArea.
        (WebKit::BuiltInPDFView::zoomAnimatorTransformChanged):

2011-10-08  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add static version of JSCell::getConstructData
        https://bugs.webkit.org/show_bug.cgi?id=69673

        Reviewed by Geoffrey Garen.

        Added static version of getConstructData to all classes that 
        override it and changed the virtual versions to call the static 
        versions.  This is the first step in de-virtualizing JSCell::getConstructData.

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

2011-10-08  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add static version of JSCell::getOwnPropertySlot
        https://bugs.webkit.org/show_bug.cgi?id=69593

        Reviewed by Geoffrey Garen.

        Added static version of getOwnPropertySlot to every class that overrides
        JSCell::getOwnPropertySlot.  The virtual versions now call the static versions.
        This is the first step in de-virtualizing JSCell::getOwnPropertySlot.

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

2011-10-03  Carlos Garcia Campos  <cgarcia@igalia.com> and Martin Robinson  <mrobinson@igalia.com>

        [GTK] Implement drag and drop support in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=63706

        Reviewed by Philippe Normand.

        * GNUmakefile.am: Add new files to compilation.
        * Shared/gtk/ArgumentCodersGtk.cpp: Added.
        (CoreIPC::encodeImage): Encode a GdkPixbuf.
        (CoreIPC::decodeImage): Decode a GdkPixbuf.
        (CoreIPC::encodeDataObject): Encode a DataObjectGtk.
        (CoreIPC::decodeDataObject): Decode a DataObjectGtk.
        (CoreIPC::::encode): Encode DragData.
        (CoreIPC::::decode): Decode DragData.
        * Shared/gtk/ArgumentCodersGtk.h:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::startDrag):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkit_web_view_base_init): Set the view as a potential drop destination.
        (webkitWebViewBaseDragDataGet): Added, delegate to GtkDragAndDropHelper.
        (webkitWebViewBaseDragEnd): Ditto.
        (webkitWebViewBaseDragDataReceived): Ditto.
        (webkitWebViewBaseDragEnter): Ditto.
        (webkitWebViewBaseDragMotion): Ditto.
        (doDragLeaveLater): Ditto.
        (webkitWebViewBaseDragLeave): Ditto.
        (webkitWebViewBaseDragDrop): Ditto.
        (webkit_web_view_base_class_init): Override GtkWidget drag and drop methods.
        (webkitWebViewBaseStartDrag): Calls gtk_drag_begin() to start a drag operation.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h: Add webkitWebViewBaseStartDrag().
        * UIProcess/PageClient.h: Add startDrag().
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::performDragControllerAction): Share the Qt version.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp: Added.
        * WebProcess/WebPage/WebPage.cpp: Add drag support for GTK+.
        * WebProcess/WebPage/WebPage.h: Ditto.
        * WebProcess/WebPage/WebPage.messages.in: Ditto.

2011-10-08  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        [Qt] [WK2] Wrong handling of visibility in QTouchWebPage
        https://bugs.webkit.org/show_bug.cgi?id=69670

        Reviewed by Andreas Kling.

        Replace QTouchWebPage visibility handling by Show/Hide events with use of 
        QSGItem::visibleChanged signal.

        * UIProcess/API/qt/qtouchwebpage.cpp:
        (QTouchWebPage::QTouchWebPage):
        (QTouchWebPage::event):
        (QTouchWebPage::onVisibleChanged):
        * UIProcess/API/qt/qtouchwebpage.h:

2011-10-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r96996.
        http://trac.webkit.org/changeset/96996
        https://bugs.webkit.org/show_bug.cgi?id=69697

        It broke all tests on the Qt bot (Requested by Ossy_night on
        #webkit).

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

2011-10-07  Jeff Miller  <jeffm@apple.com>

        Add WKPageContextMenuClient callback when context menu is dismissed
        https://bugs.webkit.org/show_bug.cgi?id=69553

        Add contextMenuDismissed callback to WKPageContextMenuClient, and bump the API
        version of this client to 1 so we continue to work with old clients.

        * Shared/APIClientTraits.cpp: Added array of interface sizes for WKPageContextMenuClient.
        * Shared/APIClientTraits.h: Added APIClientTraits for WKPageContextMenuClient.

        * UIProcess/API/C/WKPage.h: Added contextMenuDismissed callback to WKPageContextMenuClient and bumped kWKPageContextMenuClientCurrentVersion.

        * UIProcess/WebPageContextMenuClient.cpp:
        (WebKit::WebPageContextMenuClient::contextMenuDismissed): Added.

        * UIProcess/WebPageContextMenuClient.h: Added WebPageContextMenuClient::contextMenuDismissed().

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu): Notify client when context menu is dismissed.

2011-10-07  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove getCallDataVirtual methods
        https://bugs.webkit.org/show_bug.cgi?id=69186

        Reviewed by Geoffrey Garen.

        Removed all getCallDataVirtual methods and replaced their call sites 
        with an explicit lookup in the MethodTable.

        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        * WebProcess/Plugins/Netscape/JSNPMethod.h:
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        * WebProcess/Plugins/Netscape/JSNPObject.h:

2011-10-07  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Scrollbars in embedded PDFs should update when system preferences change
        https://bugs.webkit.org/show_bug.cgi?id=69654

        Reviewed by Simon Fraser.

        * WebProcess/Plugins/PDF/BuiltInPDFView.h: Added an scrollbarStyleChanged() override.
        ScrollAnimatorMac sets scrollbar frame to a bogus (0, 0, thickness, thickness) one when style
        changes, and expects clients to move them back in place.

        * WebProcess/Plugins/PDF/BuiltInPDFView.cpp:
        (WebKit::BuiltInPDFView::isOnActivePage): Fixed a typo that prevented ScrollAnimatorMac from
        updating style of PDF view scrollbars.
        (WebKit::BuiltInPDFView::scrollbarStyleChanged): Reposition scrollbars and content after
        style change. The behavior is not perfect in edge cases, but roughly matches ScrollView.

2011-10-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r96938.
        http://trac.webkit.org/changeset/96938
        https://bugs.webkit.org/show_bug.cgi?id=69653

        It broke zillion tests and make testing so slow (Requested by
        ossy_ on #webkit).

        * UIProcess/WebContext.cpp:
        * UIProcess/WebContext.h:
        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::applicationCacheDirectory):
        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::applicationCacheDirectory):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::applicationCacheDirectory):
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::applicationCacheDirectory):
        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::applicationCacheDirectory):

2011-10-07  Qi Zhang  <qi.2.zhang@nokia.com>

        [Qt][WK2] ApplicationCache LayoutTests failed
        https://bugs.webkit.org/show_bug.cgi?id=69541

        Reviewed by Chang Shu.

        1. Moved applicationCacheDirectory to common code.
        2. Added interface setApplicationCacheDirectory to allow UI client overriding.
        3. Renamed all platform-dependent implementations of applicationCacheDirectory to platformDefaultApplicationCacheDirectory.
        4. On Qt, set the platformDefaultApplicationCacheDirectory to the default data location.


        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::applicationCacheDirectory):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::setApplicationCacheDirectory):
        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::platformDefaultApplicationCacheDirectory):
        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformDefaultApplicationCacheDirectory):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformDefaultApplicationCacheDirectory):
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::platformDefaultApplicationCacheDirectory):
        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformDefaultApplicationCacheDirectory):

2011-10-06  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Correct improper identification of WKQC extensions.
        https://bugs.webkit.org/show_bug.cgi?id=69600

        * DerivedSources.make: Make sure we are not building the
        WinCairo variant.

2011-10-06  Anders Carlsson  <andersca@apple.com>

        When building with clang, enable -Wglobal-constructors and -Wexit-time-destructors
        https://bugs.webkit.org/show_bug.cgi?id=69586

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig:
        Add -Wglobal-constructors and -Wexit-time-destructors when building with clang.

        * WebKit2.xcodeproj/project.pbxproj:
        When building with clang, we don't need to run the check-for-global-initializers and
        check-for-exit-time-destructors anymore.

2011-10-06  Anders Carlsson  <andersca@apple.com>

        Add DEFINE_DEBUG_ONLY_GLOBAL for globals that should be defined in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=69584

        Reviewed by Darin Adler.

        Adopt the DEFINE_DEBUG_ONLY_GLOBAL macro.

        * UIProcess/WebContext.cpp:
        * UIProcess/WebPageProxy.cpp:
        * WebProcess/WebPage/WebFrame.cpp:
        * WebProcess/WebPage/WebPage.cpp:

2011-10-06  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Should be able to scroll embedded PDFs using mouse
        https://bugs.webkit.org/show_bug.cgi?id=69579

        Reviewed by Darin Adler.

        * WebProcess/Plugins/PDF/BuiltInPDFView.cpp:
        (WebKit::BuiltInPDFView::handleMouseEvent): No longer need to hardcode mouseDown handling,
        ScrollableArea does everything now.
        (WebKit::BuiltInPDFView::horizontalScrollbar): Added plumbing to access scrollbars from
        WebCore hit testing code.
        (WebKit::BuiltInPDFView::verticalScrollbar): Ditto.
        (WebKit::BuiltInPDFView::visibleHeight): ScrollableArea now wants this.
        (WebKit::BuiltInPDFView::visibleWidth): Ditto.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::horizontalScrollbar):
        (WebKit::NetscapePlugin::verticalScrollbar):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/PDF/BuiltInPDFView.h:
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::horizontalScrollbar):
        (WebKit::PluginProxy::verticalScrollbar):
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::horizontalScrollbar):
        (WebKit::PluginView::verticalScrollbar):
        * WebProcess/Plugins/PluginView.h:
        Added plumbing to access scrollbars from WebCore hit testing code.

2011-10-06  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt][WK2] WebIconDatabase expects a file path not a directory.
        https://bugs.webkit.org/show_bug.cgi?id=69557

        Reviewed by Andreas Kling.

        WebIconDatabase::setDatabasePath expects a file path not a directory.
        I used the same name as the Mac port.

        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::platformDefaultIconDatabasePath):

2011-10-06  Anders Carlsson  <andersca@apple.com>

        In background window, page flashes white if it enters and then immediately leaves compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=69566
        <rdar://problem/9521192>

        Reviewed by Dan Bernstein.

        Don't update the backing store state if we're just about to exit accelerated compositing mode. Otherwise
        the UI process will try to render an empty layer tree for a short period of time, leading to a white flash.

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

2011-10-06  Fady Samuel  <fsamuel@chromium.org>

        Code clean-up: Make RenderObject::absoluteBoundingBoxRect and associated methods const and make its parameter useTransforms no longer default to false
        https://bugs.webkit.org/show_bug.cgi?id=69009

        Reviewed by Simon Fraser.

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

2011-10-06  Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com>

        Move windows specific TextChecker implementation common to all ports.
        https://bugs.webkit.org/show_bug.cgi?id=68532

        Reviewed by Anders Carlsson.

        All the TextChecker feature implementation files are moved outside of win port since they are
        platform independent and can be moved across all ports. Only the implementation of TextChecker
        class is platform dependent now and has been retained across all ports. Rest all files has been
        moved for all ports usage.

        * Shared/API/c/WKBase.h: Add WKGrammarDetailRef & WKTextCheckerRef types.
        * Shared/API/c/win/WKBaseWin.h: Remove WKGrammarDetailRef & WKTextCheckerRef types.
        * Shared/APIObject.h: Moved TypeGrammarDetail & TypeTextChecker from platform specific section to UIProcess types.
        * UIProcess/API/C/WKAPICast.h: Added mapping for WKTextCheckerRef & WKGrammarDetailRef.
        * UIProcess/API/C/WKGrammarDetail.cpp: Renamed from Source/WebKit2/UIProcess/API/C/win/WKGrammarDetail.cpp.
        * UIProcess/API/C/WKGrammarDetail.h: Renamed from Source/WebKit2/UIProcess/API/C/win/WKGrammarDetail.h.
        * UIProcess/API/C/WKTextChecker.cpp: Renamed from Source/WebKit2/UIProcess/API/C/win/WKTextChecker.cpp.
        * UIProcess/API/C/WKTextChecker.h: Renamed from Source/WebKit2/UIProcess/API/C/win/WKTextChecker.h.
        * UIProcess/API/C/win/WKAPICastWin.h: Removed mapping for WKTextCheckerRef & WKGrammarDetailRef.
        * UIProcess/WebGrammarDetail.cpp: Renamed from Source/WebKit2/UIProcess/win/WebGrammarDetail.cpp.
        * UIProcess/WebGrammarDetail.h: Renamed from Source/WebKit2/UIProcess/win/WebGrammarDetail.h.
        * UIProcess/WebTextChecker.cpp: Renamed from Source/WebKit2/UIProcess/win/WebTextChecker.cpp.
        * UIProcess/WebTextChecker.h: Renamed from Source/WebKit2/UIProcess/win/WebTextChecker.h.
        * UIProcess/WebTextCheckerClient.cpp: Renamed from Source/WebKit2/UIProcess/win/WebTextCheckerClient.cpp.
        * UIProcess/WebTextCheckerClient.h: Renamed from Source/WebKit2/UIProcess/win/WebTextCheckerClient.h.
        * win/WebKit2.vcproj: Corrected paths for renamed files.
        * win/WebKit2Generated.make: Corrected paths for renamed files.

2011-10-06  Anders Carlsson  <andersca@apple.com>

        Crash when PluginProxy object is destroyed inside PluginProxy::pluginScriptableNPObject
        https://bugs.webkit.org/show_bug.cgi?id=69559
        <rdar://problem/9704066>

        Reviewed by Maciej Stachowiak.

        Protect the plug-in itself in the call to pluginScriptableNPObject. In some cases, sending
        the synchronous message to the plug-in process can end up causing the web process to handle
        an incoming message that will destroy t he plug-in.

        Unfortunately, this is highly timing-dependent and can't be tested reliably.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::pluginScriptableNPObject):

2011-10-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add estimated-progress property to WebKitWebLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=69509

        Reviewed by Martin Robinson.

        It allows to monitor the estimated progress of a lof operation by
        connecting to the notify signal.

        * UIProcess/API/gtk/WebKitWebLoaderClient.cpp:
        (didChangeProgress): Update estimated-progress property and notify when
        it changes.
        (webkitWebLoaderClientConstructed): Add implementations for
        didStartProgress, didChangeProgress and didFinishProgress.
        (webkitWebLoaderClientGetProperty):
        (webkit_web_loader_client_class_init): Add estimated-progress property.
        (webkit_web_loader_client_get_estimated_progress): Returns the
        value of estimated-progress property.
        * UIProcess/API/gtk/WebKitWebLoaderClient.h:
        * UIProcess/API/gtk/tests/testloading.c:
        (webLoadingFixtureSetup):
        (loadProgressEstimatedProgressChanged):
        (loadProgressLoadFinished):
        (testLoadProgress):
        (main):

2011-10-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement cache model for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=68434

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_set_cache_model):
        (webkit_web_context_get_cache_model):
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/tests/testwebcontext.c:
        (testWebContextCacheModel):
        (main):
        * WebProcess/gtk/WebProcessGtk.cpp:
        (WebKit::getCacheDiskFreeSize): Helper function to get free space
        of the file system where the cache directory is on.
        (WebKit::getMemorySize): Helper function to get the total memory
        of the system in MB.
        (WebKit::WebProcess::platformSetCacheModel): Implement
        platformSetCacheModel for Gtk port using calculateCacheSizes().

2011-10-05  Alexey Proskuryakov  <ap@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=69492
        [Mac] Should be able to scroll embedded PDFs from keyboard

        Reviewed by Darin Adler.

        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::handleScroll):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::handleScroll):
        * WebProcess/Plugins/PluginProxy.h:
        Added a handleScroll method. A plug-in gets it if it doesn't handle a keyboard event, and
        WebCore decides that this is an event for scrolling. A plug-in can decide whether it scrolls
        main content, or some scrollable subview of its own.

        * WebProcess/Plugins/PDF/BuiltInPDFView.cpp:
        (WebKit::BuiltInPDFView::handleMouseEvent): Added a comment explaining returned value.
        (WebKit::BuiltInPDFView::handleScroll): Just call ScrollableArea, it will do everything.

        * WebProcess/Plugins/PDF/BuiltInPDFView.h: Added a handleScroll override.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::scroll): Pass a PluginViewBase scroll to plug-in to handle.
        (WebKit::PluginView::handleEvent): Added a FIXME.
        * WebProcess/Plugins/PluginView.h:

2011-10-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not use C API in GTK+ API public headers
        https://bugs.webkit.org/show_bug.cgi?id=69506

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Add new files to compilation.
        * UIProcess/API/gtk/WebKitDefines.h: Added.
        * UIProcess/API/gtk/WebKitError.h: Use WEBKIT_API instead of WK_EXPORT.
        * UIProcess/API/gtk/WebKitWebContext.h: Ditto.
        * UIProcess/API/gtk/WebKitWebLoaderClient.h: Ditto.
        * UIProcess/API/gtk/WebKitWebView.h: Ditto.
        * UIProcess/API/gtk/WebKitWebViewBase.h: Ditto.
        * UIProcess/API/gtk/docs/GNUmakefile.am: Ignore WEBKIT_API
        decorator in docs.
        * UIProcess/API/gtk/webkit2.h: Include <webkit2/WebKitDefines.h>

2011-10-06  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt][WK2] Cursor should change when hovering links or input fields.
        https://bugs.webkit.org/show_bug.cgi?id=69519

        Reviewed by Simon Hausmann.

        This is a temporary fix until Qt5 brings support for changing cursor
        per item. This patch enforce the change of the cursor at application
        level.

        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebViewPrivate::didChangeCursor):

2011-10-06  Zeno Albisser  <zeno.albisser@nokia.com>

        [Qt][WK2][Mac] QtWebProcess should not show up in the Dock.
        https://bugs.webkit.org/show_bug.cgi?id=69432

        We can set the environment variable QT_MAC_DISABLE_FOREGROUND_APPLICATION_TRANSFORM
        in the WebProcess stub to disable the automatic foreground transformation.

        Reviewed by Andreas Kling.

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::QtWebProcess::setupChildProcess):

2011-10-03  Andy Estes  <aestes@apple.com>

        Add an option to suppress rendering until the document's load event fires.
        https://bugs.webkit.org/show_bug.cgi?id=69298

        Reviewed by Simon Fraser.
        
        Add a new WKPreference.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetSuppressRenderingWhileInitiallyLoading):
        (WKPreferencesGetSuppressRenderingWhileInitiallyLoading):
        * UIProcess/API/C/WKPreferences.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2011-10-05  Simon Fraser  <simon.fraser@apple.com>

        r96770 broke binary compatibility with Safari
        https://bugs.webkit.org/show_bug.cgi?id=69496

        Reviewed by Dan Bernstein.
        
        Fix binary compatibility issue by declaring the deprecated methods inside a extern "C" block.

        * UIProcess/API/C/WKContext.cpp:

2011-10-05  Jer Noble  <jer.noble@apple.com>

        Enable WEB_AUDIO by default in the WebKit/mac port.
        https://bugs.webkit.org/show_bug.cgi?id=68587

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2011-10-05  Simon Fraser  <simon.fraser@apple.com>

        In WebKitTestRunner, text has font smoothing in pixel snapshots
        https://bugs.webkit.org/show_bug.cgi?id=69396

        Reviewed by Darin Adler.
        
        Plumb through a method on WKContext that controls whether font smoothing
        is enabled. Since this is a global setting, such a method is more appropriate
        than a preference.
        
        Remove leading underscores on some WKContext functions, but keep
        exported versions of same for binary compatibility.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetAlwaysUsesComplexTextCodePath):
        (WKContextSetShouldUseFontSmoothing):
        (WKContextSetAdditionalPluginsDirectory):
        (WKContextRegisterURLSchemeAsEmptyDocument):
        (WKContextSetHTTPPipeliningEnabled):
        (_WKContextSetAdditionalPluginsDirectory):
        (_WKContextRegisterURLSchemeAsEmptyDocument):
        (_WKContextSetAlwaysUsesComplexTextCodePath):
        (_WKContextSetHTTPPipeliningEnabled):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::ensureWebProcess):
        (WebKit::WebContext::setShouldUseFontSmoothing):
        (WebKit::WebContext::httpPipeliningEnabled):
        * UIProcess/WebContext.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::setShouldUseFontSmoothing):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2011-10-05  Anders Carlsson  <andersca@apple.com>

        Flash of white when unminimizing windows
        https://bugs.webkit.org/show_bug.cgi?id=69476
        <rdar://problem/10202680>

        Reviewed by Simon Fraser.

        Whenever the UI process requests an immediate backing store update, make sure to resume
        painting if it's suspended.

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

2011-10-05  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] [WK2] Support JS alert/confirm/prompt in QDesktopWebView
        https://bugs.webkit.org/show_bug.cgi?id=69274

        Reviewed by Andreas Kling.

        Use currently existing QtWidgets to provide an implementation of
        window.alert(), window.confirm() and window.prompt().

        * Shared/WebString.h:
        (WebKit::WebString::createNull):
        (WebKit::WebString::WebString):
        Add a way to create a Null WebString. RunJavaScriptPrompt will differentiate
        between empty and null strings.

        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebViewPrivate::enableMouseEvents):
        (QDesktopWebViewPrivate::disableMouseEvents):
        Create helper functions to enable and disable mouse events. This is useful for
        disabling mouse events in the WebView when we show QtWidget dialogs to avoid
        unwanted interaction with the page.

        (QDesktopWebViewPrivate::runJavaScriptAlert):
        (QDesktopWebViewPrivate::runJavaScriptConfirm):
        (QDesktopWebViewPrivate::runJavaScriptPrompt):
        (QDesktopWebView::init):
        * UIProcess/API/qt/qdesktopwebview_p.h:
        * UIProcess/qt/ClientImpl.cpp:
        (qt_wk_runJavaScriptAlert):
        (qt_wk_runJavaScriptConfirm):
        (createNullWKString):
        (qt_wk_runJavaScriptPrompt):
        * UIProcess/qt/ClientImpl.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::init):
        * UIProcess/qt/TouchViewInterface.cpp:
        (WebKit::TouchViewInterface::runJavaScriptAlert):
        (WebKit::TouchViewInterface::runJavaScriptConfirm):
        (WebKit::TouchViewInterface::runJavaScriptPrompt):
        * UIProcess/qt/TouchViewInterface.h:
        * UIProcess/qt/ViewInterface.h:

2011-10-05  Chang Shu  <cshu@webkit.org>

        [WK2] Support setMarkedText/hasMarkedText/unmarkText/insertText for WTR TextInputController
        https://bugs.webkit.org/show_bug.cgi?id=68924

        Implemented WKBundlePage private APIs to support the above functions.

        Reviewed by Darin Adler.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetComposition):
        (WKBundlePageHasComposition):
        (WKBundlePageConfirmComposition):
        (WKBundlePageConfirmCompositionWithText):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setCompositionForTesting):
        (WebKit::WebPage::hasCompositionForTesting):
        (WebKit::WebPage::confirmCompositionForTesting):
        * WebProcess/WebPage/WebPage.h:

2011-10-05  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Make built-in PDF description localizable
        https://bugs.webkit.org/show_bug.cgi?id=69442

        Reviewed by Dan Bernstein.

        * WebProcess/Plugins/PDF/BuiltInPDFView.cpp: Use a localized string instead of a literal one.

2011-10-05  Chang Shu  <cshu@webkit.org>

        [WK2] WebKitTestRunner needs LayoutTestController.dumpConfigurationForViewport
        https://bugs.webkit.org/show_bug.cgi?id=69365

        Reviewed by Darin Adler.

        Implement retrieving viewport configuration as text in WebProcess.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageViewportConfigurationAsText):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::viewportConfigurationAsText):
        * WebProcess/WebPage/WebPage.h:

2011-10-05  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt][WK2] Default directories and paths are missing for LocalStorage, Database and IconDatabase.
        https://bugs.webkit.org/show_bug.cgi?id=69111

        Reviewed by Kenneth Rohde Christiansen.

        Provide default path for LocalStorage, Database and IconDatabase using QDesktopServices.

        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::defaultDataLocation):
        (WebKit::WebContext::platformInitializeWebProcess):
        (WebKit::WebContext::platformDefaultDatabaseDirectory):
        (WebKit::WebContext::platformDefaultIconDatabasePath):
        (WebKit::WebContext::platformDefaultLocalStorageDirectory):

2011-10-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use WKRetainPtr for WK types in WebKit2 GTK+
        https://bugs.webkit.org/show_bug.cgi?id=69404

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextFinalize):
        (createDefaultWebContext):
        (webkitWebContextGetWKContext):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_load_uri):
        (webkit_web_view_load_alternate_html):

2011-10-04  Kent Tamura  <tkent@chromium.org>

        Introduce feature flags for incomplete input types
        https://bugs.webkit.org/show_bug.cgi?id=68971

        Reviewed by Hajime Morita.

        * Configurations/FeatureDefines.xcconfig:
        Add ENABLE_INPUT_TYPE_* flags. They are enabled only for iOS.

2011-10-04  Scott Graham  <scottmg@chromium.org>

        Add GAMEPAD feature flag
        https://bugs.webkit.org/show_bug.cgi?id=66859

        Reviewed by Darin Fisher.

        * Configurations/FeatureDefines.xcconfig:

2011-10-04  Ada Chan  <adachan@apple.com>

        toURLRef() in WKSharedAPICast.h should return null for a null string
        https://bugs.webkit.org/show_bug.cgi?id=69380

        Reviewed by Jon Honeycutt.

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toURLRef): Add the missing "return" for the null string case.

2011-10-04  Alexey Proskuryakov  <ap@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=67774
        PDF in a frameset is not displayed, always downloads

        Reviewed by Darin Adler.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/PDF: Added.
        Added BuiltInPDFView class. It implements ScrollableArea and Plugin, working with iframes,
        objects and embeds. The implementation targets Mac port only, fixing a WebKit2 regression.

        * UIProcess/WebContext.cpp: (WebKit::WebContext::getPlugins): Tell WebCore that there is a
        plug-in for PDF, so that it instantiates it in a regular fashion.

        * UIProcess/WebFrameProxy.cpp: (WebKit::WebFrameProxy::canShowMIMEType): We can now show
        PDF not only in main frame.

        * WebProcess/Plugins/PDF/BuiltInPDFView.cpp: Added. This is largely an implementation of
        ScrollableArea now, which can render the first page of a PDF. Further improvements to come.

        * WebProcess/Plugins/PDF/BuiltInPDFView.h: Added.

        * WebProcess/Plugins/Plugin.cpp: (WebKit::Plugin::updateControlTints): Give Plugin a chance
        to invalidate its tintable controls - it's necessary for PDF because scrollbars are tintable. 

        * WebProcess/Plugins/Plugin.h: (WebKit::Plugin::controller): Added a const version, since
        some ScrollableArea methods are const.

        * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::paint): Call updateControlTints
        at updatingControlTints phase.

        * WebProcess/Plugins/PluginView.h: PDF plug-in needs to tinker with embedding FrameView to
        use Scrollbar class, so it needs to cast its PluginController up to PluginView. It's unfortunate
        that PluginView has so much NPAPI specific code, but that's how it is now.

        * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::createPlugin): If there is no real plug-in
        installed for PDF, instantiate built-in one.

2011-10-04  Jon Lee  <jonlee@apple.com>

        REGRESSION (WK2): (Shift-)option-tabbing skips over elements when transitioning from chrome to webview
        https://bugs.webkit.org/show_bug.cgi?id=68412
        <rdar://problem/9988252>

        Reviewed by Darin Adler.

        In WK1 setInitialFocus() is called on FocusController with the key event that
        caused the web view to become first responder. In WK2 no event is sent. So if
        the key stroke that caused the change in first responder status contains the
        option modifier key, FocusController did not know that it had to switch behavior.

        Because there are multiple ways that the WKView can becomeFirstResponder, I changed
        the signature to setInitialFocus to express whether the key event parameter is an
        actual key event.

        * UIProcess/API/C/win/WKView.cpp:
        (WKViewSetInitialFocus):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView becomeFirstResponder]): Take the NSApp currentEvent and pass it along if
        the event is a keyboard event, otherwise pass an empty event.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setInitialFocus): Change in function signature to confirm that
        the event that caused the initial focus was a keyboard event, and provide the keyboard
        event itself.
        * UIProcess/WebPageProxy.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::setInitialFocus):
        * UIProcess/win/WebView.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setInitialFocus): If we know that the cause of this was a keyboard
        event, we pass that event to the FocusController. Otherwise we fall back to the original
        behavior, which is to pass no event at all.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2011-10-04  Jeff Miller  <jeffm@apple.com>

        WKPreferences should allow control of application chrome mode
        https://bugs.webkit.org/show_bug.cgi?id=69344

        Reviewed by Dan Bernstein.

        * Shared/WebPreferencesStore.h: Add application chrome mode setting to FOR_EACH_WEBKIT_BOOL_PREFERENCE().

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetApplicationChromeModeEnabled): Added.
        (WKPreferencesGetApplicationChromeModeEnabled): Added.

        * UIProcess/API/C/WKPreferencesPrivate.h: Added WKPreferencesSetApplicationChromeModeEnabled() and WKPreferencesGetApplicationChromeModeEnabled().

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Set application chrome mode setting.

2011-10-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement default error pages in WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=69255

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitError.cpp:
        (webkit_policy_error_quark): Add quark for policy errors.
        (webkit_plugin_error_quark): Add quark for plugin errors.
        * UIProcess/API/gtk/WebKitError.h: Add policy and plugin errors.
        * UIProcess/API/gtk/WebKitWebLoaderClient.cpp:
        (webkitWebLoaderClientLoadFailed): Load a custom error page when
        load failed and signal has not been handled.
        (webkit_web_loader_client_class_init): Add default implementation
        for provisional_load_failed and load_failed virtual methods.

2011-10-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add webkit_web_view_load_alternate_html() to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=69254

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_load_alternate_html):
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/tests/testloading.c:
        (loadAlternateContentLoadFinished):
        (loadAlternateContentLoadFailed):
        (testLoadAlternateContent):
        (main):

2011-10-03  Jon Lee  <jonlee@apple.com>

        Extend DOM WheelEvent to differentiate between physical and logical scroll directions
        https://bugs.webkit.org/show_bug.cgi?id=68959
        <rdar://problem/10036688>

        Reviewed by Sam Weinig.

        * Shared/WebEvent.h:
        (WebKit::WebWheelEvent::directionInvertedFromDevice):
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformWheelEvent::WebKit2PlatformWheelEvent):
        * Shared/WebWheelEvent.cpp:
        (WebKit::WebWheelEvent::WebWheelEvent):
        (WebKit::WebWheelEvent::encode):
        (WebKit::WebWheelEvent::decode):
        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::createWebWheelEvent): get the flag from the NSEvent.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::coalesce):

2011-10-04  Nayan Kumar K  <nayankk@motorola.com>

        [WebKit2][gtk] Generate gtk-doc for WebKit2-GTK.
        https://bugs.webkit.org/show_bug.cgi?id=69325

        Reviewed by Gustavo Noronha Silva.

        Documentation generation for WebKit2-GTK+ APIs
        using gtk-doc.

        * GNUmakefile.am: Added doc generation files to EXTRA_DIST.
        * UIProcess/API/gtk/docs/GNUmakefile.am: Makefile for doc generation.
        * UIProcess/API/gtk/docs/version.xml.in: Version information.
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Document template.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Document sections added.
        * UIProcess/API/gtk/docs/webkit2gtk.types: Added GObjects types.

2011-10-04  Nayan Kumar K  <nayankk@motorola.com>

        [WebKit2][gtk] Fix warnings while generating documentation using gtk-doc.
        https://bugs.webkit.org/show_bug.cgi?id=69329

        Reviewed by Martin Robinson.

        Added documentation for WebKitNetworkError enum and corrected few other
        minor issues in WebKit2-GTK+ API documentation.

        * UIProcess/API/gtk/WebKitError.h: Added documentation for WebKitNetworkError.
        * UIProcess/API/gtk/WebKitWebLoaderClient.cpp:
        (webkit_web_loader_client_class_init): Corrected parameter name.
        * UIProcess/API/gtk/WebKitWebView.cpp: Corrected annotation.

2011-10-04  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Remove http/tests/inspector/network/disabled-cache-crash.html.
        https://bugs.webkit.org/show_bug.cgi?id=69332

        Reviewed by Pavel Feldman.

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

2011-10-03  Anders Carlsson  <andersca@apple.com>

        Content area does not return to the correct position after rubberbanding
        https://bugs.webkit.org/show_bug.cgi?id=69302
        <rdar://problem/10102886>

        Reviewed by Sam Weinig.

        Make sure to schedule a display after adding to the dirty region.

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

2011-10-03  Anders Carlsson  <andersca@apple.com>

        Remove custom scrollbar painting hooks
        https://bugs.webkit.org/show_bug.cgi?id=69163

        Remove overridden ChromeClient member functions.

        Reviewed by Alexey Proskuryakov.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2011-10-03  Jer Noble  <jer.noble@apple.com>

        Unreviewed, rolling out r96526.
        http://trac.webkit.org/changeset/96526
        https://bugs.webkit.org/show_bug.cgi?id=68587

        WEB_AUDIO has numerous 64->32 bit casting warnings, causing
        build breakages where -Wall is enabled.

        * Configurations/FeatureDefines.xcconfig:

2011-10-03  Jer Noble  <jer.noble@apple.com>

        Enable WEB_AUDIO by default in the WebKit/mac port.
        https://bugs.webkit.org/show_bug.cgi?id=68587

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2011-10-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add failing uri parameter to provisional-load-failed and load-failed signals
        https://bugs.webkit.org/show_bug.cgi?id=69252

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebLoaderClient.cpp:
        (didFailProvisionalLoadWithErrorForFrame): Pass failing URL to
        signal handler.
        (didFailLoadWithErrorForFrame): Ditto.
        (webkit_web_loader_client_class_init): Add failing URL parameter
        to provisional-load-failed and load-failed signals.
        * UIProcess/API/gtk/WebKitWebLoaderClient.h:
        * UIProcess/API/gtk/tests/testloading.c:
        (loadStatusProvisionalLoadFailed): Update to API changes.
        (loadStatusLoadFailed): Ditto.
        (loadErrorProvisionalLoadFailed): Ditto.
        * UIProcess/API/gtk/webkit2marshal.list:

2011-10-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix memory leak when loading url
        https://bugs.webkit.org/show_bug.cgi?id=69247

        Reviewed by Martin Robinson.

        Release URL created with WKURLCreateWithUTF8CString().

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_load_uri):

2011-10-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [UNIX] Rename NetscapePluginModule::pluginInfo to NetscapePluginModule::getPluginInfoForLoadedPlugin()
        https://bugs.webkit.org/show_bug.cgi?id=69147

        Reviewed by Martin Robinson.

        * Shared/Plugins/Netscape/NetscapePluginModule.h:
        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::NetscapePluginModule::getPluginInfoForLoadedPlugin):
        (WebKit::NetscapePluginModule::getPluginInfo):

2011-10-03  Zeno Albisser  <zeno.albisser@nokia.com>

        [Qt][WebKit2][Mac] WebProcess should exit automatically when UIProcess dies.
        https://bugs.webkit.org/show_bug.cgi?id=68439

        We use a dispatch queue and a dispatch source in the WebProcess
        to receive a notification when the UI Process dies.
        The WebProcess then commits suicide.

        Reviewed by Andreas Kling.

        * WebProcess/qt/WebProcessQt.cpp:
        (WebKit::parentProcessDiedCallback):
        (WebKit::WebProcess::platformInitializeWebProcess):

2011-10-02  Zeno Albisser  <zeno.albisser@nokia.com>

        [Qt][WK2][Mac] WebKit2 does not build on mac after merge of Qt5 refactor branch.
        https://bugs.webkit.org/show_bug.cgi?id=69223

        After the merge of the Qt5 refactor branch, networking stuff has been
        extracted into a separate library. The qmlplugin needs to link to that
        library to get QNetworkReply defined.

        Reviewed by Noam Rosenthal.

        * UIProcess/API/qt/qmlplugin/qmlplugin.pro:

2011-10-01  Geoffrey Garen  <ggaren@apple.com>

        Removed redundant helper functions for allocating Strong handles
        https://bugs.webkit.org/show_bug.cgi?id=69218

        Reviewed by Sam Weinig.

        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:

2011-09-30  Sam Weinig  <sam@webkit.org>

        Add support for eventSender.mouseScrollBy in WTR
        https://bugs.webkit.org/show_bug.cgi?id=69189

        Reviewed by Simon Fraser.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleWheelEvent):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::wheelEventSyncForTesting):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Add sync version of wheel event handling for use in testing.

2011-09-30  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] Add missing include for QMimeData
        https://bugs.webkit.org/show_bug.cgi?id=69178

        Reviewed by Tor Arne Vestbø.

        This was implicitly included by other headers, but due to changes in
        Qt5 we need to include explicitly.

        * UIProcess/qt/QtWebPageProxy.cpp:
        * WebProcess/WebPage/WebPage.cpp:

2011-09-30  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Prevent qDebug() output from DRT and WTR unless --verbose

        For DRT we didn't install the message handler early enough to
        catch output while constructing the QApplication. For WTR we
        didn't even install a message handler.

        Since the UI process will forward any output from the web process
        we set an environment variable QT_WEBKIT_SUPPRESS_WEB_PROCESS_OUTPUT
        in WTR before the web process is started. This is picked up by the
        web process which installs its own message handler.

        The environment variable can be overriden on the command line if you
        want to see output from the web process, or you can pass --verbose to
        WTR to see output from both processes.

        https://bugs.webkit.org/show_bug.cgi?id=69132

        Reviewed by Andreas Kling.

        * WebProcess/qt/WebProcessMainQt.cpp:

2011-09-30  Anders Carlsson  <andersca@apple.com>

        Remove didCompleteRubberBandForMainFrame UIClient callback
        https://bugs.webkit.org/show_bug.cgi?id=69161

        Reviewed by Adam Roben.

        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebUIClient.cpp:
        * UIProcess/WebUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::didCompleteRubberBandForFrame):

2011-09-30  Qi Zhang  <qi.2.zhang@nokia.com>

        WebKitTestRunner needs layoutTestController.setAppCacheMaximumSize
        https://bugs.webkit.org/show_bug.cgi?id=42698

        Reviewed by Andreas Kling.

        Implemented layoutTestController.setAppCacheMaximumSize and layoutTestController.clearApplicationCache,
        and call clearApplicationCache when layoutTest start up.

        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp:
        (WebKit::WebApplicationCacheManager::setAppCacheMaximumSize):
        * WebProcess/ApplicationCache/WebApplicationCacheManager.h:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleClearApplicationCache):
        (WKBundleSetAppCacheMaximumSize):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::clearApplicationCache):
        (WebKit::InjectedBundle::setAppCacheMaximumSize):
        * WebProcess/InjectedBundle/InjectedBundle.h:

2011-09-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [UNIX] Add a method to get information for an already loaded plugin module
        https://bugs.webkit.org/show_bug.cgi?id=69139

        Reviewed by Martin Robinson.

        * Shared/Plugins/Netscape/NetscapePluginModule.h: Add pluginInfo().
        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::NetscapePluginModule::pluginInfo): Private method to get
        the plugin information from the module, it must be called when the
        module has been already initialized.
        (WebKit::NetscapePluginModule::getPluginInfo): Use pluginInfo() to
        get information of the plugin module for the given path.

2011-09-30  Zeno Albisser  <zeno.albisser@nokia.com>

        [Qt][WK2] Event delivery in QDesktopWebView is broken after merge of Qt5 refactor
        https://bugs.webkit.org/show_bug.cgi?id=69105

        This changes QDesktopWebView and QDesktopWebPageProxy to use QMouseEvent instead
        of QGraphicsSceneMouseEvent.
        Further it removes an endless loop introduced by the QSGItem::event() function
        delivering inputMethodEvents but no other events.

        Reviewed by Andreas Kling.

        * Shared/NativeWebMouseEvent.h:
        (WebKit::NativeWebMouseEvent::nativeEvent):
        * Shared/NativeWebWheelEvent.h:
        (WebKit::NativeWebWheelEvent::nativeEvent):
        * Shared/qt/NativeWebMouseEventQt.cpp:
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent):
        * Shared/qt/NativeWebWheelEventQt.cpp:
        (WebKit::NativeWebWheelEvent::NativeWebWheelEvent):
        * Shared/qt/WebEventFactoryQt.cpp:
        (WebKit::mouseButtonForEvent):
        (WebKit::webEventTypeForEvent):
        (WebKit::WebEventFactory::createWebMouseEvent):
        (WebKit::WebEventFactory::createWebWheelEvent):
        * Shared/qt/WebEventFactoryQt.h:
        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebView::mousePressEvent):
        (QDesktopWebView::mouseMoveEvent):
        (QDesktopWebView::mouseReleaseEvent):
        (QDesktopWebView::mouseDoubleClickEvent):
        (QDesktopWebView::wheelEvent):
        (QDesktopWebView::event):
        * UIProcess/API/qt/qdesktopwebview.h:
        * UIProcess/qt/qdesktopwebpageproxy.cpp:
        (QDesktopWebPageProxy::handleEvent):
        (QDesktopWebPageProxy::handleMouseMoveEvent):
        (QDesktopWebPageProxy::handleMousePressEvent):
        (QDesktopWebPageProxy::handleMouseReleaseEvent):
        (QDesktopWebPageProxy::handleMouseDoubleClickEvent):
        (QDesktopWebPageProxy::handleWheelEvent):
        (QDesktopWebPageProxy::handleHoverMoveEvent):
        * UIProcess/qt/qdesktopwebpageproxy.h:

2011-09-29  Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com>

        Initial implementation of WebInspector for WebKit2 GTK port.
        https://bugs.webkit.org/show_bug.cgi?id=68235

        Reviewed by Martin Robinson.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::WebInspectorProxy): Initialize the native window handles of GTK.
        * UIProcess/WebInspectorProxy.h: Add native window handle for inspector window.
        * UIProcess/gtk/WebInspectorGtk.cpp:
        (WebKit::inspectorFilesBasePath): Base folder for inspector resources.
        (WebKit::inspectorWindowDestroyed): Invoked when inspector window is closed by user.
        (WebKit::WebInspectorProxy::windowDestroyed): Resets the native handles to 0 when user closes the window.
        (WebKit::WebInspectorProxy::platformCreateInspectorPage): Create the WebView for inspector.
        (WebKit::WebInspectorProxy::platformOpen): Create the window for inspector.
        (WebKit::WebInspectorProxy::platformDidClose): Close both WebView & window of inspector.
        (WebKit::WebInspectorProxy::platformInspectedURLChanged): Update the title of inspector window.
        (WebKit::WebInspectorProxy::inspectorPageURL): Return the absolute URL of inspector.html.
        (WebKit::WebInspectorProxy::inspectorBaseURL): Return the location where inspector resources are present.
        WebProcess is given read access to this folder only for loading file URLs by sandboxed extension.

2011-09-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix build against Qt5 after refactor of widgets out of QtGUi

        QWidget and friends now live in the QtWidgets library. We update
        includes in implementation files and private headers to us the
        non-module-prefixed path, and leave the lookup for the include
        path. For public headers we have to ifdef the includes as the
        user might now have the modules we need in his QT config.

        Finally, QSGCanvas is no longer a QWidget but a QWindow, so we
        have to update our code and use windowHandle() for setting the
        parent relationships.

        https://bugs.webkit.org/show_bug.cgi?id=68687

        Reviewed by Andreas Kling.

        * UIProcess/API/qt/qdesktopwebview.cpp:
        * UIProcess/API/qt/qdesktopwebview.h:
        * UIProcess/API/qt/tests/tests.pro:
        * UIProcess/qt/ViewInterface.h:
        * UIProcess/qt/WebPopupMenuProxyQtDesktop.cpp:

2011-09-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Force single header include in WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=69084

        Reviewed by Martin Robinson.

        Only <webkit2/webkit2.h> will be allowed for API users.

        * GNUmakefile.am:
        * UIProcess/API/gtk/WebKitError.h:
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/WebKitWebLoaderClient.h:
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/WebKitWebViewBase.h:
        * UIProcess/API/gtk/webkit2.h:

2011-09-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Explicitly call destructors for objects initialized with placement new syntax
        https://bugs.webkit.org/show_bug.cgi?id=69079

        Reviewed by Xan Lopez.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextFinalize): Call ~WebKitWebContextPrivate().
        * UIProcess/API/gtk/WebKitWebLoaderClient.cpp:
        (webkitWebLoaderClientFinalize): Call ~WebKitWebLoaderClient().
        (webkit_web_loader_client_class_init):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewFinalize): Call ~WebKitWebViewPrivate().
        (webkit_web_view_class_init):

2011-09-28  Martin Robinson  <mrobinson@igalia.com>

        Fix the WebGL build on WebKit2 GTK+.

        * GNUmakefile.am: Add OPENGL_LIBS to WebKit2 targets.

2011-09-28  Brent Fulgham  <bfulgham@webkit.org>

        WinCairo build fix.

        * WebProcess/WebPage/WebFrame.h: Add include of <wtc/RetainPtr.h>

2011-09-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        One more shot at fixing GTK+, this seems to make the dependencies
        work.

        * GNUmakefile.am:

2011-09-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        GTK+ build fix 3 - the return of the marshal.

        * GNUmakefile.am:

2011-09-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        Second try at fixing the GTK+ build.

        * GNUmakefile.am:

2011-09-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        Try to fix GTK+ build.

        * GNUmakefile.am:

2011-09-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix webkit2 unit tests in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=69006

        Reviewed by Martin Robinson.

        We are currently using the WorQueue name as thread name which in
        this moment can be com.apple.WebKit.ProcessLauncher or
        com.apple.CoreIPC.ReceiveQueue. Both names are longer than 31
        characters which is the limit of Visual Studio for thread
        names. When log is enabled createThread() will assert instead of
        truncate the name, so we need to make sure we don't use a name
        longer than 31 characters.

        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::platformInitialize):

2011-09-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Loader client implementation for WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=68085

        Reviewed by Martin Robinson.

        Adds a new object, WebKitWebLoaderClient, that emits signals for
        every page loader callback.

        * GNUmakefile.am: Add new files to compilation.
        * UIProcess/API/gtk/WebKitWebLoaderClient.cpp: Added.
        (didStartProvisionalLoadForFrame):
        (didReceiveServerRedirectForProvisionalLoadForFrame):
        (didFailProvisionalLoadWithErrorForFrame):
        (didCommitLoadForFrame):
        (didFinishLoadForFrame):
        (didFailLoadWithErrorForFrame):
        (webkitWebLoaderClientConstructed):
        (webkitWebLoaderClientSetProperty):
        (webkitWebLoaderClientGetProperty):
        (webkit_web_loader_client_init):
        (webkit_web_loader_client_class_init):
        * UIProcess/API/gtk/WebKitWebLoaderClient.h: Added.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewConstructed): Create the loader client for the view.
        (webkit_web_view_init):
        (webkit_web_view_get_loader_client): Get the current loader client.
        (webkit_web_view_set_loader_client): Set a new loader client.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/tests/testloading.c: Added.
        (serverCallback):
        (webLoadingFixtureSetup):
        (webLoadingFixtureTeardown):
        (getURIForPath):
        (loadStatusProvisionalLoadStarted):
        (loadStatusProvisionalLoadReceivedServerRedirect):
        (loadStatusProvisionalLoadFailed):
        (loadStatusLoadCommitted):
        (loadStatusLoadFinished):
        (loadStatusLoadFailed):
        (testLoadingStatus):
        (loadErrorProvisionalLoadStarted):
        (loadErrorProvisionalLoadFailed):
        (loadErrorLoadFinished):
        (testLoadingError):
        (main):
        * UIProcess/API/gtk/webkit2marshal.list: Added.

2011-09-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add WebKitError to GTK+ WebKit2 API
        https://bugs.webkit.org/show_bug.cgi?id=68508

        Reviewed by Martin Robinson.

        Add WebKitNetworkError enum to define network errors.

        * GNUmakefile.am: Add new files to compilation.
        * UIProcess/API/gtk/WebKitError.cpp: Added.
        (webkit_network_error_quark):
        * UIProcess/API/gtk/WebKitError.h:
        * UIProcess/API/gtk/WebKitPrivate.h: Add
        COMPILE_ASSERT_MATCHING_ENUM macro.
        * UIProcess/API/gtk/webkit2.h: Add WebKitError.h and
        WebKitEnumTypes.h

2011-09-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix Programs/unittests/webkit2/testwebview
        https://bugs.webkit.org/show_bug.cgi?id=68993

        Reviewed by Philippe Normand.

        * GNUmakefile.am: Add -DWEBKIT_EXEC_PATH.
        * UIProcess/API/gtk/tests/testwebview.c:
        (main): Get WebProcess path from WEBKIT_EXEC_PATH environment
        variable.

2011-09-27  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add static version of JSCell::getCallData
        https://bugs.webkit.org/show_bug.cgi?id=68741

        Reviewed by Darin Adler.

        In this patch we just extract the bodies of the virtual getCallData methods
        throughout the JSCell inheritance hierarchy out into static methods, which are 
        now called from the virtual methods.  This is an intermediate step in trying to 
        move the virtual-ness of getCallData into our own method table stored in 
        ClassInfo.  We need to convert the methods to static methods because static methods 
        can be represented as function pointers rather than pointers to member functions, and
        function pointers are smaller and faster to call than pointers to member functions.

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

2011-09-27  Gopal Raghavan  <gopal.1.raghavan@nokia.com>

        [Qt] QDesktopWebView load zero size view test missing
        https://bugs.webkit.org/show_bug.cgi?id=68655

        Reviewed by Chang Shu.

        Added test case to check load behavior with zero size view.

        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_loadZeroSizeView.qml: Added.
        * UIProcess/API/qt/tests/qmltests/qmltests.pro:

2011-09-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use WebKitWebContext in WebKitWebView
        https://bugs.webkit.org/show_bug.cgi?id=67990

        Reviewed by Martin Robinson.

        Use webkit_web_context_get_default() instead of
        WKContextGetSharedProcessContext() and add API to create a view
        with a given web context and to return the current context
        associated to the view.

        * GNUmakefile.am: Add new files to compilation.
        * UIProcess/API/gtk/WebKitPrivate.h: Added.
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextGetWKContext): Private API to get the WKContext
        wrapped by the WebKitWebContext.
        * UIProcess/API/gtk/WebKitWebContextPrivate.h: Added.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewConstructed): Create the webpage using the web
        context of the view.
        (webkitWebViewSetProperty):
        (webkitWebViewGetProperty):
        (webkit_web_view_init):
        (webkit_web_view_class_init):
        (webkit_web_view_new): Create a new view with the default context.
        (webkit_web_view_new_with_context): Create a new view with the
        given context.
        (webkit_web_view_get_context): Return the context.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/tests/testwebview.c: Added.
        (testWebViewDefaultContext):
        (main):

2011-09-27  Carlos Garcia Campos  <cgarcia@igalia.com>


        [GTK] Add WebKitWebContext to GTK API
        https://bugs.webkit.org/show_bug.cgi?id=67931

        Reviewed by Philippe Normand.

        Initial implementation of WebKitWebContext for WebKit2 GTK API.

        * GNUmakefile.am: Add new files to compilation.
        * UIProcess/API/gtk/WebKitWebContext.cpp: Added.
        (webkitWebContextFinalize):
        (webkit_web_context_init):
        (webkit_web_context_class_init):
        (createDefaultWebContext):
        (webkit_web_context_get_default):
        * UIProcess/API/gtk/WebKitWebContext.h: Added.
        * UIProcess/API/gtk/tests/testwebcontext.c:
        (testWebContextDefault):
        (main):
        * UIProcess/API/gtk/webkit2.h: Add <webkit2/WebKitWebContext.h>.

2011-09-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r96108, r96111, r96113, and r96116.
        http://trac.webkit.org/changeset/96108
        http://trac.webkit.org/changeset/96111
        http://trac.webkit.org/changeset/96113
        http://trac.webkit.org/changeset/96116
        https://bugs.webkit.org/show_bug.cgi?id=68913

        Wait for working Qt5 (Requested by ossy on #webkit).

        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebViewPrivate::startDrag):
        (QDesktopWebViewPrivate::didChangeToolTip):
        (QDesktopWebViewPrivate::didChangeCursor):
        (QDesktopWebViewPrivate::showContextMenu):
        (QDesktopWebViewPrivate::chooseFiles):
        * UIProcess/API/qt/qdesktopwebview.h:
        * UIProcess/API/qt/tests/tests.pri:
        * UIProcess/API/qt/tests/tests.pro:
        * UIProcess/qt/ViewInterface.h:
        * UIProcess/qt/WebPopupMenuProxyQtDesktop.cpp:
        (WebKit::WebPopupMenuProxyQtDesktop::WebPopupMenuProxyQtDesktop):

2011-09-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Rename WebKit2 GTK+ API main header as webkit2.h
        https://bugs.webkit.org/show_bug.cgi?id=65178

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Add webkit2.h.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/webkit2.h: Renamed from Source/WebKit2/UIProcess/API/gtk/webkit/webkit.h.
        * webkit2gtk.pc.in: Use webkitgtk-<api-version> as include dir.

2011-09-27  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix build of WebKit2 unit-tests after r96108

        Reviewed by Andreas Kling.

        * UIProcess/API/qt/tests/tests.pri:

2011-09-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix build against Qt5 after refactor of widgets out of QtGUi

        QWidget and friends now live in the QtWidgets library. We update
        includes in implementation files and private headers to us the
        non-module-prefixed path, and leave the lookup for the include
        path. For public headers we have to ifdef the includes as the
        user might now have the modules we need in his QT config.

        Finally, QSGCanvas is no longer a QWidget but a QWindow, so we
        have to update our code and use windowHandle() for setting the
        parent relationships.

        https://bugs.webkit.org/show_bug.cgi?id=68687

        Reviewed by Andreas Kling.

        * UIProcess/API/qt/qdesktopwebview.cpp:
        * UIProcess/API/qt/qdesktopwebview.h:
        * UIProcess/API/qt/tests/tests.pro:
        * UIProcess/qt/ViewInterface.h:
        * UIProcess/qt/WebPopupMenuProxyQtDesktop.cpp:

2011-09-26  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt][WK2] Add support for hover API in Qt WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=68369

        Reviewed by Andreas Kling.

        Based on the patch from Igor Oliveira in the same bug.

        Expose a linkHovered() signal in QDesktopWebView, that passes the QUrl and the
        QString corresponding to the link title. I left textContent out because was
        unsure of its use case.

        In QDesktopWebView we store the last URL and title emitted to make sure we send
        the signal only if either value changes. Tests were added to the QML element to
        check: if values are correctly emitted and if we don't emit more signals than
        necessary.

        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebViewPrivate::didMouseMoveOverElement):
        * UIProcess/API/qt/qdesktopwebview.h:
        * UIProcess/API/qt/qdesktopwebview_p.h:
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_linkHovered.qml: Added.
        * UIProcess/API/qt/tests/qmltests/common/test2.html:
        * UIProcess/API/qt/tests/qmltests/qmltests.pro:
        * UIProcess/qt/ClientImpl.cpp:
        (qt_wk_mouseDidMoveOverElement):
        * UIProcess/qt/ClientImpl.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::init):
        * UIProcess/qt/TouchViewInterface.h:
        (WebKit::TouchViewInterface::didMouseMoveOverElement):
        * UIProcess/qt/ViewInterface.h:

2011-09-27  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt][WK2] API fixes for QML, the signal parameters needs to be named.
        https://bugs.webkit.org/show_bug.cgi?id=68889

        Reviewed by Andreas Kling.

        Signal parameters needs to be explicitly named in QML to be accessible.
        This patch fix this problem.

        * UIProcess/API/qt/qdesktopwebview.h:
        * UIProcess/API/qt/qtouchwebpage.h:

2011-09-27  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt][WK2] Mark FINAL properties which can't be overridden by a subclass.
        https://bugs.webkit.org/show_bug.cgi?id=68848

        Reviewed by Andreas Kling.

        The presence of the FINAL attribute indicates that the property will not be 
        overridden by a derived class. This can be used for performance optimizations
        by QML.

        * UIProcess/API/qt/qdesktopwebview.h:
        * UIProcess/API/qt/qtouchwebpage.h:
        * UIProcess/API/qt/qtouchwebview.h:
        * UIProcess/API/qt/qwebnavigationcontroller.h:

2011-09-26  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] Fix WK2 build after r96014
        https://bugs.webkit.org/show_bug.cgi?id=68856

        Reviewed by Gustavo Noronha Silva.

        Commit r96014 added inspectorBaseURL for Qt but removed
        inspectorPageURL, adding it back.

        * UIProcess/qt/WebInspectorProxyQt.cpp:
        (WebKit::WebInspectorProxy::inspectorPageURL):

2011-09-26  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] [WK2] Fix build after r95982
        https://bugs.webkit.org/show_bug.cgi?id=68842

        Reviewed by Anders Carlsson.

        The patch in r95982 removed the paint() function, because it was doing
        nothing (in both implementations). This patch remove the call we had
        for it to fix the build.

        * UIProcess/qt/qtouchwebpageproxy.cpp:
        (QTouchWebPageProxy::paintContent):

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

        REGRESSION (r95747): Activating the web inspector causes the web process to be killed
        https://bugs.webkit.org/show_bug.cgi?id=68762

        Reviewed by Anders Carlsson.

        * UIProcess/WebInspectorProxy.cpp: (WebKit::WebInspectorProxy::createInspectorPage):
        Tell Web process that loading resources from WebCore resources directory is OK.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadHTMLString):
        (WebKit::WebPageProxy::loadAlternateHTMLString):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::assumeReadAccessToBaseURL):
        * UIProcess/WebProcessProxy.h:
        Renamed willLoadHTMLStringWithBaseURL to more generic assumeReadAccessToBaseURL.

        * UIProcess/WebInspectorProxy.h:
        * UIProcess/efl/WebInspectorEfl.cpp:
        (WebKit::WebInspectorProxy::inspectorBaseURL):
        * UIProcess/gtk/WebInspectorGtk.cpp:
        (WebKit::WebInspectorProxy::inspectorBaseURL):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::inspectorBaseURL):
        * UIProcess/qt/WebInspectorProxyQt.cpp:
        (WebKit::WebInspectorProxy::inspectorBaseURL):
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::inspectorBaseURL):
        Report what base directory Inspector has access to.

2011-09-26  Nayan Kumar K  <nayankk@motorola.com>

        Added WKHitTestResult API's.

        WKHitTestResult API's are added. These API's can be used to
        get the hover'ed link/image/media URL as well as link lable and
        title.
        https://bugs.webkit.org/show_bug.cgi?id=68426

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * UIProcess/API/C/WKHitTestResult.cpp: Added.
        (WKHitTestResultGetTypeID):
        (WKHitTestResultCopyAbsoluteImageURL):
        (WKHitTestResultCopyAbsoluteLinkURL):
        (WKHitTestResultCopyAbsoluteMediaURL):
        (WKHitTestResultCopyLinkLabel):
        (WKHitTestResultCopyLinkTitle):
        * UIProcess/API/C/WKHitTestResult.h: Added.
        * UIProcess/API/C/WebKit2.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebKit2API.pri:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:

2011-09-26  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][WK2]Unreviewed speculative buildfix after r95968.

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

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

        Remove an old DrawingAreaProxy::paint member function
        https://bugs.webkit.org/show_bug.cgi?id=68825

        Reviewed by Dan Bernstein.

        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/TiledDrawingAreaProxy.cpp:
        * UIProcess/TiledDrawingAreaProxy.h:

2011-09-26  Jer Noble  <jer.noble@apple.com>

        White flash when entering full-screen using element.webkitRequestFullScreen()
        https://bugs.webkit.org/show_bug.cgi?id=68481

        Reviewed by Simon Fraser.

        Do not re-enable screen updates after exiting compositing mode until a repaint has completed.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController exitAcceleratedCompositingMode]):
        (continueExitCompositingModeAfterRepaintCallback):
        (-[WKFullScreenWindowController _continueExitCompositingModeAfterRepaint]):

2011-09-23  Simon Fraser  <simon.fraser@apple.com>

        Repaint tests don't work in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=68453

        Reviewed by Sam Weinig.
        
        Expose WKBundlePage methods to turn on repaint rect tracking
        in WebKit2, for WebKitTestRunner.
        
        As part of the change, expose utility methods on WebPage
        to get the main Frame and FrameView, which required renaming
        the exisiting method that returns a WebFrame. Fix callers
        of that method to handle null when necessary.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageGetMainFrame):
        (WKBundlePageSetTracksRepaints):
        (WKBundlePageIsTrackingRepaints):
        (WKBundlePageResetTrackedRepaints):
        (WKBundlePageCopyTrackedRepaintRects):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::findLargestFrameInFrameSet):
        (WebKit::WebChromeClient::closeWindowSoon):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidFirstLayout):
        (WebKit::WebFrameLoaderClient::dispatchDidLayout):
        (WebKit::WebFrameLoaderClient::frameLoadCompleted):
        (WebKit::WebFrameLoaderClient::restoreViewState):
        (WebKit::WebFrameLoaderClient::provisionalLoadStarted):
        (WebKit::WebFrameLoaderClient::transitionToCommittedFromCachedFrame):
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        (WebKit::WebFrameLoaderClient::createPlugin):
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::documentFragmentFromAttributedString):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::isMainFrame):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setTracksRepaints):
        (WebKit::WebPage::isTrackingRepaints):
        (WebKit::WebPage::resetTrackedRepaints):
        (WebKit::WebPage::trackedRepaintRects):
        (WebKit::WebPage::clearMainFrameName):
        (WebKit::WebPage::layoutIfNeeded):
        (WebKit::WebPage::mainFrameHasCustomRepresentation):
        (WebKit::WebPage::mainFrame):
        (WebKit::WebPage::mainFrameView):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::mainWebFrame):
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObject.mm:
        (-[WKAccessibilityWebPageObject accessibilityHitTest:]):

2011-09-25  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add custom vtable struct to ClassInfo struct
        https://bugs.webkit.org/show_bug.cgi?id=68567

        Reviewed by Oliver Hunt.

        Added CREATE_METHOD_TABLE macro to generate the custom vtable for the 
        specified class in its ClassInfo.  Also added to it the first function to use 
        this macro, visitChildren.  This is part of the process of getting rid of all 
        C++ virtual methods in JSCell.  Eventually all virtual functions in JSCell 
        that can't easily be converted to non-virtual functions will be put into 
        this custom vtable structure.

        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:

2011-09-25  Adam Barth  <abarth@webkit.org>

        Finish removing PLATFORM(BREWMP) by removing associated code
        https://bugs.webkit.org/show_bug.cgi?id=68779

        Reviewed by Sam Weinig.

        * Scripts/generate-forwarding-headers.pl:

2011-09-25  Adam Barth  <abarth@webkit.org>

        Remove PLATFORM(HAIKU) and associated code
        https://bugs.webkit.org/show_bug.cgi?id=68774

        Reviewed by Sam Weinig.

        * Scripts/generate-forwarding-headers.pl:

2011-09-24  Adam Barth  <abarth@webkit.org>

        Always enable ENABLE(OFFLINE_WEB_APPLICATIONS)
        https://bugs.webkit.org/show_bug.cgi?id=68767

        Reviewed by Eric Seidel.

        * Configurations/FeatureDefines.xcconfig:
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::applicationCacheDirectory):
        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp:
        (WebKit::WebApplicationCacheManager::getApplicationCacheOrigins):
        (WebKit::WebApplicationCacheManager::deleteEntriesForOrigin):
        (WebKit::WebApplicationCacheManager::deleteAllEntries):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::clearApplicationCache):
        * WebProcess/WebProcess.h:

2011-09-23  Adam Klein  <adamk@chromium.org>

        Add ENABLE_MUTATION_OBSERVERS feature flag
        https://bugs.webkit.org/show_bug.cgi?id=68732

        Reviewed by Ojan Vafai.

        This flag will guard an implementation of the "Mutation Observers" proposed in
        http://lists.w3.org/Archives/Public/public-webapps/2011JulSep/1622.html

        * Configurations/FeatureDefines.xcconfig:

2011-09-23  Varun Jain  <varunjain@google.com>

        Refactor WebViewImpl::scrollFocusedNodeIntoRect to a better place and add tests 
        https://bugs.webkit.org/show_bug.cgi?id=68198

        Reviewed by Dimitri Glazkov.

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

2011-09-23  Chang Shu  <cshu@webkit.org>

        [WK2] [Qt] Implement MouseDown/MouseUp/MouseMoveTo functions for WebKit2 EventSender
        https://bugs.webkit.org/show_bug.cgi?id=68556

        Implement the MouseDown/MouseUp/MouseMoveTo functions on Qt platform.

        Reviewed by Darin Adler.

        * Shared/API/c/WKGeometry.h:
        (operator==):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mouseEventSyncForTesting): initialize "handled"

2011-09-23  Anders Carlsson  <andersca@apple.com>

        Move WebHitTestResult files to Shared/ in the Xcode project
        https://bugs.webkit.org/show_bug.cgi?id=68718

        Reviewed by Sam Weinig.

        * WebKit2.xcodeproj/project.pbxproj:

2011-09-23  Anders Carlsson  <andersca@apple.com>

        Add OVERRIDE to overrides of virtual member functions in client classes
        https://bugs.webkit.org/show_bug.cgi?id=68702

        Reviewed by Darin Adler.

        Disable the warning in Xcode and VS2005 for using override and final when compiling as C++98,
        and remove WebEditorClient::isEditable, WebChromeClient::formDidFocus,
        WebChromeClient::formDidBlur and WebFrameLoaderClient::dispatchDidLoadResourceByXMLHttpRequest since
        they have been removed from their respective base classes.
        
        * Configurations/Base.xcconfig:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebContextMenuClient.h:
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:
        * WebProcess/WebCoreSupport/WebDragClient.h:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebCoreSupport/WebGeolocationClient.h:
        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebCoreSupport/WebPopupMenu.h:
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.h:
        * win/WebKit2Common.vsprops:

2011-09-23  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt][WK2] QtFileDownloader ctor shouldn't call QtFileDownloader::onReadyRead()
        https://bugs.webkit.org/show_bug.cgi?id=68696

        Reviewed by Andreas Kling.

        Instead of connecting signals and calling QtFileDownloader::onReadyRead()
        on its constructor, QtFileDownloader will now handle this in start().

        * WebProcess/Downloads/qt/DownloadQt.cpp:
        (WebKit::Download::start):
        * WebProcess/Downloads/qt/QtFileDownloader.cpp:
        (WebKit::QtFileDownloader::QtFileDownloader):
        (WebKit::QtFileDownloader::start):
        * WebProcess/Downloads/qt/QtFileDownloader.h:

2011-09-22  Gopal Raghavan  <gopal.1.raghavan@nokia.com>

        [Qt] TouchWebView load test not running
        https://bugs.webkit.org/show_bug.cgi?id=68620

        Reviewed by Chang Shu.

        Load test was not executed since it was missing in pro file. Added tst_load.qml to qmltests.pro

        * UIProcess/API/qt/tests/qmltests/qmltests.pro:

2011-09-22  Dean Jackson  <dino@apple.com>

        Add ENABLE_CSS_FILTERS
        https://bugs.webkit.org/show_bug.cgi?id=68652

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2011-09-22  Simon Fraser  <simon.fraser@apple.com>

        Add APIObjects for Size, Point, Rect
        https://bugs.webkit.org/show_bug.cgi?id=68644

        Reviewed by Sam Weinig.
        
        Make APIObjects for size, point and rect so that they can be
        used in WKArrayRefs.
        
        Make some inline helper methods to create WKSize, WKPoint and WKRect
        types.

        * GNUmakefile.am:
        * Shared/API/c/WKBase.h:
        * Shared/API/c/WKGeometry.cpp: Copied from Source/WebKit2/Shared/API/c/WKGeometry.h.
        (WKSizeGetTypeID):
        (WKPointGetTypeID):
        (WKRectGetTypeID):
        (WKPointCreate):
        (WKSizeCreate):
        (WKRectCreate):
        (WKSizeGetValue):
        (WKPointGetValue):
        (WKRectGetValue):
        * Shared/API/c/WKGeometry.h:
        (WKPoint::WKPointMake):
        (WKPoint::WKSizeMake):
        (WKPoint::WKRectMake):
        * Shared/API/c/WKSharedAPICast.h:
        * Shared/APIObject.h:
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        (WebKit::UserMessageDecoder::baseDecode):
        * Shared/WebGeometry.h: Added.
        (WebKit::WebSize::create):
        (WebKit::WebSize::size):
        (WebKit::WebSize::WebSize):
        (WebKit::WebSize::type):
        (WebKit::WebPoint::create):
        (WebKit::WebPoint::point):
        (WebKit::WebPoint::WebPoint):
        (WebKit::WebPoint::type):
        (WebKit::WebRect::create):
        (WebKit::WebRect::rect):
        (WebKit::WebRect::WebRect):
        (WebKit::WebRect::type):
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebKit2API.pri:
        * win/WebKit2.vcproj:

2011-09-22  Alexey Proskuryakov  <ap@apple.com>

        [WK2] UIProcess should check that WebProcess isn't sending unexpected file: URLs to it
        https://bugs.webkit.org/show_bug.cgi?id=68573

        Reviewed by Anders Carlsson.

        Re-landing with a slightly less aggressive check.

        * UIProcess/API/mac/WKView.mm:
        (maybeCreateSandboxExtensionFromPasteboard): Return a boolean, telling the caller whether
        an extension actually needed to be created
        (-[WKView performDragOperation:]): Tell process proxy when the process is going to get
        universal file read sandbox extension.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::didPerformClientRedirect): Check the URLs.
        (WebKit::WebContext::didPerformServerRedirect): Ditto.
        (WebKit::WebContext::didUpdateHistoryTitle): Ditto.
        (WebKit::WebContext::getPluginPath): Ditto. Also, properly parse the URL - we can never
        assume that a string coming from WebProcess is a ParsedURLString.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcessWithItem): Tell process proxy when the process
        is going to get universal file read sandbox extension.
        (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle): Changed to return a boolean,
        telling the caller whether an extension actually needed to be created.
        (WebKit::WebPageProxy::loadURL): Tell process proxy about extension.
        (WebKit::WebPageProxy::loadURLRequest): Ditto.
        (WebKit::WebPageProxy::loadHTMLString): Tell process proxy if a file URL was used as a base
        one for a string. In this case, WebKit2 assumes that WebProcess has access to a subdirectory,
        (typically, one where error page resources live), and can load from it.
        (WebKit::WebPageProxy::loadAlternateHTMLString): Ditto.
        (WebKit::WebPageProxy::goForward): Tell process proxy about extension.
        (WebKit::WebPageProxy::goBack): Tell process proxy about extension.
        (WebKit::WebPageProxy::goToBackForwardItem): Tell process proxy about extension.
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame): Check the URL.
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame): Ditto.
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame): Ditto.
        (WebKit::WebPageProxy::decidePolicyForNavigationAction): Ditto.
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction): Ditto.
        (WebKit::WebPageProxy::decidePolicyForResponse): Ditto.
        (WebKit::WebPageProxy::didInitiateLoadForResource): Ditto.
        (WebKit::WebPageProxy::didSendRequestForResource): Ditto.
        (WebKit::WebPageProxy::didReceiveResponseForResource): Ditto.
        (WebKit::WebPageProxy::missingPluginButtonClicked): Ditto.

        * UIProcess/WebPageProxy.h: Changed initializeSandboxExtensionHandle() to return a bool,
        and renamed to maybeInitializeSandboxExtensionHandle (matching WKView counterpart).

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy): Initialize m_mayHaveUniversalFileReadSandboxExtension.
        It's going to be true if we ever granted an extension for "/".
        (WebKit::WebProcessProxy::willLoadHTMLStringWithBaseURL): Remember the path, we should expect
        that WebProcess will load subresources from it.
        (WebKit::WebProcessProxy::checkURLReceivedFromWebProcess): Check that it's reasonable to expect
        WebProcess send us a URL like this.
        (WebKit::WebProcessProxy::addBackForwardItem): Check the URLs.

        * UIProcess/WebProcessProxy.h: Added data members remembering what to expect from this process.

        * UIProcess/cf/WebPageProxyCF.cpp: (WebKit::WebPageProxy::restoreFromSessionStateData):
        Tell process proxy when the process is going to get universal file read sandbox extension.

2011-09-22  Alpha Lam  <hclam@chromium.org>

        https://bugs.webkit.org/show_bug.cgi?id=68081
        Fix scroll in page scaling mode.

        Reviewed by Simon Fraser.

        * WebProcess/Plugins/PluginView.cpp: Rename pageScaleFactor to frameScaleFactor.
        (WebKit::PluginView::handleEvent):
        (WebKit::PluginView::viewGeometryDidChange):
        (WebKit::PluginView::clipRectInWindowCoordinates):

2011-09-22  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt] Redirection overflow errors have wrong error domain
        https://bugs.webkit.org/show_bug.cgi?id=68612

        Reviewed by Andreas Kling.

        Redirection overflow currently puts the URL hostname in the errorDomain field
        and therefore are treated as a QWebError::EngineError. From now on they
        will be treated as QWebError::HttpError, since their error domain was modified
        to "HTTP" in QNetworkReplyHandler::redirect().

        * UIProcess/API/qt/qweberror.cpp:
        (QWebError::type):

2011-09-22  Csaba Osztrogonác  <ossy@webkit.org>

        REGRESSION(r95679): It broke everything.
        https://bugs.webkit.org/show_bug.cgi?id=68611

        Unreviewed rolling out r95679 and r95690, because it broke everything.

        * UIProcess/API/mac/WKView.mm:
        (maybeCreateSandboxExtensionFromPasteboard):
        (-[WKView performDragOperation:]):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::didPerformClientRedirect):
        (WebKit::WebContext::didPerformServerRedirect):
        (WebKit::WebContext::didUpdateHistoryTitle):
        (WebKit::WebContext::getPluginPath):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcessWithItem):
        (WebKit::WebPageProxy::initializeSandboxExtensionHandle):
        (WebKit::WebPageProxy::loadURL):
        (WebKit::WebPageProxy::loadURLRequest):
        (WebKit::WebPageProxy::loadHTMLString):
        (WebKit::WebPageProxy::loadAlternateHTMLString):
        (WebKit::WebPageProxy::goForward):
        (WebKit::WebPageProxy::goBack):
        (WebKit::WebPageProxy::goToBackForwardItem):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::didInitiateLoadForResource):
        (WebKit::WebPageProxy::didSendRequestForResource):
        (WebKit::WebPageProxy::didReceiveResponseForResource):
        (WebKit::WebPageProxy::missingPluginButtonClicked):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::WebProcessProxy::addBackForwardItem):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/cf/WebPageProxyCF.cpp:
        (WebKit::WebPageProxy::restoreFromSessionStateData):

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

        [WK2] UIProcess should check that WebProcess isn't sending unexpected file: URLs to it
        https://bugs.webkit.org/show_bug.cgi?id=68573

        Unreviewed follow-up fix.

        * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::checkURLReceivedFromWebProcess):
        Just like we allow null URLs, also allow empty strings.

2011-09-21  Julien Chaffraix  <jchaffraix@webkit.org>

        Crash in RenderBox::paintMaskImages when GraphicsContext's painting is disabled
        https://bugs.webkit.org/show_bug.cgi?id=68133

        Reviewed by Darin Adler.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:
        Exported the new FrameView::paintControlTints function.

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

        [WK2] UIProcess should check that WebProcess isn't sending unexpected file: URLs to it
        https://bugs.webkit.org/show_bug.cgi?id=68573

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (maybeCreateSandboxExtensionFromPasteboard): Return a boolean, telling the caller whether
        an extension actually needed to be created
        (-[WKView performDragOperation:]): Tell process proxy when the process is going to get
        universal file read sandbox extension.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::didPerformClientRedirect): Check the URLs.
        (WebKit::WebContext::didPerformServerRedirect): Ditto.
        (WebKit::WebContext::didUpdateHistoryTitle): Ditto.
        (WebKit::WebContext::getPluginPath): Ditto. Also, properly parse the URL - we can never
        assume that a string coming from WebProcess is a ParsedURLString.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcessWithItem): Tell process proxy when the process
        is going to get universal file read sandbox extension.
        (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle): Changed to return a boolean,
        telling the caller whether an extension actually needed to be created.
        (WebKit::WebPageProxy::loadURL): Tell process proxy about extension.
        (WebKit::WebPageProxy::loadURLRequest): Ditto.
        (WebKit::WebPageProxy::loadHTMLString): Tell process proxy if a file URL was used as a base
        one for a string. In this case, WebKit2 assumes that WebProcess has access to a subdirectory,
        (typically, one where error page resources live), and can load from it.
        (WebKit::WebPageProxy::loadAlternateHTMLString): Ditto.
        (WebKit::WebPageProxy::goForward): Tell process proxy about extension.
        (WebKit::WebPageProxy::goBack): Tell process proxy about extension.
        (WebKit::WebPageProxy::goToBackForwardItem): Tell process proxy about extension.
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame): Check the URL.
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame): Ditto.
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame): Ditto.
        (WebKit::WebPageProxy::decidePolicyForNavigationAction): Ditto.
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction): Ditto.
        (WebKit::WebPageProxy::decidePolicyForResponse): Ditto.
        (WebKit::WebPageProxy::didInitiateLoadForResource): Ditto.
        (WebKit::WebPageProxy::didSendRequestForResource): Ditto.
        (WebKit::WebPageProxy::didReceiveResponseForResource): Ditto.
        (WebKit::WebPageProxy::missingPluginButtonClicked): Ditto.

        * UIProcess/WebPageProxy.h: Changed initializeSandboxExtensionHandle() to return a bool,
        and renamed to maybeInitializeSandboxExtensionHandle (matching WKView counterpart).

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy): Initialize m_mayHaveUniversalFileReadSandboxExtension.
        It's going to be true if we ever granted an extension for "/".
        (WebKit::WebProcessProxy::willLoadHTMLStringWithBaseURL): Remember the path, we should expect
        that WebProcess will load subresources from it.
        (WebKit::WebProcessProxy::checkURLReceivedFromWebProcess): Check that it's reasonable to expect
        WebProcess send us a URL like this.
        (WebKit::WebProcessProxy::addBackForwardItem): Check the URLs.

        * UIProcess/WebProcessProxy.h: Added data members remembering what to expect from this process.

        * UIProcess/cf/WebPageProxyCF.cpp: (WebKit::WebPageProxy::restoreFromSessionStateData):
        Tell process proxy when the process is going to get universal file read sandbox extension.

2011-09-19  Jer Noble  <jer.noble@apple.com>

        Add settings to control the availability of the Web Audio API to WebKit and WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=68382

        Add support for the webAudioEnabled preference in WebKit2.

        Reviewed by Darin Adler.

        * Shared/WebPreferencesStore.h: Add WebAudioEnabled getter and setter macro.
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetWebAudioEnabled): Added.
        (WKPreferencesGetWebAudioEnabled): Added.
        * UIProcess/API/C/WKPreferences.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Update the webAudioEnabled preference.

2011-09-21  Dan Bernstein  <mitz@apple.com>

        Use the prefix "WK" instead of "Web" for Objective-C classes defined in WebKit2.

        Reviewed by Anders Carlsson.

        Renamed WebInspectorProxyObjCAdapter to WKWebInspectorProxyObjCAdapter.
        Renamed WebInspectorWKView to WKWebInspectorWKView.
        Renamed WebFindIndicatorWindowAnimation to WKFindIndicatorWindowAnimation.
        Renamed WebFindIndicatorView to WKFindIndicatorView.
        Renamed WebUserDataWrapper to WKUserDataWrapper.

        Updated the build phase checking for inappropriate Objective-C class names to disallow the prefix
        "Web" and only allow "WK".

        * UIProcess/API/mac/FindIndicatorWindow.h:
        * UIProcess/API/mac/FindIndicatorWindow.mm:
        (WebKit::FindIndicatorWindow::setFindIndicator):
        (WebKit::FindIndicatorWindow::startFadeOutTimerFired):
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (-[WKMenuTarget forwardContextMenuAction:]):
        (WebKit::nsMenuItemVector):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        (WebKit::WebInspectorProxy::platformOpen):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
        (WebKit::WebFullScreenManagerMac::WebFullScreenManagerMac):

2011-09-21  Chang Shu  <cshu@webkit.org>

        [WK2] [Mac] Implement a more-complete MouseDown/MouseUp/MouseMoveTo functions for WebKit2 EventSender
        https://bugs.webkit.org/show_bug.cgi?id=68108

        This patch implements the event sender mouse events through WebKit2 UIProcess which is
        closer to the real simulation than a WebProcess-only approach. The patch only supports Mac
        platform as the first step so the existing code is still kept for other platforms.

        Reviewed by Darin Adler.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetShouldSendEventsSynchronously):
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::handleMouseEvent):
        (WebKit::WebPageProxy::handleKeyboardEvent):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::setShouldSendEventsSynchronously):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mouseEventSyncForTesting):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2011-09-21  Dan Bernstein  <mitz@apple.com>

        WebKit2 part of: Prevent the WebKit frameworks from defining inappropriately-named Objective-C classes
        https://bugs.webkit.org/show_bug.cgi?id=68451

        Reviewed by Darin Adler.

        * WebKit2.xcodeproj/project.pbxproj: Added a script build phase that invokes
        check-for-inappropriate-objc-class-names, allowing only class names prefixed with "WK" or "Web".

2011-09-21  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt][WK2] Implement Download support in WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=68153

        Reviewed by Andreas Kling.

        We implement the necessary functions of Download.h, and our QtFileDownloader
        to handle all network communication and call the necessary functions of Download.

        We use the download policy for any MIME type not supported by WebKit. This
        behaves like Qt non-WebKit2 except that we don't force download when
        we encounter Content-Disposition: attachment. We still use the "filename="
        field for file name suggestion though.

        Based on original patches by: Kimmo Kinnunen <kimmo.t.kinnunen@nokia.com>,
        Jocelyn Turcotte <jocelyn.turcotte@nokia.com>, Simon Hausmann <simon.hausmann@nokia.com>
        and Zalan Bujtas <zalan.bujtas@nokia.com>.

        * UIProcess/API/qt/qweberror.cpp: Adding DownloadError
        (QWebError::type):
        * UIProcess/API/qt/qweberror.h: Adding DownloadError
        * WebKit2.pro:
        * WebProcess/Downloads/Download.cpp: Adding QtFileDownloader, Qt platform specific
        (WebKit::Download::Download):
        * WebProcess/Downloads/Download.h: Adding QtFileDownloader, Qt platform specific
        * WebProcess/Downloads/qt/DownloadQt.cpp:
        (WebKit::Download::start):
        (WebKit::Download::startWithHandle):
        (WebKit::Download::cancel):
        (WebKit::Download::platformInvalidate):
        (WebKit::Download::didDecideDestination):
        * WebProcess/Downloads/qt/QtFileDownloader.cpp: Added.
        (WebKit::QtFileDownloader::QtFileDownloader):
        (WebKit::QtFileDownloader::~QtFileDownloader):
        (WebKit::QtFileDownloader::determineFilename):
        (WebKit::QtFileDownloader::decidedDestination):
        (WebKit::QtFileDownloader::abortDownloadWritingAndEmitError):
        (WebKit::QtFileDownloader::onReadyRead):
        (WebKit::QtFileDownloader::onFinished):
        (WebKit::QtFileDownloader::onError):
        (WebKit::QtFileDownloader::cancel):
        * WebProcess/Downloads/qt/QtFileDownloader.h: Added.

2011-09-21  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/9890932> "Open PDF in Preview" on two PDFs of the same name does nothing the second time

        The logic in PDFViewController::pathToPDFOnDisk that deals with constructing a unique
        file name if a file of the suggested name already exists was incorrect. It was appending
        the template used by mkstemps to the directory name component of the path rather than
        using it as a prefix on the filename portion of the path. This resulted in a template path
        like WebKitPDFs-ABCDEFXXXXXX-/foo.pdf where WebKitPDFs-ABCDEF/XXXXXX-foo.pdf was expected.

        Reviewed by Jon Honeycutt.

        * UIProcess/API/mac/PDFViewController.mm:
        (WebKit::PDFViewController::pathToPDFOnDisk): Append the template as a new path component,
        then append the suggested file name to that component.

2011-09-21  Andras Becsi  <andras.becsi@nokia.com>

        [Qt] Remove Qt specific code from css/SelectorChecker.cpp
        https://bugs.webkit.org/show_bug.cgi?id=67702

        Reviewed by Csaba Osztrogonác.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp: Modify to match new prototype.
        (WebKit::WebPlatformStrategies::isLinkVisited):
        (WebKit::WebPlatformStrategies::addVisitedLink):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h: Ditto.

2011-09-20  Anders Carlsson  <andersca@apple.com>

        Get rid of PluginView::setBoundsSize from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=68489

        Reviewed by Dan Bernstein.

        Remove m_boundsSize and the setter since they aren't used anywhere.

        * WebProcess/Plugins/PluginView.cpp:
        * WebProcess/Plugins/PluginView.h:

2011-09-20  Gopal Raghavan  <gopal.1.raghavan@nokia.com>

        [Qt] QTouchWebView missing signal tests for loadProgress
        https://bugs.webkit.org/show_bug.cgi?id=68442

        Reviewed by Chang Shu.

        Added test case to check load progress signal for QTouchWebView

        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadProgressSignal.qml: Added.
        * UIProcess/API/qt/tests/qmltests/qmltests.pro:

2011-09-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r95565.
        http://trac.webkit.org/changeset/95565
        https://bugs.webkit.org/show_bug.cgi?id=68470

        Broke builds (Requested by andersca on #webkit).

        * GNUmakefile.am:
        * Shared/API/c/WKHitTestResult.cpp: Removed.
        * Shared/API/c/WKHitTestResult.h: Removed.
        * UIProcess/API/C/WebKit2.h:

2011-09-20  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt] [WK2] Implement a persistent cookie storage.
        https://bugs.webkit.org/show_bug.cgi?id=65309

        Reviewed by Chang Shu.

        Add parameter to the WebProcess creation to specify where cookies should be saved.
        It also use the new cookie storage implementation and set it to our network stack
        so cookies are used when using it.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):
        * WebProcess/qt/WebProcessQt.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::platformTerminate):

2011-09-20  Nayan Kumar K  <nayankk@motorola.com>

        Added WKHitTestResult API's.

        WKHitTestResult API's are added. These API's can be used to
        get the hover'ed link/image/media URL as well as link lable and
        title.
        https://bugs.webkit.org/show_bug.cgi?id=68426

        Reviewed by Anders Carlsson.

        * GNUmakefile.am:
        * Shared/API/c/WKHitTestResult.cpp: Copied from Source/WebKit2/UIProcess/API/C/WebKit2.h.
        (WKHitTestResultGetTypeID):
        (WKHitTestResultCopyAbsoluteImageURL):
        (WKHitTestResultCopyAbsoluteLinkURL):
        (WKHitTestResultCopyAbsoluteMediaURL):
        (WKHitTestResultCopyLinkLabel):
        (WKHitTestResultCopyLinkTitle):
        * Shared/API/c/WKHitTestResult.h: Copied from Source/WebKit2/UIProcess/API/C/WebKit2.h.
        * UIProcess/API/C/WebKit2.h:

2011-09-20  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt][WK2] Add stubs for FULLSCREEN_API on Qt.
        https://bugs.webkit.org/show_bug.cgi?id=68444

        Reviewed by Andreas Kling.

        Create all the stubs necessary for enabling FULLSCREEN_API on the Qt port.

        * UIProcess/qt/WebFullScreenManagerProxyQt.cpp: Added.
        (WebKit::WebFullScreenManagerProxy::invalidate):
        (WebKit::WebFullScreenManagerProxy::enterFullScreen):
        (WebKit::WebFullScreenManagerProxy::exitFullScreen):
        (WebKit::WebFullScreenManagerProxy::beganEnterFullScreenAnimation):
        (WebKit::WebFullScreenManagerProxy::finishedEnterFullScreenAnimation):
        (WebKit::WebFullScreenManagerProxy::beganExitFullScreenAnimation):
        (WebKit::WebFullScreenManagerProxy::finishedExitFullScreenAnimation):
        (WebKit::WebFullScreenManagerProxy::enterAcceleratedCompositingMode):
        (WebKit::WebFullScreenManagerProxy::exitAcceleratedCompositingMode):
        (WebKit::WebFullScreenManagerProxy::getFullScreenRect):
        * WebKit2.pro:
        * WebProcess/FullScreen/qt: Added.
        * WebProcess/FullScreen/qt/WebFullScreenManagerQt.cpp: Added.
        (WebKit::WebFullScreenManagerQt::WebFullScreenManagerQt):
        (WebKit::WebFullScreenManager::create):
        (WebKit::WebFullScreenManagerQt::setRootFullScreenLayer):
        (WebKit::WebFullScreenManagerQt::beginEnterFullScreenAnimation):
        (WebKit::WebFullScreenManagerQt::beginExitFullScreenAnimation):
        * WebProcess/FullScreen/qt/WebFullScreenManagerQt.h: Added.

2011-09-20  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt][WK2] Export QNetworkReply in the QtWebKit QML module.
        https://bugs.webkit.org/show_bug.cgi?id=68401

        Reviewed by Simon Hausmann.

        Add QNetworkReply in the QtWebKit module. We use the enum QNetworkReply::NetworkError
        as the error code when the load fails. It is not used in the QtQuick module therefore
        the QML team thinks it should belong here. Also added some auto-tests to cover the
        loading errors.

        * UIProcess/API/qt/qmlplugin/plugin.cpp:
        (WebKit2QmlPlugin::registerTypes):
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_loadFail.qml: Added.
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadFail.qml: Added.

2011-09-20  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][Mac] Buildfix after r95513.

        Rubber-stamped by Andras Becsi.

        * Scripts/generate-forwarding-headers.pl: Add mm file supporting.

2011-09-20  Gopal Raghavan  <gopal.1.raghavan@nokia.com>

        [Qt] QDesktopWebView missing loadProgress tests
        https://bugs.webkit.org/show_bug.cgi?id=68280

        Reviewed by Andreas Kling.

        Added test case to check load progress property and signal for QDesktopWebView

        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_loadProgress.qml: Added.
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_loadProgressSignal.qml: Added.
        * UIProcess/API/qt/tests/qmltests/qmltests.pro:

2011-09-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebProcess shouldn't use the GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=68062

        Reviewed by Martin Robinson.

        Use WebCore API to create errors in WebProcess.

        * GNUmakefile.am: Don't use webkit/webkierror.h.
        * WebProcess/WebCoreSupport/gtk/WebErrorsGtk.cpp:
        (WebKit::cancelledError):
        (WebKit::blockedError):
        (WebKit::cannotShowURLError):
        (WebKit::interruptedForPolicyChangeError):
        (WebKit::cannotShowMIMETypeError):
        (WebKit::fileDoesNotExistError):
        (WebKit::pluginWillHandleLoadError):

2011-09-19  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/68421> Stop calling UpdateSystemActivity in places where we hold power assertions that achieve the same effect

        On SnowLeopard and newer it's not necessary to call UpdateSystemActivity to prevent the screensaver from kicking
        in as the NoDisplaySleep assertion now has that effect. It's also not necessary to hold both a NoDisplaySleep and
        a NoIdleSleep assertion as the latter is implied by the former.

        Adopt the DisplaySleepDisabler class that was added to WebCore and remove all of duplicated logic from WKFullScreenWindowController.

        Reviewed by Dan Bernstein.

        * UIProcess/mac/WKFullScreenWindowController.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController _updatePowerAssertions]): Create a DisplaySleepDisabler instance when transitioning from permitting
        display sleep to disabling display sleep. Clear out our reference when sleep should be permitted, destroying any
        disabler that we own. Also adds a FIXME about an error that was noticed while working in this code.

2011-09-19  Adam Barth  <abarth@webkit.org>

        Always enable ENABLE(EVENTSOURCE)
        https://bugs.webkit.org/show_bug.cgi?id=68414

        Reviewed by Eric Seidel.

        * Configurations/FeatureDefines.xcconfig:

2011-09-19  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt] Unreviewed coding style fix.

        * UIProcess/API/qt/qdesktopwebview.h:
        * UIProcess/API/qt/qtouchwebpage.h:
        * UIProcess/API/qt/qweberror.h:

2011-09-19  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt][WK2] Make loading errors API easier to use.
        https://bugs.webkit.org/show_bug.cgi?id=68357

        Reviewed by Tor Arne Vestbø.

        Make the API to get loading errors easier to use. 95197 introduced
        a QJSValue API that is a bit opaque for the client code. Rather than
        using a dedicated object, we can just pass the needed information as
        parameters of the slot.

        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebViewPrivate::loadDidFail):
        * UIProcess/API/qt/qdesktopwebview.h:
        * UIProcess/API/qt/qdesktopwebview_p.h:
        * UIProcess/API/qt/qtouchwebpage.h:
        * UIProcess/API/qt/tests/commonviewtests/tst_commonviewtests.cpp:
        (tst_CommonViewTests::loadNonexistentFileUrl):
        * UIProcess/API/qt/tests/commonviewtests/webviewabstraction.cpp:
        (WebViewAbstraction::WebViewAbstraction):
        (WebViewAbstraction::touchViewLoadFailed):
        (WebViewAbstraction::desktopViewLoadFailed):
        * UIProcess/API/qt/tests/commonviewtests/webviewabstraction.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::loadDidFail):
        * UIProcess/qt/TouchViewInterface.cpp:
        (WebKit::TouchViewInterface::loadDidFail):
        * UIProcess/qt/TouchViewInterface.h:
        * UIProcess/qt/ViewInterface.h:

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

        WebKit2 part of [mac] WebKit contains Objective-C classes that are not prefixed with its standard prefixes
        https://bugs.webkit.org/show_bug.cgi?id=68323

        Reviewed by Sam Weinig.

        Renamed FullKeyboardAccessWatcher to WKFullKeyboardAccessWatcher.
        Renamed AccessibilityWebPageObject to WKAccessibilityWebPageObject.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/AccessibilityWebPageObject.h: Removed.
        * WebProcess/WebPage/mac/AccessibilityWebPageObject.mm: Removed.
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObject.h: Copied from Source/WebKit2/WebProcess/WebPage/mac/AccessibilityWebPageObject.h.
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObject.mm: Copied from Source/WebKit2/WebProcess/WebPage/mac/AccessibilityWebPageObject.mm.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformInitialize):
        (WebKit::WebPage::accessibilityRemoteObject):
        * WebProcess/mac/FullKeyboardAccessWatcher.h: Removed.
        * WebProcess/mac/FullKeyboardAccessWatcher.mm: Removed.
        * WebProcess/mac/WKFullKeyboardAccessWatcher.h: Copied from Source/WebKit2/WebProcess/mac/FullKeyboardAccessWatcher.h.
        * WebProcess/mac/WKFullKeyboardAccessWatcher.mm: Copied from Source/WebKit2/WebProcess/mac/FullKeyboardAccessWatcher.mm.
        (+[WKFullKeyboardAccessWatcher fullKeyboardAccessEnabled]):
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::fullKeyboardAccessEnabled):

2011-09-14  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] [WK2] Implement popup menus in QDesktopWebView using QComboBox
        https://bugs.webkit.org/show_bug.cgi?id=67938

        Reviewed by Andreas Kling.

        Implement a WebPopupMenuProxy that uses QtWebComboBox (a QComboBox subclass we
        have for WK1). Then use this WebPopupMenuProxy in QDesktopWebView. The implementation
        explicitly avoids running a nested mainloop.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showPopupMenu):
        Since we don't run a nested mainloop, we need to keep the client pointer to call
        valueChangedForPopupMenu().

        * UIProcess/qt/WebPopupMenuProxyQtDesktop.cpp: Added.
        (WebKit::WebPopupMenuProxyQtDesktop::WebPopupMenuProxyQtDesktop):
        (WebKit::WebPopupMenuProxyQtDesktop::~WebPopupMenuProxyQtDesktop):
        (WebKit::WebPopupMenuProxyQtDesktop::showPopupMenu):
        (WebKit::WebPopupMenuProxyQtDesktop::hidePopupMenu):
        (WebKit::WebPopupMenuProxyQtDesktop::setSelectedIndex):
        (WebKit::WebPopupMenuProxyQtDesktop::onPopupMenuHidden):
        (WebKit::WebPopupMenuProxyQtDesktop::populate):
        * UIProcess/qt/WebPopupMenuProxyQtDesktop.h: Added.
        (WebKit::WebPopupMenuProxyQtDesktop::create):
        * UIProcess/qt/qdesktopwebpageproxy.cpp:
        (QDesktopWebPageProxy::createPopupMenuProxy):
        * UIProcess/qt/qdesktopwebpageproxy.h:
        * WebKit2.pro:

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

        [GTK] Fix distcheck build
        https://bugs.webkit.org/show_bug.cgi?id=68241

        Reviewed by Martin Robinson.

        * GNUmakefile.am:

2011-09-17  Mihai Parparita  <mihaip@chromium.org>

        FrameLoaderClient BackForwardList-related methods are unsued
        https://bugs.webkit.org/show_bug.cgi?id=68293

        Reviewed by Darin Adler.

        Remove FrameLoaderClient methods that were added by r51629, since only        
        the old (since-deleted) Android port needed them.

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

2011-09-16  Gopal Raghavan  <gopal.1.raghavan@nokia.com>
        [Qt] QTouchWebView missing loadProgress tests
        https://bugs.webkit.org/show_bug.cgi?id=68183

        Reviewed by Chang Shu.

        Added test case to check load progress for QTouchWebView

        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadProgress.qml: Added.
        * UIProcess/API/qt/tests/qmltests/qmltests.pro:

2011-09-16  Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com>

        Removed unwanted NotImplemented.h inclusion in WebKit2 GTK port & platform independent files
        https://bugs.webkit.org/show_bug.cgi?id=68249

        Reviewed by Martin Robinson.

        * Shared/Plugins/NPIdentifierData.cpp: Removed NotImplemented.h inclusion.
        * Shared/Plugins/NPRemoteObjectMap.cpp: Removed NotImplemented.h inclusion.
        * Shared/Plugins/NPVariantData.cpp: Removed NotImplemented.h inclusion.
        * UIProcess/gtk/WebContextGtk.cpp: Removed NotImplemented.h inclusion.
        * WebProcess/Cookies/WebCookieManager.cpp: Removed NotImplemented.h inclusion.
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.cpp: Removed NotImplemented.h inclusion.
        * WebProcess/Plugins/Netscape/JSNPMethod.cpp: Removed NotImplemented.h inclusion.
        * WebProcess/Plugins/Netscape/NPJSObject.cpp: Removed NotImplemented.h inclusion.
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp: Removed NotImplemented.h inclusion.
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp: Removed NotImplemented.h inclusion.

2011-09-16  Simon Fraser  <simon.fraser@apple.com>

        Make custom scrollbar theme for use in DRT, to reduce pixel diffs between platforms
        https://bugs.webkit.org/show_bug.cgi?id=68134

        Reviewed by Sam Weinig.

        Hook up a private preference that enables the mock scrollbar theme.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetMockScrollbarsEnabled):
        (WKPreferencesGetMockScrollbarsEnabled):
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2011-09-16  Mark Rowe  <mrowe@apple.com>

        Stop installing source and header files in to WebKit2.framework after r95303.

        * WebKit2.xcodeproj/project.pbxproj:

2011-09-16  Anders Carlsson  <andersca@apple.com>

        Add back the WKHitTestResultRef parameter to mouseDidMoveOverElement in an ABI preserving way
        https://bugs.webkit.org/show_bug.cgi?id=68269

        Reviewed by Geoffrey Garen.

        Add back WKPageMouseDidMoveOverElementCallback last and deprecate the current callback.

        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::mouseDidMoveOverElement):

2011-09-16  Alexey Proskuryakov  <ap@apple.com>

        Give local builds of WebProcess different icon to distinguish them from built-in Safari’s WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=68268

        Reviewed by Darin Adler.

        * Configurations/WebProcess.xcconfig: Add an icon in Debug and Release builds.  The empty
        value for production resulted in WebKit not adding the key to plist at all, which is what
        we want (but I don't know if it's a supported feature).
        Also, don't copy the icon file to built framework in production builds.

        * WebKit2.xcodeproj/project.pbxproj: Added WebKit.icns.

        * WebProcess/Info.plist: Added a key for the icon.

        * WebProcess/mac/WebKit.icns: Copied from Websites/webkit.org/images/surfin-safari.icns.

2011-09-16  Anders Carlsson  <andersca@apple.com>

        Temporarily remove the WKHitTestResultRef parameter to avoid breaking the WK2 ABI/API
        https://bugs.webkit.org/show_bug.cgi?id=68266

        Reviewed by John Sullivan.

        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::mouseDidMoveOverElement):

2011-09-16  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT should inline Math.abs
        https://bugs.webkit.org/show_bug.cgi?id=68227

        Reviewed by Oliver Hunt.

        Added JavaScriptCore/dfg to include path path.

        * CMakeLists.txt:

2011-09-16  Igor Oliveira  <igor.oliveira@openbossa.org>

        [WK2] mouseDidMoveOverElement needs to send more information about hovered element to UiProcess.
        https://bugs.webkit.org/show_bug.cgi?id=68125

        This patch implements support for the UiProcess to know what is the link url of a hovered element.

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        * Shared/WebHitTestResult.cpp: Added.

        WebHitTestResult has hovered element information.

        (WebKit::WebHitTestResult::create):
        (WebKit::WebHitTestResult::Data::encode):
        (WebKit::WebHitTestResult::Data::decode):
        * Shared/WebHitTestResult.h: Added.
        (WebKit::WebHitTestResult::absoluteImageURL):
        (WebKit::WebHitTestResult::absoluteLinkURL):
        (WebKit::WebHitTestResult::absoluteMediaURL):
        (WebKit::WebHitTestResult::linkLabel):
        (WebKit::WebHitTestResult::linkTitle):
        (WebKit::WebHitTestResult::WebHitTestResult):
        (WebKit::WebHitTestResult::type):
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::mouseDidMoveOverElement):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::mouseDidMoveOverElement):
        * UIProcess/WebUIClient.h:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::mouseDidMoveOverElement):
        * win/WebKit2.vcproj:

2011-09-15  Adam Roben  <aroben@apple.com>

        Add support for attributes on message parameters

        Parameter attributes are specified as a space-separated list inside square brackets before
        the parameter's type. WebKit2 doesn't use this, but other projects that use these scripts
        would like to.

        Fixes <http://webkit.org/b/68219> Would like a way to specify attributes on message
        parameters

        Reviewed by Sam Weinig.

        * Scripts/webkit2/messages_unittest.py: Added tests for parameter attributes.

        * Scripts/webkit2/model.py:
        (Parameter.__init__): Added a new attributes parameter, which is stored in the self.attributes
        property.
        (Parameter.has_attribute): Added. Returns true if this parameter has the given attribute.

        * Scripts/webkit2/parser.py:
        (parse): Moved attributes-parsing code from here...
        (parse_attributes_string): ...to here.
        (parse_parameters_string): Renamed from parse_parameter_string. Now also parses parameter
        attributes.

2011-09-15  Adam Roben  <aroben@apple.com>

        Make WebKit2's message-generation model and parser scripts accessible to other projects

        We copy them into the build products directory so other projects can find them.

        Fixes <http://webkit.org/b/68169> Would like to be able to use WebKit2's message-generation
        scripts in other projects

        Reviewed by Darin Adler.

        * WebKit2.xcodeproj/project.pbxproj: Copy the scripts to PrivateHeaders.

        * win/WebKit2.make: Copy the scripts from obj/WebKit2/scripts to
        tools/scripts, like WebCore does.

        * win/WebKit2Generated.make: Copy the scripts to obj/WebKit2/scripts, which is similar to what
        WebCore does for its bindings scripts.

2011-09-15  Adam Roben  <aroben@apple.com>

        Split some of the message-generation code into separate modules

        This is in preparation for making these modules scripts usable by other projects.

        Fixes <http://webkit.org/b/68217> Model and parsing functionality for WebKit2's
        message-generation scripts is trapped inside a much larger module

        Reviewed by Darin Adler.

        * DerivedSources.make:
        * DerivedSources.pro:
        * GNUmakefile.am:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.vcproj:
        Added new files.

        * Scripts/webkit2/messages.py: Moved some code from here...

        * Scripts/webkit2/model.py: Added.
        * Scripts/webkit2/parser.py: Added.
        ...to here. MessageReceiver.parse was split out into a function in the new parser module.

        * Scripts/webkit2/messages_unittest.py: Updated for renames.

2011-09-16  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Disable WebKit2 by default in configure.ac, but enable it with build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=68178

        Reviewed by Xan Lopez.

        * GNUmakefile.am: Do not build WebKit2 by default. Re-add pkgconfig support
        for WebKit2.

2011-09-15  Adam Barth  <abarth@webkit.org>

        Rename ENABLE(DATABASE) to ENABLE(SQL_DATABASE)
        https://bugs.webkit.org/show_bug.cgi?id=68205

        Reviewed by Eric Seidel.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2011-09-15  Eric Seidel  <eric@webkit.org>

        Remove ENABLE(SVG_AS_IMAGE) since all major ports have it on by default
        https://bugs.webkit.org/show_bug.cgi?id=68182

        Reviewed by Adam Barth.

        * Configurations/FeatureDefines.xcconfig:

2011-09-15  Eric Seidel  <eric@webkit.org>

        Remove ENABLE_SVG_ANIMATION as all major ports have it on by default
        https://bugs.webkit.org/show_bug.cgi?id=68022

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:

2011-09-15  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt][WK2] Make QWebError more friendly to QML.
        https://bugs.webkit.org/show_bug.cgi?id=67785

        Reviewed by Simon Hausmann.

        Make sure that we can use the loading errors in QML. We send it via a QJSValue which
        has the properties needed to get the error code, the url and the type of error.

        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebViewPrivate::loadDidFail):
        (QDesktopWebViewPrivate::engine):
        * UIProcess/API/qt/qdesktopwebview.h:
        * UIProcess/API/qt/qdesktopwebview_p.h:
        * UIProcess/API/qt/qtouchwebpage.h:
        * UIProcess/API/qt/tests/commonviewtests/tst_commonviewtests.cpp:
        (tst_CommonViewTests::loadNonexistentFileUrl):
        * UIProcess/API/qt/tests/commonviewtests/webviewabstraction.cpp:
        (WebViewAbstraction::WebViewAbstraction):
        (WebViewAbstraction::touchViewLoadFailed):
        (WebViewAbstraction::desktopViewLoadFailed):
        * UIProcess/API/qt/tests/commonviewtests/webviewabstraction.h:
        * UIProcess/API/qt/tests/testwindow.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::loadDidFail):
        * UIProcess/qt/QtWebPageProxy.h:
        * UIProcess/qt/TouchViewInterface.cpp:
        (WebKit::TouchViewInterface::loadDidFail):
        (WebKit::TouchViewInterface::engine):
        * UIProcess/qt/TouchViewInterface.h:
        * UIProcess/qt/ViewInterface.h:

2011-09-15  Adam Roben  <aroben@apple.com>

        Remove WebKit2-specific knowledge from the Message class

        This is in preparation for making some of our message-generations scripts usable by other
        projects.

        Fixes <http://webkit.org/b/68170> Model classes in WebKit2's message-generation scripts know
        too much about WebKit2 details

        Reviewed by Anders Carlsson.

        * Scripts/webkit2/messages.py: Added constants for the message attributes we support.
        (MessageReceiver.parse): Instead of recognizing individual attributes, just stick the
        attributes into a set and pass it to the Message constructor.
        (Message.__init__): Changed to take a generic set of attributes instead of individual
        attributes.
        (Message.has_attribute): Added. Returns true if the message has an attribute.
        (message_is_variadic): Renamed from parameter_type_is_variadic. Code came from
        Message.__init__, which set the old message.is_variadic property.

        (decode_type):
        (message_to_struct_declaration):
        (forward_declarations_and_headers):
        (async_case_statement):
        (sync_case_statement):
        (generate_message_handler):
        Updated to use Message.has_attribute and message_is_variadic.

2011-09-14  Wajahat Siddiqui  <mdwajahatali.siddiqui@motorola.com>

        Eliminate WebKit2 compilation warnings.
        https://bugs.webkit.org/show_bug.cgi?id=65025

        Warnings found with gcc on linux.

        Reviewed by Sam Weinig.

        * Platform/CoreIPC/ArgumentEncoder.cpp:
        (CoreIPC::ArgumentEncoder::~ArgumentEncoder):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin):

2011-09-14  Ada Chan  <adachan@apple.com>

        Implement WKBundleFrameCopyWebArchive().
        http://bugs.webkit.org/show_bug.cgi?id=67857

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameCopyWebArchive): Call WebFrame::webArchiveData() and create a WKDataRef from the returned CFDataRef.
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::webArchiveData): Add WebFrame::webArchiveData().
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::getWebArchiveOfFrame): Move the logic to WebFrame::webArchiveData() and call that method here.

2011-09-14  Alexey Proskuryakov  <ap@apple.com>

        Web Process doesn't need a permission to look up WebProcess service any more
        https://bugs.webkit.org/show_bug.cgi?id=68101

        Reviewed by Anders Carlsson.

        * WebProcess/com.apple.WebProcess.sb:

2011-09-14  Mark Hahnenberg  <mhahnenberg@apple.com>

        Unzip initialization lists and constructors in JSCell hierarchy (6/7)
        https://bugs.webkit.org/show_bug.cgi?id=67692

        Reviewed by Geoffrey Garen.

        Completed the sixth level of the refactoring to add finishCreation() 
        methods to all classes within the JSCell hierarchy with non-trivial 
        constructor bodies.

        This primarily consists of pushing the calls to finishCreation() down 
        into the constructors of the subclasses of the fifth level of the hierarchy 
        as well as pulling the finishCreation() calls out into the class's corresponding
        create() method if it has one.  Doing both simultaneously allows us to 
        maintain the invariant that the finishCreation() method chain is called exactly 
        once during the creation of an object, since calling it any other number of 
        times (0, 2, or more) will cause an assertion failure.

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

2011-09-13  Eric Seidel  <eric@webkit.org>

        Remove ENABLE_SVG_USE as <use> is required by HTML5
        https://bugs.webkit.org/show_bug.cgi?id=68019

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:

2011-09-13  Anders Carlsson  <andersca@apple.com>

        Disable C++ exceptions when building with clang
        https://bugs.webkit.org/show_bug.cgi?id=68031
        <rdar://problem/9556880>

        Reviewed by Mark Rowe.

        * Configurations/Base.xcconfig:

2011-09-13  Eric Seidel  <eric@webkit.org>

        Remove ENABLE_SVG_FOREIGN_OBJECT as it is a required part of HTML5
        https://bugs.webkit.org/show_bug.cgi?id=68018

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:

2011-09-13  Chang Shu  <cshu@webkit.org>

        [WK2] [Mac] Implement KeyDown function for WebKit2 EventSender.
        https://bugs.webkit.org/show_bug.cgi?id=57515

        The code change in WebKit2 allows key events being sent to WebProcess from UIProcess synchronously.

        Reviewed by Darin Adler.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetShouldSendKeyboardEventSynchronously):
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::handleKeyboardEvent):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::setShouldSendKeyboardEventSynchronously):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::keyEventSyncForTesting):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2011-09-12  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Eric Seidel.

        [CMAKE][WK2] include cmakeconfig.h in WebKit2/config.h
        https://bugs.webkit.org/show_bug.cgi?id=62692

        * CMakeLists.txt: define WTF_USE_JSC=1.
        * config.h: add cmakeconfig.h and define necessary macros for CMake build.

2011-09-12  Igor Oliveira  <igor.oliveira@openbossa.org>

        [Qt] [WK2] implement support to upload files in Qt WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=67228

        This patch implements support to upload files in the Desktop Qt WebKit2 implementation.

        Reviewed by Andreas Kling.

        * Shared/WebOpenPanelParameters.h:
        (WebKit::WebOpenPanelParameters::selectedFileNames):
        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebViewPrivate::chooseFiles):
        (QDesktopWebViewPrivate::onOpenPanelFilesSelected):
        (QDesktopWebViewPrivate::onOpenPanelFinished):
        * UIProcess/API/qt/qdesktopwebview_p.h:
        * UIProcess/qt/ClientImpl.cpp:

        qt_wk_runOpenPanel supports single and multiple files selection.

        (qt_wk_runOpenPanel):
        * UIProcess/qt/ClientImpl.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::init):
        * UIProcess/qt/TouchViewInterface.h:
        (WebKit::TouchViewInterface::chooseFiles):
        * UIProcess/qt/ViewInterface.h:

2011-09-12  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt]Style error fix.

        Reviewed by Andreas Kling.

        * UIProcess/qt/QtWebPageProxy.cpp:

2011-09-11  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/9878268> Pressing caps lock after closing a showModalDialog window results in WebProcess exiting

        It's incorrect to try and use -[NSApplication run] to run nested runloops as it is not possible to
        interrupt a nested invocation of -run without also causing outer invocations to exit after processing
        their next event. We can avoid this issue by using -[NSApplication run] for the outermost invocation
        of the main runloop, while using CFRunLoopRun for any nested invocations.

        Reviewed by Anders Carlsson.

        * Platform/RunLoop.h:
        * Platform/mac/RunLoopMac.mm:
        (RunLoop::RunLoop): Initialize the nesting level to 0.
        (RunLoop::run): Bump the nesting level, and only use -[NSApplication run] for the outermost invocation of the
        runloop. We also switch from -[NSRunloop run] to CFRunLoopRun as the former will only exit when it has no sources
        left to process, while CFRunLoopRun will return immediately after CFRunLoopStop is called on it.
        (RunLoop::stop): Only go down the NSApp path for the outermost invocation of the runloop.

2011-09-11  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] Qt layer should be hardened against C API versioning in the sense of build failures
        https://bugs.webkit.org/show_bug.cgi?id=67094

        Reviewed by Andreas Kling.

        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::init):

2011-09-09  Oliver Hunt  <oliver@apple.com>

        Remove support for anonymous storage from jsobjects
        https://bugs.webkit.org/show_bug.cgi?id=67881

        Reviewed by Sam Weinig.

        Remove the use of AnonymousSlotCount.

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

2011-09-09  Chris Marrin  <cmarrin@apple.com>

        requestAnimationFrame doesn't throttle on Mac
        https://bugs.webkit.org/show_bug.cgi?id=67171

        Reviewed by Simon Fraser.

        Removed runLoopObserver for requestAnimationFrame. It's now
        done by a Timer in ScriptedAnimationController in WebCore.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::~WebPage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:

2011-09-09  Fady Samuel  <fsamuel@chromium.org>

        Move pageScaleFactor code from Frame.{h|cpp} to Page.{h|cpp}
        https://bugs.webkit.org/show_bug.cgi?id=67250

        Reviewed by Simon Fraser.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scalePage):
        (WebKit::WebPage::pageScaleFactor):

2011-09-09  Mark Hahnenberg  <mhahnenberg@apple.com>

        Unzip initialization lists and constructors in JSCell hierarchy (5/7)
        https://bugs.webkit.org/show_bug.cgi?id=67420

        Reviewed by Geoffrey Garen.

        Completed the fifth level of the refactoring to add finishCreation() 
        methods to all classes within the JSCell hierarchy with non-trivial 
        constructor bodies.

        This primarily consists of pushing the calls to finishCreation() down 
        into the constructors of the subclasses of the second level of the hierarchy 
        as well as pulling the finishCreation() calls out into the class's corresponding
        create() method if it has one.  Doing both simultaneously allows us to 
        maintain the invariant that the finishCreation() method chain is called exactly 
        once during the creation of an object, since calling it any other number of 
        times (0, 2, or more) will cause an assertion failure.

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

2011-09-08  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/9742393> Spell checking a text area causes the page to reload

        Ensure that m_pendingLearnOrIgnoreWordMessageCount is incremented when we use
        executeEditCommand to ignore a word. This will ensure that WebPageProxy::ignoreWord
        is expecting to be called, and will not turn around and terminate the web process.

        Reviewed by Anders Carlsson.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::executeEditCommand):

2011-09-08  Sam Weinig  <sam@webkit.org>

        Remove accidentally committed typo.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::waitForSyncReply):

2011-09-08  Brian Weinstein  <bweinstein@apple.com>

        WebKit2: Assertion when calling didPerform*Redirect on null source/destination URL string
        https://bugs.webkit.org/show_bug.cgi?id=67794
        <rdar://problem/9892024>
        
        Don't call didPerformClientRedirect or didPerformServerRedirect when source or destination URL string
        is empty or null.
        
        If we call didPerformClientRedirect or didPerformServerRedirect when the source or destination is null,
        it causes an assert in WKURLCF::WKURLCopyCFURL when we try to convert the WKURLRef into a CFURLRef.

        Reviewed by Brady Eidson.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::didPerformClientRedirect): Return early if the source or destination URL string is empty or null.
        (WebKit::WebContext::didPerformServerRedirect): Ditto.

2011-09-08  Sam Weinig  <sam@webkit.org>

        Remove the Completion object from JSC, I have never liked it
        https://bugs.webkit.org/show_bug.cgi?id=67755

        Reviewed by Gavin Barraclough.

        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::evaluate):

2011-09-08  Anders Carlsson  <andersca@apple.com>

        Don't release the modal placeholder window if it's closed
        https://bugs.webkit.org/show_bug.cgi?id=67801
        <rdar://problem/10088059>

        Reviewed by Adam Roben.

        This is a speculative fix - nothing should really be able to close the modal placeholder window.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::beginModal):

2011-09-07  Alexei Svitkine  <asvitkine@chromium.org>

        Add test infrastructure to test rubber-banding overhang drawing along with layout tests for existing Chromium Mac overhang drawing in the non-gpu path.
        https://bugs.webkit.org/show_bug.cgi?id=67511

        Reviewed by Dimitri Glazkov.

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

2011-09-06  Oliver Hunt  <oliver@apple.com>

        Remove JSObjectWithGlobalObject
        https://bugs.webkit.org/show_bug.cgi?id=67689

        Reviewed by Geoff Garen.

        Remove JSObjectWithGlobalObject usage.

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

2011-09-05  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt][WK2] Make TiledDrawingArea request tiles only in the direction the viewport is panned to.
        https://bugs.webkit.org/show_bug.cgi?id=67606

        TiledBackingStore previously used different values for horizontal and vertial multiplication
        to calculate the cover area. 
        This patch replaces this mechanism, used to give a bigger panning range to vertical panning,
        with the possibility to use the motion vector of the viewport to request tiles ahead instead.
        This allows economies on rendering resources as tiles won't be rendered beside the trajectory
        of the viewport.

        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebViewPrivate::QTouchWebViewPrivate):
        (QTouchWebViewPrivate::_q_viewportMotionVectorChanged):
        * UIProcess/API/qt/qtouchwebview.h:
        * UIProcess/API/qt/qtouchwebview_p.h:
        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::setVisibleContentRectMotionVector):
        * UIProcess/TiledDrawingAreaProxy.h:
        * UIProcess/qt/ViewportInteractionEngine.cpp:
        (WebKit::ViewportInteractionEngine::panGestureRequestUpdate):
        (WebKit::ViewportInteractionEngine::panGestureEnded):
        (WebKit::ViewportInteractionEngine::pinchGestureStarted):
        * UIProcess/qt/ViewportInteractionEngine.h:
        * UIProcess/qt/qtouchwebpageproxy.cpp:
        (QTouchWebPageProxy::setVisibleContentRectMotionVector):
        * UIProcess/qt/qtouchwebpageproxy.h:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::setVisibleContentRectMotionVector):
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/TiledDrawingArea.cpp:
        (WebKit::TiledDrawingArea::setVisibleContentRectMotionVector):
        * WebProcess/WebPage/TiledDrawingArea.h:

2011-09-01  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] TiledBackingStore: Import the resizeEdgeTiles logic from TiledDrawindAreaProxy.
        https://bugs.webkit.org/show_bug.cgi?id=67416

        Reviewed by Kenneth Rohde Christiansen.

        Original code by Antti Koivisto.
        With the current code, when the page is layouted during load, edge tiles will
        get removed instead of continuing to show their front buffer while the tile
        is being rendered for the new size.

        * WebProcess/WebPage/TiledBackingStoreRemoteTile.cpp:
        (WebKit::TiledBackingStoreRemoteTile::updateBackBuffer):
        (WebKit::TiledBackingStoreRemoteTile::resize):
        * WebProcess/WebPage/TiledBackingStoreRemoteTile.h:

2011-09-01  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        TiledDrawingArea: Fix issues where the tiles of the previous scale would be removed too early.
        https://bugs.webkit.org/show_bug.cgi?id=67390

        Reviewed by Tor Arne Vestbø.

        The two issues addresssed are:
        - The previous instance of the tile backing store would be destroyed in createTile which
          would send removeTile messages for all its tiles before the DidRenderFrame message is sent for the new tiles.
        - When quickly changing the scale a second time after a scale change, the previous tile set would
          be replaced by the current incomplete tile set which may contain no tiles at all.
        * WebProcess/WebPage/TiledDrawingArea.cpp:
        (WebKit::TiledDrawingArea::setVisibleContentRectAndScale):
        (WebKit::TiledDrawingArea::tiledBackingStorePaintEnd):
        (WebKit::TiledDrawingArea::createTile):

2011-08-30  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt][WK2] The scene graph is rendered continuously even when the page is idle.
        https://bugs.webkit.org/show_bug.cgi?id=67195

        Reviewed by Tor Arne Vestbø.

        Since tiledBackingStorePaintEnd is called even when no tile is dirty, the TiledDrawingArea
        and its proxy are looping over DidRenderFrame and RenderNextFrame messages.
        This causes QSGItem::update() to be called and consumes a lot of useless CPU cycles on the UI process.

        Introduce a bool to send DidRenderFrame only when dirty content was rendered.

        * WebProcess/WebPage/TiledDrawingArea.cpp:
        (WebKit::TiledDrawingArea::TiledDrawingArea):
        (WebKit::TiledDrawingArea::tiledBackingStorePaint):
        (WebKit::TiledDrawingArea::tiledBackingStorePaintEnd):
        * WebProcess/WebPage/TiledDrawingArea.h:

2011-08-30  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt][WK2] Make sure that the visible content rect and the content scale get to the web process in one single message.
        https://bugs.webkit.org/show_bug.cgi?id=67189

        Reviewed by Kenneth Rohde Christiansen.

        The TiledBackingStore needs to know the screen size of the viewport to know how many tiles to
        create, and since the visible content rect is given in page coordinates, the contents scale is
        necessary to calculate the viewport size.
        Both the rect and the scale then need to arrive to the web process at the same time to prevent
        picking the new visible rect with the old scale or vice-versa which can produce a huge viewport size
        and create/render an insane amount of tiles.

        Things this patch does:
        - Merge the visible contents rect and content scale handling together.
        - Make QTouchWebView responsible for telling those viewport values to the web process instead of QTouchWebPage.
        - Prevent updating the viewport in ViewportInteractionEngine while a pinch is in progress and update the viewport at the end.

        * UIProcess/API/qt/qtouchwebpage.cpp:
        * UIProcess/API/qt/qtouchwebpage.h:
        * UIProcess/API/qt/qtouchwebpage_p.h:
        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebViewPrivate::QTouchWebViewPrivate):
        (QTouchWebViewPrivate::_q_viewportUpdated):
        (QTouchWebView::geometryChanged):
        * UIProcess/API/qt/qtouchwebview.h:
        * UIProcess/API/qt/qtouchwebview_p.h:
        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::setVisibleContentRectAndScale):
        * UIProcess/TiledDrawingAreaProxy.h:
        * UIProcess/qt/ViewportInteractionEngine.cpp:
        (WebKit::ViewportInteractionEngine::ViewportInteractionEngine):
        (WebKit::ViewportInteractionEngine::~ViewportInteractionEngine): Allows OwnPtr with the forward declaration of ViewportUpdateGuard.
        (WebKit::ViewportInteractionEngine::setConstraints):
        (WebKit::ViewportInteractionEngine::pinchGestureStarted):
        (WebKit::ViewportInteractionEngine::pinchGestureEnded):
        (WebKit::ViewportInteractionEngine::contentViewportChanged):
        * UIProcess/qt/ViewportInteractionEngine.h:
        * UIProcess/qt/qtouchwebpageproxy.cpp:
        (QTouchWebPageProxy::setVisibleContentRectAndScale):
        * UIProcess/qt/qtouchwebpageproxy.h:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::setVisibleContentRectAndScale):
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/TiledDrawingArea.cpp:
        (WebKit::TiledDrawingArea::setVisibleContentRectAndScale):
        * WebProcess/WebPage/TiledDrawingArea.h:

2011-08-29  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt][WK2] Rename SGAgent to SGUpdateQueue to sharpen it's responsability.
        https://bugs.webkit.org/show_bug.cgi?id=67122

        Reviewed by Tor Arne Vestbø.

        * UIProcess/API/qt/qtouchwebpage.cpp:
        (QTouchWebPage::updatePaintNode):
        (QTouchWebPagePrivate::QTouchWebPagePrivate):
        * UIProcess/API/qt/qtouchwebpage_p.h:
        * UIProcess/qt/SGUpdateQueue.cpp: Renamed from Source/WebKit2/UIProcess/qt/SGAgent.cpp.
        (WebKit::NodeUpdateCreateTile::NodeUpdateCreateTile):
        (WebKit::NodeUpdateRemoveTile::NodeUpdateRemoveTile):
        (WebKit::NodeUpdateSetBackBuffer::NodeUpdateSetBackBuffer):
        (WebKit::NodeUpdateSwapTileBuffers::NodeUpdateSwapTileBuffers):
        (WebKit::SGUpdateQueue::SGUpdateQueue):
        (WebKit::SGUpdateQueue::createTileNode):
        (WebKit::SGUpdateQueue::removeTileNode):
        (WebKit::SGUpdateQueue::setNodeBackBuffer):
        (WebKit::SGUpdateQueue::swapTileBuffers):
        (WebKit::SGUpdateQueue::applyUpdates):
        (WebKit::SGUpdateQueue::getScaleNode):
        * UIProcess/qt/SGUpdateQueue.h: Renamed from Source/WebKit2/UIProcess/qt/SGAgent.h.
        (WebKit::SGUpdateQueue::isSwapPending):
        (WebKit::NodeUpdate::NodeUpdate):
        (WebKit::NodeUpdate::~NodeUpdate):
        * UIProcess/qt/TiledDrawingAreaProxyQt.cpp:
        (WebKit::TiledDrawingAreaProxy::updateWebView):
        (WebKit::TiledDrawingAreaProxy::createTile):
        (WebKit::TiledDrawingAreaProxy::updateTile):
        (WebKit::TiledDrawingAreaProxy::didRenderFrame):
        (WebKit::TiledDrawingAreaProxy::removeTile):
        * UIProcess/qt/TouchViewInterface.cpp:
        (WebKit::TouchViewInterface::sceneGraphUpdateQueue):
        * UIProcess/qt/TouchViewInterface.h:
        * WebKit2.pro:

2011-09-07  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt] Unreviewed suppression of an unnecessary debug output. 

        * UIProcess/API/qt/tests/qmltests/qmltests.pro:

2011-09-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r94627 and r94632.
        http://trac.webkit.org/changeset/94627
        http://trac.webkit.org/changeset/94632
        https://bugs.webkit.org/show_bug.cgi?id=67698

        It broke tests on GTK and Qt (Requested by Ossy on #webkit).

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

2011-09-06  Ryosuke Niwa  <rniwa@webkit.org>

        fast/forms/suggested-value-crash.html crashes on Windows
        https://bugs.webkit.org/show_bug.cgi?id=67688

        Reviewed by Adam Barth.

        Removed sybmols for inputTag and textareaTag. Added the symbol for StringImpl::equal.

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

2011-09-06  Mark Hahnenberg  <mhahnenberg@apple.com>

        Unzip initialization lists and constructors in JSCell hierarchy (5/7)
        https://bugs.webkit.org/show_bug.cgi?id=67420

        Reviewed by Geoffrey Garen.

        Completed the fifth level of the refactoring to add finishCreation() 
        methods to all classes within the JSCell hierarchy with non-trivial 
        constructor bodies.

        This primarily consists of pushing the calls to finishCreation() down 
        into the constructors of the subclasses of the second level of the hierarchy 
        as well as pulling the finishCreation() calls out into the class's corresponding
        create() method if it has one.  Doing both simultaneously allows us to 
        maintain the invariant that the finishCreation() method chain is called exactly 
        once during the creation of an object, since calling it any other number of 
        times (0, 2, or more) will cause an assertion failure.

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

2011-09-06  Ryosuke Niwa  <rniwa@webkit.org>

        Rename confirmCompositionWithoutDisturbingSelection to cancelComposition
        https://bugs.webkit.org/show_bug.cgi?id=67569

        Reviewed by Antonio Gomes.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView resignFirstResponder]):
        (-[WKView _updateTextInputStateIncludingSecureInputState:]):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::cancelComposition):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::cancelComposition):

2011-09-05  Oliver Hunt  <oliver@apple.com>

        An object's structure should reference the global object responsible for its creation
        https://bugs.webkit.org/show_bug.cgi?id=67624

        Reviewed by Gavin Barraclough.

        Update for new Structure::create globalObject parameter.

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

2011-09-06  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r94274): FormManagerTest.PreviewForm and FillFormNonEmptyField fail on chromium
        https://bugs.webkit.org/show_bug.cgi?id=67453

        Reviewed by Kent Tamura.

        Add symbols for internals.

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

2011-09-06  Wajahat Siddiqui  <mdwajahatali.siddiqui@motorola.com>

        [GTK] Use soup_session_add_feature_by_type uniformly in WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=67593

        Reviewed by Martin Robinson.

        Using soup_session_add_feature_by_type for adding all soup features 
        instead of adding using GRefPtr.

        * WebProcess/gtk/WebProcessMainGtk.cpp:
        (WebKit::WebProcessMainGtk):

2011-09-05  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] Add pixel test support
        https://bugs.webkit.org/show_bug.cgi?id=66283

        Reviewed by Andreas Kling.

        * Shared/API/c/qt/WKImageQt.cpp: Added.
        (WKImageCreateQImage):  C style (private) API to get the contents of the backing
        store as an image.
        * Shared/API/c/qt/WKImageQt.h: Added.
        * Shared/qt/ShareableBitmapQt.cpp:
        (WebKit::ShareableBitmap::createImage): Typo. Remove useless ifdef.
        * WebKit2API.pri:

2011-09-05  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Fix the build

        Rubber-stamped by Csaba Osztrogonác.

        * DerivedSources.pro: Add missing PluginProcessConnection.messages.in after r94456.

2011-09-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r94473.
        http://trac.webkit.org/changeset/94473
        https://bugs.webkit.org/show_bug.cgi?id=67547

        Putting http://trac.webkit.org/changeset/94454 back in as
        http://trac.webkit.org/changeset/94472 fixed the problem
        (Requested by msaboff on #webkit).

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGarbageCollectJavaScriptObjects):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::garbageCollectJavaScriptObjects):
        * UIProcess/WebContext.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::garbageCollectJavaScriptObjects):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2011-09-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r94454.
        http://trac.webkit.org/changeset/94454
        https://bugs.webkit.org/show_bug.cgi?id=67546

        "Broke Windows and SnowLeopard, also no reply on the bug."
        (Requested by jchaffraix on #webkit).

        * UIProcess/API/C/WKContext.cpp:
        * UIProcess/API/C/WKContext.h:
        * UIProcess/WebContext.cpp:
        * UIProcess/WebContext.h:
        * WebProcess/WebProcess.cpp:
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2011-09-02  Michael Saboff  <msaboff@apple.com>

        Fixed release build by removing #ifndef NDEBUG to
        allow definition of gcController().

        Rubber-stamp by Sam Weinig.

        * WebProcess/WebProcess.cpp:

2011-09-02  Anders Carlsson  <andersca@apple.com>

        NPN_SetException doesn't work with OOP plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=67524

        Reviewed by Sam Weinig.

        * DerivedSources.make:
        Add PluginProcessConnection.messages.in.

        * GNUmakefile.am:
        Add generated files.

        * Platform/CoreIPC/MessageID.h:
        Add MessageClassPluginProcessConnection.

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::initialize):
        Set the set exception function.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::ConnectionStack::current):
        (WebKit::ConnectionStack::CurrentConnectionPusher::CurrentConnectionPusher):
        (WebKit::ConnectionStack::CurrentConnectionPusher::~CurrentConnectionPusher):
        Add a helper class for managing a stack of CoreIPC connections, along with a RAII
        object to push/pop connections onto it.

        (WebKit::connectionStack):
        Add getter.

        (WebKit::WebProcessConnection::setGlobalException):
        Get the current connection and send a PluginProcessConnection::SetException message to it.

        (WebKit::WebProcessConnection::didReceiveMessage):
        (WebKit::WebProcessConnection::didReceiveSyncMessage):
        Create connection pushers.

        * PluginProcess/WebProcessConnection.h:
        Add setGlobalException.

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

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::setSetExceptionFunction):
        New function for setting the 'setException' function.

        (WebKit::NetscapePlugin::setException):
        Call the 'setException' function.

        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::didReceiveSyncMessage):
        Call the message receiver function.

        (WebKit::PluginProcessConnection::setException):
        Call the NPRuntimeObjectMap.
        
        * WebProcess/Plugins/PluginProcessConnection.messages.in:
        Add new messages file.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        When not using the plug-in process, make sure to call NetscapePlugin::setSetExceptionFunction.

2011-09-02  Ada Chan  <adachan@apple.com>

        Add WKContextGarbageCollectJavaScriptObjects() which does a garbage collection in the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=67526

        Reviewed by Darin Adler.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGarbageCollectJavaScriptObjects):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::garbageCollectJavaScriptObjects): Send a message to WebProcess to garbage collect JS objects.
        * UIProcess/WebContext.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::garbageCollectJavaScriptObjects): Call GCController::garbageCollectNow().
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in: Add GarbageCollectJavaScriptObjects message.

2011-09-02  Anders Carlsson  <andersca@apple.com>

        Remove plug-in paths from web process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=67518

        Reviewed by Adam Roben.

        Plug-ins are never accessed from the web process, so remove plug-in paths from the sandbox profile.

        * WebProcess/com.apple.WebProcess.sb:

2011-09-02  Anders Carlsson  <andersca@apple.com>

        Assertion/crash when running netscape-plugin-property-access-exception.html test
        https://bugs.webkit.org/show_bug.cgi?id=67517

        Reviewed by Adam Roben.

        Make sure to initialize the NPVariant in case the plug-in returns true from NP_GetProperty,
        but doesn't set the result NPVariant to anything.

        * Shared/Plugins/NPObjectMessageReceiver.cpp:
        (WebKit::NPObjectMessageReceiver::getProperty):

2011-09-02  Anders Carlsson  <andersca@apple.com>

        The private browsing state isn't saved when it changes
        https://bugs.webkit.org/show_bug.cgi?id=67508

        Reviewed by Sam Weinig.

        Store the new private browsing state so subsequent queries for it
        will return the right value.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::privateBrowsingStateChanged):

2011-09-02  Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com>

        [WK2] Anchor elements doesn't get focus on TAB key press.
        https://bugs.webkit.org/show_bug.cgi?id=66949

        Reviewed by Adam Roben.

        Setting the default property value of TabsToLinks to true
        only for GTK platform since Win & Mac platforms doesn't want 
        it to be set to true by default.

        * Shared/WebPreferencesStore.h:
        Set the default value of key TabsToLinks to true for GTK platform only.

2011-09-02  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] Cannot gathering glyph page statistics
        https://bugs.webkit.org/show_bug.cgi?id=67475

        Rubber stamped by Csaba Osztrogonác.

        Fix Qt WK2 build without having QRAWFONT.

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

2011-09-02  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/67467> WebProcessProxy::secItemCopyMatching / WebProcessProxy::secItemAdd
        leak the results of the APIs they wrap.

        Reviewed by Dan Bernstein.

        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::secItemCopyMatching): Adopt the result of SecItemCopyMatching in to a
        RetainPtr to ensure it gets released at the appropriate time.
        (WebKit::WebProcessProxy::secItemAdd): Ditto for SecItemAdd.

2011-09-01  Ada Chan  <adachan@apple.com>

        Cut down the ifdefs in WebKit::getWebCoreMemoryCacheStatistics() now that 
        MemoryCache::Statistics always has the xslStyleSheets field.

        Reviewed by Darin Adler.

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

2011-09-01  Mark Hahnenberg  <mhahnenberg@apple.com>

        Unzip initialization lists and constructors in JSCell hierarchy (4/7)
        https://bugs.webkit.org/show_bug.cgi?id=67174

        Reviewed by Oliver Hunt.

        Completed the fourth level of the refactoring to add finishCreation() 
        methods to all classes within the JSCell hierarchy with non-trivial 
        constructor bodies.

        This primarily consists of pushing the calls to finishCreation() down 
        into the constructors of the subclasses of the second level of the hierarchy 
        as well as pulling the finishCreation() calls out into the class's corresponding
        create() method if it has one.  Doing both simultaneously allows us to 
        maintain the invariant that the finishCreation() method chain is called exactly 
        once during the creation of an object, since calling it any other number of 
        times (0, 2, or more) will cause an assertion failure.

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

2011-09-01  Ada Chan  <adachan@apple.com>

        Gather memory cache statistics in WebProcess::getWebCoreStatistics().
        https://bugs.webkit.org/show_bug.cgi?id=67160

        Reviewed by Darin Adler.

        Encode and decode webCoreCacheStatistics data member in StatisticsData.
        * Shared/StatisticsData.cpp:
        (WebKit::StatisticsData::encode):
        (WebKit::StatisticsData::decode):
        * Shared/StatisticsData.h:

        Convert the cache statistics data into an ImmutableArray and return it in WebContext::didGetWebCoreStatistics().
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::didGetWebCoreStatistics):

        Store memory cache statistics into the StatisticsData object.
        * WebProcess/WebProcess.cpp:
        (WebKit::getWebCoreMemoryCacheStatistics):
        (WebKit::WebProcess::getWebCoreStatistics):

2011-09-01  Tim Horton  <timothy_horton@apple.com>

        REGRESSION: Rendering artifacts on a rotated, pattern filled shape
        https://bugs.webkit.org/show_bug.cgi?id=53055
        <rdar://problem/8910917>

        Reviewed by Simon Fraser.

        Introduce wkCGPatternCreateWithImageAndTransform.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-09-01  Gopal Raghavan  <gopal.1.raghavan@nokia.com>

        [Qt] TouchWebView crashes with segmentation fault
        https://bugs.webkit.org/show_bug.cgi?id=67308

        Reviewed by Benjamin Poulain.

        If you instantiate TouchWebView element with height and width in a qml file and
        load a url it crashes.
        The functions setWidth() and setHeight() are called sequentially therefore it can happen
        that computeViewportAttributes was called with a size like (width, 0) breaking the
        assumption of the function that the size is valid. The patch makes sure we compute the
        viewport when both height and width are valid.

        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebViewPrivate::updateViewportConstraints):
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_load.qml: Added.
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadNegativeSizeView.qml: Added.
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadZeroSizeView.qml: Added.
        * UIProcess/API/qt/tests/qmltests/qmltests.pro:

2011-09-01  Ada Chan  <adachan@apple.com>

        Gather JavaScript, FastMalloc, icon, font, and glyph page statistics in WebProcess::getWebCoreStatistics().
        https://bugs.webkit.org/show_bug.cgi?id=67160

        Reviewed by Darin Adler.

        Encode and decode the data members in StatisticsData.
        * Shared/StatisticsData.cpp:
        (WebKit::StatisticsData::encode):
        (WebKit::StatisticsData::decode):
        (WebKit::StatisticsData::StatisticsData):

        Add three data members to StatisticsData:
        - statisticsNumbers: Map containing statistics values that are numbers, mapped by their names, such as 
        JavaScriptObjectsCount, CachedFontDataCount, etc.
        - javaScriptProtectedObjectTypeCounts
        - javaScriptObjectTypeCounts
        * Shared/StatisticsData.h:

        Create a WK::Dictionary containing statistics values mapped by their names and return that dictionary
        in WebContext::didGetWebCoreStatistics().
        * UIProcess/WebContext.cpp:
        (WebKit::createDictionaryFromHashMap):
        (WebKit::WebContext::didGetWebCoreStatistics):

        Package JavaScript, FastMalloc, icon, font, and glyph page statistics into a StatisticsData object
        and send it to the UIProcess.
        * WebProcess/WebProcess.cpp:
        (WebKit::fromCountedSetToHashMap):
        (WebKit::WebProcess::getWebCoreStatistics):

2011-09-01  Xan Lopez  <xlopez@igalia.com>

        [GTK] Add XRender lib dependencies explicitly

        Reviewed by Philippe Normand.

        This is needed when using the GNU/Gold linker, since we use
        XRender directly.

        * GNUmakefile.am:

2011-08-31  Anders Carlsson  <andersca@apple.com>

        Jagged text shown in find-in-page highlight
        https://bugs.webkit.org/show_bug.cgi?id=67347
        <rdar://problem/9870444>

        Reviewed by Dan Bernstein.

        When painting each text line in the find indicator, make sure to clip it against
        the text rect and not paint the entire rect over and over.

        * UIProcess/FindIndicator.cpp:
        (WebKit::FindIndicator::draw):

2011-08-31  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=67322
        Re-name overrideBackingScaleFactor

        Reviewed by John Sullivan.

        API is now WKPageSetCustomBackingScaleFactor() and WKPageGetBackingScaleFactor() 
        which returns the custom scale factor if one was set, and the intrinsic scale 
        factor otherwise. 
        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetBackingScaleFactor):
        (WKPageSetCustomBackingScaleFactor):
        * UIProcess/API/C/WKPage.h:

        Re-named _deviceScaleFactor to _intrinsicDeviceScaleFactor since it only ever 
        refers to the intrinsic value.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewDidMoveToWindow]):
        (-[WKView _windowDidChangeResolution:]):
        (-[WKView _intrinsicDeviceScaleFactor]):

        WebPageProxy stores both the customDeviceScaleFactor and the 
        intrinsicDeviceScaleFactor. deviceScaleFactor() returns the appropriate value that 
        should be the one used. 
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setIntrinsicDeviceScaleFactor):
        (WebKit::WebPageProxy::deviceScaleFactor):
        (WebKit::WebPageProxy::setCustomDeviceScaleFactor):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:

2011-08-31  Anders Carlsson  <andersca@apple.com>

        REGRESSION(r93902): Can't open external links on gmail
        https://bugs.webkit.org/show_bug.cgi?id=67234
        <rdar://problem/10053636>

        Reviewed by Alexey Proskuryakov.

        * Shared/cf/ArgumentCodersCF.cpp:
        (CoreIPC::decode):
        If we encounter an empty URL string, create an empty url by using NSURL, just
        like we do in WebCore when converting an empty KURL to an NSURL.

        * WebKit2.xcodeproj/project.pbxproj:
        Compile ArgumentCodersCF.cpp as Objective-C++ for now.

2011-08-30  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=67150
        Would like API to use a custom device scale factor for a particular WebView/WKView
        -and corresponding-
        <rdar://problem/10041016>

        Reviewed by Darin Adler.

        New API is setOverrideBackingScaleFactor() on WKPage
        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetOverrideBackingScaleFactor):
        (WKPageSetOverrideBackingScaleFactor):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::deviceScaleFactor):
        (WebKit::WebPageProxy::setOverrideBackingScaleFactor):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::overrideBackingScaleFactor):

2011-08-30  Aaron Colwell  <acolwell@chromium.org>

        Add MediaSource API to HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=64731

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig:

2011-08-30  Ada Chan  <adachan@apple.com>

        Laying some groundwork to fetch performance statistics from WebProcess.
        https://bugs.webkit.org/show_bug.cgi?id=67160

        Reviewed by Darin Adler.

        Add WKContextGetStatistics() which sends a message to WebProcess to fetch the performance statistics.
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetStatistics):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::getWebCoreStatistics):
        (WebKit::WebContext::didGetWebCoreStatistics):
        * UIProcess/WebContext.h:
        * UIProcess/WebContext.messages.in: Add the DidGetWebCoreStatistics message that WebProcess can send when it has
        the performance statistics ready.

        Add WebProcess::getWebCoreStatistics().  Currently it just sends back an empty StatisticsData object.
        It will gather the performance statistics to store in the StatisticsData object in a future patch.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::getWebCoreStatistics):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

        Add the skeleton for StatisticsData.
        * Scripts/webkit2/messages.py:
        * Shared/StatisticsData.cpp: Added.
        (WebKit::StatisticsData::encode):
        (WebKit::StatisticsData::decode):
        (WebKit::StatisticsData::StatisticsData):
        * Shared/StatisticsData.h: Added.

        Add StatisticsData.h/cpp to project.
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2011-08-29  Alexey Proskuryakov  <ap@apple.com>

        DumpRenderTree should begin each test with an empty cookie store
        https://bugs.webkit.org/show_bug.cgi?id=63545
        <rdar://problem/5666907>

        Reviewed by Darin Adler.

        * WebProcess/Cookies/cf/WebCookieManagerCFNet.cpp:
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManager::platformGetHTTPCookieAcceptPolicy):
        Updated to use currentCFHTTPCookieStorage() instead of privateBrowsingCookieStorage().

        * WebProcess/Cookies/mac/WebCookieManagerMac.mm:
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
        There is no no need to access cookie storage through session manually - we already have code
        for that in WebCore.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSwitchNetworkLoaderToNewTestingSession):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::switchNetworkLoaderToNewTestingSession):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        Exposed bundle SPI to use a private default session. It's separate from private browsing,
        because some tests enable the latter, and we don't want to mix them up.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformHasLocalDataForURL):
        (WebKit::cachedResponseForURL):
        Updated to use currentStorageSession() instead of privateBrowsingStorageSession().

        * WebProcess/win/WebProcessWin.cpp: (WebKit::WebProcess::platformInitializeWebProcess):
        ResourceHandle::setDefaultStorageSession() no longer steals a reference, so retain it properly.

2011-08-30  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt][WK2] Make mouse over work again for QDesktopWebView.
        https://bugs.webkit.org/show_bug.cgi?id=67200

        Reviewed by Noam Rosenthal.

        The API has changed after QGraphicsView, SceneGraph sends
        QHoverEvents now.

        * UIProcess/qt/qdesktopwebpageproxy.cpp:
        (QDesktopWebPageProxy::handleEvent):
        (QDesktopWebPageProxy::handleHoverMoveEvent):
        * UIProcess/qt/qdesktopwebpageproxy.h:

2011-08-30  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        The unused ScrollView* argument can and should be removed from
        scrollRectIntoView.
        https://bugs.webkit.org/show_bug.cgi?id=67117

        Reviewed by Darin Adler.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::scrollRectIntoView):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2011-08-29  Ryosuke Niwa  <rniwa@webkit.org>

        Another Windows build fix after r94047.

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

2011-08-29  Ryosuke Niwa  <rniwa@webkit.org>

        Export more symbols for r94038.

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

2011-08-29  Ryosuke Niwa  <rniwa@webkit.org>

        Windows build fix for r94038.

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

2011-08-29  Gopal Raghavan  <gopal.1.raghavan@nokia.com>


        [Qt] QTouchWebView url property test missing
        https://bugs.webkit.org/show_bug.cgi?id=67159

        Reviewed by Noam Rosenthal.

        Added qml test case to check url property of QTouchWebView. Since url is a readonly property, we make sure that it's set after load() is called.

        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_properties.qml:

2011-08-29  Gopal Raghavan  <gopal.1.raghavan@nokia.com>

        [Qt] QDesktopWebView url property test missing
        https://bugs.webkit.org/show_bug.cgi?id=67155

        Reviewed by Noam Rosenthal.

        Added qml test case to check url property. Since url is a readonly property, we make sure that it's set after load() is called.

        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_properties.qml:

2011-08-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r93987, r93992, r93995, r93998, and
        r93999.
        http://trac.webkit.org/changeset/93987
        http://trac.webkit.org/changeset/93992
        http://trac.webkit.org/changeset/93995
        http://trac.webkit.org/changeset/93998
        http://trac.webkit.org/changeset/93999
        https://bugs.webkit.org/show_bug.cgi?id=67147

        Many failing tests (Requested by ap on #webkit).

        * WebProcess/Cookies/cf/WebCookieManagerCFNet.cpp:
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManager::platformGetHTTPCookieAcceptPolicy):
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):

2011-08-26  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Build WebKit2 unconditionally
        https://bugs.webkit.org/show_bug.cgi?id=62749

        Build WebKit2 by default. This will make the bots build it and catch
        build errors when they occur.

        * GNUmakefile.am: Enable WebKit2 by default, but remove references to the WebKit2
        PC file, which should not be shipped until WebKit2 is actually shipped officially.

2011-08-29  Alexey Proskuryakov  <ap@apple.com>

        Windows build fix.

        * WebProcess/Cookies/cf/WebCookieManagerCFNet.cpp:
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManager::platformGetHTTPCookieAcceptPolicy):
        Updated for new function name and signature: currentCFHTTPCookieStorage().

2011-08-26  Alexey Proskuryakov  <ap@apple.com>

        DumpRenderTree should begin each test with an empty cookie store
        https://bugs.webkit.org/show_bug.cgi?id=63545
        <rdar://problem/5666907>

        Reviewed by Darin Adler.

        * WebProcess/win/WebProcessWin.cpp: (WebKit::WebProcess::platformInitializeWebProcess):
        ResourceHandle::setDefaultStorageSession() no longer steals a reference, so retain it properly.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleUsePrivateSessionForNetworkLoading):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::usePrivateSessionForNetworkLoading):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        Exposed bundle SPI to use a private default session. It's separate from private browsing,
        because some tests enable the latter, and we don't want to mix them up.

2011-08-29  Chris Marrin  <cmarrin@apple.com>

        Fixed a build problem caused by http://trac.webkit.org/changeset/93980

        Unreviewed.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:

2011-08-23  Chris Marrin  <cmarrin@apple.com>

        [mac] requestAnimationFrame support for mac port
        https://bugs.webkit.org/show_bug.cgi?id=59146

        Reviewed by Simon Fraser.

        Implement requestAnimationFrame for WebKit2. Add a
        CFRunLoopObserver to WebPage, which runs just before
        the syncCompositingState RLO and calls into the 
        ScriptedAnimationController if scheduleAnimation() has
        been called.

        * Configurations/FeatureDefines.xcconfig:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::scheduleAnimation):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::~WebPage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::requestAnimationFrameRunLoopObserverCallback):
        (WebKit::WebPage::scheduleAnimation):
        (WebKit::WebPage::unscheduleAnimation):
        * WebProcess/WebPage/ca/mac/LayerTreeHostCAMac.cpp:
        * WebProcess/WebPage/ca/mac/LayerTreeHostCAMac.h:

2011-08-29  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] NPAPI support doesn't honor the ENABLE_NETSCAPE_PLUGIN_API define in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=67123

        We could simply use the defines already in place for this.

        Reviewed by Andreas Kling.

        * WebKit2.pro:

2011-08-29  Vamshikrishna Yellenki  <vamshi@motorola.com>

        [GTK][WK2] Compilation error in WebKit2 GTK - Revision 93953
        https://bugs.webkit.org/show_bug.cgi?id=67111

        Reviewed by Martin Robinson.

        WebKit2 GTK build error.

        * WebProcess/WebCoreSupport/gtk/WebErrorsGtk.cpp:
        Include <WebCore/ResourceError.h> explicitly to remove WebCore::ResourceError
        inclusion error.

2011-08-28  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] Unreviewed build fix.

        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::init): Initialize the WKPageUIClient with memset
        to avoid missing initializer warning. The missing initializer is the
        result of using a version 0 WKPageUIClient while it has newer version (1).
        We have nothing to do with the callbacks in the new version so I voted
        for memset.
        * WebProcess/WebCoreSupport/qt/WebErrorsQt.cpp: Include ResourceError.h.

2011-08-26  Sam Weinig  <sam@webkit.org>

        Stop using custom NSErrors for WebKit2 WebErrors
        https://bugs.webkit.org/show_bug.cgi?id=67075

        Reviewed by Anders Carlsson.

        * WebProcess/WebCoreSupport/WebErrors.h:
        * WebProcess/WebCoreSupport/mac/WebErrorsMac.mm:
        (WebKit::createNSError):
        (WebKit::cancelledError):
        (WebKit::fileDoesNotExistError):
        (WebKit::blockedError):
        (WebKit::cannotShowURLError):
        (WebKit::interruptedForPolicyChangeError):
        (WebKit::cannotShowMIMETypeError):
        (WebKit::pluginWillHandleLoadError):
        There is no reason to use custom registered NSErrors anymore, so don't.

2011-08-26  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:

2011-08-26  Sam Weinig  <sam@webkit.org>

        Fold _webkit_initWithDomain into _webkit_errorWithDomain in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=67063

        Reviewed by Anders Carlsson.

        * WebProcess/WebCoreSupport/mac/WebErrorsMac.mm:
        (+[NSError _webkit_errorWithDomain:code:URL:]):

2011-08-26  Anders Carlsson  <andersca@apple.com>

        Implement NPN_ScheduleTimer/NPN_UnscheduleTimer
        https://bugs.webkit.org/show_bug.cgi?id=67062

        Reviewed by Sam Weinig.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_ScheduleTimer):
        Call NetscapePlugin::scheduleTimer.

        (WebKit::NPN_UnscheduleTimer):
        Call NetscapePlugin::unscheduleTimer.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin):
        Initialize m_nextTimerID.

        (WebKit::NetscapePlugin::Timer::start):
        Start the timer.

        (WebKit::NetscapePlugin::Timer::stop):
        Stop the timer.

        (WebKit::NetscapePlugin::Timer::timerFired):
        Call the right callback and unschedule the timer object if it's not a repeating timer.

        (WebKit::NetscapePlugin::scheduleTimer):
        Create a new timer and start it.

        (WebKit::NetscapePlugin::unscheduleTimer):
        Get the timer from the map and destroy it.
        
        (WebKit::NetscapePlugin::destroy):
        Destroy all timers.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        Add Timer class.

2011-08-26  Sam Weinig  <sam@webkit.org>

        Fix typo in Connection.cpp
        https://bugs.webkit.org/show_bug.cgi?id=67060

        Reviewed by Anders Carlsson.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::waitForSyncReply):
        We want timedOut, not timeout.  There is not a current way to cause this
        to be an issue. This issue was caught by the Clang Static Analyzer.

2011-08-26  Alice Liu  <alice.liu@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=66823
        Add the request info to the WebPageProxy::CreateNewPage message

        Reviewed by Anders Carlsson.

        Update function declarations with additional ResourceRequest parameter:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::createNewPage):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::createNewPage):
        * UIProcess/WebUIClient.h:

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createWindow): 
        Pass the ResourceRequest within the FrameLoadRequest.

2011-08-26  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt][WK2]REGRESSION(r93784): It made many tests crash
        https://bugs.webkit.org/show_bug.cgi?id=66958

        Reviewed by Anders Carlsson.

        Don't try to make sure the WebContext is deleted, for now the leak
        is intended and when multiple processes per context will be supported
        this leak should be fixed. This was the cause of DRT crashing on the bot,
        the context was deleted after the first test, letting other tests with nothing
        but a bad context.

        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::~QtWebPageProxy):

2011-08-26  Anders Carlsson  <andersca@apple.com>

        Fix handling of keyup events in the new Cocoa text input model
        https://bugs.webkit.org/show_bug.cgi?id=67045

        Reviewed by Sam Weinig.

        Use a counter instead of a boolean for deciding when to ignore keyup events, because
        if multiple keys are pressed simultaneously then we need to ignore more than one keyup event in a row.

        Also if a keyboard event is an autorepeating event we won't get a keyup event so don't increment the counter
        in that case.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformHandleKeyboardEvent):

2011-08-26  Jessie Berlin  <jberlin@apple.com>

        Gut WKPageCreateSnapshotOfVisibleContent so that it can be removed later.
        https://bugs.webkit.org/show_bug.cgi?id=66979.

        Removing the function altogether would break the nightlies.
        This patch removes the code behind it so that it is clear that
        WKPageCreateSnapshotOfVisibleContent should not be used, and so that the code isn't just
        left rotting in the tree.

        Reviewed by Brian Weinstein.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageCreateSnapshotOfVisibleContent):
        Return 0.
        * UIProcess/API/C/WKPagePrivate.h:
        Update the comment and add a link to the bug.

        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:

        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2011-08-25  Anders Carlsson  <andersca@apple.com>

        kNPEventStartIME doesn't work correctly for NPAPI
        https://bugs.webkit.org/show_bug.cgi?id=65264
        <rdar://problem/9996476>

        Reviewed by Sam Weinig.

        In order to remain compatible with older plug-ins, the updated input model won't
        be turned on unless a plug-in explicitly asks whether we support it. The plug-in must do
        this before any keyboard events have been processed.

        * PluginProcess/mac/PluginControllerProxyMac.mm:
        (WebKit::PluginControllerProxy::setComplexTextInputState):
        Add the CoreIPC::DispatchMessageEvenWhenWaitingForSyncReply flag to this message since we want
        the web process to handle it while it's waiting for a reply to the PluginControllerProxy::HandleMouseEvent
        synchronous message.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue):
        Implement the logic for when to turn off the legacy Cocoa text input model support.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin):
        Initialize m_ignoreNextKeyUpEvent to false.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        Add m_ignoreNextKeyUpEvent member variable.

        (WebKit::NetscapePlugin::hasHandledAKeyDownEvent):
        Add a getter.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformHandleKeyboardEvent):
        Don't send keydown and keyup events when complex text input is enabled in the updated model.

2011-08-25  Anders Carlsson  <andersca@apple.com>

        Correctly handle events in the updated Cocoa text input model
        https://bugs.webkit.org/show_bug.cgi?id=67005

        Reviewed by Sam Weinig.

        * UIProcess/API/mac/WKTextInputWindowController.mm:
        (-[WKTextInputPanel _interpretKeyEvent:usingLegacyCocoaTextInput:string:]):
        When using the updated model, always return a string even for 'simple' characters.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _tryHandlePluginComplexTextInputKeyDown:]):
        Only let the input method have a crack at the event in the legacy model.

2011-08-25  Jeff Miller  <jeffm@apple.com>

        Move Windows-specific WebPageProxy code to WebPageProxyWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=67002

        Reviewed by Brian Weinstein.

        * UIProcess/WebPageProxy.cpp: Moved Windows-only functions to WebPageProxyWin.cpp.
        
        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::WebPageProxy::firstRectForCharacterInSelectedRange): Moved from WebPageProxy.cpp.
        (WebKit::WebPageProxy::getSelectedText): Moved from WebPageProxy.cpp.
        (WebKit::WebPageProxy::gestureWillBegin): Moved from WebPageProxy.cpp.
        (WebKit::WebPageProxy::gestureDidScroll): Moved from WebPageProxy.cpp.
        (WebKit::WebPageProxy::gestureDidEnd): Moved from WebPageProxy.cpp.
        (WebKit::WebPageProxy::setGestureReachedScrollingLimit): Moved from WebPageProxy.cpp.
        (WebKit::WebPageProxy::startDragDrop): Moved from WebPageProxy.cpp.
        (WebKit::WebPageProxy::didChangeCompositionSelection): Moved from WebPageProxy.cpp.
        (WebKit::WebPageProxy::confirmComposition): Moved from WebPageProxy.cpp.
        (WebKit::WebPageProxy::setComposition): Moved from WebPageProxy.cpp.

2011-08-25  Anders Carlsson  <andersca@apple.com>

        Handle key-down events in the updated Cocoa text input model
        https://bugs.webkit.org/show_bug.cgi?id=67001

        Reviewed by Sam Weinig.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView performKeyEquivalent:]):
        Call _disableComplexTextInputIfNecessary so that we'll inform the plug-in that complex text
        input has been disabled.

        (-[WKView _disableComplexTextInputIfNecessary]):
        If the plug-in is using the updated Cocoa text input model specification, disable text input
        if the text input window has been dismissed for whatever reason.

        (-[WKView _tryHandlePluginComplexTextInputKeyDown:]):
        Call _disableComplexTextInputIfNecessary so that we'll inform the plug-in that complex text
        input has been disabled.
        
        (-[WKView _tryPostProcessPluginComplexTextInputKeyDown:]):
        If the plug-in is using the updated Cocoa text input model specification, let the input methods
        have a go at the keyboard event.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::setComplexTextInputEnabled):
        Actually set m_isComplexTextInputEnabled to the right value.

2011-08-25  Anders Carlsson  <andersca@apple.com>

        Factor code to send a key-down event to the plug-in out into a new function
        https://bugs.webkit.org/show_bug.cgi?id=66999

        Reviewed by Darin Adler.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _handlePluginComplexTextInputKeyDown:]):
        (-[WKView _tryHandlePluginComplexTextInputKeyDown:]):

2011-08-25  Anders Carlsson  <andersca@apple.com>

        WKView should keep track of the plug-in complex text input state
        https://bugs.webkit.org/show_bug.cgi?id=66990

        Reviewed by Sam Weinig.

        * UIProcess/API/mac/WKView.mm:
        Add a _pluginComplexTextInputState ivar to WKViewData.

        (-[WKView _setPluginComplexTextInputState:]):
        Set the _pluginComplexTextInputState variable. If text input is being disabled, send back an empty string to the plug-in.

        (-[WKView _setPluginComplexTextInputState:WebKit::pluginComplexTextInputIdentifier:]):
        Call -[WKView _setPluginComplexTextInputState:].

2011-08-25  Anders Carlsson  <andersca@apple.com>

        Move file internal methods to a class continuation in WKView
        https://bugs.webkit.org/show_bug.cgi?id=66983

        Reviewed by Dan Bernstein.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _deviceScaleFactor]):
        (-[WKView _setDrawingAreaSize:]):

2011-08-25  Anders Carlsson  <andersca@apple.com>

        More work on the updated Cocoa text input specification
        https://bugs.webkit.org/show_bug.cgi?id=66977

        Reviewed by Sam Weinig.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin):
        Initialize m_pluginWantsLegacyCocoaTextInput and m_hasHandledAKeyDownEvent.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        Add m_pluginWantsLegacyCocoaTextInput and m_hasHandledAKeyDownEvent.
        
        (WebKit::NetscapePlugin::setPluginWantsLegacyCocoaTextInput):
        Add setter. Not called yet.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformHandleKeyboardEvent):
        Set m_hasHandledAKeyDownEvent to true if we get a KeyDown event.

        (WebKit::NetscapePlugin::sendComplexTextInput):
        If the plug-in is using the updated Cocoa text input spec, we can disable text input here.

        (WebKit::NetscapePlugin::pluginFocusOrWindowFocusChanged):
        If the plug-in is using the updated Cocoa text input spec, text input is not enabled when
        the plug-in is focused.

        (WebKit::NetscapePlugin::setComplexTextInputEnabled):
        Set the right text input state based on whether the plug-in is using the updated spec or not.

2011-08-25  Anders Carlsson  <andersca@apple.com>

        Return the correct value for NPNVsupportsCarbonBool
        https://bugs.webkit.org/show_bug.cgi?id=66964

        Reviewed by Adam Roben.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue):
        Remove a FIXME and set the value to true.

2011-08-25  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt][WK2] Remove QWKContext class and make sure the WebProcessProxy life is correctly managed.
        https://bugs.webkit.org/show_bug.cgi?id=66886

        Reviewed by Benjamin Poulain.

        Remove QWKContext class from Qt APIs as it is too low level for the vision
        of the Qt5 API. QtWebPageProxy now holds directly a WebContext which can be a custom one
        or default created one. This patch also ensure that the WebProcessProxy is correctly
        destroyed at application exit by removing the circular references between the WebContext,
        WebProcessProxy, and WebPageProxy.

        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebViewPrivate::QDesktopWebViewPrivate):
        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebViewPrivate::QTouchWebViewPrivate):
        * UIProcess/qt/ClientImpl.cpp:
        (qt_wk_setStatusText):
        * UIProcess/qt/ClientImpl.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::defaultWKContext):
        (QtWebPageProxy::QtWebPageProxy):
        (QtWebPageProxy::~QtWebPageProxy):
        * UIProcess/qt/QtWebPageProxy.h:
        * UIProcess/qt/qdesktopwebpageproxy.cpp:
        (QDesktopWebPageProxy::QDesktopWebPageProxy):
        * UIProcess/qt/qdesktopwebpageproxy.h:
        * UIProcess/qt/qtouchwebpageproxy.cpp:
        (QTouchWebPageProxy::QTouchWebPageProxy):
        * UIProcess/qt/qtouchwebpageproxy.h:
        * UIProcess/qt/qwkcontext.cpp: Removed.
        * UIProcess/qt/qwkcontext.h: Removed.
        * UIProcess/qt/qwkcontext_p.h: Removed.
        * WebKit2.pro:

2011-08-23  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt][WK2] Drive tiling from the WebProcess and reuse TiledBackingStore.
        https://bugs.webkit.org/show_bug.cgi?id=66771

        Reviewed by Tor Arne Vestbø.

        We need the tiling logic to be moved to the web process to allow invalidated tile rects to be
        rendered with the same layout. This also allows the web process to render tiles into
        buffers readable directly by the GPU (on supported platforms). We also take the opportunity
        to use the TiledBackingStore in WebCore to have only one tiling implementation.

        Before this patch:
        - TiledDrawingAreaProxy manages tiles from the UI process.
        - TiledDrawingArea received rendering requests for a rect and returns the result
          to the proxy through shared memory.

        After this patch:
        - TiledDrawingArea uses a TiledBackingStore to manage tiles from the web process.
        - TiledBackingStoreRemoteTile forwards tile creations, update and removals to the proxy.
        - TiledDrawingAreaProxy updates the scene graph directly from requests.

        It also implements tile buffer swapping correctly in SGTileNode, triggered by the DidRenderFrame message.
        Render throttling is implemented by waiting in TiledDrawingArea for the UI process to
        notify us when the last rendered frame is ready to make it to the screen.
        TiledDrawingAreaTileSets have been replaced by using two instances of TiledBackingStore instead.

        * UIProcess/API/qt/qtouchwebpage.cpp:
        (QTouchWebPage::updatePaintNode):
        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebViewPrivate::updateViewportState):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::createTile):
        (WebKit::DrawingAreaProxy::updateTile):
        (WebKit::DrawingAreaProxy::didRenderFrame):
        (WebKit::DrawingAreaProxy::removeTile):
        * UIProcess/DrawingAreaProxy.messages.in:
        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::create):
        (WebKit::TiledDrawingAreaProxy::TiledDrawingAreaProxy):
        (WebKit::TiledDrawingAreaProxy::~TiledDrawingAreaProxy):
        (WebKit::TiledDrawingAreaProxy::setVisibleContentRect):
        (WebKit::TiledDrawingAreaProxy::setContentsScale):
        (WebKit::TiledDrawingAreaProxy::renderNextFrame):
        (WebKit::TiledDrawingAreaProxy::sizeDidChange):
        (WebKit::TiledDrawingAreaProxy::paint):
        * UIProcess/TiledDrawingAreaProxy.h:
        * UIProcess/TiledDrawingAreaTile.h: Removed.
        * UIProcess/qt/SGAgent.cpp:
        (WebKit::NodeUpdateCreateTile::NodeUpdateCreateTile):
        (WebKit::NodeUpdateRemoveTile::NodeUpdateRemoveTile):
        (WebKit::NodeUpdateSetBackBuffer::NodeUpdateSetBackBuffer):
        (WebKit::NodeUpdateSwapTileBuffers::NodeUpdateSwapTileBuffers):
        (WebKit::SGAgent::SGAgent):
        (WebKit::SGAgent::createTileNode):
        (WebKit::SGAgent::removeTileNode):
        (WebKit::SGAgent::setNodeBackBuffer):
        (WebKit::SGAgent::swapTileBuffers):
        (WebKit::SGAgent::updatePaintNode):
        (WebKit::SGAgent::getScaleNode):
        Make the parenting logic more strict to allow SGAgent to handle the scale nodes itself (remove NodeUpdateCreateScale and use the scale in CreateTile).
        Delete the scale node when the last of its child tiles has been removed.

        * UIProcess/qt/SGAgent.h:
        (WebKit::SGAgent::isSwapPending):

        * UIProcess/qt/SGTileNode.cpp:
        (WebKit::SGTileNode::SGTileNode):
        (WebKit::SGTileNode::setBackBuffer):
        (WebKit::SGTileNode::swapIfNeeded):
        Replace setTargetRect, setSourceRect and setTexture by a single setBackBuffer method.
        This allows all those values to be used only when swapIfNeeded is called later.

        * UIProcess/qt/SGTileNode.h:
        * UIProcess/qt/TiledDrawingAreaProxyQt.cpp:
        (WebKit::TiledDrawingAreaProxy::createTile):
        (WebKit::TiledDrawingAreaProxy::updateTile):
        (WebKit::TiledDrawingAreaProxy::didRenderFrame):
        (WebKit::TiledDrawingAreaProxy::removeTile):
        * UIProcess/qt/TiledDrawingAreaTileQt.cpp: Removed.
        * UIProcess/qt/qtouchwebpageproxy.cpp:
        (QTouchWebPageProxy::renderNextFrame):
        * UIProcess/qt/qtouchwebpageproxy.h:
        * WebKit2.pro:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::setVisibleContentRect):
        (WebKit::DrawingArea::setContentsScale):
        (WebKit::DrawingArea::renderNextFrame):
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/TiledBackingStoreRemoteTile.cpp: Added.
        (WebKit::TiledBackingStoreRemoteTile::TiledBackingStoreRemoteTile):
        (WebKit::TiledBackingStoreRemoteTile::~TiledBackingStoreRemoteTile):
        (WebKit::TiledBackingStoreRemoteTile::isDirty):
        (WebKit::TiledBackingStoreRemoteTile::invalidate):
        (WebKit::TiledBackingStoreRemoteTile::updateBackBuffer):
        (WebKit::TiledBackingStoreRemoteTile::swapBackBufferToFront):
        (WebKit::TiledBackingStoreRemoteTile::isReadyToPaint):
        (WebKit::TiledBackingStoreRemoteTile::paint):
        (WebKit::TiledBackingStoreRemoteTileBackend::TiledBackingStoreRemoteTileBackend):
        (WebKit::TiledBackingStoreRemoteTileBackend::createTile):
        (WebKit::TiledBackingStoreRemoteTileBackend::paintCheckerPattern):
        * WebProcess/WebPage/TiledBackingStoreRemoteTile.h: Added.
        (WebKit::TiledBackingStoreRemoteTile::create):
        (WebKit::TiledBackingStoreRemoteTile::coordinate):
        (WebKit::TiledBackingStoreRemoteTile::rect):
        (WebKit::TiledBackingStoreRemoteTileClient::~TiledBackingStoreRemoteTileClient):
        (WebKit::TiledBackingStoreRemoteTileBackend::create):
        * WebProcess/WebPage/TiledDrawingArea.cpp:
        (WebKit::TiledDrawingArea::TiledDrawingArea):
        (WebKit::TiledDrawingArea::setNeedsDisplay):
        (WebKit::TiledDrawingArea::setSize):
        (WebKit::TiledDrawingArea::setVisibleContentRect):
        (WebKit::TiledDrawingArea::setContentsScale):
        (WebKit::TiledDrawingArea::renderNextFrame):
        (WebKit::TiledDrawingArea::suspendPainting):
        (WebKit::TiledDrawingArea::resumePainting):
        (WebKit::TiledDrawingArea::tiledBackingStorePaintBegin):
        (WebKit::TiledDrawingArea::tiledBackingStorePaint):
        (WebKit::TiledDrawingArea::tiledBackingStorePaintEnd):
        (WebKit::TiledDrawingArea::tiledBackingStoreIsUpdatingAllowed):
        (WebKit::TiledDrawingArea::tiledBackingStoreContentsRect):
        (WebKit::TiledDrawingArea::tiledBackingStoreVisibleRect):
        (WebKit::TiledDrawingArea::tiledBackingStoreBackgroundColor):
        (WebKit::TiledDrawingArea::createTile):
        (WebKit::TiledDrawingArea::updateTile):
        (WebKit::TiledDrawingArea::removeTile):
        * WebProcess/WebPage/TiledDrawingArea.h:
        * WebProcess/WebPage/qt/TiledDrawingAreaQt.cpp: Removed.

2011-08-24  Michael Saboff  <msaboff@apple.com>

        Improper comment in CoreIPC/ArgumentEncoder.cpp from 66464
        https://bugs.webkit.org/show_bug.cgi?id=66912

        Updated the comment in ArgumentEncoder::grow to reflect that system malloc
        currently checks to see if a MADV_FREE_REUSABLE will fail before calling it.

        Reviewed by Mark Rowe.

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

2011-08-24  Anders Carlsson  <andersca@apple.com>

        Rename -[WKTextInputWindowController keyboardInputSourceChanged] to unmarkText to indicate what the method does
        https://bugs.webkit.org/show_bug.cgi?id=66883

        Reviewed by Beth Dakin.

        * UIProcess/API/mac/WKTextInputWindowController.h:
        * UIProcess/API/mac/WKTextInputWindowController.mm:
        (-[WKTextInputPanel _unmarkText]):
        (-[WKTextInputWindowController unmarkText]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _pluginFocusOrWindowFocusChanged:pluginComplexTextInputIdentifier:]):

2011-08-24  Oliver Hunt  <oliver@apple.com>

        JSNPObject and JSNPMethod create their structure in their constructors
        https://bugs.webkit.org/show_bug.cgi?id=66879

        Reviewed by Anders Carlsson.

        It's not safe to create the Structure for an object inside its constructor
        so we hoist construction out into their ::create methods and move the methods
        into the cpp file.

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

2011-08-24  Anders Carlsson  <andersca@apple.com>

        More plug-in complex text input scaffolding
        https://bugs.webkit.org/show_bug.cgi?id=66865

        Reviewed by Sam Weinig.

        Make -[WKView _doneWithKeyEvent:eventWasHandled:] take an NSEvent * directly. Also
        add methods for handling plug-in text input key-down events.

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::doneWithKeyEvent):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _tryHandlePluginComplexTextInputKeyDown:]):
        (-[WKView keyDown:]):
        (-[WKView _tryPostProcessPluginComplexTextInputKeyDown:]):
        (-[WKView _doneWithKeyEvent:eventWasHandled:]):
        * UIProcess/API/mac/WKViewInternal.h:

2011-08-24  Amruth Raj  <amruthraj@motorola.com>

        [GTK] WebProcess crash on hitting assertion m_isWaitingForDidUpdate in DrawingAreaImpl
        https://bugs.webkit.org/show_bug.cgi?id=66640

        Reviewed by Martin Robinson.

        The crash happens when a new timer is created in an existing timer callback. Since 
        TimerBase has a single GSource* it gets overridden and the old timer can never get
        stopped. To handle this, keep a copy of the old timer and use it for destruction.

        * Platform/RunLoop.h:
        * Platform/gtk/RunLoopGtk.cpp:
        (RunLoop::TimerBase::timerFiredCallback):
        Store the timerSource so that even if it is modified by the timer callback,
        it can be restored for freeing it.
        (RunLoop::TimerBase::start):
        Remove destroyNotifyCallback. Destruction is now handled in timerFiredCallback itself.

2011-08-23  Anders Carlsson  <andersca@apple.com>

        Prepare WKTextInputWindowController for the new text input model
        https://bugs.webkit.org/show_bug.cgi?id=66826

        Reviewed by Sam Weinig.

        Add -[WKTextInputWindowController hasMarkedText] and make interpretKeyEvent take an
        additional usingLegacyCocoaTextInput flag. No functionality change.

        * UIProcess/API/mac/WKTextInputWindowController.h:
        * UIProcess/API/mac/WKTextInputWindowController.mm:
        (-[WKTextInputPanel _interpretKeyEvent:usingLegacyCocoaTextInput:string:]):
        (-[WKTextInputPanel _hasMarkedText]):
        (-[WKTextInputWindowController hasMarkedText]):
        (-[WKTextInputWindowController interpretKeyEvent:usingLegacyCocoaTextInput:string:]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView keyDown:]):

2011-08-23  Gopal Raghavan  <gopal.1.raghavan@nokia.com>

        [Qt] Unnecessary folders in WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=66583

        Reviewed by Benjamin Poulain.

        Remove empty autotest folders that were left over from QGraphicsWKView times.

        * UIProcess/API/qt/tests/qgraphicswkview: Removed.
        * UIProcess/API/qt/tests/qwkhistory: Removed.
        * UIProcess/API/qt/tests/qwkpage: Removed.

2011-08-23  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt][WK2] Fix an awful memory leak introduced in r92376.
        https://bugs.webkit.org/show_bug.cgi?id=65528

        Reviewed by Benjamin Poulain.

        The non-virtual destructor would create a leak of the tile update buffer because
        the NodeUpdateSetTexture's QImage member destructor wouldn't be called.

        * UIProcess/qt/SGAgent.h:
        (WebKit::NodeUpdate::~NodeUpdate):

2011-08-23  Steve Block  <steveblock@google.com>

        Remove all mention of removed Android files from build scripts
        https://bugs.webkit.org/show_bug.cgi?id=66755

        Reviewed by Tony Gentilcore.

        * Scripts/generate-forwarding-headers.pl:

2011-08-23  Benjamin Poulain  <benjamin@webkit.org>

        [Qt][WK2] ViewportInteractionEngine: the position of the content is not corrected when scaling the page manually
        https://bugs.webkit.org/show_bug.cgi?id=66672

        Reviewed by Kenneth Rohde Christiansen.

        Add the method animateContentIntoBoundariesIfNeeded() to move the content back into both scale and position boundaries.
        This method is now used as the entry point for animations in order to avoid bugs regarding scale or position.

        The existing animation methods were renamed accordingly for clarity and consistency with the updateContent methods.

        * UIProcess/qt/ViewportInteractionEngine.cpp:
        (WebKit::ViewportInteractionEngine::panGestureEnded):
        (WebKit::ViewportInteractionEngine::pinchGestureEnded):
        (WebKit::ViewportInteractionEngine::animateContentIntoBoundariesIfNeeded):
        (WebKit::ViewportInteractionEngine::animateContentPositionIntoBoundariesIfNeeded):
        (WebKit::ViewportInteractionEngine::animateContentScaleIntoBoundariesIfNeeded):
        * UIProcess/qt/ViewportInteractionEngine.h:

2011-08-22  Oliver Hunt  <oliver@apple.com>

        Delay GC triggered NP object destruction to the next runloop cycle
        https://bugs.webkit.org/show_bug.cgi?id=66717

        Reviewed by Anders Carlsson.

        Delay destruction of plugin objects caused by GC until the next
        runloop cycle so that they can execute JS in their finalizers.
        We do this using a zero delay timer coupled with a queue of
        objects to be finalised.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::releaseObject):
        * WebProcess/Plugins/Netscape/JSNPObject.h:
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::NPRuntimeObjectMap):
        (WebKit::NPRuntimeObjectMap::invalidate):
        (WebKit::NPRuntimeObjectMap::invalidateQueuedObjects):
        (WebKit::NPRuntimeObjectMap::addToInvalidationQueue):
        (WebKit::NPRuntimeObjectMap::finalize):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.h:
        * WebProcess/Plugins/Netscape/NPRuntimeUtilities.cpp:
        (WebKit::trySafeReleaseNPObject):
        * WebProcess/Plugins/Netscape/NPRuntimeUtilities.h:

2011-08-22  Anders Carlsson  <andersca@apple.com>

        Move code from PageClientImpl::doneWithKeyEvent to WKView
        https://bugs.webkit.org/show_bug.cgi?id=66722

        Reviewed by Darin Adler.

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::doneWithKeyEvent):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _doneWithKeyEvent:WebKit::eventWasHandled:]):
        * UIProcess/API/mac/WKViewInternal.h:

2011-08-22  Anders Carlsson  <andersca@apple.com>

        Update the text input context when the plug-in focus changes and not when the complex text input state changes
        https://bugs.webkit.org/show_bug.cgi?id=66716

        Reviewed by Darin Adler.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _pluginFocusOrWindowFocusChanged:pluginComplexTextInputIdentifier:]):
        (-[WKView _setPluginComplexTextInputState:WebKit::pluginComplexTextInputIdentifier:]):

2011-08-22  Michael Saboff  <msaboff@apple.com>

        REGRESSION (r92231): Apple campus proposal PDF doesn't display in Safari
        https://bugs.webkit.org/show_bug.cgi?id=66464

        Changed ArgumentEncoder to use system malloc instead of fastMalloc.
        FastMalloc uses madvise(MADV_FREE_REUSABLE) which is incompatible with
        mach message Out Of Line (OOL) messages that use MACH_MSG_VIRTUAL_COPY.
        The system malloc has no such limitation.
        Changed sendOutgoingMessage to use MACH_MSG_VIRTUAL_COPY again as it 
        doesn't have size limitations that MACH_MSG_PHYSICAL_COPY.
        
        Reviewed by Anders Carlsson.

        * Platform/CoreIPC/ArgumentEncoder.cpp:
        (CoreIPC::ArgumentEncoder::~ArgumentEncoder):
        (CoreIPC::ArgumentEncoder::grow):
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::sendOutgoingMessage):

2011-08-22  Anders Carlsson  <andersca@apple.com>

        Use -[NSApplication updateWindows] to update the current input context
        https://bugs.webkit.org/show_bug.cgi?id=66715

        Reviewed by Alexey Proskuryakov.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setPluginComplexTextInputState:WebKit::pluginComplexTextInputIdentifier:]):

2011-08-22  Anders Carlsson  <andersca@apple.com>

        The UI process should keep track of whether a plug-in has focus or not
        https://bugs.webkit.org/show_bug.cgi?id=66712

        Reviewed by Darin Adler.

        This is in preparation for implementing the updated Cocoa text input model.

        Pipe through whether a plug-in and its containing window has focus or not, from the
        plug-in process and all the way to the UI process.

        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/mac/PluginControllerProxyMac.mm:
        (WebKit::PluginControllerProxy::pluginFocusOrWindowFocusChanged):
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::pluginFocusOrWindowFocusChanged):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _pluginFocusOrWindowFocusChanged:pluginComplexTextInputIdentifier:]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::pluginFocusOrWindowFocusChanged):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformSetFocus):
        (WebKit::NetscapePlugin::windowFocusChanged):
        (WebKit::NetscapePlugin::pluginFocusOrWindowFocusChanged):
        * WebProcess/Plugins/Netscape/mac/PluginProxyMac.mm:
        (WebKit::PluginProxy::pluginFocusOrWindowFocusChanged):
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginProxy.messages.in:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::pluginFocusOrWindowFocusChanged):
        * WebProcess/Plugins/PluginView.h:

2011-08-22  Anders Carlsson  <andersca@apple.com>

        Update the current NSTextInputContext whenever the plug-in complex text input state changes
        https://bugs.webkit.org/show_bug.cgi?id=66709

        Reviewed by Sam Weinig.

        Call [NSTextInputContext currentInputContext] which will force AppKit to update the current input
        context. Fixes a rare case when the out-of-line editing window wouldn't appear.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setPluginComplexTextInputState:WebKit::pluginComplexTextInputIdentifier:]):

2011-08-19  Anders Carlsson  <andersca@apple.com>

        Another attempt at fixing the Windows build.

        * UIProcess/PageClient.h:

2011-08-19  Anders Carlsson  <andersca@apple.com>

        Fix Windows build.

        * WebProcess/Plugins/PluginController.h:

2011-08-19  Anders Carlsson  <andersca@apple.com>

        Make the complex text input state a tri-state enum instead of a boolean
        https://bugs.webkit.org/show_bug.cgi?id=62245

        Reviewed by Sam Weinig.

        This is to prepare the infrastructure for supporting the updated Cocoa text input model for plug-ins.

        * PluginProcess/PluginControllerProxy.cpp:
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/mac/PluginControllerProxyMac.mm:
        (WebKit::PluginControllerProxy::setComplexTextInputState):
        (WebKit::PluginControllerProxy::compositingRenderServerPort):
        * Shared/Plugins/mac: Added.
        * Shared/Plugins/mac/PluginComplexTextInputState.h: Added.
        (WebKit::isValidPluginComplexTextInputState):
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setPluginComplexTextInputState):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setPluginComplexTextInputState:WebKit::pluginComplexTextInputIdentifier:]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setPluginComplexTextInputState):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformSetFocus):
        (WebKit::NetscapePlugin::windowFocusChanged):
        (WebKit::NetscapePlugin::setComplexTextInputEnabled):
        * WebProcess/Plugins/Netscape/mac/PluginProxyMac.mm:
        (WebKit::PluginProxy::setComplexTextInputState):
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginProxy.messages.in:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::~PluginView):
        (WebKit::PluginView::setComplexTextInputState):
        (WebKit::PluginView::compositingRenderServerPort):
        * WebProcess/Plugins/PluginView.h:

2011-08-19  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] [WK2] Provide API for intercept (and possible ignore) links clicked in QDesktopWebView
        https://bugs.webkit.org/show_bug.cgi?id=65920

        Reviewed by Benjamin Poulain.

        This patch makes QDesktopWebView delegate the decision of whether a navigation
        should proceed to a slot in QML. The user of the DesktopWebView must implement a
        'navigationPolicyForUrl()' if it wants to use the feature.

        Such feature is useful for implementing opening links in "new tab" by using a
        specific mouse button or mouse button plus keyboard modifiers.

        The patch introduces a internal Qt-level interface called PolicyInterface, that
        is used by QtWebPageProxy to delegate policy calls. A concrete implementation is
        provided for QDesktopWebView.

        * Shared/qt/WebCoreArgumentCodersQt.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        Implement the serialization of the Request URL, which is the only data
        we exposing from the Request.

        * WebKit2.pro:
        * UIProcess/qt/PolicyInterface.h: Added.
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::QtWebPageProxy):
        (QtWebPageProxy::init):
        * UIProcess/qt/QtWebPageProxy.h:
        Register a Policy Client in the WK2 C API only if there's a PolicyInterface available.

        * UIProcess/qt/ClientImpl.h:
        * UIProcess/qt/ClientImpl.cpp:
        (toPolicyInterface):
        (toQtMouseButton):
        (toQtKeyboardModifiers):
        (qt_wk_decidePolicyForNavigationAction):
        Implement the callback for the Page Policy Client. It will translate the
        arguments to Qt jargon and call PolicyInterface.

        * UIProcess/qt/qdesktopwebpageproxy.cpp:
        (QDesktopWebPageProxy::QDesktopWebPageProxy):
        * UIProcess/API/qt/qdesktopwebview.h:
        * UIProcess/API/qt/qdesktopwebview_p.h:
        * UIProcess/API/qt/qdesktopwebview.cpp:
        (toPolicyAction):
        (hasMetaMethod):
        (QDesktopWebViewPrivate::navigationPolicyForURL):
        The concrete implementation for QDesktopWebView. Its private object implements
        the PolicyInterface and try to call a possible function defined in QML (so return
        value and arguments all QVariants). If there's no such a function, returns the
        default UsePolicy, like if we haven't registered a PolicyClient in WK2 C API.

        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_navigationPolicyForUrl.qml: Added.
        * UIProcess/API/qt/tests/qmltests/common/test2.html: Added.
        * UIProcess/API/qt/tests/qmltests/qmltests.pro:
        Add a test for DesktopWebView QML element making use of a button and a modifier to
        ignore a navigation.

        * UIProcess/qt/qtouchwebpageproxy.cpp:
        (QTouchWebPageProxy::QTouchWebPageProxy):
        For now, we don't have a PolicyInterface for QTouchWebView.

2011-08-18  Anders Carlsson  <andersca@apple.com>

        WebProcess crashes during startup if libdispatch is initialized by WebProcessShim.dylib
        https://bugs.webkit.org/show_bug.cgi?id=66508
        <rdar://problem/9828476>

        Reviewed by Mark Rowe.

        * mac/MainMac.cpp:
        (closeUnusedFileDescriptors):
        Check if a file descriptor is a kqueue and don't close it if that is the case. While this
        isn't a complete fix, (it won't work if other initializers end up creating non-kqueue file descriptors)
        it's good enough for Snow Leopard. For Lion, we should use the new posix_spawn API that lets you whitelist
        file descriptors from the parent process.

2011-08-19  Benjamin Poulain  <benjamin@webkit.org>

        [Qt][WK2] Add a basic engine to control the content of the viewport
        https://bugs.webkit.org/show_bug.cgi?id=66383

        Reviewed by Andreas Kling.

        Add ViewportInteractionEngine to handle the content of the viewport. The class make
        sure the QTouchWebPage stays in the viewport and in the boundaries.

        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebViewPrivate::loadDidCommit):
        * UIProcess/API/qt/qdesktopwebview_p.h:
        * UIProcess/API/qt/qtouchwebpage.cpp:
        (QTouchWebPage::QTouchWebPage): Set the transform origin to the top left so
        we can asume the position 0, 0 is always the top left of the page.
        (QTouchWebPagePrivate::_q_commitScaleChange): Make commitScaleChange a slot
        in order to completely decouple the ViewportInteractionEngine and the WebKit classes.
        * UIProcess/API/qt/qtouchwebpage.h:
        * UIProcess/API/qt/qtouchwebpage_p.h:
        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebViewPrivate::QTouchWebViewPrivate):
        (QTouchWebViewPrivate::loadDidCommit):
        (QTouchWebViewPrivate::_q_viewportRectUpdated): Make _q_viewportRectUpdated() a slot
        for reducing coupling.
        (QTouchWebViewPrivate::updateViewportConstraints):
        (QTouchWebViewPrivate::setViewportArguments):
        (QTouchWebView::geometryChanged):
        * UIProcess/API/qt/qtouchwebview.h:
        * UIProcess/API/qt/qtouchwebview_p.h:
        * UIProcess/qt/ClientImpl.cpp:
        (qt_wk_didCommitLoadForFrame):
        * UIProcess/qt/QtGestureRecognizer.cpp:
        (WebKit::QtGestureRecognizer::QtGestureRecognizer):
        * UIProcess/qt/QtGestureRecognizer.h: Change the gesture recognizer to talk directly
        to the ViewportInteractionEngine instead of interacting through TouchViewInterface.
        * UIProcess/qt/QtPanGestureRecognizer.cpp:
        (WebKit::QtPanGestureRecognizer::QtPanGestureRecognizer):
        (WebKit::QtPanGestureRecognizer::recognize):
        * UIProcess/qt/QtPanGestureRecognizer.h:
        * UIProcess/qt/QtPinchGestureRecognizer.cpp:
        (WebKit::QtPinchGestureRecognizer::QtPinchGestureRecognizer):
        (WebKit::QtPinchGestureRecognizer::recognize):
        * UIProcess/qt/QtPinchGestureRecognizer.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::loadDidCommit): Add the loadCommited callback in order
        to reset the viewport state when the page change.
        * UIProcess/qt/QtWebPageProxy.h:
        * UIProcess/qt/TouchViewInterface.cpp:
        (WebKit::TouchViewInterface::TouchViewInterface):
        (WebKit::TouchViewInterface::contentSizeChanged):
        (WebKit::TouchViewInterface::loadDidCommit):
        * UIProcess/qt/TouchViewInterface.h:
        * UIProcess/qt/ViewInterface.h:
        * UIProcess/qt/ViewportInteractionEngine.cpp: Added.
        (WebKit::visibleRectInContentCoordinate):
        (WebKit::contentRectInViewportCoordinate):
        (WebKit::ViewportUpdateGuard::ViewportUpdateGuard):
        (WebKit::ViewportUpdateGuard::~ViewportUpdateGuard):
        (WebKit::ViewportInteractionEngine::ViewportInteractionEngine):
        (WebKit::ViewportInteractionEngine::reset):
        (WebKit::ViewportInteractionEngine::setConstraints):
        (WebKit::ViewportInteractionEngine::panGestureStarted):
        (WebKit::ViewportInteractionEngine::panGestureRequestScroll):
        (WebKit::ViewportInteractionEngine::panGestureCancelled):
        (WebKit::ViewportInteractionEngine::panGestureEnded):
        (WebKit::ViewportInteractionEngine::pinchGestureStarted):
        (WebKit::ViewportInteractionEngine::pinchGestureRequestUpdate):
        (WebKit::ViewportInteractionEngine::pinchGestureEnded):
        (WebKit::ViewportInteractionEngine::contentGeometryChanged):
        (WebKit::ViewportInteractionEngine::contentScaleChanged):
        (WebKit::ViewportInteractionEngine::updateContentIfNeeded):
        (WebKit::ViewportInteractionEngine::updateContentScaleIfNeeded):
        (WebKit::ViewportInteractionEngine::updateContentPositionIfNeeded):
        (WebKit::ViewportInteractionEngine::animateContentPositionToBoundaries):
        (WebKit::ViewportInteractionEngine::animateContentScaleToBoundaries):
        (WebKit::ViewportInteractionEngine::scaleContent):
        * UIProcess/qt/ViewportInteractionEngine.h: Added.
        (WebKit::ViewportInteractionEngine::Constraints::Constraints):
        (WebKit::operator==):
        * UIProcess/qt/qtouchwebpageproxy.cpp:
        (QTouchWebPageProxy::QTouchWebPageProxy):
        * UIProcess/qt/qtouchwebpageproxy.h:
        * WebKit2.pro:

2011-08-19  Lars Knudsen  <lars.knudsen@nokia.com>

        [Qt][WK2] Change the rect argument of QtWebPageProxy::paint() to const ref
        https://bugs.webkit.org/show_bug.cgi?id=66549

        Reviewed by Benjamin Poulain.

        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::paint):
        * UIProcess/qt/QtWebPageProxy.h:

2011-08-19  MORITA Hajime  <morrita@google.com>

        Spell-checking against execCommand() inserted HTML doesn't care word boundary.
        https://bugs.webkit.org/show_bug.cgi?id=65902

        Reviewed by Ryosuke Niwa.
        
        Add exports for window.internals object.

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

2011-08-18  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=66495
        Lion-specific scroller SPIs can use forward declaration instead of 
        WebKitSystemInterface

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-08-18  Darin Adler  <darin@apple.com>

        Made some code even more private to a particular file and class
        https://bugs.webkit.org/show_bug.cgi?id=66428

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setDrawingAreaSize:]): Made this file internal.
        * UIProcess/API/mac/WKViewInternal.h: Removed _setDrawingAreaSize.
        * UIProcess/DrawingAreaProxy.h: Made sizeDidChange private.

2011-08-18  Amruth Raj  <amruthraj@motorola.com>

        [GTK] [WK2] Activating sub menus cause the WebProcess to crash
        https://bugs.webkit.org/show_bug.cgi?id=66471

        Reviewed by Anders Carlsson.

        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::createGtkMenu):

2011-08-18  Adam Roben  <aroben@apple.com>

        Update the device scale factor when the WKView's window changes

        Fixes <http://webkit.org/b/66412> <rdar://problem/9971958> WebKit doesn't react when a
        WebView is moved between windows with different backing scale factors

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewDidMoveToWindow]): Call setDeviceScaleFactor because our new window (or no
        window at all) might have a different backing scale factor than the previous one.
        (-[WKView _deviceScaleFactor]): Moved to the new FileInternal category.

2011-08-18  Adam Roben  <aroben@apple.com>

        Make WebPageProxy keep track of the current device scale factor

        The device scale factor is no longer considered part of WebPageProxy's "view state". It now
        has its own setter/getter. This made the code a little simpler and more similar to the page
        scale factor. Each port-specific WebKit2 view is now responsible for calling
        WebPageProxy::setDeviceScaleFactor whenever it thinks the device scale factor might have
        changed.

        Fixes <http://webkit.org/b/66466> WebKit2 requires every port-specific view to keep track of
        the current device scale factor

        Reviewed by Anders Carlsson.

        * UIProcess/API/efl/PageClientImpl.cpp:
        * UIProcess/API/efl/PageClientImpl.h:
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        * UIProcess/PageClient.h:
        * UIProcess/qt/QtWebPageProxy.h:
        * UIProcess/win/WebView.h:
        Removed deviceScaleFactor.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _deviceScaleFactor]): Added. Code came from PageClientImpl::deviceScaleFactor.
        (-[WKView _windowDidChangeResolution:]): Changed to call WebPageProxy::setDeviceScaleFactor.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Initialize m_deviceScaleFactor.
        (WebKit::WebPageProxy::viewStateDidChange): Removed device-scale-factor-related code.
        (WebKit::WebPageProxy::setDeviceScaleFactor): Added. Records the new device scale factor and
        tells the DrawingAreaProxy about it if it's actually changed.
        (WebKit::WebPageProxy::creationParameters): Use m_deviceScaleFactor instead of calling out
        to the PageClient.

        * UIProcess/WebPageProxy.h: Added m_deviceScaleFactor and setDeviceScaleFactor, which
        replaces the DeviceScaleFactor ViewStateFlag.
        (WebKit::WebPageProxy::deviceScaleFactor): Inlined this now-simple getter.

2011-08-17  Adam Roben  <aroben@apple.com>

        Make WebCore keep track of the current device scale factor

        Fixes <http://webkit.org/b/66413> WebCore requires every WebKit port to keep track of the
        device scale factor

        Reviewed by Darin Adler.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        Removed deviceScaleFactor.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::sendDidUpdateBackingStoreState):
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
        (WebKit::DrawingAreaImpl::display):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindIndicator):
        (WebKit::FindController::hideFindIndicator):
        * WebProcess/WebPage/ca/LayerTreeHostCA.cpp:
        (WebKit::LayerTreeHostCA::deviceScaleFactor):
        Changed to get the device scale factor from WebCore.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::setDeviceScaleFactor):
        * WebProcess/WebPage/WebPage.h:
        Removed m_deviceScaleFactor. We always get the scale factor from WebCore now.

2011-08-17  Anders Carlsson  <andersca@apple.com>

        Remove unused Core Animation related classes
        https://bugs.webkit.org/show_bug.cgi?id=66393

        Reviewed by Darin Adler.

        * Shared/mac/CoreAnimationRenderer.h: Removed.
        * Shared/mac/CoreAnimationRenderer.mm: Removed.
        * Shared/mac/ShareableSurface.cpp: Removed.
        * Shared/mac/ShareableSurface.h: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2011-08-15  Dmitry Titov  <dimich@chromium.org>

        FrameLoaderClient::transferLoadingResourceFromPage does not have enough parameters
        https://bugs.webkit.org/show_bug.cgi?id=66165

        Reviewed by Darin Fisher.

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

2011-08-15  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] Unreviewed build fix after r93058.

        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::deviceScaleFactorDidChange):
        * UIProcess/TiledDrawingAreaProxy.h:

2011-08-15  Adam Roben  <aroben@apple.com>

        Update pages' style and content scale when the window's backing scale factor changes

        Unfortunately, I couldn't think of a way to test this in an automated fashion.

        Fixes <http://webkit.org/b/66229> <rdar://problem/9906269> WebKit doesn't react to device
        scale factor changes

        Reviewed by Simon Fraser.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView addWindowObserversForWindow:]):
        (-[WKView removeWindowObservers]):
        Listen for the notification that tells us the window's backing scale has changed.

        (-[WKView _windowDidChangeResolution:]): Tell the WebPageProxy about the change.

        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxyImpl.h:
        Added deviceScaleFactorDidChange.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::deviceScaleFactorDidChange): Request a new backing store
        since the current one is using an old device scale factor.
        (WebKit::DrawingAreaProxyImpl::sendUpdateBackingStoreState): Send the device scale factor
        along to the web process so it can render accordingly. This is how we tell the web process
        about device scale factor changes.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewStateDidChange): Tell the DrawingAreaProxy when the device scale
        factor changes.
        (WebKit::WebPageProxy::deviceScaleFactor): Added this simple getter that calls through to
        the PageClient. DrawingAreaProxy uses this function.

        * UIProcess/WebPageProxy.h: Added new members.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::updateBackingStoreState):
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/DrawingAreaImpl.h:
        Send the device scale factor in the UpdateBackingStoreState message.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::updateBackingStoreState): Tell the WebPage and LayerTreeHost about
        the new device scale factor.

        * WebProcess/WebPage/LayerTreeHost.h:
        * WebProcess/WebPage/ca/LayerTreeHostCA.h:
        Added deviceScaleFactorDidChange.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setDeviceScaleFactor): Store the new scale factor and tell the page about
        it so that, e.g., scale-factor-dependent media queries will be reevaluated.

        * WebProcess/WebPage/WebPage.h: Added setDeviceScaleFactor.

        * WebProcess/WebPage/ca/LayerTreeHostCA.cpp:
        (WebKit::LayerTreeHostCA::deviceScaleFactorDidChange): Tell the layer for non-composited
        content about the new scale factor.

2011-08-15  Benjamin Poulain  <benjamin@webkit.org>

        [Qt][WK2] Get rid of QTouchWebPagePrivate::getPageViewPrivate()
        https://bugs.webkit.org/show_bug.cgi?id=66222

        Reviewed by Kenneth Rohde Christiansen.

        The function QTouchWebPagePrivate::getPageViewPrivate() exposed
        the private QTouchWebPage to any object in WebKit.

        Instead, use the friend keyword to list which objects can access
        the internal of QTouchWebPage.

        * UIProcess/API/qt/qtouchwebpage.h:
        * UIProcess/API/qt/qtouchwebpage_p.h:
        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebViewPrivate::QTouchWebViewPrivate):
        (QTouchWebViewPrivate::viewportRectUpdated):

2011-08-15  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed.
        Fix Qt-WK2 build after r93040.

        * UIProcess/qt/QtWebPageProxy.h:
        (QtWebPageProxy::deviceScaleFactor):

2011-08-10  Adam Roben  <aroben@apple.com>

        Clear up scale factor terminology

        WebKit by and large deals with two scale factors: one intrinsic to the device on which the
        software is running, and one that is per-Page and can be controlled via API calls. This
        patch names the former "deviceScaleFactor" and the latter "pageScaleFactor", and makes the
        code use those names. It should introduce no behavior changes.

        Fixes <http://webkit.org/b/55787> WebKit uses multiple conflicting names to refer to the
        device scale factor

        Reviewed by Simon Fraser.

        * Shared/UpdateInfo.cpp:
        * Shared/UpdateInfo.h:
        * Shared/WebPageCreationParameters.cpp:
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/efl/PageClientImpl.cpp:
        * UIProcess/API/efl/PageClientImpl.h:
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        * UIProcess/BackingStore.cpp:
        * UIProcess/BackingStore.h:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebPopupMenuProxy.h:
        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        * UIProcess/gtk/WebPopupMenuProxyGtk.h:
        * UIProcess/mac/BackingStoreMac.mm:
        * UIProcess/mac/WebPageProxyMac.mm:
        * UIProcess/mac/WebPopupMenuProxyMac.h:
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        * UIProcess/qt/WebPopupMenuProxyQt.h:
        * UIProcess/win/WebPopupMenuProxyWin.h:
        * UIProcess/win/WebView.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        * WebProcess/WebPage/FindController.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ca/LayerTreeHostCA.cpp:
        * WebProcess/WebPage/ca/LayerTreeHostCA.h:

2011-08-13  Sam Weinig  <sam@webkit.org>

        Remove unused variables from WKFullScreenWindowController.h
        https://bugs.webkit.org/show_bug.cgi?id=66193

        Reviewed by Dan Bernstein.

        * UIProcess/mac/WKFullScreenWindowController.h:
        Remove _layerViewPlaceholder, _isWindowLoaded and _initialFrame which were not used.

2011-08-12  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/7337717> Add an option to automatically show tooltips (with the full text) over truncated text
        https://bugs.webkit.org/show_bug.cgi?id=66178

        Reviewed by Simon Fraser.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetShowsToolTipOverTruncatedText): Added this setter.
        (WKPreferencesGetShowsToolTipOverTruncatedText): Added this getter.
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Handle the showsToolTipOverTruncatedText preference.

2011-08-12  Mark Rowe  <mrowe@apple.com>

        Be more forward-looking in the choice of compiler.

        Rubber-stamped by Jon Honeycutt.

        * Configurations/CompilerVersion.xcconfig:

2011-08-11  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        VectorArgumentCoder doesn't encode/decode enough data for more than one byte vector elements
        https://bugs.webkit.org/show_bug.cgi?id=66109

        Reviewed by Anders Carlsson.

        Multiply vector size by element size in encode/decode to get correct byte size of vector data.

        * Platform/CoreIPC/ArgumentCoders.h:

2011-08-11  Nico Weber  <thakis@chromium.org>

        Remove incorrect comment about m_wheelEventHandlerCount
        https://bugs.webkit.org/show_bug.cgi?id=66117

        Reviewed by Simon Fraser.

        From what I can tell, this number is changed only in
        Frame::notifyChromeClientWheelEventHandlerCountChanged(),
        and there it just reads the number modified in
        Document::didAdd/RemoveWheelEventHandler(). So this is just the number
        of event handlers (and not related to horizontal scrollbars), and the
        variable name expresses that already.

        * UIProcess/WebPageProxy.h:

2011-08-11  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt/WK2] Add initial support for viewport meta tag
        https://bugs.webkit.org/show_bug.cgi?id=65975

        Reviewed by Benjamin Poulain.

        Redirect the viewport arguments through to the view.

        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebViewPrivate::didReceiveViewportArguments):
        * UIProcess/API/qt/qdesktopwebview_p.h:
        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebView::geometryChanged):
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::setViewportArguments):
        * UIProcess/qt/QtWebPageProxy.h:
        * UIProcess/qt/TouchViewInterface.cpp:
        (WebKit::TouchViewInterface::updateViewportState):
        (WebKit::TouchViewInterface::didReceiveViewportArguments):
        * UIProcess/qt/TouchViewInterface.h:
        (WebKit::TouchViewInterface::ViewportState::ViewportState):
        * UIProcess/qt/ViewInterface.h:
        * UIProcess/qt/qtouchwebpageproxy.cpp:
        (QTouchWebPageProxy::QTouchWebPageProxy):
        * UIProcess/qt/qtouchwebpageproxy.h:

2011-08-10  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=66004

        Removing the CSS Regions and CSS Exclusions ifdefs.

        Reviewed by Adam Roben.

        * Configurations/FeatureDefines.xcconfig:

2011-08-10  Alexey Proskuryakov  <ap@apple.com>

        Accidentally commented out an assertion in BackingStore::incorporateUpdate
        https://bugs.webkit.org/show_bug.cgi?id=65989

        Reviewed by Anders Carlsson.

        I couldn't get this assertion to fire in quick testing, let's bring it back.

        * UIProcess/BackingStore.cpp: (WebKit::BackingStore::incorporateUpdate):

2011-08-10  Lars Knudsen  <lars.knudsen@nokia.com>

        Add device specific settings to support viewport computing
        https://bugs.webkit.org/show_bug.cgi?id=65984

        Reviewed by Kenneth Rohde Christiansen.

        Expose new viewport related WebCore settings to WebKit2.

        * Shared/WebPreferencesStore.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2011-08-09  John Sullivan  <sullivan@apple.com>

        WKPageCopyPendingAPIRequestURL returns stale result if policy decision set to Ignore
        https://bugs.webkit.org/show_bug.cgi?id=65950
        <rdar://problem/9925931>

        Reviewed by Anders Carlsson.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        Call clearPendingAPIRequestURL() if the policy decision is PolicyIgnore.

2011-08-09  Anders Carlsson  <andersca@apple.com>

        Add a WebKit prefix to the user default.

        Reviewed by Dan Bernstein.

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):

2011-08-09  Anders Carlsson  <andersca@apple.com>

        Add a user default to disable the plug-in process message timeout
        https://bugs.webkit.org/show_bug.cgi?id=65945

        Reviewed by Adam Roben.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        Add a disablePluginProcessMessageTimeout member variable.

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        Initialize the disablePluginProcessMessageTimeout member variable from the 
        "DisablePluginProcessMessageTimeout" user default.

        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::defaultSyncMessageTimeout):
        Return NoTimeout if WebProcess::disablePluginProcessMessageTimeout returns true.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeWebProcess):
        Initialize m_disablePluginProcessMessageTimeout.
        
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::disablePluginProcessMessageTimeout):
        Add getter.

2011-08-09  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add ParentClass typedef in all JSC classes
        https://bugs.webkit.org/show_bug.cgi?id=65731

        Reviewed by Oliver Hunt.

        Just added the Base typedefs in all the classes that are a subclass of JSCell 
        to point at their parent classes.  This is a change to support future changes to the way
        constructors and destructors are implemented in JS objects, among other things.

        * WebProcess/Plugins/Netscape/JSNPMethod.h:
        * WebProcess/Plugins/Netscape/JSNPObject.h:

2011-08-08  Adrienne Walker  <enne@google.com>

        Add testing for --force-compositing-mode to windows.internal
        https://bugs.webkit.org/show_bug.cgi?id=65777

        Reviewed by Adam Barth.

        Add exports for Document::settings().

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

2011-08-09  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Redirect didFindZoomableArea thru to the view
        https://bugs.webkit.org/show_bug.cgi?id=65913

        Reviewed by Andreas Kling.

        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebViewPrivate::didFindZoomableArea):
        * UIProcess/API/qt/qdesktopwebview_p.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::didFindZoomableArea):
        * UIProcess/qt/QtWebPageProxy.h:
        * UIProcess/qt/TouchViewInterface.cpp:
        (WebKit::TouchViewInterface::didFindZoomableArea):
        * UIProcess/qt/TouchViewInterface.h:
        * UIProcess/qt/ViewInterface.h:
        * UIProcess/qt/qdesktopwebpageproxy.cpp:
        (QDesktopWebPageProxy::timerEvent):
        * UIProcess/qt/qdesktopwebpageproxy.h:
        * UIProcess/qt/qtouchwebpageproxy.cpp:
        (QTouchWebPageProxy::setContentsScale):
        * UIProcess/qt/qtouchwebpageproxy.h:

2011-08-09  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt] Vastly improve the algorithm for finding a zoomable area when doing double-tap
        https://bugs.webkit.org/show_bug.cgi?id=65907

        Reviewed by Andreas Kling.

        This is upstreaming of the algorithm we are currently using on the N9 browser
        and this also fixes a bug with not considering the frame positions when finding
        a zoomable area.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFindZoomableArea):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/qt/qdesktopwebpageproxy.cpp:
        (QDesktopWebPageProxy::didFindZoomableArea):
        * UIProcess/qt/qdesktopwebpageproxy.h:
        * UIProcess/qt/qtouchwebpageproxy.cpp:
        (QTouchWebPageProxy::didFindZoomableArea):
        * UIProcess/qt/qtouchwebpageproxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::findZoomableAreaForPoint):

2011-08-08  Chris Marrin  <cmarrin@apple.com>

        Logic to compute visible display rect in GraphicsLayerCA::syncCompositingState
        https://bugs.webkit.org/show_bug.cgi?id=65708

        Supply initial display rects for the full-screen case

        Reviewed by Simon Fraser.

        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
        (WebKit::WebFullScreenManagerMac::setRootFullScreenLayer):
        (WebKit::WebFullScreenManagerMac::beginEnterFullScreenAnimation):
        (WebKit::WebFullScreenManagerMac::beginExitFullScreenAnimation):

2011-08-08  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/9652350> REGRESSION (r87755): WKView doesn't update when I drag files into a background Safari window
        https://bugs.webkit.org/show_bug.cgi?id=65860

        Reviewed by Simon Fraser.

        When layer flush scheduling is re-enabled, schedule a layer flush, just in case one was requested while
        scheduling was disabled. It doesn’t seem worthwhile to track whether that in fact happened, so do so
        unconditionally.

        * WebProcess/WebPage/ca/mac/LayerTreeHostCAMac.mm:
        (WebKit::LayerTreeHostCAMac::setLayerFlushSchedulingEnabled):
        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.cpp:
        (WebKit::LayerTreeHostCAWin::setLayerFlushSchedulingEnabled):

2011-08-05  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: implement dock/undock in WebKit2 without getting into WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=65763

        InspectorFrontendClient.h can't have synchronous canAttachWindow() returning value
        since in the multiprocess environment, you can't immediately get back to it from the host.

        r92384 introduced an unhealthy WebKit -> WebCore -> WebKit canAttach query where embedder
        was asking itself a question. This loop was fixed.

        Reviewed by Yury Semikhatsky.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::attach):
        (WebKit::WebInspectorProxy::createInspectorPage):
        (WebKit::WebInspectorProxy::didLoadInspectorPage):
        (WebKit::WebInspectorProxy::shouldOpenAttached):
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.messages.in:
        * UIProcess/efl/WebInspectorEfl.cpp:
        (WebKit::WebInspectorProxy::platformInspectedWindowHeight):
        * UIProcess/gtk/WebInspectorGtk.cpp:
        (WebKit::WebInspectorProxy::platformInspectedWindowHeight):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformOpen):
        (WebKit::WebInspectorProxy::platformInspectedWindowHeight):
        * UIProcess/qt/WebInspectorProxyQt.cpp:
        (WebKit::WebInspectorProxy::platformOpen):
        (WebKit::WebInspectorProxy::platformInspectedWindowHeight):
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformOpen):
        (WebKit::WebInspectorProxy::platformInspectedWindowHeight):
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::didLoadInspectorPage):
        * WebProcess/WebPage/WebInspector.h:
        * WebProcess/WebPage/WebInspector.messages.in:

2011-08-07  Joseph Pecoraro  <joepeck@webkit.org>

        [QT] Possible Leaks WKRetainPtr<> should Adopt allocated Copy
        https://bugs.webkit.org/show_bug.cgi?id=65790

        Reviewed by Sam Weinig.

        Fix a leak by adopting an allocation instead of retaining it.

        * UIProcess/qt/qwkhistory.cpp:
        (QWKHistoryItem::title):
        (QWKHistoryItem::url):

2011-08-06  Mark Rowe  <mrowe@apple.com>

        Fix a memory leak found via code inspection.

        Rubber-stamped by Dan Bernstein.

        * WebProcess/Downloads/mac/DownloadMac.mm:
        (WebKit::setOriginalURLForDownload): Adopt the newly-allocated NSURL instance
        so that it does not leak.

2011-08-06  Aron Rosenberg  <arosenberg@logitech.com>

        Reviewed by Benjamin Poulain.

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

        Intel compiler needs .lib suffixes instead of .a

        * WebKit2.pri:

2011-08-05  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        [WebKit2] Fix code paths that can leave frame view paint behavior in the wrong state
        https://bugs.webkit.org/show_bug.cgi?id=63779

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::handleEvent): Unrelated cleanup. Removed unneeded local variable.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::snapshotInViewCoordinates): Rearranged code so that the call to
        setPaintBehavior is after the early exit. Also got rid of unneeded save/restore since
        the function uses a graphics context that it then throws away.
        (WebKit::WebPage::scaledSnapshotInDocumentCoordinates): Ditto.

2011-08-04  Mark Rowe  <mrowe@apple.com>

        Future-proof Xcode configuration settings.

        * Configurations/Base.xcconfig:
        * Configurations/CompilerVersion.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebKit2.xcconfig:

2011-08-01  Brian Weinstein  <bweinstein@apple.com>

        WebKit2: Web Inspector always starts in undocked mode
        https://bugs.webkit.org/show_bug.cgi?id=65493
        <rdar://problem/9353114>
        
        Reviewed by Adam Roben.
        
        When opening the inspector, the web process tells the UI process that the inspector page has loaded,
        but now will pass another bit of data, whether the inspector can start attached, so the UI process
        doesn't need to ask the web process to do another calculation on whether or not it can be attached.
        
        If the user prefers the inspector to start docked (this defaults to true), and there is room for the
        window, we send a message to the web process to try and attach the inspector. This makes sure that the
        inspector knows it is docked (in the web process).
        
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::attach): Update the user's docked/undocked preference if the inspector is visible
            when it was attached.
        (WebKit::WebInspectorProxy::detach): Ditto (but when it was detached).
        (WebKit::WebInspectorProxy::didLoadInspectorPage): If we can start docked, and the user prefers to start docked,
            then request the inspector be attached to the window.
        * UIProcess/WebInspectorProxy.h:

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformOpen): Only show the window if we are going to start undocked.
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformOpen): Ditto.

        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::didLoadInspectorPage): Pass whether or not we can attach the window.
        (WebKit::WebInspector::requestAttachWindow): Call through to the InspectorController to attach the inspector.
        (WebKit::WebInspector::canAttachWindow): Ask the InspectorController if we can attach the inspector.
        * WebProcess/WebPage/WebInspector.h:

        * Shared/WebPreferencesStore.h: Add a new preference for whether or not the inspector should
            start attached.

        * UIProcess/WebInspectorProxy.messages.in: When the inspector page is loaded, tell the UI Process whether
            we can attach the inspector without needing another message.
        * WebProcess/WebPage/WebInspector.messages.in: Add a new message for RequestAttachWindow

2011-08-02  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt][WK2] Create scene graph nodes for tiles in QTouchWebView instead of using imperative painting.
        https://bugs.webkit.org/show_bug.cgi?id=65528

        Reviewed by Benjamin Poulain.

        Converts QTouchWebPage from QSGPaintedItem to a straight QSGItem.
        - A SGTileNode is created and added to the scene graph for each tile,
          positioning them relatively to the page.
          It's basically a QSGSimpleTextureNode with support for specifying a
          source rect plus for owning the QSGTexture for proper destruction on
          shutdown by the rendering thread.
        - Scale nodes are used as parent of tile nodes to revert the scaling set on the
          QTouchWebPage and allow us to keep using integer coordinates.
        - The SGAgent class is introduced to carry scene graph update request up to the
          updatePaintNode call of the item, which may be on the scene graph rendering thread.

        * UIProcess/API/qt/qtouchwebpage.cpp:
        (QTouchWebPage::QTouchWebPage):
        (QTouchWebPage::updatePaintNode):
        Delegate scene graph updates to the SGAgent which received update requests from the tiled drawing area.
        (QTouchWebPage::event):
        (QTouchWebPage::geometryChanged):
        (QTouchWebPagePrivate::QTouchWebPagePrivate):
        * UIProcess/API/qt/qtouchwebpage.h:
        * UIProcess/API/qt/qtouchwebpage_p.h:
        * UIProcess/TiledDrawingAreaProxy.cpp:
        Manage the scale node in the TileSet, it will be the parent node of Tile nodes.
        (WebKit::TiledDrawingAreaTileSet::sgNodeID):
        (WebKit::TiledDrawingAreaTileSet::TiledDrawingAreaTileSet):
        (WebKit::TiledDrawingAreaTileSet::~TiledDrawingAreaTileSet):
        (WebKit::TiledDrawingAreaProxy::TiledDrawingAreaProxy):
        (WebKit::TiledDrawingAreaProxy::setContentsScale):
        (WebKit::TiledDrawingAreaProxy::createTiles):
        (WebKit::TiledDrawingAreaProxy::removeAllTiles):
        * UIProcess/TiledDrawingAreaTile.h:
        (WebKit::TiledDrawingAreaTile::create):
        * UIProcess/qt/SGAgent.cpp: Added.
        * UIProcess/qt/SGAgent.h: Added.
        * UIProcess/qt/SGTileNode.cpp: Added.
        * UIProcess/qt/SGTileNode.h: Added.
        * UIProcess/qt/TiledDrawingAreaProxyQt.cpp:
        Disable the paint call and update the scene graph on incorporateUpdate through the SGAgent.
        (WebKit::TiledDrawingAreaProxy::updateWebView):
        * UIProcess/qt/TiledDrawingAreaTileQt.cpp:
        (WebKit::TiledDrawingAreaTile::TiledDrawingAreaTile):
        (WebKit::TiledDrawingAreaTile::~TiledDrawingAreaTile):
        (WebKit::TiledDrawingAreaTile::isReadyToPaint):
        (WebKit::TiledDrawingAreaTile::swapBackBufferToFront):
        (WebKit::TiledDrawingAreaTile::paint):
        (WebKit::TiledDrawingAreaTile::incorporateUpdate):
        (WebKit::TiledDrawingAreaTile::disableUpdates):
        (WebKit::TiledDrawingAreaTile::setParentNodeID):
        * UIProcess/qt/TouchViewInterface.cpp:
        (WebKit::TouchViewInterface::sceneGraphAgent):
        (WebKit::TouchViewInterface::setViewNeedsDisplay):
        * UIProcess/qt/TouchViewInterface.h:
        * WebKit2.pro:

2011-08-04  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt] Make navigation actions properly usable in QML.
        https://bugs.webkit.org/show_bug.cgi?id=65624

        Add a new class that is exposed in QML to control the navigation
        like reload/stop/back/forward. Enums are not very QML friendly,
        it not possible to use enums that are not declared in the same class
        than the object exposed in QML, therefore it makes hard the sharing
        between the desktop and the touch views. In addition namespaced enums are
        even harder to support in QML. QWebNavigationController is
        not really meant to be used in C++ but it is exported for convenience
        reason (tests and MiniBrowser) so its API is not meant to be public but
        exposed in QML through properties and convenience slots. The QML code to use
        the navigation action in QML will look like "desktopView.navigation.reload();"
        or "if (desktopView.navigation.reloadAction.enabled) ...".

        Reviewed by Benjamin Poulain.

        * UIProcess/API/qt/WKView.h: To get the forward header generated
        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebViewPrivate::QDesktopWebViewPrivate):
        (QDesktopWebView::navigationController):
        * UIProcess/API/qt/qdesktopwebview.h:
        * UIProcess/API/qt/qdesktopwebview_p.h:
        * UIProcess/API/qt/qmlplugin/plugin.cpp:
        (WebKit2QmlPlugin::registerTypes):
        * UIProcess/API/qt/qtouchwebpage.cpp:
        (QTouchWebPage::navigationController):
        (QTouchWebPagePrivate::QTouchWebPagePrivate):
        * UIProcess/API/qt/qtouchwebpage.h:
        * UIProcess/API/qt/qtouchwebpage_p.h:
        * UIProcess/API/qt/qwebnavigationcontroller.cpp: Added.
        (QWebNavigationControllerPrivate::QWebNavigationControllerPrivate):
        (QWebNavigationController::QWebNavigationController):
        (QWebNavigationController::~QWebNavigationController):
        (QWebNavigationController::backAction):
        (QWebNavigationController::forwardAction):
        (QWebNavigationController::stopAction):
        (QWebNavigationController::reloadAction):
        (QWebNavigationController::navigationAction):
        (QWebNavigationController::back):
        (QWebNavigationController::forward):
        (QWebNavigationController::stop):
        (QWebNavigationController::reload):
        * UIProcess/API/qt/qwebnavigationcontroller.h: Added.
        * UIProcess/API/qt/tests/commonviewtests/webviewabstraction.cpp:
        (WebViewAbstraction::triggerNavigationAction):
        * UIProcess/API/qt/tests/qdesktopwebview/tst_qdesktopwebview.cpp:
        (tst_QDesktopWebView::navigationActionsStatusAtStartup):
        (LoadStartedCatcher::onLoadStarted):
        (tst_QDesktopWebView::stopActionEnabledAfterLoadStarted):
        * UIProcess/API/qt/tests/qtouchwebview/tst_qtouchwebview.cpp:
        (tst_QTouchWebView::navigationActionsStatusAtStartup):
        * WebKit2API.pri:

2011-08-03  Jeff Miller  <jeffm@apple.com>

        Use of AVFoundation should default to off on Windows
        https://bugs.webkit.org/show_bug.cgi?id=65660

        Reviewed by Darin Adler.

        * Shared/WebPreferencesStore.h: Change default value for AVFoundationEnabled to false on Windows, it's still true on other platforms.

2011-08-03  Mark Rowe  <mrowe@apple.com>

        Bring some order to FeatureDefines.xcconfig to make it easier to follow.

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:

2011-08-03  Mark Rowe  <mrowe@apple.com>

        Clean up FeatureDefines.xcconfig to remove some unnecessary conditional settings

        Reviewed by Dave Kilzer.

        * Configurations/FeatureDefines.xcconfig:

2011-08-03  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] [WK2] Improve position of context menu for QDesktopWebView
        https://bugs.webkit.org/show_bug.cgi?id=65635

        Reviewed by Andreas Kling.

        Do not assume that the QDesktopWebView takes the entire canvas when
        positioning the context menu.

        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebViewPrivate::showContextMenu):

2011-08-03  Anders Carlsson  <andersca@apple.com>

        Fix API tests.

        Initialize threading before trying to allocate the WebContext.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::sharedProcessContext):
        (WebKit::WebContext::create):

2011-08-03  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: [Timeline] Hover on paint events and see rect outline around that area.
        https://bugs.webkit.org/show_bug.cgi?id=65510

        Reviewed by Yury Semikhatsky.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::drawRect):

2011-08-02  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] [WK2] Expose web view classes to QML
        https://bugs.webkit.org/show_bug.cgi?id=65339

        Reviewed by Benjamin Poulain.

        This patch also uses QuickTest from QtDeclarative to provide the basic autotest
        infrastructure for the exposed elements.

        * UIProcess/API/qt/qmlplugin/plugin.cpp: Added.
        (WebKit2QmlPlugin::registerTypes):
        * UIProcess/API/qt/qmlplugin/qmldir: Added.
        * UIProcess/API/qt/qmlplugin/qmlplugin.pro: Added.
        * UIProcess/API/qt/qtouchwebpage.h: Expose load() to QML environment.
        * UIProcess/API/qt/qtouchwebview.h: Since QTouchWebPage* doesn't change once set
        in the constructor, we mark the page property as CONSTANT. This avoid QML
        warnings for not having a NOTIFY signal for the property change.

        * UIProcess/API/qt/tests/tests.pro:
        * UIProcess/API/qt/tests/qmltests/DesktopWebView/tst_properties.qml: Added.
        * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_properties.qml: Added.
        * UIProcess/API/qt/tests/qmltests/common/test1.html: Added.
        * UIProcess/API/qt/tests/qmltests/qmltests.pro: Added.
        * UIProcess/API/qt/tests/qmltests/tst_qmltests.cpp: Added.

2011-08-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Install web and plugin processes in libexecdir instead of bindir
        https://bugs.webkit.org/show_bug.cgi?id=65600

        Reviewed by Martin Robinson.

        Launch processes from libexecdir or WEBKIT_EXEC_PATH
        environment variable when it's set. This variable will be used by
        MiniBrowser and unit tests to find processes without having to
        install them.

        * GNUmakefile.am:
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess):

2011-08-03  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: remove Node parameter from the InspectorClient::highlight
        https://bugs.webkit.org/show_bug.cgi?id=65549

        Reviewed by Yury Semikhatsky.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::highlight):
        * WebProcess/WebCoreSupport/WebInspectorClient.h:

2011-08-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Reorganize pkg-config files
        https://bugs.webkit.org/show_bug.cgi?id=65548

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Rename pc file as webkit2gtk.pc.in. WebKit2
        depends on gtk3 unconditionally so we don't need to use
        WEBKITGTK_PC_NAME.
        * webkit2gtk.pc.in: Renamed from Source/WebKit2/gtk/webkit2.pc.in.

2011-08-01  Michael Saboff  <msaboff@apple.com>

        Virtual copying of FastMalloc allocated memory causes madvise MADV_FREE_REUSABLE errors
        https://bugs.webkit.org/show_bug.cgi?id=65502

        Reviewed by Anders Carlsson.

        Changed OOL message to use MACH_MSG_PHYSICAL_COPY flag instead of virtual flag
        so that the original memory region isn't referenced by the message and ultimately
        the receiving process.  The additional reference caused madvise(MADV_FREE_REUSABLE)
        to fail when it encountered such pages.

        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::sendOutgoingMessage):

2011-07-29  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Add QtWebProcess in PATH at runtime for WebKit2 API auto tests.
        https://bugs.webkit.org/show_bug.cgi?id=65378

        Reviewed by Benjamin Poulain.

        This prevent the runner of the tests from having to add it to PATH himself.

        * UIProcess/API/qt/tests/commonviewtests/tst_commonviewtests.cpp:
        (tst_CommonViewTests::tst_CommonViewTests):
        * UIProcess/API/qt/tests/qdesktopwebview/tst_qdesktopwebview.cpp:
        (tst_QDesktopWebView::tst_QDesktopWebView):
        * UIProcess/API/qt/tests/qtouchwebview/tst_qtouchwebview.cpp:
        (tst_QTouchWebView::tst_QTouchWebView):
        * UIProcess/API/qt/tests/tests.pri:
        * UIProcess/API/qt/tests/util.cpp: Copied from Source/WebKit2/UIProcess/API/qt/tests/util.h.
        Move definitions to a cpp file to prevent unused static symbol warnings.
        (addQtWebProcessToPath):
        (waitForSignal):
        * UIProcess/API/qt/tests/util.h:

2011-07-12  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        TiledDrawingArea: Handle update requests in the order they were received.
        https://bugs.webkit.org/show_bug.cgi?id=64365

        Reviewed by Andreas Kling.

        TiledDrawingAreaProxy::createTiles() uses the distance of tiles to the
        center of the viewport to decide which tile should be rendered first.
        This logic is useless if the requests are not handled in the same order
        as they were received.
        Now use a list instead of a map to hold pending tile update requests.

        * WebProcess/WebPage/TiledDrawingArea.cpp:
        (WebKit::TiledDrawingArea::tileUpdateTimerFired):
        (WebKit::TiledDrawingArea::cancelTileUpdate):
        (WebKit::TiledDrawingArea::requestTileUpdate):
        * WebProcess/WebPage/TiledDrawingArea.h:

2011-08-02  Amruth Raj  <amruthraj@motorola.com>

        Custom cursors cause the WebProcess to crash
        https://bugs.webkit.org/show_bug.cgi?id=64802

        Reviewed by Martin Robinson.

        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::encode): In case of a NULL cursor image, encode a bool indicating that.
        (CoreIPC::::decode): Decode the image only if required.

2011-08-01  Scott Graham  <scottmg@chromium.org>

        REGRESSION (r39725?): Resources removed from document can not be freed until the document is deleted
        https://bugs.webkit.org/show_bug.cgi?id=61006

        Reviewed by Antti Koivisto.

        Update exports for test harness.

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

2011-08-01  Hayato Ito  <hayato@chromium.org>

        Add support for getting an element in shadow root by its id into a window.internals object.
        https://bugs.webkit.org/show_bug.cgi?id=64587

        Reviewed by Hajime Morita.

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

2011-08-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r92108.
        http://trac.webkit.org/changeset/92108
        https://bugs.webkit.org/show_bug.cgi?id=65459

        breaks SL compile (Requested by tonyg-cr on #webkit).

        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):

2011-08-01  Amruth Raj  <amruthraj@motorola.com>

        Custom cursors cause the WebProcess to crash
        https://bugs.webkit.org/show_bug.cgi?id=64802

        Reviewed by Darin Adler.

        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::encode): In case of a NULL cursor image, encode a bool indicating that.
        (CoreIPC::::decode): Decode the image only if required.

2011-07-31  Daniel Bates  <dbates@webkit.org>

        Try again to fix the WinCairo Debug build after r92059 ( https://bugs.webkit.org/show_bug.cgi?id=65419).

        * win/WebKit2CFLite.def: Export symbols needed by Internals.

2011-07-30  Dan Bernstein  <mitz@apple.com>

        Try to fix the Windows build after r92059.

        * win/WebKit2.def: Export symbols needed by Internals.

2011-07-30  Patrick Gansterer  <paroga@webkit.org>

        Remove inclusion of MainThread.h from Threading.h
        https://bugs.webkit.org/show_bug.cgi?id=65081

        Reviewed by Darin Adler.

        Add missing include statements for MainThread.

        * PluginProcess/gtk/PluginProcessMainGtk.cpp:
        * PluginProcess/mac/PluginProcessMainMac.mm:
        * PluginProcess/qt/PluginProcessMainQt.cpp:
        * UIProcess/API/mac/WKPrintingView.mm:
        * UIProcess/Launcher/mac/ThreadLauncherMac.mm:
        * UIProcess/Launcher/qt/ThreadLauncherQt.cpp:
        * UIProcess/Launcher/win/ThreadLauncherWin.cpp:
        * UIProcess/WebContext.cpp:
        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.cpp:
        * WebProcess/efl/WebProcessMainEfl.cpp:
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        * WebProcess/mac/KeychainItemShimMethods.mm:
        * WebProcess/mac/WebProcessMainMac.mm:
        * WebProcess/qt/WebProcessMainQt.cpp:
        * WebProcess/win/WebProcessMainWin.cpp:

2011-07-30  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] Fix the build afer r92014
        https://bugs.webkit.org/show_bug.cgi?id=65410

        Reviewed by Noam Rosenthal.

        * Shared/ShareableBitmap.h:
        * UIProcess/qt/qdesktopwebpageproxy.cpp:
        (QDesktopWebPageProxy::paintContent):

2011-07-29  Sam Weinig  <sam@webkit.org>

        Move Region code from WebKit2 to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=65392

        Reviewed by David Hyatt.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Update project files.

        * Platform/Region.cpp: Removed.
        * Platform/Region.h: Removed.
        Remove Region files.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDraw):
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/qt/qdesktopwebpageproxy.cpp:
        * UIProcess/win/WebView.cpp:
        * WebProcess/WebPage/DrawingAreaImpl.h:
        Update for new namespace and include type.

2011-07-29  Anders Carlsson  <andersca@apple.com>

        Pass the HTTP referrer header for URLs loaded by plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=65379
        <rdar://problem/9822116>

        Reviewed by Sam Weinig.

        Set the HTTP referrer if necessary.

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

2011-07-29  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Fix the QTouchWebView in debug segfault on shutdown introduced in 91979.
        https://bugs.webkit.org/show_bug.cgi?id=64728

        Reviewed by Benjamin Poulain.

        unregisterTile is called in the tile's destructor, triggered in the TileSet's
        destruction, which happens in the middle of the proxy's destruction
        (after the m_tilesByID HashMap destruction).
        Detach the tiles in the proxy's destructor to make sure they can cleanup
        using a valid proxy.

        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::~TiledDrawingAreaProxy):

2011-07-29  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Fix the QTouchWebView in debug broke in 91979.
        https://bugs.webkit.org/show_bug.cgi?id=64728

        Reviewed by Benjamin Poulain.

        registerTile is called in the Tile's constructor, before adoptRef.
        Change the pointer parameter to use the raw type instead.

        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::registerTile):
        * UIProcess/TiledDrawingAreaProxy.h:

2011-07-29  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt] Make QDesktopWebView/QTouchWebView loadProgress property more usable in QML.
        https://bugs.webkit.org/show_bug.cgi?id=65315

        Reviewed by Benjamin Poulain.

        In order to use the loadProgress value in QML we need to make it
        a Q_PROPERTY, therefore we need a getter to get it.

        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebViewPrivate::didChangeLoadProgress):
        (QDesktopWebView::url):
        (QDesktopWebView::loadProgress):
        * UIProcess/API/qt/qdesktopwebview.h:
        * UIProcess/API/qt/qtouchwebpage.cpp:
        (QTouchWebPage::loadProgress):
        * UIProcess/API/qt/qtouchwebpage.h:
        * UIProcess/API/qt/tests/commonviewtests/tst_commonviewtests.cpp:
        (tst_CommonViewTests::stop):
        (tst_CommonViewTests::loadProgress):
        * UIProcess/API/qt/tests/commonviewtests/webviewabstraction.cpp:
        (WebViewAbstraction::WebViewAbstraction):
        (WebViewAbstraction::loadProgress):
        (WebViewAbstraction::desktopViewLoadFailed):
        (WebViewAbstraction::touchViewLoadProgressChanged):
        (WebViewAbstraction::desktopViewLoadProgressChanged):
        * UIProcess/API/qt/tests/commonviewtests/webviewabstraction.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::QtWebPageProxy):
        (QtWebPageProxy::didChangeLoadProgress):
        * UIProcess/qt/QtWebPageProxy.h:
        (QtWebPageProxy::loadProgress):
        * UIProcess/qt/TouchViewInterface.cpp:
        (WebKit::TouchViewInterface::didChangeLoadProgress):

2011-07-27  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        TiledDrawingArea: Use tile sets to paint old content while rendering for a new scale.
        https://bugs.webkit.org/show_bug.cgi?id=64728

        Reviewed by Benjamin Poulain.

        We currently delete all the tiles when setContentsScale is called. This shows a blank
        background to the user while the web process render tiles for the new scale.

        This patch extracts the ownership of individual tiles from TiledDrawingAreaProxy to
        TiledDrawingAreaTileSet to allow the proxy to paint tiles with different scales.
        We can then paint the tiles we already have on top of the tiles we are rendering for
        the new scale until enough content is available.

        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaTileSet::tiles):
        (WebKit::TiledDrawingAreaTileSet::contentsScale):
        (WebKit::TiledDrawingAreaTileSet::TiledDrawingAreaTileSet):
        (WebKit::TiledDrawingAreaTileSet::mapToContents):
        (WebKit::TiledDrawingAreaTileSet::mapFromContents):
        (WebKit::TiledDrawingAreaProxy::TiledDrawingAreaProxy):
        (WebKit::TiledDrawingAreaProxy::registerTile):
        (WebKit::TiledDrawingAreaProxy::unregisterTile):
        Added those two methods to allow the tiles to clean
        themselves on destruction.
        (WebKit::TiledDrawingAreaProxy::requestTileUpdate):
        (WebKit::TiledDrawingAreaProxy::cancelTileUpdate):
        (WebKit::TiledDrawingAreaProxy::invalidate):
        (WebKit::TiledDrawingAreaProxy::updateTileBuffers):
        (WebKit::TiledDrawingAreaProxy::tileBufferUpdateComplete):
        (WebKit::TiledDrawingAreaProxy::paint):
        (WebKit::TiledDrawingAreaProxy::coverageRatio):
        (WebKit::TiledDrawingAreaProxy::setContentsScale):
        (WebKit::TiledDrawingAreaProxy::createTiles):
        (WebKit::TiledDrawingAreaProxy::resizeEdgeTiles):
        (WebKit::TiledDrawingAreaProxy::dropTilesOutsideRect):
        (WebKit::TiledDrawingAreaProxy::disableTileSetUpdates):
        (WebKit::TiledDrawingAreaProxy::removeAllTiles):
        (WebKit::TiledDrawingAreaProxy::contentsRect):
        (WebKit::TiledDrawingAreaProxy::visibleRect):
        (WebKit::TiledDrawingAreaProxy::hasPendingUpdates):
        * UIProcess/TiledDrawingAreaProxy.h:
        * UIProcess/TiledDrawingAreaTile.h:
        * UIProcess/qt/TiledDrawingAreaTileQt.cpp:
        (WebKit::TiledDrawingAreaTile::TiledDrawingAreaTile):
        (WebKit::TiledDrawingAreaTile::~TiledDrawingAreaTile):
        (WebKit::TiledDrawingAreaTile::incorporateUpdate):
        (WebKit::TiledDrawingAreaTile::disableUpdates):
        (WebKit::TiledDrawingAreaTile::updateBackBuffer):

2011-07-28  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (5.1): CJK input broken after clicking on Flash content
        <rdar://problem/9854447>
        https://bugs.webkit.org/show_bug.cgi?id=65349

        Reviewed by Darin Adler.

        After giving Flash focus on a page and then navigating away from that page
        using the back button, we were not getting notified to switch back to
        inline (non-complex) input. Now, notify the page that it can leave complex
        text mode when the plugin is destroyed.

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

2011-07-28  Anders Carlsson  <andersca@apple.com>

        Crash when trying to encode FontInfo with a null font attribute descriptor
        https://bugs.webkit.org/show_bug.cgi?id=65350
        <rdar://problem/9520670>

        Reviewed by Darin Adler.

        * Shared/FontInfo.cpp:
        (WebKit::FontInfo::encode):
        Encode a boolean specifying whether there's a fontAttributeDictionary member variable.

        (WebKit::FontInfo::decode):
        Don't try to decode the fontAttributeDictionary member variable if none has been encoded.

2011-07-26  Chris Fleizach  <cfleizach@apple.com>

        REGRESSION (Safari 5.1): JavaScript dialogs not usable with VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=65214

        Reviewed by Anders Carlsson.

        Allow the ability to spin the run loop while WebProcess is waiting for a synchronous reply.
        This allows it to continue to serve accessibility requests while waiting and basically
        restores the behavior WK1 was presenting. This patch only enables this mode when accessibility is on.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendSyncMessage):
        (CoreIPC::Connection::waitForSyncReply):
        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::sendSync):
        * Platform/RunLoop.h:
        * Platform/mac/RunLoopMac.mm:
        (RunLoop::runForDuration):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::runJavaScriptAlert):
        (WebKit::WebChromeClient::runJavaScriptConfirm):
        (WebKit::WebChromeClient::runJavaScriptPrompt):

2011-07-28  Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com>

        Pass the key_press_event or key_release_event to parent widget when it is not handled by Web Process.
        (https://bugs.webkit.org/show_bug.cgi?id=64790)

        Reviewed by Martin Robinson.

        * Shared/NativeWebKeyboardEvent.h:
        (WebKit::NativeWebKeyboardEvent::nativeEvent): Return a GdkEvent* instead of const GdkEvent* (non-const).
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::doneWithKeyEvent): Implemented for GTK port. Sets flag if the keyboard event 
        needs to be passed to the parent widget. Invoke gtk_main_do_event() if event needs to be passed to parent.
        * UIProcess/API/gtk/PageClientImpl.h: Deleted obsolete functions didNotHandleKeyEvent & didNotHandleWheelEvent.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkit_web_view_base_init): Initialize shouldForwardNextKeyEvent flag.
        (webkitWebViewBaseKeyPressEvent): Pass event to parent widget depending on status from doneWithKeyEvent. 
        (webkitWebViewBaseKeyReleaseEvent): Pass event to parent widget depending on status from doneWithKeyEvent.
        (webkitWebViewBaseForwardNextKeyEvent): API to set flag shouldForwardNextKeyEvent.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h: Added API to set shouldForwardNextKeyEvent flag.

2011-07-28  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/9589433> Displaying Japanese dictionary contents in vertical orientation takes a couple of seconds

        Reviewed by Darin Adler.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Initialize wkGetVerticalGlyphsForCharacters.

2011-07-28  Brady Eidson  <beidson@apple.com>

        <rdar://problem/9714337> and https://bugs.webkit.org/show_bug.cgi?id=65306
        WebKitInitializeStorageIfNecessary() can take awhile performing i/o, isn't necessary for every WebView

        Reviewed by Maciej Stachowiak.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess): Pass a null client pointer in the new form of initializeTracker()

2011-07-27  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove operator new from JSCell
        https://bugs.webkit.org/show_bug.cgi?id=64999

        Reviewed by Oliver Hunt.

        Removed the implementation of operator new in JSCell, so any further uses
        will not successfully link.  Also removed any remaining uses of operator new.

        * WebProcess/Plugins/Netscape/JSNPMethod.h:
        (WebKit::JSNPMethod::create):
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::methodGetter):
        * WebProcess/Plugins/Netscape/JSNPObject.h:
        (WebKit::JSNPObject::create):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::getOrCreateJSObject):

2011-07-27  Benjamin Poulain  <benjamin@webkit.org>

        [WK2][Qt] Move from QGraphicsView to Qt Scene Graph
        https://bugs.webkit.org/show_bug.cgi?id=62969

        Reviewed by Andreas Kling.

        Co-authored with Simon Hausmann  <simon.hausmann@nokia.com>

        This patch change the base of WebKit2 from QGraphicsWidget
        to scenegraph based items.

        QTouchWebView becomes a QSGItem with the only role of clipping
        child items.
        QTouchWebPage becomes a QSGPaintedItem in order to render the content
        of the flattened page. This is a temporary work around to get
        something running without deep changes on the drawing area proxy.

        QDesktopWebView become a QSGPaintedItem and behave as before
        regarding rendering. The drawing area proxy is used to render
        the full item.

        The event delivery had to be adapted because the scenegraph does not
        follow regular delivery of QEvents. Instead, each event type is
        delivered directly to a specific virtual function.
        In this patch, the events are forwarded to the classic QObject::event().

        For the features that cannot be implemented on scenegraph (tooltip, menus, etc),
        a temporary workaround was added: the parent canvas is used as the widget for
        providing the feature. This assumes the web views alone in the canvas and
        take its full size. This will have to be fixed in the scenegraph for us to
        implement those features.

        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebViewPrivate::drawingAreaSize):
        (QDesktopWebViewPrivate::isActive):
        (QDesktopWebViewPrivate::startDrag):
        (QDesktopWebViewPrivate::didChangeToolTip):
        (QDesktopWebViewPrivate::didChangeCursor):
        (QDesktopWebViewPrivate::showContextMenu):
        (QDesktopWebView::QDesktopWebView):
        (QDesktopWebView::init):
        (paintCrashedPage):
        (QDesktopWebView::keyPressEvent):
        (QDesktopWebView::keyReleaseEvent):
        (QDesktopWebView::inputMethodEvent):
        (QDesktopWebView::focusInEvent):
        (QDesktopWebView::focusOutEvent):
        (QDesktopWebView::mousePressEvent):
        (QDesktopWebView::mouseMoveEvent):
        (QDesktopWebView::mouseReleaseEvent):
        (QDesktopWebView::mouseDoubleClickEvent):
        (QDesktopWebView::wheelEvent):
        (QDesktopWebView::touchEvent):
        (QDesktopWebView::hoverEnterEvent):
        (QDesktopWebView::hoverMoveEvent):
        (QDesktopWebView::hoverLeaveEvent):
        (QDesktopWebView::dragMoveEvent):
        (QDesktopWebView::dragEnterEvent):
        (QDesktopWebView::dragExitEvent):
        (QDesktopWebView::dragDropEvent):
        (QDesktopWebView::geometryChanged):
        (QDesktopWebView::paint):
        (QDesktopWebView::event):
        * UIProcess/API/qt/qdesktopwebview.h:
        * UIProcess/API/qt/qtouchwebpage.cpp:
        (QTouchWebPage::QTouchWebPage):
        (QTouchWebPage::paint):
        (QTouchWebPage::event):
        (QTouchWebPage::keyPressEvent):
        (QTouchWebPage::keyReleaseEvent):
        (QTouchWebPage::inputMethodEvent):
        (QTouchWebPage::focusInEvent):
        (QTouchWebPage::focusOutEvent):
        (QTouchWebPage::touchEvent):
        (QTouchWebPage::geometryChanged):
        * UIProcess/API/qt/qtouchwebpage.h:
        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebViewPrivate::scroll):
        (QTouchWebView::QTouchWebView):
        (QTouchWebView::geometryChanged):
        * UIProcess/API/qt/qtouchwebview.h:
        * UIProcess/API/qt/tests/tests.pri:
        * UIProcess/API/qt/tests/testwindow.h:
        (TestWindow::TestWindow):
        (TestWindow::resizeEvent):
        * UIProcess/qt/TouchViewInterface.cpp:
        (WebKit::TouchViewInterface::panGestureRequestScroll):
        (WebKit::TouchViewInterface::pinchGestureRequestUpdate):
        (WebKit::TouchViewInterface::drawingAreaSize):
        (WebKit::TouchViewInterface::contentSizeChanged):
        (WebKit::TouchViewInterface::isActive):
        * UIProcess/qt/ViewInterface.cpp: Removed.
        * UIProcess/qt/ViewInterface.h:
        * WebKit2.pro:

2011-07-27  Benjamin Poulain  <benjamin@webkit.org>

        [Qt][WK2] Clean WKPageLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=65246

        Reviewed by Andreas Kling.

        Remove the empty functions from Qt's WKPageLoaderClient.

        * UIProcess/qt/ClientImpl.cpp:
        (qt_wk_didSameDocumentNavigationForFrame): Move the function to
        have all the implementations in the same order as the definitions.
        * UIProcess/qt/ClientImpl.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::init):

2011-07-27  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Fix Qt (and possibly Gtk) WebKit2 build after addition of -webkit-pictograph
        https://bugs.webkit.org/show_bug.cgi?id=65253

        Reviewed by Andreas Kling.

        The -webkit-pictograph generic family was added by bug 65197.

        * Shared/WebPreferencesStore.h:

2011-07-27  Benjamin Poulain  <benjamin@webkit.org>

        [Qt][WK2] Simplify the PageUIClient
        https://bugs.webkit.org/show_bug.cgi?id=65198

        Reviewed by Andreas Kling.

        The only function of WKPageLoaderClient with a complete implementation
        is qt_wk_setStatusText(). The other functions were what is left from
        before the refactoring of QWKPage.

        This patch removes the unused functions to simplify the client. Since the dependency
        on QtWebPageProxy is removed from that client, it now calls the ViewInterface directly.

        * UIProcess/qt/ClientImpl.cpp:
        (toViewInterface):
        (qt_wk_setStatusText):
        * UIProcess/qt/ClientImpl.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::QtWebPageProxy):
        (QtWebPageProxy::init):
        * UIProcess/qt/QtWebPageProxy.h:

2011-07-26  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        Add support for download='filename' attribute in anchors.
        https://bugs.webkit.org/show_bug.cgi?id=64580

        Reviewed by Adam Barth.

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

2011-07-26  Tim Horton  <timothy_horton@apple.com>

        Apply r40940 to WebKit2 to work around a Silverlight crash.
        https://bugs.webkit.org/show_bug.cgi?id=65205
        <rdar://problem/9058370>

        Reviewed by Anders Carlsson.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::determineQuirks):
        * Shared/Plugins/PluginQuirks.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::userAgent):

2011-07-26  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/9842889> Add a generic pictograph font family
        https://bugs.webkit.org/show_bug.cgi?id=65197

        Reviewed by Anders Carlsson.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetPictographFontFamily): Added.
        (WKPreferencesCopyPictographFontFamily): Added.
        * UIProcess/API/C/WKPreferences.h:

2011-07-26  Andras Becsi  <abecsi@webkit.org>

        [Qt] [WK2] Disable the build with Qt versions older than 5.0 
        https://bugs.webkit.org/show_bug.cgi?id=65189

        Reviewed by Csaba Osztrogonác.

        * Platform/qt/ModuleQt.cpp:
        (WebKit::Module::platformFunctionPointer): Fix the build for Qt5.

2011-07-26  Benjamin Poulain  <benjamin@webkit.org>

        [Qt][WK2] Make the WebContextMenuProxyQt handle the full interactions between the views and the WebPageProxy
        https://bugs.webkit.org/show_bug.cgi?id=64739

        Reviewed by Andreas Kling.

        Change the WebContextMenuProxyQt to be the intermediary between the WebPageProxy and our views regarding
        the context menu.

        The actions of the context menu are no longer the responsibility of QtWebPageProxy but are instead
        created and handled directly by the WebContextMenuProxyQt.

        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::createContextMenuProxy):
        (QtWebPageProxy::triggerAction):
        (QtWebPageProxy::action):
        * UIProcess/qt/QtWebPageProxy.h:
        * UIProcess/qt/WebContextMenuProxyQt.cpp:
        (WebKit::WebContextMenuProxyQt::WebContextMenuProxyQt):
        (WebKit::WebContextMenuProxyQt::create):
        (WebKit::WebContextMenuProxyQt::actionTriggered):
        (WebKit::WebContextMenuProxyQt::showContextMenu):
        (WebKit::WebContextMenuProxyQt::hideContextMenu):
        (WebKit::WebContextMenuProxyQt::createContextMenu):
        * UIProcess/qt/WebContextMenuProxyQt.h:

2011-07-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove header webkitwebviewcommon.h
        https://bugs.webkit.org/show_bug.cgi?id=65177

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebView.h: Add function prototypes
        instead of including webkitwebviewcommon.h.

2011-07-22  Jessie Berlin  <jberlin@apple.com>

        [WebKit2] Changing the cookie accept policy in Private Browsing doesn’t work.
        https://bugs.webkit.org/show_bug.cgi?id=64997

        Reviewed by Ada Chan.

        * WebProcess/Cookies/mac/WebCookieManagerMac.mm:
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
        Set the policy on the Cookie Storage used by the Private Browsing Storage Session as well.
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-07-21  Yael Aharon  <yael.aharon@nokia.com>

        [Qt][WK2] Code cleanup for drag-and-drop
        https://bugs.webkit.org/show_bug.cgi?id=64916

        Reviewed by Andreas Kling.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::startDrag):
        Allow receiving a NULL bitmap from the web process.
        
        * UIProcess/qt/qdesktopwebpageproxy.cpp:
        (QDesktopWebPageProxy::handleEvent):
        Fix typo introduced in http://trac.webkit.org/changeset/90458.
        All DnD related events should be GraphicsScene events.
        
        * WebProcess/WebCoreSupport/qt/WebDragClientQt.cpp:
        (WebKit::convertQPixmapToShareableBitmap):
        Remove hack that creates a 1x1 bitmap.
        It is no longer needed after http://trac.webkit.org/changeset/91016.
        
        (WebKit::WebDragClient::startDrag):
        Allow sending a NULL bitmap to the UI process.

2011-07-20  Tim Horton  <timothy_horton@apple.com>

        Scrollbar color heuristic needs to be hooked up in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=64220
        <rdar://problem/9589140>

        Reviewed by Darin Adler.

        Store the scroller style on ScrollableArea, and recompute it whenever
        the document or body element background color changes or the base background
        color of the scrollview changes. Also, make sure to repaint the scrollbars
        whenever the style changes.

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

2011-07-20  James Robinson  <jamesr@chromium.org>

        Revert worker and WebKit2 runloops to use currentTime() for scheduling instead of the monotonic clock
        https://bugs.webkit.org/show_bug.cgi?id=64841

        Reviewed by Mark Rowe.

        http://trac.webkit.org/changeset/91206 converted most of WebKit's deferred work scheduling to using the
        monotonic clock instead of WTF::currentTime().  This broke many plugin tests on WebKit2 for reasons that are
        unclear.  This reverts everything except for WebCore::ThreadTimers back to the previous behavior.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::waitForMessage):
        (CoreIPC::Connection::waitForSyncReply):
        * Platform/RunLoop.h:

2011-07-19  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r91307.

        * Platform/Logging.h:

2011-07-19  Lukasz Slachciak  <lukasz.slachciak@gmail.com>

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

        Reviewed by Martin Robinson.

        Implemented logging for GTK platform in WebKit2 - function initializeLogChannel is called for all ports,
        so added missing implementation. Aslo helper function added for getting channels from names.

        * GNUmakefile.am: Added reference to new file LoggingGtk.cpp.
        * Platform/Logging.cpp: Logging implementation for GTK port enabled.
        (WebKit::getChannelFromName): Helper to connect name with WTFLogChannel.
        * Platform/Logging.h: New helper method added.
        * Platform/gtk/LoggingGtk.cpp: Added. GTK logging implementation.
        (WebKit::initializeLogChannel): Channel is initialized if its name is found in WEBKIT_DEBUG.

2011-07-19  Brian Weinstein  <bweinstein@apple.com>

        Add back a change that was accidentally removed in r91266.
        
        Make sure to retain the WKPasteboardFilePromiseOwner before calling draggedImage because draggedImage releases
        its responder. Also make the comment more explicit, to keep this mistake from being made in the future.
        
        Rubber-stamped by Darin Adler.

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::dragEnded):

2011-07-18  Brian Weinstein  <bweinstein@apple.com>

        Speculative fix for: Crash under WebPage::platformDragEnded when dragging on Mac
        https://bugs.webkit.org/show_bug.cgi?id=64766
        <rdar://problem/9548174>

        Reviewed by Enrica Casucci.

        I was unable to reproduce this bug, but Darin Adler and I discussed the probable issue. When starting the drag, we create 
        a WKPasteboardFilePromiseOwner, and a WKPasteboardOwner. When the drag is concluded, we call a method on the WKPasteboardFilePromiseOwner
        which uses the WKPasteboardOwner. However, we are not guaranteeing that the WKPasteboardOwner will be around when the 
        WKPasteboardFilePromiseOwner method is called.
        
        The fix is to retain both the WKPasteboardFilePromiseOwner and the WKPasteboardOwner that we need, making sure that we are keeping
        both objects alive.
        
        This patch also uses r91222 to replace WebPage::platformDragEnded, so WebPage doesn't need to know about the drag source.

        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        (WebKit::WebDragClient::dragEnded): Add a non-Mac stub method, since the Mac is the only platform that does something here.
        * WebProcess/WebCoreSupport/WebDragClient.h:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::declareAndWriteDragImage): Use member variables instead of local variables.
        (WebKit::WebDragClient::dragEnded): Move code from WebPageMac::platformDragEnded to here, and clear both member variables.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::dragEnded): Don't call platformDragEnded anymore. WebCore::DragController::dragEnded calls WebDragClient::dragEnded,
            which does the same thing.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm: Remove platformDragEnded.

2011-07-18  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt][WK2] Make QDesktopWebView::navigationAction method usable in QML.
        https://bugs.webkit.org/show_bug.cgi?id=64690

        Make the API usable with QML by declaring what's needed
        with the macros.

        Reviewed by Benjamin Poulain.

        * UIProcess/API/qt/qdesktopwebview.h:

2011-07-18  MORITA Hajime  <morrita@google.com>

        [ShadowContentElement] forwarded node should be able to access its hosting content element.
        https://bugs.webkit.org/show_bug.cgi?id=64251

        Reviewed by Dimitri Glazkov.

        Exported additional symbols for window.internals object.

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

2011-07-18  Dean Jackson  <dino@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=64742
        Expose WebPreferences for media playback requiring user gestures and inline playback

        Reviewed by Simon Fraser.

        Two new WebPreferences: MediaPlaybackRequiresUserGesture and
        MediaPlaybackAllowsInline.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetMediaPlaybackRequiresUserGesture):
        (WKPreferencesGetMediaPlaybackRequiresUserGesture):
        (WKPreferencesSetMediaPlaybackAllowsInline):
        (WKPreferencesGetMediaPlaybackAllowsInline):
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2011-07-18  James Robinson  <jamesr@chromium.org>

        Timer scheduling should be based off the monotonic clock
        https://bugs.webkit.org/show_bug.cgi?id=64544

        Reviewed by Darin Adler.

        Converts the WebKit2 RunLoop and CoreIPC timeouts to use monotonicallyIncreasingTime().

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::waitForMessage):
        (CoreIPC::Connection::waitForSyncReply):
        * Platform/RunLoop.h:

2011-07-18  Anders Carlsson  <andersca@apple.com>

        Make using lowercase parameter names for AppleConnect be a plug-in quirk
        https://bugs.webkit.org/show_bug.cgi?id=64638

        Reviewed by Sam Weinig.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::determineQuirks):
        Set the WantsLowercaseParameterNames quirk for the AppleConnect plug-in.

        * Shared/Plugins/PluginQuirks.h:
        Add WantsLowercaseParameterNames quirk.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::initialize):
        If the plug-in has the WantsLowercaseParameterNames quirk, convert the parameter
        names to lowercase.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin):
        Remove the code that would convert the parameters here. Also remove the FIXME; plug-in quirks
        aren't really the same thing as site-specific quirks.

2011-07-15  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Consider QTouchWebPage's transform when scrolling the viewport.
        https://bugs.webkit.org/show_bug.cgi?id=64541

        Reviewed by Benjamin Poulain.

        Currently the scroll deltas are given to moveBy in page coordinates
        which doesn't match when the page view is scalled.
        This patch gives the scroll delta to the viewport in it's own coordinates.

        * UIProcess/qt/TouchViewInterface.cpp:
        (WebKit::TouchViewInterface::panGestureRequestScroll):

2011-07-15  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Push the new viewport rect to the drawing area after committing the scale.
        https://bugs.webkit.org/show_bug.cgi?id=64597

        Reviewed by Benjamin Poulain.

        * UIProcess/qt/TouchViewInterface.cpp:
        (WebKit::TouchViewInterface::pinchGestureEnded):

2011-07-15  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Remove the scale commit timer from QTouchWebPage.
        https://bugs.webkit.org/show_bug.cgi?id=64600

        Reviewed by Benjamin Poulain.

        Since we don't currently need unprepared page view scale changes,
        this timer isn't useful.

        * UIProcess/API/qt/qtouchwebpage.cpp:
        (QTouchWebPage::QTouchWebPage):
        (QTouchWebPagePrivate::QTouchWebPagePrivate):
        (QTouchWebPagePrivate::commitScaleChange):
        * UIProcess/API/qt/qtouchwebpage.h:
        * UIProcess/API/qt/qtouchwebpage_p.h:
        * UIProcess/qt/TouchViewInterface.cpp:
        (WebKit::TouchViewInterface::pinchGestureStarted):

2011-07-15  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        TiledDrawingArea: map the visibleArea rect from page to tiles coordinates.
        https://bugs.webkit.org/show_bug.cgi?id=64538

        Reviewed by Benjamin Poulain.

        TiledDrawingAreaProxy expects its coordinates to be scaled according to
        contentsScale. This patch keep the pushed visibleArea as page coordinates
        and convert it each time to scaled coordinates in case the contents scale was
        changed afterward.
        This is a regression introduced in r90750.
        Also:
        - Rename visibleArea to visibleContentRect
        - Remove an unnecessary mapToContents in QTouchWebPageProxy::setVisibleContentRect

        * UIProcess/API/qt/qtouchwebpage.cpp:
        (QTouchWebPagePrivate::setViewportRect):
        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::invalidate):
        (WebKit::TiledDrawingAreaProxy::setVisibleContentRect):
        (WebKit::TiledDrawingAreaProxy::createTiles):
        (WebKit::TiledDrawingAreaProxy::visibleRect):
        * UIProcess/TiledDrawingAreaProxy.h:
        * UIProcess/qt/qtouchwebpageproxy.cpp:
        (QTouchWebPageProxy::setVisibleContentRect):
        * UIProcess/qt/qtouchwebpageproxy.h:

2011-07-17  Amruth Raj  <amruthraj@motorola.com>

        [GTK] Fix selection of elements in a multi select list and remove an unnecessary include in WorkQueue
        https://bugs.webkit.org/show_bug.cgi?id=64666

        Reviewed by Martin Robinson.

        * Platform/gtk/WorkQueueGtk.cpp: Remove an include which is no longer required
        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::modifiersForEvent): Fix an incorrect ASSERT statement
        (WebKit::WebEventFactory::createWebMouseEvent): Call the function to determine the modifier keys

2011-07-17  Lukasz Slachciak  <l.slachciak@samsung.com>

        Reviewed by Martin Robinson.

         [GTK] [WK2] Fix for getting editor client commands.
         https://bugs.webkit.org/show_bug.cgi?id=63081

         Editor client commands intepretation was incorrect. It was based on the NativeWebKeyboardEvent only.
         In fact EventHandler is generating interpreted events - keypress and keydown. These event types
         are now passed from UIProcess to WebProcess so KeyBindingTranslator can correctly find editor commands.
         Also build break for Debug build was fixed.

        * UIProcess/API/gtk/PageClientImpl.cpp: KeyboardEvent type is used for KeyBindingTranslator.
        (WebKit::PageClientImpl::getEditorCommandsForKeyEvent): getEditorCommandsForKeyEvent now has additional
        parameter describing KeyboardEvent type.
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::getEditorCommandsForKeyEvent): KeyboardEvent type passed to PageClient.
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        (WebKit::WebEditorClient::getEditorCommandsForKeyEvent): Sync message send with KeyboardEvent type.

2011-07-16  Daniel Bates  <dbates@webkit.org>

        Fix Win Cairo Debug build after <http://trac.webkit.org/changeset/91085>.

        Add stub implementation of scale factor overloaded ShareableBitmap::paint() for
        Cairo WebKit2 port after its usage in changeset <http://trac.webkit.org/changeset/91085>.

        Also add stub implementation for GTK.

        We'll need to actually implement this. See <https://bugs.webkit.org/show_bug.cgi?id=64664>
        and <https://bugs.webkit.org/show_bug.cgi?id=64665> for Cairo and GTK, respectively.

        * Shared/cairo/ShareableBitmapCairo.cpp:
        (WebKit::ShareableBitmap::paint): Added scale-factor variant.
        * Shared/gtk/ShareableBitmapGtk.cpp:
        (WebKit::ShareableBitmap::paint): Added scale-factor variant.

2011-07-16  Daniel Bates  <dbates@webkit.org>

        Fix Qt Linux Release build after changeset <http://trac.webkit.org/changeset/91085>
        (https://bugs.webkit.org/show_bug.cgi?id=64611).

        Stub out scale factor-variant implementation of ShareableBitmap::paint().
        We'll need to implement this. See <https://bugs.webkit.org/show_bug.cgi?id=64663>
        for more details.

        * Shared/qt/ShareableBitmapQt.cpp:
        (WebKit::ShareableBitmap::paint): Added scale-factor variant.

2011-07-16  Simon Fraser  <simon.fraser@apple.com>

        Add code to attempt to align compositing layers to pixel boundaries when page scale changes
        https://bugs.webkit.org/show_bug.cgi?id=64658

        Reviewed by Dan Bernstein.
        
        Removed implementation of pageScaleFactor() now that GraphicsLayerClient has
        a default implementation.

        * WebProcess/WebPage/ca/LayerTreeHostCA.cpp:
        * WebProcess/WebPage/ca/LayerTreeHostCA.h:

2011-07-16  Daniel Bates  <dbates@webkit.org>

        Attempt to fix the Qt Linux Release build after changeset <http://trac.webkit.org/changeset/91097>
        (https://bugs.webkit.org/show_bug.cgi?id=64615).

        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::setCursorHiddenUntilMouseMoves): Added stub method.
        * UIProcess/qt/QtWebPageProxy.h:

2011-07-15  Pratik Solanki  <psolanki@apple.com>

        Part of https://bugs.webkit.org/show_bug.cgi?id=63674
        Get webkit to compile with USE(CFNETWORK) enabled on Mac

        Reviewed by David Kilzer.

        New WebKitSystemInterface functions for CFNetwork-based loader.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-07-15  Tim Horton  <timothy_horton@apple.com>

        Overlay scrollbars in overflow areas no longer pulse when revealed
        https://bugs.webkit.org/show_bug.cgi?id=64606
        <rdar://problem/9390674>

        Reviewed by Simon Fraser.

        Ensure that the state of the scrollbar implementation is kept in sync
        with WebCore's internal representation. Previously, we synchronized them
        at paint time, causing pulsing to be skipped due to the scrollbars being
        disabled.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-07-15  Simon Fraser  <simon.fraser@apple.com>

        Have GraphicsLayer pull their contentsScale, rather than pushing it onto them
        https://bugs.webkit.org/show_bug.cgi?id=64643

        Reviewed by Darin Adler.
        
        Impement new GraphicsLayerClient methods related to contents scale,
        and don't push the scale.

        * WebProcess/WebPage/ca/LayerTreeHostCA.cpp:
        (WebKit::LayerTreeHostCA::initialize):
        (WebKit::LayerTreeHostCA::backingScaleFactor):
        (WebKit::LayerTreeHostCA::pageScaleFactor):
        (WebKit::LayerTreeHostCA::createPageOverlayLayer):
        * WebProcess/WebPage/ca/LayerTreeHostCA.h:
        (WebKit::LayerTreeHostCA::didCommitChangesForLayer):

2011-07-15  Ada Chan  <adachan@apple.com>

        Implement "Jump to Selection" in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=64569

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView centerSelectionInVisibleArea:]): Call WebPageProxy::centerSelectionInVisibleArea().
        (-[WKView validateUserInterfaceItem:]): Enable the centerSelectionInVisibleArea: selector if there's a selection
        range or if there's an insertion point in an editable area.
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::showFindIndicatorInSelection): Call updateFindIndicator() to show the find indicator.
        * WebProcess/WebPage/FindController.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::centerSelectionInVisibleArea): Use the selection in the focused or main frame.
        After scrolling the selection into view, flash the find indicator.

2011-07-15  Dan Bernstein  <mitz@apple.com>

        Windows build fix.

        * UIProcess/win/WebView.cpp:

2011-07-15  Dan Bernstein  <mitz@apple.com>

        Windows build fix.

        * UIProcess/win/WebView.h:

2011-07-15  Dan Bernstein  <mitz@apple.com>

        REGRESSION: Mouse cursor doesn’t hide when full screen video HUD hides
        https://bugs.webkit.org/show_bug.cgi?id=64615

        Reviewed by Anders Carlsson.

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::setCursorHiddenUntilMouseMoves): Added this stub.
        * UIProcess/API/efl/PageClientImpl.h:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::setCursorHiddenUntilMouseMoves): Ditto.
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setCursorHiddenUntilMouseMoves): Added. Calls +[NSCursor setHiddenUntilMouseMoves:].
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setCursorHiddenUntilMouseMoves): Added. Calls through to the PageClient.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in: Added SetCursorHiddenUntilMouseMoves message.
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::setCursorHiddenUntilMouseMoves): Added this stub.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::setCursorHiddenUntilMouseMoves): Added. Sends SetCursorHiddenUntilMouseMoves message
        to the page proxy.
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2011-07-14  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=64250
        Global strict mode function leaking global object as "this".

        Reviewed by Oliver Hunt.

        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::NPJSObject::invoke):
            - Change call to pass DOM Window shell, instead of the global varaible object.

2011-07-15  Anders Carlsson  <andersca@apple.com>

        Find indicator should take scale factor into account
        https://bugs.webkit.org/show_bug.cgi?id=64611
        <rdar://problem/9761020>

        Reviewed by Sam Weinig.

        * UIProcess/FindIndicator.cpp:
        (WebKit::FindIndicator::create):
        (WebKit::FindIndicator::FindIndicator):
        Keep track of the scale factor of the find indicator bitmap.

        (WebKit::FindIndicator::draw):
        Pass the scale factor to ShareableBitmap::draw.

        * UIProcess/FindIndicator.h:
        Add scale factor member variable.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setFindIndicator):
        This now takes the content image scale factor.

        * UIProcess/WebPageProxy.messages.in:
        Add the scale factor.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindIndicator):
        Size the backing store correctly, and apply the scale factor to
        the graphics context.

        (WebKit::FindController::hideFindIndicator):
        Pass the scale factor along.

2011-07-15  Martin Robinson  <mrobinson@igalia.com>

        Build fixes for WebKit2. Ensure that all generated sources are
        on nodist primaries, that they are on forward declared variables
        so that BUILT_SOURCES is calculated properly and that zlib is 
        included during linking (for WOFF support).

        * GNUmakefile.am:

2011-07-15  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Upstream QtWebKit/N9 changes related to visibleContentRect
        https://bugs.webkit.org/show_bug.cgi?id=64589

        Reviewed by Simon Hausmann.

        Rename setActualVisibleContentRect to setFixedVisibleContentRect
        as that makes it more obvious that it is an override. It is also
        consistent with the setFixedLayout which is often used in
        conjunction with it.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setFixedVisibleContentRect):
        * UIProcess/WebPageProxy.h:
        * UIProcess/qt/qtouchwebpageproxy.cpp:
        (QTouchWebPageProxy::setVisibleArea):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        Only set fixedVisibleContentRect for the mainframe.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setFixedVisibleContentRect):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2011-07-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Install a custom X error handler in plugin process
        https://bugs.webkit.org/show_bug.cgi?id=63248

        Some plugins, specially flash, can cause X errors that when
        handled by the default X error handler (or the GDK one) abort the
        process. Since we don't want to crash due to buggy plugins, we
        install a custom error handler to show a warning when a X error
        happens without aborting.

        * PluginProcess/gtk/PluginProcessMainGtk.cpp:
        (WebKit::webkitgtkXError):
        (WebKit::PluginProcessMainGtk):

2011-07-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Anders Carlsson.

        [UNIX] Allow sending null handles in messages
        https://bugs.webkit.org/show_bug.cgi?id=60621

        Only valid file descriptors are now sent using sendmsg() control
        messages, and instead of sending a list of attachment sizes we now
        send a list of AttachmentInfo structs. AttachmentInfo contains
        information about the attachments including the size for
        MappedMemory attachmens and whether the attachment is null or not.

        * Platform/CoreIPC/unix/ConnectionUnix.cpp:
        (CoreIPC::AttachmentInfo::AttachmentInfo): New class containing
        information about the attachments sent.
        (CoreIPC::AttachmentInfo::setType): Set the attachment type.
        (CoreIPC::AttachmentInfo::getType): Return the attachment type.
        (CoreIPC::AttachmentInfo::setSize): Set the size for MappedMemory attachments.
        (CoreIPC::AttachmentInfo::getSize): Get the size for MappedMemory attachments.
        (CoreIPC::AttachmentInfo::setNull): Set attachment as null, it
        contains an invalid file descriptor, so the receiver shouldn't
        expect a file desriptor for this attachment.
        (CoreIPC::AttachmentInfo::isNull): Return whether attachment is
        null, it contains an invalid file descriptor.
        (CoreIPC::Connection::processMessage):
        (CoreIPC::Connection::sendOutgoingMessage):

2011-07-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement Plugin Process
        https://bugs.webkit.org/show_bug.cgi?id=60546

        * GNUmakefile.am: Add new files to compilation.
        * PluginProcess/gtk/PluginProcessMainGtk.cpp: Added.
        (WebKit::PluginProcessMainGtk):
        * PluginProcess/gtk/PluginProcessMainGtk.h: Added.
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::moduleMixesGtkSymbols):
        * gtk/PluginMainGtk.cpp: Added.
        (main):

2011-07-14  Balazs Kelemen  <kbalazs@webkit.org> and Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Anders Carlsson.

        Implement plugin process for UNIX platform
        https://bugs.webkit.org/show_bug.cgi?id=60629

        * Platform/CoreIPC/Attachment.h:
        * Platform/CoreIPC/unix/AttachmentUnix.cpp:
        (CoreIPC::Attachment::Attachment): Add the ability to pass a
        socket via Attachment.
        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::SharedMemory::Handle::encode): Remove assertions that
        check that the Handle is not null. In
        PluginProxy::geometryDidChange we pass a null Handle if we do not
        need to allocate a new backing store.
        (WebKit::SharedMemory::Handle::releaseToAttachment): Ditto.
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::createWebProcessConnection): Use
        Attachment. Set up the connection with socketpair.
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch):
        (WebKit::PluginProcessProxy::didCreateWebProcessConnection):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.messages.in:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
        Use Attachment to pass the connection.

2011-07-14  Ada Chan  <adachan@apple.com>

        Implement support to center selection on a page for WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=64481

        Reviewed by Anders Carlsson.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageCenterSelectionInVisibleArea): Added.  Call WebPageProxy::centerSelectionInVisibleArea().
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::centerSelectionInVisibleArea): Send message to the WebProcess to center selection.
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::centerSelectionInVisibleArea): Get the FrameSelection from the main frame and call
        revealSelection() to center it.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Add the CenterSelectionInVisibleArea message.

2011-07-14  MORITA Hajime  <morrita@google.com>

        Unreviewed, rolling out r90976, r90981, and r90985.
        http://trac.webkit.org/changeset/90976
        http://trac.webkit.org/changeset/90981
        http://trac.webkit.org/changeset/90985
        https://bugs.webkit.org/show_bug.cgi?id=64251

        build break

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

2011-07-13  MORITA Hajime <morrita@google.com>

        Unreviewed attempt at a build fix.

        * win/WebKit2CFLite.def:

2011-07-13  MORITA Hajime  <morrita@google.com>

        [ShadowContentElement] forwarded node should be able to access its hosting content element.
        https://bugs.webkit.org/show_bug.cgi?id=64251

        Reviewed by Dimitri Glazkov.

        Exported additional symbols for window.internals object.
        
        * win/WebKit2.def:

2011-07-13  David Levin  <levin@chromium.org>

        Possible race condition in ThreadIdentifierData::initializeKeyOnce and shouldCallRealDebugger.
        https://bugs.webkit.org/show_bug.cgi?id=64465

        Reviewed by Dmitry Titov.

        There isn't a good way to test this as it is very highly unlikely to occur.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::shouldCallRealDebugger): :Since scoped static initialization
        isn't thread-safe, change the initialization to be global.

2011-07-13  Andreas Kling  <kling@webkit.org>

        [Qt][WK2] Remove invalid signal/slot connection in QTouchWebView.
        https://bugs.webkit.org/show_bug.cgi?id=64450

        Reviewed by Benjamin Poulain.

        The focusNextPrevChild() signal was removed, so we shouldn't try to
        connect to it.

        * UIProcess/API/qt/qtouchwebpage.cpp:
        (QTouchWebPagePrivate::setPage):

2011-07-13  Andreas Kling  <kling@webkit.org>

        [Qt][WK2] Undelayed WorkItems are leaked after execution.
        https://bugs.webkit.org/show_bug.cgi?id=64447

        Reviewed by Benjamin Poulain.

        * Platform/qt/WorkQueueQt.cpp:
        (WorkQueue::WorkItemQt::executeAndDelete):
        (WorkQueue::WorkItemQt::timerEvent):
        (WorkQueue::scheduleWork):

2011-07-12  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Also stop the scale commit timer when commitScaleChange is called explicitly.
        https://bugs.webkit.org/show_bug.cgi?id=64357

        Reviewed by Benjamin Poulain.

        * UIProcess/API/qt/qtouchwebpage.cpp:
        (QTouchWebPage::timerEvent):
        (QTouchWebPagePrivate::commitScaleChange):

2011-07-12  Joseph Pecoraro  <joepeck@webkit.org>

        ApplicationCache update should not immediately fail when reaching per-origin quota
        https://bugs.webkit.org/show_bug.cgi?id=64177

        Reviewed by Alexey Proskuryakov.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2011-06-22  Jer Noble  <jer.noble@apple.com>

        Full-screen: Don't change the collectionBehavior of the WebView's NSWindow if not necessary
        https://bugs.webkit.org/show_bug.cgi?id=63217
        <rdar://problem/9660291>

        Reviewed by Darin Adler.

        Check to see if the NSWindow hosting the WebView is not on the active space before changing the window's
        collectionBehavior.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController beganExitFullScreenAnimation]):

2011-07-12  Andreas Kling  <kling@webkit.org>

        [Qt][WK2] Navigation actions in incorrect state when loadStarted() is emitted.
        https://bugs.webkit.org/show_bug.cgi?id=64383

        Reviewed by Kenneth Rohde Christiansen.

        Update the navigation actions before emitting loadStarted().

        * UIProcess/API/qt/tests/qdesktopwebview/tst_qdesktopwebview.cpp:
        (LoadStartedCatcher::LoadStartedCatcher):
        (LoadStartedCatcher::onLoadStarted):
        (tst_QDesktopWebView::stopActionEnabledAfterLoadStarted):
        * UIProcess/qt/ClientImpl.cpp:
        (qt_wk_didStartProvisionalLoadForFrame):

2011-07-12  Benjamin Poulain  <benjamin@webkit.org>

        [Qt][WK2] Add a basic Pinch gesture recognizer for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=64373

        Reviewed by Andreas Kling.

        This patch adds QtPinchGestureRecognizer to recognize pinch gesture out of
        the events not handled by the WebProcess.

        TouchViewInterface::pinchGestureRequestScale() has a basic default implementation
        so the feature can be tested manually.

        * UIProcess/qt/QtGestureRecognizer.cpp:
        QtGestureRecognizer is the private base class for both gesture recognizer
        in order to be able to share some code.
        (WebKit::QtGestureRecognizer::QtGestureRecognizer):
        (WebKit::QtGestureRecognizer::reset):
        * UIProcess/qt/QtGestureRecognizer.h:
        * UIProcess/qt/QtPanGestureRecognizer.cpp:
        (WebKit::QtPanGestureRecognizer::QtPanGestureRecognizer):
        (WebKit::QtPanGestureRecognizer::reset):
        * UIProcess/qt/QtPanGestureRecognizer.h:
        * UIProcess/qt/QtPinchGestureRecognizer.cpp: Added.
        (WebKit::findTouchPointIndex):
        (WebKit::computeTouchCenter):
        (WebKit::QtPinchGestureRecognizer::QtPinchGestureRecognizer):
        (WebKit::QtPinchGestureRecognizer::recognize):
        (WebKit::QtPinchGestureRecognizer::reset):
        (WebKit::QtPinchGestureRecognizer::initializeGesture):
        * UIProcess/qt/QtPinchGestureRecognizer.h: Copied from Source/WebKit2/UIProcess/qt/QtPanGestureRecognizer.h.
        (WebKit::QtPinchGestureRecognizer::TouchPointInformation::TouchPointInformation):
        (WebKit::QtPinchGestureRecognizer::TouchPointInformation::isValid):
        * UIProcess/qt/TouchViewInterface.cpp:
        (WebKit::TouchViewInterface::TouchViewInterface):
        (WebKit::TouchViewInterface::pinchGestureStarted):
        (WebKit::TouchViewInterface::pinchGestureRequestScale):
        The scale factor reported by the recognizer to the TouchViewInterface is the total scale since the start
        of the gesture in order to avoid numerical instabilities.
        (WebKit::TouchViewInterface::pinchGestureEnded):
        * UIProcess/qt/TouchViewInterface.h:
        * UIProcess/qt/qtouchwebpageproxy.cpp:
        (QTouchWebPageProxy::QTouchWebPageProxy):
        (QTouchWebPageProxy::processDidCrash):
        (QTouchWebPageProxy::doneWithTouchEvent):
        * UIProcess/qt/qtouchwebpageproxy.h:
        * WebKit2.pro:

2011-07-12  Andreas Kling  <kling@webkit.org>

        [Qt][WK2] Navigation actions should react to web process availability.
        https://bugs.webkit.org/show_bug.cgi?id=64375

        Reviewed by Benjamin Poulain.

        When the web process is unavailable, the reload and stop actions should
        behave slightly differently. Stop should always be disabled, and reload
        should be enabled if there's a reloadable item in the back/forward list.

        * UIProcess/API/qt/tests/qdesktopwebview/tst_qdesktopwebview.cpp:
        (tst_QDesktopWebView::navigationActionEnabledStatusAtStartup):
        * UIProcess/API/qt/tests/qtouchwebview/tst_qtouchwebview.cpp:
        (tst_QTouchWebView::navigationActionEnabledStatusAtStartup):
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::updateAction):
        (QtWebPageProxy::didRelaunchProcess):
        (QtWebPageProxy::processDidCrash):

2011-07-12  Andreas Kling  <kling@webkit.org>

        [Qt][WK2] QDesktopWebView crashes if resized without web process.
        https://bugs.webkit.org/show_bug.cgi?id=64371

        Reviewed by Benjamin Poulain.

        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::paint): Remove an invalid assertion. The drawing
        area may be null if the web process has crashed.
        (QtWebPageProxy::setDrawingAreaSize): Fail silently if there is no
        drawing area.

2011-07-12  Andreas Kling  <kling@webkit.org>

        [Qt][WK2] Add informative loadFailed() signal to web views.
        https://bugs.webkit.org/show_bug.cgi?id=64362

        Reviewed by Benjamin Poulain.

        The web views will now emit loadFailed(QWebError) when a load failure occurs.

        The QWebError object currently contains:
        - Type of failure (whether it's an engine, network or protocol error.)
        - The failing URL.
        - Any error code associated with the failure.

        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebViewPrivate::loadDidFail):
        * UIProcess/API/qt/qdesktopwebview.h:
        * UIProcess/API/qt/qdesktopwebview_p.h:
        * UIProcess/API/qt/qtouchwebpage.h:
        * UIProcess/API/qt/qweberror.cpp: Added.
        (QWebError::QWebError):
        (QWebErrorPrivate::createQWebError):
        (QWebErrorPrivate::QWebErrorPrivate):
        (QWebErrorPrivate::~QWebErrorPrivate):
        (QWebError::type):
        (QWebError::errorCode):
        (QWebError::url):
        * UIProcess/API/qt/qweberror.h: Added.
        * UIProcess/API/qt/qweberror_p.h: Added.
        * UIProcess/API/qt/tests/commonviewtests/tst_commonviewtests.cpp:
        (tst_CommonViewTests::loadNonexistentFileUrl):
        * UIProcess/API/qt/tests/commonviewtests/webviewabstraction.cpp:
        (WebViewAbstraction::WebViewAbstraction):
        (WebViewAbstraction::touchViewLoadFailed):
        (WebViewAbstraction::desktopViewLoadFailed):
        * UIProcess/API/qt/tests/commonviewtests/webviewabstraction.h:
        * UIProcess/qt/ClientImpl.cpp:
        (dispatchLoadSucceeded):
        (dispatchLoadFailed):
        (qt_wk_didFailProvisionalLoadWithErrorForFrame):
        (qt_wk_didFinishLoadForFrame):
        (qt_wk_didFailLoadWithErrorForFrame):
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::loadDidFail):
        * UIProcess/qt/QtWebPageProxy.h:
        * UIProcess/qt/TouchViewInterface.cpp:
        (WebKit::TouchViewInterface::loadDidFail):
        * UIProcess/qt/TouchViewInterface.h:
        * UIProcess/qt/ViewInterface.h:
        * WebKit2API.pri:

2011-07-12  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        [Qt] Forward the touch view scale changes to the tiled drawing area.
        https://bugs.webkit.org/show_bug.cgi?id=64357

        Reviewed by Kenneth Rohde Christiansen.

        The drawing area needs to know the new scale to render tiles accordingly.

        * UIProcess/API/qt/qtouchwebpage.cpp:
        (QTouchWebPagePrivate::commitScaleChange):
        * UIProcess/qt/qtouchwebpageproxy.cpp:
        (QTouchWebPageProxy::setContentsScale):
        * UIProcess/qt/qtouchwebpageproxy.h:
        (QTouchWebPageProxy::drawingArea):

2011-07-12  Adam Roben  <aroben@apple.com>

        Export some symbols needed by TestWebKitAPI

        Part of <http://webkit.org/b/63330> Concatenating string literals and WTF::Strings using
        operator+ is suboptimal

        Reviewed by Darin Adler.

        * win/WebKit2.def:

2011-07-11  Hironori Bono  <hbono@chromium.org>

        Reviewed by Adam Roben.

        Implement layoutTestController.setTextDirection for WebKit2 and Windows.
        https://bugs.webkit.org/show_bug.cgi?id=61931

        This change implements layoutTextController.setTextDirection for WebKit2
        and Windows so we can run a layout test added by r87770 on them. Each
        implementation adds a wrapper function for Editor::setBaseWritingDirection()
        so LayoutTestController can call it.

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp: Added
        WKBundleFrameSetTextDirection to allow LayoutTestController to change the
        text direction.
        (WKBundleFrameSetTextDirection):
        * WebProcess/InjectedBundle/API/c/WKBundleFramePrivate.h: ditto.
        * WebProcess/WebPage/WebFrame.cpp: Added setTextDirection to allow
        WKBundleFrame to change the text direction.
        (WebKit::WebFrame::setTextDirection):
        * WebProcess/WebPage/WebFrame.h: ditto.

2011-07-11  Benjamin Poulain  <benjamin@webkit.org>

        [Qt][WK2] Get rid of focusNextPrevChild()
        https://bugs.webkit.org/show_bug.cgi?id=64289

        Reviewed by Andreas Kling.

        Qt 5 does not use focusNextPrevChild() but uses setFocusNavigation(), and
        the focus is not based on QWidget.

        We can get rid of the method since the new implementation will be totally
        different.

        * UIProcess/API/qt/qtouchwebpage.cpp:
        * UIProcess/API/qt/qtouchwebpage.h:
        * UIProcess/qt/ClientImpl.cpp:
        (qt_wk_takeFocus):
        * UIProcess/qt/QtWebPageProxy.h:

2011-07-11  Anders Carlsson  <andersca@apple.com>

        Implement getFormValue for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=64294
        <rdar://problem/3964087>

        Reviewed by Kevin Decker.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::getFormValue):
        Call Plugin::getFormValue.

        * PluginProcess/PluginControllerProxy.messages.in:
        Add new GetFormValue message.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::getFormValue):
        Get the form value and convert it to a String.

        * WebProcess/Plugins/Plugin.h:
        Add getFormValue pure virtual member function.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::getFormValue):
        Send a GetFormValue message to the plug-in process.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::getFormValue):
        Call Plugin::getFormValue.

2011-07-11  Ada Chan  <adachan@apple.com>

        The original request should be accessible from WebNavigationData.
        https://bugs.webkit.org/show_bug.cgi?id=64227

        Reviewed by Anders Carlsson.

        * Shared/WebNavigationDataStore.h:
        (WebKit::WebNavigationDataStore::encode): Handle the encoding of the original request.
        (WebKit::WebNavigationDataStore::decode): Handle the decoding of the original request.
        * UIProcess/API/C/WKNavigationData.cpp:
        (WKNavigationDataCopyOriginalRequest): 
        * UIProcess/API/C/WKNavigationData.h:
        * UIProcess/WebNavigationData.h:
        (WebKit::WebNavigationData::originalRequest):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::updateGlobalHistory): Store the original request in the WebNavigationDataStore.

2011-07-11  Benjamin Poulain  <benjamin@webkit.org>

        [Qt][WK2] Forward the viewport visible area from the view instead of inferring it from the TiledDrawingAreaProxy
        https://bugs.webkit.org/show_bug.cgi?id=64275

        Reviewed by Simon Hausmann.

        This patch refactors the way the viewport visible area is handled.
        Previously, the TiledDrawingAreaProxy would ask for the visible rect
        when painting or updating. This is reversed with this patch, and the viewport
        informs the page of any change in the view area.

        With this change, the TiledDrawingAreaProxy does not need to know about QTouchWebPage,
        and can use the TouchViewInterface directly.

        * UIProcess/API/qt/qtouchwebpage.cpp:
        (QTouchWebPagePrivate::setViewportRect):
        * UIProcess/API/qt/qtouchwebpage.h:
        * UIProcess/API/qt/qtouchwebpage_p.h:
        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebViewPrivate::scroll):
        (QTouchWebViewPrivate::viewportRectUpdated):
        (QTouchWebView::resizeEvent):
        * UIProcess/API/qt/qtouchwebview.h:
        * UIProcess/API/qt/qtouchwebview_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::invalidate):
        (WebKit::TiledDrawingAreaProxy::paint):
        (WebKit::TiledDrawingAreaProxy::setVisibleArea):
        (WebKit::TiledDrawingAreaProxy::createTiles):
        * UIProcess/TiledDrawingAreaProxy.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        * UIProcess/qt/QtWebPageProxy.h:
        * UIProcess/qt/TiledDrawingAreaProxyQt.cpp:
        (WebKit::TiledDrawingAreaProxy::updateWebView):
        * UIProcess/qt/TouchViewInterface.cpp:
        (WebKit::TouchViewInterface::contentSizeChanged):
        * UIProcess/qt/TouchViewInterface.h:
        * UIProcess/qt/WebPageProxyQt.cpp:
        * UIProcess/qt/qtouchwebpageproxy.cpp:
        (QTouchWebPageProxy::createDrawingAreaProxy):
        (QTouchWebPageProxy::setVisibleArea):
        * UIProcess/qt/qtouchwebpageproxy.h:

2011-07-11  Andreas Kling  <kling@webkit.org>

        [Qt][WK2] Move zoomable-area-for-point functionality to QTouchWebPageProxy
        https://bugs.webkit.org/show_bug.cgi?id=64273

        Reviewed by Kenneth Rohde Christiansen.

        * UIProcess/qt/QtWebPageProxy.cpp:
        * UIProcess/qt/QtWebPageProxy.h:
        * UIProcess/qt/qdesktopwebpageproxy.cpp:
        (QDesktopWebPageProxy::didFindZoomableArea):
        * UIProcess/qt/qdesktopwebpageproxy.h:
        * UIProcess/qt/qtouchwebpageproxy.cpp:
        (QTouchWebPageProxy::findZoomableAreaForPoint):
        (QTouchWebPageProxy::didFindZoomableArea):
        * UIProcess/qt/qtouchwebpageproxy.h:

2011-07-10  Anders Carlsson  <andersca@apple.com>

        WebKit2 is leaking NSCursors created by leakNamedCursor
        https://bugs.webkit.org/show_bug.cgi?id=64241
        <rdar://problem/9507151>

        Reviewed by Oliver Hunt.

        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::decode):
        When decoding a cursor of a known type, make sure to eagerly create the platform cursor
        for the cursor singleton. This way we avoid re-creating new NSCursor objects over and over for
        standard cursors.

2011-07-10  Benjamin Poulain  <benjamin@webkit.org>

        [Qt][WK2] Move setResizesToContentsUsingLayoutSize() to the touch specific page proxy
        https://bugs.webkit.org/show_bug.cgi?id=64238

        Reviewed by Andreas Kling.

        The method is specific to the touch view, so it should be in QTouchWebPageProxy instead
        of QtWebPageProxy.

        * UIProcess/qt/QtWebPageProxy.cpp:
        * UIProcess/qt/QtWebPageProxy.h:
        * UIProcess/qt/qtouchwebpageproxy.cpp:
        (QTouchWebPageProxy::setResizesToContentsUsingLayoutSize):
        * UIProcess/qt/qtouchwebpageproxy.h:

2011-07-09  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by Adam Roben.

        [WebKit2] Forward focus events to windowless plugins on the windows port.
        https://bugs.webkit.org/show_bug.cgi?id=63251

        No new tests. Covered by existing tests: plugins/mouse-events.html and
        plugins/keyboard-events.html.

        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::NetscapePlugin::platformSetFocus):

2011-07-08  Andreas Kling  <kling@webkit.org>

        [Qt][WK2] Views should expose QActions for basic navigation.
        https://bugs.webkit.org/show_bug.cgi?id=64174

        Add navigationAction() methods to the views to provide default
        QActions for Back, Forward, Stop and Reload.

        Reviewed by Benjamin Poulain.

        * UIProcess/API/qt/WKView.h:
        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebView::navigationAction):
        * UIProcess/API/qt/qdesktopwebview.h:
        * UIProcess/API/qt/qtouchwebpage.cpp:
        (QTouchWebPage::navigationAction):
        * UIProcess/API/qt/qtouchwebpage.h:
        * UIProcess/API/qt/qwebkittypes.h: Added.
        * UIProcess/API/qt/tests/commonviewtests/tst_commonviewtests.cpp:
        (tst_CommonViewTests::backAndForward):
        (tst_CommonViewTests::reload):
        (tst_CommonViewTests::stop):
        * UIProcess/API/qt/tests/commonviewtests/webviewabstraction.cpp:
        (WebViewAbstraction::triggerNavigationAction):
        * UIProcess/API/qt/tests/commonviewtests/webviewabstraction.h:
        * UIProcess/API/qt/tests/html/basic_page2.html: Added.
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::navigationAction):
        * UIProcess/qt/QtWebPageProxy.h:
        * WebKit2API.pri:

2011-07-08  Benjamin Poulain  <benjamin@webkit.org>

        [Qt][WK2] Get rid of the check for TILED_BACKING_STORE in Qt
        https://bugs.webkit.org/show_bug.cgi?id=64175

        Reviewed by Kenneth Rohde Christiansen.

        Qt no longer supports building WebKit2 without TILED_BACKING_STORE.

        * UIProcess/API/qt/qtouchwebpage.cpp:
        (QTouchWebPagePrivate::onScaleChanged):
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::setResizesToContentsUsingLayoutSize):
        * UIProcess/qt/TiledDrawingAreaProxyQt.cpp:
        * UIProcess/qt/TiledDrawingAreaTileQt.cpp:
        * WebProcess/WebPage/qt/TiledDrawingAreaQt.cpp:

2011-07-08  Benjamin Poulain  <benjamin@webkit.org>

        [WK2] Do not forward touch events to the web process when it does not need them
        https://bugs.webkit.org/show_bug.cgi?id=64164

        Reviewed by Kenneth Rohde Christiansen.

        The call to ChromeClient::needTouchEvent() is now forwarded to the WebPageProxy
        to change the way events are delivered.

        When the WebPage does not need touch events, and there is no queued touch events,
        the incoming events just bounce back through PageClient::doneWithTouchEvent().

        In the case when new events come to WebPageProxy and there are still touch events
        incoming from the WebProcess, the new events are deferred with the corresponding
        pending touch events.
        Deferring the new events iafter the corresponding forwarded event ensure
        the delivery is always done in order when PageClient::doneWithTouchEvent()
        is called.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::handleTouchEvent):
        (WebKit::WebPageProxy::needTouchEvents):
        (WebKit::WebPageProxy::didReceiveEvent):
        (WebKit::WebPageProxy::processDidCrash):
        * UIProcess/WebPageProxy.h:
        (WebKit::QueuedTouchEvents:::forwardedEvent):
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::needTouchEvents):

2011-07-08  Benjamin Poulain  <benjamin@webkit.org>

        [Qt][WK2] Add basic support for panning gestures to the QTouchWebView
        https://bugs.webkit.org/show_bug.cgi?id=64105

        Reviewed by Kenneth Rohde Christiansen.

        This patch adds basic support for the panning gesture on the UI process side.

        The events coming back from the WebProcess are processed through
        the QtPanGestureRecognizer to recognize the pan gesture. When the
        gesture is recognized, the actions are performed on the view through
        the TouchViewInterface.

        Currently, the viewport just move the page around without limit.
        This will be improved when a physics engine is integrated.

        * UIProcess/API/qt/qtouchwebview.cpp:
        (QTouchWebViewPrivate::scroll):
        * UIProcess/API/qt/qtouchwebview.h:
        * UIProcess/API/qt/qtouchwebview_p.h:
        * UIProcess/qt/QtPanGestureRecognizer.cpp: Added.
        (WebKit::QtPanGestureRecognizer::QtPanGestureRecognizer):
        (WebKit::QtPanGestureRecognizer::recognize):
        (WebKit::QtPanGestureRecognizer::reset):
        * UIProcess/qt/QtPanGestureRecognizer.h: Added.
        * UIProcess/qt/TouchViewInterface.cpp:
        (WebKit::TouchViewInterface::panGestureStarted):
        (WebKit::TouchViewInterface::panGestureRequestScroll):
        (WebKit::TouchViewInterface::panGestureEnded):
        (WebKit::TouchViewInterface::panGestureCancelled):
        * UIProcess/qt/TouchViewInterface.h:
        * UIProcess/qt/qtouchwebpageproxy.cpp:
        (QTouchWebPageProxy::QTouchWebPageProxy):
        (QTouchWebPageProxy::processDidCrash):
        (QTouchWebPageProxy::doneWithTouchEvent):
        * UIProcess/qt/qtouchwebpageproxy.h:
        * WebKit2.pro:

2011-07-07  Andreas Kling  <kling@webkit.org>

        [Qt][WK2] Remove Symbian code.
        https://bugs.webkit.org/show_bug.cgi?id=64101

        Reviewed by Benjamin Poulain.

        * DerivedSources.pro:
        * Platform/CoreIPC/Attachment.h:
        * Platform/CoreIPC/Connection.h:
        * Platform/SharedMemory.h:
        * Platform/qt/SharedMemorySymbian.cpp: Removed.
        * UIProcess/API/qt/tests/tests.pri:
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        * WebKit2.pri:
        * WebKit2.pro:
        * WebProcess.pro:
        * config.h:

2011-07-07  Andreas Kling  <kling@webkit.org>

        [Qt][WK2] Don't support ridiculous matrix of QT_NO_FEATURE combinations.
        https://bugs.webkit.org/show_bug.cgi?id=64099

        Reviewed by Benjamin Poulain.

        * Shared/qt/WebEventFactoryQt.cpp:
        (WebKit::WebEventFactory::createWebWheelEvent):
        * UIProcess/API/qt/qdesktopwebview_p.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::QtWebPageProxy):
        (QtWebPageProxy::setCursor):
        (QtWebPageProxy::registerEditCommand):
        (QtWebPageProxy::clearAllEditCommands):
        (QtWebPageProxy::canUndoRedo):
        (QtWebPageProxy::executeUndoRedo):
        (QtWebPageProxy::updateAction):
        (QtWebPageProxy::webActionTriggered):
        (QtWebPageProxy::triggerAction):
        (QtWebPageProxy::action):
        * UIProcess/qt/QtWebPageProxy.h:
        * UIProcess/qt/TouchViewInterface.cpp:
        (WebKit::TouchViewInterface::didChangeCursor):
        * UIProcess/qt/TouchViewInterface.h:
        * UIProcess/qt/ViewInterface.h:
        * UIProcess/qt/WebUndoCommandQt.cpp:
        (WebUndoCommandQt::WebUndoCommandQt):
        * UIProcess/qt/WebUndoCommandQt.h:
        * WebProcess/WebCoreSupport/qt/WebDragClientQt.cpp:
        (WebKit::WebDragClient::startDrag):

2011-07-07  Andreas Kling  <kling@webkit.org>

        [Qt][WK2] Views should know about WebProcess crash/relaunch.
        https://bugs.webkit.org/show_bug.cgi?id=64093

        Reviewed by Benjamin Poulain.

        Add processDidCrash() and didRelaunchProcess() to ViewInterface.

        QDesktopWebView now displays a simple sad smiley ":(" when the
        web process crashes.

        * UIProcess/API/qt/qdesktopwebview.cpp:
        (QDesktopWebViewPrivate::QDesktopWebViewPrivate):
        (paintCrashedPage):
        (QDesktopWebView::paint):
        (QDesktopWebViewPrivate::processDidCrash):
        (QDesktopWebViewPrivate::didRelaunchProcess):
        * UIProcess/API/qt/qdesktopwebview_p.h:
        * UIProcess/qt/QtWebPageProxy.cpp:
        (QtWebPageProxy::QtWebPageProxy):
        (QtWebPageProxy::didRelaunchProcess):
        (QtWebPageProxy::processDidCrash):
        * UIProcess/qt/QtWebPageProxy.h:
        * UIProcess/qt/TouchViewInterface.cpp:
        (WebKit::TouchViewInterface::showContextMenu):
        (WebKit::TouchViewInterface::hideContextMenu):
        (WebKit::TouchViewInterface::processDidCrash):
        (WebKit::TouchViewInterface::didRelaunchProcess):
        * UIProcess/qt/TouchViewInterface.h:
        * UIProcess/qt/ViewInterface.h:

2011-07-07  Benjamin Poulain  <benjamin@webkit.org>

        [Qt] [WK2] Improve the handling of touch events to use them as main input
        https://bugs.webkit.org/show_bug.cgi?id=63991

        Reviewed by Kenneth Rohde Christiansen.

        Promote touch event for use as primary input.

        The touch events now use the responsiveness timer like the other input events.

        The touch events also have a callback to the UI signaling if the event was used
        or not: PageClient::doneWithTouchEvent().
        This is similar to what is done with key events (PageClient::doneWithKeyEvent()).

        * Shared/NativeWebTouchEvent.h: Copied from Source/WebKit2/Shared/qt/WebEventFactoryQt.h.
        (WebKit::NativeWebTouchEvent::nativeEvent):
        * Shared/qt/NativeWebTouchEventQt.cpp: Copied from Source/WebKit2/Shared/qt/WebEventFactoryQt.h.
        (WebKit::NativeWebTouchEvent::NativeWebTouchEvent):
        * Shared/qt/WebEventFactoryQt.cpp:
        (WebKit::webEventTypeForEvent):
        (WebKit::WebEventFactory::createWebTouchEvent):
        * Shared/qt/WebEventFactoryQt.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleTouchEvent):
        (WebKit::WebPageProxy::didReceiveEvent):
        * UIProcess/WebPageProxy.h:
        * UIProcess/qt/qdesktopwebpageproxy.cpp:
        (QDesktopWebPageProxy::doneWithTouchEvent):
        * UIProcess/qt/qdesktopwebpageproxy.h:
        * UIProcess/qt/qtouchwebpageproxy.cpp:
        (QTouchWebPageProxy::doneWithTouchEvent):
        (QTouchWebPageProxy::touchEvent):
        * UIProcess/qt/qtouchwebpageproxy.h:
        * WebKit2.pro:

2011-07-06  Andreas Kling  <kling@webkit.org>

        [Qt][WK2] Split Qt API into two different web views (touch and desktop)
        https://bugs.webkit.org/show_bug.cgi?id=63950

        Co-authored with Benjamin Poulain <benjamin@webkit.org>.

        Reviewed by Kenneth Rohde Christiansen.

        Replace the QGraphicsWKView/QWKPage mess with QDesktopWebView and QTouchWebView.

        QDesktopWebView is a traditional web view, similar to QGraphicsWebView. It will
        will have the expected "desktop" behavior for things like subframes and
        fixed-position elements.

        QTouchWebView is intended for use on touch devices, and will manage the viewport,
        gestures, tiled rendering, and other things that the user should never have to
        worry about. It will use "resize to contents" and frame flattening by default.

        API-wise, the biggest difference between the two is that QTouchWebView is really
        a viewport that contains a QTouchWebPage. These are decoupled for flexibility in
        UI design. This decoupling is not necessary for the desktop use-case, and so
        QDesktopWebView is the only class we need.

        Much of the Qt/WebKit2 API has been removed (snapshots, history, preferences..)
        but will be re-added incrementally in a way that fits the new API vision.

        * UIProcess/API/qt/WKView.h:
        * UIProcess/API/qt/qdesktopwebview.cpp: Added.
        (QDesktopWebViewPrivate::QDesktopWebViewPrivate):
        (QDesktopWebViewPrivate::setViewNeedsDisplay):
        (QDesktopWebViewPrivate::drawingAreaSize):
        (QDesktopWebViewPrivate::contentSizeChanged):
        (QDesktopWebViewPrivate::isActive):
        (QDesktopWebViewPrivate::hasFocus):
        (QDesktopWebViewPrivate::isVisible):
        (QDesktopWebViewPrivate::startDrag):
        (QDesktopWebViewPrivate::didChangeUrl):
        (QDesktopWebViewPrivate::didChangeTitle):
        (QDesktopWebViewPrivate::didChangeToolTip):
        (QDesktopWebViewPrivate::didChangeStatusText):
        (QDesktopWebViewPrivate::didChangeCursor):
        (QDesktopWebViewPrivate::loadDidBegin):
        (QDesktopWebViewPrivate::loadDidSucceed):
        (QDesktopWebViewPrivate::didChangeLoadProgress):
        (QDesktopWebViewPrivate::showContextMenu):
        (QDesktopWebViewPrivate::hideContextMenu):
        (QDesktopWebView::QDesktopWebView):
        (QDesktopWebView::init):
        (QDesktopWebView::~QDesktopWebView):
        (QDesktopWebView::load):
        (QDesktopWebView::url):
        (QDesktopWebView::title):
        (QDesktopWebView::resizeEvent):
        (QDesktopWebView::paint):
        (QDesktopWebView::event):
        (QDesktopWebView::pageRef):
        * UIProcess/API/qt/qdesktopwebview.h: Added.
        * UIProcess/API/qt/qdesktopwebview_p.h: Added.
        * UIProcess/API/qt/qgraphicswkview.cpp: Removed.
        * UIProcess/API/qt/qgraphicswkview.h: Removed.
        * UIProcess/API/qt/qtouchwebpage.cpp: Added.
        (QTouchWebPage::QTouchWebPage):
        (QTouchWebPage::~QTouchWebPage):
        (QTouchWebPage::paint):
        (QTouchWebPage::load):
        (QTouchWebPage::url):
        (QTouchWebPage::title):
        (QTouchWebPage::focusNextPrevChildCallback):
        (QTouchWebPage::focusNextPrevChild):
        (QTouchWebPage::event):
        (QTouchWebPage::timerEvent):
        (QTouchWebPage::resizeEvent):
        (QTouchWebPagePrivate::QTouchWebPagePrivate):
        (QTouchWebPage::visibleRect):
        (QTouchWebPagePrivate::prepareScaleChange):
        (QTouchWebPagePrivate::commitScaleChange):
        (QTouchWebPagePrivate::onScaleChanged):
        (QTouchWebPagePrivate::setPage):
        * UIProcess/API/qt/qtouchwebpage.h: Added.
        * UIProcess/API/qt/qtouchwebpage_p.h: Added.
        (QTouchWebPagePrivate::getPageViewPrivate):
        * UIProcess/API/qt/qtouchwebview.cpp: Added.
        (QTouchWebViewPrivate::QTouchWebViewPrivate):
        (QTouchWebView::QTouchWebView):
        (QTouchWebView::~QTouchWebView):
        (QTouchWebView::page):
        * UIProcess/API/qt/qtouchwebview.h: Added.
        * UIProcess/API/qt/qtouchwebview_p.h: Added.
        * UIProcess/API/qt/qwkpage.cpp: Removed.
        * UIProcess/API/qt/qwkpage.h: Removed.
        * UIProcess/API/qt/tests/commonviewtests/commonviewtests.pro: Added.
        * UIProcess/API/qt/tests/commonviewtests/tst_commonviewtests.cpp: Added.
        (tst_CommonViewTests::init):
        (tst_CommonViewTests::cleanup):
        (tst_CommonViewTests::baseUrl):
        (tst_CommonViewTests::loadEmptyUrl):
        (tst_CommonViewTests::loadEmptyPageViewVisible):
        (tst_CommonViewTests::loadEmptyPageViewHidden):
        (tst_CommonViewTests::show):
        * UIProcess/API/qt/tests/commonviewtests/webviewabstraction.cpp: Added.
        (WebViewAbstraction::WebViewAbstraction):
        (WebViewAbstraction::show):
        (WebViewAbstraction::hide):
        (WebViewAbstraction::load):
        (WebViewAbstraction::url):
        (WebViewAbstraction::touchViewLoadStarted):
        (WebViewAbstraction::desktopViewLoadStarted):
        (WebViewAbstraction::touchViewLoadSucceeded):
        (WebViewAbstraction::desktopViewLoadSucceeded):
        (WebViewAbstraction::touchWebView):
        (WebViewAbstraction::desktopWebView):
        * UIProcess/API/qt/tests/commonviewtests/webviewabstraction.h: Copied from Source/WebKit2/UIProcess/API/qt/tests/qwkpage/tst_qwkpage.cpp.
        * UIProcess/API/qt/tests/html/a.htm: Removed.
        * UIProcess/API/qt/tests/html/b.htm: Removed.
        * UIProcess/API/qt/tests/html/c.htm: Removed.
        * UIProcess/API/qt/tests/html/d.htm: Removed.
        * UIProcess/API/qt/tests/qdesktopwebview/qdesktopwebview.pro: Renamed from Source/WebKit2/UIProcess/API/qt/tests/qgraphicswkview/qgraphicswkview.pro.
        * UIProcess/API/qt/tests/qdesktopwebview/tst_qdesktopwebview.cpp: Renamed from Source/WebKit2/UIProcess/API/qt/tests/qwkpage/tst_qwkpage.cpp.
        (tst_QDesktopWebView::init):
        (tst_QDesktopWebView::cleanup):
        (tst_QDesktopWebView::webView):
        * UIProcess/API/qt/tests/qgraphicswkview/tst_qgraphicswkview.cpp: Removed.
        * UIProcess/API/qt/tests/qtouchwebview/qtouchwebview.pro: Renamed from Source/WebKit2/UIProcess/API/qt/tests/qwkhistory/qwkhistory.pro.
        * UIProcess/API/qt/tests/qtouchwebview/tst_qtouchwebview.cpp: Added.
        (tst_QTouchWebView::tst_QTouchWebView):
        (tst_QTouchWebView::init):
        (tst_QTouchWebView::cleanup):
        (tst_QTouchWebView::webView):
        (tst_QTouchWebView::accessPage):
        * UIProcess/API/qt/tests/qwkhistory/tst_qwkhistory.cpp: Removed.
        * UIProcess/API/qt/tests/qwkpage/qwkpage.pro: Removed.
        * UIProcess/API/qt/tests/tests.pro:
        * UIProcess/API/qt/tests/testwindow.h: Added.
        (TestWindow::TestWindow):
        (TestWindow::resizeEvent):
        * UIProcess/TiledDrawingAreaProxy.cpp:
        * UIProcess/TiledDrawingAreaProxy.h:
        * UIProcess/WebFullScreenManagerProxy.h:
        * UIProcess/qt/ClientImpl.cpp: Renamed from Source/WebKit2/UIProcess/API/qt/ClientImpl.cpp.
        (toQWKContext):
        (toQtWebPageProxy):
        (loadFinished):
        (qt_wk_didStartProvisionalLoadForFrame):
        (qt_wk_didReceiveServerRedirectForProvisionalLoadForFrame):
        (qt_wk_didFailProvisionalLoadWithErrorForFrame):
        (qt_wk_didCommitLoadForFrame):
        (qt_wk_didFinishDocumentLoadForFrame):
        (qt_wk_didFinishLoadForFrame):
        (qt_wk_didFailLoadWithErrorForFrame):
        (qt_wk_didReceiveTitleForFrame):
        (qt_wk_didFirstLayoutForFrame):
        (qt_wk_didRemoveFrameFromHierarchy):
        (qt_wk_didFirstVisuallyNonEmptyLayoutForFrame):
        (qt_wk_didStartProgress):
        (qt_wk_didChangeProgress):
        (qt_wk_didFinishProgress):
        (qt_wk_didBecomeUnresponsive):
        (qt_wk_didBecomeResponsive):
        (qt_wk_createNewPage):
        (qt_wk_showPage):
        (qt_wk_close):
        (qt_wk_takeFocus):
        (qt_wk_runJavaScriptAlert):
        (qt_wk_setStatusText):
        (qt_wk_didSameDocumentNavigationForFrame):
        (qt_wk_didChangeIconForPageURL):
        (qt_wk_didRemoveAllIcons):
        * UIProcess/qt/ClientImpl.h: Renamed from Source/WebKit2/UIProcess/API/qt/ClientImpl.h.
        * UIProcess/qt/QtWebPageProxy.cpp: Added.
        (defaultWKContext):
        (contextMenuActionForWebAction):
        (dragOperationToDropActions):
        (dropActionToDragOperation):
        (QtWebPageProxy::QtWebPageProxy):
        (QtWebPageProxy::init):
        (QtWebPageProxy::~QtWebPageProxy):
        (QtWebPageProxy::handleEvent):
        (QtWebPageProxy::handleKeyPressEvent):
        (QtWebPageProxy::handleKeyReleaseEvent):
        (QtWebPageProxy::handleFocusInEvent):
        (QtWebPageProxy::handleFocusOutEvent):
        (QtWebPageProxy::setCursor):
        (QtWebPageProxy::setViewNeedsDisplay):
        (QtWebPageProxy::displayView):
        (QtWebPageProxy::scrollView):
        (QtWebPageProxy::viewSize):
        (QtWebPageProxy::isViewWindowActive):
        (QtWebPageProxy::isViewFocused):
        (QtWebPageProxy::isViewVisible):
        (QtWebPageProxy::isViewInWindow):
        (QtWebPageProxy::enterAcceleratedCompositingMode):
        (QtWebPageProxy::exitAcceleratedCompositingMode):
        (QtWebPageProxy::pageDidRequestScroll):
        (QtWebPageProxy::didChangeContentsSize):
        (QtWebPageProxy::toolTipChanged):
        (QtWebPageProxy::registerEditCommand):
        (QtWebPageProxy::clearAllEditCommands):
        (QtWebPageProxy::canUndoRedo):
        (QtWebPageProxy::executeUndoRedo):
        (QtWebPageProxy::convertToDeviceSpace):
        (QtWebPageProxy::screenToWindow):
        (QtWebPageProxy::windowToScreen):
        (QtWebPageProxy::convertToUserSpace):
        (QtWebPageProxy::selectionChanged):
        (QtWebPageProxy::doneWithKeyEvent):
        (QtWebPageProxy::createPopupMenuProxy):
        (QtWebPageProxy::createContextMenuProxy):
        (QtWebPageProxy::setFindIndicator):
        (QtWebPageProxy::didCommitLoadForMainFrame):
        (QtWebPageProxy::didFinishLoadingDataForCustomRepresentation):
        (QtWebPageProxy::flashBackingStoreUpdates):
        (QtWebPageProxy::pageRef):
        (QtWebPageProxy::didChangeUrl):
        (QtWebPageProxy::didChangeTitle):
        (QtWebPageProxy::didChangeStatusText):
        (QtWebPageProxy::showContextMenu):
        (QtWebPageProxy::hideContextMenu):
        (QtWebPageProxy::loadDidBegin):
        (QtWebPageProxy::loadDidSucceed):
        (QtWebPageProxy::didChangeLoadProgress):
        (QtWebPageProxy::paint):
        (QtWebPageProxy::updateAction):
        (QtWebPageProxy::updateNavigationActions):
        (QtWebPageProxy::webActionTriggered):
        (QtWebPageProxy::didRelaunchProcess):
        (QtWebPageProxy::processDidCrash):
        (QtWebPageProxy::setActualVisibleContentsRect):
        (QtWebPageProxy::preferences):
        (QtWebPageProxy::setCreateNewPageFunction):
        (QtWebPageProxy::setCustomUserAgent):
        (QtWebPageProxy::customUserAgent):
        (QtWebPageProxy::load):
        (QtWebPageProxy::url):
        (QtWebPageProxy::title):
        (QtWebPageProxy::setDrawingAreaSize):
        (QtWebPageProxy::textZoomFactor):
        (QtWebPageProxy::setTextZoomFactor):
        (QtWebPageProxy::pageZoomFactor):
        (QtWebPageProxy::setPageZoomFactor):
        (QtWebPageProxy::setPageAndTextZoomFactors):
        (QtWebPageProxy::history):
        (QtWebPageProxy::setResizesToContentsUsingLayoutSize):
        (QtWebPageProxy::triggerAction):
        (QtWebPageProxy::action):
        (QtWebPageProxy::findZoomableAreaForPoint):
        (QtWebPageProxy::didFindZoomableArea):
        (QtWebPageProxy::startDrag):
        (QtWebPageProxy::viewportVisibleRect):
        (QtWebPageProxy::isConnectedToEngine):
        (QtWebPageProxy::setPageIsVisible):
        * UIProcess/qt/QtWebPageProxy.h: Renamed from Source/WebKit2/UIProcess/API/qt/qwkpage_p.h.
        (QtWebPageProxy::pageClosed):
        (QtWebPageProxy::customRepresentationZoomFactor):
        (QtWebPageProxy::setCustomRepresentationZoomFactor):
        (QtWebPageProxy::didChangeScrollbarsForMainFrame):
        (QtWebPageProxy::findStringInCustomRepresentation):
        (QtWebPageProxy::countStringMatchesInCustomRepresentation):
        (QtWebPageProxy::userSpaceScaleFactor):
        (QtWebPageProxy::createNewPageFunction):
        * UIProcess/qt/TiledDrawingAreaProxyQt.cpp:
        (WebKit::TiledDrawingAreaProxy::page):
        * UIProcess/qt/TouchViewInterface.cpp: Added.
        (WebKit::TouchViewInterface::TouchViewInterface):
        (WebKit::TouchViewInterface::setViewNeedsDisplay):
        (WebKit::TouchViewInterface::drawingAreaSize):
        (WebKit::TouchViewInterface::contentSizeChanged):
        (WebKit::TouchViewInterface::isActive):
        (WebKit::TouchViewInterface::hasFocus):
        (WebKit::TouchViewInterface::isVisible):
        (WebKit::TouchViewInterface::startDrag):
        (WebKit::TouchViewInterface::didChangeUrl):
        (WebKit::TouchViewInterface::didChangeTitle):
        (WebKit::TouchViewInterface::didChangeToolTip):
        (WebKit::TouchViewInterface::didChangeStatusText):
        (WebKit::TouchViewInterface::didChangeCursor):
        (WebKit::TouchViewInterface::loadDidBegin):
        (WebKit::TouchViewInterface::loadDidSucceed):
        (WebKit::TouchViewInterface::didChangeLoadProgress):
        (WebKit::TouchViewInterface::showContextMenu):
        (WebKit::TouchViewInterface::hideContextMenu):
        * UIProcess/qt/TouchViewInterface.h: Added.
        (WebKit::TouchViewInterface::pageView):
        * UIProcess/qt/ViewInterface.cpp: Added.
        (WebKit::ViewInterface::ownerWidget):
        * UIProcess/qt/ViewInterface.h: Added.
        * UIProcess/qt/WebContextMenuProxyQt.cpp:
        (WebKit::webActionForContextMenuAction):
        (WebKit::WebContextMenuProxyQt::WebContextMenuProxyQt):
        (WebKit::WebContextMenuProxyQt::create):
        (WebKit::WebContextMenuProxyQt::showContextMenu):
        (WebKit::WebContextMenuProxyQt::hideContextMenu):
        (WebKit::WebContextMenuProxyQt::createContextMenu):
        * UIProcess/qt/WebContextMenuProxyQt.h:
        * UIProcess/qt/qdesktopwebpageproxy.cpp: Added.
        (dragOperationToDropAction):
        (QDesktopWebPageProxy::QDesktopWebPageProxy):
        (QDesktopWebPageProxy::createDrawingAreaProxy):
        (QDesktopWebPageProxy::paintContent):
        (QDesktopWebPageProxy::setViewportArguments):
        (QDesktopWebPageProxy::handleEvent):
        (QDesktopWebPageProxy::handleMouseMoveEvent):
        (QDesktopWebPageProxy::handleMousePressEvent):
        (QDesktopWebPageProxy::handleMouseReleaseEvent):
        (QDesktopWebPageProxy::handleMouseDoubleClickEvent):
        (QDesktopWebPageProxy::handleWheelEvent):
        (QDesktopWebPageProxy::handleHoverMoveEvent):
        (QDesktopWebPageProxy::handleDragEnterEvent):
        (QDesktopWebPageProxy::handleDragLeaveEvent):
        (QDesktopWebPageProxy::handleDragMoveEvent):
        (QDesktopWebPageProxy::handleDropEvent):
        (QDesktopWebPageProxy::timerEvent):
        * UIProcess/qt/qdesktopwebpageproxy.h: Added.
        * UIProcess/qt/qtouchwebpageproxy.cpp: Added.
        (QTouchWebPageProxy::QTouchWebPageProxy):
        (QTouchWebPageProxy::createDrawingAreaProxy):
        (QTouchWebPageProxy::paintContent):
        (QTouchWebPageProxy::setViewportArguments):
        (QTouchWebPageProxy::handleEvent):
        (QTouchWebPageProxy::touchEvent):
        * UIProcess/qt/qtouchwebpageproxy.h: Added.
        (QTouchWebPageProxy::touchViewInterface):
        (QTouchWebPageProxy::pageView):
        * UIProcess/qt/qwkcontext.cpp: Renamed from Source/WebKit2/UIProcess/API/qt/qwkcontext.cpp.
        (initializePlatformStrategiesIfNeeded):
        (QWKContextPrivate::QWKContextPrivate):
        (QWKContextPrivate::~QWKContextPrivate):
        (QWKContext::QWKContext):
        (QWKContext::~QWKContext):
        (QWKContext::setIconDatabasePath):
        (QWKContext::iconForPageURL):
        * UIProcess/qt/qwkcontext.h: Renamed from Source/WebKit2/UIProcess/API/qt/qwkcontext.h.
        * UIProcess/qt/qwkcontext_p.h: Renamed from Source/WebKit2/UIProcess/API/qt/qwkcontext_p.h.
        * UIProcess/qt/qwkhistory.cpp: Renamed from Source/WebKit2/UIProcess/API/qt/qwkhistory.cpp.
        (QWKHistoryItemPrivate::QWKHistoryItemPrivate):
        (QWKHistoryItemPrivate::~QWKHistoryItemPrivate):
        (QWKHistoryItem::QWKHistoryItem):
        (QWKHistoryItem::QWKHistoryItem::operator=):
        (QWKHistoryItem::~QWKHistoryItem):
        (QWKHistoryItem::title):
        (QWKHistoryItem::url):
        (QWKHistoryPrivate::QWKHistoryPrivate):
        (QWKHistoryPrivate::createHistory):
        (QWKHistoryPrivate::~QWKHistoryPrivate):
        (QWKHistory::QWKHistory):
        (QWKHistory::~QWKHistory):
        (QWKHistory::backListCount):
        (QWKHistory::forwardListCount):
        (QWKHistory::count):
        (QWKHistory::currentItem):
        (QWKHistory::backItem):
        (QWKHistory::forwardItem):
        (QWKHistory::itemAt):
        (QWKHistory::goToItemAt):
        (QWKHistory::backItems):
        (QWKHistory::forwardItems):
        * UIProcess/qt/qwkhistory.h: Renamed from Source/WebKit2/UIProcess/API/qt/qwkhistory.h.
        * UIProcess/qt/qwkhistory_p.h: Renamed from Source/WebKit2/UIProcess/API/qt/qwkhistory_p.h.
        * UIProcess/qt/qwkpreferences.cpp: Renamed from Source/WebKit2/UIProcess/API/qt/qwkpreferences.cpp.
        (QWKPreferencesPrivate::createPreferences):
        (QWKPreferencesPrivate::createSharedPreferences):
        (QWKPreferences::sharedPreferences):
        (QWKPreferences::QWKPreferences):
        (QWKPreferences::~QWKPreferences):
        (QWKPreferences::setFontFamily):
        (QWKPreferences::fontFamily):
        (QWKPreferences::testAttribute):
        (QWKPreferences::setAttribute):
        (QWKPreferences::setFontSize):
        (QWKPreferences::fontSize):
        * UIProcess/qt/qwkpreferences.h: Renamed from Source/WebKit2/UIProcess/API/qt/qwkpreferences.h.
        * UIProcess/qt/qwkpreferences_p.h: Renamed from Source/WebKit2/UIProcess/API/qt/qwkpreferences_p.h.
        * WebKit2.pro:
        * WebKit2API.pri:
        * WebProcess/WebPage/TiledDrawingArea.cpp:
        * WebProcess/WebPage/TiledDrawingArea.h:

2011-07-05  Jeff Miller  <jeffm@apple.com>

        Add WKPageCopyStandardUserAgentWithApplicationName
        https://bugs.webkit.org/show_bug.cgi?id=63953

        Reviewed by Adam Roben.

         * UIProcess/API/C/WKPage.cpp:
        (WKPageCopyStandardUserAgentWithApplicationName): Added.
        * UIProcess/API/C/WKPagePrivate.h: Added WKPageCopyStandardUserAgentWithApplicationName().

        * UIProcess/WebPageProxy.h: Make standardUserAgent() public.

2011-07-05  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Show content for plugin requests in network panel.
        https://bugs.webkit.org/show_bug.cgi?id=30080

        Added win symbols for new window.internals methods.

        Reviewed by Pavel Feldman.

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

2011-07-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r90373.
        http://trac.webkit.org/changeset/90373
        https://bugs.webkit.org/show_bug.cgi?id=63917

        Breaks Qt Linux Release minimal (Requested by vsevik on
        #webkit).

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

2011-07-04  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Show content for plugin requests in network panel.
        https://bugs.webkit.org/show_bug.cgi?id=30080

        Reviewed by Pavel Feldman.

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

2011-07-04  Anders Carlsson  <andersca@apple.com>

        NP_RemoveProperty is not called back by Safari when delete npObject.prop is encountered in JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=63915
        <rdar://problem/7124300>

        Reviewed by Sam Weinig.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::deleteProperty):
        Call NP_RemoveProperty on the NPObject.

        * WebProcess/Plugins/Netscape/JSNPObject.h:
        Add deleteProperty.

2011-06-23  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Windowless Plugins : <input> cursor blinks even after transferring focus to plugin
        https://bugs.webkit.org/show_bug.cgi?id=30355

        PluginView needs to use page->focusController()->setFocusedNode() when focusing a plugin
        in order to clear the FrameSelection in the currently focused node. In its platform-specific
        code Chromium already does this (WebPluginContainerImpl.cpp).

        * WebProcess/Plugins/PluginView.cpp:
        (WebCore::PluginView::focusPluginElement): Using FocusController::setFocusedNode() makes
                                                   the call to FocusController:setFocusedFrame() redundant, since the
                                                   former calls it.

2011-07-02  Anders Carlsson  <andersca@apple.com>

        Have another go at fixing the Windows build.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::NetscapePlugin::containingWindow):
        (WebKit::NetscapePlugin::platformHandleMouseEnterEvent):
        (WebKit::NetscapePlugin::platformHandleMouseLeaveEvent):

2011-07-02  Anders Carlsson  <andersca@apple.com>

        Null out the plug-in controller after destroying the plug-in.
        https://bugs.webkit.org/show_bug.cgi?id=63869

        Reviewed by Maciej Stachowiak.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::destroy):
        Call destroyPlugin.

        * WebProcess/Plugins/Plugin.cpp:
        (WebKit::Plugin::destroyPlugin):
        Call destroy and null out the plug-in controller.

        * WebProcess/Plugins/Plugin.h:
        Add destroyPlugin, make destroy private.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::~PluginView):
        Call destroyPlugin.

2011-07-02  Anders Carlsson  <andersca@apple.com>

        Fix Windows build for real.

        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::NetscapePlugin::containingWindow):
        (WebKit::NetscapePlugin::scheduleWindowedGeometryUpdate):
        (WebKit::NetscapePlugin::platformPaint):
        (WebKit::NetscapePlugin::platformHandleMouseEvent):

2011-07-02  Anders Carlsson  <andersca@apple.com>

        Implement NPN_PluginThreadAsyncCall
        https://bugs.webkit.org/show_bug.cgi?id=63868

        Reviewed by Dan Bernstein.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_PluginThreadAsyncCall):
        Call NetscapePlugin::pluginThreadAsyncCall.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::pluginThreadAsyncCall):
        Schedule a work item to call the function on the main run loop.

        (WebKit::NetscapePlugin::handlePluginThreadAsyncCall):
        If the plug-in is still running, run the function.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        Add new member function.

        * WebProcess/Plugins/Plugin.h:
        Make plug-in inherit from ThreadSafeRefCounted since plug-ins can potentially
        ref the plug-in from other threads.

2011-07-02  Anders Carlsson  <andersca@apple.com>

        Fix Windows build.

        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::NetscapePlugin::containingWindow):
        (WebKit::NetscapePlugin::scheduleWindowedGeometryUpdate):
        (WebKit::NetscapePlugin::platformPaint):
        (WebKit::NetscapePlugin::platformHandleMouseEvent):
        (WebKit::NetscapePlugin::platformHandleMouseEnterEvent):
        (WebKit::NetscapePlugin::platformHandleMouseLeaveEvent):

2011-07-02  Anders Carlsson  <andersca@apple.com>

        Move the plug-in controller member variable up to the shared Plugin base class
        https://bugs.webkit.org/show_bug.cgi?id=63867

        Reviewed by Sam Weinig.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin):
        Remove m_pluginController.

        (WebKit::NetscapePlugin::invalidate):
        (WebKit::NetscapePlugin::userAgent):
        (WebKit::NetscapePlugin::loadURL):
        (WebKit::NetscapePlugin::setStatusbarText):
        (WebKit::NetscapePlugin::evaluate):
        (WebKit::NetscapePlugin::isPrivateBrowsingEnabled):
        (WebKit::NetscapePlugin::windowScriptNPObject):
        (WebKit::NetscapePlugin::pluginElementNPObject):
        (WebKit::NetscapePlugin::tryToShortCircuitInvoke):
        (WebKit::NetscapePlugin::cancelStreamLoad):
        (WebKit::NetscapePlugin::isAcceleratedCompositingEnabled):
        (WebKit::NetscapePlugin::proxiesForURL):
        (WebKit::NetscapePlugin::cookiesForURL):
        (WebKit::NetscapePlugin::setCookiesForURL):
        (WebKit::NetscapePlugin::getAuthenticationInfo):
        Use controller() instead of m_pluginController.

        (WebKit::NetscapePlugin::initialize):
        This doesn't take a PluginController parameter anymore.

        (WebKit::NetscapePlugin::destroy):
        No need to null out the plug-in controller.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        Remove m_pluginController member variable.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::compositingRenderServerPort):
        (WebKit::NetscapePlugin::platformSetFocus):
        (WebKit::NetscapePlugin::windowFocusChanged):
        Use controller() instead of m_pluginController.
        
        * WebProcess/Plugins/Plugin.cpp:
        (WebKit::Plugin::Plugin):
        Initialize m_pluginController.

        (WebKit::Plugin::initialize):
        New function that initializes the plug-in controller and then calls the real
        virtual initialize member function.

        * WebProcess/Plugins/Plugin.h:
        Add m_pluginController member variable and a new initialize virtual member function that doesn't take a
        PluginController parameter. Make the "old" initialize member function set up the plug-in controller.

        (WebKit::Plugin::controller):
        This is now a simple getter.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::PluginProxy):
        Remove m_pluginController.

        (WebKit::PluginProxy::pluginProcessCrashed):
        Use controller(), remove a bogus null check.

        (WebKit::PluginProxy::initialize):
        This doesn't take a PluginController parameter now.

        (WebKit::PluginProxy::destroy):
        No need to null out the plug-in controller member variable.

        (WebKit::PluginProxy::loadURL):
        (WebKit::PluginProxy::proxiesForURL):
        (WebKit::PluginProxy::cookiesForURL):
        (WebKit::PluginProxy::setCookiesForURL):
        (WebKit::PluginProxy::getAuthenticationInfo):
        (WebKit::PluginProxy::windowNPObjectID):
        (WebKit::PluginProxy::getPluginElementNPObject):
        (WebKit::PluginProxy::evaluate):
        (WebKit::PluginProxy::cancelStreamLoad):
        (WebKit::PluginProxy::cancelManualStreamLoad):
        (WebKit::PluginProxy::setStatusbarText):
        (WebKit::PluginProxy::setComplexTextInputEnabled):
        (WebKit::PluginProxy::update):
        Use controller() instead of m_pluginController.
        
        * WebProcess/Plugins/PluginProxy.h:
        Remove m_pluginController.

2011-07-01  Darin Adler  <darin@apple.com>

        Consider backing scale factor when setting up graphics layers
        https://bugs.webkit.org/show_bug.cgi?id=63848

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/ca/LayerTreeHostCA.cpp:
        (WebKit::LayerTreeHostCA::initialize): Set contents scale on the
        non-composited content layer based on the backing scale factor.
        (WebKit::LayerTreeHostCA::createPageOverlayLayer): Set contents
        scale on the page overlay layer based on the backing scale factor.

2011-06-30  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Darin Adler.

        WebKit2: DidFinishLoadForFrame is never called on iframes when loads are 
        cancelled by willSendRequest
        https://bugs.webkit.org/show_bug.cgi?id=63753
        
        When deciding a policy for a null request, call the callback that was passed
        to WebKit2 and say that we used the loader.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):

2011-07-01  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Andreas Kling.

        [X11][WK2] plugins/mouse-evets-fixedpos.html is failing because of broken event propagation
        https://bugs.webkit.org/show_bug.cgi?id=63239

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        Revert the return value of NPP_HandleEvent because the plugin function
        returns with 0 if it handled the event.
        (WebKit::NetscapePlugin::platformHandleMouseEvent):
        (WebKit::NetscapePlugin::platformHandleWheelEvent):
        (WebKit::NetscapePlugin::platformHandleMouseEnterEvent):
        (WebKit::NetscapePlugin::platformHandleMouseLeaveEvent):
        (WebKit::NetscapePlugin::platformHandleKeyboardEvent):

2011-07-01  Mark Rowe  <mrowe@apple.com>

        Unreviewed due to fixing of a broken world.

        REGRESSION (r90163): WebKit2 bot is failing 100% of the tests.

        r90163 bumped the version of the WKBundlePageLoaderClient passed in by WebKitTestRunner from 0 to 1.
        This made it run in to the ad-hoc client version checking implemented directly in WKBundlePageSetPageLoaderClient,
        resulting in no client being set. After r90162 the ad-hoc checking is not necessary as the APIClient
        template takes care of the relevant version checks.

        * Shared/APIClient.h:
        (WebKit::APIClient::initialize): Fix a bug I noticed along the way: don't attempt to copy anything if
        the client version is newer than what we support. This matches the behavior of the ad-hoc version checking.
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetInjectedBundleClient): Drop the ad-hoc version checking.
        (WKContextSetHistoryClient): Ditto.
        (WKContextSetDownloadClient): Ditto.
        * UIProcess/API/C/WKCookieManager.cpp:
        (WKCookieManagerSetClient): Ditto.
        * UIProcess/API/C/WKGeolocationManager.cpp:
        (WKGeolocationManagerSetProvider): Ditto.
        * UIProcess/API/C/WKIconDatabase.cpp:
        (WKIconDatabaseSetIconDatabaseClient): Ditto.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageContextMenuClient): Ditto.
        (WKPageSetPageFindClient): Ditto.
        (WKPageSetPageFormClient): Ditto.
        (WKPageSetPageLoaderClient): Ditto.
        (WKPageSetPagePolicyClient): Ditto.
        (WKPageSetPageResourceLoadClient): Ditto.
        (WKPageSetPageUIClient): Ditto.
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetClient): Ditto.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetContextMenuClient): Ditto.
        (WKBundlePageSetEditorClient): Ditto.
        (WKBundlePageSetFormClient): Ditto.
        (WKBundlePageSetPageLoaderClient): Ditto.
        (WKBundlePageSetResourceLoadClient): Ditto.
        (WKBundlePageSetPolicyClient): Ditto.
        (WKBundlePageSetUIClient): Ditto.
        (WKBundlePageSetFullScreenClient): Ditto.

2011-06-30  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        [WebKit2] Consider scale factor when allocating backing store
        https://bugs.webkit.org/show_bug.cgi?id=63766

        This is the first step in considering scale factor. It considers
        scale factor for the primary backing store, not graphics layers,
        and for CG only.

        * Platform/cg/CGUtilities.cpp:
        (WebKit::paintImage): Added a scale factor argument.
        (WebKit::paintBitmapContext): Pass 1 for scale factor.
        * Platform/cg/CGUtilities.h: Updated for above.

        * Shared/ShareableBitmap.h: Added an overload of paint that can handle
        a scale factor.

        * Shared/UpdateInfo.cpp:
        (WebKit::UpdateInfo::encode): Encode scale factor.
        (WebKit::UpdateInfo::decode): Decode scale factor.
        * Shared/UpdateInfo.h: Added scale factor.

        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::paint): Added the overload that can handle
        a scale factor.

        * UIProcess/BackingStore.cpp:
        (WebKit::BackingStore::create): Take a scale factor.
        (WebKit::BackingStore::BackingStore): Store the scale factor.
        (WebKit::BackingStore::incorporateUpdate): Consider the scale factor
        when asserting the size is correct.

        * UIProcess/BackingStore.h: Add a scale factor.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::didUpdateBackingStoreState): Check the
        scale factor too when deciding whether to reuse a backing store.
        (WebKit::DrawingAreaProxyImpl::incorporateUpdate): Pass in the scale
        factor when creating a backing store.

        * UIProcess/mac/BackingStoreMac.mm:
        (WebKit::BackingStore::incorporateUpdate): Take the scale factor into
        account when painting.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::sendDidUpdateBackingStoreState): Put the
        scale factor into the UpdateInfo.
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode): Ditto.
        (WebKit::DrawingAreaImpl::display): Take the scale factor into account
        when allocating the bitmap and creating a graphics context for it.

2011-06-30  Mark Rowe  <mrowe@apple.com>

        Fix the Windows build.

        * UIProcess/API/C/win/WKTextChecker.h:
        * UIProcess/API/C/win/WKView.h:
        * UIProcess/win/WebTextCheckerClient.h:
        * UIProcess/win/WebUndoClient.h:

2011-06-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Anders Carlsson.

        Teach APIClient to correctly handle multiple versions of a client interface.

        If a client struct is not the current version then we can't copy it via assignment
        since that will read past the end of the smaller, older struct. To deal with this
        APIClient needs to be aware of the sizes of the older client version structs so that
        it can copy only the appropriate amount of the struct.
        
        * Shared/APIClient.h:
        (WebKit::APIClient::initialize): Assign through to our client if the new in client is the
        latest version. If an older client version was passed then we zero out our client and memcpy
        the appropriate number of bytes in to it. This ensures that any new members in the client
        are initialized to 0.
        * Shared/APIClientTraits.cpp:
        * Shared/APIClientTraits.h: Client interfaces are the size of their struct unless otherwise stated.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h: Bump the version and add comments indicating
        which components belong to which versions.

2011-06-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Anders Carlsson.

        Make the APIClient template aware of the latest client interface version number.

        This will be used in an upcoming patch.

        * Shared/APIClient.h:
        * UIProcess/WebContextInjectedBundleClient.h:
        * UIProcess/WebCookieManagerProxyClient.h:
        * UIProcess/WebDatabaseManagerProxyClient.h:
        * UIProcess/WebDownloadClient.h:
        * UIProcess/WebFindClient.h:
        * UIProcess/WebFormClient.h:
        * UIProcess/WebGeolocationProvider.h:
        * UIProcess/WebHistoryClient.h:
        * UIProcess/WebIconDatabaseClient.h:
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebPageContextMenuClient.h:
        * UIProcess/WebPolicyClient.h:
        * UIProcess/WebResourceLoadClient.h:
        * UIProcess/WebUIClient.h:
        * WebProcess/InjectedBundle/InjectedBundleClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageFullScreenClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:

2011-06-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Anders Carlsson.

        WebKit2 client interfaces should have constant declaring latest version.

        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/WKCookieManager.h:
        * UIProcess/API/C/WKDatabaseManager.h:
        * UIProcess/API/C/WKGeolocationManager.h:
        * UIProcess/API/C/WKIconDatabase.h:
        * UIProcess/API/C/WKPage.h:
        * WebProcess/InjectedBundle/API/c/WKBundle.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.h:

2011-06-30  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * UIProcess/win/WebPopupMenuProxyWin.h:
        (WebKit::WebPopupMenuProxyWin::enclosingScrollableArea):

2011-06-30  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Anders Carlsson.

        [GTK] Crash observed with nspluginwrapper and flash
        https://bugs.webkit.org/show_bug.cgi?id=62249

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_InvalidateRect): Guard against null instances here.

2011-06-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Anders Carlsson.

        Reinstate WKSecurityOriginGetHost and WKSecurityOriginGetProtocol as wrappers around the correctly-named functions.

        They're needed for ABI compatibility.

        * Shared/API/c/WKSecurityOrigin.cpp:
        (WKSecurityOriginGetHost):
        (WKSecurityOriginGetProtocol):

2011-06-29  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        [Mac] Use system cursors instead of custom bitmaps where possible
        https://bugs.webkit.org/show_bug.cgi?id=63679

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Added WKCursor.

2011-06-29  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        [WebKit2] Crash loading page that adds/removes frame in DOMContentLoaded/loaded
        https://bugs.webkit.org/show_bug.cgi?id=63483

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createFrame): Added a check for null when creating
        a frame. Also added a check that was in the WebKit1 code, but not here. Strangely,
        the comment from the second check was still here, but not the code.

2011-06-28  Chang Shu  <cshu@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] Random crashes in fast/frames/ tests
        https://bugs.webkit.org/show_bug.cgi?id=63459

        Investigation on the crashes has revealed that sometimes, a frame could
        have been destroyed before it is removed from the hierachy in Qt WebKit2 UI process.
        The root cause lies in the fact that the order of the two contiguous asynchronous
        messages may not be respected on the receiving side. And it is Qt's implementation,
        which uses QTimer::startTimer(0), that causes the reverse order. This patch replaces
        the timer approach with QMetaObject::invokeMethod approach and no crash happens afterwards.

        * Platform/qt/WorkQueueQt.cpp:
        (WorkQueue::scheduleWork):

2011-06-28  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [X11][WK2] X error with plugin tests
        https://bugs.webkit.org/show_bug.cgi?id=63520

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        Never create a pixmap with (0,0) dimensions.
        (WebKit::NetscapePlugin::platformGeometryDidChange):
        (WebKit::NetscapePlugin::platformPaint):

2011-06-28  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [X11][WK2] plugins/plugin-javascript-access fails
        https://bugs.webkit.org/show_bug.cgi?id=63464

        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::NetscapePluginModule::getPluginInfo):
        Determine the name of the plugin.

2011-06-27  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Alexey Proskuryakov.

        [WebKit2] Add hixie76WebSocketProtocolEnabled flag to WebPreferences
        https://bugs.webkit.org/show_bug.cgi?id=63447

        Make a new flag added in WebCore::Settings (useHixie76WebSocketProtocol)
        switchable from WebPage and WebPreferences.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetHixie76WebSocketProtocolEnabled):
        (WKPreferencesGetHixie76WebSocketProtocolEnabled):
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2011-06-27  Jeff Miller  <jeffm@apple.com>

        Reviewed by Oliver Hunt.

        Web process always pauses on launch
        https://bugs.webkit.org/show_bug.cgi?id=63487
        
        In the absence of the WEBKIT2_PAUSE_WEB_PROCESS_ON_LAUNCH environment variable, only pause the web process on
        launch if the shift, control, and alt keys are all held down. This regressed in r89685, which always caused the
        web process to pause if the shift and alt keys were not held down.

        * WebProcess/WebKitMain.cpp:
        (pauseProcessIfNeeded): Add some parentheses.

2011-06-27  Huang Dongsung  <luxtella@company100.net>

        Reviewed by Kenneth Rohde Christiansen.

        TiledBackingStore endlessly creates and destroys tiles due to an off-by-one
        error.
        https://bugs.webkit.org/show_bug.cgi?id=62422

        REGRESSION(r77286): Remove bottomRight().
        REGRESSION(r77312): Change the logic to get the bottom right point.
        REGRESSION(r77928): Cause off-by-one error in TiledBackingStore.
        REGRESSION(r78783): Cause off-by-one error in TiledDrawingAreaProxy.
        REGRESSION(r78785): Cause off-by-one error in TiledDrawingAreaProxy.

        If the viewport width equals the contents width, especially in the mobile
        device, TiledBackingStore endlessly creates and deletes the rightmost
        column and bottom row of tiles.
        In the detail, dropTilesOutsideRect() in TiledBackingStore::createTiles()
        deletes tiles and setTile(coordinate, Tile::create(this, coordinate)) creates
        tiles infinitely.
        Modified TiledDrawingAreaProxy also.

        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::innerBottomRight):
        (WebKit::TiledDrawingAreaProxy::invalidate):
        (WebKit::TiledDrawingAreaProxy::paint):
        (WebKit::TiledDrawingAreaProxy::createTiles):

2011-06-26  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        Use a separate file name for Lion's WebKitSystemInterface.

        * Configurations/DebugRelease.xcconfig:

2011-06-26  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Maciej Stachowiak.

        <rdar://problem/9679221&9679235> Work around an issue with sandbox.h.

        * WebProcess/mac/WebProcessMac.mm:

2011-06-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Don't use a Mutex for protecting access to the connection queue clients
        https://bugs.webkit.org/show_bug.cgi?id=63403

        Make sure to only access the queue client vector from the connection work queue.
        This gets rid of a lock and ensures that adding/removing clients from callbacks works correctly.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::addQueueClient):
        (CoreIPC::Connection::removeQueueClient):
        (CoreIPC::Connection::addQueueClientOnWorkQueue):
        (CoreIPC::Connection::removeQueueClientOnWorkQueue):
        (CoreIPC::Connection::processIncomingMessage):
        * Platform/CoreIPC/Connection.h:

2011-06-25  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction after r89426.

        * Shared/API/c/cairo/WKImageCairo.h: Declare cairo type
          as struct (in keeping with other declarations).
        * win/WebKit2.vcproj: Add new WKImageCairo.cpp file to
          WinCairo build.

2011-06-25  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction after r89503.
        See http://trac.webkit.org/changeset/89503. The modifications
        to the WebKit2.def need to be mirrored in WebKit2CFLite.def.

        * win/WebKit2CFLite.def: Add new exported symbol for isPreloaded.

2011-06-24  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction after r89426.
        See http://trac.webkit.org/changeset/89426. The new WebKit2
        header file (WKImageCairo.h) is needed.

        * win/WebKit2Generated.make: Make sure to copy the WKImageCairo.h
        header file to the WebKit2 API directory after building.

2011-06-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Drag-and-drop tab in same window makes web process falsely report unresponsiveness
        https://bugs.webkit.org/show_bug.cgi?id=63369
        <rdar://problem/9673120>

        If the view becomes invisible, stop the responsiveness timer, because we might not get any
        messages that will cause it to stop (such as painting notifications since we don't paint
        when we're not visible).

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewStateDidChange):

2011-06-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Not possible for plug-ins to override the internal PDF viewer
        https://bugs.webkit.org/show_bug.cgi?id=63356
        <rdar://problem/9673382>

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedFromCachedFrame):
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        Pass the entire resource response to shouldUseCustomRepresentationForResponse.

        * WebProcess/WebProcess.cpp:
        (WebKit::canPluginHandleResponse):
        Ask for the plug-in path for a plug-in that can handle the given resource response.
        If we fail to send the message, or if the path comes back empty, we assume that there's no plug-in
        that can handle it.

        (WebKit::WebProcess::shouldUseCustomRepresentationForResponse):
        If the response MIME type is in the m_mimeTypesWithCustomRepresentations map, check if there's
        a plug-in that can handle the given response. If that is the case, it should have precedence over
        the custom representation.

        * WebProcess/WebProcess.h:
        Rename shouldUseCustomRepresentationForMIMEType to shouldUseCustomRepresentationForResponse.

2011-06-24  Adam Roben  <aroben@apple.com>

        Mac build fix after r89685

        * WebProcess/WebKitMain.cpp: Make a Windows-only #include really be Windows-only.

2011-06-24  Adam Roben  <aroben@apple.com>

        Make the web process pause dialog look better on Vista/7 and robust against executable
        renames

        Fixes <http://webkit.org/b/63335> Web process pause dialog looks bad on Vista/7

        Reviewed by Brian Weinstein.

        * WebProcess/WebKitMain.cpp:
        (pauseProcessIfNeeded): Moved code to show the pause dialog here from WebKitMain. We now
        fetch the executable name using ::GetModuleFileNameW instead of hard-coding it. The string
        we pass to ::MessageBoxW no longer has embedded newlines, which improves its appearance on
        Vista/7 (which were doing their own wrapping in addition to our newlines). Appearance is
        different but fine on XP. Note that the message text now contains the "[_debug].exe" suffix when
        referring to the process; that is different from before but seems fine.
        (WebKitMain): Call the new function.

2011-06-24  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Dimitri Glazkov.

        Convert shadow DOM-related tests to use window.internals
        https://bugs.webkit.org/show_bug.cgi?id=61671

        Remove shadow DOM-related methods from WebKit2 API. These are not
        required any more.

        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:
        * win/WebKit2.def: Re-exports for symbols used by WebCoreTestSupport.
        * win/WebKit2CFLite.def: Same for Cairo.

2011-06-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [X11] Do not call NPP_SetWindow with a null window handle on destroy
        https://bugs.webkit.org/show_bug.cgi?id=62981

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::destroy):

2011-06-23 Jamie Cooley  <james.cooley@nokia.com>

        Reviewed by Andreas Kling.

        [Qt][WK2] Qt port needs load-from-history implementation
        https://bugs.webkit.org/show_bug.cgi?id=57784
 
        Created "random access" BackForwardHistory public API method,
        QWKHistory::goToItemAt(int)

        * UIProcess/API/qt/qwkhistory.cpp:
        (QWKHistoryItem::QWKHistoryItem::itemRef):
        Added access method to fetch WKBackForwardListRef

        (QWKHistoryPrivate::QWKHistoryPrivate):
        (QWKHistoryPrivate::createHistory):
        Updated createHistory method and QWKHistoryPrivate constructor to take a pointer
        to the owning QWKPage in addition to the WebBackForwardList. This will be saved so that the
        new API can ask the page to load a HistoryItem.

        (QWKHistory::goToItemAt):
        New Public API. Like QWKHistory::itemAt, callee gives an integer.
        <0 means jump back to that item, 0 means the current item, >0 means jump forwards.
        If an out-of-range index is given, the function silently fails.
        This will invoke WKPageGoToBackForwardListItem.

        * UIProcess/API/qt/qwkhistory.h:
        * UIProcess/API/qt/qwkhistory_p.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::QWKPagePrivate):
        Update instantiation of QWKHistory to include QWKPage.

        * UIProcess/API/qt/tests/qwkhistory/tst_qwkhistory.cpp:
        (tst_QWKHistory::historyForwardBackTest_data):
        (tst_QWKHistory::historyForwardBackTest):
        Add test content for the new API

2011-06-23  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] [WK2] Add drag and drop support
        https://bugs.webkit.org/show_bug.cgi?id=62838

        Added missing pieces to add support for DnD in QtWebKit.

        * Shared/qt/ArgumentCodersQt.cpp: Added.
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        * Shared/qt/ArgumentCodersQt.h: Added.
        Encode DragData so that we can transfer the QMimeData between the
        WebProcess and the UI Process.
        I encode the DragData and not QMimeData directly because we don't
        have an associated QMimeData for each message.

        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::init):
        (QGraphicsWKView::dragEnterEvent):
        (QGraphicsWKView::dragLeaveEvent):
        (QGraphicsWKView::dragMoveEvent):
        (QGraphicsWKView::dropEvent):
        * UIProcess/API/qt/qgraphicswkview.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (dropActionToDragOperation):
        (dragOperationToDropAction):
        (dragOperationToDropActions):
        (QWKPagePrivate::dragEnterEvent):
        (QWKPagePrivate::dragLeaveEvent):
        (QWKPagePrivate::dragMoveEvent):
        (QWKPagePrivate::dropEvent):
        (QWKPagePrivate::startDrag):

        Send drag-and-drop related events to WebKit.

        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::performDragControllerAction):
        (WebKit::WebPageProxy::startDrag):
        * UIProcess/WebPageProxy.h:

         Start the HTML5 drag operation from the UI process, because QDrag
         needs a handle to the QWidget under the mouse.

        * UIProcess/WebPageProxy.messages.in:

        Add message type that takes DragData as a parameter.

        * WebKit2.pro:
        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        * WebProcess/WebCoreSupport/qt/WebDragClientQt.cpp: Added.
        (WebKit::convertImageToBitmap):
        (WebKit::WebDragClient::startDrag):

        Send a message to the UI process to start the HTML5 drag operation.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performDragControllerAction):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

        Add message type that takes DragData as a parameter.

2011-06-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [UNIX] Fix compile warnings in NetscapePluginX11.cpp
        https://bugs.webkit.org/show_bug.cgi?id=63249

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::setXButtonEventFields):
        (WebKit::NetscapePlugin::platformHandleMouseEvent):

2011-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [UNIX] Increment/decrement module load conter in NetscapePluginModule::getPluginInfo()
        https://bugs.webkit.org/show_bug.cgi?id=63150

        Since the method is static, we are using
        NetscapePluginModule::getOrCreate() to get the module. If it's
        created, the load counter is 0, so that when module is deleted,
        shutdown() hasn't been called and the destructor crashes in the
        assert that checks the module has been removed from the
        initialized module list. We should increment the load counter, and
        decrement it before getPluginInfo() returns, so that
        decrementLoadCount() will call shutdown() if counter is 0 and the
        module will be deleted from the list.

        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::NetscapePluginModule::getPluginInfo):

2011-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [UNIX] Check for npp directly when getting X display in NetscapeBrowserFuncs
        https://bugs.webkit.org/show_bug.cgi?id=63149

        NetscapePlugin::fromNPP() shouldn't be called with a null npp, it
        contains an assert that make it crash when building with debug enabled.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue):

2011-06-22  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Add win symbols for new window.internals functionality.
        https://bugs.webkit.org/show_bug.cgi?id=62066

        * win/WebKit2.def:

2011-06-22  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] Set up plugin tests
        https://bugs.webkit.org/show_bug.cgi?id=63066

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin):
        Force windowless mode for the test plugin because we
        don't support windowed plugins yet.

2011-06-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed unnecessary #include <stdio.h>.

        * PluginProcess/mac/PluginProcessMainMac.mm:
        * Shared/WebMemorySampler.cpp:
        * UIProcess/WebFrameProxy.cpp:
        * UIProcess/WebProcessProxy.cpp:
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp:
        * WebProcess/mac/WebProcessMac.mm: Added #include back to places where it
        was needed.

2011-06-22  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed build fix after r89461.

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePlugin::platformSetFocus):
        Forgot to name the parameter, fix it.

2011-06-22  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Darin Adler.

        [X11][WK2] Implement NetscapePlugin::platformSetFocus
        https://bugs.webkit.org/show_bug.cgi?id=63154

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePlugin::platformSetFocus):
        Implement focus setting based on the WebKit1 path.

2011-06-22  Eunmi Lee  <eunmi15.lee@samsung.com>

        Reviewed by Martin Robinson.

        Change GtkWidgetBackingStore.h to WidgetBackingStore.h in order to use in the EFL port.
        https://bugs.webkit.org/show_bug.cgi?id=62848

        Change GtkWidgetBackingStore to WidgetBackingStore in the BackingStore.h and
        gtk/BackingStoreGtk.cpp.

        * UIProcess/BackingStore.h:
        * UIProcess/gtk/BackingStoreGtk.cpp:
        (WebKit::BackingStore::incorporateUpdate):

2011-06-22  Adam Roben  <aroben@apple.com>

        Don't use an alpha channel when drawing the web page on Windows

        We never use the alpha channel in the end anyway (because we never render into a layered
        window, which is the only kind of window that supports alpha). And using an alpha channel is
        tricky to get right since GDI doesn't support alpha (and often writes 0x0 into the alpha
        channel).

        Fixes <http://webkit.org/b/63075> <rdar://problem/9648113> REGRESSION (r88978): Text inside
        form controls looks really awful on Windows XP

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/win/DrawingAreaImplWin.cpp:
        (WebKit::DrawingAreaImpl::createGraphicsContext): Specify false for the hasAlpha parameter
        to the GraphicsContext constructor.

2011-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Remove Connection::setShouldCloseConnectionOnProcessTermination()
        https://bugs.webkit.org/show_bug.cgi?id=61627

        Don't use Connection::setShouldCloseConnectionOnProcessTermination() for the
        GTK port, when the process finishes the connection is closed and
        the other process is already notified. We still need to monitor
        the child process so that it doesn't become a zombie when it dntabi

        * Platform/CoreIPC/Connection.h:
        * Platform/CoreIPC/unix/ConnectionUnix.cpp:
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::childFinishedFunction):
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didFinishLaunching):

2011-06-20  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Kent Tamura.

        FileChooser should be only created when we need to choose files.
        https://bugs.webkit.org/show_bug.cgi?id=63039

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::runOpenPanel): Changed to use settings.

2011-06-22  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Adam Roben.

        [GTK] Implement pixel dump support for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=58242

        * GNUmakefile.am: Added new Cairo specific image handling files to the build.
        * Shared/API/c/cairo/WKImageCairo.cpp: Copied from Source/WebKit2/Shared/cairo/ShareableBitmapCairo.cpp.
        (WKImageCreateCairoSurface): Added
        (WKImageCreateFromCairoSurface): Added
        * Shared/API/c/cairo/WKImageCairo.h: Copied from Source/WebKit2/Shared/cairo/ShareableBitmapCairo.cpp.

2011-06-21  MORITA Hajime  <morrita@google.com>

        Unreviewed, rolling out r89401 and r89403.
        http://trac.webkit.org/changeset/89401
        http://trac.webkit.org/changeset/89403
        https://bugs.webkit.org/show_bug.cgi?id=62970

        Breaks mac build and mistakenly enables the spellcheck API

        * Configurations/FeatureDefines.xcconfig:

2011-06-20  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        Spellcheck API should be build-able.
        https://bugs.webkit.org/show_bug.cgi?id=62970

        No new tests, changing only build related files

        * Configurations/FeatureDefines.xcconfig:

2011-06-21  Jer Noble  <jer.noble@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION: Fullscreen videos are broken (affects embedded vimeo, vimeo.com, and apple.com)
        https://bugs.webkit.org/show_bug.cgi?id=63098
        <rdar://problem/9645393>

        Force a repaint after completing entering full-screen mode only after the notification 
        is sent for the QTMovie to tear down its layer.  Then, the QTMovie will build up its
        layer again during the repaint.

        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
        (WebKit::WebFullScreenManagerMac::setRootFullScreenLayer):

2011-06-21  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add an internal API for accessing the QGraphicsView.
        https://bugs.webkit.org/show_bug.cgi?id=63095

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::ownerWidget):
        * UIProcess/API/qt/qwkpage_p.h:

2011-06-21  Lukasz Slachciak  <l.slachciak@samsung.com>

        Reviewed by Sam Weinig.

        [GTK] [WK2] WebKit2 build break fixes.
        https://bugs.webkit.org/show_bug.cgi?id=62950

        When building WebKit2 for GTK there are few build breaks connected with missing include files.

        * Platform/unix/SharedMemoryUnix.cpp:
        * Shared/gtk/WebCoreArgumentCodersGtk.cpp:
        * UIProcess/API/gtk/PageClientImpl.cpp:

2011-06-20  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] [WebKit2] Disable GDK double buffering
        https://bugs.webkit.org/show_bug.cgi?id=62770

        Explicitly disable GDK double-buffering when instantiating
        a WebKit2 view widget. This prevents one extra pixmap copy.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkit_web_view_base_init):

2011-06-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [UNIX] Don't use WebCore::PluginPackage to get plugin information
        https://bugs.webkit.org/show_bug.cgi?id=62899

        The problem is that both PluginPackage in WebCore and
        NetscapePluginModule in webkit2 install their own netscape browser
        functions and that can cause conflicts in some situations.

        * Shared/Plugins/Netscape/NetscapePluginModule.h: Add helper
        function to set plugin mime type descriptions.
        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::NetscapePluginModule::setMIMEDescription): Helper
        function to set plugin mime type descriptions.
        (WebKit::NetscapePluginModule::getPluginInfo): Use
        NetscapePluginModule instead of PluginPackage.
        * UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp: Remove unneeded
        header include.
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue): Do not try to get the XDisplay if the
        plugin doesn't have a view. It fixes a crash with flash plugin and
        matches WebCore.

2011-06-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Split libWebCore into two libWebCore and libWebCoreGtk
        https://bugs.webkit.org/show_bug.cgi?id=60539

        * GNUmakefile.am: Link to libWebCoreGtk.la too.

2011-06-19  MORITA Hajime <morrita@google.com>

        Unreviewed wincairo build fix.

        * win/WebKit2CFLite.def:

2011-06-19  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.

        The internals object should have createShadowContentElement()
        https://bugs.webkit.org/show_bug.cgi?id=62432

        * win/WebKit2.def: Added some more symbols necessary for
        window.internals to function to the global symbol list.

2011-06-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Separate concerns of loading file icons and choosing files.
        https://bugs.webkit.org/show_bug.cgi?id=62931

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::loadIconForFiles): Renamed.
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2011-06-18  Eunmi Lee  <eunmi15.lee@samsung.com>

        Reviewed by Sam Weinig.

        [EFL][WK2] add WebKit2 EFL port's NativeWebMouseEvent, NativeWebWheelEvent and NativeWebKeyboardEvent
        https://bugs.webkit.org/show_bug.cgi?id=61993

        Add native mouse and keyboard event classes to convert EFL's events to NativeWebEvent.

        * Shared/NativeWebKeyboardEvent.h:
        (WebKit::NativeWebKeyboardEvent::nativeEvent):
        * Shared/NativeWebMouseEvent.h:
        (WebKit::NativeWebMouseEvent::nativeEvent):
        * Shared/NativeWebWheelEvent.h:
        (WebKit::NativeWebWheelEvent::nativeEvent):
        * Shared/efl/NativeWebKeyboardEventEfl.cpp: Added.
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent):
        * Shared/efl/NativeWebMouseEventEfl.cpp: Added.
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent):
        * Shared/efl/NativeWebWheelEventEfl.cpp: Added.
        (WebKit::NativeWebWheelEvent::NativeWebWheelEvent):
        * Shared/efl/WebEventFactory.cpp: Added.
        (WebKit::modifiersForEvent):
        (WebKit::buttonForEvent):
        (WebKit::clickCountForEvent):
        (WebKit::WebEventFactory::createWebMouseEvent):
        (WebKit::WebEventFactory::createWebWheelEvent):
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        * Shared/efl/WebEventFactory.h: Added.

2011-06-18  Eunmi Lee  <eunmi15.lee@samsung.com>

        Reviewed by Sam Weinig.

        [EFL][WK2] Add missing functions of EFL port's PageClientImpl
        https://bugs.webkit.org/show_bug.cgi?id=62711

        Three functions are added in the PageClient.h, so add them to the EFL's PageClientImpl.

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::screenToWindow):
        (WebKit::PageClientImpl::enterAcceleratedCompositingMode):
        (WebKit::PageClientImpl::exitAcceleratedCompositingMode):
        * UIProcess/API/efl/PageClientImpl.h:

2011-06-17  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed build fix after r89060 and r89161.

        * Shared/win/WebCoreArgumentCodersWin.cpp: WinCairo build fixes
          (1) Include proper header files for WinCairo build
          (2) Exclude unused namespace declaration

2011-06-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Remove unused ArgumentEncoder and ArgumentDecoder functions
        https://bugs.webkit.org/show_bug.cgi?id=62909

        * Platform/CoreIPC/ArgumentDecoder.cpp:
        * Platform/CoreIPC/ArgumentDecoder.h:
        * Platform/CoreIPC/ArgumentEncoder.cpp:
        * Platform/CoreIPC/ArgumentEncoder.h:
        
        * Shared/win/PlatformCertificateInfo.cpp:
        (WebKit::PlatformCertificateInfo::encode):
        (WebKit::PlatformCertificateInfo::decode):
        Replace calls to encodeBytes/decodeBytes with
        encodeVariableLengthByteArray/decodeVariableLengthByteArray.

2011-06-17  Anders Carlsson  <andersca@apple.com>

        Yet another Qt build fix attempt.

        * UIProcess/API/qt/ClientImpl.cpp:
        * UIProcess/API/qt/qgraphicswkview.cpp:
        * UIProcess/API/qt/qwkpage.cpp:
        * UIProcess/API/qt/qwkpage_p.h:

2011-06-17  Anders Carlsson  <andersca@apple.com>

        Another attempt at fixing the Qt build.

        * UIProcess/API/qt/ClientImpl.cpp:
        * UIProcess/API/qt/qgraphicswkview.cpp:
        * UIProcess/API/qt/qwkcontext.cpp:

2011-06-17  Anders Carlsson  <andersca@apple.com>

        Fix Qt build.

        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:

2011-06-17  Anders Carlsson  <andersca@apple.com>

        Windows build fix.

        * UIProcess/win/WebView.cpp:

2011-06-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Move the remaining WebCore argument coders to the .cpp file
        https://bugs.webkit.org/show_bug.cgi?id=62874

        Also add includes that other files need that used to be provided by WebCoreArgumentCoders.h,
        and get rid of the LAZY_NATIVE_CURSOR #if check because all WebKit2 platforms now support it.
        
        * Shared/ContextMenuState.h:
        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/gtk/WebCoreArgumentCodersGtk.cpp:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        * Shared/qt/WebCoreArgumentCodersQt.cpp:
        * UIProcess/API/mac/PDFViewController.mm:
        * UIProcess/PageClient.h:
        * UIProcess/WebIconDatabase.cpp:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:

2011-06-17  Chang Shu  <cshu@webkit.org>

        Reviewed by Anders Carlsson.

        [Qt] [WK2] Debug info leaks to stdout from plugins in Qt WebKit2 layout tests
        https://bugs.webkit.org/show_bug.cgi?id=61940

        Tempararily supress stdout during getPluginInfo during which debug info was leaked out.

        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::StdoutRedirect::StdoutRedirect):
        (WebKit::StdoutRedirect::~StdoutRedirect):
        (WebKit::NetscapePluginModule::getPluginInfo):

2011-06-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Andreas Kling.

        Remove WebCore:: qualifier from names in WebPageProxy.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::dragEntered):
        (WebKit::WebPageProxy::dragUpdated):
        (WebKit::WebPageProxy::dragExited):
        (WebKit::WebPageProxy::performDrag):
        (WebKit::WebPageProxy::performDragControllerAction):
        (WebKit::WebPageProxy::dragEnded):
        (WebKit::WebPageProxy::setResizesToContentsUsingLayoutSize):
        (WebKit::WebPageProxy::unableToImplementPolicy):
        (WebKit::WebPageProxy::didChangeContentsSize):
        (WebKit::WebPageProxy::didFindZoomableArea):
        (WebKit::WebPageProxy::findZoomableAreaForPoint):
        (WebKit::WebPageProxy::setComposition):
        (WebKit::WebPageProxy::checkTextOfParagraph):
        (WebKit::WebPageProxy::checkGrammarOfString):
        (WebKit::WebPageProxy::setCursor):
        (WebKit::WebPageProxy::computedPagesCallback):
        (WebKit::WebPageProxy::canAuthenticateAgainstProtectionSpaceInFrame):
        (WebKit::WebPageProxy::didReceiveAuthenticationChallenge):
        (WebKit::WebPageProxy::showCorrectionPanel):
        (WebKit::WebPageProxy::dismissCorrectionPanel):
        (WebKit::WebPageProxy::dismissCorrectionPanelSoon):
        (WebKit::WebPageProxy::recordAutocorrectionResponse):

2011-06-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Fix message generator to include headers for all types
        https://bugs.webkit.org/show_bug.cgi?id=62870

        Previously, if we found an argument coder header for a type, we'd assume
        that that header includes the necessary headers for the type.

        * Scripts/webkit2/messages.py:
        * Scripts/webkit2/messages_unittest.py:

2011-06-17  Chang Shu  <cshu@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] [WK2] Support undo/redo in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=62809

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::action):
        * UIProcess/API/qt/qwkpage.h:

2011-06-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebKit2 GTK build after r89060.

        * Shared/gtk/WebCoreArgumentCodersGtk.cpp:
        (CoreIPC::::encode):

2011-06-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Get rid of CoreIPC::In and CoreIPC::Out from some argument coders
        https://bugs.webkit.org/show_bug.cgi?id=62832

        * Shared/OriginAndDatabases.cpp:
        (WebKit::OriginAndDatabases::encode):
        (WebKit::OriginAndDatabases::decode):
        * Shared/SecurityOriginData.cpp:
        (WebKit::SecurityOriginData::encode):
        (WebKit::SecurityOriginData::decode):
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::encode):
        (WebKit::WebKeyboardEvent::decode):
        * Shared/WebOpenPanelParameters.cpp:
        (WebKit::WebOpenPanelParameters::Data::encode):
        (WebKit::WebOpenPanelParameters::Data::decode):
        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::encode):
        (WebKit::WebPreferencesStore::decode):

2011-06-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Cleanup ResourceRequest, ResourceResponse and ResourceError argument coders
        https://bugs.webkit.org/show_bug.cgi?id=62803

        Get rid of the free encode/decode functions and move the template specializations to their
        respective implementation files instead.

        * Shared/WebCoreArgumentCoders.h:
        * Shared/gtk/WebCoreArgumentCodersGtk.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        * Shared/qt/WebCoreArgumentCodersQt.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):

2011-06-16  Chang Shu  <cshu@webkit.org>

        Reviewed by Sam Weinig.

        [Qt] [WK2] Qt WebKit2 needs undo/redo support
        https://bugs.webkit.org/show_bug.cgi?id=62637

        Implement undo/redo support for document.execCommand().

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::QWKPagePrivate):
        (QWKPagePrivate::~QWKPagePrivate):
        (QWKPagePrivate::registerEditCommand):
        (QWKPagePrivate::clearAllEditCommands):
        (QWKPagePrivate::canUndoRedo):
        (QWKPagePrivate::executeUndoRedo):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/qt/WebUndoCommandQt.cpp: Added.
        (WebUndoCommandQt::WebUndoCommandQt):
        (WebUndoCommandQt::~WebUndoCommandQt):
        (WebUndoCommandQt::redo):
        (WebUndoCommandQt::undo):
        * UIProcess/qt/WebUndoCommandQt.h: Added.
        (WebUndoCommandQt::inUndoRedo):
        * WebKit2.pro:

2011-06-16  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * Shared/WebCoreArgumentCoders.cpp:
        * Shared/WebCoreArgumentCoders.h:

2011-06-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Move more argument coders to WebCoreArgumentCoders and clean up the animation coders
        https://bugs.webkit.org/show_bug.cgi?id=62760

        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        (CoreIPC::encodeOperation):
        (CoreIPC::decodeOperation):
        (CoreIPC::encodeBoolAndValue):
        (CoreIPC::encodeBoolAndEnumValue):
        (CoreIPC::decodeBoolAndValue):
        (CoreIPC::decodeBoolAndEnumValue):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/mac/ArgumentCodersMac.h:
        * Shared/mac/ArgumentCodersMac.mm:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (CoreIPC::::encode):
        (CoreIPC::::decode):

2011-06-16  Sangyong Park  <sy302.park@gmail.com>

        Reviewed by Martin Robinson.

        [GTK] Implement ResourceRequest and ResourceResponse encoder/decoder
        https://bugs.webkit.org/show_bug.cgi?id=55934

        * Shared/gtk/WebCoreArgumentCodersGtk.cpp:
        (CoreIPC::encodeResourceRequest):
        (CoreIPC::decodeResourceRequest):
        (CoreIPC::encodeResourceResponse):
        (CoreIPC::decodeResourceResponse):

2011-06-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Remove support for GTK+2 in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=62794

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseRealize):
        (webkitWebViewBaseDraw):
        (webkitWebViewBaseQueryTooltip):
        (webkit_web_view_base_class_init):
        (webkitWebViewBaseSetTooltipText):
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::menuPositionFunction):
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::moduleMixesGtkSymbols):

2011-06-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove ScriptController::setAllowPopupsFromPlugin
        https://bugs.webkit.org/show_bug.cgi?id=62706

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performJavaScriptURLRequest):
        (WebKit::PluginView::evaluate):

2011-06-15  Ryuan Choi  <ryuan.choi@samsung.com>

        Rubber stamped by Eric Seidel.

        [CMAKE][WK2] Add an option to build webkit2.
        https://bugs.webkit.org/show_bug.cgi?id=62260

        Add script to build WebKit2 using CMake.

        * CMakeLists.txt: Added.

2011-06-15  John Sullivan  <sullivan@apple.com>

        Reviewed by Sam Weinig.

        WKSecurityOriginGetProtocol and WKSecurityOriginGetHost are named wrong because they return copied strings
        <https://bugs.webkit.org/show_bug.cgi?id=62763>
        <rdar://problem/9618071>

        * Shared/API/c/WKSecurityOrigin.cpp:
        (WKSecurityOriginCopyProtocol):
        Renamed to use "Copy" instead of "Get" because it returns a copy.
        (WKSecurityOriginCopyHost):
        Ditto.

        * Shared/API/c/WKSecurityOrigin.h:
        Updated declarations.

2011-06-14  Jon Honeycutt  <jhoneycutt@apple.com>

        REGRESSION(78201): Windowless Flash plug-ins are transparent on some sites
        https://bugs.webkit.org/show_bug.cgi?id=62690
        <rdar://problem/9512026>

        Reviewed by Ada Chan.

        The bug arises when mixing CoreGraphics and GDI. When we create a Windows
        bitmap for a windowless plug-in to draw into, we first fill it with "clear",
        or all 0s. If the plug-in uses GDI to draw, the GDI calls will ignore the
        alpha channel, and if we then use CG to blend this bitmap onto the
        GraphicsContext for the rest of the page, CG will treat the 0-filled
        alpha channel as being transparent.

        To fix this, on Windows, use a GDI-backed GraphicsContext to paint the
        page in the WebProcess, and use GDI to blit from the UpdateInfo to the
        backing store in the UI process.

        * Platform/SharedMemory.h:
        (WebKit::SharedMemory::handle):
        Return the handle for the memory.

        * Shared/ShareableBitmap.h:
        Declared windowsContext() to return a HDC with the bitmap selected into it.
        Added members to store the HDC and the HBITMAP.

        * Shared/win/ShareableBitmapWin.cpp: Added.
        (WebKit::ShareableBitmap::windowsContext):
        Get the screen DC, and create a compatible DC from it. Create a DIB
        section backed by the shared memory, select it into the context, and
        return it.

        * UIProcess/win/BackingStoreWin.cpp:
        (WebKit::BackingStore::incorporateUpdate):
        Use GDI to blit from the update info's bitmap into the backing store bitmap.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::createGraphicsContext):
        Return a GraphicsContext from the ShareableBitmap.
        (WebKit::DrawingAreaImpl::display):
        Call createGraphicsContext(), and pass the ShareableBitmap.

        * WebProcess/WebPage/DrawingAreaImpl.h:
        Declare createGraphicsContext(), which on Windows will create a GDI-backed
        GraphicsContext.

        * WebProcess/WebPage/win/DrawingAreaImplWin.cpp: Added.
        (WebKit::DrawingAreaImpl::createGraphicsContext):
        Get a Windows context for the bitmap, and create and return a new
        GraphicsContext using the DC.

        * win/WebKit2.vcproj:
        Added new files.

2011-06-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Move more argument coders to WebCoreArgumentCoders.cpp
        https://bugs.webkit.org/show_bug.cgi?id=62755

        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::decode):
        (CoreIPC::::encode):
        (CoreIPC::encodeImage):
        (CoreIPC::decodeImage):
        * Shared/WebCoreArgumentCoders.h:

2011-06-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Add ShareableBitmap::createImage and get rid of WebCoreArgumentCodersCG.cpp
        https://bugs.webkit.org/show_bug.cgi?id=62742

        * Shared/ShareableBitmap.h:
        Move createImage out of the #if PLATFORM(QT) section.

        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::decodeImage):
        Call ShareableBitmap::createImage.

        * Shared/WebCoreArgumentCoders.h:
        remove createImage function declaration.

        * Shared/cairo/ShareableBitmapCairo.cpp:
        (WebKit::ShareableBitmap::createImage):
        Add implementation.

        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::createGraphicsContext):
        (WebKit::ShareableBitmap::createImage):
        Move createImage implementation from WebCoreArgumentCodersCG.cpp here.

        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Update projects.

2011-06-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Alexey Proskuryakov.

        Move some argument coders to WebCoreArgumentCoders.cpp
        https://bugs.webkit.org/show_bug.cgi?id=62739

        * GNUmakefile.am:
        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        * Shared/WebCoreArgumentCoders.h:
        * WebKit2.pro:

2011-06-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Fix possible null dereference in webSecKeychainItemCreateFromContentOnMainThread
        https://bugs.webkit.org/show_bug.cgi?id=62736
        <rdar://problem/9601595>

        * WebProcess/mac/KeychainItemShimMethods.mm:
        (WebKit::webSecKeychainItemCreateFromContentOnMainThread):
        SecKeychainItemCreateFromContent can potentially return a null keychain item, so add a null check before trying to retain it.

2011-06-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Ignore responsiveness timer callbacks on closed pages
        https://bugs.webkit.org/show_bug.cgi?id=62735
        <rdar://problem/9511295>

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        Use nullptr instead of clear.

        (WebKit::WebPageProxy::processDidBecomeUnresponsive):
        Return early if the page isn't valid.

        (WebKit::WebPageProxy::processDidBecomeResponsive):
        Ditto.

        (WebKit::WebPageProxy::updateBackingStoreDiscardableState):
        Assert that the page is valid.

2011-06-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r88907.
        http://trac.webkit.org/changeset/88907
        https://bugs.webkit.org/show_bug.cgi?id=62732

        See comment #15 by Nikolas Zimmermann on bug 62527 regarding
        the deprecation of makeString() (Requested by acidx on
        #webkit).

        * UIProcess/efl/WebPageProxyEfl.cpp:
        (WebKit::WebPageProxy::standardUserAgent):

2011-06-15  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][WK2] Unreviewed rolling out r88799, because it made web process crash.

        * Scripts/webkit2/messages.py:
        * Shared/LayerTreeContext.h:
        * Shared/qt/LayerTreeContextQt.cpp:
        (WebKit::LayerTreeContext::LayerTreeContext):
        (WebKit::LayerTreeContext::~LayerTreeContext):
        (WebKit::LayerTreeContext::encode):
        (WebKit::LayerTreeContext::decode):
        (WebKit::LayerTreeContext::isEmpty):
        (WebKit::operator==):
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxy.messages.in:
        * WebKit2.pro:
        * WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:
        (WebCore::collectCompositingInfoForThisLayer):
        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create):
        * WebProcess/WebPage/qt/LayerTreeHostQt.cpp:
        * WebProcess/WebPage/qt/LayerTreeHostQt.h: Removed.

2011-06-14  Eunmi Lee  <eunmi15.lee@samsung.com>

        Reviewed by Sam Weinig.

        [EFL][WK2] Change string operation to makeString()
        https://bugs.webkit.org/show_bug.cgi?id=62527

        Use makeString() because it is better than creating individual strings and concatenating them.

        * UIProcess/efl/WebPageProxyEfl.cpp:
        (WebKit::WebPageProxy::standardUserAgent):

2011-06-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Simon Fraser.

        Follow up for Callers should be robust against WebImage::create() returning an image with a null snapshot
        https://bugs.webkit.org/show_bug.cgi?id=62666

        * Shared/API/c/cg/WKImageCG.cpp:
        (WKImageCreateCGImage):
        (WKImageCreateFromCGImage):
        Don't null check the arguments (as per our API design) or the direct result of WebImage::create.

        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        Remove redundant check and make not being able to create a handle the same
        as not being backed by shareable memory.

2011-06-14  John Sullivan  <sullivan@apple.com>

        Reviewed by Ada Chan.

        <https://bugs.webkit.org/show_bug.cgi?id=62693>
        <rdar://problem/9601436>
        windowsKeyCodeForKeyEvent should be robust against NSFlagsChanged events

        * Shared/mac/WebEventFactory.mm:
        (WebKit::windowsKeyCodeForKeyEvent):
        Explicitly check for NSFlagsChanged before calling -charactersIgnoringModifiers, since
        charactersIgnoringModifiers throws an exception for NSFlagsChanged events.

2011-06-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Use new byte array encoding/decoding functions for WTF argument coders
        https://bugs.webkit.org/show_bug.cgi?id=62682

        * Platform/CoreIPC/ArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        Use the new functions for the string argument coders.
        
        * Platform/CoreIPC/ArgumentCoders.h:
        (CoreIPC::SimpleArgumentCoder::encode):
        (CoreIPC::SimpleArgumentCoder::decode):
        Use the new functions to avoid encoding/decoding the size when it's known at decode time.

        * Platform/CoreIPC/ArgumentDecoder.cpp:
        (CoreIPC::roundUpToAlignment):
        Assert that the alignment is a power of 2.

        (CoreIPC::decodeFixedLengthData):
        Alignment comes before the size.

        * UIProcess/cf/WebBackForwardListCF.cpp:
        (WebKit::WebBackForwardList::createCFDictionaryRepresentation):
        Add a FIXME about now using the internal CoreIPC encoding format here.

        * UIProcess/cf/WebPageProxyCF.cpp:
        Bump the current session state data version number.

2011-06-14  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement accelerated compositing on WK2 Qt port
        https://bugs.webkit.org/show_bug.cgi?id=56935

        Expose viewportVisibleRect(), so that we can detect which parts of a texture actually
        need to be uploaded.

        Together with Viatcheslav Ostapenko.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::viewportVisibleRect):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/qt/WebPageProxyQt.cpp:
        (WebKit::WebPageProxy::viewportVisibleRect):

2011-06-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Start using the new encode/decode functions
        https://bugs.webkit.org/show_bug.cgi?id=62676

        * Platform/CoreIPC/DataReference.cpp:
        (CoreIPC::DataReference::encode):
        Use encodeVariableLengthByteArray.

        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        Use encodeVariableLengthByteArray and the new dataReference accessors.

        (WebKit::UserMessageDecoder::baseDecode):
        Use decodeVariableLengthByteArray.
 
        * Shared/WebData.h:
        (WebKit::WebData::dataReference):
        Return a reference to the data.

        * Shared/WebSerializedScriptValue.h:
        (WebKit::WebSerializedScriptValue::dataReference):
        Ditto.

        * Shared/cf/ArgumentCodersCF.cpp:
        (CoreIPC::encode):
        Use encodeVariableLengthByteArray.

        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::Handle::encode):
        Use encodeVariableLengthByteArray.

        * WebProcess/WebPage/DecoderAdapter.cpp:
        (WebKit::DecoderAdapter::decodeBytes):
        Use decodeVariableLengthByteArray.

        * WebProcess/WebPage/EncoderAdapter.cpp:
        (WebKit::EncoderAdapter::dataReference):
        Rename data() to dataReference() to indicate that it returns a reference to the data.

        (WebKit::EncoderAdapter::encodeBytes):
        Use encodeVariableLengthByteArray.

2011-06-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add encodeVariableLengthByteArray and decodeVariableLengthByteArray
        https://bugs.webkit.org/show_bug.cgi?id=62674

        Rename the ArgumentDecoder::decodeBytes overload that takes a DataReference to
        decodeVariableLengthByteArray, to match the added encodeVariableLengthByteArray.

        * Platform/CoreIPC/ArgumentDecoder.cpp:
        (CoreIPC::ArgumentDecoder::decodeVariableLengthByteArray):
        * Platform/CoreIPC/ArgumentDecoder.h:
        * Platform/CoreIPC/ArgumentEncoder.cpp:
        (CoreIPC::ArgumentEncoder::encodeFixedLengthData):
        (CoreIPC::ArgumentEncoder::encodeVariableLengthByteArray):
        * Platform/CoreIPC/ArgumentEncoder.h:
        * Platform/CoreIPC/DataReference.cpp:
        (CoreIPC::DataReference::decode):
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::Handle::decode):

2011-06-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add functions for converting between DataReferences and vectors
        https://bugs.webkit.org/show_bug.cgi?id=62671

        * Platform/CoreIPC/DataReference.h:
        (CoreIPC::DataReference::DataReference):
        New implicit constructor that takes a vector.

        (CoreIPC::DataReference::vector):
        New function that returns a new vector.

        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::encode):
        Use implicit constructor.

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

2011-06-14  John Sullivan  <sullivan@apple.com>

        Reviewed by Dan Bernstein.

        <https://bugs.webkit.org/show_bug.cgi?id=62666>
        <rdar://problem/9606676>
        Callers should be robust against WebImage::create() returning an image with a null snapshot

        * Shared/API/c/cg/WKImageCG.cpp:
        (WKImageCreateCGImage):
        Return 0 if no bitmap was created.
        (WKImageCreateFromCGImage):
        Ditto.
        
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        Check for null before dereferencing image->bitmap() in two places.
        
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::snapshotInViewCoordinates):
        Return 0 if no bitmap was created.
        (WebKit::WebPage::scaledSnapshotInDocumentCoordinates):
        Ditto.
        (WebKit::WebPage::createSnapshotOfVisibleContent):
        Bail out if no bitmap was created.

2011-06-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Add functions for encoding/decoding data with a known size and alignment
        https://bugs.webkit.org/show_bug.cgi?id=62663

        * Platform/CoreIPC/ArgumentDecoder.cpp:
        (CoreIPC::ArgumentDecoder::decodeFixedLengthData):
        * Platform/CoreIPC/ArgumentDecoder.h:
        * Platform/CoreIPC/ArgumentEncoder.cpp:
        (CoreIPC::ArgumentEncoder::encodeFixedLengthData):
        (CoreIPC::ArgumentEncoder::encodeVariableLengthData):
        * Platform/CoreIPC/ArgumentEncoder.h:

2011-06-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Move string ArgumentCoder template specializations out into a .cpp file
        https://bugs.webkit.org/show_bug.cgi?id=62660

        * GNUmakefile.am:
        * Platform/CoreIPC/ArgumentCoders.cpp: Added.
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        * Platform/CoreIPC/ArgumentCoders.h:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2011-06-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Remove PluginInfoStore::Plugin typedef
        https://bugs.webkit.org/show_bug.cgi?id=62657

        * UIProcess/Plugins/PluginInfoStore.h:
        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        (WebKit::PluginInfoStore::getPluginInfo):
        (WebKit::PluginInfoStore::shouldUsePlugin):

2011-06-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Create the PluginModuleInfo class and reverse the typedef so that PluginInfoStore::Plugin is now a typedef
        https://bugs.webkit.org/show_bug.cgi?id=62654

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::loadPluginsIfNecessary):
        (WebKit::PluginInfoStore::loadPlugin):
        (WebKit::PluginInfoStore::findPluginForMIMEType):
        (WebKit::PluginInfoStore::findPluginForExtension):
        (WebKit::PluginInfoStore::findPlugin):
        (WebKit::PluginInfoStore::infoForPluginWithPath):
        * UIProcess/Plugins/PluginInfoStore.h:
        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::getPluginProcessConnection):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::PluginProcessProxy):
        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
        (WebKit::WebPluginSiteDataManager::getSitesWithData):
        (WebKit::WebPluginSiteDataManager::clearSiteData):
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::getPluginInfo):
        (WebKit::PluginInfoStore::shouldUsePlugin):
        * UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp:
        (WebKit::PluginInfoStore::getPluginInfo):
        (WebKit::PluginInfoStore::shouldUsePlugin):
        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        (WebKit::isOldWindowsMediaPlayerPlugin):
        (WebKit::isNewWindowsMediaPlayerPlugin):
        (WebKit::PluginInfoStore::shouldUsePlugin):

2011-06-14  Stephanie Lewis  <slewis@apple.com>

        Rubber stamped by Oliver Hunt.

        <rdar://problem/9511169>
        Update order files.

        * mac/WebKit2.order:

2011-06-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Start replacing PluginInfoStore::Plugin with PluginModuleInfo
        https://bugs.webkit.org/show_bug.cgi?id=62651

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::plugins):
        (WebKit::PluginInfoStore::findPluginForMIMEType):
        (WebKit::PluginInfoStore::findPluginForExtension):
        (WebKit::PluginInfoStore::infoForPluginWithPath):
        * UIProcess/Plugins/PluginInfoStore.h:
        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::getPluginProcessConnection):
        (WebKit::PluginProcessManager::getSitesWithData):
        (WebKit::PluginProcessManager::clearSiteData):
        (WebKit::PluginProcessManager::getOrCreatePluginProcess):
        * UIProcess/Plugins/PluginProcessManager.h:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::create):
        * UIProcess/Plugins/PluginProcessProxy.h:
        (WebKit::PluginProcessProxy::pluginInfo):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::pluginNeedsExecutableHeap):
        (WebKit::PluginProcessProxy::createPropertyListFile):

2011-06-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Add PluginModuleInfo header and prepare for renaming of PluginInfoStore::Plugin to PluginModuleInfo
        https://bugs.webkit.org/show_bug.cgi?id=62647

        Make PluginModuleInfo a typedef of PluginInfoStore::Plugin for now; eventually it should be its own class,
        and PluginInfoStore::Plugin should go away.

        * GNUmakefile.am:
        * Shared/Plugins/Netscape/NetscapePluginModule.h:
        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::getPluginArchitecture):
        (WebKit::getMIMETypesFromPluginBundle):
        (WebKit::getPluginInfoFromPropertyLists):
        (WebKit::getPluginInfoFromCarbonResources):
        (WebKit::NetscapePluginModule::getPluginInfo):
        (WebKit::NetscapePluginModule::determineQuirks):
        * Shared/Plugins/PluginModuleInfo.cpp: Added.
        * Shared/Plugins/PluginModuleInfo.h: Added.
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2011-06-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Move the code to show the context menu from WebKitWebViewBase to WebContextMenuProxyGtk
        https://bugs.webkit.org/show_bug.cgi?id=62627

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::showContextMenu):
        (WebKit::WebContextMenuProxyGtk::hideContextMenu):
        (WebKit::WebContextMenuProxyGtk::WebContextMenuProxyGtk):
        (WebKit::WebContextMenuProxyGtk::~WebContextMenuProxyGtk):
        (WebKit::WebContextMenuProxyGtk::menuPositionFunction):
        * UIProcess/gtk/WebContextMenuProxyGtk.h:

2011-06-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Rename convertWidgetRectToScreenRect() to convertWidgetPointToScreenPoint()
        https://bugs.webkit.org/show_bug.cgi?id=62626

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::screenToWindow): Implement this method
        using convertWidgetPointToScreenPoint().
        (WebKit::PageClientImpl::windowToScreen): Update to use
        convertWidgetPointToScreenPoint().
        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        (WebKit::WebPopupMenuProxyGtk::showPopupMenu): Use
        convertWidgetPointToScreenPoint().

2011-06-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Support authentication dialogs in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=62366

        Add a new soup feature to show an authentication dialog when it
        gets a 401 HTTP response.

        * GNUmakefile.am: Add new files to compilation.
        * WebProcess/gtk/WebAuthDialog.cpp: Added.
        (web_auth_dialog_class_init):
        (web_auth_dialog_init):
        (sessionAuthenticate):
        (attach):
        (detach):
        (webAuthDialogSessionFeatureInit):
        * WebProcess/gtk/WebAuthDialog.h: Added.
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        (WebKit::WebProcessMainGtk):

2011-06-14  No'am Rosenthal  <noam.rosenthal@nokia.com> and Viatcheslav Ostapenko <ostapenko.viatcheslav@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement accelerated compositing on WK2 Qt port
        https://bugs.webkit.org/show_bug.cgi?id=56935

        Implementing LayerTreeHost and LayerTreeContext and LayerTreeHost for Qt.
        Add the necessary plumbing to make the LayerTreeHost work with Qt, based on the original Mac
        implementation (the code is nearly identical). This includes creating the right layers for the
        overlay and for the non-composited content, and passing the root layer to the UI process.

        Also, since LayerTreeHostQt is compiled, we have to add some of the rest of the existing patches,
        namely the new messages: syncCompositingLayers and updateCompositingLayerContent, and create a
        stub implementation for them in DrawingAreaProxy.

        Note that this is not activated yet, until we enable accelerated compositing in the settings and
        create the right GraphicsLayer.

        * Scripts/webkit2/messages.py:
        * Shared/LayerTreeContext.h:
        * Shared/qt/LayerTreeContextQt.cpp:
        (WebKit::LayerTreeContext::LayerTreeContext):
        (WebKit::LayerTreeContext::~LayerTreeContext):
        (WebKit::LayerTreeContext::encode):
        (WebKit::LayerTreeContext::decode):
        (WebKit::LayerTreeContext::isEmpty):
        (WebKit::operator==):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::syncCompositingLayers):
        (WebKit::DrawingAreaProxy::updateCompositingLayerContent):
        * UIProcess/DrawingAreaProxy.messages.in:
        * WebKit2.pro:
        * WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:
        (WebCore::collectCompositingInfoForThisLayer):
        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create):
        * WebProcess/WebPage/qt/LayerTreeHostQt.cpp:
        (WebKit::LayerTreeHostQt::create):
        (WebKit::LayerTreeHostQt::~LayerTreeHostQt):
        (WebKit::LayerTreeHostQt::LayerTreeHostQt):
        (WebKit::LayerTreeHostQt::setLayerFlushSchedulingEnabled):
        (WebKit::LayerTreeHostQt::scheduleLayerFlush):
        (WebKit::LayerTreeHostQt::cancelPendingLayerFlush):
        (WebKit::LayerTreeHostQt::setShouldNotifyAfterNextScheduledLayerFlush):
        (WebKit::LayerTreeHostQt::setRootCompositingLayer):
        (WebKit::LayerTreeHostQt::invalidate):
        (WebKit::LayerTreeHostQt::setNonCompositedContentsNeedDisplay):
        (WebKit::LayerTreeHostQt::scrollNonCompositedContents):
        (WebKit::LayerTreeHostQt::forceRepaint):
        (WebKit::LayerTreeHostQt::sizeDidChange):
        (WebKit::LayerTreeHostQt::didInstallPageOverlay):
        (WebKit::LayerTreeHostQt::didUninstallPageOverlay):
        (WebKit::LayerTreeHostQt::setPageOverlayNeedsDisplay):
        (WebKit::LayerTreeHostQt::flushPendingLayerChanges):
        (WebKit::LayerTreeHostQt::performScheduledLayerFlush):
        (WebKit::LayerTreeHostQt::layerFlushTimerFired):
        (WebKit::LayerTreeHostQt::createPageOverlayLayer):
        (WebKit::LayerTreeHostQt::destroyPageOverlayLayer):
        (WebKit::LayerTreeHostQt::notifyAnimationStarted):
        (WebKit::LayerTreeHostQt::notifySyncRequired):
        (WebKit::LayerTreeHostQt::paintContents):
        (WebKit::LayerTreeHostQt::showDebugBorders):
        (WebKit::LayerTreeHostQt::showRepaintCounter):
        (WebKit::LayerTreeHost::supportsAcceleratedCompositing):
        * WebProcess/WebPage/qt/LayerTreeHostQt.h: Added.
        (WebKit::LayerTreeHostQt::layerTreeContext):
        (WebKit::LayerTreeHostQt::pauseRendering):
        (WebKit::LayerTreeHostQt::resumeRendering):

2011-06-14  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement accelerated compositing on WK2 Qt port
        https://bugs.webkit.org/show_bug.cgi?id=56935

        Add a createImage() function to ShareableBitmap, for now ifdef'ed to Qt only.
        This allows us to support directly composited images across the WebKit2 processes.

        Together with Viatcheslav Ostapenko.

        * Shared/ShareableBitmap.h:
        * Shared/qt/ShareableBitmapQt.cpp:
        (WebKit::ShareableBitmap::createQImage):
        (WebKit::ShareableBitmap::createImage):

2011-06-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Crash when trying to use Netflix Watch Instantly with Silverlight 3
        https://bugs.webkit.org/show_bug.cgi?id=62611
        <rdar://problem/9058370>

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::getPluginInfo):
        Get the plug-in version string instead of the version number.

        (WebKit::PluginVersion::isValid):
        (WebKit::PluginVersion::PluginVersion):
        (WebKit::PluginVersion::parse):
        (WebKit::PluginVersion::isLessThan):
        Add a new PluginVersion class that represents a plug-in version. The idea is
        that this class be made cross platform.

        (WebKit::NetscapePluginModule::determineQuirks):
        Add the ReturnsNonRetainedScriptableNPObject quirk for versions of Silverlight less than 4.

        * Shared/Plugins/PluginQuirks.h:
        Add the ReturnsNonRetainedScriptableNPObject quirk.

        * UIProcess/Plugins/PluginInfoStore.h:
        Use a version string. Eventually this should hold the PluginVersion class we added.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::pluginScriptableNPObject):
        If the plug-in has the ReturnsNonRetainedScriptableNPObject quirk, do an extra retain.

2011-06-13  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL][WK2] Add dummy files at below of WebProcess.
        https://bugs.webkit.org/show_bug.cgi?id=62445

        Add Efl related directory and files in WebKit2/WebProcess/.

        * WebProcess/Cookies/efl/WebCookieManagerEfl.cpp: Added.
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManager::platformGetHTTPCookieAcceptPolicy):
        * WebProcess/InjectedBundle/efl/InjectedBundleEfl.cpp: Added.
        (WebKit::InjectedBundle::load):
        (WebKit::InjectedBundle::activateMacFontAscentHack):
        * WebProcess/WebPage/efl/WebInspectorEfl.cpp: Added.
        (WebKit::WebInspector::localizedStringsURL):
        * WebProcess/WebPage/efl/WebPageEfl.cpp: Added.
        (WebKit::WebPage::platformInitialize):
        (WebKit::WebPage::platformPreferencesDidChange):
        (WebKit::scroll):
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent):
        (WebKit::WebPage::platformHasLocalDataForURL):
        (WebKit::WebPage::cachedResponseMIMETypeForURL):
        (WebKit::WebPage::platformCanHandleRequest):
        (WebKit::WebPage::cachedSuggestedFilenameForURL):
        (WebKit::WebPage::cachedResponseDataForURL):
        * WebProcess/efl/WebProcessEfl.cpp: Added.
        (WebKit::WebProcess::platformSetCacheModel):
        (WebKit::WebProcess::platformClearResourceCaches):
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::platformTerminate):
        * WebProcess/efl/WebProcessMainEfl.cpp: Added.
        (WebKit::WebProcessMainEfl):
        * WebProcess/efl/WebProcessMainEfl.h: Added.
        * efl/MainEfl.cpp: Added.
        (main):

2011-06-13  Eunmi Lee  <eunmi15.lee@samsung.com>

        Reviewed by Eric Seidel.

        [EFL][WK2] Add initial WebInspectorEfl.cpp for webkit2 efl port
        https://bugs.webkit.org/show_bug.cgi?id=62524

        * UIProcess/efl/WebInspectorEfl.cpp: Added.
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        (WebKit::WebInspectorProxy::platformOpen):
        (WebKit::WebInspectorProxy::platformDidClose):
        (WebKit::WebInspectorProxy::platformBringToFront):
        (WebKit::WebInspectorProxy::platformInspectedURLChanged):
        (WebKit::WebInspectorProxy::inspectorPageURL):
        (WebKit::WebInspectorProxy::platformAttach):
        (WebKit::WebInspectorProxy::platformDetach):
        (WebKit::WebInspectorProxy::platformSetAttachedWindowHeight):

2011-06-13  Eunmi Lee  <eunmi15.lee@samsung.com>

        Reviewed by Eric Seidel.

        [EFL][WK2] Add initial TextCheckerEfl.cpp for webkit2 efl port
        https://bugs.webkit.org/show_bug.cgi?id=62438

        * UIProcess/efl/TextCheckerEfl.cpp: Added.
        (WebKit::TextChecker::state):
        (WebKit::TextChecker::isContinuousSpellCheckingAllowed):
        (WebKit::TextChecker::setContinuousSpellCheckingEnabled):
        (WebKit::TextChecker::setGrammarCheckingEnabled):
        (WebKit::TextChecker::uniqueSpellDocumentTag):
        (WebKit::TextChecker::closeSpellDocumentWithTag):
        (WebKit::TextChecker::checkSpellingOfString):
        (WebKit::TextChecker::checkGrammarOfString):
        (WebKit::TextChecker::spellingUIIsShowing):
        (WebKit::TextChecker::toggleSpellingUIIsShowing):
        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        (WebKit::TextChecker::getGuessesForWord):
        (WebKit::TextChecker::learnWord):
        (WebKit::TextChecker::ignoreWord):

2011-06-13  Sangyong Park  <sy302.park@gmail.com>

        Reviewed by Eric Seidel.

        implement to handle wheel event of plugin on x11
        https://bugs.webkit.org/show_bug.cgi?id=62522

        Implement platformHandleWheelEvent() in NetscapePluginX11.cpp
        for to handle wheel event on plugins

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::setCommonMouseEventFields): add template argument to support WebWheelEvent
        (WebKit::setXButtonEventFieldsByWebWheelEvent): initialize XButtonEvent by WebWheelEvent
        (WebKit::NetscapePlugin::platformHandleWheelEvent): handle wheel event on plugin

2011-06-13  Eunmi Lee  <eunmi15.lee@samsung.com>

        Reviewed by Eric Seidel.

        [EFL][WK2] Add initial WebContextEfl.cpp for webkit2 efl port
        https://bugs.webkit.org/show_bug.cgi?id=62523

        * UIProcess/efl/WebContextEfl.cpp: Added.
        (WebKit::WebContext::applicationCacheDirectory):
        (WebKit::WebContext::platformInitializeWebProcess):
        (WebKit::WebContext::platformInvalidateContext):
        (WebKit::WebContext::platformDefaultDatabaseDirectory):
        (WebKit::WebContext::platformDefaultIconDatabasePath):
        (WebKit::WebContext::platformDefaultLocalStorageDirectory):

2011-06-13  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Unreviewed fix - removed parts of r88659 that were committed by mistake.

        The patch accidentally included parts that weren't supposed to be there, namely the whole
        code was duplicated. This patch rectifies that and brings it to the original reviewed code.

        * WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:
        * WebProcess/WebCoreSupport/WebGraphicsLayer.h:

2011-06-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        BankID plug-in isn't instantiated correctly
        https://bugs.webkit.org/show_bug.cgi?id=62588
        <rdar://problem/9586600>

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::determineQuirks):
        The BankID plug-in uses the QuickDraw drawing model but doesn't draw anything so we can
        use the half-baked QuickDraw support.

        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::defaultSyncMessageTimeout):
        Don't use a sync message timeout for the BankID plug-in since it sends synchronous Apple Events
        and we don't want the plug-in to die while it's waiting for a reply.

2011-06-13  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        kAXTextMarkerForPositionParametrizedAttribute does not work correctly in WK2
        https://bugs.webkit.org/show_bug.cgi?id=62547

        Implement the missing screenToWindow method for WK2.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::screenToWindow):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::screenToWindow):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::screenToWindow):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::screenToWindow):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::screenToWindow):
        * UIProcess/win/WebView.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::screenToWindow):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::screenToWindow):
        * WebProcess/WebPage/WebPage.h:

2011-06-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        REGRESSION (81679-81939): In Safari, Dictionary look up (tap or Ctrl-Cmd-D) doesn't work if you have clicked on a word and not moved the mouse
        <rdar://problem/9580237> 

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::shouldUseSelection):
        Return early if the selection we are using is not a range.

2011-06-13  Tony Chang  <tony@chromium.org>

        Reviewed by Dimitri Glazkov.

        rename ENABLE_NEW_FLEXBOX to ENABLE_CSS3_FLEXBOX
        https://bugs.webkit.org/show_bug.cgi?id=62578

        * Configurations/FeatureDefines.xcconfig:

2011-06-13  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement accelerated compositing on WK2 Qt port
        https://bugs.webkit.org/show_bug.cgi?id=56935

        Added WebGraphicsLayer, a subclass of WebCore::GraphicsLayer that serializes the state of the layer
        tree to the UI process WebLayerTreeInfo.
        For now this patch doesn't serialize the animation information, a feature that will be upstreamed later on.

        Together with Viatcheslav Ostapenko.

        * WebProcess/WebCoreSupport/WebGraphicsLayer.cpp: Added.
        * WebProcess/WebCoreSupport/WebGraphicsLayer.h: Added.

2011-06-13  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement accelerated compositing on WK2 Qt port
        https://bugs.webkit.org/show_bug.cgi?id=56935

        Added WebLayerTreeInfo: a set of structures that can serialize a tree of GraphicsLayers
        across to the UI process.

        Together with Viatcheslav Ostapenko.

        * Scripts/webkit2/messages.py:
        * Shared/WebLayerTreeInfo.cpp: Added.
        * Shared/WebLayerTreeInfo.h: Added.

2011-06-11  Jer Noble  <jer.noble@apple.com>

        Reviewed by Anders Carlsson.

        Avoid flashing when exiting full-screen mode.
        https://bugs.webkit.org/show_bug.cgi?id=62338

        Instead of making a round-trip between processes by calling forceRepaint
        and waiting for a callback, instead make a WebProcess-side call to
        forceRepaintWithoutCallback before sending the ExitAcceleratedCompositingMode
        message to the WebFullScreenControllerProxy. This also means we can get rid of
        the dragImage creation and display.

        Because this redraw will happen during the current run-loop instead of a future
        one, make sure the background color has been set before the redraw in 
        didEnterFullScreen().

        Wait to hide the full-screen window until after we have received the 
        ExitAcceleratedCompositingMode message.  By this time, repaint will have already
        completed.

        * UIProcess/mac/WKFullScreenWindowController.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]): Disable
            screen updates, to be re-enabled during exitAcceleratedCompositingMode.
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]): Don't hide
            the full-screen window here; wait for exitAcceleratedCompositing instead.
        (-[WKFullScreenWindowController exitAcceleratedCompositingMode]): Collapse 
            the redrawCompleted method into this one.
        (-[WKFullScreenWindowController close]): Remove the reference to 
            exitCompositedModeRepaintCompleted.
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::didEnterFullScreen): Set the full screen
            background color first.
        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
        (WebKit::WebFullScreenManagerMac::setRootFullScreenLayer): Repaint before
            sending the ExitAcceleratedCompositingMode message. 

2011-06-13  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        rename ENABLE_FLEXBOX to ENABLE_NEW_FLEXBOX
        https://bugs.webkit.org/show_bug.cgi?id=62545

        * Configurations/FeatureDefines.xcconfig:

2011-06-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Don't access freed memory in the UI process when a plug-in process crashes
        https://bugs.webkit.org/show_bug.cgi?id=62548
        <rdar://problem/9599243>

        Call pluginProcessCrashedOrFailedToLaunch after sending messages to all processes about the plug-in crash,
        otherwise we'll try to dereference m_pluginInfo.path after the PluginProcessProxy object has been deleted.

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didClose):

2011-06-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Fix a crash when drawing area has been deleted
        https://bugs.webkit.org/show_bug.cgi?id=62541

        Check whether WebPageProxy::drawingArea() returns a valid pointer
        before using it, it might be null, for example, when the web
        process crashes.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (callDrawingAreaPaintMethod):
        (webkitWebViewBaseSizeAllocate):

2011-06-13  Eunmi Lee  <eunmi15.lee@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL][WK2] Minor fix: fix coding style and remove unnecessary codes for WebKit2 efl port's PageClientImpl
        https://bugs.webkit.org/show_bug.cgi?id=62429

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::scrollView):
        (WebKit::PageClientImpl::setCursor):
        (WebKit::PageClientImpl::windowToScreen):
        (WebKit::PageClientImpl::doneWithKeyEvent):
        (WebKit::PageClientImpl::setFindIndicator):
        (WebKit::PageClientImpl::didCommitLoadForMainFrame):
        (WebKit::PageClientImpl::didFinishLoadingDataForCustomRepresentation):
        (WebKit::PageClientImpl::findStringInCustomRepresentation):
        (WebKit::PageClientImpl::countStringMatchesInCustomRepresentation):
        * UIProcess/API/efl/PageClientImpl.h:

2011-06-13  Eunmi Lee  <eunmi15.lee@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL][WK2] Add initial WebPreferencesEfl.cpp for webkit2 efl port
        https://bugs.webkit.org/show_bug.cgi?id=62525

        * UIProcess/efl/WebPreferencesEfl.cpp: Added.
        (WebKit::WebPreferences::platformInitializeStore):
        (WebKit::WebPreferences::platformUpdateStringValueForKey):
        (WebKit::WebPreferences::platformUpdateBoolValueForKey):
        (WebKit::WebPreferences::platformUpdateUInt32ValueForKey):
        (WebKit::WebPreferences::platformUpdateDoubleValueForKey):

2011-06-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add context menu support for Webkit2
        https://bugs.webkit.org/show_bug.cgi?id=54827

        * GNUmakefile.am: Add new files to compilation.
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createContextMenuProxy): Create a context
        menu proxy.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (globalPointForClientPoint): Function copied from webkit1 to
        convert a point in widget coordinates to global coordinates.
        (popupMenuPositionFunction):
        (webkitWebViewBaseShowContextMenu): Show the given context menu at
        the given position.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp: Added.
        (WebKit::contextMenuItemActivatedCallback):
        (WebKit::WebContextMenuProxyGtk::createGtkMenu):
        (WebKit::WebContextMenuProxyGtk::showContextMenu):
        (WebKit::WebContextMenuProxyGtk::hideContextMenu):
        (WebKit::WebContextMenuProxyGtk::WebContextMenuProxyGtk):
        (WebKit::WebContextMenuProxyGtk::~WebContextMenuProxyGtk):
        * UIProcess/gtk/WebContextMenuProxyGtk.h: Copied from Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h.
        (WebKit::WebContextMenuProxyGtk::create):

2011-06-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Export an API similar to WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=57820

        Add first implementation of WebKitWebView, a class with the same
        API than webkit1, that wraps the C API to provide a high level
        WebKit2 API for GTK port.

        * GNUmakefile.am: Add new files to compilation.
        * UIProcess/API/gtk/WebKitWebView.cpp: Added.
        (webkit_web_view_init):
        (webkit_web_view_class_init):
        (webkit_web_view_new):
        (webkit_web_view_load_uri):
        (webkit_web_view_go_back):
        (webkit_web_view_go_forward):
        * UIProcess/API/gtk/WebKitWebView.h: Added.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseCreate):
        (webkitWebViewBaseCreateWebPage):
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/API/gtk/webkit/webkit.h: Added.

2011-06-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Rename FrameLoaderClient::interruptForPolicyChangeError to use the past tense
        https://bugs.webkit.org/show_bug.cgi?id=62516

        * WebProcess/WebCoreSupport/WebErrors.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::interruptedForPolicyChangeError):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebCoreSupport/efl/WebErrorsEfl.cpp:
        (WebKit::interruptedForPolicyChangeError):
        * WebProcess/WebCoreSupport/gtk/WebErrorsGtk.cpp:
        (WebKit::interruptedForPolicyChangeError):
        * WebProcess/WebCoreSupport/mac/WebErrorsMac.mm:
        (WebKit::interruptedForPolicyChangeError):
        * WebProcess/WebCoreSupport/qt/WebErrorsQt.cpp:
        (WebKit::interruptedForPolicyChangeError):
        * WebProcess/WebCoreSupport/win/WebErrorsWin.cpp:
        (WebKit::interruptedForPolicyChangeError):

2011-06-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove FrameLoader::isProcessingUserGesture
        https://bugs.webkit.org/show_bug.cgi?id=62519

        Instead of asking the gesture indicator directly, ask the
        ScriptController, like everyone else.  The gesture indicator is just
        one of the piece of information we use to determine whether we're
        processing a user gesture.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::isProcessingUserGesture):

2011-06-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Remove trival "forward-to-client" member functions from FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=62510

        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::blockedError):

2011-06-11  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=62480
        part of <rdar://problem/8675177>
        Add API to launch the WebProcess.  Launching it earlier can save time 
        when loading the first page.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextWarmInitialProcess):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::warmInitialProcess):
        * UIProcess/WebContext.h:

2011-06-09  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        AVPlayerLayer is adding a "fade" animation during Safari full-screen
        https://bugs.webkit.org/show_bug.cgi?id=62433

        CoreAnimation will add default animations when certain properties are changed, unless
        those changes are wrapped in a CATransaction which has had its disableActions property set
        to true.  Wrap each of these three property changes in a CATransaction and disable its actions,
        so that the default "fade" animation is not created in response.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController enterFullScreen:]): Wrap with CATransaction.
        (-[WKFullScreenWindowController _swapView:with:]): Ditto:
        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
        (WebKit::WebFullScreenManagerMac::setRootFullScreenLayer): Ditto.

2011-06-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION (WebKit2): window.showModalDialog() broken
        https://bugs.webkit.org/show_bug.cgi?id=62496
        <rdar://problem/9581492>

        If dispatching a message ends up creating a nested run loop, some incoming messages can end up not being
        delivered until we exit from the run loop.

        Fix this by using a Deque instead of a Vector for incoming messages, and get one message at a time and then
        dispatch it. That prevents us from having any lingering messages lying around in stack allocated space.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::waitForMessage):
        (CoreIPC::Connection::dispatchMessages):
        * Platform/CoreIPC/Connection.h:

2011-06-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Unresponsive cursor is shown when displaying a modal dialog
        Part of <rdar://problem/9581492>
        https://bugs.webkit.org/show_bug.cgi?id=62494

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runModal):
        * UIProcess/WebPageProxy.h:
        Stop the responsiveness timer when calling out to show a modal dialog.

2011-06-10  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        add a compile guard ENABLE(FLEXBOX)
        https://bugs.webkit.org/show_bug.cgi?id=62049

        * Configurations/FeatureDefines.xcconfig:

2011-06-10  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL][WK2] Add dummy files in WebProcess/WebCoreSupport/efl
        https://bugs.webkit.org/show_bug.cgi?id=62346

        Add WebProcess/WebCoreSupport/efl directory and files.

        * WebProcess/WebCoreSupport/efl/WebContextMenuClientEfl.cpp: Added.
        (WebKit::WebContextMenuClient::lookUpInDictionary):
        (WebKit::WebContextMenuClient::isSpeaking):
        (WebKit::WebContextMenuClient::speak):
        (WebKit::WebContextMenuClient::stopSpeaking):
        * WebProcess/WebCoreSupport/efl/WebEditorClientEfl.cpp: Added.
        (WebKit::WebEditorClient::handleKeyboardEvent):
        (WebKit::WebEditorClient::handleInputMethodKeydown):
        * WebProcess/WebCoreSupport/efl/WebErrorsEfl.cpp: Added.
        (WebKit::cancelledError):
        (WebKit::blockedError):
        (WebKit::cannotShowURLError):
        (WebKit::interruptForPolicyChangeError):
        (WebKit::cannotShowMIMETypeError):
        (WebKit::fileDoesNotExistError):
        (WebKit::pluginWillHandleLoadError):
        * WebProcess/WebCoreSupport/efl/WebFrameNetworkingContext.h: Added.
        (WebFrameNetworkingContext::create):
        (WebFrameNetworkingContext::WebFrameNetworkingContext):
        * WebProcess/WebCoreSupport/efl/WebPopupMenuEfl.cpp: Added.
        (WebKit::WebPopupMenu::setUpPlatformData):

2011-06-09  Andreas Kling  <kling@webkit.org>

        Reviewed by Darin Adler.

        WebKit2: Remove unused function CoreIPC::Connection::deprecatedWaitFor().
        https://bugs.webkit.org/show_bug.cgi?id=62386

        * Platform/CoreIPC/Connection.h:

2011-06-09  Andreas Kling  <kling@webkit.org>

        Reviewed by Anders Carlsson.

        [Qt][WK2] Remove usage of deprecated CoreIPC functions.
        https://bugs.webkit.org/show_bug.cgi?id=62290

        Use the new DrawingArea{,Proxy}.messages.in approach to CoreIPC in TiledDrawingArea.
        The TiledDrawingArea{,Proxy}-specific messages were moved up into DrawingArea{,Proxy}
        and guarded by ENABLE(TILED_BACKING_STORE).

        * Shared/CoreIPCSupport/DrawingAreaMessageKinds.h: Removed.
        * Shared/CoreIPCSupport/DrawingAreaProxyMessageKinds.h: Removed.

        * GNUmakefile.am:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj: Prune deleted files from build system.

        * Platform/CoreIPC/MessageID.h: Remove legacy DrawingArea message ID's.

        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKViewPrivate::commitScale): No longer waits for all tile updates to complete,
        this will be addressed by the soon-to-be-upstreamed TileSet mechanism.

        * UIProcess/DrawingAreaProxy.messages.in:
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::didSetSize):
        (WebKit::DrawingAreaProxy::invalidate):
        (WebKit::DrawingAreaProxy::snapshotTaken):
        (WebKit::DrawingAreaProxy::tileUpdated):
        (WebKit::DrawingAreaProxy::allTileUpdatesProcessed): Added IPC calls used by
        TiledDrawingAreaProxy to DrawingAreaProxy.

        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::setSize):
        (WebKit::DrawingArea::cancelTileUpdate):
        (WebKit::DrawingArea::requestTileUpdate):
        (WebKit::DrawingArea::takeSnapshot): Added IPC calls used by TiledDrawingArea
        to DrawingArea.

        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/DrawingAreaProxyImpl.cpp: Remove the now-unneeded didReceiveMessage()
        and didReceiveSyncMessage().

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        * WebProcess/WebPage/DrawingAreaImpl.h: Remove the now-unneeded didReceiveMessage().

        * UIProcess/TiledDrawingAreaProxy.h:
        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::sizeDidChange):
        (WebKit::TiledDrawingAreaProxy::tileUpdated):
        (WebKit::TiledDrawingAreaProxy::allTileUpdatesProcessed): Split didReceiveMessage()
        into functions.

        (WebKit::TiledDrawingAreaProxy::removeTile):
        (WebKit::TiledDrawingAreaProxy::requestTileUpdate):
        (WebKit::TiledDrawingAreaProxy::setPageIsVisible):
        (WebKit::TiledDrawingAreaProxy::takeSnapshot): Use new-style IPC.

        * WebProcess/WebPage/TiledDrawingArea.cpp:
        (WebKit::TiledDrawingArea::setSize):
        (WebKit::TiledDrawingArea::cancelTileUpdate):
        (WebKit::TiledDrawingArea::requestTileUpdate):
        (WebKit::TiledDrawingArea::takeSnapshot): Split didReceiveMessage() into functions.

        (WebKit::TiledDrawingArea::display):
        (WebKit::TiledDrawingArea::updateTile):
        (WebKit::TiledDrawingArea::tileUpdateTimerFired): Use new-style IPC.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage): Remove handling of
        CoreIPC::MessageClassDrawingAreaProxyLegacy.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveMessage): Remove handling of
        CoreIPC::MessageClassDrawingAreaLegacy.

        * UIProcess/qt/TiledDrawingAreaProxyQt.cpp: Remove unneeded includes.

        * WebProcess/WebPage/TiledDrawingArea.h: Remove didReceiveMessage() and make
        CoreIPC message handlers explicitly virtual.

2011-06-09  Andreas Kling  <kling@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2: Generate correct header conditionals in message receivers.
        https://bugs.webkit.org/show_bug.cgi?id=62379

        Given a *.messages.in file like this:

        Foo(AwesomeObject o)
        #if ENABLE(ESOTERIC_FEATURE)
        Bar(AwesomeObject o)
        #endif

        messages.py would include AwesomeObject.h only #if ENABLE(ESOTERIC_FEATURE).
        This breaks the build on platforms without that defined.

        Furthermore, if two messages guarded by different conditionals both pull in the same
        header, only the last conditional will be applied, for example:

        #if ENABLE(ESOTERIC_FEATURE)
        Foo(AwesomeObject o)
        #endif
        #if ENABLE(MYSTERIOUS_FEATURE)
        Bar(AwesomeObject o)
        #endif

        Would include AwesomeObject.h #if ENABLE(MYSTERIOUS_FEATURE) when it really should
        check #if ENABLE(ESOTERIC_FEATURE) || ENABLE(MYSTERIOUS_FEATURE).

        Change the generator to consider all conditionals for a given header file.
        Also consider conditionals for reply parameters.

        * Scripts/webkit2/messages.py:
        * Scripts/webkit2/messages_unittest.py:

2011-06-09  Eunmi Lee  <eunmi15.lee@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL][WK2] Add PageClientImpl and WebPageProxyEfl for efl port
        https://bugs.webkit.org/show_bug.cgi?id=62363

        * UIProcess/API/efl/PageClientImpl.cpp: Added.
        (WebKit::PageClientImpl::PageClientImpl):
        (WebKit::PageClientImpl::~PageClientImpl):
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        (WebKit::PageClientImpl::setViewNeedsDisplay):
        (WebKit::PageClientImpl::displayView):
        (WebKit::PageClientImpl::scrollView):
        (WebKit::PageClientImpl::viewSize):
        (WebKit::PageClientImpl::isViewWindowActive):
        (WebKit::PageClientImpl::isViewFocused):
        (WebKit::PageClientImpl::isViewVisible):
        (WebKit::PageClientImpl::isViewInWindow):
        (WebKit::PageClientImpl::processDidCrash):
        (WebKit::PageClientImpl::didRelaunchProcess):
        (WebKit::PageClientImpl::pageClosed):
        (WebKit::PageClientImpl::toolTipChanged):
        (WebKit::PageClientImpl::setCursor):
        (WebKit::PageClientImpl::setViewportArguments):
        (WebKit::PageClientImpl::registerEditCommand):
        (WebKit::PageClientImpl::clearAllEditCommands):
        (WebKit::PageClientImpl::canUndoRedo):
        (WebKit::PageClientImpl::executeUndoRedo):
        (WebKit::PageClientImpl::convertToDeviceSpace):
        (WebKit::PageClientImpl::convertToUserSpace):
        (WebKit::PageClientImpl::windowToScreen):
        (WebKit::PageClientImpl::doneWithKeyEvent):
        (WebKit::PageClientImpl::createPopupMenuProxy):
        (WebKit::PageClientImpl::createContextMenuProxy):
        (WebKit::PageClientImpl::setFindIndicator):
        (WebKit::PageClientImpl::didChangeScrollbarsForMainFrame):
        (WebKit::PageClientImpl::didCommitLoadForMainFrame):
        (WebKit::PageClientImpl::didFinishLoadingDataForCustomRepresentation):
        (WebKit::PageClientImpl::customRepresentationZoomFactor):
        (WebKit::PageClientImpl::setCustomRepresentationZoomFactor):
        (WebKit::PageClientImpl::flashBackingStoreUpdates):
        (WebKit::PageClientImpl::findStringInCustomRepresentation):
        (WebKit::PageClientImpl::countStringMatchesInCustomRepresentation):
        (WebKit::PageClientImpl::userSpaceScaleFactor):
        * UIProcess/API/efl/PageClientImpl.h: Added.
        (WebKit::PageClientImpl::create):
        (WebKit::PageClientImpl::viewObject):
        (WebKit::PageClientImpl::page):
        * UIProcess/WebPageProxy.h:
        * UIProcess/efl/WebPageProxyEfl.cpp: Added.
        (WebKit::WebPageProxy::viewObject):
        (WebKit::WebPageProxy::standardUserAgent):
        (WebKit::WebPageProxy::getEditorCommandsForKeyEvent):
        (WebKit::WebPageProxy::saveRecentSearches):
        (WebKit::WebPageProxy::loadRecentSearches):

2011-06-08  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.

        <https://bugs.webkit.org/show_bug.cgi?id=62332>
        <rdar://problem/9355199>
        [WKView _setDragImage:at:linkDrag:] can crash if WKView is dealloc'ed during drag

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _resendKeyDownEvent:]):
        Renamed self-protecting RetainPtr from "protect" to "protector" so it's a noun.
        (-[WKView _setDragImage:at:linkDrag:]):
        Added a self-protecting RetainPtr.

2011-06-08  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        WebKit2: Enable serializing of data types needed for cross-process accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=61694

        Add an ArgumentCoder for FloatPoint3D.

        Together with Viatcheslav Ostapenko.

        * Scripts/webkit2/messages.py:
        * Shared/WebCoreArgumentCoders.h:

2011-06-08  No'am Rosenthal  <noam.rosenthal@nokia.com>

         Reviewed by Kenneth Rohde Christiansen.

         WebKit2: Enable serializing of data types needed for cross-process accelerated compositing
         https://bugs.webkit.org/show_bug.cgi?id=61694

         Add ArgumentCoders for TransformOperation, including all the subclasses,
         and TransformOperations.

         * Scripts/webkit2/messages.py:
         * Shared/WebCoreArgumentCoders.h:

2011-06-08  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Build fix for building QtWebKit inside of Qt.
        https://bugs.webkit.org/show_bug.cgi?id=62280

        Remove CONFIG=staticlib, because it causes the configure script to add -lwebkit2
        into QtWebKit.prl.

        * WebKit2.pri:

2011-06-07  Tim Horton  <timothy_horton@apple.com>

        Reviewed by Alexey Proskuryakov.

        Use correct CFURLStorageSessionRef definition on Snow Leopard
        https://bugs.webkit.org/show_bug.cgi?id=62223

        * PluginProcess/mac/PluginProcessShim.mm:

2011-06-07  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.

        <https://bugs.webkit.org/show_bug.cgi?id=62248>
        <rdar://problem/9568516>
        WKResponderChainSink mechanism isn't robust against some types of responder chain manipulation

        * UIProcess/API/mac/WKView.mm:
        (-[WKResponderChainSink detach]):
        This method formerly blindly assumed that since -initWithResponderChain: put self at the
        end of the responder chain, after _lastResponderInChain, then self is still at the end
        of the responder chain and still immediately after _lastResponderInChain. Made this function
        robust against some kinds of responder chain manipulations, though it can't be robust against
        some other kinds (e.g., manipulations that removed self from this chain and put it into some
        other chain).

2011-06-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove repeated IPC traffic from SetRenderTreeSize message
        https://bugs.webkit.org/show_bug.cgi?id=62244

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        Add didLayoutForFrame callback.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageGetRenderTreeSize):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        Add render tree size getter in WebProcess.

        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::didLayoutForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        Added.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        Removed setRenderTreeSize.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidLayout):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        Call the new didLayoutForFrame client function.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::renderTreeSize):
        * WebProcess/WebPage/WebPage.h:
        Add iterative implementation to compute the total size of the render tree
        for a page.

2011-06-07  Zalan Bujtas  <zbujtas@gmail.com>

        Reviewed by Andreas Kling.

        TiledDrawingArea: Delay serving tile requests when the drawing area is suspended.

        Do not paint tiles when painting is disabled (suspended) on the web process side.
        Buffer up the tile requests and paint them, when the drawing area gets resumed.
        On the UI process side, do not block on tile updates, when the tiled area is
        not visible (painting is disabled on the web process side).

        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::waitUntilUpdatesComplete):
        * WebProcess/WebPage/TiledDrawingArea.cpp:
        (WebKit::TiledDrawingArea::suspendPainting):
        (WebKit::TiledDrawingArea::resumePainting):
        (WebKit::TiledDrawingArea::scheduleTileUpdate):
        (WebKit::TiledDrawingArea::tileUpdateTimerFired):
        (WebKit::TiledDrawingArea::didReceiveMessage):
        * WebProcess/WebPage/TiledDrawingArea.h:

2011-06-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r88259 and r88263.
        http://trac.webkit.org/changeset/88259
        http://trac.webkit.org/changeset/88263
        https://bugs.webkit.org/show_bug.cgi?id=62228

        broke builds (Requested by rniwa on #webkit).

        * PluginProcess/mac/PluginProcessShim.mm:

2011-06-07  Tim Horton  <timothy_horton@apple.com>

        Reviewed by Alexey Proskuryakov.

        Use correct CFURLStorageSessionRef definition on Snow Leopard
        https://bugs.webkit.org/show_bug.cgi?id=62223

        * PluginProcess/mac/PluginProcessShim.mm:

2011-06-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Move moduleMixesGtkSymbols() from PluginPackage to PluginView
        https://bugs.webkit.org/show_bug.cgi?id=62200

        In WebKit2 PluginPackage is used by the UI process to load plugins
        in order to get information about them, but it doesn't use any GTK
        symbol. So the UI process should be able to load plugins even when
        building with GTK3, but we should not allow the plugin view to use
        the plugin if it mixes GTK2 and GTK3 symbols.

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::moduleMixesGtkSymbols):
        (WebKit::NetscapePlugin::platformPostInitialize): Check whether
        the module is mixing GTK+ 2 and GTK+ 3 symbols.

2011-06-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r88222.
        http://trac.webkit.org/changeset/88222
        https://bugs.webkit.org/show_bug.cgi?id=62192

        Broke compile on Mac (Requested by abarth on #webkit).

        * Scripts/webkit2/messages.py:
        * Shared/WebCoreArgumentCoders.h:

2011-06-06  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        WebKit2: Enable serializing of data types needed for cross-process accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=61694

        Add ArgumentCoders for TransformOperation, including all the subclasses,
        and TransformOperations.

        * Scripts/webkit2/messages.py:
        * Shared/WebCoreArgumentCoders.h:

2011-06-06  John Sullivan  <sullivan@apple.com>

        Reviewed by Dan Bernstein.

        <https://bugs.webkit.org/show_bug.cgi?id=62165>
        <rdar://problem/9555835>
        WebKit2 find-on-page callback doesn’t handle kWKMoreThanMaximumMatchCount on PDF pages

        * UIProcess/API/mac/PDFViewController.mm:
        (WebKit::PDFViewController::findString):
        Return kWKMoreThanMaximumMatchCount when appropriate, a la FindController::countStringMatches().
        Also, skip counting all the matches if maxMatchCount is 0, to avoid (perhaps slowly) computing a
        number that would be ignored.

2011-06-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Anders Carlsson.

        Do not use NPRuntimeObjectMap in NetscapePlugin::setException when plug-in is running out of process
        https://bugs.webkit.org/show_bug.cgi?id=62124

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::setException):

2011-06-06  Dominic Cooney  <dominicc@chromium.org>

        Unreviewed WinCairo build fix after r88159.

        * win/WebKit2CFLite.def: Export symbols for WebCoreTestSupport.

2011-06-04  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Dimitri Glazkov.

        Re-export JSC and WebCore symbols required by WebCoreTestSupport.
        https://bugs.webkit.org/show_bug.cgi?id=61076

        * win/WebKit2.def:

2011-06-06  Alexandru Chiculita  <achicu@adobe.com>

        Reviewed by Kent Tamura.

        Add ENABLE_CSS_EXCLUSIONS support for build-webkit script
        https://bugs.webkit.org/show_bug.cgi?id=61628

        * Configurations/FeatureDefines.xcconfig:

2011-06-06  Mihnea Ovidenie  <mihnea@adobe.com>

        Reviewed by Kent Tamura.

        Add ENABLE(CSS_REGIONS) guard for CSS Regions support
        https://bugs.webkit.org/show_bug.cgi?id=61631

        * Configurations/FeatureDefines.xcconfig:

2011-06-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Anders Carlsson.

        [UNIX] SOCK_DGRAM sockets are not notified when the other end closes the connection
        https://bugs.webkit.org/show_bug.cgi?id=61538

        Use SOCK_STREAM instead of SOCK_DGRAM sockets. Rework the message
        receiver code to support stream sockets, since it requires to
        handle message boundaries. The same code works for DGRAM sockets,
        so this change shouldn't break other ports using DGRAM.

        * Platform/CoreIPC/Connection.h:
        * Platform/CoreIPC/unix/ConnectionUnix.cpp:
        (CoreIPC::Connection::platformInitialize):
        (CoreIPC::Connection::processMessage): Process messages from data
        already received.
        (CoreIPC::readBytesFromSocket): Read from socket using recvmsg().
        (CoreIPC::Connection::readyReadHandler):
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess): Use SOCK_DGRAM in
        socketpair().

== Rolled over to ChangeLog-2011-06-04 ==
