2011-06-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Disable WebProcess side display throttling when in a user scroll
        <rdar://problem/9517175>
        https://bugs.webkit.org/show_bug.cgi?id=62095

        Add the ability to disable WebProcess side display throttling that
        takes place in DrawingAreaImpl::displayTimerFired. Disable the throttling
        when in a user or animated scroll.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::didStartRubberBandForFrame):
        (WebKit::WebChromeClient::didCompleteRubberBandForFrame):
        (WebKit::WebChromeClient::didStartAnimatedScroll):
        (WebKit::WebChromeClient::didCompleteAnimatedScroll):
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::enableDisplayThrottling):
        (WebKit::DrawingArea::disableDisplayThrottling):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        (WebKit::DrawingAreaImpl::enableDisplayThrottling):
        (WebKit::DrawingAreaImpl::disableDisplayThrottling):
        (WebKit::DrawingAreaImpl::displayTimerFired):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::wheelEvent):

2011-06-04  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        [Mac WebKit2] REGRESSION (r86692): Synchronous XMLHttpRequest hangs in credential shim (affects Netgear ReadyNAS admin page)
        https://bugs.webkit.org/show_bug.cgi?id=62094
        rdar://problem/9539204

        * WebKit2.xcodeproj/project.pbxproj: Added new source files.
        * WebProcess/mac/CoreIPCClientRunLoop.h: Added.
        * WebProcess/mac/CoreIPCClientRunLoop.mm: Added.
        (-[WKFunctionAdapter perform]): Added.
        (WebKit::createCoreIPCRunLoopModesArray): Added.
        (WebKit::coreIPCRunLoopModesArray): Added.
        (WebKit::callOnCoreIPCClientRunLoopAndWait): Added.

        * WebProcess/mac/KeychainItemShimMethods.mm:
        (WebKit::webFreeAttributeListContent): Use callOnCoreIPCClientRunLoopAndWait.
        (WebKit::webFreeKeychainItemContent): Ditto.
        (WebKit::webSecKeychainItemCopyContent): Ditto.
        (WebKit::webSecKeychainItemCreateFromContent): Ditto.
        (WebKit::webSecKeychainItemModifyContent): Ditto.
        * WebProcess/mac/SecItemShimMethods.mm:
        (WebKit::webSecItemCopyMatching): Ditto.
        (WebKit::webSecItemAdd): Ditto.
        (WebKit::webSecItemUpdate): Ditto.
        (WebKit::webSecItemDelete): Ditto.

2011-06-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2 needs to know when a scroll is happening due to the ScrollAnimator
        https://bugs.webkit.org/show_bug.cgi?id=62093

        Stub out new ChromeClient functions regarding the start and end of ScrollAnimator
        animated scrolls, and update logic for rubber-band ending to check for main frame
        now that it is called for all frames.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::didStartRubberBandForFrame):
        (WebKit::WebChromeClient::didCompleteRubberBandForFrame):
        (WebKit::WebChromeClient::didStartAnimatedScroll):
        (WebKit::WebChromeClient::didCompleteAnimatedScroll):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2011-06-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Steve Falkenburg.

        <rdar://problem/9553645> and https://bugs.webkit.org/show_bug.cgi?id=62064
        WebBackForwardListItem::setBackForwardData actually appends data

        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::setBackForwardData): Clear the Vector out before appending
          the replacement data.

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

        Reviewed by Brady Eidson.

        Disable the sync message timeout for the Microsoft SharePoint plug-in
        https://bugs.webkit.org/show_bug.cgi?id=62043
        <rdar://problem/9536303>

        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::defaultSyncMessageTimeout):

2011-06-03  Andreas Kling  <kling@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] TiledDrawingArea: Initialize tiles to transparent.

        * UIProcess/qt/TiledDrawingAreaTileQt.cpp:
        (WebKit::TiledDrawingAreaTile::incorporateUpdate): When constructing new
        back buffers, fill them with transparent pixels.

2011-06-03  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Andreas Kling.

        [Qt][WK2] Make tiling on WebKit2 more responsive.
        https://bugs.webkit.org/show_bug.cgi?id=50064

        Instead of creating and destroying pixmaps, and copying them using QPixmap::copy()
        or relying on the implicit sharing functionality, we keep the QPixmaps alive
        and just make sure their content is synchronized.

        This seems to improve responsiveness noticably, as now the UI process doesn't deal
        with allocating/deallocating pixmaps, and the copies are done with the optimized
        path (QPainter) vs the unoptimized ones (QPixmap::copy().)

        * UIProcess/TiledDrawingAreaTile.h:
        * UIProcess/qt/TiledDrawingAreaTileQt.cpp:
        (WebKit::TiledDrawingAreaTile::TiledDrawingAreaTile):
        (WebKit::TiledDrawingAreaTile::isReadyToPaint):
        (WebKit::TiledDrawingAreaTile::hasReadyBackBuffer):
        (WebKit::TiledDrawingAreaTile::swapBackBufferToFront):
        (WebKit::TiledDrawingAreaTile::incorporateUpdate):

2011-06-03  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [Chromium] cpu-profiler-profiling layout test is flaky on Linux Debug.
        https://bugs.webkit.org/show_bug.cgi?id=61533

        Skip cpu-profiler-profiling in debug, implement a fast headless alternative.

        * WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp:
        (WKBundleInspectorSetJavaScriptProfilingEnabled):
        * WebProcess/InjectedBundle/API/c/WKBundleInspector.h:
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::setJavaScriptProfilingEnabled):
        * WebProcess/WebPage/WebInspector.h:

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

        Reviewed by Mark Rowe.

        Assert when trying to unload a module that failed to load
        https://bugs.webkit.org/show_bug.cgi?id=61980

        Remove an invalid ASSERT; it's OK for m_bundle to be null if the bundle failed to load.

        * Platform/mac/ModuleMac.mm:
        (WebKit::Module::unload):

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

        Reviewed by Simon Fraser.

        Add quirk for plug-ins that return a retained CALayer
        https://bugs.webkit.org/show_bug.cgi?id=61948
        <rdar://problem/9530390>

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::determineQuirks):
        Set the ReturnsRetainedCoreAnimationLayer quirk for Flash.

        * Shared/Plugins/PluginQuirks.h:
        Add ReturnsRetainedCoreAnimationLayer quirk.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue):
        Handle WKNVExpectsNonretainedLayer by always returning true, and also
        call NetscapePlugin::setPluginReturnsNonretainedLayer(true) to add a way
        for plug-ins to opt into returning non-retained layers even if they have
        the quirk specified.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin):
        Initialize m_pluginReturnsNonretainedLayer to true.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        (WebKit::NetscapePlugin::setPluginReturnsNonretainedLayer):
        Add setter.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformPostInitialize):
        If m_pluginReturnsNonretainedLayer is false, adopt the layer.

2011-06-02  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed WinCairo build correction.

        * UIProcess/win/WebView.cpp: Don't include CG file header
        when building without CoreGraphics support.

2011-06-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement popup menus in Webkit2
        https://bugs.webkit.org/show_bug.cgi?id=61854

        * GNUmakefile.am: Add new files to compilation.
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createPopupMenuProxy): Create a new
        WebPopupMenuProxy.
        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp: Added.
        (WebKit::WebPopupMenuProxyGtk::WebPopupMenuProxyGtk):
        (WebKit::WebPopupMenuProxyGtk::~WebPopupMenuProxyGtk):
        (WebKit::WebPopupMenuProxyGtk::showPopupMenu):
        (WebKit::WebPopupMenuProxyGtk::hidePopupMenu):
        (WebKit::WebPopupMenuProxyGtk::shutdownRunLoop):
        (WebKit::WebPopupMenuProxyGtk::menuItemActivated):
        (WebKit::WebPopupMenuProxyGtk::menuUnmapped):
        * UIProcess/gtk/WebPopupMenuProxyGtk.h: Added.
        (WebKit::WebPopupMenuProxyGtk::create):
        (WebKit::WebPopupMenuProxyGtk::setActiveItem):

2011-06-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Non-users need access to the mds caches for SSL support.
        <rdar://problem/9471799>

        * WebProcess/com.apple.WebProcess.sb:

2011-06-01  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        Flash of old video frame at the end of full screen transition
        https://bugs.webkit.org/show_bug.cgi?id=61752

        Add a new method and message, DisposeOfLayerClient, which will invalidate and release
        the WKRemoteLayerClient used during the full-screen animation.  This ensures that 
        the root layer used for the full-screen animation will be in a clean state at the start
        of the next transition.

        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::disposeOfLayerClient): Added.
        * UIProcess/WebFullScreenManagerProxy.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController exitCompositedModeRepaintCompleted]): Call disposeOfLayerClient.
        * WebProcess/FullScreen/WebFullScreenManager.h:
        (WebKit::WebFullScreenManager::disposeOfLayerClient): Added.
        * WebProcess/FullScreen/WebFullScreenManager.messages.in: Added DisposeOfLayerClient.
        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.h:
        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
        (WebKit::WebFullScreenManagerMac::disposeOfLayerClient): Added, invalidates and clears m_rootLayerClient.

2011-06-01  Adam Roben  <aroben@apple.com>

        Build fix after r87831

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::enterAcceleratedCompositingMode):
        (WebKit::WebView::exitAcceleratedCompositingMode):
        Added some HAVE(WKQCA) guards.

2011-06-01  Adam Roben  <aroben@apple.com>

        Delete a bunch of dead code in DrawingAreaImpl

        LayerTreeHost::participatesInDisplay always returns false now, which means a bunch of code
        in DrawingAreaImpl no longer runs.

        Cleanup after fixing <http://webkit.org/b/58054>
        <rdar://problem/9249839> REGRESSION (WebKit2): Accelerated CSS animations have a lower
        framerate than in WebKit1

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::forceRepaint):
        (WebKit::DrawingAreaImpl::layerHostDidFlushLayers):
        (WebKit::DrawingAreaImpl::sendDidUpdateBackingStoreState):
        (WebKit::DrawingAreaImpl::didUpdate):
        (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
        (WebKit::DrawingAreaImpl::scheduleDisplay):
        (WebKit::DrawingAreaImpl::displayTimerFired):
        (WebKit::DrawingAreaImpl::display):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/LayerTreeHost.h:
        Reverted r82959.

2011-06-01  Adam Roben  <aroben@apple.com>

        Render accelerated content into a web process-owned child HWND

        This allows us to use WKCACFView's far more efficient kWKCACFViewDrawingDestinationWindow
        mode, which gives us asynchronous rendering on a background thread and doesn't require us to
        read bits off the GPU back into system memory.

        A new class, WKCACFViewWindow, represents the child HWND. The child HWND is placed at the
        bottom of the z-order so it won't obscure any other child HWNDs (i.e., windowed plugins).
        The child HWND is made transparent to mouse events so that WKView will continue to receive
        mouse events even though it is obscured by the child HWND.

        There is now a bunch of dead code in DrawingAreaImpl to handle our old rendering model. I'll
        remove that in a future patch.

        Fixes <http://webkit.org/b/58054> <rdar://problem/9249839> REGRESSION (WebKit2): Accelerated
        CSS animations have a lower framerate than in WebKit1

        Reviewed by Anders Carlsson.

        * Shared/LayerTreeContext.h: Added HWND member on Windows.

        * Shared/win/CoalescedWindowGeometriesUpdater.cpp:
        (WebKit::CoalescedWindowGeometriesUpdater::updateGeometries):
        * Shared/win/CoalescedWindowGeometriesUpdater.h:
        Added new BringToTopOrNot argument. Allows the caller to specify that all windows being
        updated should also be brought to the top of the z-order.

        * Shared/win/LayerTreeContextWin.cpp:
        (WebKit::LayerTreeContext::LayerTreeContext):
        (WebKit::LayerTreeContext::~LayerTreeContext):
        (WebKit::LayerTreeContext::encode):
        (WebKit::LayerTreeContext::decode):
        (WebKit::LayerTreeContext::isEmpty):
        (WebKit::operator==):
        Implemented based on new window member.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView): Initialize new member.
        (WebKit::WebView::onSizeEvent): Resize the layer host window to cover our entire view, if we
        have one.
        (WebKit::WebView::enterAcceleratedCompositingMode): Store, position, and show the layer host
        window.
        (WebKit::WebView::exitAcceleratedCompositingMode): Destroy the layer host window.
        (WebKit::WebView::updateChildWindowGeometries): Updated for change to
        CoalescedWindowGeometriesUpdater.

        * UIProcess/win/WebView.h: Added m_layerHostWindow member.

        * WebProcess/WebPage/LayerTreeHost.h: Added scheduleChildWindowGeometryUpdate.

        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.cpp:
        (WebKit::LayerTreeHostCAWin::supportsAcceleratedCompositing): Simplified by using
        WKCACFViewWindow.

        (WebKit::LayerTreeHostCAWin::LayerTreeHostCAWin): Removed initialization of a removed
        member.
        (WebKit::LayerTreeHostCAWin::platformInitialize): Changed to use WKCACFViewWindow,
        kWKCACFViewDrawingDestinationWindow, and to initialize the LayerTreeContext.
        (WebKit::LayerTreeHostCAWin::invalidate): Leak our window and tell it to clean up after
        itself. The UI process will take care of destroying the window when it finishes switching
        out of accelerated compositing mode. Removed a WKCACFViewUpdate call that is now handled by
        WKCACFViewWindow.
        (WebKit::LayerTreeHostCAWin::scheduleChildWindowGeometryUpdate): Added. Calls through to
        m_geometriesUpdater.
        (WebKit::LayerTreeHostCAWin::sizeDidChange): Updated to use WKCACFViewWindow.
        (WebKit::LayerTreeHostCAWin::contextDidChange): Update child window geometries now to keep
        them (almost) in sync with the accelerated content. <http://webkit.org/b/61867> covers the
        slight asynchrony that still exists.
        (WebKit::LayerTreeHostCAWin::setRootCompositingLayer): Don't flush any changes when we don't
        have a root layer. This prevents a flash of white when switching out of compositing mode.

        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.h: Added m_window and m_geometriesUpdater.
        Removed code related to the old, synchronous display model.

        * WebProcess/WebPage/ca/win/WKCACFViewWindow.cpp: Added.
        (WebKit::WKCACFViewWindow::WKCACFViewWindow): Initialize members and create our window.
        (WebKit::WKCACFViewWindow::~WKCACFViewWindow): Destroy our window if needed.
        (WebKit::WKCACFViewWindow::onCustomDestroy): Just call ::DestroyWindow.
        (WebKit::WKCACFViewWindow::onDestroy): Tell our view not to render into our window anymore.
        (WebKit::WKCACFViewWindow::onEraseBackground): Tell Windows not to erase us.
        (WebKit::WKCACFViewWindow::onNCDestroy): Clear out m_window since it's now pointing to a
        destroy window, and destroy ourselves if requested.
        (WebKit::WKCACFViewWindow::onPaint): Tell the view to draw, then clear our invalid region.
        (WebKit::WKCACFViewWindow::onPrintClient): Tell our view to draw into the given HDC.
        (WebKit::WKCACFViewWindow::registerClass): Register our class (duh).
        (WebKit::WKCACFViewWindow::staticWndProc): Get the WKCACFViewWindow pointer, or store the
        pointer if needed, then call through to wndProc.
        (WebKit::WKCACFViewWindow::wndProc): Call out to the appropriate handler function.

        * WebProcess/WebPage/ca/win/WKCACFViewWindow.h: Added.
        (WebKit::WKCACFViewWindow::setDeletesSelfWhenWindowDestroyed): Simple setter.
        (WebKit::WKCACFViewWindow::window): Simple getter.

        * WebProcess/WebPage/win/DrawingAreaImplWin.cpp:
        (WebKit::DrawingAreaImpl::scheduleChildWindowGeometryUpdate): Let the LayerTreeHost handle
        the geometry update, if we have one.

        * win/WebKit2.vcproj: Added WKCACFViewWindow files.

2011-06-01  Adam Roben  <aroben@apple.com>

        Route plugin window geometry updates through the DrawingArea

        This will allow the geometry updates to be handled by the LayerTreeHost in compositing mode
        in the future.

        More rep work for <http://webkit.org/b/58054> <rdar://problem/9249839> REGRESSION (WebKit2):
        Accelerated CSS animations have a lower framerate than in WebKit1

        Reviewed by Anders Carlsson.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::scheduleWindowedPluginGeometryUpdate): Tell the DrawingArea, not the
        WebPage, about the geometry update.

        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/win/DrawingAreaImplWin.cpp: Added.
        (WebKit::DrawingAreaImpl::scheduleChildWindowGeometryUpdate):
        Moved code here...

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/win/WebPageWin.cpp:
        ...from here.

        * win/WebKit2.vcproj: Added DrawingAreaImplWin.cpp.

2011-06-01  Adam Roben  <aroben@apple.com>

        Move WebView's window geometry updating code to a new class

        This will allow us to share this code with LayerTreeHostCAWin.

        Prep work for <http://webkit.org/b/58054> <rdar://problem/9249839> REGRESSION (WebKit2):
        Accelerated CSS animations have a lower framerate than in WebKit1

        Reviewed by Anders Carlsson.

        * Shared/win/CoalescedWindowGeometriesUpdater.cpp: Added.
        (WebKit::CoalescedWindowGeometriesUpdater::CoalescedWindowGeometriesUpdater):
        (WebKit::CoalescedWindowGeometriesUpdater::~CoalescedWindowGeometriesUpdater):
        Simple constructor/destructor.

        (WebKit::CoalescedWindowGeometriesUpdater::addPendingUpdate):
        (WebKit::setWindowRegion):
        (WebKit::CoalescedWindowGeometriesUpdater::updateGeometries):
        * Shared/win/CoalescedWindowGeometriesUpdater.h: Added.
        Moved code here...

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::scheduleChildWindowGeometryUpdate):
        (WebKit::WebView::updateChildWindowGeometries):
        * UIProcess/win/WebView.h:
        ...from here.

        * win/WebKit2.vcproj: Added new files.

2011-06-01  Adam Roben  <aroben@apple.com>

        Windows build fix after r87755

        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.cpp:
        (WebKit::LayerTreeHostCAWin::setLayerFlushSchedulingEnabled): Fixed
        typo.

2011-06-01  Oleg Romashin  <romaxa@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        platformGeometryDidChange function definition was changed everywhere except Qt.
        This is fix for Qt WK2 plugins compilation
        https://bugs.webkit.org/show_bug.cgi?id=61832

        * PluginProcess/qt/PluginControllerProxyQt.cpp:
        (WebKit::PluginControllerProxy::platformGeometryDidChange):

2011-05-31  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Flash of black at the end of full screen transition at apple.com product videos
        https://bugs.webkit.org/show_bug.cgi?id=61756

        The @"WebKitLayerHostChanged" notification is causing the QTMovie to tear down its layer
        (which is good) at the wrong time (which is bad).  Send this notification only after 
        the dragImage snapshot is taken.  This exposed another problem, that the snapshot has
        a white background.  Set the default background color and transparency for the view (making
        sure to reset them afterwards) to transparent.

        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
        (WebKit::WebFullScreenManagerMac::setRootFullScreenLayer):

2011-03-30  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Adam Roben.

        [GTK] [WebKit2] Implement a basic WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=57068

        Added InjectedBundle support for GTK+.

        * WebProcess/InjectedBundle/InjectedBundle.h: Added typedef for GTK+.
        * WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp: Added implementation.
        (WebKit::InjectedBundle::load): 
        (WebKit::InjectedBundle::activateMacFontAscentHack):
        * WebProcess/WebPage/gtk/WebPageGtk.cpp: Remove unnecessary method definition.

2011-05-31  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/9523192> REGRESSION (5.0.5-ToT, WebKit2): Flash to white when navigating between pages on wsj.com, other sites (when navigating away from composited page)
        https://bugs.webkit.org/show_bug.cgi?id=61808

        WebKit1 has a mechanism to prevent the stale bits from the outgoing page from being erased
        until the incoming page has layout. Adapt this in WebKit2 to prevent the composited layer tree
        of the outgoing page from being torn down or updated until the incoming page has layout.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidFirstLayout): Unfreeze the layer tree state.
        (WebKit::WebFrameLoaderClient::frameLoadCompleted): Ditto.
        (WebKit::WebFrameLoaderClient::provisionalLoadStarted): Freeze the layer tree state.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::setLayerTreeStateIsFrozen): Added.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl): Initialize new member variables.
        (WebKit::DrawingAreaImpl::setLayerTreeStateIsFrozen): Added. When freezing, sets the flag and
        disables layer flush scheduling and exiting accelerated compositing mode. When unfreezing,
        clears the flag and exits compositing mode if needed.
        (WebKit::DrawingAreaImpl::setRootCompositingLayer): Reset m_wantsToExitAcceleratedCompositingMode.
        (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode): Ditto.
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode): Ditto.
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingModeSoon): If the layer tree state is frozen,
        bail out but set m_wantsToExitAcceleratedCompositingMode.

        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/LayerTreeHost.h:

        * WebProcess/WebPage/ca/LayerTreeHostCA.cpp:
        (WebKit::LayerTreeHostCA::LayerTreeHostCA): Initialize m_layerFlushSchedulingEnabled.

        * WebProcess/WebPage/ca/LayerTreeHostCA.h:
        * WebProcess/WebPage/ca/mac/LayerTreeHostCAMac.h:

        * WebProcess/WebPage/ca/mac/LayerTreeHostCAMac.mm:
        (WebKit::LayerTreeHostCAMac::scheduleLayerFlush): Bail out if scheduling is not enabled.
        (WebKit::LayerTreeHostCAMac::setLayerFlushSchedulingEnabled): Added. Sets the flag. If disabling
        flushing, cancels the pending flush.
        (WebKit::LayerTreeHostCAMac::flushPendingLayerChangesRunLoopObserverCallback): Added an assertion.

        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.cpp:
        (WebKit::LayerTreeHostCAWin::scheduleLayerFlush): Bail out if scheduling is not enabled.
        (WebKit::LayerTreeHostCAWin::setLayerFlushSchedulingEnabled): Added. Sets the flag. If disabling
        flushing, cancels the pending flush.

        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.h:

2011-05-31  ChangeLog  <james.cooley@nokia.com>

        Reviewed by Andreas Kling.

        [Qt][WK2] Qt port needs test content for QWKHistory
        https://bugs.webkit.org/show_bug.cgi?id=57850

        Created data-driven QTestLib tests for existing QWKHistory APIs.

        This walks through loading four simple pages, navigating
        backwards and forwards.

        We check the results at each action by creating expected forward/back
        lists and comparing those lists in count and membership to those kept by
        WebKit and retrieved via the QWKHistory APIs.

        * UIProcess/API/qt/tests/html/a.htm: Added.
        * UIProcess/API/qt/tests/html/b.htm: Added.
        * UIProcess/API/qt/tests/html/c.htm: Added.
        * UIProcess/API/qt/tests/html/d.htm: Added.
        Four added simple pages

        * UIProcess/API/qt/tests/qwkhistory: Added.
        * UIProcess/API/qt/tests/qwkhistory/qwkhistory.pro: Added.
        Created qwkhistory folder and pro

        * UIProcess/API/qt/tests/qwkhistory/tst_qwkhistory.cpp: Added.
        (TestHistoryItem::title):
        (TestHistoryItem::url):
        (TestHistoryItem::TestHistoryItem):
        Utility class to hold expected url,title for test

        (tst_QWKHistory::initTestCase):
        (tst_QWKHistory::historyFBTest_data):
        (tst_QWKHistory::historyFBTest):
        init, data, and data-driven test case

        * UIProcess/API/qt/tests/tests.pro:
        Included qwkhistory in tests.pro

2011-05-30  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Simon Hausmann.

        WebKit2: Enable serializing of data types needed for cross-process accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=61694

        Create an ArgumentCoder for WebCore::Animation.

        * Scripts/webkit2/messages.py:
        * Shared/WebCoreArgumentCoders.h:

2011-05-30  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Simon Hausmann.

        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 WebCore::TimingFunction. This serializer can create the appropriate
        TimingFunction subclass based on the type of timing function.

        * Scripts/webkit2/messages.py:
        * Shared/WebCoreArgumentCoders.h:

2011-05-30  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Simon Hausmann.

        WebKit2: Enable serializing of data types needed for cross-process accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=61694

        Add WebCore::Length and WebCore::TransformationMatrix to the types that use SimpleArgumentCoder.

        * Scripts/webkit2/messages.py:
        * Shared/WebCoreArgumentCoders.h:

2011-05-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Simon Fraser.

        Remove incorrect asserts from PluginProcessConnection
        https://bugs.webkit.org/show_bug.cgi?id=61731

        There might be pending incoming messages from a PluginProxy even though we've
        destroyed the plug-in and removed it from the m_plugins map, so remove the incorrect assertions.

        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::didReceiveMessage):
        (WebKit::PluginProcessConnection::didReceiveSyncMessage):

2011-05-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Initial tooltips implementation for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=59318

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::toolTipChanged): Update view's tooltip
        text.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseQueryTooltip): Implement GtkWidget::query-tooltip.
        (webkit_web_view_base_class_init): Override GtkWidget::query-tooltip.
        (webkitWebViewBaseSetTooltipText): Update tooltip text and trigger
        GtkWidget::query-tooltip.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:

2011-05-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Remove some unneeded header includes
        https://bugs.webkit.org/show_bug.cgi?id=60536

        * Platform/CoreIPC/Connection.cpp: Remove WebProcess.h.
        * Platform/CoreIPC/unix/ConnectionUnix.cpp: Remove
        ProcessLauncher.h and WebProcessProxy.h. Add <wtf/OwnArrayPtr.h>.
        * WebProcess/Plugins/Netscape/NPJSObject.cpp: Remove PluginView.h.

2011-05-29  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Race condition in full screen controller, which leads to problem when web process crashes
        https://bugs.webkit.org/show_bug.cgi?id=61707

        Second try at this. First try could lead to a WKView leak.

        * UIProcess/mac/WKFullScreenWindowController.h: Added _isExitingAcceleratedCompositingMode.
        Needed to track whether we have retained so we don't leak if the page goes away before
        we get the callback.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController exitAcceleratedCompositingMode]): Added code to set
        the new variable to YES.
        (-[WKFullScreenWindowController exitCompositedModeRepaintCompleted]): Added code to
        deal with the new boolean and to release.
        (exitCompositedModeRepaintCompleted): Removed the release that was here.
        (-[WKFullScreenWindowController close]): Added a call to exitCompositedModeRepaintCompleted
        here. We're as complete as we'll ever be when we're closed; we can't get the callback
        after that point.

2011-05-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        REGRESSION (r87637): nytimes.com freezes after going back to it
        <rdar://problem/9521928>

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::forceRepaint):
        Add call to setShouldNotifyAfterNextScheduledLayerFlush(false) to prevent a
        redundant call to layerHostDidFlushLayers which would cause the layer state
        to get out of sync with the UIProcess.

2011-05-29  Jer Noble  <jer.noble@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION (r86924): webkitRequestFullScreen does not work properly (black screen, can’t interact)
        https://bugs.webkit.org/show_bug.cgi?id=61710

        When taking the documentElement full screen, we don't create a RenderFullScreen 
        object and thus never enter accelerated compositing mode for the animation. Tell
        the WKFullScreenWindowController to enter accelerated compositing mode anyway 
        (with an empty layer context) so as to fulfill its expectations and cause the 
        full screen animation to complete.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]): Added a 
            comment explaining when we expect the animation to complete.
        (-[WKFullScreenWindowController enterAcceleratedCompositingMode:WebKit::]):
            Remove an ASSERT which is no longer valid.
        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
        (WebKit::WebFullScreenManagerMac::beginEnterFullScreenAnimation): Tell the UIProcess
            to enter then exit full-screen mode.
        (WebKit::WebFullScreenManagerMac::beginExitFullScreenAnimation): Ditto.

2011-05-29  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Race condition in full screen controller, which leads to problem when web process crashes
        https://bugs.webkit.org/show_bug.cgi?id=61707

        Saw this while debugging a crash. We don't have a way to make regression tests for this
        kind of issue at this time.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController exitAcceleratedCompositingMode]): Retain the controller
        here since we are keeping a pointer to it.
        (exitCompositedModeRepaintCompleted): Release the controller here.

2011-05-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (87637): Entering WebKit Full Screen mode causes an assertion in DrawingAreaImpl::layerHostDidFlushLayers
        https://bugs.webkit.org/show_bug.cgi?id=61706
        <rdar://problem/9521970>

        If we've already let the UI process know that we're in compositing mode, we just need to force a repaint.

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

2011-05-29  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=61700
        Need WebKit2 API to get the size of the render tree
        -and corresponding-
        <rdar://problem/9512733>

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetRenderTreeSize):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::renderTreeSize):
        (WebKit::WebPageProxy::setRenderTreeSize):
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::setRenderTreeSize):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2011-05-29  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson and Simon Fraser.

        <rdar://problem/9519453>
        When calling ForceRepaint on a page with accelerated compositing, we can get
        a race condition where the UI process paints the old content, resulting in showing
        the previous page. That happens because forceRepaint's callback waits for the next
        repaint to happen, but nothing notifies UI process that the page is in accelerated
        compositing mode.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::forceRepaint): Call layerHostDidFlushLayers instead of
        just calling forceRepaint on the layer tree host.

2011-05-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein, Maciej Stachowiak.

        Denying access to your keychain on login crashes WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=61695
        <rdar://problem/9520570>
        
        Fix two sources of crashes if you hit the Deny button when WebKit2 is
        doing HTTP authentication.
        
        First, SecKeychainItemRequestData::attributeList() failed to initialize the
        length and data members of SecKeychainAttributes in the list if there was no data.
        This caused invalid memory reads later.
        
        Second, returning a non-zero error from the SecKeychainItemCopyContent shim method
        would cause a later crash in a system framework, which is not set up to handle
        errors. Instead, we always return noErr, and allow the authentication to fail.
        
        Finally, paranoically initialize the SecKeychainItemContext in two places
        to avoid uninitialized data members, and initialize length and outData
        to 0 in secKeychainItemCopyContent() in case SecKeychainItemCopyContent()
        fails to set them on error.
        
        * Shared/mac/SecKeychainItemRequestData.cpp:
        (WebKit::SecKeychainItemRequestData::attributeList):
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::secKeychainItemCopyContent): 
        * WebProcess/mac/KeychainItemShimMethods.mm:
        (WebKit::webSecKeychainItemCopyContent):
        (WebKit::webSecKeychainItemCreateFromContent):

2011-05-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        REGRESSION (r86578): Flash content missing from mercurynews.com
        https://bugs.webkit.org/show_bug.cgi?id=61691
        <rdar://problem/9519893>

        If the plug-in doesn't have access to the toplevel URL, make sure to
        return *something* to the plug-in.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::tryToShortCircuitInvoke):

2011-05-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Audit all uses of KURL::prettyURL
        https://bugs.webkit.org/show_bug.cgi?id=61201

        Update callers of prettyURL to just call string.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin):
        * WebProcess/WebCoreSupport/qt/WebErrorsQt.cpp:
        (WebKit::cancelledError):
        (WebKit::blockedError):

2011-05-27  Stephanie Lewis  <slewis@apple.com>

        Unreviewed.

        Fix a typo in the order_file flag.

        * Configurations/Base.xcconfig:

2011-05-27  Stephanie Lewis  <slewis@apple.com>

        Rubber Stamped by Adam Roben.

        Add Order File.  Use -order_file flag since it can order more of the binary.

        * Configurations/Base.xcconfig:
        * mac/WebKit2.order: Added.

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

        Reviewed by Martin Robinson.

        [CAIRO] Don't copy the surface before drawing it into the context in ShareableBitmap::paint()
        https://bugs.webkit.org/show_bug.cgi?id=60757

        cairo_image_surface_create_for_data() is already a shallow copy of
        the image, so we don't need to copy it again.

        * Shared/cairo/ShareableBitmapCairo.cpp:
        (WebKit::ShareableBitmap::paint):

2011-05-26  Jeff Miller  <jeffm@apple.com>

        Reviewed by Alexey Proskuryakov.

        Add a key handling logging channel for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=61588
        
        Added a new LogKeyHandling channel, and logged some key events in WebPageProxy.
        I also fixed a misspelling of coalescing in a comment in WebPageProxy.cpp.

        * Platform/Logging.cpp:
        (WebKit::initializeLogChannelsIfNecessary): Initialize LogKeyHandling channel.
        * Platform/Logging.h: Added LogKeyHandling channel.

        * UIProcess/WebPageProxy.cpp: Fixed misspelling of coalescing in a comment.
        (WebKit::webKeyboardEventTypeString): Added to support logging.
        (WebKit::WebPageProxy::handleKeyboardEvent): Log the keyboard event.
        (WebKit::WebPageProxy::didReceiveEvent): Log the keyboard event.

2011-05-26  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Safari's AXFocusedUIElement attribute returns WebArea object with AXSelectedTextMarkerRange of nil
        https://bugs.webkit.org/show_bug.cgi?id=61492

        The method for determining which WebPage is actually focused and foreground was faulty. More
        extensive checks are required to check which WebPage should be returned as the focusable one.

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

2011-05-26  Jon Lee  <jonlee@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (5.0.5-Jazz): Transition to full screen video animates in wrong location when scrolled (61559)
        https://bugs.webkit.org/show_bug.cgi?id=61559
        <rdar://problem/9496054>

        The CALayer that gets animated has a position that is offset by the scroll position of the web view. To
        fix this, we set the destination location based on the rect of the full screen, and add a position
        animation which keeps the position of the layer centered. This prevents glitches if others
        are trying to change the layer position while the animation is running.

        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.h: Refactor the calculation of the CALayer windowed
        position into a private helper function, as well as the animation setup.
        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
        (WebKit::WebFullScreenManagerMac::beginEnterFullScreenAnimation):
        (WebKit::WebFullScreenManagerMac::beginExitFullScreenAnimation):
        (WebKit::WebFullScreenManagerMac::animateFullScreen): Sets up the zoom animation, and the position offset
        animation.
        (WebKit::WebFullScreenManagerMac::windowedCGTransform): Calculates the placement of the windowed layer
        in screen coordinates.

2011-05-26  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Andreas Kling.

        WebKitTestRunner needs layoutTestController.setAuthorAndUserStylesEnabled
        https://bugs.webkit.org/show_bug.cgi?id=42676

        Implemented layoutTestController.setAuthorAndUserStylesEnabled for WebKitTestRunner.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetAuthorAndUserStylesEnabled):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setAuthorAndUserStylesEnabled):
        * WebProcess/InjectedBundle/InjectedBundle.h:

2011-05-25  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Status bar, toolbar, and menu bar checks should be in the injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=61474
        <rdar://problem/9468337>

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::statusBarIsVisible): Call the function on the client
            if it exists.
        (WebKit::InjectedBundlePageUIClient::menuBarIsVisible): Ditto.
        (WebKit::InjectedBundlePageUIClient::toolbarsAreVisible): Ditto.
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::statusbarVisible): Add a possible short-circuit in the injected bundle.
        (WebKit::WebChromeClient::menubarVisible): Ditto.
        (WebKit::WebChromeClient::toolbarsVisible): Ditto.

2011-05-26  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WebKit2 bundle missing localization subdirectories
        https://bugs.webkit.org/show_bug.cgi?id=61512
        
        Better fix for this. We just need to specify CFBundleAllowMixedLocalizations.

        * win/WebKit2WebProcess.resources/English.lproj: Removed.
        * win/WebKit2WebProcess.resources/Info.plist:
        * win/WebKit2WebProcess.resources/da.lproj: Removed.
        * win/WebKit2WebProcess.resources/de.lproj: Removed.
        * win/WebKit2WebProcess.resources/es.lproj: Removed.
        * win/WebKit2WebProcess.resources/fi.lproj: Removed.
        * win/WebKit2WebProcess.resources/fr.lproj: Removed.
        * win/WebKit2WebProcess.resources/it.lproj: Removed.
        * win/WebKit2WebProcess.resources/ja.lproj: Removed.
        * win/WebKit2WebProcess.resources/ko.lproj: Removed.
        * win/WebKit2WebProcess.resources/nb.lproj: Removed.
        * win/WebKit2WebProcess.resources/nl.lproj: Removed.
        * win/WebKit2WebProcess.resources/pl.lproj: Removed.
        * win/WebKit2WebProcess.resources/pt.lproj: Removed.
        * win/WebKit2WebProcess.resources/pt_PT.lproj: Removed.
        * win/WebKit2WebProcess.resources/ru.lproj: Removed.
        * win/WebKit2WebProcess.resources/sv.lproj: Removed.
        * win/WebKit2WebProcess.resources/zh_CN.lproj: Removed.
        * win/WebKit2WebProcess.resources/zh_TW.lproj: Removed.

2011-05-26  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WebKit2 bundle missing localization subdirectories
        https://bugs.webkit.org/show_bug.cgi?id=61512
        <rdar://problem/9498607>
        
        These lproj directories are intentionally left empty.
        Their presence indicates that this exe is localized to this
        set of languages.

        * win/WebKit2WebProcess.resources/English.lproj: Added.
        * win/WebKit2WebProcess.resources/da.lproj: Added.
        * win/WebKit2WebProcess.resources/de.lproj: Added.
        * win/WebKit2WebProcess.resources/es.lproj: Added.
        * win/WebKit2WebProcess.resources/fi.lproj: Added.
        * win/WebKit2WebProcess.resources/fr.lproj: Added.
        * win/WebKit2WebProcess.resources/it.lproj: Added.
        * win/WebKit2WebProcess.resources/ja.lproj: Added.
        * win/WebKit2WebProcess.resources/ko.lproj: Added.
        * win/WebKit2WebProcess.resources/nb.lproj: Added.
        * win/WebKit2WebProcess.resources/nl.lproj: Added.
        * win/WebKit2WebProcess.resources/pl.lproj: Added.
        * win/WebKit2WebProcess.resources/pt.lproj: Added.
        * win/WebKit2WebProcess.resources/pt_PT.lproj: Added.
        * win/WebKit2WebProcess.resources/ru.lproj: Added.
        * win/WebKit2WebProcess.resources/sv.lproj: Added.
        * win/WebKit2WebProcess.resources/zh_CN.lproj: Added.
        * win/WebKit2WebProcess.resources/zh_TW.lproj: Added.
        * win/WebKit2WebProcessPostBuild.cmd: Copy entire resources directory, exclude .svn directories.
        * win/xcopy.excludes: Added. Excludes .svn directories.

2011-05-25  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Simon Hausmann.

        WebKitTestRunner needs layoutTestController.setPrivateBrowsingEnabled
        https://bugs.webkit.org/show_bug.cgi?id=42697

        Implemented layoutTestController.setPrivateBrowsingEnabled for WebKitTestRunner.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetPrivateBrowsingEnabled):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setPrivateBrowsingEnabled):
        * WebProcess/InjectedBundle/InjectedBundle.h:

2011-05-25  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/9504058> Need some way to query user gesture state from injected bundle

        Add WKBundleIsProcessingUserGesture.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleIsPageBoxVisible):
        (WKBundleIsProcessingUserGesture):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::isProcessingUserGesture):
        * WebProcess/InjectedBundle/InjectedBundle.h:

2011-05-24  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Video fails to play on Vimeo
        https://bugs.webkit.org/show_bug.cgi?id=61403

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Added support for wkAVAssetResolvedURL and
            wkQTMovieResolvedURL.

2011-05-25  Jon Honeycutt  <jhoneycutt@apple.com>

        REGRESSION (WebKit2): Crash in Flash on USA Today photo gallery
        https://bugs.webkit.org/show_bug.cgi?id=61428
        <rdar://problem/9457006>

        Reviewed by Adam Roben.

        The crash occurs when Flash posts a message to a window that it
        creates, and in processing the message, it calls NPN_Evaluate to
        evaluate JavaScript that removes the plug-in from the page. Flash then
        crashes when we return to Flash code.

        * Platform/WorkItem.h:
        (DerefWorkItem::DerefWorkItem):
        Initialize m_ptr.
        (DerefWorkItem::execute):
        Deref the object.
        (WorkItem::createDeref):
        Create and return a DerefWorkItem.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::unprotectPluginFromDestruction):
        If the PluginView has only one reference left, deref it asynchronously.

2011-05-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/9496795> REGRESSION (r86851): Plug-ins disappear when scrolled with non-1 page scale
        https://bugs.webkit.org/show_bug.cgi?id=61448

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::clipRectInWindowCoordinates): Correct for page scale
        after intersecting the two rectangles.

2011-05-24  Timothy Hatcher  <timothy@apple.com>

        Make the Web Inspector bring the right window to the front when docked.

        rdar://problem/9464685
        https://webkit.org/b/61420

        Reviewed by Brian Weinstein.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformBringToFront): Order front the parent window of the Inspector's WKView.
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformBringToFront): Ditto.

2011-05-24  Keishi Hattori  <keishi@webkit.org>

        Reviewed by Kent Tamura.

        Disable textfield implementation of <input type=color>. Add INPUT_COLOR feature flag. Add input color sanitizer.
        https://bugs.webkit.org/show_bug.cgi?id=61273

        * Configurations/FeatureDefines.xcconfig: Added INPUT_COLOR feature flag.

2011-05-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        Update the WebProcess sandbox exceptions to silence warnings for a file that is accessed uselessly
        https://bugs.webkit.org/show_bug.cgi?id=61349
        <rdar://problem/9476255>

        * WebProcess/com.apple.WebProcess.sb:

2011-05-24  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit build.

        Explicitly use uint32_t when encoding / decoding a type that is a typedef of OSType,
        as this is declared as different underlying types in 32- and 64-bit (unsigned long
        vs unsigned int).
        
        * Shared/mac/KeychainAttribute.cpp:
        (CoreIPC::encode):
        (CoreIPC::decode):

2011-05-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Enable coalesced wheel events
        <rdar://problem/9444786>

        * UIProcess/WebPageProxy.cpp:
        Flip the switch for coalescing wheel events rather than dropping them.

2011-05-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Additional sandbox extension required for quarantine database
        <rdar://problem/9397494>
        https://bugs.webkit.org/show_bug.cgi?id=61405

        * WebProcess/com.apple.WebProcess.sb:
        Add read-data access for ~/Library/Preferences.

2011-05-24  Michael Saboff  <msaboff@apple.com>

        Reviewed by Geoffrey Garen.

        Improve handling in WebCore of low memory situations
        https://bugs.webkit.org/show_bug.cgi?id=61222

        Added call to enable memory pressure handling for Mac case.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/WebProcess.h:
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2011-05-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Part of <rdar://problem/9434311> and https://bugs.webkit.org/show_bug.cgi?id=61334
        Should shim a few SecKeychainItem* methods on SnowLeopard

        Initialize the KeychainItem shim on SnowLeopard:
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::initializeShim):

        On SnowLeopard, shim the 4 SecKeychainItem methods:
        * WebProcess/mac/WebProcessShim.h:
        * WebProcess/mac/WebProcessShim.mm:
        (WebKit::shimSecKeychainItemCopyContent):
        (WebKit::shimSecKeychainItemCreateFromContent):
        (WebKit::shimSecKeychainItemModifyContent):
        (WebKit::shimSecKeychainItemFreeContent):
        (WebKit::WebKitWebProcessKeychainItemShimInitialize):

        * WebProcess/mac/KeychainItemShimMethods.h: Added.
        * WebProcess/mac/KeychainItemShimMethods.mm: Added.
        Manage a set of shim-controlled AttributeList data:
        (WebKit::shimManagedAttributeLists):
        (WebKit::freeAttributeListContents):
        (WebKit::allocateAttributeListContents):

        Manage a set of shim-controlled KeychainItem data:
        (WebKit::shimManagedKeychainItemContents):
        (WebKit::allocateKeychainItemContentData):

        Free any shim-controlled AttributeList or KeychainItem data:
        (WebKit::webFreeAttributeListContentOnMainThread):
        (WebKit::webFreeAttributeListContent):
        (WebKit::webFreeKeychainItemContentOnMainThread):
        (WebKit::webFreeKeychainItemContent):

        Marshall these 3 KeychainItem methods to the UIProcess:
        (WebKit::webSecKeychainItemCopyContentOnMainThread):
        (WebKit::webSecKeychainItemCopyContent):
        (WebKit::webSecKeychainItemCreateFromContentOnMainThread):
        (WebKit::webSecKeychainItemCreateFromContent):
        (WebKit::webSecKeychainItemModifyContentOnMainThread):
        (WebKit::webSecKeychainItemModifyContent):
        (WebKit::initializeKeychainItemShim):

        Container for an AttributeList entry that knows how to encode/decode:
        * Shared/mac/KeychainAttribute.cpp: Added.
        (WebKit::KeychainAttribute::KeychainAttribute):
        (CoreIPC::encode):
        (CoreIPC::decode):
        * Shared/mac/KeychainAttribute.h: Added.

        Container for the relevant arguments to the shimmed methods, to send to the UIProcess:
        * Shared/mac/SecKeychainItemRequestData.cpp: Added.
        (WebKit::SecKeychainItemRequestData::SecKeychainItemRequestData):
        (WebKit::SecKeychainItemRequestData::initializeWithAttributeList):
        (WebKit::SecKeychainItemRequestData::~SecKeychainItemRequestData):
        (WebKit::SecKeychainItemRequestData::attributeList):
        (WebKit::SecKeychainItemRequestData::encode):
        (WebKit::SecKeychainItemRequestData::decode):
        * Shared/mac/SecKeychainItemRequestData.h: Added.
        (WebKit::SecKeychainItemRequestData::keychainItem):
        (WebKit::SecKeychainItemRequestData::itemClass):
        (WebKit::SecKeychainItemRequestData::length):
        (WebKit::SecKeychainItemRequestData::data):

        Container for the possible output from the shimmed methods, to send back to the WebProcess:
        * Shared/mac/SecKeychainItemResponseData.cpp: Added.
        (WebKit::SecKeychainItemResponseData::SecKeychainItemResponseData):
        (WebKit::SecKeychainItemResponseData::encode):
        (WebKit::SecKeychainItemResponseData::decode):
        * Shared/mac/SecKeychainItemResponseData.h: Added.
        (WebKit::SecKeychainItemResponseData::itemClass):
        (WebKit::SecKeychainItemResponseData::data):
        (WebKit::SecKeychainItemResponseData::resultCode):
        (WebKit::SecKeychainItemResponseData::attributes):
        (WebKit::SecKeychainItemResponseData::keychainItem):

        Actually implement the calls to the SecKeychainItem* methods in the UIProcess:
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::secKeychainItemCopyContent):
        (WebKit::WebProcessProxy::secKeychainItemCreateFromContent):
        (WebKit::WebProcessProxy::secKeychainItemModifyContent):

        * WebKit2.xcodeproj/project.pbxproj: Project file stuff
        * Configurations/Shim.xcconfig:

2011-05-24  Jay Civelli  <jcivelli@chromium.org>

        Rubberstamped by David Kilzer.

        Updated some files that I forgot in my previous MHTML CL.

       * Configurations/FeatureDefines.xcconfig:

2011-05-24  Sam Weinig  <sam@webkit.org>

        Clean up after Geoff and fix the WebKit2 build.

        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.h:

2011-05-24  Adam Roben  <aroben@apple.com>

        Invalidate JSNPObjects when they are finalized

        This will cause the underlying NPObject to be released at finalization time, rather than at
        destruction time (which is unpredictable and could occur after the plugin has been
        unloaded).

        Test: plugins/npobject-js-wrapper-destroyed-after-plugin-unload.html

        Fixes <http://webkit.org/b/61316> <rdar://problem/9489824> Crash in deallocateNPObject when
        reloading yahoo.com webarchive in WebKit2

        Reviewed by Oliver Hunt.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::~JSNPObject): Assert that we've already been invalidated, rather than
        trying to perform invalidation now (when the plugin might already be unloaded).

        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::getOrCreateJSObject):
        (WebKit::NPRuntimeObjectMap::invalidate):
        Updated for m_jsNPObjects type change.

        (WebKit::NPRuntimeObjectMap::finalize): Added. Invalidates the JSNPObject and removes it
        from the map.

        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.h: Now inherits from WeakHandleOwner.
        Changed m_jsNPObjects from a WeakGCMap to a HashMap of JSC::Weak objects so that we will be
        notified when the JSNPObjects are finalized.

2011-05-24  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Adam Roben.

        WebKitTestRunner needs layoutTestController.setJavaScriptCanAccessClipboard
        https://bugs.webkit.org/show_bug.cgi?id=42669

        Fixes a typo issue for patch 94265.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetJavaScriptCanAccessClipboard):

2011-05-24  Sam Weinig  <sam@webkit.org>

        Reviewed by John Sullivan.

        WebKit tells client that the page has become unresponsive while the beforeUnloadConfirm dialog is up
        https://bugs.webkit.org/show_bug.cgi?id=61372

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runBeforeUnloadConfirmPanel):
        Stop the unresponsiveness timer like we do for other client functions that spin a
        runloop.

2011-05-24  Andreas Kling  <kling@webkit.org>

        Reviewed by Simon Hausmann.

        [WK2] Change TiledDrawingArea to use ShareableBitmap instead of UpdateChunk.
        https://bugs.webkit.org/show_bug.cgi?id=61296

        Pass UpdateInfo containing ShareableBitmaps instead of UpdateChunk for tile updates.
        Only the bounds rect and bitmap handle in the UpdateInfo are used since none of the
        other parameters are needed for TiledDrawingArea.

        * Shared/ShareableBitmap.h:
        * Shared/qt/ShareableBitmapQt.cpp:
        (WebKit::ShareableBitmap::createQImage):
        (WebKit::ShareableBitmap::createGraphicsContext):
        (WebKit::ShareableBitmap::paint):
        * Shared/qt/UpdateChunk.cpp: Removed.
        * Shared/qt/UpdateChunk.h: Removed.
        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::didReceiveMessage):
        (WebKit::TiledDrawingAreaProxy::waitUntilUpdatesComplete):
        * UIProcess/TiledDrawingAreaProxy.h:
        * UIProcess/TiledDrawingAreaTile.h:
        * UIProcess/qt/TiledDrawingAreaProxyQt.cpp:
        (WebKit::TiledDrawingAreaProxy::snapshotTaken):
        * UIProcess/qt/TiledDrawingAreaTileQt.cpp:
        (WebKit::TiledDrawingAreaTile::incorporateUpdate):
        * WebKit2.pro:
        * WebProcess/WebPage/TiledDrawingArea.cpp:
        (WebKit::TiledDrawingArea::updateTile):
        (WebKit::TiledDrawingArea::didReceiveMessage):
        * WebProcess/WebPage/TiledDrawingArea.h:
        * WebProcess/WebPage/qt/TiledDrawingAreaQt.cpp:
        (WebKit::TiledDrawingArea::paintIntoBitmap):

2011-05-24  Brady Eidson  <beidson@apple.com>

        Build fix after r87153

        * WebProcess/mac/SecItemShimMethods.mm: Don't compile this code on SnowLeopard.

2011-05-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Part of <rdar://problem/9434311> and https://bugs.webkit.org/show_bug.cgi?id=61334
        Should shim a few SecKeychainItem* methods on SnowLeopard

        In preparation for different WebProcess shims depending on platform, move the current
        shim to its own files.
        
        * WebKit2.xcodeproj/project.pbxproj:
        
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::initializeShim): For non-SnowLeopard platforms, call initializeSecItemShim().
        
        * WebProcess/mac/SecItemShimMethods.h: Added.
        * WebProcess/mac/SecItemShimMethods.mm: Added. Actual webSecItem* methods moved from WebProcessMac.mm.
        (WebKit::webSecItemCopyMatchingMainThread):
        (WebKit::webSecItemCopyMatching):
        (WebKit::webSecItemAddOnMainThread):
        (WebKit::webSecItemAdd):
        (WebKit::webSecItemUpdateOnMainThread):
        (WebKit::webSecItemUpdate):
        (WebKit::webSecItemDeleteOnMainThread):
        (WebKit::webSecItemDelete):
        (WebKit::initializeSecItemShim): Initialize the callbacks via WebKitWebProcessSecItemShimInitialize

        * WebProcess/mac/WebProcessShim.h:
        * WebProcess/mac/WebProcessShim.mm: Wrap all the actual code here in a !BUILDING_ON_SNOW_LEOPARD block
        (WebKit::shimSecItemCopyMatching):
        (WebKit::shimSecItemAdd):
        (WebKit::shimSecItemUpdate):
        (WebKit::shimSecItemDelete):
        (WebKit::WebKitWebProcessSecItemShimInitialize):

2011-05-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Cap painting to 30fps on Windows
        https://bugs.webkit.org/show_bug.cgi?id=61337
        <rdar://problem/9213388>

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

2011-05-23  Jeremy Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r86990:86992): World leak when all windows closed
        https://bugs.webkit.org/show_bug.cgi?id=61311

        Three interlocking problems:
        
        1) Calling [WKView fullScreenController] will create the controller if it doesn't all ready
        exist, so move the closing code into WKView, where we can bail early if there isn't a 
        controller.
        
        2) A retain-cycle exists between WKView and WKFullScreenWindowController.  Make sure to break
        the cycle explicitly by clearing the _fullScreenWindowController ivar when closing the
        controller.
        
        3) [NSWindowController close] was overridden without calling [super close].  Do that.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView closeFullScreenWindowController]): Moved here from WebFullScreenManagerProxyMac.mm.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController close]): Call [super close].
        * UIProcess/mac/WebFullScreenManagerProxyMac.mm:
        (WebKit::WebFullScreenManagerProxy::invalidate):

2011-05-20  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Video looks squished when animating to full screen.
        https://bugs.webkit.org/show_bug.cgi?id=61220

        Instead of scaling between the client sizes of the full-screen element before and after 
        entering full-screen, scale between their content boxes.  The difference is that the client
        sizes can have different aspect ratios, and thus the animation can end up "squishing" the
        content at one end of the animation.  When animating between the two content box sizes, their
        aspect ratios (for the case of video) are equal, so the animation will appear to scale 
        smoothly between the two states without "squishing" the content.

        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
        (WebKit::WebFullScreenManagerMac::beginEnterFullScreenAnimation): Set the destination frame
            to be the content box of the current full screen element.
        (WebKit::WebFullScreenManagerMac::beginExitFullScreenAnimation): Ditto.

2011-05-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Terminating a WebProcess should work even while a page is being closed
        <rdar://problem/8934632>
        https://bugs.webkit.org/show_bug.cgi?id=61299

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::terminateProcess):
        Change validity check to only check for process validity, since terminating the process of a page that
        is closed or is closing is acceptable behavior.

2011-05-23  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Darin Adler.

        [Windows] Initial Cookie Accept Policy not set on Deserialized Storage Session.
        https://bugs.webkit.org/show_bug.cgi?id=61255

        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):
        Move the code to set the cookie policy before the early return that is taken when using the
        default storage session from the UI Process.
        Also, remove unnecessary #ifdefs (USE(CFURLSTORAGESESSIONS) is true if USE(CFNETWORK) is
        true) and add a comment explaining the early return.

2011-05-23  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.setJavaScriptCanAccessClipboard
        https://bugs.webkit.org/show_bug.cgi?id=42669

        Implement setJavaScriptCanAccessClipboard in WebKitTestRunner.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetJavaScriptCanAccessClipboard):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setJavaScriptCanAccessClipboard):
        * WebProcess/InjectedBundle/InjectedBundle.h:

2011-05-23  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][WK2] Unreviewed trivial fix after r86990.

        * WebKit2.pro: Remove UIProcess/ChunkedUpdateDrawingAreaProxy.h.

2011-05-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebKit2 GTK build after r86990.

        * GNUmakefile.am: Remove UpdateChunk.cpp and UpdateChunk.h.

2011-05-21  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=61244
        <rdar://problem/9482856>
        Undo operations for a web page linger after page is destroyed

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::closePage):
        Clear editing commands before telling UI client to close the page (this must be done
        while the page is still in a window so its undo manager can be accessed, so waiting
        for WebPageProxy::close() is too late).

2011-05-22  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Don't call WebKit::initializeLogChannelsIfNecessary if logging is disabled
        https://bugs.webkit.org/show_bug.cgi?id=61249

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext): Check #if !LOG_DISABLED, not #ifndef NDEBUG, to decide whether to call WebKit::initializeLogChannelsIfNecessary().

2011-05-21  Nancy Piedra  <nancy.piedra@nokia.com>

        Reviewed by Andreas Kling.

        [Qt][Symbian] WKStringCopyQString function is not exported
        https://bugs.webkit.org/show_bug.cgi?id=59285

        A few functions were declared twice but without the export macro.
        On Symbian, the linking failed when trying to reference these functions.

        * UIProcess/API/qt/qgraphicswkview.h:

2011-05-21  Jeremy Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        WebKit2: fix failing fullscreen/full-screen-remove* tests.
        https://bugs.webkit.org/show_bug.cgi?id=61027

        * WebProcess/InjectedBundle/InjectedBundlePageFullScreenClient.cpp:
        (WebKit::InjectedBundlePageFullScreenClient::exitFullScreenForElement): Call the 
            exit functions (was calling the enter functions).

2011-05-20  Jeremy Noble  <jer.noble@apple.com>

        Reviewed by Mark Rowe.

        Crash in WebFullScreenManager::didExitFullScreen when closing a window in Safari.
        https://bugs.webkit.org/show_bug.cgi?id=61228

        Do not attempt to exit full screen if we aren't in full screen to begin with, as the WebProcess
        won't be expecting will/didExitFullScreen notifications.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController close]):

2011-05-20  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        WebView loses firstResponder status when entering full-screen mode.
        https://bugs.webkit.org/show_bug.cgi?id=61153

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]): If
        the WebView was a descendant of the browser window's first responder
        when entering full-screen mode, set the full-screen window's first
        responder to that same NSResponder.
        (-[WKFullScreenWindowController beganExitFullScreenAnimation]): Do the
        reverse of what is done in finishedEnterFullScreenAnimation:.

2011-05-20  Jeremy Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKit2: Exit full screen mode if the WebProcess crashes.
        https://bugs.webkit.org/show_bug.cgi?id=61151

        If the WebProcess crashes, exit full-screen mode to avoid getting stuck.  Move the
        WebFullScreenManagerProxy::invalidate() implementation into the platform-specific
        files, and have them close their respective platform's full-screen window.

        * UIProcess/WebFullScreenManagerProxy.cpp:
        * UIProcess/gtk/WebFullScreenManagerProxyGtk.cpp:
        (WebKit::WebFullScreenManagerProxy::invalidate): Added. Copied from main implementation.
        * UIProcess/mac/WKFullScreenWindowController.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController close]): Added.
        * UIProcess/mac/WebFullScreenManagerProxyMac.mm:
        (WebKit::WebFullScreenManagerProxy::invalidate): Added. 
        * UIProcess/win/WebFullScreenManagerProxyWin.cpp:
        (WebKit::WebFullScreenManagerProxy::invalidate): Added.

2011-05-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Remove the chunked update drawing area
        https://bugs.webkit.org/show_bug.cgi?id=61216

        The chunked update drawing area is no longer used in any port, so remove all traces of it.

        Qt still uses UpdateChunks for the tiled drawing area so keep the Shared/qt/UpdateChunk.* classes for now.

        * GNUmakefile.am:
        * Shared/DrawingAreaInfo.h:
        * Shared/gtk/UpdateChunk.cpp: Removed.
        * Shared/gtk/UpdateChunk.h: Removed.
        * Shared/mac/UpdateChunk.cpp: Removed.
        * Shared/mac/UpdateChunk.h: Removed.
        * Shared/win/UpdateChunk.cpp: Removed.
        * Shared/win/UpdateChunk.h: Removed.
        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp: Removed.
        * UIProcess/ChunkedUpdateDrawingAreaProxy.h: Removed.
        * UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp: Removed.
        * UIProcess/mac/ChunkedUpdateDrawingAreaProxyMac.mm: Removed.
        * UIProcess/qt/ChunkedUpdateDrawingAreaProxyQt.cpp: Removed.
        * UIProcess/win/ChunkedUpdateDrawingAreaProxyWin.cpp: Removed.
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::paint):
        (WebKit::WebView::createDrawingAreaProxy):
        (WebKit::WebView::enterAcceleratedCompositingMode):
        (WebKit::WebView::exitAcceleratedCompositingMode):
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp: Removed.
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.h: Removed.
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        * WebProcess/WebPage/mac/ChunkedUpdateDrawingAreaMac.cpp: Removed.
        * WebProcess/WebPage/qt/ChunkedUpdateDrawingAreaQt.cpp: Removed.
        * WebProcess/WebPage/win/ChunkedUpdateDrawingAreaWin.cpp: Removed.
        * win/WebKit2.vcproj:

2011-05-20  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Steve Falkenburg.

        Default min DOM Timer interval is not set soon enough for first page to pick it up in WK2
        https://bugs.webkit.org/show_bug.cgi?id=61215 

        * WebProcess/WebPage/WebPage.cpp: Simply moving the DOM min timer interval setting to before the first page creation.

2011-05-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        numberOfActiveAnimations() can include animations from documents in the page cache
        https://bugs.webkit.org/show_bug.cgi?id=53641

        Pass the Frame's document as the one to count animations on.

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

2011-05-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs layoutTestController.pauseTransitionAtTimeOnElementWithId
        https://bugs.webkit.org/show_bug.cgi?id=42550
        
        Plumb through methods to pause a transition of a given property on an element.

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFramePauseAnimationOnElementWithId):
        (WKBundleFramePauseTransitionOnElementWithId):
        * WebProcess/InjectedBundle/API/c/WKBundleFramePrivate.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::pauseTransitionOnElementWithId):
        * WebProcess/WebPage/WebFrame.h:

2011-05-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2: Media files cannot be saved in the Application Cache due to a sandbox violation
        https://bugs.webkit.org/show_bug.cgi?id=61199

        Instead of using a sandbox extension to give permission to the application cache directory,
        initialize the sandbox with access to it like we do for other databases.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureWebProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/com.apple.WebProcess.sb:
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::initializeSandbox):

2011-05-20  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        Win: non-full-screen content is briefly seen when entering full-screen mode (and vice versa)
        https://bugs.webkit.org/show_bug.cgi?id=61108

        When the fullScreenController asks us to repaint, make an async repaint request, and when the
        callback is fired, notify the fullScreenController that repaint has completed.

        * UIProcess/win/WebView.cpp:
        (WebKit::fullScreenClientForceRepaintCompleted): Added.
        (WebKit::WebView::fullScreenClientForceRepaint): Added.
        * UIProcess/win/WebView.h:

2011-05-19  Adam Roben  <aroben@apple.com>

        Don't try to process DownloadProxy messages twice (and robustify code that runs if we do)

        Fixes <http://webkit.org/b/61142> <rdar://problem/9471680> REGRESSION (r86812): Crash
        (preceded by assertion) in fastMalloc when downloading a file

        Reviewed by Darin Adler.

        * Platform/CoreIPC/ArgumentDecoder.cpp:
        (CoreIPC::alignedBufferIsLargeEnoughToContain): Added. This helper function checks that the
        given buffer is large enough to hold |size| bytes (and correctly handles the case where
        we're already at the end or beyond the end of the buffer).

        (CoreIPC::ArgumentDecoder::alignBufferPosition):
        (CoreIPC::ArgumentDecoder::bufferIsLargeEnoughToContain):
        Replaced old code that was vulnerable to underflow with the new helper function.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveSyncMessage): Added back an early return that was
        mistakenly removed in r86812 so that we don't mistakenly pass DownloadProxy messages on to
        a WebPageProxy after we've already handled them.

2011-05-19  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKit2: Flashing when entering and exiting full screen mode
        https://bugs.webkit.org/show_bug.cgi?id=56957

        In the WKFullscreenWindowController, when exiting accelerated compositing mode, 
        force a repaint, and don't actually remove the animation layer until the repaint
        completes.  Also, move back to parenting the WebView in a layer-backed view, and
        work around the SnowLeopard bug which causes a crash in those situations.  We no
        longer need to do a bunch of work in finishedEnterFullScreenAnimation, because 
        the animation layer is "hiding" all the drawing happening in the webView underneath.

        In the WebFullScreenManagerMac, when asked to tear down the root layer, instead
        remove all its children, and set its contents to a flattened image of the full
        screen element and its children.  This helps patch over the time where everything 
        is re-rendering and helps give the appearance of continuousness in the animation.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]):
        (-[WKFullScreenWindowController beganExitFullScreenAnimation]):
        (-[WKFullScreenWindowController enterAcceleratedCompositingMode:WebKit::]):
        (-[WKFullScreenWindowController exitAcceleratedCompositingMode]):
        (-[WKFullScreenWindowController exitCompositedModeRepaintCompleted]):
        (exitCompositedModeRepaintCompleted):
        (-[WKFullScreenWindowController _page]):
        (-[WKFullScreenWindowController _manager]):
        (-[WKFullScreenWindow initWithContentRect:styleMask:backing:defer:]):
        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
        (WebKit::WebFullScreenManagerMac::setRootFullScreenLayer):

2011-05-19  Anders Carlsson  <andersca@apple.com>

        Address a review comment by Sam Weinig.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::didUpdateHistoryTitle):

2011-05-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Hang UI appears when WebProcess isn't running
        https://bugs.webkit.org/show_bug.cgi?id=61147
        <rdar://problem/9413683>

        This fixes two bugs:

        1. The HistoryClient related message handlers in WebContext could get invoked for pages that have been closed,
           and thus didn't have any subframes. Since we have a MESSAGE_CHECK that checks that the frame exists, we'd
           mark the currently dispatched message as invalid, which would end up calling Connection::Client::didReceiveInvalidMessage.
           Fix this by checking that the page exists first.

        2. In the call to WebProcessProxy::didReceiveInvalidMessage we'd first invalidate the CoreIPC connection to make sure 
           that we won't get any further messages from this connection. We'd then go ahead and terminate the web process, 
           but because we've already invalidated the CoreIPC connection we would never get the Connection::Client::didClose
           callback that would call WebPageProxy::processDidCrash. Fix this by explicitly calling WebProcessProxy::didClose.
           Also, add logging when we receive an invalid message

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::didNavigateWithNavigationData):
        (WebKit::WebContext::didPerformClientRedirect):
        (WebKit::WebContext::didPerformServerRedirect):
        (WebKit::WebContext::didUpdateHistoryTitle):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveInvalidMessage):

2011-05-19  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Crash when detaching Web Inspector when parent is in process of closing.
        https://bugs.webkit.org/show_bug.cgi?id=61141
        <rdar://problem/9470027>
        
        We were trying to send a WM_SIZE to a window that was in the process of closing. Switch
        to using PostMessage, so the window will finish closing, and then it won't need to
        process the WM_SIZE message anymore.

        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformAttach): Call PostMessage instead of SendMessage.
        (WebKit::WebInspectorProxy::platformDetach): Ditto.

2011-05-19  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Fix plugins/windowless_plugin_paint_test.html

        Call gdk_init_check before gdk_display_get_default().
        If we don't do this, gdk_display_get_default() will hang
        the next time it's called.

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

2011-05-18  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Anders Carlsson.

        Plug-ins at YouTube, cnn.com, nytimes vanish when their top/left is scrolled out of view when zoomed
        https://bugs.webkit.org/show_bug.cgi?id=61101

        Scale both bounding boxes sent to m_plugin->geometryDidChange(), not just the frameRect. This fools
        the plugin into thinking it is drawing into an unscaled box with an unscaled view even when scaled.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::frame):Made this const so it can be used in clipRectInWindowCoordinates()
        (WebKit::PluginView::viewGeometryDidChange):Used IntRect::scale() rather than scaling by hand
        (WebKit::PluginView::clipRectInWindowCoordinates):Added scale of clipRect.
        * WebProcess/Plugins/PluginView.h:

2011-05-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Anders Carlsson.

        Fix build with ENABLE_PLUGIN_PROCESS=1 for non-mac platforms after r86578
        https://bugs.webkit.org/show_bug.cgi?id=61113

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::tryToShortCircuitInvoke):
        (WebKit::PluginControllerProxy::tryToShortCircuitEvaluate):

2011-05-19  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, follow-up fix of the messages python unittests after r86812.

        [WebKit2] handleMessageDelayed leaks replyEncoder if decoding fails
        https://bugs.webkit.org/show_bug.cgi?id=60872

        * Scripts/webkit2/messages_unittest.py:

2011-05-18  Brady Eidson  <beidson@apple.com>

        As originally reviewed by Anders Carlsson.

        <rdar://problem/9457633> and https://bugs.webkit.org/show_bug.cgi?id=61009
        Processes spawned by SnowLeopard's WebProcess attempt to install WebKit2 shims.

        Restore r86797 to how it was supposed to be using the appropriate #ifdef,
        reverting the temporary r86814 in the process.

        The #ifdef is BUILDING_ON_SNOW_LEOPARD, not BUILDING_ON_SNOWLEOPARD!
        
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain):

2011-05-18  Brady Eidson  <beidson@apple.com>

        Fix the WK2 SnowLeopard layouttests (again) until I can explore on a SnowLeopard machine tomorrow.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain):

2011-05-18  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        [WebKit2] handleMessageDelayed leaks replyEncoder if decoding fails
        https://bugs.webkit.org/show_bug.cgi?id=60872

        Eliminate the concept of SyncReplyMode and instead hand around ownership
        of the reply decoder using an OwnPtr.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::dispatchSyncMessage): Eliminated comments that say
        the same things the code itself does. Removed code that handles the
        reply mode. Instead, pass the OwnPtr to the message handling function and
        make the call to sendSyncReply conditional on whether the reply encoder
        is still non-null.

        * Platform/CoreIPC/Connection.h: Removed SyncReplyMode. Made
        didReceiveSyncMessage return void, and take OwnPtr<ArgumentEncoder>& for
        the reply encoder.

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::handleMessageDelayed): Take an OwnPtr&. Replaced the call to
        adoptPtr with a call to release.

        * PluginProcess/PluginControllerProxy.h: Updated to take an OwnPtr& and
        not return SyncReplyMode.
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::didReceiveSyncMessage): Ditto.
        * PluginProcess/WebProcessConnection.h: Ditto.

        * Scripts/webkit2/messages.py: Updated for changes to sync messages.
        Eliminated unneeded return types and use get() when apporopriate to call
        the handleMessage functions.

        * Scripts/webkit2/messages_unittest.py: Tried to update this too.
        I don't know how to run the test, though.

        * Shared/Plugins/NPObjectMessageReceiver.h: Updated to take an OwnPtr& and
        not return SyncReplyMode.
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::didReceiveSyncMessage): Ditto.
        * Shared/Plugins/NPRemoteObjectMap.h: Ditto.
        * UIProcess/Downloads/DownloadProxy.h: Ditto.
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::didReceiveSyncMessage): Ditto.
        * UIProcess/WebContext.h: Ditto.
        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::didReceiveSyncMessage): Ditto.
        * UIProcess/WebFullScreenManagerProxy.h: Ditto.
        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::didReceiveSyncMessage): Ditto.
        * UIProcess/WebIconDatabase.h: Ditto.
        * UIProcess/WebInspectorProxy.h: Ditto.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveSyncMessage): Ditto.
        * UIProcess/WebPageProxy.h: Ditto.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveSyncMessage): Ditto.
        * UIProcess/WebProcessProxy.h: Ditto.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp: Added a missing include.

        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::didReceiveSyncMessage): Updated to take
        an OwnPtr& and not return SyncReplyMode.
        * WebProcess/Plugins/PluginProcessConnection.h: Ditto.
        * WebProcess/Plugins/PluginProxy.h: Ditto.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveSyncMessage): Ditto.
        * WebProcess/WebPage/WebPage.h: Ditto.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveSyncMessage): Ditto.
        * WebProcess/WebProcess.h: Ditto.

2011-05-18  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Maciej Stachowiak.

        WK2: VoiceOver cannot move focus into a web area programmatically
        https://bugs.webkit.org/show_bug.cgi?id=60661

        Add a makeFirstResponder method that will bring focus to the widget view within the UI
        process.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::makeFirstResponder):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::makeFirstResponder):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::makeFirstResponder):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2011-05-18  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/9457633> and https://bugs.webkit.org/show_bug.cgi?id=61009
        Processes spawned by SnowLeopard's WebProcess attempt to install WebKit2 shims.

        * Platform/unix/EnvironmentUtilities.cpp: Remove an unnecessary #include, as reviewed.

2011-05-17  Timothy Hatcher  <timothy@apple.com>

        Update the the context menu to reflect the system search provider on Mac.

        <rdar://problem/9198419>

        Reviewed by Sam Weinig.

        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::searchWithGoogle): Add a FIXME about using NSPerformService on Mac.
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Added CopyDefaultSearchProviderDisplayName.

2011-05-18  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/9457633> and https://bugs.webkit.org/show_bug.cgi?id=61009
        Processes spawned by SnowLeopard's WebProcess attempt to install WebKit2 shims.

        If the WebProcess or PluginProcess forks, it shouldn't pass WebKit2 shims along to the new process
        in the DYLD_INSERT_LIBRARIES environment variable.

        Add Environment Utilities helper to strip unwanted values from an environment variable:
        * Platform/unix/EnvironmentUtilities.cpp: Added.
        (WebKit::EnvironmentUtilities::stripValuesEndingWithString):
        * Platform/unix/EnvironmentUtilities.h: Added.
        * WebKit2.xcodeproj/project.pbxproj:

        Strip PluginProcessShim.dylib from DYLD_INSERT_LIBRARIES:
        * PluginProcess/mac/PluginProcessMainMac.mm:
        (WebKit::PluginProcessMain):

        Strip WebProcessShim.dylib from DYLD_INSERT_LIBRARIES:
        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain):

        Unprotect SnowLeopard now that it will behave and not spawn processes trying to use WebKit2 shims:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):

2011-05-18  Jon Lee  <jonlee@apple.com>

        Reviewed by Simon Fraser.

        Crash in injected bundle client
        https://bugs.webkit.org/show_bug.cgi?id=61086

        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::shouldRubberBandInDirection): Check for existence of method in client prior to calling.

2011-05-18  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Remove usage of ChunkedUpdateDrawingArea.
        https://bugs.webkit.org/show_bug.cgi?id=60901

        To prepare for the eventual removal of the ChunkedUpdateDrawingArea,
        make QGraphicsWKView's "Simple" backing store type map to DrawingAreaImpl.

        * UIProcess/API/qt/qgraphicswkview.cpp:
        * UIProcess/API/qt/qgraphicswkview.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::createDrawingAreaProxy):

2011-05-18  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Don't lie about supporting accelerated compositing.
        https://bugs.webkit.org/show_bug.cgi?id=61054

        Until we have an implementation of LayerTreeHost, we shouldn't lie about it.

        * WebKit2.pro:
        * WebProcess/WebPage/LayerTreeHost.h:
        * WebProcess/WebPage/qt/LayerTreeHostQt.cpp: Added.
        (WebKit::LayerTreeHost::supportsAcceleratedCompositing):

2011-05-17  Jeremy Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Exiting full screen will leave up invisible full-screen window, blocking all mouse clicks.
        https://bugs.webkit.org/show_bug.cgi?id=60982

        The GraphicsLayer tree has unparented m_fullScreenRootLayer behind our backs, replacing the 
        tiled layer with a normal one.  Instead of holding on to a specific layer, assume that the 
        w_rootLayer will only have 0 or 1 children, and if a child is present, then that is our full-
        screen layer.

        Additionally, check to see if the animating layer's presentationLayer is nil
        before calling it; asking a nil object for a CATransform3D will give back a struct full of 
        garbage.

        In WKFullScreenWindowController, when the exit animation completes, ignore the "completed"
        parameter.  This eliminates the possibility that the full screen window will end up left
        on top of the screen if the animation is cancelled and a enter full screen animation isn't
        forthcoming.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]):
        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.h:
        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
        (WebKit::WebFullScreenManagerMac::setRootFullScreenLayer):
        (WebKit::WebFullScreenManagerMac::beginEnterFullScreenAnimation):
        (WebKit::WebFullScreenManagerMac::beginExitFullScreenAnimation):

2011-05-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Alice Liu.

        <rdar://problem/9458300> REGRESSION (r86724): Repro crash loading any webpage in WebKit2 on SnowLeopard
        https://bugs.webkit.org/show_bug.cgi?id=61022

        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain): As long as we are not loading the shim on Snow Leopard, we should not
        try to initialize it.

2011-05-17  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=60595
        Fix the rampant WebProcess crashing because we're trying to install the WebProcess shim
        into QTKitServer when we launch it.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess): This is only happening on SnowLeopard, so put
          SnowLeopard build guards around the shim install path.

2011-05-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86668.
        http://trac.webkit.org/changeset/86668
        https://bugs.webkit.org/show_bug.cgi?id=61001

        It made 52 tests crash on Qt WK2 bot (Requested by Ossy on
        #webkit).

        * UIProcess/API/qt/qgraphicswkview.cpp:
        * UIProcess/API/qt/qgraphicswkview.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::createDrawingAreaProxy):

2011-05-17  Brian Weinstein  <bweinstein@apple.com>

        Build fix after r86717.

        * UIProcess/API/C/win/WKView.h: Add a forward declaration of IDropTarget

2011-05-17  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Needs API to set a custom drop target
        https://bugs.webkit.org/show_bug.cgi?id=60991
        <rdar://problem/9090868>
        
        Add API to set a custom drop target on a WKView.

        * UIProcess/API/C/win/WKView.cpp:
        (WKViewSetCustomDropTarget): Call through to WebView::setCustomDropTarget.
        * UIProcess/API/C/win/WKView.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::setCustomDropTarget): Revoke the current drop target, and register the
            custom one.
        * UIProcess/win/WebView.h:

2011-05-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Add API to determine if a frame has any form elements without going to javascript
        https://bugs.webkit.org/show_bug.cgi?id=60999

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameContainsAnyFormElements):
        * WebProcess/InjectedBundle/API/c/WKBundleFramePrivate.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::containsAnyFormElements):
        * WebProcess/WebPage/WebFrame.h:
        Add WKBundleFrameContainsAnyFormElements which does a walk of the document to determine
        if there are any form elements.

2011-05-17  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Initial support for favicons.
        https://bugs.webkit.org/show_bug.cgi?id=58937

        Add the following API to QWKContext:

        - void setIconDatabasePath(QString)
        - void iconChangedForPageURL(QUrl) [signal]
        - QIcon iconForPageURL(QUrl)

        This is mostly analogous to the QWebSettings/QWebFrame icon API we had in WebKit1.

        * UIProcess/API/qt/ClientImpl.h: Added WKIconDatabaseClient methods.

        * UIProcess/API/qt/ClientImpl.cpp:
        (toQWKContext): Helper to cast from "void* clientInfo" to a QWKContext*.
        (qt_wk_didChangeIconForPageURL): Emits QWKContext::iconChangedForPageURL(QUrl).
        (qt_wk_didRemoveAllIcons): Stub.

        * UIProcess/API/qt/qwkcontext.h:
        * UIProcess/API/qt/qwkcontext_p.h:
        * UIProcess/API/qt/qwkcontext.cpp:
        (QWKContextPrivate::QWKContextPrivate): Set up and register a WKIconDatabaseClient.
        (QWKContext::QWKContext): Minor refactor to avoid code duplication in constructors.
        (QWKContext::setIconDatabasePath): Exactly what it sounds like.
        (QWKContext::iconForPageURL): Retrieves the favicon for a given page URL as a QIcon.

        * WebKit2API.pri: Add WKIconDatabase.cpp and WKIconDatabase.h to build.

2011-05-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        Part 4 of <rdar://problem/8814289> and https://bugs.webkit.org/show_bug.cgi?id=60595
        Mac WebKit2 WebProcess needs a shim to make prompts appear to be from the UIProcess

        This patch actually hooks up the shim to the WebProcess shim callbacks, which messages these
        4 calls up to the UIProcess and returns the result.

        Note that this patch uncovered the fact that CoreIPC can't sync message out from a secondary thread,
        so I filed https://bugs.webkit.org/show_bug.cgi?id=60975 as a followup to allow that.

        * Shared/mac/SecItemResponseData.cpp:
        (WebKit::SecItemResponseData::SecItemResponseData): Reorder the constructor arguments to be 
          a little cleaner.
        * Shared/mac/SecItemResponseData.h:

        Call the shim callbacks for each method:
        * WebProcess/mac/WebProcessShim.mm:
        (WebKit::shimSecItemCopyMatching):
        (WebKit::shimSecItemAdd):
        (WebKit::shimSecItemUpdate):
        (WebKit::shimSecItemDelete):

        Implement the shim callbacks, which each marshall to the main thread, which then calls out to CoreIPC:
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebSecItemCopyMatchingMainThread):
        (WebKit::WebSecItemCopyMatching):
        (WebKit::WebSecItemAddOnMainThread):
        (WebKit::WebSecItemAdd):
        (WebKit::WebSecItemUpdateOnMainThread):
        (WebKit::WebSecItemUpdate):
        (WebKit::WebSecItemDeleteOnMainThread):
        (WebKit::WebSecItemDelete):

        Add the 4 messages and their implementations in the UIProcess:
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * UIProcess/mac/WebProcessProxyMac.mm: Added.
        (WebKit::WebProcessProxy::secItemCopyMatching):
        (WebKit::WebProcessProxy::secItemAdd):
        (WebKit::WebProcessProxy::secItemUpdate):
        (WebKit::WebProcessProxy::secItemDelete):

        * WebKit2.xcodeproj/project.pbxproj:

2011-05-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Incomplete page painting at dropbox.com
        https://bugs.webkit.org/show_bug.cgi?id=60974
        <rdar://problem/9448213>

        When we're exiting compositing mode and haven't sent an EnterAcceleratedCompositingMode
        message to the UI process, we still need to send the updated bits to the ui process.
        
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):

2011-05-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        Part 3 of <rdar://problem/8814289> and https://bugs.webkit.org/show_bug.cgi?id=60595
        Mac WebKit2 WebProcess needs a shim to make prompts appear to be from the UIProcess

        Add CoreIPC stuff we'll need to marshall the SecItem calls to the UIProcess and back.

        Teach ArgumentCodersCF about CFDateRef, SecKeychainItemRef, and generic CFTypeRefs:
        * Shared/cf/ArgumentCodersCF.cpp:
        (CoreIPC::typeFromCFTypeRef):
        (CoreIPC::encode):
        (CoreIPC::decode):
        * Shared/cf/ArgumentCodersCF.h:

        Serializable object that contains the query CFDictionaryRef and optionally the 
        "attributesToMatch" CFDictionaryRef:
        * Shared/mac/SecItemRequestData.cpp: Added.
        (WebKit::SecItemRequestData::SecItemRequestData):
        (WebKit::SecItemRequestData::encode):
        (WebKit::SecItemRequestData::decode):
        * Shared/mac/SecItemRequestData.h: Added.
        (WebKit::SecItemRequestData::query):
        (WebKit::SecItemRequestData::attributesToMatch):

        Serializable object that returns an OSStatus and optionally a "result object" CFTypeRef:
        * Shared/mac/SecItemResponseData.cpp: Added.
        (WebKit::SecItemResponseData::SecItemResponseData):
        (WebKit::SecItemResponseData::encode):
        (WebKit::SecItemResponseData::decode):
        * Shared/mac/SecItemResponseData.h: Added.
        (WebKit::SecItemResponseData::resultObject):
        (WebKit::SecItemResponseData::resultCode):

        * WebKit2.xcodeproj/project.pbxproj:

2011-05-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        Part 2 of <rdar://problem/8814289> and https://bugs.webkit.org/show_bug.cgi?id=60595
        Mac WebKit2 WebProcess needs a shim to make prompts appear to be from the UIProcess

        Hookup some of the methods we plan to shim in the patch, but just have them call through
        to the actual implementations for now.

        Also stub-out the future shimmed versions of the methods.

        * WebProcess/mac/WebProcessShim.h: Add the methods to the shim callbacks.
        * WebProcess/mac/WebProcessShim.mm:
        (WebKit::shimSecItemCopyMatching): Call through to the actual function for now.
        (WebKit::shimSecItemAdd): Ditto.
        (WebKit::shimSecItemUpdate): Ditto.
        (WebKit::shimSecItemDelete): Ditto.
        (WebKit::WebKitWebProcessShimInitialize): Copy over the shim callbacks.
        * WebKit2.xcodeproj/project.pbxproj: Link the shim to required frameworks.
        
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebSecItemCopyMatching): Add placeholders for the future to-be-shimmed functions.
        (WebKit::WebSecItemAdd): Ditto.
        (WebKit::WebSecItemUpdate): Ditto.
        (WebKit::WebSecItemDelete): Ditto.
        (WebKit::WebProcess::initializeShim): Pass along those placeholders to the shim initializer.

2011-05-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        Part 1 of <rdar://problem/8814289> and https://bugs.webkit.org/show_bug.cgi?id=60595
        Mac WebKit2 WebProcess needs a shim to make prompts appear to be from the UIProcess

        Add am empty shim for a new WebProcess shim and install it at launch.

        Use the same Shim.xcconfig for both the web and plugin processes:
        * Configurations/PluginProcessShim.xcconfig: Removed.
        * Configurations/Shim.xcconfig: Copied from Configurations/PluginProcessShim.xcconfig.
        * WebKit2.xcodeproj/project.pbxproj:

        * WebProcess/WebProcess.h: Add initializeShim() for Mac-only
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::initializeShim): Initialize the (empty) shim callbacks.

        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain): Call initializeShim()

        * WebProcess/mac/WebProcessShim.h: Added.
        * WebProcess/mac/WebProcessShim.mm: Added.
        (WebKit::WebKitWebProcessShimInitialize): Empty for now.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess): Install the Plugin Process shim for plugin processes
          and the WebProcess shim for the web content process.

2011-05-17  John Sullivan  <sullivan@apple.com>

        Reviewed by Adam Roben.

        Loose end from fix for https://bugs.webkit.org/show_bug.cgi?id=60938

        * WebKit2.xcodeproj/project.pbxproj:
        Made new header file "private" instead of "project" so clients can access it.

2011-05-17  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Remove usage of ChunkedUpdateDrawingArea.
        https://bugs.webkit.org/show_bug.cgi?id=60901

        To prepare for the eventual removal of the ChunkedUpdateDrawingArea,
        make QGraphicsWKView's "Simple" backing store type map to DrawingAreaImpl.

        * UIProcess/API/qt/qgraphicswkview.cpp:
        * UIProcess/API/qt/qgraphicswkview.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::createDrawingAreaProxy):

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

        Take another shot at fixing the WinCairo build.

        * Shared/cairo/LayerTreeContextCairo.cpp: Include NotImplemented.h using a framework include.

2011-05-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Jon Honeycutt.

        Add access to process pid in WebKit2 API
        https://bugs.webkit.org/show_bug.cgi?id=60938

        * UIProcess/API/C/mac/WKPagePrivateMac.cpp: Added.
        (WKPageGetProcessIdentifier):
        * UIProcess/API/C/mac/WKPagePrivateMac.h: Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::processIdentifier):
        * UIProcess/WebPageProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:
        Add WKPageGetProcessIdentifier as SPI for the mac.

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

        Add file missing from my previous commit.

        * Shared/cairo/LayerTreeContextCairo.cpp: Added.

2011-05-16  Martin Robinson  <martin.james.robinson@gmail.com>

        Try to fix the WinCairo build after r86612.

        Move the LayerTreeContextGtk.cpp stub to LayerTreeContextCairo.cpp and add
        it to the WinCairo build.

        * GNUmakefile.am: Update the source list.
        * Shared/cairo/LayerTreeContextCairo.cpp: Renamed from Source/WebKit2/Shared/gtk/LayerTreeContextGtk.cpp.
        * win/WebKit2.vcproj: Update the source list.

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

        Reviewed by Anders Carlsson.

        [GTK] [WebKit2] Provide a fast version of the backing store for X11
        https://bugs.webkit.org/show_bug.cgi?id=60912

        Instead of allocating the backing store surface directly in WebKit2,
        instantiate the GtkWidgetBackingStore class which abstracts away the
        platform-specific details of maintaining the backing store.

        * UIProcess/BackingStore.h:
        * UIProcess/gtk/BackingStoreGtk.cpp:
        (WebKit::BackingStore::paint): Call into GtkWidgetBackingStore to get the Cairo surface now.
        (WebKit::BackingStore::incorporateUpdate): Ditto.
        (WebKit::BackingStore::scroll): Call into GtkWidgetBackingStore to do the actual backing store scroll.

2011-05-16  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler.

        Plug-in hit testing is broken after zooming
        https://bugs.webkit.org/show_bug.cgi?id=60916

        Construct a WebMouseEvent to send to plugin, adjusting values to take pageScaleFactor
        into account. Also adjusted bounds sent to viewGeometryDidChange to take pageScaleFactor
        into account. Both are needed or the plugin will think the mouse positions are outside
        its bounds.

        * Shared/WebEvent.h:
        * Shared/WebMouseEvent.cpp:Add ctor to clone a WebMouseEvent and add a scaleFactor to values
        (WebKit::WebMouseEvent::WebMouseEvent):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::handleEvent):Adjust mouse coords to take pageScaleFactor into account
        (WebKit::PluginView::viewGeometryDidChange):Adjust bounds to take pageScaleFactor into account

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

        Reviewed by Anders Carlsson.

        GTK port of WebKit2 should switch to new DrawingAreaImpl model
        https://bugs.webkit.org/show_bug.cgi?id=59655

        * GNUmakefile.am: Add the files necessary to use the DrawingAreaProxyImpl
        to the source list. The source list also needs the LayerContextTree stubs.
        * Shared/LayerTreeContext.h: This file should not be guarded by
        USE(ACCELERATED_COMPOSITING) as it's needed for the DrawingAreaProxyImpl
        IPC messaging.
        * Shared/gtk/LayerTreeContextGtk.cpp: Added this stub.
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createDrawingAreaProxy): Instead of creating the deprecated
        chunked drawing area, create a DrawingAreaProxyImpl.
        (WebKit::PageClientImpl::setViewNeedsDisplay): Here we must now queue a redraw. Previously
        the chunked drawing area was doing this manually. This is the appropriate place though.
        (WebKit::PageClientImpl::scrollView): Add an implementation that just calls into setViewNeedsDisplay.
        * UIProcess/API/gtk/PageClientImpl.h: Added a getter for m_viewWidget.
        (WebKit::PageClientImpl::viewWidget):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (callDrawingAreaPaintMethod): Added this helper which reduces code duplication between
        GTK+ 2.x and 3.x
        (webkitWebViewBaseExpose): Call the new helper now.
        (webkitWebViewBaseDraw): Ditto.
        * UIProcess/BackingStore.h: Updated to include GTK+ specific types.
        * UIProcess/DrawingAreaProxy.h: Ditto.
        * UIProcess/DrawingAreaProxy.messages.in: Do not the DrawingAreaProxyImpl-specific
         message with USE(ACCELERATED_COMPOSITING).
        * UIProcess/WebPageProxy.cpp: Removed these guards, as DrawingAreProxyImpl is used on all platforms now.
        (WebKit::WebPageProxy::didReceiveMessage): Ditto.
        * UIProcess/WebPageProxy.h: Ditto.
        * UIProcess/gtk/BackingStoreGtk.cpp: Added. This implementation heavily uses Cairo,
        but depends on GTK+/GDK in a few places.
        (WebKit::BackingStore::paint):
        (WebKit::BackingStore::incorporateUpdate):
        (WebKit::BackingStore::scroll):
        * UIProcess/gtk/WebPageProxyGtk.cpp: Added a getting for the viewWidget, which is
        required by BackingStoreGtk. A similar getter exists for Windows and Mac.
        (WebKit::WebPageProxy::viewWidget): Ditto.
        * WebProcess/WebPage/DrawingArea.cpp: Removed these guards as DrawingAreaProxyImpl is used on all platforms now.
        (WebKit::DrawingArea::create): Ditto.
        * WebProcess/WebPage/DrawingArea.h: Ditto.
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::sendDidUpdateBackingStoreState): Do not guard
        this DrawingAreaProxyImpl-specific message with USE(ACCELERATED_COMPOSITING)
        * WebProcess/WebPage/WebPage.cpp: Removed these guards as DrawingAreaProxyImpl is used on all platforms now.
        (WebKit::WebPage::didReceiveMessage): Ditto.

2011-05-16  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam Weinig.

        Sandbox denies Kerberos authentication
        https://bugs.webkit.org/show_bug.cgi?id=60921
        <rdar://problem/9133872>
        
        * WebProcess/com.apple.WebProcess.sb:

2011-05-16  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/60913> C++ exceptions should not be enabled when building with llvm-gcc-4.2
        <rdar://problem/9446430>

        Reviewed by Mark Rowe.

        * Configurations/Base.xcconfig: Fixed typo.

2011-05-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        If the root compositing layer changes while we're about to exit compositing mode, make sure to enter compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=60905
        <rdar://problem/9365574>

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::setRootCompositingLayer):
        If we have a layer tree host, but haven't yet sent a EnterAcceleratedCompositingMode message (this can happen
        when quickly going in and out of compositing mode), make sure to schedule a notification when the layer tree host
        does it next flush. This will end up sending the EnterAcceleratedCompositingMode message.

2011-05-13  Jer Noble  <jer.noble@apple.com>

        Reviewed by Simon Fraser.

        Video is blank, controller is misplaced on trailers.apple.com movie in fullscreen (with two screens)
        https://bugs.webkit.org/show_bug.cgi?id=60826

        Emit a notification when moving a CALayer from the WebProcess's main
        layer host to a new context.  This allows listeners to invalidate their
        layers which may not support moving between different CAContexts (as is
        the case with QTMovieLayer).  In order to allow listeners to determine if they
        are affected, the notification will pass the root CALayer in a userInfo
        dictionary.

        In WebFullScreenManagerMac, move from storing a pointer to a non-refcounted
        class (GraphicsLayer) to a retainable class (PlatformLayer).

        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.h:
        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
        (WebKit::WebFullScreenManagerMac::WebFullScreenManagerMac): No need to initialize
            m_fullScreenRootLayer now that it is a RetainPtr<>.
        (WebKit::WebFullScreenManagerMac::setRootFullScreenLayer): Emit a notification
            after either creating or destroying the full screen layer host.
        (WebKit::WebFullScreenManagerMac::beginEnterFullScreenAnimation):
        (WebKit::WebFullScreenManagerMac::beginExitFullScreenAnimation):

2011-05-16  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Rubber-stamped by Csaba Osztrogonác.

        [Qt][Wk2][Symbian] Fix build after r86560
        https://bugs.webkit.org/show_bug.cgi?id=60887

        Temporarily fix Symbian build by re-enabling compilation
        of Qt/Gtk common code (as was the case for Symbian before r55875).
        This is a stop gap until the pure Symbian Core IPC and process launching bits land in Bug 55875
        As of this revision, only the native SharedMemory implementation is in trunk.

        * Platform/CoreIPC/Attachment.h: Compile Qt/Gtk common code for Qt-Symbian too
        * Platform/CoreIPC/Connection.h: ditto
        * Platform/SharedMemory.h:       ditto
        * Platform/qt/SharedMemorySymbian.cpp: stub implementations of attachment handling
        (WebKit::SharedMemory::Handle::releaseToAttachment):
        (WebKit::SharedMemory::Handle::adoptFromAttachment):

2011-05-16  Jon Lee  <jonlee@apple.com>

        Reviewed by Simon Fraser.

        Can't horizontally scroll iframes and overflow because wheel events are always accepted
        https://bugs.webkit.org/show_bug.cgi?id=60779

        We keep track of the number of horizontal scrollbars and mouse wheel event handlers in the
        UI process as a means of determining whether horizontal scroll events will be handled
        by the web process.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::willHandleHorizontalScrollEvents): Return true if there is at least
        one wheel event handler
        * UIProcess/WebPageProxy.h: Add new variable to cache the count
        (WebKit::WebPageProxy::numWheelEventHandlersChanged): Sets the count

        The rest just provides all the connections.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageWillHandleHorizontalScrollEvents):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::shouldRubberBandInDirection):
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::shouldRubberBandInDirection): Forward to injected bundle UI client
        (WebKit::WebChromeClient::updateCountWheelEventHandlers): Updates the web page proxy
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2011-05-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver Hunt.

        Silverlight: Selection via keyboard selects the entire plugin instead of the contents of a TextBox
        https://bugs.webkit.org/show_bug.cgi?id=60898
        <rdar://problem/9309903>

        Special-case Command-A and always return true, indicating that the plug-in handled the event.
        This matches WebKit1.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformHandleKeyboardEvent):

2011-05-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver Hunt.

        Short-circuit NPRuntime calls made by Flash during plug-in instantiation
        https://bugs.webkit.org/show_bug.cgi?id=60894
        <rdar://problem/8804681>

        During plug-in instantiation, Flash makes a couple of NPRuntime calls to get the
        URL of the current document as well as the URL of the toplevel document. This leads to
        a bunch of IPC traffic that slows down instantiation.

        Since we know what calls Flash is making and what results are expected, we can handle the
        NPRuntime calls directly in the plug-in process and avoid extra IPC overhead.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::PluginControllerProxy):
        Initialize m_pluginCreationParameters.

        (WebKit::PluginControllerProxy::initialize):
        Set m_pluginCreationParameters to point to the creation parameters right before
        calling Plugin::initialize and restore it back afterwards.

        (WebKit::PluginControllerProxy::tryToShortCircuitInvoke):
        If the plug-in calling NPN_Invoke has the CanShortCircuitSomeNPRuntimeCallsDuringInitialization
        quirk, and we're being initialized, check for the __flash_getWindowLocation and
        __flash_getTopLocation function calls and return the correct values.

        (WebKit::PluginControllerProxy::tryToShortCircuitEvaluate):
        Check if the script string has the definitions of __flash_getWindowLocation or __flash_getTopLocation
        and just ignore them. Note that ignoring them has the effect of not adding them to the window object,
        which could in theory be a backwards compatibility problem if web pages were to assume that these
        functions existed on a page with plug-ins. In practice this is probably not a problem, especially since
        these functions are only used on Mac WebKit.

        * PluginProcess/PluginControllerProxy.h:
        (WebKit::PluginControllerProxy::inInitialize):
        Add helper function.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::determineQuirks):
        Add the CanShortCircuitSomeNPRuntimeCallsDuringInitialization quirk for Flash on Mac.

        * Shared/Plugins/PluginQuirks.h:
        Add Mac specific CanShortCircuitSomeNPRuntimeCallsDuringInitialization quirk.

2011-05-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Add a returnValue parameter to tryToShortCircuitInvoke
        https://bugs.webkit.org/show_bug.cgi?id=60891

        tryToShortCircuitInvoke needs to be able to indicate that an invoke
        call failed. Add a returnValue parameter and have the real return value
        indicate whether tryToShortCircuitInvoke did short-circuit the invoke or not.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::tryToShortCircuitInvoke):
        * PluginProcess/PluginControllerProxy.h:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_Invoke):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::tryToShortCircuitInvoke):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::tryToShortCircuitInvoke):
        * WebProcess/Plugins/PluginView.h:

2011-05-16  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Csaba Osztrogonác.

        [Qt][Wk2][Symbian] Fix build after r86560
        https://bugs.webkit.org/show_bug.cgi?id=60887

        * Platform/CoreIPC/ArgumentDecoder.cpp:
        (CoreIPC::ArgumentDecoder::~ArgumentDecoder): guard Unix and Gtk code with USE(UNIX_DOMAIN_SOCKETS)
        * Platform/CoreIPC/ArgumentEncoder.cpp:
        (CoreIPC::ArgumentEncoder::~ArgumentEncoder): ditto

2011-05-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Add the ability for a plug-in controller to short-circuit calls to NPN_Invoke
        https://bugs.webkit.org/show_bug.cgi?id=60886

        Make it possible for a plug-in controller to intercept calls to NPN_Invoke, which
        will be useful for avoiding sync IPC messages during instantiation.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::evaluate):
        Call tryToShortCircuitEvaluate. If it returns true, we don't need to call back to
        the web process to ask it to evaluate the script string.

        (WebKit::PluginControllerProxy::tryToShortCircuitInvoke):
        (WebKit::PluginControllerProxy::tryToShortCircuitEvaluate):
        Always return false for now.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_Invoke):
        Get the plug-in and call tryToShortCircuitInvoke.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::tryToShortCircuitInvoke):
        Call the plug-in controller.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::tryToShortCircuitInvoke):
        Always return false here, since there's no need to short-circuit calls
        for plug-ins that live in the web process.

2011-05-16  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt][WK2][Symbian] Shared memory implementation for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=55875

        Use global chunks for sharing data between processes.
        This is an initial implementation. An outstanding issue
        is the correct way to close() the chunk in the SharedMemory d'tor
        without triggering a delete by the kernel when the ref-count
        temporarily goes to zero.

        * Platform/SharedMemory.h: platform specific handle and chunk name
        * Platform/qt/SharedMemorySymbian.cpp: Added. Native Symbian OS implementation
        using RChunk.CreateGlobal() for named chunks. The chunk name is serialized
        and sent over the IPC channel and opened by the remote process using
        RChunk.OpenGlobal().

        (WebKit::SharedMemory::Handle::Handle):
        (WebKit::SharedMemory::Handle::~Handle):
        (WebKit::SharedMemory::Handle::isNull):
        (WebKit::SharedMemory::Handle::encode):
        (WebKit::SharedMemory::Handle::decode):
        (WebKit::SharedMemory::create):
        (WebKit::SharedMemory::~SharedMemory):
        (WebKit::SharedMemory::createHandle):
        (WebKit::SharedMemory::systemPageSize):
        * Platform/unix/SharedMemoryUnix.cpp: Exclude Qt-Symbian using HAVE(UNIX_DOMAIN_SOCKETS)
        * WebKit2.pro: Add SharedMemorySymbian.cpp

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

        Unreviewed. Fix WebKit2 GTK build after r86489.

        * GNUmakefile.am: Add PluginProcess/PluginCreationParameters.cpp
        and PluginProcess/PluginCreationParameters.h to compilation.

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

        Reviewed by Martin Robinson.

        [GTK] Enable building GTK port with ENABLE_PLUGIN_PROCESS=1
        https://bugs.webkit.org/show_bug.cgi?id=58223

        * GNUmakefile.am: Add new files to compilation.
        * PluginProcess/gtk/PluginControllerProxyGtk.cpp: Added.
        (WebKit::PluginControllerProxy::platformInitialize):
        (WebKit::PluginControllerProxy::platformDestroy):
        (WebKit::PluginControllerProxy::platformGeometryDidChange):
        * PluginProcess/gtk/PluginProcessGtk.cpp: Added.
        (WebKit::PluginProcess::platformInitialize):
        * UIProcess/Plugins/gtk/PluginProcessProxyGtk.cpp: Added.
        (WebKit::PluginProcessProxy::platformInitializePluginProcess):
        * WebProcess/Plugins/Netscape/gtk/PluginProxyGtk.cpp: Added.
        (WebKit::PluginProxy::needsBackingStore):

2011-05-16  Adam Barth  <abarth@webkit.org>

        Attempt to fix the Qt build.  (Strict PassOwnPtr fix.)

        * Shared/qt/ShareableBitmapQt.cpp:
        (WebKit::ShareableBitmap::createGraphicsContext):

2011-05-15  Michael Saboff  <msaboff@apple.com>

        Reviewed by Geoffrey Garen.

        Suboptimal lifetime of BackingStore objects in DrawingAreaProxyImpl
        https://bugs.webkit.org/show_bug.cgi?id=60864

        Implemented reuse of BackingStore's in 
        DrawingAreaProxyImpl::didUpdateBackingStoreState when the size needed
        matches the size of the existing BackingStore.
        Also reduced the discardBackingStoreTimer from 5 to 2 seconds.
        These changes reduces memory usage up to 10MB on memory tests.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::didUpdateBackingStoreState):
        (WebKit::DrawingAreaProxyImpl::discardBackingStoreSoon):

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

        Reviewed by Maciej Stachowiak.

        Pass the window NPObject identifier in the plug-in creation parameters
        https://bugs.webkit.org/show_bug.cgi?id=60865

        This avoids a synchronous call when the plug-in wants to get the NPObject that
        corresponds to the window.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::initialize):
        Change this to take the PluginCreationParameters. Initialize the window NPObject.

        (WebKit::PluginControllerProxy::windowScriptNPObject):
        Just return the window NPObject; it's already been initialized.

        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginCreationParameters.cpp:
        (WebKit::PluginCreationParameters::PluginCreationParameters):
        (WebKit::PluginCreationParameters::encode):
        (WebKit::PluginCreationParameters::decode):
        * PluginProcess/PluginCreationParameters.h:
        Add the window NPObject ID.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::createPlugin):
        Pass the creation parameters to PluginControllerProxy::initialize.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::initialize):
        Initialize the window NPObject ID.

        * WebProcess/Plugins/PluginProxy.messages.in:
        Remove the GetWindowScriptNPObject message.

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

        Reviewed by Geoffrey Garen.

        Pass the document URL and toplevel document URL when creating a plug-in
        https://bugs.webkit.org/show_bug.cgi?id=60863

        This is the first of a series of patches intended to reduce the IPC traffic
        during plug-in instantiation.

        * WebProcess/Plugins/Plugin.cpp:
        (WebKit::Plugin::Parameters::encode):
        Encode the URLs.

        (WebKit::Plugin::Parameters::decode):
        Decode the URLs.

        * WebProcess/Plugins/Plugin.h:
        Add the document and toplevel document URLs.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin):
        Initialize the document and toplevel document URLs.

2011-05-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make GC validation more aggressive
        https://bugs.webkit.org/show_bug.cgi?id=60802

        Add GC_VALIDATION calls to all the JSNPObject methods.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::invalidate):
        (WebKit::JSNPObject::callMethod):
        (WebKit::JSNPObject::callObject):
        (WebKit::JSNPObject::callConstructor):
        (WebKit::JSNPObject::getCallData):
        (WebKit::JSNPObject::getConstructData):
        (WebKit::JSNPObject::getOwnPropertySlot):
        (WebKit::JSNPObject::getOwnPropertyDescriptor):
        (WebKit::JSNPObject::put):
        (WebKit::JSNPObject::getOwnPropertyNames):
        (WebKit::JSNPObject::propertyGetter):
        (WebKit::JSNPObject::methodGetter):

2011-05-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make GC validation more aggressive
        https://bugs.webkit.org/show_bug.cgi?id=60802

        Add GC_VALIDATION calls to all the JSNPObject methods.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::invalidate):
        (WebKit::JSNPObject::callMethod):
        (WebKit::JSNPObject::callObject):
        (WebKit::JSNPObject::callConstructor):
        (WebKit::JSNPObject::getCallData):
        (WebKit::JSNPObject::getConstructData):
        (WebKit::JSNPObject::getOwnPropertySlot):
        (WebKit::JSNPObject::getOwnPropertyDescriptor):
        (WebKit::JSNPObject::put):
        (WebKit::JSNPObject::getOwnPropertyNames):
        (WebKit::JSNPObject::propertyGetter):
        (WebKit::JSNPObject::methodGetter):

2011-05-14  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Smart cut&paste is broken
        https://bugs.webkit.org/show_bug.cgi?id=60840
        <rdar://problem/9439927>

        * UIProcess/mac/TextCheckerMac.mm: (WebKit::TextChecker::isSmartInsertDeleteEnabled):
        Match WK1 - this default defaults to YES if not present.

2011-05-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by Alice Liu.

        WKView does not draw after forced repaint before the first update
        https://bugs.webkit.org/show_bug.cgi?id=60845

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::waitForBackingStoreUpdateOnNextPaint): Added.
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::waitForBackingStoreUpdateOnNextPaint): Set m_hasReceivedFirstUpdate
        to true, ensuring that paint() will wait for an update if needed.
        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::forceRepaint): Call DrawingAreaProxy::waitForBackingStoreUpdateOnNextPaint().

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

        Reviewed by Sam Weinig.

        Document the WantsMozillaUserAgent quirk and make it Windows specific
        https://bugs.webkit.org/show_bug.cgi?id=60843

        * Shared/Plugins/PluginQuirks.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::userAgent):

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

        Reviewed by Sam Weinig.

        Consolidate plug-in creation parameters to a single struct
        https://bugs.webkit.org/show_bug.cgi?id=60839

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::create):
        (WebKit::PluginControllerProxy::PluginControllerProxy):
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginCreationParameters.cpp: Added.
        (WebKit::PluginCreationParameters::PluginCreationParameters):
        (WebKit::PluginCreationParameters::encode):
        (WebKit::PluginCreationParameters::decode):
        * PluginProcess/PluginCreationParameters.h: Added.
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::createPlugin):
        * PluginProcess/WebProcessConnection.h:
        * PluginProcess/WebProcessConnection.messages.in:
        * Scripts/webkit2/messages.py:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::initialize):

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

        Reviewed by Kevin Decker.

        NPP_URLNotify is not called if a URL passed to NPN_GetURLNotify fails to load
        https://bugs.webkit.org/show_bug.cgi?id=60823
        <rdar://problem/9430386>

        If a plug-in stream fails to load before it's been started, we won't destroy the stream.

        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::stop):
        Call notifyAndDestroyStream which will call NPP_URLNotify if necessary, and also destroy the stream.

        (WebKit::NetscapePluginStream::notifyAndDestroyStream):
        Pass the request URL to NPP_URLNotify, matching other browsers.

2011-05-14  Jer Noble  <jer.noble@apple.com>

        Reviewed by Simon Fraser.

        Flashing window frame and graphical glitches after exiting full screen mode.
        https://bugs.webkit.org/show_bug.cgi?id=60825

        A layer-backed WebView throws an exception when moved from a layer-backed parent view
        to a non-layer-backed one, so make the WebView a child of the content view, instead of
        the animation view.  There is an unrelated fix in beganExitFullScreen, which was calling
        finishedExitFullScreenAnimation: instead of finishedEnterFullScreenAnimation: when 
        notifications come out of order.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]): Add the _webView
            to the full screen window's content view, instead of the _animationView.
        (-[WKFullScreenWindowController beganExitFullScreenAnimation]): Call 
            finishedEnterFullScreenAnimation: instead of finishedExitFullScreenAnimation:.
        (-[WKFullScreenWindowController enterAcceleratedCompositingMode:WebKit::]): Add the
            _layerHostingView to the contentView, instead of the animationView.

2011-05-14  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, rolling out r86469 and r86471, because they made hundreds tests crash on Qt.

        Make GC validation more aggressive
        https://bugs.webkit.org/show_bug.cgi?id=60802

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::invalidate):
        (WebKit::JSNPObject::callMethod):
        (WebKit::JSNPObject::callObject):
        (WebKit::JSNPObject::callConstructor):
        (WebKit::JSNPObject::getCallData):
        (WebKit::JSNPObject::getConstructData):
        (WebKit::JSNPObject::getOwnPropertySlot):
        (WebKit::JSNPObject::getOwnPropertyDescriptor):
        (WebKit::JSNPObject::put):
        (WebKit::JSNPObject::getOwnPropertyNames):
        (WebKit::JSNPObject::propertyGetter):
        (WebKit::JSNPObject::methodGetter):

2011-05-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86476.
        http://trac.webkit.org/changeset/86476
        https://bugs.webkit.org/show_bug.cgi?id=60832

        It made plugins/get-url-notify-with-url-that-fails-to-
        load.html crash on GTK (Requested by Ossy on #webkit).

        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::stop):
        (WebKit::NetscapePluginStream::notifyAndDestroyStream):

2011-05-13  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler and Brian Weinstein.

        REGRESSION (WK2): Can't drag and drop a link or image from Safari to Desktop
        https://bugs.webkit.org/show_bug.cgi?id=60819
        <rdar://problem/9370689>

        To support drag-and-drop to the desktop and other windows applications,
        we need to support the fileDescriptor and fileContentZero clipboard formats.
        This patch adds the support for serializing these types across the process boundary.

        * Platform/CoreIPC/Arguments.h: Added support for messages with 10 arguments.
        (CoreIPC::Arguments10::Arguments10):
        (CoreIPC::Arguments10::encode):
        (CoreIPC::Arguments10::decode):
        (CoreIPC::In):
        (CoreIPC::Out):
        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction): Added support for memebers with 10 arguments.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::startDragDrop):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/win/WebDragClientWin.cpp:
        (WebKit::WebDragClient::startDrag):

2011-05-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        NPP_URLNotify is not called if a URL passed to NPN_GetURLNotify fails to load
        https://bugs.webkit.org/show_bug.cgi?id=60823
        <rdar://problem/9430386>

        If a plug-in stream fails to load before it's been started, we won't destroy the stream.

        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::stop):
        Call notifyAndDestroyStream which will call NPP_URLNotify if necessary, and also destroy the stream.

        (WebKit::NetscapePluginStream::notifyAndDestroyStream):
        Pass the request URL to NPP_URLNotify, matching other browsers.

2011-05-13  Michael Saboff  <msaboff@apple.com>

        Reviewed by Geoffrey Garen.

        Backing store may not get discarded due to stopped timer
        https://bugs.webkit.org/show_bug.cgi?id=60816

        Changed the backing store timer to restart if it has been stopped.
        The evaluation is done when the view's state is changed.
        This change appears to be worth ~3MB (one backing store worth)
        during memory tests.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::discardBackingStoreSoon):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewStateDidChange):

2011-05-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make GC validation more aggressive
        https://bugs.webkit.org/show_bug.cgi?id=60802

        Add GC_VALIDATION calls to all the JSNPObject methods.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::invalidate):
        (WebKit::JSNPObject::callMethod):
        (WebKit::JSNPObject::callObject):
        (WebKit::JSNPObject::callConstructor):
        (WebKit::JSNPObject::getCallData):
        (WebKit::JSNPObject::getConstructData):
        (WebKit::JSNPObject::getOwnPropertySlot):
        (WebKit::JSNPObject::getOwnPropertyDescriptor):
        (WebKit::JSNPObject::put):
        (WebKit::JSNPObject::getOwnPropertyNames):
        (WebKit::JSNPObject::propertyGetter):
        (WebKit::JSNPObject::methodGetter):

2011-05-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        NPN_GetURL with a javascript: URL doesn't send back the result in the stream
        https://bugs.webkit.org/show_bug.cgi?id=60810

        In NetscapePluginStream::sendJavaScriptStream, we were incorrectly passing the result URL
        to the stream, instead of the result. Also, store the request URL in the NetscapePluginStream object
        to avoid sending it over the wire.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::didEvaluateJavaScript):
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginControllerProxy.messages.in:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::loadURL):
        (WebKit::NetscapePlugin::didEvaluateJavaScript):
        (WebKit::NetscapePlugin::manualStreamDidReceiveResponse):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::NetscapePluginStream):
        (WebKit::NetscapePluginStream::sendJavaScriptStream):
        * WebProcess/Plugins/Netscape/NetscapePluginStream.h:
        (WebKit::NetscapePluginStream::create):
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::didEvaluateJavaScript):
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performJavaScriptURLRequest):

2011-05-13  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Make some page() member functions const
        https://bugs.webkit.org/show_bug.cgi?id=60794

        * UIProcess/ChunkedUpdateDrawingAreaProxy.h: Make page() const.
        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::page): Make page() const.
        * UIProcess/WebInspectorProxy.h:
        (WebKit::WebInspectorProxy::page): Make page() const.
        * UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::page): Make page() const.
        * UIProcess/mac/ChunkedUpdateDrawingAreaProxyMac.mm:
        (WebKit::ChunkedUpdateDrawingAreaProxy::page): Make page() const.
        * UIProcess/qt/ChunkedUpdateDrawingAreaProxyQt.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::page): Make page() const.
        * UIProcess/win/ChunkedUpdateDrawingAreaProxyWin.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::page): Make page() const.

2011-05-13  Adam Roben  <aroben@apple.com>

        Load plugins in the order they're found

        Fixes <http://webkit.org/b/60788> <rdar://problem/9435787> REGRESSION (r69790): WebKit2
        doesn't prefer plugins in the additional plugins directory

        Reviewed by Anders Carlsson.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::addFromVector):
        Changed to use a ListHashSet instead of a HashSet to store the plugin paths.

2011-05-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Prune #includes from FrameView.h (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=60748

        - Update files that were depending on FrameView.h #including Frame.h or
          Page.h.

        * WebProcess/Plugins/PluginView.cpp:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        * WebProcess/WebPage/WebContextMenu.cpp:
        * WebProcess/WebPage/mac/AccessibilityWebPageObject.mm:

2011-05-13  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] Share the GTK+ key binding code between WebKit1 and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=59765

        Use the new KeyBindingTranslator class from WebCore/platform/gtk. With this utility
        class we can now share the code with WebKit2.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::PageClientImpl): No longer need to initialize keybinding code.
        (WebKit::PageClientImpl::getEditorCommandsForKeyEvent): Use the new utility class.
        * UIProcess/API/gtk/PageClientImpl.h: Remove unnecessary members. Add utility class member.

2011-05-12  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Antti Koivisto.

        Part of WebCore should use CFNetwork-based loader on Mac
        https://bugs.webkit.org/show_bug.cgi?id=51836

        Use CFRunLoop when using CFNetwork.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformInitialize):

2011-05-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        WebProcess sandbox denies file:/// accesses after you navigate to a nonexistent file
        <rdar://problem/9427752>
        https://bugs.webkit.org/show_bug.cgi?id=60745

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::SandboxExtensionTracker::didStartProvisionalLoad):
        Don't attempt to re-use a non-existent committed sandbox extension. This can
        happen when the previous load was file: url, but did not require an extension,
        such as an error page.

2011-05-12  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Regression caused by changeset 86281
        https://bugs.webkit.org/show_bug.cgi?id=60712
        <rdar://problem/9427970>

        Removed the condition variable. [NSSpellChecker dismissCorrectionIndicatorForView:] is blocking.
        So handleAcceptedReplacement() triggered by dismissInternal() will return before dismissInternal()
        returns. So we don't need to use the condition to coordinate between these two function. In fact,
        all callbacks are delivered on main thread. We don't really need any locking here.

        Since now we don't have distinction between dismiss() and dismissSoon(). dismissSoon() has
        been removed.

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::dismissCorrectionPanelSoon):
        * UIProcess/mac/CorrectionPanel.h:
        * UIProcess/mac/CorrectionPanel.mm:
        (WebKit::CorrectionPanel::CorrectionPanel):
        (WebKit::CorrectionPanel::show):
        (WebKit::CorrectionPanel::dismiss):
        (WebKit::CorrectionPanel::dismissInternal):
        (WebKit::CorrectionPanel::handleAcceptedReplacement):

2011-05-12  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Implement plugin quirk for Mozilla user agent for older Flash
        https://bugs.webkit.org/show_bug.cgi?id=60726
        <rdar://problem/8470824>
        
        Implement the quirk for versions of Flash before v10 that only request windowless plugins
        if we use a Mozilla user agent.

        * Shared/Plugins/Netscape/win/NetscapePluginModuleWin.cpp:
        (WebKit::NetscapePluginModule::determineQuirks): If we have a plugin that handles the
            "application/x-shockwave-flash" MIME type with a version less than 10, tell it to use
            the Mozilla user agent.
        * Shared/Plugins/PluginQuirks.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::userAgent): Add an early return if the plugin uses the Mozilla user
            agent.
        * win/WebKit2.vcproj: Add PluginQuirks.h.

2011-05-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Simon Fraser.

        PluginView::invalidateRect doesn't work for transformed plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=60727
        <rdar://problem/9331244>

        Ask the RenderObject to repaint the plug-in instead of using invalidateContentsAndWindow.
        This matches what we do in WebKit1.

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

2011-05-12  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Darin Adler.

        [Windows WebKit2] Use cookies set in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=60274

        Properly handle the case where there is no serialized default storage session by not trying
        to encode or decode 0, while still making sure to decode any valid storage session.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        (WebKit::WebProcessCreationParameters::encode):
        Only encode the storage session if there is one to encode.
        (WebKit::WebProcessCreationParameters::decode):
        Only decode the storage session there is one to decode.
        * Shared/WebProcessCreationParameters.h:

2011-05-11  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Anders Carlsson.

        After relaunching an unresponsive web process, web page stops responding to mouse movement
        https://bugs.webkit.org/show_bug.cgi?id=60669
        <rdar://problem/9409934>

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::processDidCrash): Set m_processingMouseMoveEvent to false when the WebProcess
            crashes.

2011-05-10  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Darin Adler.

        Perform some forward declarations suggested by include-what-you-use
        https://bugs.webkit.org/show_bug.cgi?id=60545

        * WebProcess/WebPage/mac/WebPageMac.mm:

2011-05-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        Fix the build with ENABLE_PLUGIN_PROCESS
        https://bugs.webkit.org/show_bug.cgi?id=60628

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::initialize): Move the call to
        pluginController->isAcceleratedCompositingEnabled() to a #ifdef block.
        * WebProcess/Plugins/PluginProxy.h: Add include for <WebCore/IntRect.h>.

2011-05-11  Damian Kaleta  <dkaleta@apple.com>

        Reviewed by Brady Eidson.

        Need a new API that will try to restore the scrollbars' position, when navigating in the back/forward history
        https://bugs.webkit.org/show_bug.cgi?id=60674

        * UIProcess/API/C/WKPage.cpp:
        (WKPageTryRestoreScrollPosition):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::tryRestoreScrollPosition):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::tryRestoreScrollPosition):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

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

        Reviewed by Gavin Barraclough.

        WebKit2 doesn't build on Mac with strict PassOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=60655

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::handleMessageDelayed):
        Add explicit adoptPtr to indicate that the constructor is taking ownership.

2011-05-11  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Steve Falkenburg.

        [Windows WebKit2] Use cookies set in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=60274

        Share the default storage session between the UI and Web Processes.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        Only encode the session parameter if it is valid.
        (WebKit::WebProcessCreationParameters::decode):
        Don't try to decode a null session data. 
        * Shared/WebProcessCreationParameters.h:
        Add a parameter for a serialized default storage session, used only on Windows.

        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::decodeResourceRequest):
        Make sure to set the current storage session on any requests used by the Web
        Process before CFNetwork has to do anything with them, in order for CFNetwork to avoid
        doing anything with the Web Process's default storage session.

        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):
        Serialize the default storage session in the UI Process and add it to the
        WebProcessCreationParameters.

        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::cachedResponseForURL):
        Use the cache associated with the current storage session and make sure the request has the
        current storage session set on it before doing anything with it.

        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformSetCacheModel):
        Use the default storage session.
        (WebKit::WebProcess::platformClearResourceCaches):
        Ditto.
        (WebKit::WebProcess::platformInitializeWebProcess):
        Deserialize the default storage session passed in by the UI Process and hand it to the
        ResourceHandle.

2011-05-11  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        CorrectionPanel sometimes hangs in dismissSoon().
        https://bugs.webkit.org/show_bug.cgi?id=60599
        <rdar://problem/9313628>

        Make sure dismissSoon() won't wait indefinitely if handleAcceptedReplacement() sets m_resultForSynchronousDismissal
        to nil. Added a designated variable m_isDismissing, instead of piggy-backing m_resultForSynchronousDismissal,
        for condition checking.

        * UIProcess/mac/CorrectionPanel.h:
        * UIProcess/mac/CorrectionPanel.mm:
        (WebKit::CorrectionPanel::CorrectionPanel):
        (WebKit::CorrectionPanel::show):
        (WebKit::CorrectionPanel::dismissSoon):
        (WebKit::CorrectionPanel::dismissInternal):
        (WebKit::CorrectionPanel::handleAcceptedReplacement):

2011-05-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86255.
        http://trac.webkit.org/changeset/86255
        https://bugs.webkit.org/show_bug.cgi?id=60660

        REGRESSION (r86255): Lots of tests crashing in
        CFWriteStreamCreateWithAllocatedBuffers on Windows 7 Release
        (WebKit2 Tests) (Requested by aroben on #webkit).

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::decodeResourceRequest):
        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::cachedResponseForURL):
        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformSetCacheModel):
        (WebKit::WebProcess::platformClearResourceCaches):
        (WebKit::WebProcess::platformInitializeWebProcess):

2011-05-11  Adam Roben  <aroben@apple.com>

        Don't notify the plugin when a targeted javascript: URL request completes

        This matches Mozilla and WebKit1.

        Fixes <http://webkit.org/b/60568> <rdar://problem/8610657> REGRESSION (WebKit2): Flash
        plugin doesn't appear on a hanes.com page

        Test: plugins/get-targeted-javascript-url.html

        Reviewed by Anders Carlsson.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performJavaScriptURLRequest): Don't call back to the plugin if the
        request had a target.

2011-05-11  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Steve Falkenburg.

        [Windows WebKit2] Use cookies set in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=60274

        Share the default storage session between the UI and Web Processes.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        Add a parameter for a serialized default storage session, used only on Windows.

        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::decodeResourceRequest):
        Make sure to set the current storage session on any requests used by the Web
        Process before CFNetwork has to do anything with them, in order for CFNetwork to avoid
        doing anything with the Web Process's default storage session.

        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):
        Serialize the default storage session in the UI Process and add it to the
        WebProcessCreationParameters.

        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::cachedResponseForURL):
        Use the cache associated with the current storage session and make sure the request has the
        current storage session set on it before doing anything with it.

        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformSetCacheModel):
        Use the default storage session.
        (WebKit::WebProcess::platformClearResourceCaches):
        Ditto.
        (WebKit::WebProcess::platformInitializeWebProcess):
        Deserialize the default storage session passed in by the UI Process and hand it to the
        ResourceHandle.

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

        Reviewed by Adam Roben.

        WebKit2 should tell app that is unresponsive in more cases
        <rdar://problem/9110151>
        https://bugs.webkit.org/show_bug.cgi?id=60608

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::didUpdateBackingStoreState):
        (WebKit::DrawingAreaProxyImpl::sendUpdateBackingStoreState):
        Invoke the responsiveness time when forcing a backing store update
        to catch the cases of activating tabs, resizing the window, etc.

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

        Try to fix the WinCairo build.

        * Shared/ShareableBitmap.h: Correctly include RefPtrCairo here and
        guard it with USE(CAIRO) instead of PLATFORM(CAIRO).

2011-05-11  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.

        <https://bugs.webkit.org/show_bug.cgi?id=60631>
        <rdar://problem/9420520>
        
        WebKit2 doesn't clear the pendingAPIRequestURL on in-page anchor navigation [60631]

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
        Call clearPendingAPIRequestURL().

2011-05-11  Adam Roben  <aroben@apple.com>

        Turn on strict PassOwnPtr on Windows

        Fixes <http://webkit.org/b/60632> Windows should build with strict PassOwnPtr enabled

        Reviewed by Adam Barth.

        * WebProcess/FullScreen/win/WebFullScreenManagerWin.cpp:
        (WebKit::WebFullScreenManagerWin::setRootFullScreenLayer): Use nullptr instead of 0.

2011-05-11  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Darin Adler.

        [WebKit2] exceededDatabaseQuota function on WKPageUIClient needs to provide information
        about the usage for both the origin overall and the database in question.
        https://bugs.webkit.org/show_bug.cgi?id=60573

        Add the currentOriginUsage parameter.

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::exceededDatabaseQuota):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::exceededDatabaseQuota):
        * UIProcess/WebUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::exceededDatabaseQuota):

2011-05-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Assertion failure in JSC::Structure::typeInfo when reloading weather.com video page
        https://bugs.webkit.org/show_bug.cgi?id=60580

        The plugin object map was incorrect trying to implement a weak map itself using
        destructors.  Switch to a WeakGCMap and the problem is fixed.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::~JSNPObject):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::getOrCreateJSObject):
        (WebKit::NPRuntimeObjectMap::invalidate):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.h:

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

        Reviewed by Dan Bernstein.

        Yet more quarantine related sandbox denial when downloading files
        <rdar://problem/9397494>

        * WebProcess/com.apple.WebProcess.sb:

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

        Reviewed by Anders Carlsson.

        WebKit2: Coalesced wheel events should be saved to hand back to the client on unhandled return
        https://bugs.webkit.org/show_bug.cgi?id=60584

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleWheelEvent):
        (WebKit::canCoalesce):
        (WebKit::coalesce):
        (WebKit::coalescedWheelEvent):
        (WebKit::WebPageProxy::didReceiveEvent):
        (WebKit::WebPageProxy::processDidCrash):
        Reworks coalescing/merging code to happen on didReceiveEvent rather than in
        handleWheelEvent. This means we now store the pending events in a queue, and
        pull them out when we can.

        * UIProcess/WebPageProxy.h:
        Change single event containers to contain all pending/merged/coalesced events
        and remove unused flag.

2011-05-09  Jeremy Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Cancelling full screen before animation completes leads to full screen window staying up.
        https://bugs.webkit.org/show_bug.cgi?id=60531

        Remove the (unused) _isAnimating ivar and replace it with two ivars: _isEnteringFullScreen and 
        _isExitingFullScreen.  These will ensure each is only called once per full screen request, and
        that if one exit/enter request interrupts another, that the required functions are called in 
        order.

        * UIProcess/mac/WKFullScreenWindowController.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController enterFullScreen:]): Removed _isAnimating.
        (-[WKFullScreenWindowController exitFullScreen]): Ditto.
        (-[WKFullScreenWindowController beganEnterFullScreenAnimation]): Gate on _isEnteringFullScreen. Check _isExitingFullScreen
            and call [self finishedExitFullScreenAnimation:] if necessary.
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]): Gate on _isEnteringFullScreen.
        (-[WKFullScreenWindowController beganExitFullScreenAnimation]): Gate on _isExitingFullScreen. Check _isEnteringFullScreen
            and call [self finishedEnterFullScreenAnimation:] if necessary.
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]): Gate on _isExitingFullScreen.

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=60582
        Crash switching overlay/non-overlay scrollbar preference still possible
        -and corresponding-
        <rdar://problem/9323983>

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

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

        Reviewed by Anders Carlsson.

        WebKit2: Windows clients need to know if the page overlay is installed
        https://bugs.webkit.org/show_bug.cgi?id=60562
        <rdar://problem/8940164>
        
        Until we move all the UI for find on page into WebKit on Windows (specifically, drawing the find bouncy),
        WebKit clients need to know whether WebKit is drawing the page overlay or not.  Keep track of this in
        the WebPageProxy in the UI process and provide a WebKit2 API to retrieve this information.

        * UIProcess/API/C/win/WKView.cpp:
        (WKViewIsPageOverlayInstalled): Added.
        * UIProcess/API/C/win/WKView.h: Added WKViewIsPageOverlayInstalled().
        
        * UIProcess/PageClient.h: Added didInstallOrUninstallPageOverlay().
        * UIProcess/WebPageProxy.h: Added didInstallOrUninstallPageOverlay().
        * UIProcess/WebPageProxy.messages.in: Added DidInstallOrUninstallPageOverlay.
        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::WebPageProxy::didInstallOrUninstallPageOverlay): Added.
        
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView): Initialize m_pageOverlayInstalled.
        (WebKit::WebView::didInstallOrUninstallPageOverlay): Added.
        * UIProcess/win/WebView.h: Added didInstallOrUninstallPageOverlay() and m_pageOverlayInstalled.
        (WebKit::WebView::pageOverlayInstalled): Added.
        
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::installPageOverlay): Send message to UI process to tell it the page overlay is installed.
        (WebKit::WebPage::uninstallPageOverlay): Send message to UI process to tell it the page overlay is uninstalled.

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

        Reviewed by Adam Roben.

        Remove incorrect ASSERTs from CoreIPC::Connection::processIncomingSyncReply
        https://bugs.webkit.org/show_bug.cgi?id=60567
        <rdar://problem/9377845>

        It is possible to receive an incoming sync reply that is for a request we don't know about.
        This could happen if the sync message send timed out for example.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::processIncomingSyncReply):

2011-05-05  Brent Fulgham  <bfulgham@webkit.org> and Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Anders Carlsson.

        [Cairo][WebKit2] Add an implementation of ShareableBitmap for Cairo
        https://bugs.webkit.org/show_bug.cgi?id=60293

        * GNUmakefile.am: Remove ShareableBitmapGtk in favor of ShareableBitmapCairo.
        * Shared/ShareableBitmap.h: Added a couple Cairo-specific declarations.
        * Shared/cairo/ShareableBitmapCairo.cpp:
        (WebKit::ShareableBitmap::createGraphicsContext): Added.
        (WebKit::ShareableBitmap::paint): Added.
        (WebKit::ShareableBitmap::createCairoSurface): Added.
        (WebKit::ShareableBitmap::releaseSurfaceData): Added.

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

        Reviewed by Sam Weinig.

        Extra sign in required to view video on MobileMe Gallery album
        https://bugs.webkit.org/show_bug.cgi?id=60560

        Implement NPN_GetAuthenticationInfo.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::getAuthenticationInfo):
        Send a GetAuthenticationInfo message to the web process.

        * PluginProcess/PluginControllerProxy.h:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::initializeProtectionSpace):
        Initialize a WebCore::ProtectionSpace object from NPAPI parameters.

        (WebKit::NPN_GetAuthenticationInfo):
        Make a ProtectionSpace object and then call NetscapePlugin::getAuthenticationInfo. 
        Finally, copy the username/password and pass them back to the plug-in.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::getAuthenticationInfo):
        Call the plug-in controller.

        * WebProcess/Plugins/PluginController.h:
        Add getAuthenticationInfo pure virtual member function.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::getAuthenticationInfo):
        Call the real plug-in controller's getAuthenticationInfo member function.

        * WebProcess/Plugins/PluginProxy.messages.in:
        Add GetAuthenticationInfo message.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::getAuthenticationInfo):
        Try to get the authentication info from the credential storage. Failing that,
        get it from the persistent credential storage.

2011-05-10  Adam Roben  <aroben@apple.com>

        Use FontSmoothingLevelWindows by default on Windows

        Fixes <http://webkit.org/b/60557> REGRESSION (r86077): Web Inspector uses CG font rendering
        in WebKit2 on Windows

        Reviewed by Darin Adler.

        * Shared/WebPreferencesStore.h: Added and deployed a new DEFAULT_WEBKIT_FONT_SMOOTHING_LEVEL
        macro to let Windows have a different default font smoothing level from other platforms.

        * UIProcess/API/C/WKPreferencesPrivate.h: Updated the comment about the default font
        smoothing level.

2011-05-06  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Darin Adler.

        Fix some unnecessary includes in headers
        https://bugs.webkit.org/show_bug.cgi?id=60388

        * WebProcess/FullScreen/WebFullScreenManager.cpp:

2011-05-09  Jeremy Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Command-~/Exposé to another window while <video> is in full screen, breaks Safari, eventually leading to crash
        https://bugs.webkit.org/show_bug.cgi?id=60496

        When animating into and out of full screen, order out and back in the original webView window,
        disabling animations when necessary. The beganExitFullScreenAnimation method was targeting the wrong window,
        as the webView is hosted in the full screen window when we ask for it's parent window.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]):
        (-[WKFullScreenWindowController beganExitFullScreenAnimation]):

2011-05-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        A WKView with plug-ins paints white when first moved into a window
        https://bugs.webkit.org/show_bug.cgi?id=60511

        The UI process’s wait for DidUpdateBackingStoreState would always time out because the Web process
        was blocked on a synchronous message the UI process trying to get the connections for plug-ins in
        the view. This is avoided by deferring the call to Page::setCanStartMedia().

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Initialize the new m_setCanStartMediaTimer.
        (WebKit::WebPage::setCanStartMediaTimerFired): Added. Calls setCanStartMedia(true) when the timer
        fires.
        (WebKit::WebPage::setIsInWindow): When going out of a window, stop the timer. When going into a
        window, start it.
        * WebProcess/WebPage/WebPage.h:

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

        Reviewed by Dan Bernstein.

        Crash when sending a sync message to a crashed web process
        https://bugs.webkit.org/show_bug.cgi?id=60514
        <rdar://problem/9281270>

        Change WebProcessProxy::sendSync to return false if there's no connection.

        Audit all WebProcessProxy::sendSync call sites to initialize reply parameters.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::firstRectForCharacterInSelectedRange):
        (WebKit::WebPageProxy::getSelectedText):
        (WebKit::WebPageProxy::gestureWillBegin):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::sendSync):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::insertText):
        (WebKit::WebPageProxy::getMarkedRange):
        (WebKit::WebPageProxy::getSelectedRange):
        (WebKit::WebPageProxy::characterIndexForPoint):
        (WebKit::WebPageProxy::executeKeypressCommands):
        (WebKit::WebPageProxy::writeSelectionToPasteboard):
        (WebKit::WebPageProxy::readSelectionFromPasteboard):

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

        Reviewed by Sam Weinig.

        Create a plug-in's MIME types preferences plist if it doesn't exist.
        https://bugs.webkit.org/show_bug.cgi?id=57204
        <rdar://problem/9195048>

        Spawn a plug-in process and let it create the plist. For now, we'll do this on the
        main thread since it's a rare one-time computation and we have an API function,
        WKFrameCanShowMIMEType, which would have to block anyway.

        * PluginProcess/mac/PluginProcessMainMac.mm:
        (WebKit::PluginProcessMain):
        If -createPluginMIMETypesPreferences is one of the command line argument keys,
        the plug-in path will be the argument value. Call NetscapePluginModule::createPluginMIMETypesPreferences
        to create the preferences file and then exit.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::contentsOfPropertyListAtURL):
        Move code to read a property list out into a helper function.

        (WebKit::getMIMETypesFromPluginBundle):
        If there's no property list file, try to create one.

        (WebKit::NetscapePluginModule::createPluginMIMETypesPreferences):
        Load the plug-in, find the BP_CreatePluginMIMETypesPreferences and call it.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::createPropertyListFile):
        Spawn a plug-in process and pass the -createPluginMIMETypesPreferences flag to it and then wait
        for it to exit.

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

        Reviewed by Sam Weinig.

        Move EnvironmentVariables out into its own .cpp file
        https://bugs.webkit.org/show_bug.cgi?id=60507

        * UIProcess/Launcher/mac/EnvironmentVariables.cpp: Added.
        (WebKit::EnvironmentVariables::EnvironmentVariables):
        (WebKit::EnvironmentVariables::~EnvironmentVariables):
        (WebKit::EnvironmentVariables::set):
        (WebKit::EnvironmentVariables::get):
        (WebKit::EnvironmentVariables::appendValue):
        (WebKit::EnvironmentVariables::valueIfVariableHasName):
        (WebKit::EnvironmentVariables::createStringForVariable):
        (WebKit::EnvironmentVariables::copyEnvironmentVariables):
        * UIProcess/Launcher/mac/EnvironmentVariables.h: Added.
        (WebKit::EnvironmentVariables::environmentPointer):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        * WebKit2.xcodeproj/project.pbxproj:

2011-05-09  Adam Roben  <aroben@apple.com>

        Always set the font rendering mode based on preference values

        WebPage::platformInitialize and WebPage::platformPreferencesDidChange were fighting over the
        font rendering mode. The platformInitialize code predates preference-based font rendering
        mode support, and is now redundant and incorrect.

        Fixes <http://webkit.org/b/60494> WebKit2 uses GDI text instead of CG text when
        FontSmoothing preference is set to kWKFontSmoothingLevelNoSubpixelAntiAliasing in a .plist
        on disk

        Reviewed by Sam Weinig.

        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::platformInitialize): Removed code to set the font rendering mode.
        platformPreferencesDidChange will take care of this for us.

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

        Reviewed by John Sullivan.

        Clean up NetscapePluginModule::getPluginInfo
        https://bugs.webkit.org/show_bug.cgi?id=60486

        Make all 'get' functions take a PluginInfoStore::Plugin reference, since getPluginInfoFromPropertyLists
        is going to need it to know the path and plug-in architecture.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::getPluginArchitecture):
        (WebKit::getPluginInfoFromPropertyLists):
        (WebKit::getPluginInfoFromCarbonResources):
        (WebKit::NetscapePluginModule::getPluginInfo):

2011-05-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/9005982> REGRESSION (r85780): Flash of white when a WKView with composited content moves on-screen
        https://bugs.webkit.org/show_bug.cgi?id=60488

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::sendDidUpdateBackingStoreState): Update m_compositingAccordingToProxyMessages,
        since the DidUpdateBackingStoreState message also changes the compositing state in the proxy.

2011-05-09  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        Build fix for WebKit 2 on Qt

        Qt treats warnings as errors so it does not build with unused variables. This patch removed two unused variable in WebKit 2.

        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::createTiles):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::~PluginView):

2011-05-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Timothy Hatcher.

        <rdar://problem/9365358> REGRESSION (WebKit2): When clicking in the page, Find overlay fades out instead of disappearing immediately

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::hideFindUI): Do not fade out the overlay.

2011-05-07  Dan Bernstein  <mitz@apple.com>

        Avoid copying a header file into the WebKit2 framework wrapper.

        * WebKit2.xcodeproj/project.pbxproj: Corrected the target membership of HTTPCookieAcceptPolicy.h.

2011-05-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86016.
        http://trac.webkit.org/changeset/86016
        https://bugs.webkit.org/show_bug.cgi?id=60445

        caused crashes on the WK2 Windows bots (Requested by
        jessieberlin on #webkit).

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::decodeResourceRequest):
        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::cachedResponseForURL):
        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformSetCacheModel):
        (WebKit::WebProcess::platformClearResourceCaches):
        (WebKit::WebProcess::platformInitializeWebProcess):

2011-05-07  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Steve Falkenburg.

        [Windows WebKit2] Use cookies set in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=60274

        Share the default storage session between the UI and Web Processes.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        Add a parameter for a serialized default storage session, used only on Windows.

        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::decodeResourceRequest):
        Make sure to set the current storage session on any requests used by the Web
        Process before CFNetwork has to do anything with them, in order for CFNetwork to avoid
        doing anything with the Web Process's default storage session.

        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):
        Serialize the default storage session in the UI Process and add it to the
        WebProcessCreationParameters.

        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::cachedResponseForURL):
        Use the cache associated with the current storage session and make sure the request has the
        current storage session set on it before doing anything with it.

        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformSetCacheModel):
        Use the default storage session.
        (WebKit::WebProcess::platformClearResourceCaches):
        Ditto.
        (WebKit::WebProcess::platformInitializeWebProcess):
        Deserialize the default storage session passed in by the UI Process and hand it to the
        ResourceHandle.

2011-05-07  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Adam Roben.

        [Qt] Webkit2 PLUGIN_ARCHITECTURE(UNSUPPORTED) configuration broken by r85961
        https://bugs.webkit.org/show_bug.cgi?id=60420

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

2011-05-06  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] [WebKit2] WebView::windowToScreen needs an implementation
        https://bugs.webkit.org/show_bug.cgi?id=55960

        Add an implementation of PageClient::windowToScreen for GTK+ WebKit2 using
        the newly abstracted widget to screen coordinate translation code in WebCore.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::windowToScreen): Added implementation.

2011-05-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Simplify the PluginInfoStore interface
        https://bugs.webkit.org/show_bug.cgi?id=60406

        Just expose a single API for getting a list of plug-ins from the info store,
        PluginInfoStore::plugins and remove PluginInfoStore::getPlugins and PluginInfoStore::getPluginPaths.

        Also, change the WebContext::pluginInfoStore() getter to return a reference.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::plugins):
        * UIProcess/Plugins/PluginInfoStore.h:
        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::getPluginProcessConnection):
        * UIProcess/Plugins/PluginProcessManager.h:
        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
        (WebKit::WebPluginSiteDataManager::GetSitesWithDataState::GetSitesWithDataState):
        (WebKit::WebPluginSiteDataManager::ClearSiteDataState::ClearSiteDataState):
        (WebKit::WebPluginSiteDataManager::getSitesWithData):
        (WebKit::WebPluginSiteDataManager::clearSiteData):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::getPlugins):
        (WebKit::WebContext::getPluginPath):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::pluginInfoStore):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::canShowMIMEType):

2011-05-06  Anders Carlsson  <andersca@apple.com>

        Windows build fix.

        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        (WebKit::PluginInfoStore::shouldUsePlugin):

2011-05-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Make more PluginInfoStore member functions static
        https://bugs.webkit.org/show_bug.cgi?id=60401

        This is a first step towards making PluginInfoStore thread safe.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::loadPluginsIfNecessary):
        (WebKit::PluginInfoStore::loadPlugin):
        * UIProcess/Plugins/PluginInfoStore.h:
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::shouldUsePlugin):
        * UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp:
        (WebKit::PluginInfoStore::shouldUsePlugin):
        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        (WebKit::PluginInfoStore::shouldUsePlugin):

2011-05-06  Adam Roben  <aroben@apple.com>

        Mac build fix

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm: Added a
        missing #import.

2011-05-06  Adam Roben  <aroben@apple.com>

        Show/hide windowed plugins according to the plugin element's visibility CSS property

        Fixes <http://webkit.org/b/60285> <rdar://problem/9152400> REGRESSION (WebKit2): A white
        rectangle covers up important UI elements when composing a new message at mail.yahoo.com
        with BrowserPlus! plug-in installed

        Reviewed by Anders Carlsson.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::isPluginVisible):
        * PluginProcess/PluginControllerProxy.h:
        Stubbed out.

        * Shared/win/WindowGeometry.cpp:
        (WebKit::WindowGeometry::WindowGeometry):
        (WebKit::WindowGeometry::encode):
        (WebKit::WindowGeometry::decode):
        * Shared/win/WindowGeometry.h:
        Added visible member.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::updateChildWindowGeometries): Show or hide the window as specified in the
        geometry.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::visibilityDidChange):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        Added. Calls through to platform-specific code.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformVisibilityDidChange):
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePlugin::platformVisibilityDidChange):
        Stubbed out.

        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::NetscapePlugin::platformGeometryDidChange): Moved most logic from here to
        scheduleWindowedGeometryUpdate.
        (WebKit::NetscapePlugin::platformVisibilityDidChange): Added. Calls through to
        scheduleWindowedGeometryUpdate.
        (WebKit::NetscapePlugin::scheduleWindowedGeometryUpdate): Added. Code came from
        platformGeometryDidChange. Now also records whether the plugin element is visible.

        * WebProcess/Plugins/Plugin.h: Added visibilityDidChange.

        * WebProcess/Plugins/PluginController.h: Added isPluginVisible.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::visibilityDidChange):
        * WebProcess/Plugins/PluginProxy.h:
        Stubbed out.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::show):
        (WebKit::PluginView::hide):
        Added. These Widget overrides were based on WebCore's PluginView class.

        (WebKit::PluginView::viewVisibilityDidChange): Added. Similar to viewGeometryDidChange.
        Calls down to the plugin if it's been initialized.
        (WebKit::PluginView::isPluginVisible): Added. Just calls up to the Widget base class.

        * WebProcess/Plugins/PluginView.h: Updated for PluginController changes.

2011-05-06  Adam Roben  <aroben@apple.com>

        Add a WindowGeometry struct for use in the ScheduleChildWindowGeometryUpdate message

        This will make it easier to add more info to this message in the future (like whether the
        window is visible).

        Fixes <http://webkit.org/b/60374> Adding parameters to ScheduleChildWindowGeometryUpdate
        message is tedious

        Reviewed by Anders Carlsson.

        * Scripts/webkit2/messages.py:
        (struct_or_class): Added WindowGeometry to the list of structs.

        * Shared/win/WindowGeometry.cpp: Added.
        * Shared/win/WindowGeometry.h: Added.

        * win/WebKit2.vcproj: Added new files.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::WebPageProxy::scheduleChildWindowGeometryUpdate):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::scheduleChildWindowGeometryUpdate):
        (WebKit::WebView::updateChildWindowGeometries):
        * UIProcess/win/WebView.h:
        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::NetscapePlugin::platformGeometryDidChange):
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::scheduleWindowedPluginGeometryUpdate):
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::scheduleChildWindowGeometryUpdate):
        Changed to use WindowGeometry.

2011-05-06  David Kilzer  <ddkilzer@apple.com>

        Remove unused GCC_ENABLE_FIX_AND_CONTINUE and ZERO_LINK settings

        Reviewed by Jon Honeycutt.

        This fixes an Xcode 4 warning about using obsolete settings.

        * WebKit2.xcodeproj/project.pbxproj: Removed
        GCC_ENABLE_FIX_AND_CONTINUE and ZERO_LINK settings.

2011-05-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement NetscapePlugin::platformPaint for GTK platform
        https://bugs.webkit.org/show_bug.cgi?id=60368

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

2011-05-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        Share PluginInfoStore implementation between Qt and GTK ports
        https://bugs.webkit.org/show_bug.cgi?id=60366

        * GNUmakefile.am:
        * UIProcess/Plugins/gtk/PluginInfoStoreGtk.cpp: Removed.
        * UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp: Renamed from Source/WebKit2/UIProcess/Plugins/qt/PluginInfoStoreQt.cpp.
        (WebKit::PluginInfoStore::pluginsDirectories):
        (WebKit::PluginInfoStore::pluginPathsInDirectory):
        (WebKit::PluginInfoStore::individualPluginPaths):
        (WebKit::PluginInfoStore::getPluginInfo):
        (WebKit::PluginInfoStore::shouldUsePlugin):
        * WebKit2.pro:

2011-05-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebKit2 GTK build after r85860.

        * UIProcess/API/gtk/PageClientImpl.h: Fix typo.

2011-05-05  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Dimitri Glazkov.

        Implement LayoutTestController::pseudoShadowId()
        https://bugs.webkit.org/show_bug.cgi?id=60034

        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleShadowPseudoId):
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::elementRemoveShadowRoot):
        (WebKit::InjectedBundleNodeHandle::elementShadowPseudoId):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:

2011-05-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        REGRESSION (r85689): Unresponsive timer firing when closing background tabs
        <rdar://problem/9385988>
        https://bugs.webkit.org/show_bug.cgi?id=60325

        When calling WKPageTryClose(), if the page close succeeded, the notification to stop
        the responsiveness timer would be dropped because the page was closed by the time it
        got to the UIProcess.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::closePage):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        Add parameter to closePage stipulating whether or not to stop the responsiveness timer.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::tryClose):
        (WebKit::WebPage::sendClose):
        Instead of sending a StopResponsivenessTimer message after sending the ClosePage message,
        add a bit to the ClosePage message.

2011-05-05  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        WebKit2 part of <rdar://problem/9155590> Broken animation in iAd producer

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Initialize wkExecutableWasLinkedOnOrBeforeSnowLeopard.

2011-05-05  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] [WK2] Add method to disable plugins under WK2
        https://bugs.webkit.org/show_bug.cgi?id=57796

        * config.h: Allow PLUGIN_ARCHITECTURE_UNSUPPORTED to be defined on build command line

2011-05-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        When an underlay surface is active, paint normal web contents in a transparency layer
        https://bugs.webkit.org/show_bug.cgi?id=60296

        In order for the page contents to correctly blend with the underlay, the page contents
        needs to be painted in a transparency layer.

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

2011-05-05  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        WebKit2: Docking Web Inspector doesn't respect maximum inspector size
        https://bugs.webkit.org/show_bug.cgi?id=60294
        <rdar://problem/9388518>
        
        Before we place the inspector and the inspected views, make sure that we have constrained the height
        of the docked inspector. Putting the code here covers both when the inspector is initially attached 
        and when a window with the docked inspector is resized.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::inspectedViewFrameDidChange): Constrain the height before laying out the views.
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::onWebViewWindowPosChangingEvent): Ditto.

2011-05-05  Chang Shu  <cshu@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] Support PageGroup in QGraphicsWKView/QWKPage constructors
        https://bugs.webkit.org/show_bug.cgi?id=59638

        Added private constructors for class QGraphicsWKView and QWKPage to support
        WKPageGroupRef.

        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::QGraphicsWKView):
        (QGraphicsWKView::~QGraphicsWKView):
        (QGraphicsWKView::init):
        * UIProcess/API/qt/qgraphicswkview.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::QWKPagePrivate):
        (QWKPage::QWKPage):
        (QWKPage::~QWKPage):
        (QWKPage::init):
        * UIProcess/API/qt/qwkpage.h:
        * UIProcess/API/qt/qwkpage_p.h:

2011-05-05  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed build fix.

        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::cachedResponseDataForURL): Stub out
        implementation for cURL networking case.

2011-05-05  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Add didNotHandleWheelEvent callback to WKPageUIClient
        https://bugs.webkit.org/show_bug.cgi?id=60203
        
        Remove Windows-specific WebPageProxy::wheelEventNotHandled() member function and use
        didNotHandleWheelEvent callback in WKPageUIClient instead.  It turns out that just
        resending the wheel event to the parent window doesn't provide the client with enough context
        to know that WebKit has already attempted to handle the event.

        * UIProcess/API/C/WKPage.h: Added WKPageDidNotHandleWheelEventCallback typedef and didNotHandleWheelEvent to WKPageUIClient.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::didNotHandleWheelEvent): Added, but not implemented.
        * UIProcess/API/gtk/PageClientImpl.h: Added didNotHandleWheelEvent().
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage):Stubbed out didNotHandleWheelEvent callback.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveEvent): Call didNotHandleWheelEvent in WKPageUIClient if wheel event is not handled.
        * UIProcess/WebPageProxy.h: Removed wheelEventNotHandled().
        
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::implementsDidNotHandleWheelEvent): Added.
        (WebKit::WebUIClient::didNotHandleWheelEvent): Added.
        * UIProcess/WebUIClient.h: Added implementsDidNotHandleWheelEvent() and didNotHandleWheelEvent().

        * UIProcess/win/WebPageProxyWin.cpp: Removed wheelEventNotHandled().

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

        Reviewed by Martin Robinson.

        [GTK] Return correct GTK version for NPNVToolkit
        https://bugs.webkit.org/show_bug.cgi?id=60275

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue): Return always 2 for NPNVToolkit in GTK
        platform.

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

        Reviewed by Martin Robinson.

        [GTK] Make native events code more consistent
        https://bugs.webkit.org/show_bug.cgi?id=60258

        Make all other native events code follow the current keyboard
        events approach: use a GOwnPtr for the native event, and use
        const GdkEvent* in the API. We need to implement the copy
        constructors for native events to copy the gdk events with
        gdk_event_copy().

        * Shared/NativeWebMouseEvent.h:
        (WebKit::NativeWebMouseEvent::nativeEvent):
        * Shared/NativeWebWheelEvent.h:
        (WebKit::NativeWebWheelEvent::nativeEvent):
        * Shared/gtk/NativeWebKeyboardEventGtk.cpp:
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent):
        * Shared/gtk/NativeWebMouseEventGtk.cpp:
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent):
        * Shared/gtk/NativeWebWheelEventGtk.cpp:
        (WebKit::NativeWebWheelEvent::NativeWebWheelEvent):
        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::buttonForEvent):
        (WebKit::WebEventFactory::createWebMouseEvent):
        (WebKit::WebEventFactory::createWebWheelEvent):
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        * Shared/gtk/WebEventFactory.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseScrollEvent):

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

        Reviewed by Martin Robinson.

        [GTK] Module::load() should return true when g_module_open() returns a valid pointer
        https://bugs.webkit.org/show_bug.cgi?id=60261

        * Platform/gtk/ModuleGtk.cpp:
        (WebKit::Module::load):

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

        Unreviewed. Fix WebKit2 GTK build after r85808.

        * Shared/NativeWebWheelEvent.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseScrollEvent):

2011-05-04  Cris Neckar  <cdn@chromium.org>

        Reviewed by Adam Barth.

        Expose WebView directly through ChromeClient.
        https://bugs.webkit.org/show_bug.cgi?id=49902

        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebKit::WebChromeClient::webView):

2011-05-04  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Send unhandled wheel events to parent window on Windows
        https://bugs.webkit.org/show_bug.cgi?id=60220

        Keep track of wheel events using NativeWebWheelEvent instead of WebWheelEvent in WebPageProxy
        so we can send the native event to the parent window if WebKit doesn't handle it.

        * UIProcess/API/mac/WKView.mm: Use NativeWebWheelEvent instead of WebWheelEvent.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::wheelEvent): Use NativeWebWheelEvent instead of WebWheelEvent.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Removed initialization of obsolete m_processingWheelEvent member variable.
        (WebKit::coalesceWheelEvents): Use NativeWebWheelEvent instead of WebWheelEvent and add a note that this won't work if we ever enable MERGE_WHEEL_EVENTS. 
        (WebKit::WebPageProxy::handleWheelEvent): Use NativeWebWheelEvent instead of WebWheelEvent, keep track of the current event in m_currentlyProcessedWheelEvent.
        (WebKit::WebPageProxy::didReceiveEvent): Call wheelEventNotHandled() on Windows if wheel event is not handled.
        (WebKit::WebPageProxy::processDidCrash): Clear out m_currentlyProcessedWheelEvent.
        * UIProcess/WebPageProxy.h: Change handleWheelEvent() to take a NativeWebWheelEvent, added wheelEventNotHandled() on Windows, remove m_processingWheelEvent, add m_currentlyProcessedWheelEvent.

        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::WebPageProxy::wheelEventNotHandled): Added.
        
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::onWheelEvent): Use NativeWebWheelEvent instead of WebWheelEvent.

2011-05-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Add bundle API for making a page paint as the background of another page
        https://bugs.webkit.org/show_bug.cgi?id=60227

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetUnderlayPage):
        Call WebPage::setUnderlayPage.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):
        Null out the underlay page.

        (WebKit::WebPage::layoutIfNeeded):
        Layout the underlay page if necessary.

        (WebKit::WebPage::drawRect):
        Draw the underlay page.

2011-05-04  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt][Wk2][Symbian] Capabilities for Qt MiniBrowser and QtWebProcess on Symbian
        https://bugs.webkit.org/show_bug.cgi?id=59462

        * WebProcess.pro: Add Symbian OS capabilities to web process executable. Also enable
        data paging flag and prevent application's icon from showing up in the application grid. 

2011-05-04  Adam Roben  <aroben@apple.com>

        Clip and reposition windowed plugins when the UI process paints

        This ensures that their geometry updates in sync with the rest of the page.

        Most of this patch is just plumbing the scheduleWindowedPluginGeometryUpdate and
        scheduleChildWindowGeometryUpdate calls through from NetscapePlugin all the way over to
        WebView. I've tried to call out the other parts below.

        Fixes <http://webkit.org/b/60210> <rdar://problem/8483441> REGRESSION (WebKit2): Windowed
        plugins don't scroll at the same speed as the rest of the page

        Reviewed by Darin Adler and Anders Carlsson.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::WebPageProxy::scheduleChildWindowGeometryUpdate):
        Added plumbing.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::onPaintEvent): Update child windows before painting so that they will stay
        in sync with the rest of the page.
        (WebKit::WebView::scheduleChildWindowGeometryUpdate): Add this update information to the
        set of geometries to update on the next paint.
        (WebKit::setWindowRegion): Moved this helper function here from NetscapePluginWin.cpp.
        (WebKit::WebView::updateChildWindowGeometries): Update the size, position, and clip rects of
        all the child windows with scheduled geometry updates.

        * UIProcess/win/WebView.h: Added new members to track and update child window geometries.

        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::NetscapePlugin::platformPostInitialize): Don't show the window immediately. Let the
        UI process take care of it.
        (WebKit::NetscapePlugin::platformGeometryDidChange): Don't update the window's position or
        clip rect. Let the UI process take care of it.

        * WebProcess/Plugins/PluginController.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::scheduleWindowedPluginGeometryUpdate):
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::scheduleChildWindowGeometryUpdate):
        Added plumbing.

2011-05-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        WKView on Windows has no equivalent of Mac's -[WKView setDraws[Transparent]Background:]
        https://bugs.webkit.org/show_bug.cgi?id=52009
        <rdar://problem/8829746>

        Add and implement WKViewSetDrawsTransparentBackground on windows.

        * UIProcess/API/C/win/WKView.cpp:
        (WKViewSetDrawsTransparentBackground):
        (WKViewDrawsTransparentBackground):
        Call through to the WebPageProxy object.

        * UIProcess/API/C/win/WKView.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::drawPageBackground):
        Don't fill the rect with white if WebPageProxy::drawsBackground() or 
        WebPageProxy::drawsTransparentBackground() returns false. Because of limitations in Win32,
        both drawsBackground and drawsTransparentBackground are pretty much equivalent.

        (WebKit::WebView::paint):
        Pass the WebPageProxy object to drawPageBackground.

2011-05-04  Tao Bai  <michaelbai@chromium.org>

        Reviewed by David Kilzer.

        Populate touch-icon url to FrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=59143

        Respected the change of FrameLoaderClient.
        Added WebIconURL and WebIconType responding the new IconURL and IconType.
        Supported to get the multiple icon urls.

        * Configurations/FeatureDefines.xcconfig:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidChangeIcons):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2011-05-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Can't save a link from "Save Linked File to Download" popup menu
        https://bugs.webkit.org/show_bug.cgi?id=60190
        <rdar://problem/9367927>

        Make sure that suggestedFilenameForResourceWithURL and resourceDataForFrame both look
        in the cache if the resource can't be found in the current web page. This matches WebKit1.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::suggestedFilenameForResourceWithURL):
        Call WebPage::cachedSuggestedFilenameForURL if we can't find a resource in the page.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::resourceDataForFrame):
        Move code out from getResourceDataFromFrame.

        (WebKit::WebPage::getResourceDataFromFrame):
        Call resourceDataForFrame first and then cachedResponseDataForURL.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::platformHasLocalDataForURL):
        (WebKit::WebPage::cachedResponseMIMETypeForURL):
        (WebKit::WebPage::platformCanHandleRequest):
        (WebKit::WebPage::cachedSuggestedFilenameForURL):
        (WebKit::WebPage::cachedResponseDataForURL):
        Add stubs.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::cachedResponseForURL):
        Add helper function.

        (WebKit::WebPage::cachedSuggestedFilenameForURL):
        (WebKit::WebPage::cachedResponseMIMETypeForURL):
        (WebKit::WebPage::cachedResponseDataForURL):
        Call helper function.

        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (WebKit::WebPage::platformHasLocalDataForURL):
        (WebKit::WebPage::cachedResponseMIMETypeForURL):
        (WebKit::WebPage::platformCanHandleRequest):
        (WebKit::WebPage::cachedSuggestedFilenameForURL):
        (WebKit::WebPage::cachedResponseDataForURL):
        Add stubs.
        
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::cachedResponseForURL):
        Add helper function.

        (WebKit::WebPage::platformHasLocalDataForURL):
        (WebKit::WebPage::cachedResponseMIMETypeForURL):
        (WebKit::WebPage::cachedSuggestedFilenameForURL):
        (WebKit::WebPage::cachedResponseDataForURL):
        Call helper function.

2011-05-04  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        WebKit2 flashes if entering and exiting compositing rapidly
        https://bugs.webkit.org/show_bug.cgi?id=60198
        
        If a page enters then immediately leaves compositing mode, the
        DrawingAreaImpl would send a message to the UI process that it
        had entered compositing even after all the layers had been torn
        down. Fix this by never sending the 'enter' message if we're
        waiting for the 'exit' timer to fire.
        
        Also fix an assertion in the UI process caused by sending mismatched
        'enter' and 'leave' messages by keeping track of which messages
        we've sent.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        (WebKit::DrawingAreaImpl::layerHostDidFlushLayers):
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingModeSoon):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingModePending):

2011-05-04  Jeff Miller  <jeffm@apple.com>

        Fix typo in svn property in r85756.

        * Shared/mac/NativeWebWheelEventMac.mm: Added property svn:eol-style. Removed property snv:eol-style.

2011-05-04  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Add NativeWebWheelEvent class
        https://bugs.webkit.org/show_bug.cgi?id=60182
        
        This will be needed soon when we start notifying the UI process that a mouse wheel event wasn't handled by WebKit.

        * GNUmakefile.am: Added NativeWebWheelEventGtk.cpp and NativeWebWheelEvent.h.
        * Shared/NativeWebWheelEvent.h: Added.
        (WebKit::NativeWebWheelEvent::nativeEvent): Added.
        * Shared/gtk/NativeWebWheelEventGtk.cpp: Added.
        (WebKit::NativeWebWheelEvent::NativeWebWheelEvent): Added.
        * Shared/mac/NativeWebWheelEventMac.mm: Added.
        (WebKit::NativeWebWheelEvent::NativeWebWheelEvent): Added.
        * Shared/qt/NativeWebWheelEventQt.cpp: Added.
        (WebKit::NativeWebWheelEvent::NativeWebWheelEvent): Added.
        * Shared/win/NativeWebWheelEventWin.cpp: Added.
        (WebKit::NativeWebWheelEvent::NativeWebWheelEvent):Added.
        * WebKit2.pro: Added NativeWebWheelEventQt.cpp and NativeWebWheelEvent.h.
        * WebKit2.xcodeproj/project.pbxproj: Added NativeWebWheelEventMac.mm and NativeWebWheelEvent.h.
        * win/WebKit2.vcproj: Added NativeWebWheelEventWin.cpp and NativeWebWheelEvent.h.

2011-05-04  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Anders Carlsson.

        ArgumentDecoder should use aligned memory for its internal copy of data
        https://bugs.webkit.org/show_bug.cgi?id=59960 

        Since we check for memory alignment when unpacking primitive types from the buffer,
        insure alignment of the base address.
        As uint64_t is the largest type we use in Argument encoder/decoder, use 8 byte alignment. 

        * Platform/CoreIPC/ArgumentDecoder.cpp:
        (CoreIPC::ArgumentDecoder::~ArgumentDecoder): free m_alignedBase
        (CoreIPC::roundUpToAlignment): move this up in the source file
        (CoreIPC::ArgumentDecoder::initialize): m_buffer is now guaranteed sizeof(uint64_t) aligned
        * Platform/CoreIPC/ArgumentDecoder.h: add m_alignedBase member which needs to be freed in d'tor

2011-05-04  Adam Roben  <aroben@apple.com>

        Make ShareableBitmap::makeCGImageCopy use a copy-on-write copy on Windows when possible

        Fixes <http://webkit.org/b/57269> <rdar://problem/9198788> REGRESSION (r82151): Every WKView
        paint now makes an extra copy of the painted bits

        Reviewed by Anders Carlsson.

        * Platform/SharedMemory.h:
        * Platform/win/SharedMemoryWin.cpp:
        (WebKit::SharedMemory::createCopyOnWriteCopy):
        Added this new function. Creates a copy-on-write copy of the first |size| bytes of the
        original SharedMemory.

        * Shared/ShareableBitmap.h: Added createCGImage helper function.

        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::makeCGImageCopy): Don't compile this version of this function on
        Windows; we'll provide our own implementation since CGBitmapContextCreateImage isn't smart
        enough to make a copy-on-write copy on Windows.
        (WebKit::ShareableBitmap::makeCGImage): Moved some code from here...
        (WebKit::ShareableBitmap::createCGImage): ...to this new function.

        * Shared/cg/win/ShareableBitmapCGWin.cpp: Added.
        (WebKit::derefSharedMemory): This function is called when the CGDataProvider is finalized.
        All we have to do is deref the SharedMemory that was backing the CGDataProvider.
        (WebKit::ShareableBitmap::makeCGImageCopy): Create a copy-on-write copy of the image data
        when possible. We use the copy-on-write copy to back this ShareableBitmap from here on out,
        and use the original SharedMemory to back the CGImage. This should prevent future
        modifications to the ShareableBitmap from affecting the CGImage. If we can't make a
        copy-on-write copy, we fall back to just copying the data normally.

        * win/WebKit2.vcproj: Added ShareableBitmapCGWin.cpp.

2011-05-04  Adam Roben  <aroben@apple.com>

        Let transparent windowless plugins draw into a graphics context with an alpha channel

        Fixes <http://webkit.org/b/57647> <rdar://problem/9168462> Flash plugins with
        wmode=transparent have black (instead of transparent) background in WebKit2 on Windows

        I had trouble writing a test case for this, so I split that task out into
        <http://webkit.org/b/60169>.

        Reviewed by Sam Weinig.

        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::NetscapePlugin::platformPaint): Give the graphics context an alpha channel if this
        is a transparent windowless plugin.

2011-05-03  Adam Roben  <aroben@apple.com>

        Remove WebPageProxy::setDrawingArea

        It is unused. It also does a useless equality comparison between OwnPtrs; if they are equal,
        we've already lost.

        Reviewed by Anders Carlsson and Antti Koivisto.

        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        Removed setDrawingArea.

        (WebKit::WebPageProxy::drawingArea):
        (WebKit::WebPageProxy::backForwardList):
        Made these functions const while I was at it.

2011-05-03  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Antti Koivisto.

        Part of WebCore should use CFNetwork-based loader on Mac
        https://bugs.webkit.org/show_bug.cgi?id=51836

        Merge the conflicting definitions of WebCore::privateBrowsingCookieStorage() into one.

        * WebProcess/Cookies/cf/WebCookieManagerCFNet.cpp:
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):

2011-05-02  Jer Noble  <jer.noble@apple.com>

        Reviewed by Adam Roben.

        Implement FULLSCREEN_API on Windows, Part 3: WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=59845

        Implement a similar full screen mode to WebKit; Re-use the same
        full screen window class used in WebKit in the new WebFullScreenController.
        No animations (yet), so many of the stubs remain unimplemented.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::onKeyEvent): Handle VK_ESCAPE and cancel full screen
            mode if caught.
        (WebKit::WebView::fullScreenController): Lazily instantiate m_fullScreenController.
        (WebKit::WebView::fullScreenClientWindow): Added accessor.
        (WebKit::WebView::fullScreenClientParentWindow): Ditto.
        (WebKit::WebView::fullScreenClientSetParentWindow): Ditto.
        (WebKit::WebView::fullScreenClientWillEnterFullScreen): Pass through to WebFullScreenManagerProxy.
        (WebKit::WebView::fullScreenClientDidEnterFullScreen): Ditto.
        (WebKit::WebView::fullScreenClientWillExitFullScreen): Ditto.
        (WebKit::WebView::fullScreenClientDidExitFullScreen): Ditto.
        * UIProcess/win/WebView.h:
        * UIProcess/win/WebFullScreenManagerProxyWin.cpp:
        (WebKit::WebFullScreenManagerProxy::enterFullScreen): Pass through to 
            WebFullScreenController.
        (WebKit::WebFullScreenManagerProxy::exitFullScreen): Ditto.
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView):
        (WebKit::WebView::onKeyEvent): Handle the escape key and exit
           full screen mode when detected.
        (WebKit::WebView::fullScreenWindowController): Added.
        * UIProcess/win/WebView.h:
        * WebProcess/FullScreen/win/WebFullScreenManagerWin.cpp:
        (WebKit::WebFullScreenManagerWin::~WebFullScreenManagerWin):
        (WebKit::WebFullScreenManagerWin::setRootFullScreenLayer): Host the root
            full screen layer if it gets detached.
        * WebProcess/FullScreen/win/WebFullScreenManagerWin.h:
        * win/WebKit2.vcproj:

2011-05-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=60087 and <rdar://problem/9373182>
        WK2 Icon Database should provide access to all image representations in the icon.

        Expose a CFArrayRef of CGImageRefs as API for CG platforms:
        * UIProcess/API/C/cg/WKIconDatabaseCG.cpp:
        (WKIconDatabaseTryCopyCGImageArrayForURL):
        * UIProcess/API/C/cg/WKIconDatabaseCG.h:

2011-05-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        WebKit2 should treat API calls that start/stop loads as user gestures for responsiveness timer
        https://bugs.webkit.org/show_bug.cgi?id=60083

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcessWithItem):
        (WebKit::WebPageProxy::tryClose):
        (WebKit::WebPageProxy::loadURL):
        (WebKit::WebPageProxy::loadURLRequest):
        (WebKit::WebPageProxy::loadHTMLString):
        (WebKit::WebPageProxy::loadAlternateHTMLString):
        (WebKit::WebPageProxy::loadPlainTextString):
        (WebKit::WebPageProxy::stopLoading):
        (WebKit::WebPageProxy::reload):
        (WebKit::WebPageProxy::goForward):
        (WebKit::WebPageProxy::goBack):
        (WebKit::WebPageProxy::goToBackForwardItem):
        Start responsiveness timer for load start/stop and close.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::SendStopResponsivenessTimer::SendStopResponsivenessTimer):
        (WebKit::SendStopResponsivenessTimer::~SendStopResponsivenessTimer):
        Add simple RAII class to ensure the StopResponsivenessTimer is called.

        (WebKit::WebPage::tryClose):
        (WebKit::WebPage::loadURLRequest):
        (WebKit::WebPage::loadData):
        (WebKit::WebPage::stopLoading):
        (WebKit::WebPage::reload):
        (WebKit::WebPage::goForward):
        (WebKit::WebPage::goBack):
        (WebKit::WebPage::goToBackForwardItem):
        Sends a message back to the UIProcess to indicate the WebProcess
        is still responsive.

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

        Reviewed by Sam Weinig.

        <rdar://problem/9250444> Enter key doesn't work in a web text field (but Return key does)

        No test at this time because the WebKit2 eventSender doesn't use this code path.

        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::createWebKeyboardEvent): Copied the code to special-case certain
        keys from the corresponding Mac WebKit1 code path.

2011-05-03  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Unreachable URL is lost when canceling load of a new page
        https://bugs.webkit.org/show_bug.cgi?id=60057
        <rdar://problem/9049135>
        
        When setting the unreachable URL in the WebFrameProxy, keep track of any previous unreachable URL
        so we can restore it if the page load fails.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didFailProvisionalLoad): Restore m_unreachableURL to previous value.
        (WebKit::WebFrameProxy::setUnreachableURL): Keep track of previous unreachable URL in m_lastUnreachableURL.
        * UIProcess/WebFrameProxy.h: Moved setUnreachableURL() implementation to .cpp file, added m_lastUnreachableURL.

2011-05-03  Adam Roben  <aroben@apple.com>

        Fix most strict PassOwnPtr violations on Windows

        Fixes <http://webkit.org/b/60025> Windows should (almost) build with strict PassOwnPtr
        enabled

        Reviewed by Anders Carlsson.

        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::writeEventHandler): Use nullptr.

2011-05-03  Julien Chaffraix  <jchaffraix@codeaurora.org>

        Reviewed by Dimitri Glazkov.

        Element:shadowRoot & Element::ensureShadowRoot should return ShadowRoot*
        https://bugs.webkit.org/show_bug.cgi?id=58703

        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp: Added #include for ShadowRoot.h.

2011-05-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        More quarantine related sandbox denial when downloading files
        <rdar://problem/9362626>

        * WebProcess/com.apple.WebProcess.sb:

2011-05-02  Adam Roben  <aroben@apple.com>

        Take advantage of implicit conversion from nullptr_t to PassOwnPtr

        Fixes <http://webkit.org/b/59964> Implicit conversion from std::nullptr_t to PassOwnPtr
        doesn't work, but should

        Reviewed by Adam Barth.

        * Platform/CoreIPC/Connection.cpp:
        * UIProcess/qt/WebContextMenuProxyQt.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/WebPage/DrawingArea.cpp:

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

        Reviewed by Eric Seidel.

        [GTK] Build webkit1 even when webkit2 is enabled
        https://bugs.webkit.org/show_bug.cgi?id=59695

        * GNUmakefile.am:

2011-05-02  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] White screen displays when using MiniBrowser with DrawingAreaImpl
        https://bugs.webkit.org/show_bug.cgi?id=60003

        When using DrawingAreaImpl, we need to properly pass the viewSize to the WebPage.
        Otherwise, the dirty rect will always be empty and we will not draw.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::viewSize):

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

        Fix crash that was introduced in r85515.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::dispatchSyncMessage):
        If didReceiveSyncMessage returns ManualReply, the client took ownership of the reply
        encoder so we must leak it to avoid a double-free.

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

        Reviewed by Sam Weinig.

        The web process locks up when the plug-in process crashes
        https://bugs.webkit.org/show_bug.cgi?id=59999
        <rdar://problem/8889303>

        Add a hash map from plug-in paths to CoreIPC connections to PluginProcessConnectionManager.
        Add PluginProcessConnectionManager::pluginProcessCrashed and make it look up the corresponding
        CoreIPC connection and call postConnectionDidCloseOnConnectionWorkQueue on it.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::postConnectionDidCloseOnConnectionWorkQueue):
        * Platform/CoreIPC/Connection.h:
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
        (WebKit::PluginProcessConnectionManager::removePluginProcessConnection):
        (WebKit::PluginProcessConnectionManager::pluginProcessCrashed):
        * WebProcess/Plugins/PluginProcessConnectionManager.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::pluginProcessCrashed):

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

        Try to fix Windows build.

        * Scripts/webkit2/messages.py:
        * Scripts/webkit2/messages_unittest.py:

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

        Reviewed by Oliver Hunt.

        Dispatch the PluginProcessCrashed on the connection work queue
        https://bugs.webkit.org/show_bug.cgi?id=59996

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initialize):
        Add the web process as a queue client.

        (WebKit::WebProcess::terminate):
        Remove the web process as a queue client.

        (WebKit::WebProcess::willProcessMessageOnClientRunLoop):
        Try calling willProcessWebProcessMessageOnClientRunLoop.

        * WebProcess/WebProcess.messages.in:
        Add the DispatchOnConnectionQueue attribute to PluginProcessCrashed.

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

        Reviewed by Sam Weinig.

        Send a PluginProcessCrashed message to all web processes when a plug-in crashes
        https://bugs.webkit.org/show_bug.cgi?id=59994

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didClose):
        Iterate over all contexts and send PluginProcessCrashed to all web processes in each context.

        (WebKit::PluginProcessProxy::didFinishLaunching):
        Call setShouldCloseConnectionOnMachExceptions on the CoreIPC connection.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::pluginProcessCrashed):
        Add empty stub.

        * WebProcess/WebProcess.messages.in:
        Add message.

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

        Reviewed by Simon Fraser.

        Plug-in not completely repainted after a crash
        https://bugs.webkit.org/show_bug.cgi?id=59991

        Call Widget::invalidate().

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

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

        Reviewed by Dan Bernstein.

        Make PluginProcessConnectionManager a member of WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=59989

        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        * WebProcess/Plugins/PluginProcessConnectionManager.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::initialize):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::pluginProcessConnectionManager):

2011-05-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Brady Eidson.

        <rdar://problem/9371289> WebKit2 can persist an invalid current back/forward item index when URLs are filtered from back/forward list

        * UIProcess/cf/WebBackForwardListCF.cpp:
        (WebKit::WebBackForwardList::createCFDictionaryRepresentation): We need to update the current index to account for filtered items
        for all items before the current item in the array.

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

        Reviewed by Adam Roben.

        Handle DispatchOnConnectionQueue for asynchronous messages
        https://bugs.webkit.org/show_bug.cgi?id=59959

        If any asynchronous messages have the DispatchOnConnectionQueue attribute, 
        create a new willProcess{Receiver}MessageOnClientRunLoop.

        * Scripts/webkit2/messages.py:
        - Fix a regex bug where we would only parse attributes on synchronous messages.
        - Collect messages with the dispatch_on_connection_queue flag set. We only handle
          asynchronous messages currently; sync message support will be added when/if the
          need arises.

        * Scripts/webkit2/messages_unittest.py:
        Update test.

2011-05-02  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        PLATFORM(MAC) should (almost!) build with strict PassOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=59924

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendSyncMessage):
        (CoreIPC::Connection::waitForSyncReply):
        (CoreIPC::Connection::dispatchSyncMessage):
        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::Message::releaseArguments):
            - The memory management for this class is very strange.  I wrote a
              large comment.  Hopefully a kind soul will come by and fix it.
        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::unload):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setFindIndicator:fadeOut:]):
        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
        (WebKit::WebFullScreenManagerMac::setRootFullScreenLayer):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::toStringVector):
        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::stop):
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        (WebKit::WebInspectorFrontendClient::WebInspectorFrontendClient):
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):

2011-04-29  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Pages with accelerated compositing do not redraw unless scrolled
        https://bugs.webkit.org/show_bug.cgi?id=59851

        Added a setNeedDisplay on the non-composited content layer after
        the size is changed so it paints the full size of the layer. Called
        only for the areas newly exposed, if any.

        * WebProcess/WebPage/ca/LayerTreeHostCA.cpp:
        (WebKit::LayerTreeHostCA::sizeDidChange):

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

        Reviewed by Adam Roben.

        Need a way to handle CoreIPC messages on the connection work queue
        https://bugs.webkit.org/show_bug.cgi?id=59954

        Add a Connection::QueueClient abstract class. This class has a single pure virtual
        member function, willProcessMessageOnClientRunLoop which should return true if the message 
        should be forwarded to the next Connection::QueueClient in the list or Connection::Client's 
        run loop for processing and false otherwise. Users of Connection can use addQueueClient to
        add clients and all messages will be dispatched  to the queue clients first.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::addQueueClient):
        (CoreIPC::Connection::removeQueueClient):
        (CoreIPC::Connection::processIncomingMessage):
        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::QueueClient::~QueueClient):

2011-05-02  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adam Roben.

        WebKit2 thinks the web process is unresponsive when a plugin displays a context menu
        https://bugs.webkit.org/show_bug.cgi?id=59124
        <rdar://problem/9318600>
        
        This is the Windows version of <https://bugs.webkit.org/show_bug.cgi?id=58943>.

        Since we have no control over how long a plugin will take to handle an event, we need
        to tell the UI process to stop its responsive timer when we're about to send an event
        to the plugin. The downside of doing this is that if the plugin does become unresponsive,
        the user won't know this immediately until they click on the web page again.  At that point,
        if the web process is unresponsive because of a hung plugin, the responsiveness timer will fire.
        
        We're only doing this on Windows currently when running plugins in the web process (Anders fixed
        bug 58943 in a different way when running plugins in a separate plugin process on the Mac).

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::willSendEventToPlugin): Added, not used when running plugins in a separate process.
        * PluginProcess/PluginControllerProxy.h: Added willSendEventToPlugin().

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::stopResponsivenessTimer): Added.
        * UIProcess/WebPageProxy.h: Added stopResponsivenessTimer().
        * UIProcess/WebPageProxy.messages.in: Added StopResponsivenessTimer message.

        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::NetscapePlugin::platformPaint): Tell our controller when we're about to send an event to the plugin.
        (WebKit::NetscapePlugin::platformHandleMouseEvent): Ditto.
        (WebKit::NetscapePlugin::platformHandleMouseEnterEvent): Ditto.
        (WebKit::NetscapePlugin::platformHandleMouseLeaveEvent): Ditto.

        * WebProcess/Plugins/PluginController.h: Added willSendEventToPlugin().
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::willSendEventToPlugin): Added, tell the UI process to stop its responsiveness timer.
        * WebProcess/Plugins/PluginView.h: Added willSendEventToPlugin().

2011-04-29  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Maciej Stachowiak.

        Plug-in failed to initialize message should be called when Java fails to initialize
        https://bugs.webkit.org/show_bug.cgi?id=59856
        
        To match the WebKit1 behavior, WebKit2 should dispatch the plug-in failed
        to initialize message when we can't instantiate the Java plug-in.

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

2011-05-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Barth.

        Prune some #includes from DOMWindow.h
        https://bugs.webkit.org/show_bug.cgi?id=59907

        * WebProcess/WebPage/WebFrame.cpp:
        Add now missing SecurityOrigin.h #include.

2011-04-29  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Dan Bernstein.

        WebKit2: Crash closing tab with docked Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=59914
        <rdar://problem/9359672>
        
        When a tab is closed with a docked inspector, invalidate called platformClose, which
        didn't do the tear down that is needed, but is called when we close the web inspector explcitly.
        One part of tear down we weren't doing is removing ourselves as a WindowMessageBrodcaster listener
        on the inspected web view, and this can cause crashes.
        
        This patch also renames platformClose to platformDidClose, to be clearer about when the function
        is called.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::invalidate): Call didClose instead of platformClose.
        (WebKit::WebInspectorProxy::didClose): Call platformDidClose instead of platformClose.
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformDidClose): Renamed from platformClose.
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformDidClose): Ditto.
        * UIProcess/gtk/WebInspectorGtk.cpp:
        (WebKit::WebInspectorProxy::platformDidClose): Ditto.
        * UIProcess/qt/WebInspectorProxyQt.cpp:
        (WebKit::WebInspectorProxy::platformDidClose): Ditto.

2011-05-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Prune some unnecessary #includes
        https://bugs.webkit.org/show_bug.cgi?id=59895

        Start getting rid of unnecessary #includes and forward declares.

        * WebProcess/Plugins/PluginView.cpp:
        * WebProcess/WebPage/WebPage.cpp:

2011-05-01  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Unreviewed buildfix after r85434.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::startDragDrop):
        * UIProcess/win/ChunkedUpdateDrawingAreaProxyWin.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::ensureBackingStore):
        (WebKit::ChunkedUpdateDrawingAreaProxy::drawUpdateChunkIntoBackingStore):
        * WebProcess/WebCoreSupport/win/WebDragClientWin.cpp:
        (WebKit::WebDragClient::startDrag):
        * WebProcess/WebPage/win/ChunkedUpdateDrawingAreaWin.cpp:
        (WebKit::ChunkedUpdateDrawingArea::paintIntoUpdateChunk):

2011-05-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Can't open document from skydrive.com in Microsoft Word
        https://bugs.webkit.org/show_bug.cgi?id=59891
        <rdar://problem/9354285>

        Add the AllowHalfBakedQuickDrawSupport quirk for the SharePoint plug-in.

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

2011-05-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Don't try to create a backing store for a 0x0 plug-in
        https://bugs.webkit.org/show_bug.cgi?id=59887

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

2011-05-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Sandbox violation by WebProcess for DownloadAssessment.plist
        https://bugs.webkit.org/show_bug.cgi?id=59879
        <rdar://problem/9326041>

        * WebProcess/com.apple.WebProcess.sb:
        Allow reading ~/Library/Preferences/com.apple.DownloadAssessment.plist

2011-05-01  Ivan Krstić  <ike@apple.com>

        Reviewed by Maciej Stachowiak.

        Remove unnecessary keychain and CoreAudio debris from WebProcess sandbox
        https://bugs.webkit.org/show_bug.cgi?id=59873

        These rules have been obsoleted by <rdar://problem/9301520> and
        <rdar://problem/9181468>.

        * WebProcess/com.apple.WebProcess.sb:

2011-05-01  Ivan Krstić  <ike@apple.com>

        Reviewed by Maciej Stachowiak.

        Simplify WebProcess sandbox with homedir-relative path filters.
        https://bugs.webkit.org/show_bug.cgi?id=59872

        * WebProcess/com.apple.WebProcess.sb:

2011-05-01  Ivan Krstić  <ike@apple.com>

        Reviewed by Maciej Stachowiak.

        On-demand VPN support for sandboxed WebProcess.
        <rdar://problem/8994181>

        * WebProcess/com.apple.WebProcess.sb:

2011-04-30  Ivan Krstić  <ike@apple.com>

        Reviewed by Sam Weinig.

        Reindent WebProcess sandbox to standard scheme style
        https://bugs.webkit.org/show_bug.cgi?id=59870

        * WebProcess/com.apple.WebProcess.sb:

2011-04-28  Jer Noble  <jer.noble@apple.com>

        Reviewed by Jon Honeycutt.

        Implement FULLSCREEN_API on Windows, Part 1: Stubs
        https://bugs.webkit.org/show_bug.cgi?id=59778

        Add Windows specific stubs for WebKit2 full screen APIs.

        * UIProcess/win/WebFullScreenManagerProxyWin.cpp: Added.
        (WebKit::WebFullScreenManagerProxy::enterFullScreen): Added stub.
        (WebKit::WebFullScreenManagerProxy::exitFullScreen): Added stub.
        (WebKit::WebFullScreenManagerProxy::beganEnterFullScreenAnimation): Added stub.
        (WebKit::WebFullScreenManagerProxy::finishedEnterFullScreenAnimation): Added stub.
        (WebKit::WebFullScreenManagerProxy::beganExitFullScreenAnimation): Added stub.
        (WebKit::WebFullScreenManagerProxy::finishedExitFullScreenAnimation): Added stub.
        (WebKit::WebFullScreenManagerProxy::enterAcceleratedCompositingMode): Added stub.
        (WebKit::WebFullScreenManagerProxy::exitAcceleratedCompositingMode): Added stub.
        (WebKit::WebFullScreenManagerProxy::getFullScreenRect): Added stub.
        * WebProcess/FullScreen/win/WebFullScreenManagerWin.cpp: Added.
        (WebKit::WebFullScreenManager::create): Added. Returns a WebFullScreenManagerWin.
        (WebKit::WebFullScreenManagerWin::create): Added.
        (WebKit::WebFullScreenManagerWin::WebFullScreenManagerWin): Added.
        (WebKit::WebFullScreenManagerWin::~WebFullScreenManagerWin): Added.
        (WebKit::WebFullScreenManagerWin::setRootFullScreenLayer): Added stub.
        (WebKit::WebFullScreenManagerWin::beginEnterFullScreenAnimation): Added stub.
        (WebKit::WebFullScreenManagerWin::beginExitFullScreenAnimation): Added stub.
        * WebProcess/FullScreen/win/WebFullScreenManagerWin.h: Added.
        * win/WebKit2.vcproj: Added new classes.

2011-04-29  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Simon Fraser and Dan Bernstein.

        WebKit2: WebPluginTypeEnabled key is ignored when enumerating plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=59852
        <rdar://problem/9314011>

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::getPluginInfoFromPropertyLists): Do what WebKit1 does (but in CF dialect). And yes,
        I've seen plists with both numbers and booleans used .

2011-04-29  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=59846
        Scrolling causes rounded bottom window corners to become square
        <rdar://problem/9234239>

        Keep track of the m_windowBottomCornerIntersectionRect in WKView. 
        Invalidate the rect before scrolling. And if the rect is non-zero during a 
        display, mask the corners, then set the rect to zero so that only displays that 
        happen right after a scroll bother to do this.
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::scrollView):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView displayIfNeeded]):
        (-[WKView _cacheWindowBottomCornerRect]):
        * UIProcess/API/mac/WKViewInternal.h:

2011-04-29  Jia Pu  <jpu@apple.com>

        Reviewed by Sam Weinig.

        [Mac] Scrolling WK2 window should dismiss autocorrection panel.
        https://bugs.webkit.org/show_bug.cgi?id=59809
        <rdar://problem/9317410>

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::pageDidScroll): Dimiss autocorrection panel in this function.

2011-04-29  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        WebKit2: Typing with Input methods still enters Roman characters in Safari search field frequently
        https://bugs.webkit.org/show_bug.cgi?id=59829
        <rdar://problem/9336907>

        This patch regresses behavior somewhat in that inline input isn't discarded when something
        happens in an inactive window. This doesn't work well in shipping Safari either.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _notifyInputContextAboutDiscardedComposition]): Added a method that calls
        -discardMarkedText with a safety check.
        (-[WKView setMarkedText:selectedRange:replacementRange:]): Use it.
        (-[WKView _updateTextInputStateIncludingSecureInputState:]): Use it.
        (-[WKView _resetTextInputState]): Use it.

2011-04-29  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: Remote accessibility should build on snow leopard
        https://bugs.webkit.org/show_bug.cgi?id=59767

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _updateRemoteAccessibilityRegistration:]):
        (-[WKView viewDidMoveToWindow]):
        (-[WKView _setAccessibilityWebProcessToken:]):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformInitialize):
        (WebKit::WebPage::registerUIProcessAccessibilityTokens):
        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain):

2011-04-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Add protection for shared memory failing to allocate
        <rdar://problem/9125287>
        https://bugs.webkit.org/show_bug.cgi?id=59842

        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::create):
        Add logging in shared memory failure cases.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::display):
        Guard against ShareableBitmap failing to create a shared memory
        backing.

2011-04-28  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=59776
        <rdar://problem/9287113> REGRESSION: Safari cold/warm launch time 15% to 2x regression
        On the first draw the WebProcess is just going to send us blank bits anyway so don't 
        pause waiting for the update.  Continue drawing a blank window until the WebProcess
        sends us the update.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl):
        (WebKit::DrawingAreaProxyImpl::paint):
        (WebKit::DrawingAreaProxyImpl::didUpdateBackingStoreState):
        (WebKit::DrawingAreaProxyImpl::sendUpdateBackingStoreState):
        * UIProcess/DrawingAreaProxyImpl.h:

2011-04-29  Jon Lee  <jonlee@apple.com>

        Reviewed by mitzpettel.

        REGRESSION (WebKit2): (Mac) Selection is gone after switching tabs (59721)
        <rdar://problem/9327332>
        https://bugs.webkit.org/show_bug.cgi?id=59721

        When resigning first responder status, check to see if we need to maintain an inactive
        selection in the web view. If we don't, we clear the selection.

        This also reverts the change made in 83814, since that was a different attempt to solve this same issue.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetMaintainsInactiveSelection): Export setMaintainsInactiveSelection()
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView resignFirstResponder]): Check and see if we need to maintain the selection in the view prior to resigning.
        If not, we clear the selection
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::clearSelection): Send message across process boundary
        (WebKit::WebPageProxy::setMaintainsInactiveSelection): Sets variable
        * UIProcess/WebPageProxy.h: New member variable to keep track of whether we need to maintain the current selection
        (WebKit::WebPageProxy::maintainsInactiveSelection): Returns variable
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setFocused): Reverting code to just set the focused bit instead of also clearing the selection
        (WebKit::WebPage::clearSelection):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: add new ClearSelection() message

2011-04-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Application cache doesn't work due to a sandbox violation
        https://bugs.webkit.org/show_bug.cgi?id=59818
        <rdar://problem/9346971>

        Add a sandbox extension for the application cache directory.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        Encode and decode the sandbox extension handle.

        * Shared/WebProcessCreationParameters.h:
        Add a applicationCacheDirectoryExtensionHandle member.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureWebProcess):
        If we have a non-empty application cache directory, create a sandbox extension
        and pass it to the creation parameters.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        Create and consume a sandbox extension.

        * WebProcess/WebProcess.h:
        Add an m_applicationCachePathExtension member variable.

2011-04-29  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        Add ENABLE macro for WebKitAnimation
        https://bugs.webkit.org/show_bug.cgi?id=59729

        Add new feature to toggle WebKit Animation API.

        * Configurations/FeatureDefines.xcconfig:

2011-04-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Brian Weinstein.

        Crash when closing a tab that is unresponsive
        https://bugs.webkit.org/show_bug.cgi?id=59810
        <rdar://problem/9329133>

        Back out r84643 - there was no rationale for this change, and it's causing crashes.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::processDidCrash):

2011-04-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Rename page as pageProxy in WebKitWebViewBase
        https://bugs.webkit.org/show_bug.cgi?id=59790

        To avoid consufion between page client and page proxy. Also rename
        some methods to webkitWebViewBase* for consistency.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseFinalize):
        (webkitWebViewBaseExpose):
        (webkitWebViewBaseDraw):
        (webkitWebViewBaseSizeAllocate):
        (webkitWebViewBaseFocusInEvent):
        (webkitWebViewBaseFocusOutEvent):
        (webkitWebViewBaseKeyPressEvent):
        (webkitWebViewBaseKeyReleaseEvent):
        (webkitWebViewBaseButtonPressEvent):
        (webkitWebViewBaseButtonReleaseEvent):
        (webkitWebViewBaseScrollEvent):
        (webkitWebViewBaseMotionNotifyEvent):
        (webkit_web_view_base_class_init):
        (webkitWebViewBaseCreate):
        (webkitWebViewBaseGetPage):

2011-04-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix a crash after r85214.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkit_web_view_base_init): Add line to create the page client
        instance, removed by mistake in r85214.

2011-04-28  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        Remove IMAGE_RESIZER related code.
        https://bugs.webkit.org/show_bug.cgi?id=59735

        * Configurations/FeatureDefines.xcconfig:

2011-04-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Original patch by Austin Jennings.

        <rdar://problem/9350288>
        Update sandbox profile for extension changes

        * WebProcess/com.apple.WebProcess.sb:

2011-04-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Right-clicking on a Flash movie in an iframe shows the browser context menu
        https://bugs.webkit.org/show_bug.cgi?id=59760
        <rdar://problem/9340541>

        Move context menu event handling out into a separate function. Make sure to call
        EventHandler::sendContextMenuEvent on the event handler belonging to the frame of the
        node that was clicked, and not the main frame.

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

2011-04-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove WML
        https://bugs.webkit.org/show_bug.cgi?id=59678

        Remove WML-related code in WebKit2.

        * Configurations/FeatureDefines.xcconfig:
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        * WebProcess/WebPage/WebBackForwardListProxy.h:

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

        Reviewed by Anders Carlsson.

        WebKit2: Frequent crashes in acceptsFirstMouse
        https://bugs.webkit.org/show_bug.cgi?id=59746
        <rdar://problem/9281270>

        The crash occurred when connection was null (and it can become null at any time).

        Added checks for the proxy being valid in all sync calls that lacked such.
        WebPageProxy::isValid() is not the same as WebProcessProxy::isValid(), but existing checks
        looked at the former, so I used that.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::firstRectForCharacterInSelectedRange):
        (WebKit::WebPageProxy::getSelectedText):
        (WebKit::WebPageProxy::gestureWillBegin):
        (WebKit::WebPageProxy::createSnapshotOfVisibleContent):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setComposition):
        (WebKit::WebPageProxy::confirmComposition):
        (WebKit::WebPageProxy::confirmCompositionWithoutDisturbingSelection):
        (WebKit::WebPageProxy::insertText):
        (WebKit::WebPageProxy::getMarkedRange):
        (WebKit::WebPageProxy::getSelectedRange):
        (WebKit::WebPageProxy::getAttributedSubstringFromRange):
        (WebKit::WebPageProxy::characterIndexForPoint):
        (WebKit::WebPageProxy::firstRectForCharacterRange):
        (WebKit::WebPageProxy::executeKeypressCommands):
        (WebKit::WebPageProxy::writeSelectionToPasteboard):
        (WebKit::WebPageProxy::readSelectionFromPasteboard):
        (WebKit::WebPageProxy::shouldDelayWindowOrderingForEvent):
        (WebKit::WebPageProxy::acceptsFirstMouse):

2011-04-27  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Mac side of: WebKit2: Support docked mode for Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=59134
        <rdar://problem/8739005>

        Implement docking of the Web Inspector on Mac. This matches the Windows (WK1 and WK2) closely,
        where the inspector and the inspected view are siblings.

        * UIProcess/API/C/mac: Added.
        * UIProcess/API/C/mac/WKInspectorMac.h: Added.
        * UIProcess/API/mac/PageClientImpl.h:
        (WebKit::PageClientImpl::wkView): Returns the WKView.
        * UIProcess/PageClient.h:
        * UIProcess/WebInspectorProxy.h: The inspected view is now a WebInspectorWKView, so we can override tag.
        * UIProcess/WebPageProxy.h: Added a getter for the WKView.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (-[WebInspectorProxyObjCAdapter inspectedViewFrameDidChange:]): Calls through to WebInspectorProxy::inspectedViewFrameDidChange.
        (-[WebInspectorWKView tag]): Returns a constant defined in WKInspectorMac.h.
        (WebKit::WebInspectorProxy::platformCreateInspectorPage): Create a WebInspectorWKView instead of a WKView.
        (WebKit::WebInspectorProxy::platformClose): Removed a FIXME that isn't needed anymore (we always detach before closing).
        (WebKit::WebInspectorProxy::inspectedViewFrameDidChange): Place our inspector and the inspected view next to each other, assuming the
            bottom of the inspector is at the Y origin.
        (WebKit::WebInspectorProxy::platformAttach): Listen for changes to the inspected view's frame, and move the inspectorView from the
            detached inspector window to the superview of the inspected view (to make the inspector and inspected view siblings).
        (WebKit::WebInspectorProxy::platformDetach): Stop listening for changes to the inspected view's frame, and move the inspectorView
            back to the detached inspector window. We also resize the inspected view to take up the space the inspector took up before
            (assuming the bottom of the inspector was at the Y origin).
        (WebKit::WebInspectorProxy::platformSetAttachedWindowHeight): Resize the inspector's view, and call inspectedViewFrameDidChange (which
            syncs the inspector and the inspected view), and call setNeedsDisplay on both views.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::wkView):
        
        * WebKit2.xcodeproj/project.pbxproj: Add a new file.

2011-04-28  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Darin Adler.

        Crash under WKPageCreateSnapshotOfVisibleContent if there is no response from the Web Process
        in the allotted time.
        https://bugs.webkit.org/show_bug.cgi?id=59738

        If the handle is null, don't try to create a ShareableBitmap and then a WebImage out of it.

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

2011-04-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] Split JSC and WebCore builds
        https://bugs.webkit.org/show_bug.cgi?id=19428

        Build JavaScriptCore as a libtool shared library instead of a
        private convenience library.

        * GNUmakefile.am: adapt to new name for javascriptcore target.

2011-04-28  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8773946> and https://bugs.webkit.org/show_bug.cgi?id=59614
        Client certificate authentication in WebKit2

        Project-file stuff:
        * WebKit2.xcodeproj/project.pbxproj:

        Allow WKCredentials to store certificates:
        * UIProcess/Authentication/WebCredential.cpp:
        (WebKit::WebCredential::WebCredential):
        (WebKit::WebCredential::certificateInfo):
        * UIProcess/Authentication/WebCredential.h:
        (WebKit::WebCredential::create):
        * UIProcess/API/C/WKCredential.cpp:
        (WKCredentialCreateWithCertificateInfo):
        * UIProcess/API/C/WKCredential.h:

        Pass the certificate info over the wire to the WebProcess:
        * UIProcess/Authentication/AuthenticationChallengeProxy.cpp:
        (WebKit::AuthenticationChallengeProxy::useCredential): 

        Change the WebProcess to prefer certificate info over basic credentials when responding to a challenge:
        * WebProcess/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::tryUsePlatformCertificateInfoForChallenge): Stub for platforms other than Mac,
          as only Mac can currently respond to challenges with certificates.
        (WebKit::AuthenticationManager::useCredentialForChallenge):
        * WebProcess/Authentication/AuthenticationManager.h:
        * WebProcess/Authentication/AuthenticationManager.messages.in:
        * WebProcess/Authentication/mac: Added.
        * WebProcess/Authentication/mac/AuthenticationManager.mac.mm: Added.
        (WebKit::AuthenticationManager::tryUsePlatformCertificateInfoForChallenge): Recreate the identity and certificate
          chain and respond to the challenge with it.

        Add a newly required #include:
        * UIProcess/API/C/WKAuthenticationChallenge.cpp:
        * UIProcess/Authentication/AuthenticationDecisionListener.cpp:

2011-04-28  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Click counting logic should be shared between WebKit1 and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=59715

        Use the GtkClickCounter instead of doing click counting manually. This means that
        the code will now be shared between WebKit1 and WebKit2.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkit_web_view_base_init): Remove private member initialization.
        (webViewButtonPressEvent): Call into GtkClickCounter.

2011-04-28  Martin Robinson  <mrobinson@igalia.com>

        Build fix after r85197.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webViewExpose): Use cr.get() here.
        (webViewDraw): Small clean up.

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

        Reviewed by Sam Weinig.

        [GTK] Remove WKURLCreateWithURL()
        https://bugs.webkit.org/show_bug.cgi?id=59691

        The name is a bit confusing and there's already
        WKURLCreateWithUTF8CString() in the C API.

        * UIProcess/API/C/gtk/WKView.cpp:
        * UIProcess/API/C/gtk/WKView.h:

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

        Reviewed by Martin Robinson.

        [GTK] Make WebKitWebViewBase public in the API
        https://bugs.webkit.org/show_bug.cgi?id=59689

        Add WebKitWebViewBasePrivate.h and move WebKitWebViewBase inernal
        methods to it. Rename get_type() method, since it's part of the
        public API and should follow gtk coding style.

        * GNUmakefile.am: Add WebKitWebViewBasePrivate.h.
        * UIProcess/API/C/gtk/WKView.cpp: Use WebKitWebViewBasePrivate.h.
        * UIProcess/API/gtk/PageClientImpl.cpp: Ditto.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseFinalize):
        (webkit_web_view_base_init):
        (webViewSizeAllocate):
        (webViewFocusInEvent):
        (webViewFocusOutEvent):
        (webViewKeyPressEvent):
        (webViewKeyReleaseEvent):
        (webkit_web_view_base_class_init):
        * UIProcess/API/gtk/WebKitWebViewBase.h:
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h: Copied from Source/WebKit2/UIProcess/API/C/gtk/WKView.cpp.
        * UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp: Use WebKitWebViewBasePrivate.h.

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

        Reviewed by Martin Robinson.

        [GTK] Move WebView to UIProcess/API/gtk
        https://bugs.webkit.org/show_bug.cgi?id=59686

        And rename it as PageClientImpl, since it's a page client
        implementation, not a web view.

        * GNUmakefile.am:
        * UIProcess/API/C/gtk/WKView.cpp:
        * UIProcess/API/gtk/PageClientImpl.cpp: Renamed from Source/WebKit2/UIProcess/gtk/WebView.cpp.
        (WebKit::backspaceCallback):
        (WebKit::selectAllCallback):
        (WebKit::cutClipboardCallback):
        (WebKit::copyClipboardCallback):
        (WebKit::pasteClipboardCallback):
        (WebKit::toggleOverwriteCallback):
        (WebKit::popupMenuCallback):
        (WebKit::showHelpCallback):
        (WebKit::deleteFromCursorCallback):
        (WebKit::moveCursorCallback):
        (WebKit::PageClientImpl::PageClientImpl):
        (WebKit::PageClientImpl::~PageClientImpl):
        (WebKit::PageClientImpl::getEditorCommandsForKeyEvent):
        (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::PageClientImpl::processDidCrash):
        (WebKit::PageClientImpl::didRelaunchProcess):
        (WebKit::PageClientImpl::takeFocus):
        (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::didNotHandleKeyEvent):
        (WebKit::PageClientImpl::createPopupMenuProxy):
        (WebKit::PageClientImpl::createContextMenuProxy):
        (WebKit::PageClientImpl::setFindIndicator):
        (WebKit::PageClientImpl::pageDidEnterAcceleratedCompositing):
        (WebKit::PageClientImpl::pageDidLeaveAcceleratedCompositing):
        (WebKit::PageClientImpl::didCommitLoadForMainFrame):
        (WebKit::PageClientImpl::didFinishLoadingDataForCustomRepresentation):
        (WebKit::PageClientImpl::customRepresentationZoomFactor):
        (WebKit::PageClientImpl::setCustomRepresentationZoomFactor):
        (WebKit::PageClientImpl::pageClosed):
        (WebKit::PageClientImpl::didChangeScrollbarsForMainFrame):
        (WebKit::PageClientImpl::flashBackingStoreUpdates):
        (WebKit::PageClientImpl::findStringInCustomRepresentation):
        (WebKit::PageClientImpl::countStringMatchesInCustomRepresentation):
        * UIProcess/API/gtk/PageClientImpl.h: Renamed from Source/WebKit2/UIProcess/gtk/WebView.h.
        (WebKit::PageClientImpl::create):
        (WebKit::PageClientImpl::addPendingEditorCommand):
        (WebKit::PageClientImpl::userSpaceScaleFactor):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseInit):
        (webkitWebViewBaseCreate):
        * UIProcess/API/gtk/WebKitWebViewBase.h:
        * UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp:

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

        Reviewed by Martin Robinson.

        [GTK] Use the WebPage object in WebKitWebViewBase
        https://bugs.webkit.org/show_bug.cgi?id=59683

        It simplifies the implementation of the event callbacks. Remove
        also all the methods from the page client that are no longer
        needed.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseInit):
        (webViewExpose):
        (webViewDraw):
        (webViewSizeAllocate):
        (webViewFocusInEvent):
        (webViewFocusOutEvent):
        (webViewKeyPressEvent):
        (webViewKeyReleaseEvent):
        (webViewButtonPressEvent):
        (webViewButtonReleaseEvent):
        (webViewScrollEvent):
        (webViewMotionNotifyEvent):
        * UIProcess/API/gtk/WebKitWebViewBase.h:
        * UIProcess/gtk/WebView.cpp:
        (WebKit::WebView::WebView):
        (WebKit::WebView::createDrawingAreaProxy):
        * UIProcess/gtk/WebView.h:

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

        Reviewed by Martin Robinson.

        [GTK] Create the page client in the view widget
        https://bugs.webkit.org/show_bug.cgi?id=59679

        * UIProcess/API/C/gtk/WKView.cpp:
        (WKViewCreate): Simply create a new view widget and return it.
        (WKViewGetPage): Use webkitWebViewBaseGetPage().
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseFinalize): Use finalize instead of dispose to
        make sure it's called only once, and release the private struct too.
        (webkitWebViewBaseInit): Create the page client.
        (webkitWebViewBaseClassInit): Don't use GObject private data structure.
        (webkitWebViewBaseCreate): New method to create a
        WebKitWebViewBase for a given context and page group.
        (webkitWebViewBaseGetWebViewInstance):
        (webkitWebViewBaseGetPage):
        * UIProcess/API/gtk/WebKitWebViewBase.h:
        * UIProcess/gtk/WebView.cpp:
        (WebKit::WebView::page): Get the page from the view widget.
        (WebKit::WebView::handleFocusInEvent): Ditto.
        (WebKit::WebView::handleFocusOutEvent): Ditto.
        (WebKit::WebView::WebView): Page client is now created with a view widget.
        (WebKit::WebView::paint): Get the page from the view widget.
        (WebKit::WebView::setSize): Ditto.
        (WebKit::WebView::handleKeyboardEvent): Ditto.
        (WebKit::WebView::handleMouseEvent): Ditto.
        (WebKit::WebView::handleWheelEvent): Ditto.
        (WebKit::WebView::close): Ditto.
        (WebKit::WebView::createDrawingAreaProxy): Ditto.
        * UIProcess/gtk/WebView.h:
        (WebKit::WebView::create): The page client will be created as
        private by the view widget, so it doesn't need to be ref counted,
        use PassOwnPtr instead of PassRefPtr.

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

        Reviewed by Martin Robinson.

        [GTK] PlatformWebView should be the view widget
        https://bugs.webkit.org/show_bug.cgi?id=59676

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseGetPage): Return the page of the view.
        * UIProcess/API/gtk/WebKitWebViewBase.h:
        * UIProcess/ChunkedUpdateDrawingAreaProxy.h: Map PlatformWebView
        to WebKitWebViewBase instead of the page client.
        * UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::page): Use the view widget
        directly.
        (WebKit::ChunkedUpdateDrawingAreaProxy::ensureBackingStore): Ditto.
        (WebKit::ChunkedUpdateDrawingAreaProxy::drawUpdateChunkIntoBackingStore): Ditto.
        * UIProcess/gtk/WebView.cpp:
        (WebKit::WebView::createDrawingAreaProxy): Pass the view widget to
        the DrawingAreaProxy constructor instead of the page client.
        * UIProcess/gtk/WebView.h: Remove getWebViewWindow() which is no
        longer needed.

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

        Reviewed by Martin Robinson.

        [GTK] WKView should be a GtkWidget
        https://bugs.webkit.org/show_bug.cgi?id=59603

        * UIProcess/API/C/gtk/WKAPICastGtk.h: Map WKViewRef to
        WebKitWebViewBase instead of WebView.
        * UIProcess/API/C/gtk/WKView.h: Remove WKViewGetWindow().
        * UIProcess/API/C/gtk/WKView.cpp:
        (WKViewCreate): Return the view instead of the page client.
        (WKViewGetPage): Use WebKitWebViewBase API to get the page client
        containing the page.

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

        Reviewed by Adam Roben.

        WebKit2 needs to notify the client when a plugin fails to initialize
        https://bugs.webkit.org/show_bug.cgi?id=59657

        Add didFailToInitializePlugin client function and call it when a plugin
        fails to initialize.

        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage):
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::didFailToInitializePlugin):
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFailToInitializePlugin):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::initializePlugin):

2011-04-27  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Antti Koivisto.

        Part of WebCore should use CFNetwork-based loader on Mac
        https://bugs.webkit.org/show_bug.cgi?id=51836

        Add PLATFORM(WIN) ifdef around shouldCacheResponse.

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

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

        Reviewed by Dan Bernstein.

        Hang if a sync message handler invalidates the connection
        https://bugs.webkit.org/show_bug.cgi?id=59627

        If dispatching incoming messages while waiting for the sync reply caused the connection to be invalidated,
        we need to return early or we'll wait forever.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::waitForSyncReply):

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

        Reviewed by Martin Robinson.

        [GTK] Move WebViewWidget to UIProcess/API/gtk
        https://bugs.webkit.org/show_bug.cgi?id=59594

        API files should be under the API directory. This view widget will
        be used by both C and gtk high level API, so it has been renamed
        to WebKitWebViewBase.

        * GNUmakefile.am:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp: Renamed from Source/WebKit2/UIProcess/gtk/WebViewWidget.cpp.
        (webkitWebViewBaseRealize):
        (webkitWebViewBaseContainerAdd):
        (webkitWebViewBaseDispose):
        (webkitWebViewBaseInit):
        (webViewExpose):
        (webViewDraw):
        (webViewSizeAllocate):
        (webViewFocusInEvent):
        (webViewFocusOutEvent):
        (webViewKeyPressEvent):
        (webViewKeyReleaseEvent):
        (getEventTime):
        (webViewButtonPressEvent):
        (webViewButtonReleaseEvent):
        (webViewScrollEvent):
        (webViewMotionNotifyEvent):
        (webkitWebViewBaseClassInit):
        (webkitWebViewBaseGetType):
        (webkitWebViewBaseGetWebViewInstance):
        (webkitWebViewBaseSetWebViewInstance):
        (webkitWebViewBaseGetIMContext):
        * UIProcess/API/gtk/WebKitWebViewBase.h: Renamed from Source/WebKit2/UIProcess/gtk/WebViewWidget.h.
        * UIProcess/gtk/WebView.cpp:
        (WebKit::WebView::WebView):

2011-04-26  Chang Shu  <cshu@webkit.org>

        Reviewed by Laszlo Gombos.

        WebKitTestRunner needs layoutTestController.addOriginAccessWhitelistEntry
        https://bugs.webkit.org/show_bug.cgi?id=42544

        Also implemented removeOriginAccessWhitelistEntry and resetOriginAccessWhitelists.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleAddOriginAccessWhitelistEntry):
        (WKBundleRemoveOriginAccessWhitelistEntry):
        (WKBundleResetOriginAccessWhitelists):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::addOriginAccessWhitelistEntry):
        (WebKit::InjectedBundle::removeOriginAccessWhitelistEntry):
        (WebKit::InjectedBundle::resetOriginAccessWhitelists):
        * WebProcess/InjectedBundle/InjectedBundle.h:

2011-04-26  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * Configurations/CompilerVersion.xcconfig:

2011-04-26  Anders Carlsson  <andersca@apple.com>

        Fix 32-bit clang build.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::windowCoversAnyScreen):
        * UIProcess/API/mac/WKTextInputWindowController.mm:
        (-[WKTextInputPanel init]):
        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
        (WebKit::WebFullScreenManagerMac::beginExitFullScreenAnimation):
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::flipScreenYCoordinate):
        (WebKit::computeFakeWindowBoundsRect):
        * WebProcess/WebPage/mac/AccessibilityWebPageObject.mm:
        (-[AccessibilityWebPageObject accessibilityHitTest:]):

2011-04-26  Sam Weinig  <sam@webkit.org>

        Reviewed by David Hyatt.

        Remove Datagrid from the tree
        https://bugs.webkit.org/show_bug.cgi?id=59543

        * Configurations/FeatureDefines.xcconfig:
        Remove feature.

2011-04-26  Chang Shu  <cshu@webkit.org>

        Reviewed by Laszlo Gombos.

        WebKitTestRunner needs layoutTestController.setAllowFileAccessFromFileURLs
        https://bugs.webkit.org/show_bug.cgi?id=57572

        Remove the unnecessary code that updates preference.

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::decode):
        * Shared/WebPreferencesStore.h:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetAllowUniversalAccessFromFileURLs):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setAllowUniversalAccessFromFileURLs):
        (WebKit::InjectedBundle::setAllowFileAccessFromFileURLs):
        * WebProcess/InjectedBundle/InjectedBundle.h:

2011-04-26  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Steve Falkenburg.

        WebKit2: Docked Inspector doesn't behave well if inspected web view isn't at 0,0
        https://bugs.webkit.org/show_bug.cgi?id=59554
        <rdar://problem/9341188>
        
        Use GetWindowRect and ScreenToClient to properly place our inspector and inspected
        web views instead of using GetClientRect. We need to correctly handle the case where
        the inspected web view isn't at 0, 0.

        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformSetAttachedWindowHeight):

2011-04-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        Choose the compiler based on the Xcode version for Snow Leopard debug builds.

        * Configurations/Base.xcconfig:
        * Configurations/CompilerVersion.xcconfig: Added.

2011-04-26  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed build fix.

        * Platform/Region.cpp: Need to include stdio.h for printf
        (at least in my Qt-Linux environment).

2011-04-26  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Turn off make built-in implicit rules for derived sources makefile
        https://bugs.webkit.org/show_bug.cgi?id=59418

        We don't use any of make's built-in implicit rules, turning them off
        speeds up parsing of the makefile.

        * WebKit2.xcodeproj/project.pbxproj:

2011-04-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebKit2 GTK build after r84785.

        * UIProcess/gtk/WebInspectorGtk.cpp:
        (WebKit::WebInspectorProxy::platformAttach):
        (WebKit::WebInspectorProxy::platformDetach):
        (WebKit::WebInspectorProxy::platformSetAttachedWindowHeight):

2011-04-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebKit2 GTK build after r84886

        * Platform/gtk/RunLoopGtk.cpp: Include WorkItem.h

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        WebKit2 should play nice with strict OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59426

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::waitForMessage):
            - Lack of OwnPtr in HashMap is sad face.  This code becomes very
              pretty if we could use OwnPtr in HashMap...
        * Platform/RunLoop.cpp:
        (RunLoop::performWork):
        (RunLoop::scheduleWork):
        * Platform/RunLoop.h:
        * Platform/mac/WorkQueueMac.cpp:
        (WorkQueue::executeWorkItem):
        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::deliverData):

2011-04-25  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Should be able to inspect Web Inspector in Debug Builds
        https://bugs.webkit.org/show_bug.cgi?id=59378

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::createInspectorPageGroup): Creates an inspector page group and enables
            developer extras in a debug build.
        (WebKit::WebInspectorProxy::inspectorPageGroup): Calls createInspectorPageGroup.

2011-04-25  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        WebKit2: Web Inspector's style sidebar fails to display when inspecting element
        https://bugs.webkit.org/show_bug.cgi?id=58071
        <rdar://problem/9243093>
        
        When creating our WebKit2 inspector views, we were creating them on both Mac and Windows
        with the empty rect for their initial size. Before we sized them correctly, the inspector
        was calling window.innerWidth on them, which returned 0, making the sidebar take up 0 pixels.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage): Create the window with the initial window width
            and height.
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage): Ditto.

2011-04-25  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Windows part of - WebKit2: Support docked mode for Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=59134
        <rdar://problem/8739005>
        
        Implement attaching and detaching of the Web Inspector on Windows,
        and also support setAttachedWindowHeight when the user changes the height
        of the docked inspector.
        
        This patch doesn't remember whether the user prefers attached or detached, and
        doesn't remember the user's preferred docked height, but that will be a separate
        bug.
        
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::attach): Set the attached flag and call platform-specific code.
        (WebKit::WebInspectorProxy::detach): Ditto.
        (WebKit::WebInspectorProxy::setAttachedWindowHeight): Call platform-specific code.
        (WebKit::WebInspectorProxy::didClose): Set m_isVisible before calling platformClose. platformClose
            calls detach if the inspector was docked, and detach needs to know whether or not the window is
            visible.
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.messages.in: Add new messages.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::pageClient): Add a getter for the page client.
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::windowReceivedMessage): Relay WM_WINDOWPOSCHANGING messages from the inspected
            web view to the WebInspectorProxy.
        (WebKit::WebInspectorProxy::onWebViewWindowPosChangingEvent): Resize the inspected web view to behave well
            with the docked inspector.
        (WebKit::WebInspectorProxy::platformClose): If we are attached, detach before destroying.
        (WebKit::WebInspectorProxy::platformAttach): Set the inspector's host window to be the inspected web view's parent
            window, so the inspected web view and the inspector are siblings.
        (WebKit::WebInspectorProxy::platformDetach): Set the inspector's host window to be the standalone inspector window.
        (WebKit::WebInspectorProxy::platformSetAttachedWindowHeight): Size the views.
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        (WebKit::WebInspectorFrontendClient::attachWindow): Call WebInspector::attach.
        (WebKit::WebInspectorFrontendClient::closeWindow): Add a call to the InspectorController to disconnect the inspector frontend
            from the inspector backend. Without this line, when we close the attached inspector, it won't re-open, because the
            inspector controller still thinks there is a frontend. This matches WebKit1's behavior, although it seems like this is
            something WebCore should handle.
        (WebKit::WebInspectorFrontendClient::detachWindow): Call WebInspector::detach.
        (WebKit::WebInspectorFrontendClient::setAttachedWindowHeight): Call WebInspector::setAttachedWindowHeight.
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaImpl::sendUpdateBackingStoreState): Add an early return if the WebPageProxy's viewSize is empty. 
            This can be needed if the inspector takes up the whole view, and it is useful to prevent a possible synchronous message
            from the UIProcess -> WebProcess to update a backing store that isn't visible in the first place.
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::attach): Send a message to the UIProcess.
        (WebKit::WebInspector::detach): Ditto.
        (WebKit::WebInspector::setAttachedWindowHeight): Ditto.
        * WebProcess/WebPage/WebInspector.h: Remove some dead code.

2011-04-25  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Alice Liu.

        WebKit2: Web Inspector: Support highlighting page elements
        https://bugs.webkit.org/show_bug.cgi?id=59263
        <rdar://problem/8767659>

        Support highlighting of page elements for the inspector in WebKit2 by
        having the WebInspectorClient be a PageOverlay Client and be responsible
        for calling InspectorController::drawNodeHighlight.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::highlight): Create our overlay if it hasn't been created,
            or call setNeedsDisplay if it has.
        (WebKit::WebInspectorClient::hideHighlight): Uninstall the page overlay if it exists.
        (WebKit::WebInspectorClient::pageOverlayDestroyed):
        (WebKit::WebInspectorClient::willMoveToWebPage): If it's being destroyed (moving to a null
            WebPage), clear the member variable.
        (WebKit::WebInspectorClient::didMoveToWebPage):
        (WebKit::WebInspectorClient::drawRect): Call InspectorController::drawNodeHighlight.
        (WebKit::WebInspectorClient::mouseEvent):
        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        (WebKit::WebInspectorClient::WebInspectorClient): Add a new member variable.

2011-04-25  Jon Lee  <jonlee@apple.com>

        Reviewed by Maciej Stachowiak.

        Overlay scroller hard to see on pages with dark background (59183)
        https://bugs.webkit.org/show_bug.cgi?id=59183
        <rdar://problem/8975367>

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): adding method to allow changing style
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::getDocumentBackgroundColor): refactoring to use common code for retrieving background color

2011-04-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9329741> Reproducible crash in WebChromeClient::invalidateContentsAndWindow() on simonscat.com
        https://bugs.webkit.org/show_bug.cgi?id=59299

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::invalidateContentsAndWindow): Null-check the document.
        (WebKit::WebChromeClient::invalidateContentsForSlowScroll): Ditto.

2011-04-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84740.
        http://trac.webkit.org/changeset/84740
        https://bugs.webkit.org/show_bug.cgi?id=59290

        change breaks apple internal builds and is incorrect
        (Requested by smfr on #webkit).

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-04-22  Jon Lee  <jonlee@apple.com>

        Reviewed by Beth Dakin.

        Overlay scroller hard to see on pages with dark background (59183)
        https://bugs.webkit.org/show_bug.cgi?id=59183
        <rdar://problem/8975367>
        
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): adding method to allow changing style

2011-04-22  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Stop responsiveness timer before calling runOpenPanel
        https://bugs.webkit.org/show_bug.cgi?id=59268
        <rdar://problem/9327944>

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runOpenPanel): Stop the timer before calling WebUIClient::runOpenPanel,
            because runOpenPanel can spin a nested run loop.

2011-04-22  Chang Shu  <cshu@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        WebKitTestRunner needs layoutTestController.setFrameFlatteningEnabled
        https://bugs.webkit.org/show_bug.cgi?id=42536

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetFrameFlatteningEnabled):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setFrameFlatteningEnabled):
        * WebProcess/InjectedBundle/InjectedBundle.h:

2011-04-22  Alejandro G. Castro  <alex@igalia.com> and Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Use the libWebCore.a convenience library when compiling WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=59258

        * GNUmakefile.am: Remove the libWebKit2 convenience library and use the
        libWebCore convenience library when compiling WebKit2. Not only does this
        maintain the CPPFLAGS isolation, it prevents double-compilation of WebCore
        in some cases.

2011-04-19  Jer Noble  <jer.noble@apple.com>

        Reviewed by Daniel Bates.

        Full Screen from within an <iframe> does not cause <iframe> to resize.
        https://bugs.webkit.org/show_bug.cgi?id=58638

        Tests: fullscreen/full-screen-frameset-allowed.html
               fullscreen/full-screen-frameset-not-allowed.html

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]): Cancel the background animation
            if the full screen animation finishes first.
        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
        (WebKit::WebFullScreenManagerMac::WebFullScreenManagerMac): m_fullScreenRootLayer was uninitialized.

2011-04-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Brian Weinstein.

        WebKit2: Implement JavaScript unresponsiveness callback
        https://bugs.webkit.org/show_bug.cgi?id=59248

        Add support for suspending JavaScript in response to a callback.

        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::shouldInterruptJavaScript):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::shouldInterruptJavaScript):
        * UIProcess/WebUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::shouldInterruptJavaScript):

2011-04-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Paint the bounding rect of the dirty region instead of individual rectangles when the region
        covers at least 3/4 of its bounds.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::shouldPaintBoundsRect): Use floating point math so that the logic that was supposed to
        achieve this actually works.

2011-04-22  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        Crash at WebKit::WebFullScreenManagerMac::beginExitFullScreenAnimation + 79
        https://bugs.webkit.org/show_bug.cgi?id=59225

        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
        (WebKit::WebFullScreenManagerMac::beginEnterFullScreenAnimation): Guard against 
            m_fullScreenRootLayer being NULL.
        (WebKit::WebFullScreenManagerMac::beginExitFullScreenAnimation): Ditto.

2011-04-22  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        Allow MediaPlayerPrivateAVFoundation to be disabled via a preference.
        https://bugs.webkit.org/show_bug.cgi?id=59179

        Add API to allow the WebCore Settings preference to be called from the UIProcess.

        * Shared/WebPreferencesStore.h: Added new preference definition macro.
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetAVFoundationEnabled): Added.
        (WKPreferencesGetAVFoundationEnabled): Added.
        * UIProcess/API/C/WKPreferences.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Pass new preference along to WebCore
            Settings.

2011-04-22  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Stop Responsiveness Timer when WebPageProxy closes or WebProcess crashes
        https://bugs.webkit.org/show_bug.cgi?id=59210

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close): Stop the responsiveness timer.
        (WebKit::WebPageProxy::processDidCrash): Ditto.

2011-04-21  Adam Roben  <aroben@apple.com>

        Give windowless plugins' context menus an owner window in the same thread as the plugin

        In some cases, plugins pass the WKView's HWND to the ::TrackPopupMenu API. ::TrackPopupMenu
        fails in this case because the WKView's HWND is owned by another process/thread. We work
        around this by hooking the ::TrackPopupMenu API and providing our own window that's in the
        same thread as the plugin instead.

        I couldn't figure out how to write a test for this. :-(

        Fixes <http://webkit.org/b/51063> <rdar://problem/8769281> REGRESSION (WebKit2): No context
        menu appears when right-clicking on windowless Flash plugin

        Reviewed by Brian Weinstein, and looked at suspiciously by Jeff Miller.

        * Platform/Module.h: Added installIATHook on Windows.

        * Platform/win/ModuleWin.cpp:
        (WebKit::overwriteReadOnlyMemory): New helper function. Basically a wrapper around memcpy,
        but uses ::VirtualProtect to allow writing to otherwise-read-only memory.
        (WebKit::findFunctionPointerAddress): New helper function. The first overload iterates over
        the imported modules and functions looking for the given one. If found, returns the address
        of the function pointer that is used when calling that function. The second overload calls
        the first, first passing it an enumerator for the image's imported modules, then passing it
        an iterator for the image's delay-loaded modules.
        (WebKit::Module::installIATHook): Added. Finds the address of the function pointer that's
        used when code in this module calls the given function, then overwrites the function pointer
        with the passed-in one. Future calls to the given function made by code in this module
        should then end up calling to the passed-in function instead of the original one.

        * Shared/Plugins/Netscape/NetscapePluginModule.h:
        (WebKit::NetscapePluginModule::module): Added this simple getter.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h: Added some new Windows-only members.

        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::CurrentPluginSetter::CurrentPluginSetter):
        (WebKit::CurrentPluginSetter::~CurrentPluginSetter):
        This RAII class sets/unsets the currentPlugin global.

        (WebKit::registerPluginView): Changed to use instanceHandle() instead of the mysterious
        gInstance.
        (WebKit::NetscapePlugin::platformPostInitialize): For windowless plugins, hook the
        ::TrackPopupMenu API and create a window to be used as the owner for context menus created
        by this plugin. (Also changed the ::CreateWindowExW call for windowed plugins to pass an
        instance handle so that the window will be associated with WebKit.dll instead of
        WebKit2WebProcess.exe. This should have no visible effect, but is more correct.)
        (WebKit::NetscapePlugin::platformDestroy): For windowless plugins, destroy the context menu
        owner window we created above.

        (WebKit::NetscapePlugin::platformPaint):
        (WebKit::NetscapePlugin::platformHandleMouseEvent):
        (WebKit::NetscapePlugin::platformHandleWheelEvent):
        (WebKit::NetscapePlugin::platformSetFocus):
        (WebKit::NetscapePlugin::platformHandleMouseEnterEvent):
        (WebKit::NetscapePlugin::platformHandleMouseLeaveEvent):
        (WebKit::NetscapePlugin::platformHandleKeyboardEvent):
        Set ourselves as the current plugin.

        (WebKit::NetscapePlugin::hookedTrackPopupMenu): Added. This is the function that actually
        gets called when windowless plugins call ::TrackPopupMenu. If the passed-in owner window is
        owned by the current thread, we have nothing to do; ::TrackPopupMenu should work just fine.
        Otherwise, we use the current plugin's context menu owner window as the context menu's
        owner. We also set focus to the new owner window because otherwise weird behavior results
        (e.g., it's possible to scroll the WKView while the context menu is up).

2011-04-21  Adam Roben  <aroben@apple.com>

        Use WebCore's do-nothing window class instead of creating our own

        Fixes <http://webkit.org/b/59102> WebKit has too many dummy window classes

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.cpp:
        (WebKit::createDummyWindow): Less code!

2011-04-22  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Cannot play flash with NSPluginWrapper
        https://bugs.webkit.org/show_bug.cgi?id=59125

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue): Handle the case when we have been
        called with a null plugin instance.

2011-04-22  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Sam Weinig.

        [Qt][WK2] Implement DrawingAreaImpl for Qt.
        https://bugs.webkit.org/show_bug.cgi?id=59171

        * WebKit2.pro: Build files necessary for DrawingAreaImpl.
        * DerivedSources.pro: Build message receivers for DrawingArea and DrawingAreaProxy.

        * Shared/qt/LayerTreeContextQt.cpp:
        (WebKit::LayerTreeContext::LayerTreeContext): Stub.
        (WebKit::LayerTreeContext::~LayerTreeContext): Stub.
        (WebKit::LayerTreeContext::encode): Stub.
        (WebKit::LayerTreeContext::decode): Stub.
        (WebKit::LayerTreeContext::isEmpty): Stub.
        (WebKit::operator==): Stub.

        * Shared/qt/ShareableBitmapQt.cpp:
        (WebKit::ShareableBitmap::paint): Don't translate the painter to accomodate the
        source rect. The rect is already adjusted at the call site.

        * UIProcess/API/qt/qgraphicswkview.h: Add "Impl" to QGraphicsWKView::BackingStoreType.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::createDrawingAreaProxy): Create DrawingAreaProxyImpl if requested.
        (QWKPagePrivate::paint): Call the correct paint() method for DrawingAreaProxyImpl,
        since this drawing area will simple ASSERT_NOT_REACHED() in the "normal" paint().

        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create): Allow creation of DrawingAreaImpl for Qt.

        * UIProcess/BackingStore.h: Add Qt-specific types and backing store.

        * UIProcess/qt/BackingStoreQt.cpp:
        (WebKit::BackingStore::paint): Implemented.
        (WebKit::BackingStore::incorporateUpdate): Implemented.
        (WebKit::BackingStore::scroll): Implemented using QPixmap::scroll().

        * UIProcess/DrawingAreaProxy.h: Enable drawing area message receivers for Qt.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage): Ditto.
        * WebProcess/WebPage/DrawingArea.h: Ditto.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveMessage): Ditto.

2011-04-22  Jon Honeycutt  <jhoneycutt@apple.com>

        WinCairo build fix. Unreviewed.

        * WebProcess/Downloads/curl/DownloadCurl.cpp:
        (WebKit::Download::useCredential):
        Stubbed.
        (WebKit::Download::continueWithoutCredential):
        Stubbed.
        (WebKit::Download::cancelAuthenticationChallenge):
        Stubbed.

2011-04-21  Jon Honeycutt  <jhoneycutt@apple.com>

        Need to support authentication for downloads in WebKit2 on Windows
        https://bugs.webkit.org/show_bug.cgi?id=59175
        <rdar://problem/9206151>
        <rdar://problem/8958280>

        Reviewed by Maciej Stachowiak.

        * WebProcess/Downloads/Download.cpp:
        Include DownloadAuthenticationClient.h.

        * WebProcess/Downloads/Download.h:
        Declare a function to get or create the authentication client, a member
        var to hold it, and functions that the client can call to use a
        credential, continue without a credential, or cancel an auth challenge.

        * WebProcess/Downloads/DownloadAuthenticationClient.cpp: Added.
        (WebKit::DownloadAuthenticationClient::DownloadAuthenticationClient):
        (WebKit::DownloadAuthenticationClient::receivedCredential):
        Tell the Download to use the credential.
        (WebKit::DownloadAuthenticationClient::receivedRequestToContinueWithoutCredential):
        Tell the Download to continue with credentials.
        (WebKit::DownloadAuthenticationClient::receivedCancellation):
        Tell the Download to cancel the challenge.

        * WebProcess/Downloads/DownloadAuthenticationClient.h: Added.
        (WebKit::DownloadAuthenticationClient::create):
        Return a new DownloadAuthenticationClient.
        (WebKit::DownloadAuthenticationClient::detach):
        Clear the Download.
        (WebKit::DownloadAuthenticationClient::refAuthenticationClient):
        (WebKit::DownloadAuthenticationClient::derefAuthenticationClient):

        * WebProcess/Downloads/cfnet/DownloadCFNet.cpp:
        (WebKit::Download::useCredential):
        Create a CFURLCredentialRef from the WebCore credential, and tell
        CFNetwork to use it for the auth challenge.
        (WebKit::Download::continueWithoutCredential):
        Call CFURLDownloadUseCredential with a null credential.
        (WebKit::Download::cancelAuthenticationChallenge):
        Cancel the download, and clear m_download.
        (WebKit::Download::authenticationClient):
        Create if needed and return a DownloadAuthenticationClient.
        (WebKit::Download::platformInvalidate):
        Detach the DownloadAuthenticationClient.
        (WebKit::didReceiveAuthenticationChallengeCallback):
        Call Download::didReceiveAuthenticationChallenge(), passing a
        WebCore::AuthenticationChallenge with our DownloadAuthenticationClient.
        (WebKit::Download::receivedCredential):
        Get the client from the auth challenge, and call through to it.
        (WebKit::Download::receivedRequestToContinueWithoutCredential):
        Ditto.
        (WebKit::Download::receivedCancellation):
        Ditto.

        * win/WebKit2.vcproj:
        Add new files to project.

2011-04-21  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        Minimize synchronous calls during loading
        https://bugs.webkit.org/show_bug.cgi?id=59169

        <rdar://problem/9320128> REGRESSION(r84526): WK2 windows unresponsive

        * UIProcess/API/mac/WKView.mm:
        (-[WKView resignFirstResponder]):
        (-[WKView _resetTextInputState]):
        Made _resetTextInputState deal with client side state only, letting Editor composition be
        discarded more discriminately.

2011-04-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Roben.

        Add a feature define to allow <details> and <summary> to be disabled
        https://bugs.webkit.org/show_bug.cgi?id=59118
        <rdar://problem/9257045>

        * Configurations/FeatureDefines.xcconfig:

2011-04-21  Ivan Krstić  <ike@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9311103>

        Remove unnecessary QTKitServer and Apple Events permissions
        from the WebProcess sandbox.

        * WebProcess/com.apple.WebProcess.sb:

2011-04-21  Ivan Krstić  <ike@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9033535>

        Mute sandbox violations when attempting to read a temporary
        CFNetwork keychain.

        * WebProcess/com.apple.WebProcess.sb:

2011-04-21  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Sam Weinig.

        Add Frame* to the argument lists of canCopyCut and canPaste
        https://bugs.webkit.org/show_bug.cgi?id=59153

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::canCopyCut):
        (WebKit::WebEditorClient::canPaste):
        * WebProcess/WebCoreSupport/WebEditorClient.h:

2011-04-21  Ivan Krstić  <ike@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/8774116>

        The WebProcess sandbox should only allow access to the
        parts of the Darwin cache directory needed by the Security
        framework.

        * WebProcess/com.apple.WebProcess.sb:

2011-04-21  Ivan Krstić  <ike@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9311053>

        The WebProcess sandbox should not allow opening arbitrary
        IOKit user clients. Restrict to a whitelist required for normal
        WebProcess operation, including sound and accelerated graphics.

        * WebProcess/com.apple.WebProcess.sb:

2011-04-21  Ivan Krstić  <ike@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9311037>

        The WebProcess sandbox should not allow modification of the
        CoreAudio component cache.

        * WebProcess/com.apple.WebProcess.sb:

2011-04-21  Ivan Krstić  <ike@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9263428>

        The WebProcess sandbox should only allow outbound networking
        to remote destinations and local kernel controls.

        * WebProcess/com.apple.WebProcess.sb:

2011-04-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82052.
        http://trac.webkit.org/changeset/82052
        https://bugs.webkit.org/show_bug.cgi?id=59135

        New full screen api should be opt-in, not opt-out. (Requested
        by jernoble on #webkit).

        * Shared/WebPreferencesStore.h:

2011-04-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=59048
        Need to track whether overlay scrollbar is currently visible and in lower-
        righthand corner
        -and corresponding-
        <rdar://problem/9211232>

        WebPageProxy now stores an IntRect of the scroller thumb set by WebCore through 
        the client.

        _windowResizeMouseLocationIsInVisibleScrollerThumb tests if the parameter point is 
        inside the cached scroller thumb rect.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _windowResizeMouseLocationIsInVisibleScrollerThumb:]):

        Client work to cache the rect.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::processDidCrash):
        (WebKit::WebPageProxy::notifyScrollerThumbIsVisibleInRect):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::visibleScrollerThumbRect):
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::notifyScrollerThumbIsVisibleInRect):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

        New WebSystemInterface is needed by WebCore for this.
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-04-21  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Emit QWKPage::urlChanged() when navigating within the same document.
        https://bugs.webkit.org/show_bug.cgi?id=59044

        Hook up the didSameDocumentNavigationForFrame callback to QWKPage::urlChanged().

        * UIProcess/API/qt/ClientImpl.cpp:
        (qt_wk_didSameDocumentNavigationForFrame):
        * UIProcess/API/qt/ClientImpl.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage):

2011-04-20  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKit2: Unconfirmed inline input session persists after reload
        https://bugs.webkit.org/show_bug.cgi?id=59054
        <rdar://problem/9291086>

        Makes the inline input get properly confirmed or discarded when changing selection,
        navigating to another page, focusing another view in the window, or after a web process
        crash.

        * Shared/EditorState.h: (WebKit::EditorState::EditorState):
        * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::editorState):
        Added a variable that Editor sets while processing input method calls. We don't want
        selection changes caused by -setMarkedText: discard the composition!
        
        * UIProcess/PageClient.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::updateTextInputState):
        (WebKit::PageClientImpl::resetTextInputState):
        Extended updateSecureInputState() to potentially confirm the current inline input session.
        Added resetTextInputState, which is to be called when we get out of the current web page.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView resignFirstResponder]): Just call _resetTextInputState instead of dealing with
        input state here.
        (-[WKView _updateSecureInputState]): Use _isFocused to make the code simpler.
        (-[WKView _updateTextInputStateIncludingSecureInputState:]): Confirm the current inline
        input session if selection changed for any other reason but an input method changing the
        composition. We will want to do other work here, like dismissing a dictionary pop-up,
        updating a font panel etc.
        (-[WKView _resetTextInputState]): Added. We don't want secure text input persist after
        navigations, crashes an such, and we also don't want input methods to remember inline input
        state. Relying on selection changed notifications is fragile and insufficient.

        * UIProcess/API/mac/WKViewInternal.h: Added internal functions to keep the build unbroken.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame): This is the best chance we have to reset input
        state for a new page. This doesn't work well for cached page loads, but WK1 is quite broken
        in that case, too.
        (WebKit::WebPageProxy::editorStateChanged): Moved some logic up to the client, since the
        function now does much more than before.

        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebPageProxyMac.mm: (WebKit::WebPageProxy::confirmCompositionWithoutDisturbingSelection):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::confirmCompositionWithoutDisturbingSelection):
        Added confirmCompositionWithoutDisturbingSelection(). When we confirm the composition due
        to selection change, we obvisouly don't want the selection to move back.

2011-04-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Simon Fraser.

        Remove warnings from DrawingAreaImpl and related classes
        https://bugs.webkit.org/show_bug.cgi?id=59120

        DrawingAreaImpl is mature enough for others to adopt. Remove warnings.

        * UIProcess/BackingStore.cpp:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        * WebProcess/WebPage/LayerTreeHost.cpp:

2011-04-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Simon Fraser.

        Deploy GraphicsContextStateSaver in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=59116

        * UIProcess/FindIndicator.cpp:
        (WebKit::FindIndicator::draw):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::paint):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::drawRect):
        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::drawRect):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::drawRect):
        (WebKit::WebPage::drawPageOverlay):

2011-04-21  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Need a way to get a snapshot of the visible contents of a page from the UI Process.
        https://bugs.webkit.org/show_bug.cgi?id=59035

        Added a sync call from the UI Process to the Web Process with comments saying that it should
        be removed as soon as possible.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageVisibleContentsSnapshot):
        * UIProcess/API/C/WKPagePrivate.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::createSnapshotOfVisibleContent):
        * UIProcess/WebPageProxy.h:

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createSnapshotOfVisibleContent):
        Ask the FrameView for the visibleContentRect, and call scaledSnapshotInDocumentCoordinates
        with a scale factor of 1 (which preserves the current scaling of the page - e.g. if the
        page is already zoomed then the snapshot will reflect the zoomed content).
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2011-04-20  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Dimitri Glazkov.

        layoutTestController can create and destroy shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=59058

        Support for new methods in WK2 WebKitTestRunner.

        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleCopyElementEnsureShadowRoot):
        (WKBundleNodeHandleRemoveShadowRoot):
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::elementShadowRoot):
        (WebKit::InjectedBundleNodeHandle::elementEnsureShadowRoot):
        (WebKit::InjectedBundleNodeHandle::elementRemoveShadowRoot):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:

2011-04-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Don't discard backing stores for hung web processes
        https://bugs.webkit.org/show_bug.cgi?id=59039
        <rdar://problem/9237090>

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewStateDidChange):
        (WebKit::WebPageProxy::processDidBecomeUnresponsive):
        (WebKit::WebPageProxy::processDidBecomeResponsive):
        Call updateBackingStoreDiscardableState.

        (WebKit::WebPageProxy::updateBackingStoreDiscardableState):
        Never mark the backing store as discardable if the web process is hung

2011-04-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam Weinig.

        Reproducible crash under WebPageProxy::didReceiveEvent
        https://bugs.webkit.org/show_bug.cgi?id=59036
        <rdar://problem/9252083>

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _resendKeyDownEvent:]): Protect against self-destruction
        when re-dispatching the event.        
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::createWebPage): Fixed a type mismatch
        I noticed while debugging.

2011-04-20  Timothy Hatcher  <timothy@apple.com>

        Make the Web Insepctor come to the front when a breakpoint is hit.

        <https://webkit.org/b/57480> REGRESSION (WebKit2): Inspector doesn't come to the front when a breakpoint is hit in the debugger
        <rdar://problem/9209472>

        Reviewed by Adam Roben.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::bringToFront): Added. Call platformBringToFront.
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.messages.in: Added BringToFront.
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformBringToFront): Added. Call orderFront:.
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformBringToFront): Added. Call ShowWindow.
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        (WebKit::WebInspectorFrontendClient::bringToFront): Call WebInspector::bringToFront.
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::bringToFront): Added. Send WebInspectorProxy::BringToFront message.
        * WebProcess/WebPage/WebInspector.h: Added bringToFront.

2011-04-20  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Adam Roben.

        REGRESSION (WebKit2): CSS animations on pages that use accelerated compositing stop after switching tabs
        https://bugs.webkit.org/show_bug.cgi?id=57868
        
        Subclassed setRootCompositingLayer so it can call ensureAnimationsSubmitted on Win.

        * WebProcess/WebPage/ca/LayerTreeHostCA.h:
            Make setRootCompositingLayer protected so it can be called from subclass
        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.cpp:
            Override setRootCompositingLayer to add call to root layer's
            PlatformCALayer::ensureAnimationsSubmitted method
        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.h:

2011-04-18  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        Adopt QTKit API for listing and deleting file in its media cache.
        <rdar://problem/9130029> 

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Initialize new functions.

2011-04-20  Alejandro G. Castro  <alex@igalia.com>

        Fixed GTK+ compilation after r84206.

        * GNUmakefile.am:

2011-04-20  Adam Roben  <aroben@apple.com>

        Remove some unnecessary VS junk related to NativeWebMouseEventWin.cpp

        * win/WebKit2.vcproj:

2011-04-20  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Cleanup includepath adjustment for generated files
        https://bugs.webkit.org/show_bug.cgi?id=58869

        * WebKit2.pri: Add the directory of generated files to the include
        path with absolute path to make it valid in the final build step.

2011-04-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        UI process thinks the page is unresponsive when a plug-in is showing a context menu
        https://bugs.webkit.org/show_bug.cgi?id=58943
        <rdar://problem/9299901>

        Change the HandleMouseEvent message to have a delayed reply and make the PluginControllerProxy
        respond to it immediately, before even passing the event to the plug-in. Since it doesn't matter
        for mouse events whether the plug-in handled them or not we can do this.

        Another solution could have been to make handleMouseEvent an asynchronous message, but that could
        mess up the message ordering so this seemed like the least intrusive change.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::handleMouseEvent):
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginControllerProxy.messages.in:

2011-04-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Terminate hung plug-in processes after 45 seconds
        https://bugs.webkit.org/show_bug.cgi?id=58932
        <rdar://problem/8083219>

        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::pluginSyncMessageSendTimedOut):
        Find the plug-in process proxy and terminate it.

        (WebKit::PluginProcessManager::pluginProcessWithPath):
        Add new helper function.

        (WebKit::PluginProcessManager::getOrCreatePluginProcess):
        Call pluginProcessWithPath.

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::terminate):
        Terminate the process.

        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::pluginSyncMessageSendTimedOut):
        Call PluginProcessManager::pluginSyncMessageSendTimedOut.

        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        Add PluginSyncMessageSendTimedOut message.

        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::defaultSyncMessageTimeout):
        (WebKit::PluginProcessConnection::PluginProcessConnection):
        Set a sync message timeout on the plug-in process connection.

        (WebKit::PluginProcessConnection::syncMessageSendTimedOut):
        Send a message to the web process proxy.

2011-04-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adele Peterson.

        WebKit2: Merge SelectionState and TextInputState
        https://bugs.webkit.org/show_bug.cgi?id=58919

        Combined TextInputState and EditorState in one structure, which is updated whenever we get
        a chance to. There is no sense to keep possibly stale SelectionState data when we have already
        requested the most recent data synchronously.

        This also simplifies the code, as we don't need to pass the state around in a separate variable.

        * GNUmakefile.am:
        * Scripts/webkit2/messages.py:
        * Shared/EditorState.h: Copied from Source/WebKit2/Shared/SelectionState.h.
        (WebKit::EditorState::EditorState):
        * Shared/SelectionState.h: Removed.
        * Shared/mac/TextInputState.h: Removed.
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::interpretKeyEvent):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView validRequestorForSendType:returnType:]):
        (-[WKView validateUserInterfaceItem:]):
        (-[WKView shouldDelayWindowOrderingForEvent:]):
        (-[WKView doCommandBySelector:]):
        (-[WKView insertText:replacementRange:]):
        (-[WKView _handleStyleKeyEquivalent:]):
        (-[WKView _executeSavedKeypressCommands]):
        (-[WKView inputContext]):
        (-[WKView hasMarkedText]):
        (-[WKView unmarkText]):
        (-[WKView setMarkedText:selectedRange:replacementRange:]):
        (-[WKView attributedSubstringForProposedRange:actualRange:]):
        (-[WKView _interpretKeyEvent:savingCommandsTo:WebCore::]):
        (-[WKView _updateSecureInputState]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::editorStateChanged):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::editorState):
        (WebKit::WebPageProxy::hasSelectedRange):
        (WebKit::WebPageProxy::isContentEditable):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setComposition):
        (WebKit::WebPageProxy::confirmComposition):
        (WebKit::WebPageProxy::insertText):
        (WebKit::WebPageProxy::executeKeypressCommands):
        (WebKit::WebPageProxy::writeSelectionToPasteboard):
        (WebKit::WebPageProxy::readSelectionFromPasteboard):
        (WebKit::WebPageProxy::interpretQueuedKeyEvent):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::compositionSelectionChanged):
        (WebKit::WebView::onIMEComposition):
        (WebKit::WebView::onIMEEndComposition):
        (WebKit::WebView::onIMERequestCharPosition):
        (WebKit::WebView::onIMERequest):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::respondToChangedSelection):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::handleEditingKeyboardEvent):
        (WebKit::WebPage::setComposition):
        (WebKit::WebPage::confirmComposition):
        (WebKit::WebPage::insertText):
        (WebKit::WebPage::executeKeypressCommands):
        * win/WebKit2.vcproj:

2011-04-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Timothy Hatcher.

        100% reproducible crash when right-clicking any element in Web Inspector on any page
        https://bugs.webkit.org/show_bug.cgi?id=58822

        Web Inspector changes selection from JavaScript, and checks in UI process are insufficient
        when selection is changing asynchronously.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::writeSelectionToPasteboard): Check that there is a selection, matching WK1
        and UI process side. Perhaps the check should really be in WebCore, but for now, it's a
        WebKit responsibility.
        (WebKit::WebPage::readSelectionFromPasteboard): Same check, for no other reason but consistency.

2011-04-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add syncMessageSendTimedOut CoreIPC Connection::Client member function
        https://bugs.webkit.org/show_bug.cgi?id=58928

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::waitForSyncReply):
        Call syncMessageSendTimedOut.

        * Platform/CoreIPC/Connection.h:
        Add syncMessageSendTimedOut to Connection::Client.

        * PluginProcess/PluginProcess.cpp:
        * PluginProcess/PluginProcess.h:
        * PluginProcess/WebProcessConnection.cpp:
        * PluginProcess/WebProcessConnection.h:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        * UIProcess/WebProcessProxy.h:
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        * WebProcess/Plugins/PluginProcessConnection.h:
        * WebProcess/WebProcess.cpp:
        * WebProcess/WebProcess.h:
        Add syncMessageSendTimedOut stubs.

2011-04-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Alexey Proskuryakov.

        Replace the didFailToSendSyncMessage Connection::Client function with a flag
        https://bugs.webkit.org/show_bug.cgi?id=58923

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::Connection):
        Initialize m_shouldExitOnSyncMessageSendFailure to false.

        (CoreIPC::Connection::setShouldExitOnSyncMessageSendFailure):
        Set m_didCloseOnConnectionWorkQueueCallback.

        (CoreIPC::Connection::sendSyncMessage):
        Call didFailToSendSyncMessage if we fail to send the sync message for some reason.

        (CoreIPC::Connection::didFailToSendSyncMessage):
        if m_shouldExitOnSyncMessageSendFailure is true, exit.

        * Platform/CoreIPC/Connection.h:
        Remove didFailToSendSyncMessage from Connection::Client.

        * PluginProcess/PluginProcess.cpp:
        * PluginProcess/PluginProcess.h:
        Remove didFailToSendSyncMessage.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initialize):
        * WebProcess/WebProcess.h:
        Remove didFailToSendSyncMessage. Call setShouldExitOnSyncMessageSendFailure on our
        UI process connection.

2011-04-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add a way to set the default sync message timeout for a CoreIPC connection
        https://bugs.webkit.org/show_bug.cgi?id=58908

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::Connection):
        Initialize m_defaultSyncMessageTimeout.

        (CoreIPC::Connection::setDefaultSyncMessageTimeout):
        Set the m_defaultSyncMessageTimeout member variable.

        (CoreIPC::Connection::waitForSyncReply):
        Handle the timeout being one of our two special magic values.

        * Platform/CoreIPC/Connection.h:
        Add a DefaultTimeout constant and change the NoTimeout constant to be -1.

2011-04-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Rename lengthReceived to encodedDataLength/dataLength
        https://bugs.webkit.org/show_bug.cgi?id=58883

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

2011-04-19  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Antonio Gomes.

        WebKit2: Typo fix in WebPopupMenu::Type.
        https://bugs.webkit.org/show_bug.cgi?id=58891

        Fixed a typo, Seperator -> Separator.
        Also removed m_ prefix on an argument variable name.

        * Shared/WebPopupItem.h:
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::populate):
        * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
        (WebKit::WebPopupMenu::populateItems):

2011-04-19  Jon Honeycutt  <jhoneycutt@apple.com>

        WKContextDownloadURLRequest() should return a WKDownloadRef
        https://bugs.webkit.org/show_bug.cgi?id=58867
        Part of <rdar://problem/8931717>

        Reviewed by Steve Falkenburg.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextDownloadURLRequest):
        Return the result of calling WebContext::download().

        * UIProcess/API/C/WKContext.h:
        Updated return type of WKContextDownloadURLRequest().

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::download):
        Return the DownloadProxy returned by createDownloadProxy().
        (WebKit::WebContext::createDownloadProxy):
        Return the DownloadProxy.

        * UIProcess/WebContext.h:
        Changed return type of download() and createDownloadProxy().

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        Call the DownloadProxy's downloadID() function to get the ID.

2011-04-18  Jia Pu  <jpu@apple.com>

        Reviewed by Mark Rowe.

        WebKit needs to stop importing <AppKit/NSTextChecker.h>
        https://bugs.webkit.org/show_bug.cgi?id=58798
        <rdar://problem/9294938>

        Use public header <AppKit/NSSpellChecker.h> instead.

        * UIProcess/mac/CorrectionPanel.h:
        * UIProcess/mac/CorrectionPanel.mm:
        (correctionIndicatorType):
        (WebKit::CorrectionPanel::show):
        (WebKit::CorrectionPanel::dismissInternal):
        (WebKit::CorrectionPanel::handleAcceptedReplacement):
        * UIProcess/mac/TextCheckerMac.mm:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:

2011-04-05  Jer Noble  <jer.noble@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: WKTR should support WebKit2 full screen APIs
        https://bugs.webkit.org/show_bug.cgi?id=56318

        Add a new WKBundlePage API for Full Screen events, and move some of the implementation
        of WebFullScreenManager into the new InjectedBundlePageFullScreenClient class, so that
        the default behavior can be overridden by a WKBundlePageFullScreenClient.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::supportsFullScreen): Moved contents into InjectedBundlePageFullScreenClient.
        (WebKit::WebFullScreenManager::enterFullScreenForElement): Ditto.
        (WebKit::WebFullScreenManager::exitFullScreenForElement): Ditto.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetFullScreenClient): Added.
        (WKBundlePageWillEnterFullScreenForElement): Added.
        (WKBundlePageDidEnterFullScreenForElement): Added.
        (WKBundlePageWillExitFullScreenForElement): Added.
        (WKBundlePageDidExitFullScreenForElement): Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageFullScreenClient.cpp: Added.
        (WebKit::InjectedBundlePageFullScreenClient::supportsFullScreen): Added. 
        (WebKit::InjectedBundlePageFullScreenClient::enterFullScreenForElement): Added.
        (WebKit::InjectedBundlePageFullScreenClient::exitFullScreenForElement): Added.
        * WebProcess/InjectedBundle/InjectedBundlePageFullScreenClient.h: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::initializeInjectedBundleFullScreenClient): Added.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::injectedBundleFullScreenClient): Added.

2011-04-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        Re-add a null check lost in r83081
        https://bugs.webkit.org/show_bug.cgi?id=58846

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::getSelectedRange):

2011-04-18  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Clean up tool-tip/status-bar confusion.
        https://bugs.webkit.org/show_bug.cgi?id=58844

        Tool-tips were incorrectly hooked up to the status bar text.
        Chrome::setStatusbarText() now correctly causes the QWKPage::statusBarMessage() signal.

        New API:
        - QWKPage::toolTipChanged(const QString& toolTip) [signal]

        QGraphicsWKView will automatically listen for this and set its own toolTip().

        * UIProcess/API/qt/ClientImpl.cpp:
        (qt_wk_setStatusText):
        * UIProcess/API/qt/ClientImpl.h:
        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::QGraphicsWKView):
        (QGraphicsWKViewPrivate::onToolTipChanged):
        * UIProcess/API/qt/qgraphicswkview.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::toolTipChanged):
        (QWKPage::QWKPage):
        * UIProcess/API/qt/qwkpage.h:

2011-04-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        sandbox violation for ~/Library/Dictionaries
        https://bugs.webkit.org/show_bug.cgi?id=58841
        <rdar://problem/9294770>

        * WebProcess/com.apple.WebProcess.sb: Add to sandbox profile.
        No obvious harm from allowing this, though it's not 100% clear
        why it's needed.

2011-04-18  Anders Carlsson  <andersca@apple.com>

        Try to fix the Windows build.

        * Scripts/webkit2/messages.py:

2011-04-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Get rid of WebProcessProxyLegacyMessage
        https://bugs.webkit.org/show_bug.cgi?id=58825

        * GNUmakefile.am:
        * Platform/CoreIPC/MessageID.h:
        * Shared/CoreIPCSupport/WebProcessProxyMessageKinds.h: Removed.
        * UIProcess/WebProcessProxy.cpp:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        * win/WebKit2.vcproj:

2011-04-18  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * UIProcess/Plugins/PluginInfoStore.h:

2011-04-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Use the message generator for the GetPluginProcessConnection message
        https://bugs.webkit.org/show_bug.cgi?id=58815

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction):
        (CoreIPC::handleMessageDelayed):
        Add helper functions.

        * UIProcess/Plugins/PluginInfoStore.h:
        Mark class noncopyable.

        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::getPluginProcessConnection):
        This now takes a delayed reply.

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::getPluginProcessConnection):
        This now takes a delayed reply.

        (WebKit::PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch):
        (WebKit::PluginProcessProxy::didCreateWebProcessConnection):
        Call DelayedReply::send.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPluginProcessConnection):
        This now takes a delayed reply.
        
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        No need to handle this message here.

        * UIProcess/WebProcessProxy.messages.in:
        Add GetPluginProcessConnection message.

        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
        Don't use deprecatedSendSync.

2011-04-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Finish implementing delayed sync replies in the CoreIPC message generator
        https://bugs.webkit.org/show_bug.cgi?id=58814

        Put the DelayedReply function definitions in the .cpp file and fix bugs found by
        actually trying to compile the generated files.

        * Scripts/webkit2/messages.py:
        * Scripts/webkit2/messages_unittest.py:

2011-04-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Reproducible crash in Find on Page, on pages that use accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=58793
        <rdar://problem/9295870>

        Move the call to PageOverlay::setNeedsDisplay() back to WebPage::installPageOverlay;
        it needs to be called after we've told the drawing area that a page overlay has been installed.

        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::setPage):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::installPageOverlay):

2011-04-18  Jeff Miller  <jeffm@apple.com>

        Reviewed by Timothy Hatcher.

        WKFrameLoadState should be a uint32_t to match our API conventions
        https://bugs.webkit.org/show_bug.cgi?id=58785

        * UIProcess/API/C/WKFrame.h: typedef WKFrameLoadState as a uint32_t and define its values as an anonymous enum.

2011-04-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebKit2 GTK build after 84017.

        * GNUmakefile.am:
        * Shared/NativeWebMouseEvent.h:
        (WebKit::NativeWebMouseEvent::nativeEvent):
        * Shared/gtk/NativeWebMouseEventGtk.cpp: Copied from Source/WebKit2/Shared/NativeWebMouseEvent.h.
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent):
        * UIProcess/gtk/WebView.cpp:
        (WebKit::WebView::handleMouseEvent):

2011-04-17  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/58463> Switch HTTP pipelining from user default to private setting
        <rdar://problem/9268729>

        Reviewed by Dan Bernstein.

        This replaces support for the WebKitEnableHTTPPipelining user
        default with methods on the WebCore::ResourceRequest class in
        WebCore, the WebView class in WebKit1, and the WebContext class
        in WebKit2.  It also removes support for the
        WebKitForceHTTPPipeliningPriorityHigh user default which was not
        needed.

        * UIProcess/API/C/WKContext.cpp:
        (_WKContextSetHTTPPipeliningEnabled): Added.
        * UIProcess/API/C/WKContextPrivate.h:
        (_WKContextSetHTTPPipeliningEnabled): Added declaration.
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::setHTTPPipeliningEnabled): Added.
        (WebKit::WebContext::httpPipeliningEnabled): Added.
        * UIProcess/WebContext.h:
        (WebKit::WebContext::setHTTPPipeliningEnabled): Added declaration.
        (WebKit::WebContext::httpPipeliningEnabled): Added declaration.

2011-04-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Make more strings in WebKit2 localizable
        https://bugs.webkit.org/show_bug.cgi?id=58757

        * UIProcess/API/mac/PDFViewController.mm:
        (-[WKPDFView menuForEvent:]):
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setViewportArguments):
        (WebKit::PageClientImpl::registerEditCommand):
        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::nameForEditAction):
        * UIProcess/WebEditCommandProxy.h:
        Use WebCore's localization macro to make more strings localizable.

2011-04-17  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Rename PLATFORM(CA) to USE(CA)
        https://bugs.webkit.org/show_bug.cgi?id=58742

        * WebProcess/WebPage/LayerTreeHost.cpp:
        * WebProcess/WebPage/win/LayerTreeHostWin.cpp:
        (WebKit::LayerTreeHost::supportsAcceleratedCompositing):

2011-04-17  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Rename PLATFORM(CG) to USE(CG)
        https://bugs.webkit.org/show_bug.cgi?id=58729

        * Shared/ShareableBitmap.h:
        * Shared/WebCoreArgumentCoders.cpp:
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebGraphicsContext.cpp:
        (WebKit::WebGraphicsContext::WebGraphicsContext):
        * Shared/WebGraphicsContext.h:
        * Shared/win/PlatformCertificateInfo.cpp:
        (WebKit::PlatformCertificateInfo::PlatformCertificateInfo):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::setFindIndicator):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::drawRectToPDF):
        (WebKit::WebPage::drawPagesToPDF):
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::platformPreferencesDidChange):
        * config.h:

2011-04-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Crash when NPP_Write returns -1 when writing the manual stream
        https://bugs.webkit.org/show_bug.cgi?id=58735
        <rdar://problem/9124993>

        If NPP_Write returns -1 we must cancel the stream.

        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::deliverDataToPlugin):

2011-04-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Simon Fraser.

        Pages in the PageCache don't have the correct visited link coloring after being restored
        https://bugs.webkit.org/show_bug.cgi?id=58721

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::visitedLinkStateChanged):
        (WebKit::WebProcess::allVisitedLinkStateChanged):
        Mark all pages in the page cache as needing visited link style recalc
        whenever visited link information changes.

2011-04-15  Daniel Bates  <dbates@webkit.org>

        Attempt to fix the Qt Linux Release build after changeset 84064 <http://trac.webkit.org/changeset/84064>
        (https://bugs.webkit.org/show_bug.cgi?id=58686).

        * UIProcess/API/qt/qwkpage_p.h: Remove takeFocus().

2011-04-15  Shishir Agrawal  <shishir@chromium.org>

        Reviewed by James Robinson.

        Add a flag to guard Page Visibility API changes.
        https://bugs.webkit.org/show_bug.cgi?id=58464

        * Configurations/FeatureDefines.xcconfig:

2011-04-15  Jeff Miller  <jeffm@apple.com>

        Reviewed by Sam Weinig.

        Add takeFocus callback to WKPageUIClient
        https://bugs.webkit.org/show_bug.cgi?id=58686

        On Windows, we need to handle moving focus out of the web view in the client, so add a takeFocus callback to WKPageUIClient
        and stop handling taking focus in the framework in WKView.mm on the Mac.

        * UIProcess/API/C/WKPage.h: Added WKFocusDirection enum and takeFocus to WKPageUIClient.
        * UIProcess/API/mac/PageClientImpl.h: Removed takeFocus().
        * UIProcess/API/mac/PageClientImpl.mm: Removed takeFocus().
        * UIProcess/API/mac/WKView.mm: Removed _takeFocus().
        * UIProcess/API/mac/WKViewInternal.h: Removed _takeFocus().
        * UIProcess/API/qt/ClientImpl.cpp:
        (qt_wk_takeFocus): Added.
        * UIProcess/API/qt/ClientImpl.h: Added qt_wk_takeFocus.
        * UIProcess/API/qt/qwkpage.cpp: Remove takeFocus().
        (QWKPage::QWKPage): Added takeFocus() callback.
        * UIProcess/PageClient.h: Removed takeFocus().
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::takeFocus): Call m_uiClient to take focus.
        * UIProcess/WebPageProxy.h: Pass FocusDirection as a uint32_t to takeFocus().
        * UIProcess/WebPageProxy.messages.in: Pass FocusDirection as a uint32_t in TakeFocus message.
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::takeFocus): Added.
        * UIProcess/WebUIClient.h: Added takeFocus().
        * UIProcess/win/WebView.cpp: Removed takeFocus(), which was never implemented on Windows.
        * UIProcess/win/WebView.h: Removed takeFocus().
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::takeFocus): Pass FocusDirection as a uint32_t in TakeFocus message.

2011-04-15  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Stop using deprecated NSInputManager
        https://bugs.webkit.org/show_bug.cgi?id=58709

        Changed all mouse related functions to give NSInputContext a chance to handle the event,
        added logging. Removed -rightMouseMoved: method, which was added by accident.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView mouseMoved:]):
        (-[WKView mouseDown:]):
        (-[WKView mouseUp:]):
        (-[WKView mouseDragged:]):

2011-04-15  Jon Honeycutt  <jhoneycutt@apple.com>

        Potential crash getting a JS wrapper.

        <rdar://problem/8988741>

        Reviewed by Brian Weinstein.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::jsWrapperForWorld):
        Ensure that we have a valid m_coreFrame, because it can be cleared by
        invalidate().

2011-04-08  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QWebPage MIME type handling inconsistency with other web browsers
        https://bugs.webkit.org/show_bug.cgi?id=46968

        Implementing mime type sniffing based on
        http://tools.ietf.org/html/draft-abarth-mime-sniff-06.

        * WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.cpp:
        (WebCore::WebFrameNetworkingContext::WebFrameNetworkingContext):
        (WebCore::WebFrameNetworkingContext::MIMESniffingEnabled):
        * WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.h:

2011-04-15  Oliver Hunt  <oliver@apple.com>

        GC allocate Structure
        https://bugs.webkit.org/show_bug.cgi?id=58483

        Rolling r83894 r83827 r83810 r83809 r83808 back in with
        a workaround for the gcc bug seen by the gtk bots

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

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

        Reviewed by Sam Weinig.

        Add API to get the bundle page overlay fade in fraction.

        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        (WKBundlePageOverlayFractionFadedIn):
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.h:

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

        Reviewed by Dan Bernstein.

        Fade the find page overlay
        https://bugs.webkit.org/show_bug.cgi?id=58697

        * WebProcess/WebPage/FindController.cpp:
        Make the color components floats.

        (WebKit::overlayBackgroundColor):
        (WebKit::holeShadowColor):
        (WebKit::holeFillColor):
        Add helper functions for returning the colors given the fraction faded in.

        (WebKit::FindController::drawRect):
        Use the new helper functions.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::installPageOverlay):
        Start the fade animation unless we're replacing an already existing page overlay
        with another.

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

        Fix Windows build.

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

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

        Reviewed by Sam Weinig.

        Add the ability for PageOverlays to fade in and out
        https://bugs.webkit.org/show_bug.cgi?id=58694

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageUninstallPageOverlay):
        WebPage::uninstallPageOverlay now takes a boolean. Default to false for now.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::findString):
        Pass false to uninstallPageOverlay.

        (WebKit::FindController::hideFindUI):
        Pass true to uninstallPageOverlay.
        
        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::PageOverlay):
        Initialize new member variables.

        (WebKit::PageOverlay::bounds):
        Get rid of an unnecessary webPage() getter.

        (WebKit::PageOverlay::setPage):
        Stop the animation timer.

        (WebKit::PageOverlay::startFadeInAnimation):
        Update m_fractionFadedIn and call startFadeAnimation.

        (WebKit::PageOverlay::startFadeOutAnimation):
        Ditto.
        
        (WebKit::PageOverlay::startFadeAnimation):
        Initialize m_fadeAnimationStartTime and start the fade animation timer.

        (WebKit::PageOverlay::fadeAnimationTimerFired):
        Update m_fractionFadedIn and call setNeedsDisplay().

        * WebProcess/WebPage/PageOverlay.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::uninstallPageOverlay):
        If fadeOut is true, tell the page overlay to start the fade out animation.
        When the fade animation is complete, the page overlay will uninstall itself.

2011-04-15  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Views should be made visible before painting in WM_PRINTCLIENT messages
        https://bugs.webkit.org/show_bug.cgi?id=58676
        <rdar://problem/9279211>

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::onPrintClientEvent): If our view isn't currently visible set it to visible
            before painting, then reset it back to not visible after painting.
        (WebKit::WebView::onShowWindowEvent): Call setIsVisible instead of duplicating logic.
        (WebKit::WebView::setIsVisible): Set the m_isVisible flag and call viewStateDidChange.
        * UIProcess/win/WebView.h:

2011-04-15  Jon Lee  <jonlee@apple.com>

        Reviewed by Anders Carlsson.

        onClick does not function with <select> elements in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=57904
        <rdar://problem/9217757>

        Reviewed by Anders Carlsson.

        * Shared/NativeWebMouseEvent.h: Copied from Source/WebKit2/UIProcess/WebPopupMenuProxy.h.
        (WebKit::NativeWebMouseEvent::nativeEvent):
        * Shared/mac/NativeWebMouseEventMac.mm: Added.
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent):
        * Shared/qt/NativeWebMouseEventQt.cpp: Copied from Source/WebKit2/UIProcess/WebPopupMenuProxy.h.
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent):
        * Shared/win/NativeWebMouseEventWin.cpp: Copied from Source/WebKit2/UIProcess/WebPopupMenuProxy.h.
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView mouseMoved:]):
        (-[WKView _mouseHandler:]): Pre-compiler mouse handler calls need to use the new NativeWebMouseEvent class
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::mouseMoveEvent):
        (QWKPagePrivate::mousePressEvent):
        (QWKPagePrivate::mouseReleaseEvent):
        (QWKPagePrivate::mouseDoubleClickEvent):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleMouseEvent): keep track of mouse down event in order to be able to send a fake mouse up event on the select element
        (WebKit::WebPageProxy::currentMouseDownEvent): for access by the popup menu proxy to dispatch the fake mouse up event
        (WebKit::WebPageProxy::didReceiveEvent): clear out the cached mouse down event
        (WebKit::WebPageProxy::processDidCrash): clear out the cached events since we assume that didReceiveEvent did not called prior to the crash
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPopupMenuProxy.h:
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::showPopupMenu): after notifying the popup menu client that the value changed, fake mouse up and mouse move events are posted
        * UIProcess/win/WebPopupMenuProxyWin.cpp:
        (WebKit::WebPopupMenuProxyWin::showPopupMenu): after notifying the popup menu client that the value changed, fake mouse up and mouse move events are posted
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::onMouseEvent):
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2011-04-15  Alexey Proskuryakov  <ap@apple.com>

        Qt build fix.

        * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::selectionStateChanged): Wrap the variable
        in PLATFORM(MAC), too, as it's unused on other platforms.

2011-04-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/9287880> and https://bugs.webkit.org/show_bug.cgi?id=58596
        WK2: Past searches not remembered for <input type=search results="5" autosave="foo">

        Add SaveRecentSearches and LoadRecentSearches messages:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebPageProxy.h:

        Message up to the UIProcess for the save/load operations:
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp:
        (WebKit::WebSearchPopupMenu::saveRecentSearches):
        (WebKit::WebSearchPopupMenu::loadRecentSearches):
        * WebProcess/WebCoreSupport/WebPopupMenu.h:
        (WebKit::WebPopupMenu::page):

        Save the values to disk CFPreference-style:
        * UIProcess/cf/WebPageProxyCF.cpp:
        (WebKit::autosaveKey):
        (WebKit::WebPageProxy::saveRecentSearches):
        (WebKit::WebPageProxy::loadRecentSearches):

        Stubbed out for non-CF platforms:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::saveRecentSearches):
        (WebKit::WebPageProxy::loadRecentSearches):
        * UIProcess/qt/WebPageProxyQt.cpp:
        (WebKit::WebPageProxy::saveRecentSearches):
        (WebKit::WebPageProxy::loadRecentSearches):

2011-04-14  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        WebKit2: Password field input does not switch to ASCII-compatible source
        https://bugs.webkit.org/show_bug.cgi?id=58583
        <rdar://problem/9059651>

        The implementation is more modern than what we have in WK1. Instead of returning a null
        input context (as in non-editable content), we now set page context's properties.

        * UIProcess/PageClient.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm: (WebKit::PageClientImpl::updateSecureInputState):
        Forward updateSecureInputState() call from WebPageProxy to WKView.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView dealloc]): ASSERT that we didn't somehow leave secure input events enabled.
        (-[WKView becomeFirstResponder]): Update secure event mode.
        (-[WKView resignFirstResponder]): Disable secure event mode.
        (-[WKView setMarkedText:selectedRange:replacementRange:]): Prevent most advanced editing
        behaviors in password fields, matching NSSecureTextInputField.
        (-[WKView attributedSubstringForProposedRange:actualRange:]): Disable TSM Document Access
        in password fields. There is also a check in web process, but it doest't hurt to check twice.
        (-[WKView _windowDidBecomeKey:]): Call _updateSecureInputState.
        (-[WKView _windowDidResignKey:]): Call _updateSecureInputState.
        (-[WKView _updateSecureInputState]): Update secure event mode and allowed input sources.

        * UIProcess/API/mac/WKViewInternal.h: Added _updateSecureInputState.

        * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::selectionStateChanged): Update secure
        input state when going in or out a password field.

2011-04-14  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        REGRESSION: Rendering in <video> element appears to render quickly to catch up if it has been playing in a background tab
        https://bugs.webkit.org/show_bug.cgi?id=58637

        Notify AVFoundation that no one will be rendering when the view or window moves off screen.

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::isViewVisible): Return false if the view's window is not visible.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView addWindowObserversForWindow:]): Observe orderOut and orderIn events.
        (-[WKView removeWindowObservers]): Ditto.
        (-[WKView _windowDidOrderOffScreen:]): Added.
        (-[WKView _windowDidOrderOnScreen:]): Added.
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::suspendPainting): Call LayerTreeHost::pauseRendering.
        (WebKit::DrawingAreaImpl::resumePainting): Call LayerTreeHost::resumeRendering.
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit::LayerTreeHost::pauseRendering): Added stub.
        (WebKit::LayerTreeHost::resumeRendering): Added stub.
        * WebProcess/WebPage/ca/mac/LayerTreeHostCAMac.h:
        * WebProcess/WebPage/ca/mac/LayerTreeHostCAMac.mm:
        (WebKit::LayerTreeHostCAMac::pauseRendering): Added. Post a notification with our
            intention to stop rendering.
        (WebKit::LayerTreeHostCAMac::resumeRendering): Added. Post a notification with our
            intention to start rendering.

2011-04-15  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Need a way to keep the WebProcess alive for testing purposes.
        https://bugs.webkit.org/show_bug.cgi?id=58592

        * UIProcess/API/C/WKContext.cpp:
        (WKContextDisableProcessTermination):
        (WKContextEnableProcessTermination):
        * UIProcess/API/C/WKContextPrivate.h:

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        Initialize m_processTerminationEnabled to true.
        (WebKit::WebContext::enableProcessTermination):
        Set m_processTerminationEnabled to true, and try to terminate the web process.
        (WebKit::WebContext::shouldTerminate):
        If !m_processTerminationEnabled, return false.
        * UIProcess/WebContext.h:
        (WebKit::WebContext::disableProcessTermination):
        Set m_processTerminationEnabled to false;

2011-04-15  Nancy Piedra  <nancy.piedra@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt][Symbian] Need to export ViewportAttributes class
        https://bugs.webkit.org/show_bug.cgi?id=58651

        On Symbian, if the ViewportAttributes class is not exported we get
        linking errors.

        Since this is a compilation issue, no new tests added.

        * UIProcess/API/qt/qwkpage.h:

2011-04-15  Anna Cavender  <annacc@chromium.org>

        Reviewed by Eric Carlson.

        Renaming TRACK feature define to VIDEO_TRACK
        https://bugs.webkit.org/show_bug.cgi?id=53556

        * Configurations/FeatureDefines.xcconfig:

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

        Reviewed by Sam Weinig.

        Select All context menu item doesn't work in Flash
        https://bugs.webkit.org/show_bug.cgi?id=58615
        <rdar://problem/9225761>

        In some cases, -[NSWindow isKeyWindow] will return false even if
        a window is the key window, so we have to compare our window
        against -[NSApplication keyWindow].

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::isViewWindowActive):

2011-04-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add CFPreference based backend for WebKit2 preferences
        https://bugs.webkit.org/show_bug.cgi?id=58605

        * UIProcess/cf/WebPreferencesCF.cpp:
        (WebKit::cfStringFromWebCoreString):
        (WebKit::makeKey):
        (WebKit::setStringValueIfInUserDefaults):
        (WebKit::setBoolValueIfInUserDefaults):
        (WebKit::setUInt32ValueIfInUserDefaults):
        (WebKit::setDoubleValueIfInUserDefaults):
        (WebKit::WebPreferences::platformInitializeStore):
        (WebKit::WebPreferences::platformUpdateStringValueForKey):
        (WebKit::WebPreferences::platformUpdateBoolValueForKey):
        (WebKit::WebPreferences::platformUpdateUInt32ValueForKey):
        (WebKit::WebPreferences::platformUpdateDoubleValueForKey):
        Implement platform functions using CFPreferences API.

2011-04-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8665102> and https://bugs.webkit.org/show_bug.cgi?id=58595
        Menu is not displayed for <input type=search results="5">

        * WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp:
        (WebKit::WebSearchPopupMenu::enabled): Return true, like all good search popup menus should.

        * WebProcess/WebCoreSupport/mac/WebPopupMenuMac.mm:
        (WebKit::WebPopupMenu::setUpPlatformData): Remember the shouldPopOver-ness.

        * Shared/PlatformPopupMenuData.cpp:
        (WebKit::PlatformPopupMenuData::encode): Remember the shouldPopOver-ness.
        (WebKit::PlatformPopupMenuData::decode): Remember the shouldPopOver-ness.
        * Shared/PlatformPopupMenuData.h:

        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::showPopupMenu): Use the shouldPopOver-ness to adjust display position.

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

        Reviewed by Dan Bernstein.

        Crash in NetscapePluginModule::tryGetSitesWithData when NPP_GetSitesWithData returns null
        https://bugs.webkit.org/show_bug.cgi?id=58578
        <rdar://problem/9275201>

        It's OK for NPP_GetSitesWithData to return null.

        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::tryGetSitesWithData):

2011-04-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Make creating WebPreferences lazy
        https://bugs.webkit.org/show_bug.cgi?id=58570

        * UIProcess/WebPageGroup.cpp:
        (WebKit::WebPageGroup::WebPageGroup):
        (WebKit::WebPageGroup::~WebPageGroup):
        (WebKit::WebPageGroup::setPreferences):
        (WebKit::WebPageGroup::preferences):
        * UIProcess/WebPageGroup.h:
        Don't create the WebPreference object until it is requested.

2011-04-14  Pratik Solanki  <psolanki@apple.com>

        Reviewed by David Kilzer.

        Set minimum priority for fast lane connections
        https://bugs.webkit.org/show_bug.cgi?id=58353

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Support for new WKSI method WKSetHTTPPipeliningMinimumFastLanePriority.

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

        Clang warning fixes.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/mac/TextCheckerMac.mm:
        * WebProcess/Downloads/mac/DownloadMac.mm:

2011-04-14  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Timothy Hatcher.

        WebKit2: Add an option for a PageGroup to be invisible to the History Client.
        https://bugs.webkit.org/show_bug.cgi?id=58547

        * Shared/WebPageGroupData.cpp:
        (WebKit::WebPageGroupData::encode):
        (WebKit::WebPageGroupData::decode):
        * Shared/WebPageGroupData.h:

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::inspectorPageGroup):
        The Web Inspector should not be visible to the History Client, because its HTML-based nature
        should not be exposed through the API.

        * UIProcess/WebPageGroup.cpp:
        (WebKit::WebPageGroup::create):
        (WebKit::WebPageGroup::WebPageGroup):
        * UIProcess/WebPageGroup.h:

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::updateGlobalHistory):
        Do not send the message to the WebContent for the history client.
        (WebKit::WebFrameLoaderClient::updateGlobalHistoryRedirectLinks):
        Ditto.
        (WebKit::WebFrameLoaderClient::setTitle):
        Ditto.

        * WebProcess/WebPage/WebPageGroupProxy.h:
        (WebKit::WebPageGroupProxy::isVisibleToHistoryClient):

2011-04-14  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] Make Qt port compiling with ENABLE_PLUGIN_PROCESS=1
        https://bugs.webkit.org/show_bug.cgi?id=55719

        Guard functionality related to complex text and implementations
        that rely on MachPort with PLATFORM(MAC).
        Based on Oleg Romashin's patch.

        * PluginProcess/PluginControllerProxy.cpp:
        * PluginProcess/PluginControllerProxy.messages.in:
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::createWebProcessConnection):
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::createPlugin):
        * Shared/Plugins/PluginProcessCreationParameters.cpp:
        (WebKit::PluginProcessCreationParameters::decode): Fix bad C++ that
        does not compile with gcc-linux.
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch):
        (WebKit::PluginProcessProxy::didCreateWebProcessConnection):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.messages.in:
        * WebKit2.pro: Move implementation that does not need external
        visibility from WebKit2API.pri. Adding the headers as well.
        * WebKit2API.pri:
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
        * WebProcess/WebPage/WebPage.cpp:

2011-04-13  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        Allow setting composited backing stores for scrollbars and scroll corners
        https://bugs.webkit.org/show_bug.cgi?id=57202

        Update WebPopupMenuProxyWin to reflect ScrollableArea interface changes.

        * UIProcess/win/WebPopupMenuProxyWin.h:
        (WebKit::WebPopupMenuProxyWin::invalidateScrollCornerRect):
        (WebKit::WebPopupMenuProxyWin::scrollCornerPresent):
        (WebKit::WebPopupMenuProxyWin::scrollCornerRect):

2011-04-13  Jon Lee  <jonlee@apple.com>

        Reviewed by Maciej Stachowiak.

        REGRESSION(r81880): Paste menu is disabled for many edit fields (yahoo and google search, yahoo mail msg, forms, etc)
        https://bugs.webkit.org/show_bug.cgi?id=58284
        <rdar://problem/9246149>

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setFocused): Check for whether we are not supposed to be focused AND whether our platform behavior dictates to clear out the selection

2011-04-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Fixed a bug where WKView changed the cursor when the mouse was moving over other views.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView mouseMoved:]): If getting this message because this view is the first responder,
        ignore it unless it is inside the visible rect.

2011-04-13  Enrica Casucci  <enrica@apple.com>

        Reviewed by Dan Bernstein.

        Should not rely on WKEditableLinkBehavior being in synch
        with WebCore::EditableLinkBehavior.
        https://bugs.webkit.org/show_bug.cgi?id=58473

        Adding conversion routines.

        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toAPI):
        (WebKit::toEditableLinkBehavior):
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetEditableLinkBehavior):
        (WKPreferencesGetEditableLinkBehavior):

2011-04-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        After closing the last window, re-opening my last visited website is over 2X slower
        https://bugs.webkit.org/show_bug.cgi?id=58488
        <rdar://problem/9233518>

        Give the web process a 60 second termination timeout.

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

2011-04-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Convert WebProcess over to using disableTermination/enableTermination
        https://bugs.webkit.org/show_bug.cgi?id=58485

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::getSitesWithData):
        (WebKit::PluginProcess::clearSiteData):
        Use the LocalTerminationDisabler RAII class.

        * Shared/ChildProcess.h:
        (WebKit::ChildProcess::LocalTerminationDisabler::LocalTerminationDisabler):
        (WebKit::ChildProcess::LocalTerminationDisabler::~LocalTerminationDisabler):
        Add RAII class for calling disableTermination/enableTermination.

        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp:
        (WebKit::WebApplicationCacheManager::getApplicationCacheOrigins):
        (WebKit::WebApplicationCacheManager::deleteEntriesForOrigin):
        (WebKit::WebApplicationCacheManager::deleteAllEntries):
        Use the LocalTerminationDisabler RAII class.

        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::getHostnamesWithCookies):
        (WebKit::WebCookieManager::deleteCookiesForHostname):
        (WebKit::WebCookieManager::deleteAllCookies):
        (WebKit::WebCookieManager::startObservingCookieChanges):
        (WebKit::WebCookieManager::setHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManager::getHTTPCookieAcceptPolicy):
        Use the LocalTerminationDisabler RAII class.

        * WebProcess/Downloads/Download.cpp:
        (WebKit::Download::Download):
        Call disableTermination().

        (WebKit::Download::~Download):
        Call enableTermination().

        * WebProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::downloadFinished):
        Remove call to terminateIfPossible.

        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.cpp:
        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManager::deleteEntriesForOrigin):
        (WebKit::WebKeyValueStorageManager::deleteAllEntries):
        Use the LocalTerminationDisabler RAII class.
        
        * WebProcess/MediaCache/WebMediaCacheManager.cpp:
        (WebKit::WebMediaCacheManager::getHostnamesWithMediaCache):
        (WebKit::WebMediaCacheManager::clearCacheForHostname):
        (WebKit::WebMediaCacheManager::clearCacheForAllHostnames):
        Use the LocalTerminationDisabler RAII class.
        
        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::getCacheOrigins):
        (WebKit::WebResourceCacheManager::clearCacheForOrigin):
        (WebKit::WebResourceCacheManager::clearCacheForAllOrigins):
        Use the LocalTerminationDisabler RAII class.
        
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        (WebKit::WebDatabaseManager::getDatabasesByOrigin):
        (WebKit::WebDatabaseManager::getDatabaseOrigins):
        (WebKit::WebDatabaseManager::deleteDatabaseWithNameForOrigin):
        (WebKit::WebDatabaseManager::deleteDatabasesForOrigin):
        (WebKit::WebDatabaseManager::deleteAllDatabases):
        (WebKit::WebDatabaseManager::setQuotaForOrigin):
        Use the LocalTerminationDisabler RAII class.
        
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::createWebPage):
        Call disableTermination().

        (WebKit::WebProcess::removeWebPage):
        Call enableTermination().

        (WebKit::WebProcess::shouldTerminate):
        Move logic from terminateIfPossible over here.

        (WebKit::WebProcess::terminate):
        Move logic from terminateIfPossible over here.

        (WebKit::WebProcess::getSitesWithPluginData):
        (WebKit::WebProcess::clearPluginSiteData):
        Use the LocalTerminationDisabler RAII class.

        * WebProcess/WebProcess.h:
        Publically inherit from ChildProcess, LocalTerminationDisabler needs to be accessible
        from the WebProcess class.

2011-04-13  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Follow-up to: WebKit2 will load two copies of the same plugin, but should not
        https://bugs.webkit.org/show_bug.cgi?id=49075
        
        Use pathGetFileName instead of Win32 PathFindFileNameW.

        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        (WebKit::PluginInfoStore::shouldUsePlugin):

2011-04-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        WebKit2 doesn't keep overlay scrollers shown while scroll gesture held
        <rdar://problem/9260518>

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        Initialize new WKSI functions.

2011-04-13  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Oliver Hunt.

        WebKit2 will load two copies of the same plugin, but should not
        https://bugs.webkit.org/show_bug.cgi?id=49075
        <rdar://problem/8635947>

        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        (WebKit::PluginInfoStore::shouldUsePlugin): Don't use a plug-in if we've already allowed a plug-in with the same filename.

2011-04-13  Timothy Hatcher  <timothy@apple.com>

        Hide the dictionary panel when navigating or crashing.

        <rdar://problem/9261202>

        Reviewed by Sam Weinig.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::dismissDictionaryLookupPanel): Added. Call WKHideWordDefinitionWindow.
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame): Call PageClient::dismissDictionaryLookupPanel.
        (WebKit::WebPageProxy::processDidCrash): Call dismissCorrectionPanel and PageClient::dismissDictionaryLookupPanel.

2011-04-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Add support for disabling/enabling termination to ChildProcess
        https://bugs.webkit.org/show_bug.cgi?id=58476

        Add ChildProcess::disableTermination and ChildProcess::enableTermination and convert
        the PluginProcess class over to using them.

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::PluginProcess):
        The child process now takes a terminationTimeout argument. Get rid of the shutdown timer.

        (WebKit::PluginProcess::removeWebProcessConnection):
        Call enableTermination().

        (WebKit::PluginProcess::shouldTerminate):
        Always return true.

        (WebKit::PluginProcess::createWebProcessConnection):
        Call disableTermination().

        (WebKit::PluginProcess::getSitesWithData):
        Call disableTermination()/enableTermination().

        (WebKit::PluginProcess::clearSiteData):
        Ditto.

        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::disableTermination):
        Increment the counter and stop the timer.

        (WebKit::ChildProcess::enableTermination):
        Decrement the counter; if it's zero, start the timer.

        (WebKit::ChildProcess::terminationTimerFired):
        Call shouldTerminate(). If it returns true, call terminate().

        (WebKit::ChildProcess::terminate):
        Call RunLoop::quit().

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        Just initialize the termination timeout to 0 for now.

        (WebKit::WebProcess::shouldTerminate):
        Always return true; this isn't used yet.

        * WebProcess/WebProcess.h:

2011-04-13  Enrica Casucci  <enrica@apple.com>

        Reviewed by Dan Bernstein.

        REGRESSION: Links are clickable when a contentEditable is set to true.
        https://bugs.webkit.org/show_bug.cgi?id=58473
        <rdar://problem/9256793>
        
        Added support for editable link behavior property.

        * Shared/WebPreferencesStore.cpp:
        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetEditableLinkBehavior):
        (WKPreferencesGetEditableLinkBehavior):
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2011-04-12  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Oliver Hunt.

        REGRESSION (WebKit2): Input methods are active in non-editable content
        https://bugs.webkit.org/show_bug.cgi?id=58404
        <rdar://problem/9275940>

        * UIProcess/API/mac/WKView.mm:
        (-[WKView insertText:]): Re-add the old variant of this function, because it's not only part
        of deprecated NSTextInput protocol, but it's also part of NSResponder, and it's called when
        the input context in nil.
        (-[WKView inputContext]): Return nil when not in editable content.

2011-04-12  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9029193> and https://bugs.webkit.org/show_bug.cgi?id=58406
        Bringing up the context menu on a link might also follow the link.

        This patch adds a flag that is set just before the WebProcess tells the UIProcess to show a context menu.

        As long as this flag is set, the WebProcess will ignore any other mouse events that might have queued up
        by the time the UIProcess gets around to showing the menu.

        After the UIProcess is done showing the menu, it messages back telling the WebProcess to clear the flag
        and resume normal MouseEvent handling.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showContextMenu): No matter what internalShowContextMenu does, always notify
          the WebProcess that any context menu is now hidden.
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/WebPageProxy.h:

        * WebProcess/WebPage/WebContextMenu.cpp:
        (WebKit::WebContextMenu::show): Since we're telling the UIProcess to show the menu, tell the WebPage a
          context menu is showing so it will stop handling mouse events.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::mouseEvent): Don't try to handle mouse events if a context menu is flagged as showing.

        Add accessors to twiddle the "context menu showing" flag:
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::contextMenuShowing):
        (WebKit::WebPage::contextMenuHidden):
        * WebProcess/WebPage/WebPage.messages.in: Add the ContextMenuHidden message.

2011-04-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Quarantine related sandbox denial when downloading files
        <rdar://problem/9203736>

        * WebProcess/com.apple.WebProcess.sb:

2011-04-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Sandbox violations dragging an image to the desktop.
        <rdar://problem/9261834>

        * WebProcess/com.apple.WebProcess.sb:

2011-04-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Cameron Zwarich.

        Sandbox violations trying to access ~/Library/Keyboard Layouts and ~/Library/Input Methods
        <rdar://problem/8973159> 

        * WebProcess/com.apple.WebProcess.sb:

2011-04-12  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov and Sam Weinig.

        Implement non-activating clicks to allow dragging out of a background window.
        https://bugs.webkit.org/show_bug.cgi?id=55053
        <rdar://problem/9042197>

        Added methods to WKView to support non activating click. Unfortunately both
        methods require a synchronous call to the WebProcess to decide what to do.
        acceptFirstMouse is called only if shouldDelayWindowOrderingForEvent returns
        true. In order to minimize the number of synchronous calls, we send the request
        only if our window is not the key window.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView acceptsFirstMouse:]):
        (-[WKView shouldDelayWindowOrderingForEvent:]):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::shouldDelayWindowOrderingForEvent):
        (WebKit::WebPageProxy::acceptsFirstMouse):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::shouldDelayWindowOrderingEvent):
        (WebKit::WebPage::acceptsFirstMouse):

2011-04-12  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Oliver Hunt.

        Crash when serializing a null AttributedString
        https://bugs.webkit.org/show_bug.cgi?id=58393
        <rdar://problem/9275326>

        * Shared/mac/AttributedString.mm:
        (WebKit::AttributedString::encode):
        (WebKit::AttributedString::decode):
        Prefix the serialized value with an isNull tag.

2011-04-12  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        Infinite recursion in WebHTMLView executeSavedKeypressCommands.
        https://bugs.webkit.org/show_bug.cgi?id=58382
        <rdar://problem/9239370>

        Execution of some editing commands could trigger a call to selectedRange that
        internally calls executeSavedKeypressCommands creating an infinite recursion.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _executeSavedKeypressCommands]): Added flag to avoid recursion.
        (-[WKView _interpretKeyEvent:withCachedTextInputState:savingCommandsTo:WebCore::]):
        Added flag initialization.

2011-04-12  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Page tears and stutters in WebKit2 when page is > 2048 pixels wide
        https://bugs.webkit.org/show_bug.cgi?id=58330

        Turn off tiling for nonCompositedContentLayer to avoid tearing when
        scrolling very wide (> 2048) windows.

        * WebProcess/WebPage/ca/LayerTreeHostCA.cpp:
        (WebKit::LayerTreeHostCA::initialize):

2011-04-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Assertion in DrawingAreaImpl::resumePainting() (m_isPaintingSuspended) when clicking a link at twitter.com
        https://bugs.webkit.org/show_bug.cgi?id=58377
        <rdar://problem/8976531>

        Remove the assertion.

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

2011-04-11  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=58280
        <rdar://problem/9252824> javascript in an inconsistent state due to serialization returning an un-handled exception
        Change use of SerializedScriptValue::Create to use the same api as the rest of WebKit2.  This has the benefit
        of handling any exceptions so Javascript is not in an inconsistent state.

        * Shared/API/c/WKSerializedScriptValue.h: fix a typo
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInMainFrame):

2011-04-12  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Pressing Tab in Web Inspector's console does not cycle through completion options
        https://bugs.webkit.org/show_bug.cgi?id=56020

        Safari was always calling TranslateMessage() on key events since it has no way to know whether
        WebKit handled the event without a PageUIClient (which Safari only installs on pages inside
        a Safari window), which was generating a WM_CHAR message containing the tab in this case.  The fix
        is for Safari to never call TranslateMessage() on key events outside of a Safari window, but this
        means the WebPageProxy needs to do this for unhandled key events if there is no didNotHandleKeyEvent
        callback in the PageUIClient.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveEvent): Call TranslateMessage() on Windows for unhandled key events that can't be handled by the PageUIClient.
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::canNotHandleKeyEvent): Added.
        * UIProcess/WebUIClient.h: Added canNotHandleKeyEvent().

2011-04-12  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=58292
        Provide new setting to allow site icon loading despite disabling automatic image loading in general.

        * Shared/WebPreferencesStore.h: Add macro for setting default value.
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetLoadsSiteIconsIgnoringImageLoadingPreference): Added setter.
        (WKPreferencesGetLoadsSiteIconsIgnoringImageLoadingPreference): Added getter.
        * UIProcess/API/C/WKPreferences.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Add to list of WebCore settings that get propagated to WebKit preferences.

2011-04-12  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Anders Carlsson.

        WebKit2: Spelling and Grammar Checking: Make sure to remove the markings from the document
        when spelling and/or grammar checking is disabled.
        https://bugs.webkit.org/show_bug.cgi?id=58350

        * UIProcess/API/mac/WKView.mm:
        (-[WKView toggleContinuousSpellChecking:]):
        Move the call to unmark the errors to the WebProcess.
        (-[WKView setGrammarCheckingEnabled:]):
        Ditto.
        (-[WKView toggleGrammarChecking:]):
        Ditto.

        * UIProcess/WebPageProxy.cpp:
        Remove unused functions.
        * UIProcess/WebPageProxy.h:
        Ditto.
        * WebProcess/WebPage/WebPage.messages.in:
        Ditto.
        * WebProcess/WebPage/WebPage.h:

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setTextCheckerState):
        If grammar or spelling checking is disabled, unmark all the pages.
        Doing it here allows makes it possible to unmark all pages in a cross-platform way that is
        triggered both by selecting the the context menu items and by any other methods of updating
        the enabled / disabled state.

2011-04-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Cisco Meeting Center will not download or launch from Safari
        https://bugs.webkit.org/show_bug.cgi?id=58366
        <rdar://problem/8987139>

        It's OK if a plug-in has less (or more) MIME type descriptions than actual MIME types.
        
        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::getPluginInfoFromCarbonResources):

2011-04-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Call PluginControllerProxy::platformGeometryDidChange before Plugin::geometryDidChange
        https://bugs.webkit.org/show_bug.cgi?id=58361

        Since Plugin::geometryDidChange ends up calling plug-in code it can resize the plug-in which causes
        platformGeometryDidChange to be called with the wrong rect.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::geometryDidChange):
        Call platformGeometryDidChange.

        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/mac/PluginControllerProxyMac.mm:
        (WebKit::PluginControllerProxy::platformGeometryDidChange):
        Remove the parameters to platformGeometryDidChange and just use m_frameRect instead.

2011-04-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Move three Mac specific functions to PluginControllerProxyMac.mm.
        
2011-04-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Cache the window and plug-in element NPObjects
        https://bugs.webkit.org/show_bug.cgi?id=58355

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::PluginControllerProxy):
        (WebKit::PluginControllerProxy::~PluginControllerProxy):
        (WebKit::PluginControllerProxy::windowScriptNPObject):
        (WebKit::PluginControllerProxy::pluginElementNPObject):
        * PluginProcess/PluginControllerProxy.h:

2011-04-12  Alejandro G. Castro  <alex@igalia.com>

        Fixed GTK compilation after r83454.

        * UIProcess/gtk/WebView.cpp:
        (WebKit::WebView::findStringInCustomRepresentation):
        (WebKit::WebView::countStringMatchesInCustomRepresentation):
        * UIProcess/gtk/WebView.h:

2011-04-11  Daniel Bates  <dbates@webkit.org>

        Attempt to fix the Qt Linux Release build after changeset 83550 <http://trac.webkit.org/changeset/83550>
        (https://bugs.webkit.org/show_bug.cgi?id=54159).

        * WebKit2API.pri: Append UIProcess/API/C/WKResourceCacheManager.cpp to the list WEBKIT2_API_SOURCES.

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

        Reviewed by Anders Carlsson.

        Move focus management out of WebKit via  the UIClient
        <rdar://problem/8784068>
        https://bugs.webkit.org/show_bug.cgi?id=58278

        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setFocus):
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::focus):
        (WebKit::WebUIClient::unfocus):
        * UIProcess/WebUIClient.h:
        * UIProcess/gtk/WebView.cpp:
        * UIProcess/gtk/WebView.h:
        * UIProcess/win/WebView.h:
        Remove PageClient::setFocus() in favor of WebUIClient::focus and WebUIClient::unfocus. 

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

        Reviewed by Maciej Stachowiak.

        WebKit2: Cannot use Ctrl-Delete as a custom keyboard shortcut
        https://bugs.webkit.org/show_bug.cgi?id=58265
        <rdar://problem/9221468>

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::keyEvent): Added a comment explaining that doing work after DOM event
        dispatch isn't great.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performNonEditingBehaviorForSelector): Added a comment explaining how this
        might be moved down to WebCore.
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent): This is now empty, since both Space
        and Backspace behaviors are implemented in WebCore.

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

        Try to fix the Windows build.

        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):

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

        Reviewed by Dan Bernstein.

        REGRESSION (r83081): Esc key no longer removes current Kotoeri text operation
        https://bugs.webkit.org/show_bug.cgi?id=58274
        <rdar://problem/9263683>

        * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::getMarkedRange): Wrap the returned
        temporary in RefPtr.

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

        Reviewed by Sam Weinig.

        Remove m_urlAtProcessExit from WebPageProxy
        https://bugs.webkit.org/show_bug.cgi?id=58275

        Get rid of m_urlAtProcessExit and replace some zeros with nullptrs.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::processDidCrash):
        * UIProcess/WebPageProxy.h:

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

        Reviewed by Adam Roben.

        Remove the WebContext member variable from WebPageProxy
        https://bugs.webkit.org/show_bug.cgi?id=58271
        <rdar://problem/9148125>

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetContext):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::create):
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::process):
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::canShowMIMEType):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
        (WebKit::WebPageProxy::didReceiveTitleForFrame):
        (WebKit::WebPageProxy::didFirstLayoutForFrame):
        (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame):
        (WebKit::WebPageProxy::didRemoveFrameFromHierarchy):
        (WebKit::WebPageProxy::didDisplayInsecureContentForFrame):
        (WebKit::WebPageProxy::didRunInsecureContentForFrame):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::unableToImplementPolicy):
        (WebKit::WebPageProxy::willSubmitForm):
        (WebKit::WebPageProxy::mouseDidMoveOverElement):
        (WebKit::WebPageProxy::showContextMenu):
        (WebKit::WebPageProxy::contextMenuItemSelected):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::createWebPage):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):

2011-04-11  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adam Roben.

        Ignore context change callbacks when not on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=58256
        <rdar://problem/9266090>

        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.cpp:
        (WebKit::LayerTreeHostCAWin::contextDidChangeCallback): Do nothing when not called
            on the main thread. This should only happen when no changes have actually 
            been committed to the context, eg. when a video frame has been added to an image
            queue, so return without triggering animations etc.

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

        Reviewed by Sam Weinig.

        First step towards simplifying WebPageProxy/WebProcessProxy/WebContext ownership
        https://bugs.webkit.org/show_bug.cgi?id=58266
        <rdar://problem/9148125>

        With this patch, the WKView holds a strong reference to a WebPageProxy. The 
        WebPageProxy in turn holds a strong reference to its WebProcessProxy. Finally,
        The WebProcessProxy holds a strong reference to its WebContext.

        The WebContext holds a strong reference to the running WebProcessProxy which results
        in a reference cycle that's broken when the web process exits.

        The reason for is to avoid crashes where WebPageProxy::process() returns null if the web process
        has crashed but has not yet been relaunched.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::disconnectProcess):
        Add comment.

        (WebKit::WebContext::createWebPage):
        Return a PassRefPtr.

        (WebKit::WebContext::relaunchProcessIfNecessary):
        Change this to return a WebPageProxy.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::create):
        This now takes a PassRefPtr<WebProcessProxy>.

        (WebKit::WebPageProxy::WebPageProxy):
        Ditto.

        (WebKit::WebPageProxy::~WebPageProxy):
        Call close() if necessary.

        (WebKit::WebPageProxy::reattachToWebProcess):
        Replace the current process with the new process.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::create):
        Take a PassRefPtr<WebContext>.
        
        (WebKit::WebProcessProxy::WebProcessProxy):
        Ditto.

        (WebKit::WebProcessProxy::webPage):
        Remove .get() now that the page map uses weak references.

        (WebKit::WebProcessProxy::createWebPage):
        This now returns the created web page proxy.

2011-04-11  Adam Roben  <aroben@apple.com>

        Dispatch sent messages to windows owned by the web process when waiting a sync CoreIPC reply

        On Windows, windowed plugins' HWNDs are created as children of the WKView's window. This
        creates a cross-process window hierarchy, which in turn attaches the input states of the UI
        process's and web process's main threads (as if ::AttachThreadInput has been called). Having
        the input states attached means that changes to the input state (e.g., changing the focus
        window) can result in synchronous window messages being sent between the processes. This can
        result in deadlocks if the UI process changes the input state while handling a synchronous
        CoreIPC message from the web process. Since the web process isn't running its message loop
        while waiting for the reply, it never processes the messages Windows is sending it from the
        UI process.

        The solution taken in this patch is to continue to dispatch sent (not posted) messages to
        windows created by the web process while waiting for a sync CoreIPC reply. Someday we can
        hopefully reduce the number of cases in which the UI process modifies the thread's input
        state while handling a synchronous message; see the bug for details.

        Fixes <http://webkit.org/b/58239> <rdar://problem/8769302> REGRESSION (WebKit2): Deadlock
        clicking Flash plugin

        Reviewed by Anders Carlsson.

        * Platform/CoreIPC/BinarySemaphore.h:
        (CoreIPC::BinarySemaphore::event): Added. Simple getter to expose the underlying event
        HANDLE.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::SyncMessageState::waitWhileDispatchingSentMessages): New Windows-only
        function that is used instead of wait() so that sent messages will continue to be
        dispatched.
        (CoreIPC::Connection::waitForSyncReply): Use waitWhileDispatchingSentMessages instead of
        wait on Windows. Our Client gives us the set of windows that need to have windows delivered
        to them.

        * Platform/CoreIPC/Connection.h: Added new
        windowsToReceiveSentMessagesWhileWaitingForSyncReply function to Client.

        * Platform/RunLoop.h: Added new dispatchSentMessagesUntil function to be used while waiting
        for a sync CoreIPC reply.

        * Platform/win/RunLoopWin.cpp:
        (RunLoop::dispatchSentMessagesUntil): Added. If we have no windows to dispatch messages to,
        then just wait on the semaphore. Otherwise spin a ::MsgWaitForMultipleObjectsEx loop to
        detect when the semaphore is signaled, the timeout elapses, or sent messages are available,
        and handle each case appropriately.

        * UIProcess/WebProcessProxy.h: Added new CoreIPC::Connection::Client function.

        * UIProcess/win/WebProcessProxyWin.cpp: Added.
        (WebKit::WebProcessProxy::windowsToReceiveSentMessagesWhileWaitingForSyncReply): Just return
        an empty Vector. The web process never modifies the thread's input state while responding to
        a synchronous message, so we don't have anything to worry about here.

        * WebProcess/WebProcess.h: Added new CoreIPC::Connection::Client function.

        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::addWindowToVectorIfOwnedByCurrentThread): New helper function to be called by
        ::EnumThreadWindows/::EnumChildWindows. Does what it says.
        (WebKit::WebProcess::windowsToReceiveSentMessagesWhileWaitingForSyncReply): Added. Returns
        all top-level windows created by this thread, descendants of those windows created by this
        thread, and descendants of WKViews' windows created by this thread.

        * win/WebKit2.vcproj: Added WebProcessProxyWin.cpp.

2011-04-11  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Anders Carlsson.

        WebKit2: Implement TextChecker on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57862

        Part 7: Implement getGuessesForWord, learnWord, and ignoreWord.

        * UIProcess/API/C/win/WKTextChecker.cpp:
        (WKTextCheckerChangeSpellingToWord):
        * UIProcess/API/C/win/WKTextChecker.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::changeSpellingToWord):
        Make this function const since it does not modify the WebPageProxy and making it const
        allows WebTextChecker::changeSpellingToWord to take a const WebPageProxy.
        (WebKit::WebPageProxy::learnWord):
        * UIProcess/WebPageProxy.h:

        * UIProcess/TextChecker.h:
        * UIProcess/win/TextCheckerWin.cpp:
        (WebKit::TextChecker::getGuessesForWord):
        Ask the TextCheckerClient for the guesses.
        (WebKit::TextChecker::learnWord):
        Tell the TextCheckerClient.
        (WebKit::TextChecker::ignoreWord):
        Ditto.
        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::TextChecker::learnWord):
        Add an unused param that is necessary for Windows.
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::learnWord):
        Ditto.
        * UIProcess/qt/TextCheckerQt.cpp:
        (WebKit::TextChecker::learnWord):
        Ditto.

        * UIProcess/win/WebTextChecker.cpp:
        (WebKit::WebTextChecker::changeSpellingToWord):
        Tell the page.
        * UIProcess/win/WebTextChecker.h:

        * UIProcess/win/WebTextCheckerClient.cpp:
        (WebKit::WebTextCheckerClient::guessesForWord):
        (WebKit::WebTextCheckerClient::learnWord):
        (WebKit::WebTextCheckerClient::ignoreWord):
        * UIProcess/win/WebTextCheckerClient.h:

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

        Reviewed by Sam Weinig.

        Remove unused WebProcessProxy functions
        https://bugs.webkit.org/show_bug.cgi?id=58262

        * UIProcess/WebProcessProxy.cpp:
        * UIProcess/WebProcessProxy.h:

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

        Reviewed by Sam Weinig.

        Crash in WebPageProxy::countStringMatches
        https://bugs.webkit.org/show_bug.cgi?id=58255
        <rdar://problem/9243837>

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::countStringMatches):
        Return early if the page is not valid.

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

        Reviewed by Anders Carlsson.

        WebKit2: links don’t update to look visited
        <rdar://problem/8806254>
        https://bugs.webkit.org/show_bug.cgi?id=58252

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::visitedLinkStateChanged):
        (WebKit::WebProcess::allVisitedLinkStateChanged):
        * WebProcess/WebProcess.h:
        Remove use of vestigial sharedPageGroup and instead iterate set of
        page groups in use by the process.

2011-04-11  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Windows 7 Gestures Window Bounce shouldn't require a sync message
        https://bugs.webkit.org/show_bug.cgi?id=58167
        <rdar://problem/9259813>
        
        Instead of making GestureDidScroll sync, have WebPageWin call from WebProcess ->
        UIProcess when the gesture causes the page to scroll to the beginning or the
        end of the document.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::gestureDidScroll): Not a sync message anymore.
        (WebKit::WebPageProxy::setGestureScrollingLimitReached): Tell the page client that the gesture
            scrolling limnit was reached.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in: Add a new message.
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView): Initialize new variable.
        (WebKit::WebView::onGesture): Use the state of the member variable, not the response from
            the sync message.
        * UIProcess/win/WebView.h:
        (WebKit::WebView::setGestureScrollingLimitReached):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::scrollbarAtTopOfBottomOrDocument): Returns whether or not the scrollbar is at the
            top or bottom of the document.
        (WebKit::WebPage::gestureDidScroll): Track whether or not we started at the beginning
            or end of the document, and whether or not we ended at the beginning or end of the document,
            and send a message if the value changed.

2011-04-04  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        WK2: PDF: Find in page
        https://bugs.webkit.org/show_bug.cgi?id=57765

        Support searching text within PDF documents.  Find requests must be routed from the
        WebPageProxy, through the PageClient, and to the WKView, where they can be passed to 
        the PDFViewController.

        * UIProcess/API/mac/PDFViewController.h:
        * UIProcess/API/mac/PDFViewController.mm:
        (_PDFSelectionsAreEqual): Copied from WebPDFView.
        (-[WKPDFView _nextMatchFor:direction:caseSensitive:wrap:fromSelection:startInSelection:]): Copied from WebPDFView.
        (-[WKPDFView _countMatches:caseSensitive:]): Added.
        (WebKit::PDFViewController::findString): Added.
        (WebKit::PDFViewController::countStringMatches): Added.
        * UIProcess/PageClient.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::findStringInCustomRepresentation): Added.
        (WebKit::PageClientImpl::countStringMatchesInCustomRepresentation): Added.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _findStringInCustomRepresentation:withFindOptions:maxMatchCount:]): Added.
        (-[WKView _countStringMatchesInCustomRepresentation:withFindOptions:maxMatchCount:]): Added.
        * UIProcess/WebPageProxy.h: Moved a number of find-related functions from private: to public: so
            they could be called from PDFViewController.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::findString): Added. 
        (WebKit::WebPageProxy::countStringMatches): Added.
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::findStringInCustomRepresentation): Added stub.
        (WebKit::WebView::countStringMatchesInCustomRepresentation): Ditto.
        * UIProcess/win/WebView.h:
        * UIProcess/API/qt/qwkpage_p.h:
        (QWKPagePrivate::findStringInCustomRepresentation): Added stub.
        (QWKPagePrivate::countStringMatchesInCustomRepresentation): Added stub.

2011-04-11  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Anders Carlsson.

        WebKit2: Implement TextChecker on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57862

        Part 6: Update the Spelling UI with the spelling and grammar mistakes.

        * UIProcess/API/C/win/WKAPICastWin.h:
        (WebKit::toAPI):
        Make it possible to go from a WebCore::GrammarDetail to a WebGrammarDetail.
 
        * UIProcess/API/C/win/WKGrammarDetail.cpp:
        (WKGrammarDetailCreate):
        (WKGrammarDetailGetLocation):
        (WKGrammarDetailGetLength):
        (WKGrammarDetailCopyGuesses):
        (WKGrammarDetailCopyUserDescription):
        * UIProcess/API/C/win/WKGrammarDetail.h:

        * UIProcess/API/C/win/WKTextChecker.cpp:
        (WKTextCheckerCheckSpelling):
        Tell the WebTextChecker.
        * UIProcess/API/C/win/WKTextChecker.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::contextMenuItemSelected):
        If the show/hide spelling UI is selected and the spelling UI is not showing, make sure to
        advance to the next misspelling (in this case, the first).
        This behavior matches that in WebCore and WKView.mm.
        (WebKit::WebPageProxy::advanceToNextMisspelling):
        Make this function const since it does not modify the WebPageProxy and making it const
        allows WebTextChecker::checkSpelling to take a const WebPageProxy.
        (WebKit::WebPageProxy::spellDocumentTag):
        (WebKit::WebPageProxy::updateSpellingUIWithMisspelledWord):
        (WebKit::WebPageProxy::updateSpellingUIWithGrammarString):
        * UIProcess/WebPageProxy.h:

        * UIProcess/TextChecker.h:
        * UIProcess/win/TextCheckerWin.cpp:
        (WebKit::TextChecker::uniqueSpellDocumentTag):
        Tell the TextCheckerClient which WebPageProxy this tag is for.
        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
        Tell the TextCheckerClient.
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        Ditto.
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::uniqueSpellDocumentTag):
        Add the new argument that is unused by this port.
        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
        Ditto.
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        Ditto.
        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::TextChecker::uniqueSpellDocumentTag):
        Ditto.
        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
        Ditto.
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        Ditto.
        * UIProcess/qt/TextCheckerQt.cpp:
        (WebKit::TextChecker::uniqueSpellDocumentTag):
        Ditto.
        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
        Ditto.
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        Ditto.

        * UIProcess/win/WebGrammarDetail.cpp:
        (WebKit::WebGrammarDetail::create):
        (WebKit::WebGrammarDetail::WebGrammarDetail):
        (WebKit::WebGrammarDetail::guesses):
        * UIProcess/win/WebGrammarDetail.h:
        (WebKit::WebGrammarDetail::location):
        (WebKit::WebGrammarDetail::length):
        (WebKit::WebGrammarDetail::userDescription):

        * UIProcess/win/WebTextChecker.cpp:
        (WebKit::WebTextChecker::checkSpelling):
        Tell the page to advance to the next misspelling. This matches the WK1 WebView.cpp logic.

        * UIProcess/win/WebTextChecker.h:
        * UIProcess/win/WebTextCheckerClient.cpp:
        (WebKit::WebTextCheckerClient::uniqueSpellDocumentTag):
        (WebKit::WebTextCheckerClient::toggleSpellingUIIsShowing):
        (WebKit::WebTextCheckerClient::updateSpellingUIWithMisspelledWord):
        (WebKit::WebTextCheckerClient::updateSpellingUIWithGrammarString):
        * UIProcess/win/WebTextCheckerClient.h:

2011-04-10  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed.

        Remove extra inadvertantly commiteed changes from last change.

        * WebProcess/com.apple.WebProcess.sb:

2011-04-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        REGRESSION: WebProcess spews sandboxing violations for outbound network traffic
        https://bugs.webkit.org/show_bug.cgi?id=58215
        <rdar://problem/9251695>
        
        * WebProcess/com.apple.WebProcess.sb: Restore some previously removed rules.

2011-04-10  Kimmo Kinnunen  <kimmo.t.kinnunen@nokia.com>

        Reviewed by Eric Seidel.

        Require no undefined symbols during compilation.

        [Qt] [WK2] WebKitTestRunner, QtWebProcess and WTRInjectBundle should fail to compile when there's undefined symbols
        https://bugs.webkit.org/show_bug.cgi?id=54896
        
        Add -Wl,--no-undefined to catch missing symbols early.

        * WebProcess.pro:

2011-04-09  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.
        
        Try recommitting some things svn left out of my last commit.

        * WebProcess/Plugins/Netscape/NPJSObject.h:

2011-04-09  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.
        
        Try recommitting some things svn left out of my last commit.

        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::evaluate):

2011-04-08  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Safari doesn't respect cmd-arrows (and variations) as custom keyboard shortcuts
        https://bugs.webkit.org/show_bug.cgi?id=58175
        <rdar://problem/9060555>

        The problem is that command handling should be different for events that come as keyDown:
        and those that come as performKeyEquivalent:. WebKit1 only tries custom "key bindings"
        when handling a keyDown:, letting a performKeyEquivalent: run through the whole responder
        chain first.

        This would be very difficult to implement in WebKit2 because of how it re-sends the same
        event after web process handling. Luckily, we can both fix the bug and make the behavior
        more robust by not hardcoding key combinations.

        * WebProcess/WebPage/WebPage.h: Edit performNonEditingBehaviorForSelector.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::executeKeypressCommandsInternal): When executing commands, also try
        executing editor commands in their non-editing meaning, which is usually scrolling.
        (WebKit::WebPage::performNonEditingBehaviorForSelector): Naive implementation with a chain
        of ifs, which is hopefully ok performance-wise for a dozen check.
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent): Only kept two commands here that I
        couldn't easily move.

2011-04-08  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Anders Carlsson.

        WebKit2: Show the substitutions panel on Mac and make sure the menu items titles are
        updated correctly.
        https://bugs.webkit.org/show_bug.cgi?id=58179

        * UIProcess/API/mac/WKView.mm:
        (-[WKView validateUserInterfaceItem:]):
        The title of the context menu item should be opposite of whether or not the spelling panel
        is visible.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::contextMenuItemSelected):
        If the "Show/Hide" Substitutions item is selected, call toggleSubstitutionsPanelIsShowing.
        (WebKit::WebPageProxy::substitutionsPanelIsShowing):
        Ask the TextChecker.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * UIProcess/TextChecker.h:
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::substitutionsPanelIsShowing):
        As the shared NSSpellChecker if the substitutionsPanel is visible.
        (WebKit::TextChecker::toggleSubstitutionsPanelIsShowing):
        Order the substitutionsPanel out or front (copied from WKView.mm).

        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::substitutionsPanelIsShowing):
        Send a sync message to the UI process to find out.
        It needs to be sync because the editor code relies on the value returned.

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

        Reviewed by Adele Peterson.

        Fixed a bug where right-to-left frames incorrectly reported that they were pinned to the left
        when they were actually not.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didChangeScrollOffsetForMainFrame): Do not assume that the minimum scroll offset
        is zero, because it is not.

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

        Fix the Windows build.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::Drop):

2011-04-08  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Anders Carlsson.

        WebKit2: Implement TextChecker on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57862

        Part 5: Implement the code show and hide the Spelling UI via the context menu item (both
        Windows and Mac).

        * UIProcess/API/C/win/WKTextChecker.h:
        Add the new WKTextCheckerClient funtions.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView validateUserInterfaceItem:]):
        The title of the context menu item should be opposite of whether or not the spelling panel
        is visible.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::contextMenuItemSelected):
        If the "Show/Hide Spelling and Grammar" item is selected, call toggleSpellingUIIsShowing.
        (WebKit::WebPageProxy::spellingUIIsShowing):
        Call through to TextChecker.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * UIProcess/TextChecker.h:
       * UIProcess/win/TextCheckerWin.cpp:
        (WebKit::TextChecker::spellingUIIsShowing):
        Call the TextCheckerClient.
        (WebKit::TextChecker::toggleSpellingUIIsShowing):
        Ditto.
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::spellingUIIsShowing):
        Ask the shared NSSpellChecker if the spellingPanel is visible.
        (WebKit::TextChecker::toggleSpellingUIIsShowing):
        Order the spellingPanel out or front (copied from WKView.mm).
        * UIProcess/qt/TextCheckerQt.cpp:
        (WebKit::TextChecker::spellingUIIsShowing):
        Call notImplemented.
        (WebKit::TextChecker::toggleSpellingUIIsShowing):
        Ditto.
        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::TextChecker::spellingUIIsShowing):
        Ditto.
        (WebKit::TextChecker::toggleSpellingUIIsShowing):
        Ditto.
 
        * UIProcess/win/WebTextCheckerClient.cpp:
        (WebKit::WebTextCheckerClient::spellingUIIsShowing):
        Call the client.
        (WebKit::WebTextCheckerClient::toggleSpellingUIIsShowing):
        Ditto.
        * UIProcess/win/WebTextCheckerClient.h:

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::spellingUIIsShowing):
        Send a sync message to the UI process to find out.
        It needs to be sync because the Editor code relies on the value returned.

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

        Reviewed by Dan Bernstein.

        Sandboxing doesn't work if a local file is dropped on the content area
        https://bugs.webkit.org/show_bug.cgi?id=58177
        <rdar://problem/9019253>

        When performing a drag and the dragging pasteboard contains a local file, create a
        sandbox extension and pass it along. If we end up loading the file, the sandbox extension
        tracker will consume the extension.

        * UIProcess/API/mac/WKView.mm:
        (maybeCreateSandboxExtensionFromPasteboard):
        Add helper function.

        (-[WKView performDragOperation:]):
        Create a sandbox extension handle and pass it to performDrag.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::dragEntered):
        (WebKit::WebPageProxy::dragUpdated):
        (WebKit::WebPageProxy::dragExited):
        Pass an empty sandbox extension handle to performDragControllerAction.

        (WebKit::WebPageProxy::performDrag):
        Pass the sandbox extension handle along to performDragControllerAction.

        (WebKit::WebPageProxy::performDragControllerAction):
        Send along the sandbox extension handle.

        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        (WebKit::WebDragClient::willPerformDragDestinationAction):
        If the destination action is a load action, call WebPage::willPerformLoadDragDestinationAction.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performDragControllerAction):
        Create a sandbox extension.

        (WebKit::WebPage::willPerformLoadDragDestinationAction):
        If we have a sandbox extension, pass it along to the sandbox extension tracker.

        (WebKit::WebPage::SandboxExtensionTracker::willPerformLoadDragDestinationAction):
        Call setPendingProvisionalSandboxExtension.

        (WebKit::WebPage::SandboxExtensionTracker::beginLoad):
        Call setPendingProvisionalSandboxExtension.

        (WebKit::WebPage::SandboxExtensionTracker::setPendingProvisionalSandboxExtension):
        Factor code from beginLoad out into a separate function.

        * WebProcess/WebPage/WebPage.messages.in:
        PerformDragControllerAction now takes a sandbox extension handle.

2011-04-08  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=58151
        Crash after closing a Webview, in WebKit!WebCore::WindowMessageBroadcaster::SubclassedWndProc

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::close):
        Resolve a difference between old WebKit WebView and WebKit2 WebView by destroying and clearing
        out WebKit2 WebView's HWND when closing. Not doing so was causing the WebView to remain in the
        list of WindowMessageBroadcaster listeners, and after closing the WebView, WindowMessageBroadcaster
        would message a dead WebView and crash.

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

        Reviewed by Adam Roben.

        Make the drag operations be different functions
        https://bugs.webkit.org/show_bug.cgi?id=58169

        Since we want performDrag to take a sandbox extension, separate the four
        drag operations out into different functions. No functionality change.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView draggingEntered:]):
        (-[WKView draggingUpdated:]):
        (-[WKView draggingExited:]):
        (-[WKView performDragOperation:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::dragEntered):
        (WebKit::WebPageProxy::dragUpdated):
        (WebKit::WebPageProxy::dragExited):
        (WebKit::WebPageProxy::performDrag):
        * UIProcess/WebPageProxy.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::DragEnter):
        (WebKit::WebView::DragOver):
        (WebKit::WebView::DragLeave):
        (WebKit::WebView::Drop):

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

        Reviewed by Adam Roben.

        Parse 'DispatchOnConnectionQueue' in messages.in files
        https://bugs.webkit.org/show_bug.cgi?id=58168

        Handle parsing multiple, space-separated attributes in .messages.in files. Keep track of
        'DispatchOnConnectionQueue' and rename 'delayed' to 'Delayed'.

        * Scripts/webkit2/messages.py:
        * Scripts/webkit2/messages_unittest.py:

2011-04-08  Alpha Lam  <hclam@chromium.org>

        Unreviewed, rolling out r83335.
        http://trac.webkit.org/changeset/83335
        https://bugs.webkit.org/show_bug.cgi?id=53556

        GTK and QT bots are broken

        * Configurations/FeatureDefines.xcconfig:

2011-04-07  Anna Cavender  <annacc@chromium.org>

        Reviewed by Eric Carlson.

        Setup ENABLE(TRACK) feature define
        https://bugs.webkit.org/show_bug.cgi?id=53556

        * Configurations/FeatureDefines.xcconfig:

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

        Reviewed by Darin Alder.

        REGRESSION (WebKit2): AppKit thinks that web views don't support DocumentAccess
        https://bugs.webkit.org/show_bug.cgi?id=58102
        <rdar://problem/9223246>

        * UIProcess/API/mac/WKView.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView doCommandBySelector:]):
        (-[WKView insertText:replacementRange:]):
        (-[WKView validAttributesForMarkedText]):
        (-[WKView setMarkedText:selectedRange:replacementRange:]):
        (-[WKView attributedSubstringForProposedRange:actualRange:]):
        (-[WKView firstRectForCharacterRange:actualRange:]):
        Switch to NSTextInputClient, opting out of optimizations and optional features for now.

2011-04-08  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Martin Robinson.

        [Qt][WK2][Symbian] Remove use of stack arrays with variable size
        https://bugs.webkit.org/show_bug.cgi?id=57877

        For better compiler portability, use new/delete for arrays when size
        isn't known at compile time. Also fix one compiler warning about bitshift
        operations on signed integer
        * Platform/CoreIPC/unix/ConnectionUnix.cpp:
        (CoreIPC::Connection::readyReadHandler):
        (CoreIPC::Connection::sendOutgoingMessage):

2011-04-08  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fix the WebKit2 build for older versions of GTK+
        https://bugs.webkit.org/show_bug.cgi?id=58095

        * UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp: Include the GtkVersioning.h header.

2011-04-07  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [WK2][Qt][GTK] Introduce common use flag for the shared UNIX domain socket IPC implementation
        https://bugs.webkit.org/show_bug.cgi?id=58030

        Replace "PLATFORM(QT) || PLATFORM(GTK)" conditions in IPC code with
        USE(UNIX_DOMAIN_SOCKETS).

        * Platform/CoreIPC/Attachment.h:
        * Platform/CoreIPC/Connection.h:
        * Platform/SharedMemory.h:

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

        Reviewed by Simon Fraser.

        Clicks not recognized on http://www.nibblestutorials.net/ which uses Silverlight
        https://bugs.webkit.org/show_bug.cgi?id=58108
        <rdar://problem/9167611>

        Change platformHandleMouseEvent to return true, which means that the plug-in has handled the
        event. Some plug-ins (like Silverlight) will return false from NPP_HandleEvent even though the
        event has been handled. In this case it lead to a very subtle bug where the plug-in element would
        lose focus right after a mouse down even had been sent.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformHandleMouseEvent):

2011-04-07  Adam Roben  <aroben@apple.com>

        Pass NPP_SetWindow a null window handle during plugin destruction on non-Mac platforms

        This matches WebKit1.

        Fixes <http://webkit.org/b/47009> WebKit2 needs to call NPP_SetWindow when destroying a
        plugin

        Reviewed by Anders Carlsson.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::destroy): Null out our NPWindow's window handle and pass it to
        NPP_SetWindow (unless we're on Mac).

2011-04-08  Jamie Cooley  <james.cooley@nokia.com>

        Reviewed by Benjamin Poulain.

        [Qt][WK2] Make sure qwkhistory.h is copied into includes/WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=57945

        * UIProcess/API/qt/WKView.h:
        * UIProcess/API/qt/qwkhistory.h:

2011-04-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Do not destroy WorkQueue event sources unless they have been cancelled
        https://bugs.webkit.org/show_bug.cgi?id=57611

        * Platform/WorkQueue.h:
        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::EventSource::EventSource): Remove unused member
        m_dispatchSource.
        (WorkQueue::EventSource::executeEventSource): Make it return void
        instead of boolean since we are always ignoring the return value.
        (WorkQueue::EventSource::performWork): Return FALSE from the
        callback only when the source has been cancelled (condition = 0)
        to make sure it's destroyed when the even source handler is
        unregistered.
        (WorkQueue::registerEventSourceHandler): Use GRefPtr for the
        source, to avoid leaking it.
        (WorkQueue::scheduleWorkOnSource): Receive the source callback as
        parameter so that it can be used by scheduleWorkOnTermination() too.
        (WorkQueue::scheduleWork):
        (WorkQueue::scheduleWorkAfterDelay):
        (WorkQueue::scheduleWorkOnTermination): Use
        scheduleWorkOnSource().

2011-04-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Close connection when web process finishes
        https://bugs.webkit.org/show_bug.cgi?id=57540

        * Platform/CoreIPC/Connection.h:
        * Platform/CoreIPC/unix/ConnectionUnix.cpp:
        * Platform/PlatformProcessIdentifier.h: Use GPid as process
        identifier.
        * Platform/WorkQueue.h:
        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::EventSource::EventSource): Add cancellable parameter.
        (WorkQueue::EventSource::cancel): New method to cancel the source.
        (WorkQueue::EventSource::performWorkOnTermination): New method to
        execute a work item called when child process has finished.
        (WorkQueue::registerEventSourceHandler): Create a GCancellable for
        the socket source.
        (WorkQueue::unregisterEventSourceHandler): Cancel the source
        instead of destroying it, this will cause the source to trigger
        with condition = 0, which makes the callback return FALSE and the
        source is destroyed.
        (WorkQueue::scheduleWorkOnSource): Pass NULL as cancellable for
        idle and timeout sources.
        (WorkQueue::scheduleWorkOnTermination): Create a child watch
        source to monitor the child process.
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess): Use GPid instead of int
        as process identifier.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didFinishLaunching): Call
        WorkQueue::scheduleWorkOnTermination() for GTK platform too when
        web process has been launched.

2011-04-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement scheduleWorkAfterDelay() in WorkQueueGtk
        https://bugs.webkit.org/show_bug.cgi?id=57434

        * Platform/WorkQueue.h:
        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::EventSource::executeEventSource): This new method
        contains the common code to execute a work item.
        (WorkQueue::EventSource::performWorkOnce): Use
        executeEventSource() to execute the work item.
        (WorkQueue::EventSource::performWork): Use executeEventSource() to
        execute the work item.
        (WorkQueue::registerEventSourceHandler): Use a GSocket instead of
        a GIOChannel since the API is newer and allows us to pass a
        cancellable object to be able to cancel the source.
        (WorkQueue::scheduleWorkOnSource): This new method contains the
        common code to attach a source to a context. It doesn't use a lock
        anymore, since g_source_attach() uses its own mutex internally.
        (WorkQueue::scheduleWork): Use an idle source instead of a timeout
        one, changing the priority to G_PRIORITY_DEFAULT.
        (WorkQueue::scheduleWorkAfterDelay): Implement it using a timeout
        source with the given delay.

2011-04-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Use glib API instead of fork + execl in ProcessLauncherGtk
        https://bugs.webkit.org/show_bug.cgi?id=57234

        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::childSetupFunction): close the socket and use prctl()
        when platform is Linux to kill the child process when the parent
        finishes.
        (WebKit::ProcessLauncher::launchProcess): Use g_spawn_async() to
        launch the web process.

2011-04-07  Geoffrey Garen  <ggaren@apple.com>

        Some Handle<T> cleanup
        https://bugs.webkit.org/show_bug.cgi?id=58109

        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::NPJSObject::NPJSObject): Updated for new null constructor.

2011-04-07  Jessie Berlin  <jberlin@apple.com>

        Max build fix.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::checkSpellingOfString):
        Do not risk an overflow.
        (WebKit::WebEditorClient::checkGrammarOfString):
        Ditto.

2011-04-07  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Brian Weinstein.

        WebKit2: Implement TextChecker on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57862

        Part 4: Implement checkGrammarOfString.

        * Scripts/webkit2/messages.py:
        The generated files should include TextCheckerClient.h for WebCore::GrammarDetail.

        * Shared/API/c/win/WKBaseWin.h:
        * Shared/APIObject.h:
        * UIProcess/API/C/win/WKAPICastWin.h:

        * UIProcess/API/C/win/WKGrammarDetail.cpp: Added.
        (WKGrammarDetailGetTypeID):
        (WKGrammarDetailCreate):
        * UIProcess/API/C/win/WKGrammarDetail.h: Added.

        * UIProcess/API/C/win/WKTextChecker.h:
        Add the checkGrammarOfString WKTextCheckerClient function.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::checkGrammarOfString):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * UIProcess/TextChecker.h:
        * UIProcess/win/TextCheckerWin.cpp:
        (WebKit::TextChecker::checkGrammarOfString):
        Call the TextCheckerClient.
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::checkSpellingOfString):
        Add a comment about this not being used on Mac.
        (WebKit::TextChecker::checkGrammarOfString):
        Ditto, and call notImplemented.
        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::TextChecker::checkGrammarOfString):
        Call notImplemented.
        * UIProcess/qt/TextCheckerQt.cpp:
        (WebKit::TextChecker::checkGrammarOfString):
        Ditto.

        * UIProcess/win/WebGrammarDetail.cpp: Added.
        (WebKit::WebGrammarDetail::create):
        (WebKit::WebGrammarDetail::WebGrammarDetail):
        Initialize the underlying WebCore::GrammarDetail.
        * UIProcess/win/WebGrammarDetail.h: Added.
        (WebKit::WebGrammarDetail::grammarDetail):
        (WebKit::WebGrammarDetail::type):

        * UIProcess/win/WebTextCheckerClient.cpp:
        (WebKit::WebTextCheckerClient::checkGrammarOfString):
        Populate the Vector of WebCore::GrammarDetails with the WebGrammarDetails.
        * UIProcess/win/WebTextCheckerClient.h:

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::checkSpellingOfString):
        Use WTF::notFound as the initial value for resultLocation.
        (WebKit::WebEditorClient::checkGrammarOfString):
        Send a sync message to the UI Process (similar to checkSpellingOfString and checkTextOfParagraph).

        * win/WebKit2.vcproj:
        Add WKGrammarDetail.h/.cpp and WebGrammarDetail.h/.cpp.
        * win/WebKit2Generated.make:
        Copy over WKGrammarDetail.h.

2011-04-07  Enrica Casucci  <enrica@apple.com>

        Reviewed by Oliver Hunt.

        REGRESSION(WebKit2): execCommand('undo') doesn't work (Windows).
        https://bugs.webkit.org/show_bug.cgi?id=58056
        <rdar://problem/8862023>
        
        Adding support for execCommand('undo') and execCommand('redo')
        in WebKit2 for Windows.

        * UIProcess/API/C/win/WKView.h:
        * UIProcess/win/WebUndoClient.cpp:
        (WebKit::WebUndoClient::canUndoRedo):
        (WebKit::WebUndoClient::executeUndoRedo):
        * UIProcess/win/WebUndoClient.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::canUndoRedo):
        (WebKit::WebView::executeUndoRedo):

2011-04-07  Andrew Scherkus  <scherkus@chromium.org>

        Revert ENABLE_TRACK patch due to compile failures.

        * Configurations/FeatureDefines.xcconfig:

2011-04-07  Martin Robinson  <mrobinson@igalia.com>

        Fix the WebKit2 GTK+ build for older versions of GTK+.

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp: Include the GtkVersioning.h header.

2011-04-07   Amruth Raj  <amruthraj@motorola.com> and Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [GTK] Implement SharedMemory for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=49791

        Share the SharedMemory, Attachment and Connection implementations with the Qt port.
        Both implementation are, in fact, general Unix implementations using standard Unix
        domain sockets and sendmsg / recvmsg. This should reduce the amount of duplicated code
        greatly and lay the groundwork for GTK+/Qt implementations for other operating systems.

        * GNUmakefile.am: Replaced GTK+ versions of files with the Unix ones.
        * Platform/CoreIPC/ArgumentDecoder.cpp: Extended Qt #ifdefs to include GTK.
        (CoreIPC::ArgumentDecoder::~ArgumentDecoder):
        * Platform/CoreIPC/ArgumentEncoder.cpp: Ditto.
        (CoreIPC::ArgumentEncoder::~ArgumentEncoder):
        * Platform/CoreIPC/Attachment.h: Ditto.
        * Platform/CoreIPC/Connection.h: Combined the GTK+ and Qt sections.
        * Platform/CoreIPC/unix/AttachmentUnix.cpp: Renamed from Source/WebKit2/Platform/CoreIPC/qt/AttachmentQt.cpp.
        * Platform/CoreIPC/unix/ConnectionUnix.cpp: Renamed from Source/WebKit2/Platform/CoreIPC/qt/ConnectionQt.cpp.
        * Platform/unix/SharedMemoryUnix.cpp: Renamed from Source/WebKit2/Platform/qt/SharedMemoryQt.cpp.
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess): Use SOCK_DGRAM instead of SOCK_STREAM to match Qt.
        * WebKit2.pro: Updated source list to reflect file renaming.

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

        Reviewed by Brian Weinstein.

        REGRESSION (r83081): Use of deallocated memory in WebEditorClient::respondToChangedSelection()
        https://bugs.webkit.org/show_bug.cgi?id=58082

        * WebProcess/WebCoreSupport/WebEditorClient.cpp: (WebKit::WebEditorClient::respondToChangedSelection):
        Now that the Range is used outside the full expression where it's created, it needs to be
        protected with RefPtr.

2011-04-07  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/9251566> WebBackForwardList::createCFDictionaryRepresentation's current item index
        doesn't account for items removed by filter callback.

        * UIProcess/cf/WebBackForwardListCF.cpp:
        (WebKit::WebBackForwardList::createCFDictionaryRepresentation): Update the current item index
        when we omit an item due to the filter callback.

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

        Reviewed by Anders Carlsson.

        REGRESSION (WebKit2): Reverse conversion doesn't work in Kotoeri
        https://bugs.webkit.org/show_bug.cgi?id=58066
        <rdar://problem/8965302>

        * Scripts/webkit2/messages.py:
        * Shared/mac/AttributedString.h: Added.
        * Shared/mac/AttributedString.mm: Added.
        (WebKit::AttributedString::encode):
        (WebKit::AttributedString::decode):
        Added an class that wraps NSAttributedString. As far as I can tell, one can't pass a CF
        or NS object to another process without wrapping it in a C++ one.
        
        * Shared/mac/ArgumentCodersMac.h: Added.
        * Shared/mac/ArgumentCodersMac.mm: Added.
        Added coders for Foundation objects, similar to ArgumentCodersCF. There are two reasons why
        these are needed:
        1) Even though most Foundation objects are toll free bridged with CF, CFGetTypeID() doesn't
        work properly for them (I've been just getting 1).
        2) NSColor isn't toll free bridged to CF.
        This adds just the types necessary for editing NSAttributedString (and I don't yet know what
        happens with attachments).

        * UIProcess/API/mac/WKView.mm: (-[WKView attributedSubstringFromRange:]):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::getAttributedSubstringFromRange):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Boilerplate code for making a sync call to web process.

        * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::getAttributedSubstringFromRange):
        Ported from WebHTMLView.

2011-04-07  Jeff Miller  <jeffm@apple.com>

        Mac build fix.

        * Shared/WebString.h:
        (WebKit::WebString::getCharacters): Add explict cast when using std::min().

2011-04-07  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adam Roben.

        Replace WKStringGetCharactersPtr() with WKStringGetCharacters()
        https://bugs.webkit.org/show_bug.cgi?id=58058
        
        WKStringGetCharactersPtr() exposes the internal implementation of WKString, so change this to WKStringGetCharacters(), which makes a UTF-16 copy.

        * Shared/API/c/WKString.cpp:
        (WKStringGetCharacters): Added, replaces WKStringGetCharactersPtr().
        * Shared/API/c/WKString.h: Replaced WKStringGetCharactersPtr() with WKStringGetCharacters().
        * Shared/WebString.h:
        (WebKit::WebString::getCharacters): Added.

2011-04-07  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Support window bounce when panning.
        https://bugs.webkit.org/show_bug.cgi?id=58065
        <rdar://problem/9244367>
        
        Make gestureDidScroll synchronous, as once we scroll, we need to know
        whether or not we are at the beginning or end of the scrollable document.
        
        If we are at either end of the scrollable document, we call the Windows 7
        API to bounce the window to give an indication that you are past an end
        of the document.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::gestureDidScroll): Pass a boolean for the reply, and return it.
        * UIProcess/WebPageProxy.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView): Inititalize a new variable.
        (WebKit::WebView::onGesture): Once we send the message to scroll, check if have gone to
            an end of the document, and if we have, bounce the window.
        * UIProcess/win/WebView.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: GestureDidScroll is now sync.
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::gestureDidScroll): When we are done scrolling, check if we have a vertical
            scrollbar and if we are at the beginning or the end of the scrollable document.

2011-04-07  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.isPageBoxVisible
        https://bugs.webkit.org/show_bug.cgi?id=42695

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleIsPageBoxVisible):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::isPageBoxVisible):
        * WebProcess/InjectedBundle/InjectedBundle.h:

2011-04-07  Enrica Casucci  <enrica@apple.com>

        Reviewed by Oliver Hunt.

        REGRESSION(WebKit2): execCommand('undo') doesn't work (Mac).
        https://bugs.webkit.org/show_bug.cgi?id=58055
        <rdar://problem/8862023>
        
        Adding support for execCommand('undo') and execCommand('redo')
        in WebKit2 for Mac.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::canUndoRedo): Added interaction with undomanager.
        (WebKit::PageClientImpl::executeUndoRedo): Added interaction with undomanager.
        
        Added new empty PageClient methods for other platforms.
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::canUndoRedo):
        (QWKPagePrivate::executeUndoRedo):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/gtk/WebView.cpp:
        (WebKit::WebView::canUndoRedo):
        (WebKit::WebView::executeUndoRedo):
        * UIProcess/gtk/WebView.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::canUndoRedo):
        (WebKit::WebView::executeUndoRedo):
        * UIProcess/win/WebView.h:

        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::unapply): Added flag to allow dispatching
        of asychronous messages while waiting for a sync message reply.
        (WebKit::WebEditCommandProxy::reapply): Same as above.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::canUndoRedo):
        (WebKit::WebPageProxy::executeUndoRedo):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp: Added missing implementation.
        (WebKit::WebEditorClient::canUndo):
        (WebKit::WebEditorClient::canRedo):
        (WebKit::WebEditorClient::undo):
        (WebKit::WebEditorClient::redo):

2011-04-07  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9250368> and https://bugs.webkit.org/show_bug.cgi?id=58062

        * UIProcess/API/C/WKIconDatabase.cpp:
        (WKIconDatabaseClose):
        * UIProcess/API/C/WKIconDatabase.h:
        
        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::close):
        * UIProcess/WebIconDatabase.h:

2011-04-07  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Implement TextChecker on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57862
 
        Part 3: Implement checkSpellingOfString

        In WebCore, checkTextOfParagraph is only defined and used on platforms where
        WTF_USE_UNIFIED_TEXT_CHECKING is defined (which right now is only non-Leopard and non-Tiger
        Mac builds).
 
        On other platforms, checkSpellingOfString and checkGrammarOfString (coming in a separate
        patch in an attempt to keep things easier to review) are used.

        * UIProcess/API/C/win/WKTextChecker.h:
        * UIProcess/TextChecker.h:
        Surround checkTextOfParagraph by #if USE(UNIFIED_TEXT_CHECKING) and add
        checkSpellingOfString.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::checkTextOfParagraph):
        Surround this by #if USE(UNIFIED_TEXT_CHECKING).
        (WebKit::WebPageProxy::checkSpellingOfString):
        Call through to the client.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        Surround checkTextOfParagraph by #if USE(UNIFIED_TEXT_CHECKING) and add
        checkSpellingOfString.

        * UIProcess/win/TextCheckerWin.cpp:
        (WebKit::TextChecker::checkSpellingOfString):
        Call through to the WebTextCheckerClient.
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::checkTextOfParagraph):
        Surround this by #if USE(UNIFIED_TEXT_CHECKING) for clarity.
        (WebKit::TextChecker::checkSpellingOfString):
        Add a call to notImplemented.
        * UIProcess/qt/TextCheckerQt.cpp:
        (WebKit::TextChecker::checkSpellingOfString):
        Ditto, and remove the implementation for checkTextOfParagraph.
        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::TextChecker::checkSpellingOfString):
        Ditto.

        * UIProcess/win/WebTextCheckerClient.cpp:
        (WebKit::WebTextCheckerClient::checkSpellingOfString):
        * UIProcess/win/WebTextCheckerClient.h:

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::checkSpellingOfString):
        Send a sync message to the UI Process (similar to the sync message used for
        checkTextOfParagraph).

2011-04-07  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt][WK2][Symbian] Temporary build fix until native Symbian IPC is done. Implement fake socketpair() as it's not available. 
        https://bugs.webkit.org/show_bug.cgi?id=57877

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::socketpair): socketpair() which returns -1

2011-04-07  Michael Saboff  <msaboff@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKit2: Memory leak in decodeResourceError
        https://bugs.webkit.org/show_bug.cgi?id=58004

        Release the local NSError after it is used to create a ResourceError
        object assigned to the reference argument.

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (CoreIPC::decodeResourceError):

2011-04-07  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Barth.

        Remove temporary WebProcess sandbox rules that are unnecessary now that plugins are in their own process
        https://bugs.webkit.org/show_bug.cgi?id=58023

        * WebProcess/com.apple.WebProcess.sb:

2011-04-07  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        Remove some no longer needed WebProcess sandbox allowances
        https://bugs.webkit.org/show_bug.cgi?id=58015
        <rdar://problem/9232592>

        * WebProcess/com.apple.WebProcess.sb: Remove no-longer needed extra network
        and launching privileges, since the bugs that required them are fixed.

2011-04-06  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.pageSizeAndMarginsInPixels
        https://bugs.webkit.org/show_bug.cgi?id=57984

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundlePageSizeAndMarginsInPixels):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::pageSizeAndMarginsInPixels):
        * WebProcess/InjectedBundle/InjectedBundle.h:

2011-04-06  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Benjamin Poulain.

        [Qt][WK2][Symbian] Remove use of stack arrays with variable size
        https://bugs.webkit.org/show_bug.cgi?id=57877
        
        For better compiler portability, use new/delete for arrays when size
        isn't known at compile time. Also fix one compiler warning about bitshift
        operations on signed integers. 
        * Platform/CoreIPC/qt/ConnectionQt.cpp: 
        (CoreIPC::Connection::readyReadHandler): 
        (CoreIPC::Connection::sendOutgoingMessage):

2011-04-06  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Support Windows 7 Gestures
        https://bugs.webkit.org/show_bug.cgi?id=49824
        <rdar://problem/8689728>
        
        Port code from WebKit1 -> WebKit2 to handle Windows 7 gestures.
        
        The UIProcess gets a WM_GESTURENOTIFY message, it sends a sync message to the WebProcess to ask
        if we should allow panning. The WebProcess checks if we're in a scrollable area, and the mouse
        isn't over a scrollbar.

        The UIProcess then gets a WM_GESTURE message, and if it is a pan gesture, it sends a message to
        the WebProcess to scroll by the amount fingers have moved since the last WM_GESTURE messeage. The
        X and Y are reversed because panning up -> moving the page down, and vice versa.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::gestureWillBegin): Send a sync message to the WebProcess
            to initialize the gesture. The WebProcess returns whether or not we can start a pan
            gesture from where we are.
        (WebKit::WebPageProxy::gestureDidScroll): Send a message to the WebProcess to scroll by
            pan gesture.
        (WebKit::WebPageProxy::gestureDidEnd): Send a message to the WebProcess that the gesture has ended.
        * UIProcess/WebPageProxy.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::wndProc): Add WM_GESTURE and WM_GESTURENOTIFY handlers.
        (WebKit::WebView::WebView): Initialize two new variables.
        (WebKit::WebView::onGestureNotify): Figure out which gestures we should support based on where
            the gesture is beginning.
        (WebKit::WebView::onGesture): Support starting a gesture, ending a gesture, and panning.
        * UIProcess/win/WebView.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Add messages needed for gestures.
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::gestureWillBegin): Set the node that the gesture started on (so we 
            know which layer to scroll if the user pans), and determine whether or not we should allow
            panning. If the page can't scroll, or the user is on a scrollbar, disallow panning.
        (WebKit::WebPage::gestureDidScroll): Scroll the enclosing layer of the element the gesture
            started on.
        (WebKit::WebPage::gestureDidEnd): Clear the node the gesture started on.

2011-04-06  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adam Roben.

        Add WKStringGetCharactersPtr() and WKStringGetLength() to WebKit2 C API
        https://bugs.webkit.org/show_bug.cgi?id=57989
        
        Note that WKChar, which is returned by WKStringGetCharactersPtr(), is defined the same way we define JSChar in JSStringRef.h.

        * Shared/API/c/WKString.cpp:
        (WKStringGetLength): Added.
        (WKStringGetCharactersPtr): Added.
        * Shared/API/c/WKString.h: Define WKChar and added WKStringGetLength() and WKStringGetCharactersPtr().
        * Shared/WebString.h:
        (WebKit::WebString::length): Added.
        (WebKit::WebString::characters): Added.

2011-04-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver Hunt.

        Dock stays in front of Hulu.com full screen video output
        https://bugs.webkit.org/show_bug.cgi?id=57988
        <rdar://problem/9216260>

        Instead of using -[NSMenu setMenuBarVisible:] to toggle full screen, use
        -[NSApp setPresentationOptions:]. Also, make the UI process the front most app before
        setting the presentation options when exiting full screen, otherwise the dock won't
        be restored correctly.

        * PluginProcess/mac/PluginProcessShim.mm:
        Remove some shim functions that aren't needed.

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::PluginProcessProxy):
        Initialize m_preFullscreenAppPresentationOptions.

        * UIProcess/Plugins/PluginProcessProxy.h:
        Add m_preFullscreenAppPresentationOptions.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::enterFullscreen):
        Change the presentation options for the app.

        (WebKit::PluginProcessProxy::exitFullscreen):
        Restore the presentation options.

2011-04-06  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        Expose the original URL of a WKBackForwardListItem.

        Needed for <rdar://problem/9074651>.

        * UIProcess/API/C/WKBackForwardListItem.cpp:
        (WKBackForwardListItemCopyOriginalURL):
        * UIProcess/API/C/WKBackForwardListItem.h:

2011-04-06  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=57973 and https://bugs.webkit.org/show_bug.cgi?id=57973
        WK2 icon database should be able to get a CGImage of a specific size

        * UIProcess/API/C/cg/WKIconDatabaseCG.cpp:
        (WKIconDatabaseTryGetCGImageForURL): Change this API to take a requested size, and find the first matching
          CGImage in the icon.
        * UIProcess/API/C/cg/WKIconDatabaseCG.h:

2011-04-06  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Anders Carlsson.

        WebKit2: Implement TextChecker on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57862

        Part 2: Implement uniqueSpellDocumentTag and closeSpellDocumentWithTag.

        * UIProcess/API/C/win/WKTextChecker.h:
        * UIProcess/win/TextCheckerWin.cpp:
        (WebKit::TextChecker::uniqueSpellDocumentTag):
        (WebKit::TextChecker::closeSpellDocumentWithTag):
        * UIProcess/win/WebTextCheckerClient.cpp:
        (WebKit::WebTextCheckerClient::uniqueSpellDocumentTag):
        (WebKit::WebTextCheckerClient::closeSpellDocumentWithTag):
        * UIProcess/win/WebTextCheckerClient.h:

2011-04-06  Robert Sesek  <rsesek@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Move code duplicated between the WebKit/mac and WebKit2 down to WebCore because Chromium will need it too
        https://bugs.webkit.org/show_bug.cgi?id=54969

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::respondToChangedSelection): Moved duplicated code to WebCore
        * WebProcess/WebPage/mac/WebPageMac.mm: Moved duplicated code to WebCore
        (WebKit::WebPage::getMarkedRange):
        (WebKit::WebPage::getSelectedRange):
        (WebKit::WebPage::characterIndexForPoint):
        (WebKit::WebPage::performDictionaryLookupAtLocation):

2011-04-06  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.pageNumberForElementById
        https://bugs.webkit.org/show_bug.cgi?id=42329

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundlePageNumberForElementById):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::pageNumberForElementById):
        * WebProcess/InjectedBundle/InjectedBundle.h:

2011-04-05  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        REGRESSION: Drag & Drop Gmail Attachments doesn't work.
        https://bugs.webkit.org/show_bug.cgi?id=57909
        <rdar://problem/9103220>

        Added _hitTest method to support drag and drop when the drag types cannot be matched.
        This is the case for elements that do not place content
        in the drag pasteboard automatically when the drag start (i.e. dragging a DIV element).
               
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _hitTest:dragTypes:]): Added.

2011-04-06  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Darin Adler.

        Fix using UNUSED_PARAM introduced in r82907
        https://bugs.webkit.org/show_bug.cgi?id=57940

        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::clearCacheForOrigin):

2011-04-06  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Anders Carlsson.

        WebKit2: Implement TextChecker on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57862

        Part 1: Get and set the state.

        * Shared/API/c/win/WKBaseWin.h:
        * Shared/APIObject.h:
        * UIProcess/API/C/win/WKAPICastWin.h:
 
        * UIProcess/API/C/win/WKTextChecker.cpp: Added.
        (WKTextCheckerSetClient):
        (WKTextCheckerContinuousSpellCheckingEnabledStateChanged):
        (WKTextCheckerGrammarCheckingEnabledStateChanged):
        * UIProcess/API/C/win/WKTextChecker.h: Added.
 
        * UIProcess/TextChecker.h:
        * UIProcess/win/TextCheckerWin.cpp:
        (WebKit::TextChecker::state):
        Do the initalization for the state only once so that it is not necessary to call the client
        every time the state is requested.
        (WebKit::TextChecker::isContinuousSpellCheckingAllowed):
        Call the client.
        (WebKit::TextChecker::setContinuousSpellCheckingEnabled):
        Update the state and tell the client.
        (WebKit::TextChecker::setGrammarCheckingEnabled):
        Ditto.
        (WebKit::TextChecker::continuousSpellCheckingEnabledStateChanged):
        Update the state.
        (WebKit::TextChecker::grammarCheckingEnabledStateChanged):
        Update the state.

        * UIProcess/win/WebTextChecker.cpp: Added.
        (WebKit::WebTextChecker::shared):
        Make the WebTextChecker available globally.
        (WebKit::WebTextChecker::WebTextChecker):
        (WebKit::WebTextChecker::setClient):
        (WebKit::updateStateForAllWebProcesses):
        (WebKit::WebTextChecker::continuousSpellCheckingEnabledStateChanged):
        Tell the TextChecker that the state has changed, and then tell the
        WebProcessProxies to send the new state to the WebProcesses.
        (WebKit::WebTextChecker::grammarCheckingEnabledStateChanged):
        Ditto.
        * UIProcess/win/WebTextChecker.h: Added.
        (WebKit::WebTextChecker::client):
        (WebKit::WebTextChecker::type):

        * UIProcess/win/WebTextCheckerClient.cpp: Added.
        (WebKit::WebTextCheckerClient::continuousSpellCheckingAllowed):
        (WebKit::WebTextCheckerClient::continuousSpellCheckingEnabled):
        (WebKit::WebTextCheckerClient::setContinuousSpellCheckingEnabled):
        (WebKit::WebTextCheckerClient::grammarCheckingEnabled):
        (WebKit::WebTextCheckerClient::setGrammarCheckingEnabled):
        * UIProcess/win/WebTextCheckerClient.h: Added.
 
        * win/WebKit2.vcproj:
        Add WKTextChecker.h/.cpp, WebTextChecker.h/.cpp, and WebTextCheckerClient.h/.cpp.
        * win/WebKit2Generated.make:
        Copy over WKTextChecker.h.

2011-04-05  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.numberOfPages
        https://bugs.webkit.org/show_bug.cgi?id=42694

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleNumberOfPages):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::numberOfPages):
        * WebProcess/InjectedBundle/InjectedBundle.h:

2011-04-05  Darin Adler  <darin@apple.com>

        Reviewed by Alexey Proskuryakov.

        [Mac] WebKit2: Escape key does not stop page loads when focus is on the web page
        https://bugs.webkit.org/show_bug.cgi?id=57893
        <rdar://problem/9130486>

        * UIProcess/API/mac/PageClientImpl.h: Added executeSavedCommandBySelector.
        * UIProcess/API/mac/PageClientImpl.mm: Renamed internal Objective-C classes to use
        the WebKit2 Objective-C class prefix, WK, rather than the WebKit1 Objective-C class
        prefix, Web. Removed some unneeded explicit WebKit namespace prefixes.
        (-[WKEditCommandObjC initWithWebEditCommandProxy:]): Removed unneeded WebKit
        namespace prefix.
        (-[WKEditCommandObjC command]): Ditto.
        (-[WKEditorUndoTargetObjC undoEditing:]): Updated for new class name.
        (-[WKEditorUndoTargetObjC redoEditing:]): Ditto.
        (WebKit::PageClientImpl::PageClientImpl): Ditto.
        (WebKit::PageClientImpl::registerEditCommand): Ditto.
        (WebKit::PageClientImpl::executeSavedCommandBySelector): Added.

        * UIProcess/API/mac/WKView.mm: Renamed internal Objective-C categories to use the
        WebKit2 Objective-C prefix, WK, rather than the WebKit1 Objective-C prefix, Web,
        or no prefix at all. Tweaked use of extern "C" a little.
        (-[WKView doCommandBySelector:]): Tweaked the comment.
        (-[WKView _executeSavedCommandBySelector:]): Added. For use when command is not handled
        by WebCore.
        (-[WKResponderChainSink initWithResponderChain:]): Added. Based on the
        WebResponderChainSink class in WebKit1.
        (-[WKResponderChainSink detach]): Added.
        (-[WKResponderChainSink didReceiveUnhandledCommand]): Added.
        (-[WKResponderChainSink noResponderFor:]): Added.
        (-[WKResponderChainSink doCommandBySelector:]): Added.
        (-[WKResponderChainSink tryToPerform:with:]): Added.

        * UIProcess/API/mac/WKViewInternal.h: Added declaration of _executeSavedCommandBySelector:
        method. Also removed unneeded includes.

        * UIProcess/PageClient.h: Added executeSavedCommandBySelector.
        * UIProcess/WebPageProxy.h: Added executeSavedCommandBySelector.
        * UIProcess/WebPageProxy.messages.in: Added ExecuteSavedCommandBySelector.

        * UIProcess/mac/WebFullScreenManagerProxyMac.mm: Updated includes.

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::executeSavedCommandBySelector): Added.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::executeKeypressCommandsInternal): Send the synchronous
        ExecuteSavedCommandBySelector message when a command is not handled by WebCore.

2011-04-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Alexey Proskuryakov.

        Some plug-in content is displayed upside down in Unity plug-in
        https://bugs.webkit.org/show_bug.cgi?id=57895
        <rdar://problem/9212003>

        Create the flipped geometry layer in the web process instead of the plug-in process,
        which matches what we do in WebKit1.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformPostInitialize):
        * WebProcess/Plugins/Netscape/mac/PluginProxyMac.mm:
        (WebKit::PluginProxy::pluginLayer):

2011-04-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Assertion failure when navigating quickly between file URLs
        https://bugs.webkit.org/show_bug.cgi?id=57884
        <rdar://problem/9080559>

        Remove bogus assertion. The pending provisional sandbox extension can be
        non-null if the current provisional load fails because we're about to load a new
        page that also has a sandbox extension.

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

2011-04-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Grant the web process access to ~/Library/Preferences/com.apple.universalaccess.plist
        https://bugs.webkit.org/show_bug.cgi?id=57879

        The web process needs access to the unviersal access preferences to determine if full keyboard
        access is enabled. I've filed <rdar://problem/9237619> which tracks reading this preference in the UI
        process and sending it over to the web process whenever it changes.

        * WebProcess/com.apple.WebProcess.sb:

2011-04-05  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        Add parentheses around && within || to avoid clang warning.

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

2011-04-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Add two more entries to the sandbox profile
        https://bugs.webkit.org/show_bug.cgi?id=57875

        Allow read-access to /Library/Dictionaries since WebCore::nextBreakablePosition
        ends up calling into ICU which accesses the dictionary.

        Allow Mach access to com.apple.networkd since it's used by CFNetwork.

        * WebProcess/com.apple.WebProcess.sb:

2011-04-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver Hunt.

        Invalidate callbacks if the WebPageProxy is no longer valid
        https://bugs.webkit.org/show_bug.cgi?id=57873
        <rdar://problem/9059717>

        Audit all function calls that take callbacks and make sure to invalidate the callbacks
        if the web page is no longer valid.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runJavaScriptInMainFrame):
        (WebKit::WebPageProxy::getRenderTreeExternalRepresentation):
        (WebKit::WebPageProxy::getSourceForFrame):
        (WebKit::WebPageProxy::getContentsAsString):
        (WebKit::WebPageProxy::getSelectionOrContentsAsString):
        (WebKit::WebPageProxy::getMainResourceDataOfFrame):
        (WebKit::WebPageProxy::getResourceDataFromFrame):
        (WebKit::WebPageProxy::getWebArchiveOfFrame):
        (WebKit::WebPageProxy::forceRepaint):
        (WebKit::WebPageProxy::computePagesForPrinting):
        (WebKit::WebPageProxy::drawRectToPDF):
        (WebKit::WebPageProxy::drawPagesToPDF):

2011-04-05  Adam Roben  <aroben@apple.com>

        Disable accelerated compositing on Windows machines that don't support it

        This includes machines without the necessary graphics hardware, and machines without
        WebKitQuartzCoreAdditions (like the Windows 7 Release (WebKit2 Tests) bots).

        Fixes <http://webkit.org/b/57870> REGRESSION (r82960): Lots of tests crashing in
        DrawingAreaImpl::enterAcceleratedCompositingMode on Windows 7 Release (WebKit2 Tests)

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit::LayerTreeHost::supportsAcceleratedCompositing): Added. On platforms other than
        Windows, this always returns true.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Only enable accelerated compositing-related
        preferences if the machine supports accelerated compositing.

        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.cpp:
        (WebKit::LayerTreeHostCAWin::supportsAcceleratedCompositing): Added. Creates a view, asks it
        if it can draw, and returns the result.

        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.h: Added supportsAcceleratedCompositing.

        * WebProcess/WebPage/win/LayerTreeHostWin.cpp: Added.
        (WebKit::LayerTreeHost::supportsAcceleratedCompositing): Added. Calls through to
        LayerTreeHostCAWin in configurations that support that class. Otherwise just returns false.

        * win/WebKit2.vcproj: Added LayerTreeHostWin.cpp. Let VS reorder some other files.

2011-04-05  Adam Roben  <aroben@apple.com>

        Make accelerated compositing work in WebKit2 on Windows

        LayerTreeHostCAWin uses WKCACFView to render each frame to an image, then has
        DrawingAreaImpl send that image over to the UI process (just like it does for
        non-accelerated rendering). It's unfortunate that this requires reading every frame back
        from the GPU into system memory. More efficient solutions can be explored in the future.

        Fixes <http://webkit.org/b/45567>.

        Reviewed by Anders Carlsson.

        * DerivedSources.make: Added $(WebKit2) to the VPATH so that DerivedSources.make can be
        found when used as a target dependency. Added rules to generate a HeaderDetection.h file on
        Windows. If we can find WebKitQuartzCoreAdditions headers, we define HAVE_WKQCA in
        HeaderDetection.h.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::setLayerHostNeedsDisplay):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        Added setLayerHostNeedsDisplay. Lets the layer host tell the DrawingAreaImpl that it has a
        new frame to render. This should only be called by layer hosts that participate in
        DrawingAreaImpl's display mechanism.

        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create): Only try to instantiate LayerTreeHostCAWin if we have
        WebKitQuartzCoreAdditions, since it depends on that library.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Removed code that forced accelerated compositing to be
        disabled on Windows.

        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.cpp:
        (WebKit::registerDummyWindowClass): Registers the window class we use for the dummy window.
        (WebKit::createDummyWindow): Creates the dummy window we pass to WKCACFView so that D3D can
        determine the display mode, etc. (The window is never shown on screen.)
        (WebKit::LayerTreeHostCAWin::LayerTreeHostCAWin): Initialize new members.
        (WebKit::LayerTreeHostCAWin::platformInitialize): Create our dummy window and view and
        associate the two. We set ourselves as the view's context's user data so that
        PlatformCALayer can get our AbstractCACFLayerTreeHost pointer as needed.
        (WebKit::LayerTreeHostCAWin::invalidate): Cancel any pending flushes, tear down our view,
        and destroy the dummy window if no other layer host is using it.
        (WebKit::LayerTreeHostCAWin::scheduleLayerFlush): Ask LayerChangesFlusher to call us back
        soon to perform the flush.
        (WebKit::LayerTreeHostCAWin::participatesInDisplay): Added. Returns true, since we render
        each frame to an image.
        (WebKit::LayerTreeHostCAWin::needsDisplay): Added. Returns true if it's now time to
        displayReturns true if it's now time to display.
        (WebKit::LayerTreeHostCAWin::timeUntilNextDisplay): Added. Returns how many seconds remain
        before we need to display again.
        (WebKit::size): Added. Helper function to get the size of a WKCACFImage.
        (WebKit::toShareableBitmap): Added. Helper function to convert a WKCACFImage to a
        ShareableBitmap.
        (WebKit::LayerTreeHostCAWin::display): Added. Renders the next frame to an image and stuffs
        the image into the UpdateInfo struct.
        (WebKit::LayerTreeHostCAWin::sizeDidChange): Added. Tells the view about the new size.
        (WebKit::LayerTreeHostCAWin::forceRepaint): Added. Flushes any pending changes to the view.
        (WebKit::LayerTreeHostCAWin::contextDidChangeCallback): Added. WKCACFView calls this
        whenever any changes made to the view or its layer tree have been flushed. Just calls
        through to contextDidChange.
        (WebKit::LayerTreeHostCAWin::contextDidChange): Added. Tells layers that they've started
        animating, and tells the DrawingAreaImpl that we need to display again.
        (WebKit::LayerTreeHostCAWin::rootLayer): Added. Gets the root layer's PlatformCALayer.
        (WebKit::LayerTreeHostCAWin::addPendingAnimatedLayer): Added. Stores the layer so that we
        can tell it animations have started the next time we get a contextDidChange callback.
        (WebKit::LayerTreeHostCAWin::layerTreeDidChange): Added. Schedules a flush, unless we're
        already in the process of flushing. This code came from WebCore::WKCACFViewLayerTreeHost.
        (WebKit::LayerTreeHostCAWin::flushPendingLayerChangesNow): Added. Performs the flush. This
        code was adapted from WebCore::WKCACFViewLayerTreeHost.

        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.h: Wrapped this whole header in HAVE(WKQCA),
        since this class only works when WebKitQuartzCoreAdditions is available. Added a bunch of
        new members.

2011-04-04  Adam Roben  <aroben@apple.com>

        Add a way for LayerTreeHost to participate in DrawingAreaImpl's normal display mechanism

        When LayerTreeHost participates in display, it renders each frame into a bitmap.
        DrawingAreaImpl sends the bitmap to the UI process in an Update message, just like in
        non-accelerated compositing mode. The UI process never knows that accelerated compositing is
        going on. (When LayerTreeHost does not participate in display, as on Mac, it is responsible
        for getting bits from the web process to the UI process.)

        No LayerTreeHost uses this mechanism (yet). This patch should cause no change in behavior.

        Fixes <http://webkit.org/b/57792> LayerTreeHost needs a way to render frames to a bitmap

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::forceRepaint): If the layer tree host participates in display,
        perform a display (like in the non-accelerated case).
        (WebKit::DrawingAreaImpl::layerHostDidFlushLayers): Don't send an
        EnterAcceleratedCompositing message to the UI process if the layer tree host participates in
        display. In that case, the UI process doesn't even need to know we're using accelerated
        compositing in the web process.
        (WebKit::DrawingAreaImpl::sendDidUpdateBackingStoreState): Go through the normal display
        mechanism if we have a layer tree host that participates in display.
        (WebKit::DrawingAreaImpl::didUpdate): Don't ignore DidUpdate messages when we have a layer
        tree host that participates in display.
        (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode): If the new layer tree host
        participates in display, let the display timer continue to run and continue to expect
        DidUpdate messages so that we don't interrupt the normal display mechanism. We still clear
        out m_dirtyRegion, m_scrollRect, and m_scrollOffset, though, because the layer tree host is
        still responsible for keeping track of those things even when it participates in display.
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode): If the outgoing layer tree host
        was participating in display, just send another Update message instead of an
        ExitAcceleratedCompositing message, since the UI process never even knew we were using
        accelerated compositing.
        (WebKit::DrawingAreaImpl::displayTimerFired): If we have a layer tree host that's
        participating in display, ask it when it next needs to display when scheduling our timer.

        (WebKit::DrawingAreaImpl::scheduleDisplay):
        (WebKit::DrawingAreaImpl::display):
        If we have a layer tree host that's participating in display, it will keep track of its own
        dirty region, so ask it if it needs display rather than checking our own dirty region.

        (WebKit::DrawingAreaImpl::display): If we have a layer tree host that's participating in
        display, don't bail out. Instead, tell it to display rather than asking the page to paint.
        Moved the setting of updateInfo.viewSize earlier so that it will be set even when the layer
        tree host is displaying. Other changes are just due to indentation.

        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit::LayerTreeHost::participatesInDisplay):
        (WebKit::LayerTreeHost::needsDisplay):
        (WebKit::LayerTreeHost::timeUntilNextDisplay):
        (WebKit::LayerTreeHost::display):
        Stubbed out these functions. Derived classes can override them to participate in display.

2011-04-04  MORITA Hajime  <morrita@google.com>

        Reviewed by Ryosuke Niwa.

        [Refactoring] SpellCheckingResult should be replaced with TextCheckingResult
        https://bugs.webkit.org/show_bug.cgi?id=56085
        
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::requestCheckingOfString):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::checkTextOfParagraph):

2011-04-05  Alejandro G. Castro  <alex@igalia.com>

        Another compilation fix after r82929 horrible patch merge.

        * UIProcess/WebPageProxy.messages.in:

2011-04-05  Alejandro G. Castro  <alex@igalia.com>

        Fix compilation error after r82929.

        * WebProcess/WebPage/WebPage.h:

2011-04-05  Amruth Raj  <amruthraj@motorola.com>, Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com> and Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement WebPage class for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=54230

        Added functions to handle the generation of commands from the
        keycodes.

        * GNUmakefile.am:
        * Scripts/webkit2/messages.py:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::getEditorCommandsForKeyEvent):
        * UIProcess/gtk/WebView.cpp:
        (WebKit::backspaceCallback):
        (WebKit::selectAllCallback):
        (WebKit::cutClipboardCallback):
        (WebKit::copyClipboardCallback):
        (WebKit::pasteClipboardCallback):
        (WebKit::toggleOverwriteCallback):
        (WebKit::popupMenuCallback):
        (WebKit::showHelpCallback):
        (WebKit::deleteFromCursorCallback):
        (WebKit::moveCursorCallback):
        (WebKit::WebView::WebView):
        (WebKit::WebView::getEditorCommandsForKeyEvent):
        * UIProcess/gtk/WebView.h:
        (WebKit::WebView::addPendingEditorCommand):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp: Added.
        (WebKit::WebEditorClient::getEditorCommandsForKeyEvent):
        (WebKit::WebEditorClient::executePendingEditorCommands):
        (WebKit::WebEditorClient::handleKeyboardEvent):
        (WebKit::WebEditorClient::handleInputMethodKeydown):
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/gtk/WebPageGtk.cpp: Added.
        (WebKit::WebPage::platformInitialize):
        (WebKit::WebPage::platformPreferencesDidChange):
        (WebKit::scroll):
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent):
        (WebKit::WebPage::platformHasLocalDataForURL):
        (WebKit::WebPage::cachedResponseMIMETypeForURL):
        (WebKit::WebPage::platformCanHandleRequest):

2011-04-05  Csaba Osztrogonác  <ossy@webkit.org>

        Remove duplicate API from WKContext
        <rdar://problem/8727879>
        https://bugs.webkit.org/show_bug.cgi?id=57815

        Unreviewed buildfix after r82906.

        Add UNUSED_PARAM to resourceCachesToClear, because
        it is only used within #if USE(CFURLCACHE) guard.

        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::clearCacheForOrigin):

2011-04-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Brian Weinstein.

        Remove duplicate API from WKContext
        <rdar://problem/8727879>
        https://bugs.webkit.org/show_bug.cgi?id=57815

        - Remove WKContextClearResourceCaches and WKContextClearApplicationCache in favor
          of their more modern counterparts WKResourceCacheManagerClearCacheForAllOrigins
          and WKApplicationCacheManagerDeleteAllEntries.

        - Expand clearing functionality of WKResourceCacheManager by adding type of resources
          to clear.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        Remove clearing bools.

        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toResourceCachesToClear):
        Update for new name of enum.

        * UIProcess/API/C/WKContext.cpp:
        * UIProcess/API/C/WKContext.h:
        Remove WKContextClearResourceCaches and WKContextClearApplicationCache.

        * UIProcess/API/C/WKResourceCacheManager.cpp:
        (WKResourceCacheManagerClearCacheForOrigin):
        (WKResourceCacheManagerClearCacheForAllOrigins):
        * UIProcess/API/C/WKResourceCacheManager.h:
        Add WKResourceCachesToClear enum and use it in the clearing functions.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::ensureWebProcess):
        * UIProcess/WebContext.h:
        * WebProcess/WebProcess.messages.in:
        Remove clearing functions and setting of bools for clear on launch.

        * UIProcess/WebFullScreenManagerProxy.cpp:
        Remove unnecessary #include.

        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::clearCacheForOrigin):
        (WebKit::WebResourceCacheManagerProxy::clearCacheForAllOrigins):
        * UIProcess/WebResourceCacheManagerProxy.h:
        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::clearCacheForOrigin):
        (WebKit::WebResourceCacheManager::clearCacheForAllOrigins):
        * WebProcess/ResourceCache/WebResourceCacheManager.h:
        * WebProcess/ResourceCache/WebResourceCacheManager.messages.in:
        Add enum parameter describing what type of caches to clear.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::clearResourceCaches):
        * WebProcess/WebProcess.h:
        No longer need to use opaque type now that it is not a message receiver.

2011-04-04  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/57384> CFNetwork and WebCore load priorities should match

        Reviewed by Alexey Proskuryakov.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Added initialization for
        wkSetHTTPPipeliningMaximumPriority().

2011-04-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Send NPCocoaEventFlagsChanged events
        https://bugs.webkit.org/show_bug.cgi?id=57811
        <rdar://problem/9215600>

        * Shared/WebEvent.h:
        (WebKit::WebEvent::capsLockKey):
        Add CapsLock modifier and getter.

        * Shared/mac/WebEventFactory.mm:
        (WebKit::modifiersForEvent):
        Check for NSAlphaShiftKeyMask and set the CapsLockKey modifier.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::modifierFlags):
        Check for CapsLockKey and set NSAlphaShiftKeyMask.

        (WebKit::isFlagsChangedEvent):
        Return whether a given event is a Cocoa flags changed event.

        (WebKit::initializeKeyboardEvent):
        If this is a flags changed event, set the event type to NPCocoaEventFlagsChanged.

2011-04-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Don't discard the backing stores of WKViews in the key window
        https://bugs.webkit.org/show_bug.cgi?id=57808
        <rdar://problem/9110793>
        <rdar://problem/9194284>
        <rdar://problem/9222216>

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::setBackingStoreIsDiscardable):
        Add empty stub.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl):
        Initialize m_isBackingStoreDiscardable to true.

        (WebKit::DrawingAreaProxyImpl::setBackingStoreIsDiscardable):
        Set m_isBackingStoreDiscardable and schedule or stop the discard backing store timer.

        (WebKit::DrawingAreaProxyImpl::discardBackingStoreSoon):
        Don't start the timer if m_isBackingStoreDiscardable is false.

        * UIProcess/DrawingAreaProxyImpl.h:
        Add m_isBackingStoreDiscardable.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewStateDidChange):
        Mark the backing store as discardable if the view is hidden or if the containing window
        is not active.

2011-04-04  Jade Han  <jade.han@nokia.com>

        Reviewed by Csaba Osztrogonác.

        Symbian build fix.
        https://bugs.webkit.org/show_bug.cgi?id=54977

        * config.h:

2011-04-04  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Adam Roben.

        Add WKIconDatabase* headers to the WebKit2 export for Windows:
        * win/WebKit2Generated.make:

2011-04-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Get rid of WebContext::process() in more places
        https://bugs.webkit.org/show_bug.cgi?id=57787

        Migrate calls to WebContext::process() over to sendToAllProcesses and
        sendToAllProcessesRelaunchingThemIfNecessary.

        Add FIXMEs for things that need to be fixed in order to support multiple web processes.
                
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::cancel):
        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
        (WebKit::WebPluginSiteDataManager::getSitesWithData):
        (WebKit::WebPluginSiteDataManager::clearSiteData):
        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::pendingVisitedLinksTimerFired):
        * UIProcess/WebApplicationCacheManagerProxy.cpp:
        (WebKit::WebApplicationCacheManagerProxy::getApplicationCacheOrigins):
        (WebKit::WebApplicationCacheManagerProxy::deleteEntriesForOrigin):
        (WebKit::WebApplicationCacheManagerProxy::deleteAllEntries):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::getHostnamesWithCookies):
        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::getDatabasesByOrigin):
        (WebKit::WebDatabaseManagerProxy::getDatabaseOrigins):
        (WebKit::WebDatabaseManagerProxy::deleteDatabaseWithNameForOrigin):
        (WebKit::WebDatabaseManagerProxy::deleteDatabasesForOrigin):
        (WebKit::WebDatabaseManagerProxy::deleteAllDatabases):
        (WebKit::WebDatabaseManagerProxy::setQuotaForOrigin):
        * UIProcess/WebGeolocationManagerProxy.cpp:
        (WebKit::WebGeolocationManagerProxy::providerDidChangePosition):
        (WebKit::WebGeolocationManagerProxy::providerDidFailToDeterminePosition):
        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::getLoadDecisionForIconURL):
        (WebKit::WebIconDatabase::didFinishURLImport):
        * UIProcess/WebKeyValueStorageManagerProxy.cpp:
        (WebKit::WebKeyValueStorageManagerProxy::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManagerProxy::deleteEntriesForOrigin):
        (WebKit::WebKeyValueStorageManagerProxy::deleteAllEntries):
        * UIProcess/WebMediaCacheManagerProxy.cpp:
        (WebKit::WebMediaCacheManagerProxy::getHostnamesWithMediaCache):
        (WebKit::WebMediaCacheManagerProxy::clearCacheForHostname):
        (WebKit::WebMediaCacheManagerProxy::clearCacheForAllHostnames):
        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::getCacheOrigins):
        (WebKit::WebResourceCacheManagerProxy::clearCacheForOrigin):
        (WebKit::WebResourceCacheManagerProxy::clearCacheForAllOrigins):

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

        Reviewed by Dan Bernstein.

        REGRESSION (WebKit2): Caps-Lock indicator sometimes doesn't appear in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=51230
        <rdar://problem/8780989>

        <rdar://problem/9015250> REGRESSION (WebKit2): Key events not fired for modifier keys

        * UIProcess/API/mac/WKView.mm:
        (-[WKView flagsChanged:]): Ported from WebHTMLView.
        (-[WKView _interpretKeyEvent:withCachedTextInputState:savingCommandsTo:WebCore::]):
        AppKit isn't happy about attempts to interpret NSFlagsChanged, but WK2 lacked the check.

2011-04-04  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Remove unused AnalyzeWithLargeStack code from Windows build files
        https://bugs.webkit.org/show_bug.cgi?id=57771
        
        This was used for us to build with prefast automatically,
        but it is out-of-date and hasn't been used for some time.
        Removing completely for now.

        * win/WebKitPreBuild.cmd:

2011-04-04  Anders Carlsson  <andersca@apple.com>

        Attempt to fix the Windows build.

        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::setShouldPaintNativeControls):

2011-04-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Make it easier to send a message to all processes in a context
        https://bugs.webkit.org/show_bug.cgi?id=57776

        Add WebContext::sendToAllProcesses and WebContext::sendToAllProcessesRelaunchingThemIfNecessary
        as a first step towards getting rid of WebContext::process() and getting rid of a class of crashers
        where WebContext::process() is null.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::initializeHistoryClient):
        (WebKit::WebContext::languageChanged):
        (WebKit::WebContext::setAlwaysUsesComplexTextCodePath):
        (WebKit::WebContext::registerURLSchemeAsEmptyDocument):
        (WebKit::WebContext::registerURLSchemeAsSecure):
        (WebKit::WebContext::setDomainRelaxationForbiddenForURLScheme):
        (WebKit::WebContext::setCacheModel):
        (WebKit::WebContext::setDefaultRequestTimeoutInterval):
        (WebKit::WebContext::clearResourceCaches):
        (WebKit::WebContext::clearApplicationCache):
        (WebKit::WebContext::setEnhancedAccessibility):
        (WebKit::WebContext::startMemorySampler):
        Use sendToAllProcesses.

        (WebKit::WebContext::stopMemorySampler):
        Use sendToAllProcesses. This is a slight policy change where we now create a sandbox extension even
        if there's no process around. Since this is a debugging tool it seems OK to do this.

        * UIProcess/WebContext.h:
        Get rid of hasValidProcess.

        (WebKit::WebContext::sendToAllProcesses):
        If we have a process and we can send messages to it, then do so.

        (WebKit::WebContext::sendToAllProcessesRelaunchingThemIfNecessary):
        Relaunch the web process and send the message.

        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::deleteCookiesForHostname):
        (WebKit::WebCookieManagerProxy::deleteAllCookies):
        (WebKit::WebCookieManagerProxy::startObservingCookieChanges):
        (WebKit::WebCookieManagerProxy::stopObservingCookieChanges):
        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):
        Use sendToAllProcesses and sendToAllProcessesRelaunchingThemIfNecessary.

2011-04-04  Adam Roben  <aroben@apple.com>

        Move a teensy bit of non-Mac-specific code up to LayerTreeHostCA

        Fixes <http://webkit.org/b/57774> LayerTreeHostCA should know how to flip the root layer

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/ca/LayerTreeHostCA.cpp:
        (WebKit::LayerTreeHostCA::initialize): Cross-platformized and moved some code here...

        * WebProcess/WebPage/ca/mac/LayerTreeHostCAMac.mm:
        (WebKit::LayerTreeHostCAMac::platformInitialize): ...from here.

2011-04-01  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        WK2: Reproducible crash when dragging out of or over Safari window.
        https://bugs.webkit.org/show_bug.cgi?id=57654
        <rdar://problem/9139755>
        
        AppKit does not retain the owner given to the pasteboard, therefore we
        need to give the ownership of the retained pointer to NSPasteboard.
        Also, dragImage will release the NSFilePromiseDragSource object, therefore
        we retain it before calling dragImage to be able to control its lifetime.
        
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::declareAndWriteDragImage): Passing ownership
        of the pointer to AppKit when providing the owner pointer to the NSPasteboard
        object.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformDragEnded): Retaining the NSFilePromiseDragSource
        since dragImage will release it.

2011-03-30  Jer Noble  <jer.noble@apple.com>

        Reviewed by Dan Bernstein.

        WebKit2: No "open in preview" contextual menu item for PDFs
        https://bugs.webkit.org/show_bug.cgi?id=57527

        Add support for opening a PDF in the associated application from the
        context menu.

        * UIProcess/API/mac/PDFViewController.mm:
        (_applicationInfoForMIMEType): Added, copied from WebKit/WebPDFView.mm
        (-[WKPDFView _openWithFinder:]): Added.
        (-[WKPDFView hitTest:]): Added, copied from WebKit/WebPDFView.mm.
        (-[WKPDFView menuForEvent:]): Added, adapted from WebKit/WebPDFVie.mm.
        (-[WKPDFView validateUserInterfaceItem:]): Added.

2011-04-04  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.setAllowFileAccessFromFileURLs
        https://bugs.webkit.org/show_bug.cgi?id=57572

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::decode):
        (WebKit::WebPreferencesStore::overrideAllowFileAccessFromFileURLsForTestRunner):
        * Shared/WebPreferencesStore.h:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetAllowFileAccessFromFileURLs):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setAllowFileAccessFromFileURLs):
        * WebProcess/InjectedBundle/InjectedBundle.h:

2011-04-04  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=57683
        Flesh out WK2 Icon Database API

        For now the new API will add a client interface where the WK1 version used NSNotifications.

        If we decide we'd like the granularity of specific callback functions later, 
        they can easily be added on.

        Project file nonsense:
        * GNUmakefile.am:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

        Add a WKIconDatabaseClient and some new API:
        * UIProcess/API/C/WKIconDatabase.cpp:
        (WKIconDatabaseSetIconDatabaseClient):
        (WKIconDatabaseRemoveAllIcons):
        (WKIconDatabaseCheckIntegrityBeforeOpening):
        * UIProcess/API/C/WKIconDatabase.h:
        * UIProcess/API/C/cg/WKIconDatabaseCG.cpp:
        (WKIconDatabaseTryGetCGImageForURL): Renamed to "try" for subtle clarification.
        * UIProcess/API/C/cg/WKIconDatabaseCG.h:

        Implementations for the new APIs:
        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::retainIconForPageURL): Remove excessive logging.
        (WebKit::WebIconDatabase::releaseIconForPageURL): Ditto.
        (WebKit::WebIconDatabase::imageForPageURL):
        (WebKit::WebIconDatabase::removeAllIcons):
        (WebKit::WebIconDatabase::checkIntegrityBeforeOpening):
        (WebKit::WebIconDatabase::initializeIconDatabaseClient):
        (WebKit::WebIconDatabase::didImportIconURLForPageURL): Dispatch a client callback,
          much like the WK1 API uses notifications.
        (WebKit::WebIconDatabase::didImportIconDataForPageURL): Ditto.
        (WebKit::WebIconDatabase::didChangeIconForPageURL): Ditto.
        (WebKit::WebIconDatabase::didRemoveAllIcons): Ditto.
        * UIProcess/WebIconDatabase.h:
        * UIProcess/WebIconDatabaseClient.cpp: Added.
        (WebKit::WebIconDatabaseClient::didChangeIconForPageURL):
        (WebKit::WebIconDatabaseClient::didRemoveAllIcons):
        * UIProcess/WebIconDatabaseClient.h: Added.

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

        Reviewed by Martin Robinson.

        [GTK] Main loop sources are leaked in RunLoopGtk
        https://bugs.webkit.org/show_bug.cgi?id=57618

        * Platform/RunLoop.h:
        (RunLoop::TimerBase::isRepeating):
        * Platform/gtk/RunLoopGtk.cpp:
        (RunLoop::~RunLoop): Make sure main loop is currently running
        before calling g_main_loop_quit(), RunLoop::stop() might have been
        called.
        (RunLoop::wakeUp): Use an idle source with default priority
        instead of a timeout one with a 0 interval.
        (RunLoop::TimerBase::clearTimerSource): New method to clear the
        timer.
        (RunLoop::TimerBase::destroyNotifyCallback): Destroy notify
        callback called when the source is destroyed to clear the timer.
        (RunLoop::TimerBase::timerFiredCallback): Use the same callback for
        repeating and no repeating timers.
        (RunLoop::TimerBase::start): g_source_attach() increments the
        source reference counter, so use GRefPtr to make sure the source
        is freed.
        (RunLoop::TimerBase::stop): Use clearTimerSource().

2011-04-03  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * Shared/DictionaryPopupInfo.cpp:
        (WebKit::DictionaryPopupInfo::encode):
        (WebKit::DictionaryPopupInfo::decode):
        * Shared/DictionaryPopupInfo.h:

2011-04-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9227839> REGRESSION: Reproducible crash in Snow Leopard when trying to show the Dictionary panel or application
        https://bugs.webkit.org/show_bug.cgi?id=57739

        * Shared/DictionaryPopupInfo.cpp:
        (WebKit::DictionaryPopupInfo::encode): Do not encode the options dictionary on Snow Leopard.
        (WebKit::DictionaryPopupInfo::decode): Do not decode the options dictionary on Snow Leopard.
        * Shared/DictionaryPopupInfo.h: Removed the options member variable on Snow Leopard.
        * Shared/Plugins/PluginQuirks.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupForRange): Do not set the options member variable on
        Snow Leopard.

2011-04-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        https://bugs.webkit.org/show_bug.cgi?id=57605
        Frame::pageScaleFactor() should not affect getBoundingClientRect() or 
        getClientRects()
        -and corresponding-
        <rdar://problem/9194541>

        Add DRT support for the scaleWebView SPI.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetScaleAtOrigin):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:

2011-04-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        "Search in Spotlight" broken in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=57712

        Proxy spotlight searching to the UIProcess.

        * UIProcess/WebPageProxy.messages.in:
        Add new message. Re-organize messages to put all mac specific ones together.

        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::speak):
        (WebKit::WebPageProxy::searchWithSpotlight):
        Moved code to trigger spotlight here. Use WTF::String -> NSString conversion function
        instead of relying on the built in conversion since it doesn't always work in the UIProcess.

        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        (WebKit::WebContextMenuClient::searchWithSpotlight):
        Post message to the UIProcess to do the searching.

2011-04-02  Jeff Miller  <jeffm@apple.com>

        Reviewed by Dan Bernstein.

        WebKit2: Specify the certificate store in WKBundleSetClientCertificate()
        https://bugs.webkit.org/show_bug.cgi?id=57707

        Include the name of the system certificate store that the client certificate came from in WKBundleSetClientCertificate().

        The PCCERT_CONTEXT for the client certificate we create from the message from the UI process doesn't contain enough information to actually use it in a request, we need to get the real certificate from the certificate store (which is typically the "MY" store).

        * WebProcess/InjectedBundle/API/c/win/WKBundlePrivateWin.cpp:
        (WKBundleSetClientCertificate): Add certificateSystemStoreName to parameters.
        * WebProcess/InjectedBundle/API/c/win/WKBundlePrivateWin.h: Add certificateSystemStoreName to WKBundleSetClientCertificate() parameters.
        * WebProcess/InjectedBundle/InjectedBundle.h: Add certificateSystemStoreName to setClientCertificate() parameters.
        * WebProcess/InjectedBundle/win/InjectedBundleWin.cpp:
        (WebKit::InjectedBundle::setClientCertificate): Read the real certificate from the certificate store.

2011-04-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Implement WKBundleFrameHasHorizontalScrollbar/WKBundleFrameHasVerticalScrollbar
        <rdar://problem/9225772>
        https://bugs.webkit.org/show_bug.cgi?id=57709

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameHasHorizontalScrollbar):
        (WKBundleFrameHasVerticalScrollbar):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::hasHorizontalScrollbar):
        (WebKit::WebFrame::hasVerticalScrollbar):
        * WebProcess/WebPage/WebFrame.h:

2011-04-01  Jon Lee  <jonlee@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Type-to-select doesn't work in open <select> menu (53023)
        https://bugs.webkit.org/show_bug.cgi?id=53023
        <rdar://problem/8907678>

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in: adding new setPopupMenuSelectedIndex message for windows platform
        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::WebPageProxy::setPopupMenuSelectedIndex):
        * UIProcess/win/WebPopupMenuProxyWin.h: moving setFocusedIndex() into public method
        * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
        (WebKit::WebPopupMenu::updateFromElement): send message back to UIProcess to update the selected element

2011-04-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        REGRESSION: Assertion failure when executing a complex custom key binding
        https://bugs.webkit.org/show_bug.cgi?id=57681

        Also completes a fix for
        <rdar://problem/9063782> WebKit2: Text fields in Safari don't honor custom key bindings

        * UIProcess/API/mac/WKView.mm: (-[WKView hasMarkedText]): There is no need to execute saved
        commands when they can't possibly change the result.

2011-04-01  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Anders Carlsson.

        Crash when calling WebPageProxy::setMemoryCacheClientCallsEnabled with an invalid Web Process
        https://bugs.webkit.org/show_bug.cgi?id=57680
        <rdar://problem/9202909>

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setMemoryCacheClientCallsEnabled): Add an isValid check before sending
            the message.

2011-03-31  Jer Noble  <jer.noble@apple.com>

        Reviewed by Dan Bernstein.

        WebKit2: Save as PDF in Safari provides Untitled as default file name
        https://bugs.webkit.org/show_bug.cgi?id=57529

        Set the NSPrintOperation's jobTitle to the printing frame's title.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView printOperationWithPrintInfo:forFrame:]):

2011-04-01  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Link from PDF opens in a new tab instead of in the same tab
        https://bugs.webkit.org/show_bug.cgi?id=57528

        Notify the WebProcess that a link has been clicked so that the normal policy
        lookup can occur.

        * Shared/WebEvent.cpp:
        (WebKit::WebEvent::WebEvent): Initialize ivars in the default constructor.
        * Shared/WebEvent.h: Add WebEvent::NoType to Type enum.
        * Shared/WebMouseEvent.cpp: 
        (WebKit::WebMouseEvent::WebMouseEvent): Ditto.
        * UIProcess/API/mac/PDFViewController.mm:
        (-[WKPDFView PDFViewWillClickOnLink:withURL:]): Handle the delegate
            function and override the PDFView default behavior.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveEvent): Handle the new WebEvent::NoType enum.
        (WebKit::WebPageProxy::linkClicked): Added.  Send event through to WebPage.
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::linkClicked): Added.  Call loadFrameRequest().
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Added LinkClicked.

2011-04-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam "Keyword Slasher" Roben.

        Remove unnecessary static keyword.

        * UIProcess/API/cpp/WKRetainPtr.h:
        (WebKit::adoptWK):

2011-04-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Add adoptWK to WKRetainPtr.h
        https://bugs.webkit.org/show_bug.cgi?id=57670

        * UIProcess/API/cpp/WKRetainPtr.h:
        (WebKit::adoptWK):
        Add shared implementation of adoptWK. Previously both WebKitTestRunner
        and TestWebKitAPI had separate versions of it.

2011-04-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Shockwave plug-in doesn't accept mouse events
        https://bugs.webkit.org/show_bug.cgi?id=57653
        <rdar://problem/8483273>

        Add a missing break.

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

2011-04-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKitTestRunner needs layoutTestController.shadowRoot
        https://bugs.webkit.org/show_bug.cgi?id=57661

        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleGetRenderRect):
        (WKBundleNodeHandleGetElementBounds):
        (WKBundleNodeHandleCopyElementShadowRoot):
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::elementShadowRoot):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:
        Add accessor for the shadowRoot of an element in the bundle.

2011-04-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        Make WebKit2 text input handling more like WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=57649

        We now send more sync messages from UI process to Web process for NSTextInput protocol
        methods. Some of the exchanges are avoided by pre-calculating the responses before asking
        UI process to interpret key events, and also with each sync message sent during
        interpretation, and which could change the state.

        * Platform/CoreIPC/HandleMessage.h: (CoreIPC::callMemberFunction): Added a missing
        specialization for a function with 6 arguments and 2 returned values.

        * Scripts/webkit2/messages.py: Added TextInputState to struct list.

        * Shared/WebCoreArgumentCoders.h: Fixed a bug in CompositionUnderline encoding, which only
        encoded a part of Color field, and didn't match decoder.

        * Shared/mac/TextInputState.h: Added. This is state that's needed for IM machinery and that
        we don't want to send sync messages for. This is similar to SelectionState, but the latter
        is only updated asynchronously, and is thus less reliable.

        * UIProcess/API/mac/PageClientImpl.h: We don't "intercept", we "interpret".

        * UIProcess/API/mac/PageClientImpl.mm: (WebKit::PageClientImpl::interpretKeyEvent): Pass
        current text input state, and don't expect anything input method related in return, as input
        methods are now sync.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView doCommandBySelector:]):
        (-[WKView insertText:]):
        (-[WKView keyDown:]):
        (-[WKView _executeSavedKeypressCommands]):
        (-[WKView inputContext]):
        (-[WKView selectedRange]):
        (-[WKView hasMarkedText]):
        (-[WKView unmarkText]):
        (-[WKView setMarkedText:selectedRange:]):
        (-[WKView markedRange]):
        (-[WKView attributedSubstringFromRange:]):
        (-[WKView characterIndexForPoint:]):
        (-[WKView firstRectForCharacterRange:]):
        (-[WKView _interpretKeyEvent:withCachedTextInputState:savingCommandsTo:WebCore::]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setComposition):
        (WebKit::WebPageProxy::confirmComposition):
        (WebKit::WebPageProxy::insertText):
        (WebKit::WebPageProxy::getSelectedRange):
        (WebKit::WebPageProxy::executeKeypressCommands):
        (WebKit::WebPageProxy::interpretQueuedKeyEvent):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::handleKeyboardEvent):
        (WebKit::WebEditorClient::handleInputMethodKeydown):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::viewFrameInWindowCoordinates):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::createSelectorExceptionMap):
        (WebKit::commandNameForSelectorName):
        (WebKit::currentTextInputState):
        (WebKit::frameForEvent):
        (WebKit::WebPage::executeKeypressCommandsInternal):
        (WebKit::WebPage::handleEditingKeyboardEvent):
        (WebKit::WebPage::setComposition):
        (WebKit::WebPage::confirmComposition):
        (WebKit::WebPage::insertText):
        (WebKit::WebPage::getSelectedRange):
        (WebKit::convertToRange):
        (WebKit::WebPage::executeKeypressCommands):
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent):
        Rewrote to be more like WebKit1.

2011-04-01  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.setDatabaseQuota
        https://bugs.webkit.org/show_bug.cgi?id=57568

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetDatabaseQuota):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setDatabaseQuota):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:

2011-04-01  Timothy Hatcher  <timothy@apple.com>

        Make momentum scroll event latching work in WebKit2 on Mac.

        <rdar://problem/8751861>

        Reviewed by Darin Adler.

        * Shared/mac/WebEventFactory.mm:
        (WebKit::momentumPhaseForEvent): Return a phase on older Mac system by using WKGetNSEventMomentumPhase.
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Remove IsLatchingWheelEvent, add GetNSEventMomentumPhase.

2011-04-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        Assertion failure (type == event.type()) after a web process crash
        https://bugs.webkit.org/show_bug.cgi?id=56228
        <rdar://problem/8806106>

        This partially un-confuses the UI process about key processing state after a web process
        crash. It may not be pefect yet - sending a KeyUp to a new process that never saw a KeyDown
        seems weird.

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

2011-04-01  Adam Roben  <aroben@apple.com>

        Cairo build fix

        * WebProcess/WebPage/LayerTreeHost.cpp: Only pull in the LayerTreeHostCA derived classes for
        PLATFORM(CA) ports.

2011-03-31  Adam Roben  <aroben@apple.com>

        Split LayerTreeHostCA into a base class and derived Mac and Win classes

        This will make it easier to customize the Mac and Windows implementations without adding too
        many #ifdefs.

        Fixes <http://webkit.org/b/57606> Windows and Mac should use separate LayerTreeHost classes

        Reviewed by Anders Carlsson.

        * WebKit2.xcodeproj/project.pbxproj: Added LayerTreeHostCAMac.h.

        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create): Create a LayerTreeHostCAMac on Mac, and LayerTreeHostCAWin
        on Windows.

        * WebProcess/WebPage/ca/LayerTreeHostCA.cpp:
        (WebKit::LayerTreeHostCA::LayerTreeHostCA): Moved some code from here...
        (WebKit::LayerTreeHostCA::initialize): ...to here. This function will be called after the
        constructor returns, and thus can safely call functions that are pure virtual in this class
        and its base class. We now pass our LayerTreeContext to platformInitialize so that our
        derived classes can initialize it.
        (WebKit::LayerTreeHostCA::~LayerTreeHostCA): Removed Mac-specific code.

        (WebKit::LayerTreeHostCA::invalidate):
        (WebKit::LayerTreeHostCA::sizeDidChange):
        (WebKit::LayerTreeHostCA::forceRepaint):
        (WebKit::LayerTreeHostCA::didPerformScheduledLayerFlush):
        Removed platform* calls. Derived classes can just override these functions to do what they
        need.

        * WebProcess/WebPage/ca/LayerTreeHostCA.h: Removed Mac-specific pieces. Made some functions
        virtual so that derived classes can override them.

        * WebProcess/WebPage/ca/mac/LayerTreeHostCAMac.h: Added.

        * WebProcess/WebPage/ca/mac/LayerTreeHostCAMac.mm:
        (WebKit::LayerTreeHostCAMac::create): Create and initialize a host.
        (WebKit::LayerTreeHostCAMac::LayerTreeHostCAMac): Simple constructor.
        (WebKit::LayerTreeHostCAMac::~LayerTreeHostCAMac): Moved code here from LayerTreeHostCA
        destructor.
        (WebKit::LayerTreeHostCAMac::platformInitialize): Removed direct uses of LayerTreeHostCA
        data members.

        (WebKit::LayerTreeHostCAMac::invalidate):
        (WebKit::LayerTreeHostCAMac::sizeDidChange):
        (WebKit::LayerTreeHostCAMac::forceRepaint):
        (WebKit::LayerTreeHostCAMac::didPerformScheduledLayerFlush):
        Renamed from platform*. Now call up to the base class.

        (WebKit::LayerTreeHostCAMac::flushPendingLayerChangesRunLoopObserverCallback): Updated type.

        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.cpp:
        (WebKit::LayerTreeHostCAWin::create): Create and initialize a host.

        (WebKit::LayerTreeHostCAWin::LayerTreeHostCAWin):
        (WebKit::LayerTreeHostCAWin::~LayerTreeHostCAWin):
        (WebKit::LayerTreeHostCAWin::platformInitialize):
        (WebKit::LayerTreeHostCAWin::scheduleLayerFlush):
        Stubbed out.

        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.h: Added.

        * win/WebKit2.vcproj: Added LayerTreeHostCAWin.h

        * win/WebKit2Apple.vsprops: Added WebProcess/WebPage/ca/win to the include path.

2011-03-31  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed WinCairo build fix after r82632.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::visibilityDidChange):

2011-03-31  Adam Roben  <aroben@apple.com>

        Add SharedMemory::adopt, which can take ownership of an existing file mapping object

        Fixes <http://webkit.org/b/57599> Need a way to wrap an existing file mapping object in a
        SharedMemory

        Reviewed by Anders Carlsson.

        * Platform/SharedMemory.h: Added adopt.

        * Platform/win/SharedMemoryWin.cpp:
        (WebKit::SharedMemory::create): Moved code to adopt the HANDLE from here...
        (WebKit::SharedMemory::adopt): ...to here.

2011-03-31  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.clearAllDatabases
        https://bugs.webkit.org/show_bug.cgi?id=42540

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleClearAllDatabases):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::clearAllDatabases):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:

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

        Reviewed by Sam Weinig.

        Add some more media related things to the sandbox profile.

        * WebProcess/com.apple.WebProcess.sb:

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

        Reviewed by Dan Bernstein.

        Tabbed pages redraw unnecessarily when activated
        https://bugs.webkit.org/show_bug.cgi?id=57589
        <rdar://problem/9218258>

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::visibilityDidChange):
        If we become visible and have no backing store, make sure to call backingStoreStateDidChange
        so that the next time we're asked to paint we'll wait for something to paint.

        (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode):
        Remove now redundant call to backingStoreStateDidChange.

2011-03-31  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Sandbox violations when playing back HTML5 video on YouTube
        <rdar://problem/8950692>

        * WebProcess/com.apple.WebProcess.sb:

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

        Reviewed by Sam Weinig.

        Implement mouseDown, mouseUp, and mouseMoveTo in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=57573

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSimulateMouseDown): Added.
        (WKBundlePageSimulateMouseUp): Added.
        (WKBundlePageSimulateMouseMotion): Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h: Added above functions.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::simulateMouseDown): Added.
        (WebKit::WebPage::simulateMouseUp): Added.
        (WebKit::WebPage::simulateMouseMotion): Added.
        * WebProcess/WebPage/WebPage.h: Added above functions.

2011-03-31  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Rename WebCore's UI_STRING to WEB_UI_STRING to not overlap with WebKit API
        https://bugs.webkit.org/show_bug.cgi?id=57582

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitialize):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformInspectedURLChanged):
        * WebProcess/WebCoreSupport/mac/WebErrorsMac.mm:
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2011-03-31  Adam Roben  <aroben@apple.com>

        Specify both FILE_MAP_READ and FILE_MAP_WRITE when creating a read-write SharedMemory object

        When passed to ::MapViewOfFile, FILE_MAP_WRITE implies FILE_MAP_READ, but other file mapping
        APIs don't work that way. This bug wasn't causing any problems in practice, but it would
        have prevented us from creating a DIB that wraps a SharedMemory object (which I noticed
        while working on another bug).

        Fixes <http://webkit.org/b/57576> File mappings used by read-write SharedMemory objects
        aren't correctly marked as read-write after being sent over a CoreIPC::Connection

        Reviewed by Brian Weinstein.

        * Platform/win/SharedMemoryWin.cpp:
        (WebKit::accessRights): Specify FILE_MAP_READ in addition to FILE_MAP_WRITE for read-write
        SharedMemory.

2011-03-31  Adam Roben  <aroben@apple.com>

        Quote the executable path we pass to ::CreateProcessW

        This will ensure that spaces in the path will be interpreted correctly.

        Fixes <http://webkit.org/b/57569> Web process sometimes fails to launch when there are
        spaces in its path

        Reviewed by Steve Falkenburg.

        * UIProcess/Launcher/win/ProcessLauncherWin.cpp:
        (WebKit::ProcessLauncher::launchProcess): Surround the executable path in quotes.

2011-03-31  Alexey Proskuryakov  <ap@apple.com>

        Patch by John Harvey, reviewed and tweaked by me.

        <rdar://problem/8644403> Should notify TSM that plug-ins would show a bottom input window for marked text.

        * UIProcess/API/mac/WKTextInputWindowController.mm:
        (-[WKTextInputPanel _interpretKeyEvent:string:]):

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

        Reviewed by John Sullivan, Darin Adler, Dan Bernstein and Sam Weinig.

        If a user doesn't have a Database/LocalStorage directory, it can't be created (sandbox violations)
        https://bugs.webkit.org/show_bug.cgi?id=57561
        <rdar://problem/9127411>

        Ensure that any readwrite sandbox directories actually exist before entering the sandbox.

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::appendReadwriteSandboxDirectory):

2011-03-31  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler and Adam Roben.

        <rdar://problem/9214824> Find client not told when WKPageCountStringMatches exceeds maximum
        https://bugs.webkit.org/show_bug.cgi?id=57552

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::countStringMatches):
        Use the same technique as findString() to report kWKMoreThanMaximumMatchCount when appropriate.
        (WebKit::FindController::findString):
        Convert numeric_limits::max() to max() - 1 to avoid overflow case.

2011-03-31  Evan Martin  <evan@chromium.org>

        Reviewed by Eric Seidel.

        <title> should support dir attribute
        https://bugs.webkit.org/show_bug.cgi?id=50961

        Update to new FrameLoaderClient interface.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveTitle):
        (WebKit::WebFrameLoaderClient::setTitle):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

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

        Reviewed by Csaba Osztrogonác.

        [WK2] Introduce an option for no NPAPI support
        https://bugs.webkit.org/show_bug.cgi?id=55828

        Stub out NPAPI support for platform and OS combinations that are
        not supported yet. Ancestor patch was made by Laszlo Gombos.

        * GNUmakefile.am: Add NetscapePluginModuleNone.cpp and NetscapePluginNone.cpp
        to the build system.

        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        Remove the sanity check because from now all combinations that
        don't have an explicitly set plugin architecture fall into
        the PLUGIN_ARCHITECTURE(UNSUPPORTED) category and has a stubbed
        implementation.

        * Shared/Plugins/Netscape/NetscapePluginModuleNone.cpp: Added.
        Stubbed implementation.
        (WebKit::NetscapePluginModule::getPluginInfo):
        (WebKit::NetscapePluginModule::determineQuirks):

        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp: Guard with
        PLUGIN_ARCHITECTURE(X11).

        * WebKit2.pro: Add NetscapePluginModuleNone.cpp and NetscapePluginNone.cpp
        to the build system.

        * WebProcess/Plugins/Netscape/NetscapePluginNone.cpp: Added.
        Stubbed implementation
        (WebKit::NetscapePlugin::platformPostInitialize):
        (WebKit::NetscapePlugin::platformDestroy):
        (WebKit::NetscapePlugin::platformInvalidate):
        (WebKit::NetscapePlugin::platformGeometryDidChange):
        (WebKit::NetscapePlugin::platformPaint):
        (WebKit::NetscapePlugin::platformHandleMouseEvent):
        (WebKit::NetscapePlugin::platformHandleWheelEvent):
        (WebKit::NetscapePlugin::platformSetFocus):
        (WebKit::NetscapePlugin::platformHandleMouseEnterEvent):
        (WebKit::NetscapePlugin::platformHandleMouseLeaveEvent):
        (WebKit::NetscapePlugin::platformHandleKeyboardEvent):

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp: Guard with
        PLUGIN_ARCHITECTURE(X11)

        * config.h: Introduce PLUGIN_ARCHITECTURE(UNSUPPORTED) as another
        option. Make platform and OS combinations that are not supported
        yet fall into this. Don't use Q_WS_X11 to test the window system
        for Qt because it is not defined without including <QtGlobal>.
        No clue about how could it work so far.

2011-03-31  Vamshikrishna.Yellenki  <vamshi@motorola.com> and Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        Implement MiniBrowser for Gtk port.
        https://bugs.webkit.org/show_bug.cgi?id=48512

        * Shared/API/c/gtk/WKBaseGtk.h: Add the stdbool.h include.

2011-03-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9005982> Flash of white when a WKView with composited content moves on-screen
        https://bugs.webkit.org/show_bug.cgi?id=57522

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode): Invalidate the current
        backing store state, so that we get an update as soon as the page enters compositing mode
        next.
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::sendDidUpdateBackingStoreState): Added a call to
        LayerTreeHost::forceRepaint() in order to flush and synchronize the layers
        before sending the update message to the UI process.

2011-03-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Sandbox violations if you navigate a file URL via something other than a click
        <rdar://problem/9016086>
        https://bugs.webkit.org/show_bug.cgi?id=57519

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::shouldReuseCommittedSandboxExtension):
        Remove unnecessary restriction on extension reuse. Any type of file to file navigation
        should be allowed.

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

        Reviewed by Sam Weinig.

        Clean up the sandbox parameter code
        https://bugs.webkit.org/show_bug.cgi?id=57518

        * Shared/WebProcessCreationParameters.h:
        Make nsURLCachePath and uiProcessBundleResourcePath Strings to match the other paths we send over.

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        nsURLCachePath and uiProcessBundleResourcePath are now Strings.

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::appendSandboxParameterPathInternal):
        (WebKit::appendReadwriteConfDirectory):
        (WebKit::appendReadonlySandboxDirectory):
        (WebKit::appendReadwriteSandboxDirectory):
        (WebKit::initializeSandbox):
        Make it more clear whether the directories we're adding are readonly or readwrite. No functionality change.
        
        (WebKit::WebProcess::platformInitializeWebProcess):
        nsURLCachePath is now a string.

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

        Reviewed by Sam Weinig.

        Downloading a file fails due to a sandbox violation if the destination path is a symlink
        https://bugs.webkit.org/show_bug.cgi?id=57517
        <rdar://problem/8943865>

        Make sure to resolve any symlinks in the given path when creating a sandbox extension handle.
        Note that we can't use realpath or -[NSString stringByResolvingSymlinksInPath], because those calls
        will fail if the pointed to file doesn't exist.

        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::resolveSymlinksInPath):
        New function that resolves all the symlinks in the given path.

        (WebKit::SandboxExtension::createHandle):
        Call resolveSymlinksInPath on the resulting path.

2011-03-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Share most vsprops between Release and Production builds in releaseproduction.vsprops
        https://bugs.webkit.org/show_bug.cgi?id=57508

        * win/WebKit2Production.vsprops:
        * win/WebKit2Release.vsprops:
        * win/WebKit2ReleaseCairoCFLite.vsprops:
        * win/WebKit2WebProcessProduction.vsprops:
        * win/WebKit2WebProcessRelease.vsprops:
        * win/WebKit2WebProcessReleaseCairoCFLite.vsprops:

2011-03-30  Ivan Krstić  <ike@apple.com>

        Reviewed by Oliver Hunt.

        Ensure consistent, readable working directory for WebProcess before entering sandbox
        <rdar://problem/8951176>

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2011-03-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        WebKit2: Attempting to view css file from url causes it to download
        <rdar://problem/9102611>
        https://bugs.webkit.org/show_bug.cgi?id=57501

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::canShowMIMEType):
        Match WebKit1 by allowing any MIME type that starts with "text/"
        except the ones we explicitly blacklist.

2011-03-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Update Windows production build logic for new production configurations
        https://bugs.webkit.org/show_bug.cgi?id=57494

        * win/WebKit2.make:
        * win/WebKit2Production.vsprops:
        * win/WebKit2WebProcessProduction.vsprops:

2011-03-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Rename Windows configuration Release_LTCG to Production for clarity
        https://bugs.webkit.org/show_bug.cgi?id=57465

        * win/WebKit2.submit.sln:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.vcproj:
        * win/WebKit2Production.vsprops: Copied from Source/WebKit2/win/WebKit2ReleaseLTCG.vsprops.
        * win/WebKit2ReleaseLTCG.vsprops: Removed.
        * win/WebKit2WebProcess.vcproj:
        * win/WebKit2WebProcessProduction.vsprops: Copied from Source/WebKit2/win/WebKit2WebProcessReleaseLTCG.vsprops.
        * win/WebKit2WebProcessReleaseLTCG.vsprops: Removed.

2011-03-30  Jer Noble  <jer.noble@apple.com>

        Reviewed by Dan Bernstein.

        WebKit2: WebProcess is using 89%, while viewing a PDF
        https://bugs.webkit.org/show_bug.cgi?id=57471

        Break a never ending display/update cycle between the UIProcess and the WebProcess
        by clearing the dirty region when a page has a custom representation (like a PDF).
        Also, avoid the issue where possible by not setting the dirty region in the same case.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::setNeedsDisplay): Bail early if mainFrameHasCustomRepresentation().
        (WebKit::DrawingAreaImpl::scroll): Ditto.
        (WebKit::DrawingAreaImpl::display): Both bail early and clear m_dirtyRegion if 
            mainFrameHasCustomRepresentation().

2011-03-30  Sam Weinig  <sam@webkit.org>

        Fix Snow Leopard build.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenu):

2011-03-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2 contextual menu looks different than the rest of the OS
        <rdar://problem/9172935>
        https://bugs.webkit.org/show_bug.cgi?id=57475

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenu):
        Use correct SPI for showing a context menu. The dummy view is also
        not necessary, so remove it.

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

        Reviewed by Sam Weinig.

        Crash when NPN_Evaluate removes the plug-in frame
        https://bugs.webkit.org/show_bug.cgi?id=57474
        <rdar://problem/9191396>

        Get a reference to the frame since it can be nulled out if running the JavaScript code
        causes the plug-in's containing frame to be removed from the frame tree.

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

2011-03-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add default localization strategy that can be shared by WebKit1 and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=57406

        * Shared/WebLocalizableStrings.h: Removed.
        Removed in favor of using WebCore/LocalizedStrings.h directly.

        * PluginProcess/mac/PluginProcessMac.mm:
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        * WebProcess/WebCoreSupport/mac/WebErrorsMac.mm:
        * WebProcess/mac/WebProcessMac.mm:
        Use WebCore/LocalizedStrings.h directly.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        Remove localization strategy override in favor of using new default implementation.

        * GNUmakefile.am:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Remove WebLocalizableStrings.h

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

        Reviewed by Adam Roben.

        Assertion failure in plug-in process when calling WKPluginSiteDataManagerGetSitesWithData
        https://bugs.webkit.org/show_bug.cgi?id=57468
        <rdar://problem/9199089>

        Call decrementLoadCount from removeWebProcessConnection instead of startShutdownTimerIfNecessary,
        otherwise we'll get a load count underflow when a connection is never created.

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::removeWebProcessConnection):
        (WebKit::PluginProcess::createWebProcessConnection):
        (WebKit::PluginProcess::startShutdownTimerIfNecessary):

2011-03-30  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Anders Carlsson.

        WebKit2: Make sure to try to terminate the Web Process when any work that might require the
        Web Process to be relaunched is done
        https://bugs.webkit.org/show_bug.cgi?id=57462

        For the ManagerProxies in the UIProcess, only return true from shouldTerminate if there are
        no more callbacks waiting to be invoked.

        For the the Managers in the WebProcess, call WebProcess::shared().terminateIfPossible() when
        any work called for by a ManagerProxy function that called relaunchProcessIfNecessary is
        finished.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::shouldTerminate):
        Check with each of the ManagerProxies.

        * UIProcess/WebApplicationCacheManagerProxy.cpp:
        (WebKit::WebApplicationCacheManagerProxy::shouldTerminate):
        * UIProcess/WebApplicationCacheManagerProxy.h:
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::shouldTerminate):
        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::shouldTerminate):
        * UIProcess/WebDatabaseManagerProxy.h:
        * UIProcess/WebKeyValueStorageManagerProxy.cpp:
        (WebKit::WebKeyValueStorageManagerProxy::shouldTerminate):
        * UIProcess/WebKeyValueStorageManagerProxy.h:
        * UIProcess/WebMediaCacheManagerProxy.cpp:
        (WebKit::WebMediaCacheManagerProxy::shouldTerminate):
        * UIProcess/WebMediaCacheManagerProxy.h:
        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::shouldTerminate):
        * UIProcess/WebResourceCacheManagerProxy.h:

        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp:
        (WebKit::WebApplicationCacheManager::getApplicationCacheOrigins):
        (WebKit::WebApplicationCacheManager::deleteEntriesForOrigin):
        (WebKit::WebApplicationCacheManager::deleteAllEntries):
        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::getHostnamesWithCookies):
        (WebKit::WebCookieManager::deleteCookiesForHostname):
        (WebKit::WebCookieManager::deleteAllCookies):
        (WebKit::WebCookieManager::startObservingCookieChanges):
        (WebKit::WebCookieManager::setHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManager::getHTTPCookieAcceptPolicy):
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.cpp:
        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManager::deleteEntriesForOrigin):
        (WebKit::WebKeyValueStorageManager::deleteAllEntries):
        * WebProcess/MediaCache/WebMediaCacheManager.cpp:
        (WebKit::WebMediaCacheManager::getHostnamesWithMediaCache):
        (WebKit::WebMediaCacheManager::clearCacheForHostname):
        (WebKit::WebMediaCacheManager::clearCacheForAllHostnames):
        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::getCacheOrigins):
        (WebKit::WebResourceCacheManager::clearCacheForOrigin):
        (WebKit::WebResourceCacheManager::clearCacheForAllOrigins):
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        (WebKit::WebDatabaseManager::getDatabasesByOrigin):
        (WebKit::WebDatabaseManager::getDatabaseOrigins):
        (WebKit::WebDatabaseManager::deleteDatabaseWithNameForOrigin):
        (WebKit::WebDatabaseManager::deleteDatabasesForOrigin):
        (WebKit::WebDatabaseManager::deleteAllDatabases):
        (WebKit::WebDatabaseManager::setQuotaForOrigin):

2011-03-30  Adam Roben  <aroben@apple.com>

        Mac build fix after r82442

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::geometryDidChange): Added a missing argument.

2011-03-29  Adam Roben  <aroben@apple.com>

        Add a way to specify that a ShareableBitmap has no alpha channel

        Before this patch, all ShareableBitmaps had an alpha channel. With this patch, all
        ShareableBitmaps *still* have an alpha channel. But now there's a way to specify you don't
        want one (which will be used in the future)!

        Fixes <http://webkit.org/b/57388> Need a way to specify that a ShareableBitmap has no alpha
        channel

        Reviewed by Anders Carlsson.

        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::Handle::Handle): Moved here from the header file, and added
        initialization of m_flags.

        (WebKit::ShareableBitmap::Handle::encode):
        (WebKit::ShareableBitmap::Handle::decode):
        Encode/decode m_flags.

        (WebKit::ShareableBitmap::create):
        (WebKit::ShareableBitmap::createShareable):
        Pass along the new Flags argument.

        (WebKit::ShareableBitmap::createHandle): Store our Flags on the Handle.
        (WebKit::ShareableBitmap::ShareableBitmap): Store the Flags in m_flags.

        * Shared/ShareableBitmap.h: Added Flag, Flags, and m_flags, and added a Flags argument to
        some create functions.

        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::encodeImage):
        * Shared/WebImage.cpp:
        (WebKit::WebImage::create):
        Specify that we want a bitmap that supports alpha to maintain current behavior.

        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::bitmapInfo): New helper function. Includes an alpha channel only if specified in
        the flags.

        (WebKit::ShareableBitmap::createGraphicsContext):
        (WebKit::ShareableBitmap::makeCGImage):
        Use the new helper function.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::snapshot):
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::geometryDidChange):
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::convertImageToBitmap):
        * WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp:
        (WebKit::WebPopupMenu::setUpPlatformData):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::display):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindIndicator):
        Specify that we want a bitmap that supports alpha to maintain current behavior.

2011-03-29  Adam Roben  <aroben@apple.com>

        Add ShareableBitmap::Handle

        This object is used for encoding/decoding a ShareableBitmap via CoreIPC. It currently just
        encapsulates a SharedMemory::Handle (which is what we were using previously) and the image's
        size (which means callers no longer need to deal with the size explicitly), but in the
        future could be used to store more information about the bitmap.

        This should cause no behavior changes.

        Fixes <http://webkit.org/b/57397> ShareableBitmap needs its own Handle type

        Reviewed by Anders Carlsson.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::geometryDidChange): No longer need to pass a size to create,
        since the Handle records the size.
        (WebKit::PluginControllerProxy::snapshot): No longer need the bufferSize argument, since the
        Handle records the size.

        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginControllerProxy.messages.in:
        Updated Handle types and removed unnecessary size argument to Snapshot.

        * Shared/PlatformPopupMenuData.cpp:
        (WebKit::PlatformPopupMenuData::encode):
        (WebKit::PlatformPopupMenuData::decode):
        * Shared/PlatformPopupMenuData.h:
        Changed to use ShareableBitmap::Handle and removed m_backingStoreSize, which is now stored
        in the Handles.

        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::Handle::encode):
        (WebKit::ShareableBitmap::Handle::decode):
        Simple encode/decode functions.

        (WebKit::ShareableBitmap::create): Get the size from the Handle instead of as a separate
        argument.
        (WebKit::ShareableBitmap::createHandle): Store our size in the Handle.

        * Shared/ShareableBitmap.h: Added ShareableBitmap::Handle and made some functions use it.

        * Shared/UpdateInfo.h: Changed to use ShareableBitmap::Handle.

        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        (WebKit::UserMessageDecoder::baseDecode):
        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::encodeImage):
        (CoreIPC::decodeImage):
        Use the size stored in the Handle instead of encoding/decoding one separately.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setDragImage):
        Removed the unnecessary imageSize argument. We can get it from the image itself.

        * UIProcess/BackingStore.cpp:
        (WebKit::BackingStore::incorporateUpdate):
        * UIProcess/FindIndicator.cpp:
        (WebKit::FindIndicator::create):
        No longer need to pass a size when creating a ShareableBitmap from a Handle.

        * UIProcess/FindIndicator.h: Changed to use ShareableBitmap::Handle.

        * UIProcess/PageClient.h: Removed unnecessary imageSize argument from setDragImage.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setFindIndicator):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setDragImage):
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::snapshot):
        (WebKit::PluginProxy::geometryDidChange):
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::startDrag):
        Changed to use ShareableBitmap::Handle and removed now-unnecessary size arguments (since we
        can get the size from the Handle).

        * WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp:
        (WebKit::WebPopupMenu::setUpPlatformData): Don't need to store the backing store size in the
        data anymore; the Handles will make sure it reaches the other process.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindIndicator):
        (WebKit::FindController::hideFindIndicator):
        Changed to use ShareableBitmap::Handle.

2011-03-30  Alejandro G. Castro  <alex@igalia.com>

        Fix GTK build after r81980.

        * GNUmakefile.am:

2011-03-29  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej Stachowiak.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=57408 
        webkit-min-device-pixel-ratio media query doesn't work post-SnowLeopard 
        -and corresponding-
        <rdar://problem/8665411>

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::userSpaceScaleFactor):
        * UIProcess/API/qt/qwkpage_p.h:
        (QWKPagePrivate::userSpaceScaleFactor):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/gtk/WebView.h:
        (WebKit::WebView::userSpaceScaleFactor):
        * UIProcess/win/WebView.h:
        (WebKit::WebView::userSpaceScaleFactor):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::scaleFactor):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::userSpaceScaleFactor):

2011-03-29  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed WinCairo build fix.

        Bring DownloadCurl implementation stubs in line with current
        CFNetwork API.

        * WebProcess/Downloads/curl/DownloadCurl.cpp:
        (WebKit::Download::receivedCredential):
        (WebKit::Download::receivedRequestToContinueWithoutCredential):
        (WebKit::Download::receivedCancellation):

2011-03-29  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: WK2: When creating the window remote token, use what's returned from accessibility
        https://bugs.webkit.org/show_bug.cgi?id=57398

        This will allow a specific WKView to override what's used for the window attribute of the
        HTML elements.

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

2011-03-29  Jeff Miller  <jeffm@apple.com>

        Reviewed by Sam Weinig.

        Make Windows-only InjectedBundle functions platform-specific
        https://bugs.webkit.org/show_bug.cgi?id=57385
        
        Added files for Windows-specific WKBundle functions.
        Removed stub wrappers for InjectedBundle::setHostAllowsAnyHTTPSCertificate() and InjectedBundle::setClientCertificate() from non-Windows platforms.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp: Moved WKBundleSetHostAllowsAnyHTTPSCertificate() and WKBundleSetClientCertificate() to WKBundlePrivateWin.cpp.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h: Moved WKBundleSetHostAllowsAnyHTTPSCertificate() and WKBundleSetClientCertificate() to WKBundlePrivateWin.h.
        * WebProcess/InjectedBundle/API/c/win: Added.
        * WebProcess/InjectedBundle/API/c/win/WKBundlePrivateWin.cpp: Added.
        (WKBundleSetHostAllowsAnyHTTPSCertificate): Moved from WKBundle.cpp.
        (WKBundleSetClientCertificate): Moved from WKBundle.cpp.
        * WebProcess/InjectedBundle/API/c/win/WKBundlePrivateWin.h: Added.
        * WebProcess/InjectedBundle/InjectedBundle.h: setHostAllowsAnyHTTPSCertificate() and setClientCertificate() are Windows-only.
        * WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp: Removed setHostAllowsAnyHTTPSCertificate() and setClientCertificate().
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp: Removed setHostAllowsAnyHTTPSCertificate() and setClientCertificate().
        * WebProcess/InjectedBundle/qt/InjectedBundleQt.cpp: Removed setHostAllowsAnyHTTPSCertificate() and setClientCertificate().
        * win/WebKit2.vcproj: Added WKBundlePrivateWin.cpp and WKBundlePrivateWin.h.
        * win/WebKit2Generated.make: Copy WKBundlePrivateWin.h.

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

        Fix Windows build.

        * WebProcess/Downloads/cfnet/DownloadCFNet.cpp:
        (WebKit::Download::receivedCredential):
        (WebKit::Download::receivedRequestToContinueWithoutCredential):
        (WebKit::Download::receivedCancellation):

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

        Reviewed by Sam Weinig.

        Downloads: Authentication support
        https://bugs.webkit.org/show_bug.cgi?id=57403
        <rdar://problem/8691166>

        * UIProcess/API/C/WKContext.h:
        Add didReceiveAuthenticationChallenge callback.

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didReceiveAuthenticationChallenge):
        Call the download client.

        * UIProcess/Downloads/DownloadProxy.messages.in:
        Add DidReceiveAuthenticationChallenge message.

        * UIProcess/WebDownloadClient.cpp:
        (WebKit::WebDownloadClient::didReceiveAuthenticationChallenge):
        Call the client callback function.

        * UIProcess/WebDownloadClient.h:
        * WebProcess/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        Send the DidReceiveAuthenticationChallenge message to the download proxy.

        (WebKit::AuthenticationManager::useCredentialForChallenge):
        (WebKit::AuthenticationManager::continueWithoutCredentialForChallenge):
        (WebKit::AuthenticationManager::cancelChallenge):
        If the authentication client is null, call the static download member functions.

        * WebProcess/Authentication/AuthenticationManager.h:
        * WebProcess/Downloads/Download.cpp:
        (WebKit::Download::didReceiveAuthenticationChallenge):
        Call the authentication manager.

        * WebProcess/Downloads/Download.h:
        * WebProcess/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::receivedCredential):
        (WebKit::Download::receivedRequestToContinueWithoutCredential):
        (WebKit::Download::receivedCancellation):
        Call the right sender methods.

        (-[WKDownloadAsDelegate download:didReceiveAuthenticationChallenge:]):
        (-[WKDownloadAsDelegate downloadShouldUseCredentialStorage:]):
        Call the right Download member functions.

        * WebProcess/Downloads/qt/DownloadQt.cpp:
        (WebKit::Download::receivedCredential):
        (WebKit::Download::receivedRequestToContinueWithoutCredential):
        (WebKit::Download::receivedCancellation):
        * WebProcess/Downloads/soup/DownloadSoup.cpp:
        (WebKit::Download::receivedCredential):
        (WebKit::Download::receivedRequestToContinueWithoutCredential):
        (WebKit::Download::receivedCancellation):
        Add stubs.

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

        Reviewed by Sam Weinig.

        AuthenticationChallengeProxy objects should be associated with processes, not pages
        https://bugs.webkit.org/show_bug.cgi?id=57401

        * UIProcess/Authentication/AuthenticationChallengeProxy.cpp:
        (WebKit::AuthenticationChallengeProxy::AuthenticationChallengeProxy):
        (WebKit::AuthenticationChallengeProxy::~AuthenticationChallengeProxy):
        (WebKit::AuthenticationChallengeProxy::useCredential):
        (WebKit::AuthenticationChallengeProxy::cancel):
        * UIProcess/Authentication/AuthenticationChallengeProxy.h:
        (WebKit::AuthenticationChallengeProxy::create):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveAuthenticationChallenge):

2011-03-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Use LocalizedStrings.h as a bottleneck for localized strings instead of
        using UI_STRING.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView validateUserInterfaceItem:]):
        Call existing localization functions instead of using UI_STRING.

        (-[WKView _getTextInputState:selectionEnd:underlines:]):
        Remove unnecessary WebCore:: prefix.

2011-03-29  Chang Shu  <cshu@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        WebKitTestRunner needs layoutTestController.setAllowUniversalAccessFromFileURLs
        https://bugs.webkit.org/show_bug.cgi?id=42692

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::decode):
        (WebKit::WebPreferencesStore::overrideAllowUniversalAccessFromFileURLsForTestRunner):
        * Shared/WebPreferencesStore.h:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleOverrideAllowUniversalAccessFromFileURLsForTestRunner):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideAllowUniversalAccessFromFileURLsForTestRunner):
        * WebProcess/InjectedBundle/InjectedBundle.h:

2011-03-29  Timothy Hatcher  <timothy@apple.com>

        Update the order of the context menu to better match AppKit on Mac.

        <rdar://problem/9054893>

        Reviewed by John Sullivan.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::contextMenuItemTagLookUpInDictionary): Added argument for selected string.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2011-03-29  Jeff Miller  <jeffm@apple.com>

        Fix formatting of WebKit2.vcproj after r82283.

        * win/WebKit2.vcproj:

2011-03-29  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Build failed with ‘GDK_KEY_KP_Space’ was not declared in this scope
        https://bugs.webkit.org/show_bug.cgi?id=55314

        Build fix for older versions of GTK+. Use the deprecated names for GDK key
        defines and include GtkVersioning.h to allow building on newer versions
        of GTK+.

        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::isGdkKeyCodeFromKeyPad): Update key defines.

2011-03-29  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Use per-configuration vsprops in WebKit to avoid WebKitVSPropsRedirectionDir removal by MSVC IDE
        https://bugs.webkit.org/show_bug.cgi?id=57383

        Visual Studio's IDE was removing instances of $(WebKitVSPropsRedirectionDir) from
        InheritedPropertySheet rules in our vcproj files when the vcproj was edited from within
        the IDE. To avoid this, add a separate vsprops file for each project configuration that
        contains the required inherited property sheets.

        * win/WebKit2.vcproj:
        * win/WebKit2Debug.vsprops: Added.
        * win/WebKit2DebugAll.vsprops: Added.
        * win/WebKit2DebugCairoCFLite.vsprops: Added.
        * win/WebKit2Release.vsprops: Added.
        * win/WebKit2ReleaseCairoCFLite.vsprops: Added.
        * win/WebKit2ReleaseLTCG.vsprops: Added.
        * win/WebKit2WebProcess.vcproj:
        * win/WebKit2WebProcessDebug.vsprops: Added.
        * win/WebKit2WebProcessDebugAll.vsprops: Added.
        * win/WebKit2WebProcessDebugCairoCFLite.vsprops: Added.
        * win/WebKit2WebProcessRelease.vsprops: Added.
        * win/WebKit2WebProcessReleaseCairoCFLite.vsprops: Added.
        * win/WebKit2WebProcessReleaseLTCG.vsprops: Added.

2011-03-29  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Anders Carlsson.

        WebKit2: The WebProcess should be relaunched if necessary when WebKit2 is asked for
        information about Cookies, Databases, Local Storage, etc.
        https://bugs.webkit.org/show_bug.cgi?id=57374

        Instead of bailing when the WebProcess is not valid, call relaunchProcessIfNecessary().

        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
        (WebKit::WebPluginSiteDataManager::getSitesWithData):
        (WebKit::WebPluginSiteDataManager::clearSiteData):
        * UIProcess/WebApplicationCacheManagerProxy.cpp:
        (WebKit::WebApplicationCacheManagerProxy::getApplicationCacheOrigins):
        (WebKit::WebApplicationCacheManagerProxy::deleteEntriesForOrigin):
        (WebKit::WebApplicationCacheManagerProxy::deleteAllEntries):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::getHostnamesWithCookies):
        (WebKit::WebCookieManagerProxy::deleteCookiesForHostname):
        (WebKit::WebCookieManagerProxy::deleteAllCookies):
        (WebKit::WebCookieManagerProxy::startObservingCookieChanges):
        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::getDatabasesByOrigin):
        (WebKit::WebDatabaseManagerProxy::getDatabaseOrigins):
        (WebKit::WebDatabaseManagerProxy::deleteDatabaseWithNameForOrigin):
        (WebKit::WebDatabaseManagerProxy::deleteDatabasesForOrigin):
        (WebKit::WebDatabaseManagerProxy::deleteAllDatabases):
        (WebKit::WebDatabaseManagerProxy::setQuotaForOrigin):
        * UIProcess/WebKeyValueStorageManagerProxy.cpp:
        (WebKit::WebKeyValueStorageManagerProxy::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManagerProxy::deleteEntriesForOrigin):
        (WebKit::WebKeyValueStorageManagerProxy::deleteAllEntries):
        * UIProcess/WebMediaCacheManagerProxy.cpp:
        (WebKit::WebMediaCacheManagerProxy::getHostnamesWithMediaCache):
        (WebKit::WebMediaCacheManagerProxy::clearCacheForHostname):
        (WebKit::WebMediaCacheManagerProxy::clearCacheForAllHostnames):
        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::getCacheOrigins):
        (WebKit::WebResourceCacheManagerProxy::clearCacheForOrigin):
        (WebKit::WebResourceCacheManagerProxy::clearCacheForAllOrigins):

2011-03-29  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Support setting the client certificate on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57368
        
        Allow setting the client certificate for a host via the injected bundle.
        This requires the ability for Webkit2 Windows clients to create a WKCertificateInfo from a PCCERT_CONTEXT so they can send it to the web process.

        * Shared/API/c/win/WKCertificateInfoWin.cpp:
        (WKCertificateInfoCreateWithCertificate): Added.
        * Shared/API/c/win/WKCertificateInfoWin.h: Added WKCertificateInfoCreateWithCertificate().
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetClientCertificate): Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h: Added WKBundleSetClientCertificate().
        * WebProcess/InjectedBundle/InjectedBundle.h: Added setClientCertificate().
        * WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        (WebKit::InjectedBundle::setClientCertificate): Added, should never be called.
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp:
        (WebKit::InjectedBundle::setClientCertificate): Added, should never be called.
        * WebProcess/InjectedBundle/qt/InjectedBundleQt.cpp:
        (WebKit::InjectedBundle::setClientCertificate): Added, should never be called.
        * WebProcess/InjectedBundle/win/InjectedBundleWin.cpp:
        (WebKit::InjectedBundle::setClientCertificate): Added.

2011-03-29  Timothy Hatcher  <timothy@apple.com>

        Make WebKit2 work with update-webkit-localizable-strings.

        https://webkit.org/b/57354

        Reviewed by Sam Weinig.

        * PluginProcess/mac/PluginProcessMac.mm: Remove UI_STRING macro. Use WebLocalizableStrings.h.
        * Shared/WebLocalizableStrings.h: Added.
        * UIProcess/API/mac/WKView.mm: Remove UI_STRING macro. Use WebLocalizableStrings.h.
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformInspectedURLChanged): Use UI_STRING. Remove FIXME.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp: Remove UI_STRING macros.
        Use WebLocalizableStrings.h.
        * WebProcess/WebCoreSupport/mac/WebErrorsMac.mm:
        (registerErrors): Remove UI_STRING macro. Use WebLocalizableStrings.h.
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeWebProcess): Use UI_STRING. Remove FIXME.

        * GNUmakefile.am: Added Shared/WebLocalizableStrings.h.
        * WebKit2.pro: Ditto.
        * WebKit2.xcodeproj/project.pbxproj: Ditto.
        * win/WebKit2.vcproj: Ditto.

2011-03-29  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        CoreIPC::decodeResourceError() leaks a CFDataRef
        https://bugs.webkit.org/show_bug.cgi?id=57366

        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::decodeResourceError): Don't leak the result of WebCore::copyCertificateToData(), since the ResourceError will retain it.

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

        Reviewed by Sam Weinig.

        Allow the AppleConnect plug-in to use the QuickDraw drawing model
        https://bugs.webkit.org/show_bug.cgi?id=57365
        <rdar://problem/8712320>

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::determineQuirks):
        * Shared/Plugins/PluginQuirks.h:
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformPostInitialize):

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

        Reviewed by Adam Roben.

        WebKit2 bundle page needs to offer generated file hooks
        https://bugs.webkit.org/show_bug.cgi?id=57279

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h: Added shouldGenerateFileForUpload and
        generateFileForUpload callback pointers.

        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::shouldGenerateFileForUpload): Added.
        (WebKit::InjectedBundlePageUIClient::generateFileForUpload): Added.
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h: Added functions above.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::shouldReplaceWithGeneratedFileForUpload): Implemented by
        calling the functions above.
        (WebKit::WebChromeClient::generateReplacementFile): Ditto.

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

        Reviewed by Darin Adler.

        Assertion failure in plug-in process with clang-built 32/64-bit WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=57359

        Don't use __alignof when encoding and decoding scalar types.
        
        Darwin 32-bit, double and unsigned long long are 4-byte aligned but on 64-bit they're
        8-byte aligned which causes problems when doing IPC between 32-bit and 64-bit processes.
        GCC is buggy and returns 8, but clang is correct and returns 4. Use sizeof instead which we know
        is equal to or greater than the alignment.

        * Platform/CoreIPC/ArgumentDecoder.cpp:
        (CoreIPC::ArgumentDecoder::decodeBool):
        (CoreIPC::ArgumentDecoder::decodeUInt32):
        (CoreIPC::ArgumentDecoder::decodeUInt64):
        (CoreIPC::ArgumentDecoder::decodeInt32):
        (CoreIPC::ArgumentDecoder::decodeInt64):
        (CoreIPC::ArgumentDecoder::decodeFloat):
        (CoreIPC::ArgumentDecoder::decodeDouble):
        * Platform/CoreIPC/ArgumentEncoder.cpp:
        (CoreIPC::ArgumentEncoder::encodeBool):
        (CoreIPC::ArgumentEncoder::encodeUInt32):
        (CoreIPC::ArgumentEncoder::encodeUInt64):
        (CoreIPC::ArgumentEncoder::encodeInt32):
        (CoreIPC::ArgumentEncoder::encodeInt64):
        (CoreIPC::ArgumentEncoder::encodeFloat):
        (CoreIPC::ArgumentEncoder::encodeDouble):

2011-03-29  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix after r81928.

        * win/WebKit2.vcproj: Don't build CG-specific icon routines
        for WinCairo port.

2011-03-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Reproducible crash running under libgmalloc, in -[WKView(Internal) removeTrackingRect:] --&gt; objc_assign_ivar_non_gc
        <rdar://problem/9193352>
        https://bugs.webkit.org/show_bug.cgi?id=57358

        -[WKView removeTrackingRect] can be called from below -[WKView dealloc] after we have
        destroyed _data. So, nil out _data after releasing it and nil check it appropriately.
        
        * UIProcess/API/mac/WKView.mm:
        (-[WKView dealloc]):
        Nil out _data after releasing it.

        (-[WKView removeTrackingRect:]):
        Add early return for nil _data.

2011-03-29  Jeff Miller  <jeffm@apple.com>

        Reviewed by Jon Honeycutt.

        Add WebCore::copyCertificateToData() on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57296
        
        Remove duplicate code that implemented this functionality in WebCoreArgumentCodersWin.cpp and use WebCore::copyCertificateToData() instead. 

        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::decodeResourceError): Use WebCore::copyCertificateToData().

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

        Unreviewed build fix (64 bit gcc).

        GCC does not accept uint64_t formatted as %lli.

        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::getLoadDecisionForIconURL): Add explicit cast to long long.

2011-03-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        WKPageGetSourceForFrame and WKPageGetContentsAsString should throw an error in case of a race with page loading
        https://bugs.webkit.org/show_bug.cgi?id=57305
        <rdar://problem/8738060>, <rdar://problem/8780168>

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close): Clear m_loadDependentStringCallbackIDs
        (WebKit::WebPageProxy::getSourceForFrame): track the callback as load dependent
        (WebKit::WebPageProxy::getContentsAsString): ditto
        (WebKit::WebPageProxy::clearLoadDependentCallbacks): Invalidate all load dependent callbacks
        (WebKit::WebPageProxy::didCommitLoadForFrame): Call clearLoadDependentCallbacks
        (WebKit::WebPageProxy::didFailLoadForFrame): ditto
        (WebKit::WebPageProxy::stringCallback): Remove callback from load dependent set if appropriate
        (WebKit::WebPageProxy::processDidCrash): Clear m_loadDependentStringCallbackIDs
        * UIProcess/WebPageProxy.h: Add m_loadDependentStringCallbackIDs hash set.

2011-03-28  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Use String instead of CString as return value of openTemporaryFile
        https://bugs.webkit.org/show_bug.cgi?id=55332

        * Shared/WebMemorySampler.cpp:
        (WebKit::WebMemorySampler::initializeTempLogFile):
        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::stop):
        * WebProcess/Plugins/Netscape/NetscapePluginStream.h:

2011-03-28  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Jon Honeycutt.

        WebKit2: Downloads started with DownloadCFNet::start never start
        https://bugs.webkit.org/show_bug.cgi?id=57268

        * WebProcess/Downloads/cfnet/DownloadCFNet.cpp:
        (WebKit::Download::start): Call CFURLDownloadStart on the download we create.

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

        Fix Windows build.

        * Shared/ShareableBitmap.h:

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

        Reviewed by Sam Weinig.

        Beep when pressing a menu key equivalent when a plug-in has focus
        https://bugs.webkit.org/show_bug.cgi?id=57264
        <rdar://problem/8935597>

        We don't want the WKTextInputWindowController inputContext to be involved in interpretKeyEvents.

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

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

        Reviewed by Sam Weinig.

        CGImageRefs must hold a strong reference to underlying data
        https://bugs.webkit.org/show_bug.cgi?id=57263
        <rdar://problem/9146179>

        Make paintBitmapContext use CGBitmapContextCreateImage, which creates a copy-on-write copy
        of the bitmap data. Also, add ShareableBitmap::makeCGImageCopy which does the same thing, and
        ShareableBitmap::makeCGImage in the cases where we know that the ShareableBitmap data will never change.

        * Platform/cg/CGUtilities.cpp:
        (WebKit::paintImage):
        Factor image painting code out into a separate function.

        (WebKit::paintBitmapContext):
        Call paintImage.

        * Shared/API/c/cg/WKImageCG.cpp:
        (WKImagemakeCGImage):
        Use ShareableBitmap::makeCGImageCopy.

        * Shared/ShareableBitmap.h:
        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::createGraphicsContext):
        (WebKit::ShareableBitmap::paint):
        (WebKit::ShareableBitmap::makeCGImageCopy):
        (WebKit::ShareableBitmap::makeCGImage):
        (WebKit::ShareableBitmap::releaseBitmapContextData):
        (WebKit::ShareableBitmap::releaseDataProviderData):
        Add makeCGImage and makeCGImageCopy.

        * Shared/cg/WebCoreArgumentCodersCG.cpp:
        (CoreIPC::createImage):
        Use ShareableBitmap::makeCGImage.
        
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setDragImage):
        Use ShareableBitmap::makeCGImage and plug a CGImageRef leak.

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

        Build fix.

        * UIProcess/API/mac/WKView.mm: (-[WKView keyDown:]): It's not "event" in this function, it's
        "theEvent".

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=57260
        Clean up text input code a little

        * UIProcess/API/mac/WKView.mm:
        (-[WKView doCommandBySelector:]): This NSTextInput protocol method lacked a LOG() call.
        (-[WKView keyDown:]): Added (possibly useless) event protection to match performKeyEquivalent:
        and also WebKit1.

        * WebProcess/WebPage/mac/WebPageMac.mm: Removed an obsolete comment.

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

        Reviewed by Adam Roben.

        ResourceError::certificate() should return a PCCERT_CONTEXT
        https://bugs.webkit.org/show_bug.cgi?id=57262

        * Shared/win/PlatformCertificateInfo.cpp:
        (WebKit::PlatformCertificateInfo::PlatformCertificateInfo): Don't assert if no PCCERT_CONTEXT is specified.
        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::encodeResourceError): Removed unneeded code now that ResourceError::certificate() returns a PCCERT_CONTEXT.

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

        Rubber-stamped by Adam Roben.

        Remove unused CFErrorRef.

        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::encodeResourceError): Remove unused CFErrorRef.

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

        Reviewed by Adam Roben.

        Include certificate when sending a WebCore::ResourceError to UI process on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57195
        
        Add support for sending the certificate with the WebCore::ResourceError.

        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::encodeResourceError): Encode certificate data.
        (CoreIPC::deallocCertContext): Added.
        (CoreIPC::createCertContextDeallocator): Added.
        (CoreIPC::copyCert): Added.
        (CoreIPC::decodeResourceError): Decode certificate data.

2011-03-27  Andy Estes  <aestes@apple.com>

        Reviewed by Maciej Stachowiak.

        Correctly get a plug-in's MIME type when it uses WebPluginMIMETypesFilename
        https://bugs.webkit.org/show_bug.cgi?id=57205
        
        If the plug-in's Info.plist uses WebPluginMIMETypesFilename to specify
        plug-in MIME types, WebKit has to check for a property list file in
        ~/Library/Preferences for the MIME type dictionary.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::getMIMETypesFromPluginBundle): If the bundle's Info dictionary
        has the key WebPluginMIMETypesFilename, open the property list
        specified by that key's value and return the MIME type dictionary from
        there. Otherwise, return the MIME type dictionary specified by the key
        WebPluginMIMETypes.
        (WebKit::getPluginInfoFromPropertyLists): Call
        getMIMETypesFromPluginBundle().

2011-03-27  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        Full Screen: disable keyboard access by default
        https://bugs.webkit.org/show_bug.cgi?id=56684

        Take into account whether keyboard access was requested when deciding whether full
        screen mode is supported.

        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::supportsFullScreen):
        * UIProcess/WebFullScreenManagerProxy.h:
        * UIProcess/WebFullScreenManagerProxy.messages.in:
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::supportsFullScreen):
        * WebProcess/FullScreen/WebFullScreenManager.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::supportsFullScreenForElement):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

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

        Reviewed by Sam Weinig.

        Dock doesn't come back after leaving fullscreen on Hulu
        https://bugs.webkit.org/show_bug.cgi?id=57189
        <rdar://problem/9192413>

        Port some code over from the old WebKit1 plug-in host.

        * PluginProcess/mac/PluginProcessShim.mm:
        (WebKit::shimShowMenuBar):
        (WebKit::shimHideMenuBar):
        (WebKit::shimIsMenuBarVisible):

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

        Reviewed by Sam Weinig.

        Keep a strong reference to the connection to avoid crashes.

        * Platform/CoreIPC/Connection.cpp:

2011-03-26  Jeff Miller  <jeffm@apple.com>

        Reviewed by Sam Weinig.

        WKErrorCopyCFError() doesn't actually return a copy of the CFErrorRef
        https://bugs.webkit.org/show_bug.cgi?id=57172

        * Shared/API/c/cf/WKErrorCF.cpp:
        (WKErrorCopyCFError): Use RetainPtr<> and leakRef() to return a real copy.

2011-03-26  Maciej Stachowiak  <mjs@apple.com>

        Revert inadvertently committed changes.

        * WebProcess/com.apple.WebProcess.sb:

2011-03-26  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Enable the Full Screen API by default in WebKit/mac and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=56956

        * Shared/WebPreferencesStore.h: Default the fullScreenEnabled preference to true.

2011-03-26  Jeff Miller  <jeffm@apple.com>

        Reviewed by Steve Falkenburg.

        Add PlatformCertificateInfo::PlatformCertificateInfo(PCCERT_CONTEXT) constructor on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57152
        
        We're going to need to create a PlatformCertificateInfo with a single certificate on Windows to support client certificates.
        Also, stop relying on the fact that the Win32 API CertDuplicateCertificateContext() currently returns the same PCCERT_CONTEXT that you pass to it, since that may change in the future.

        * Shared/win/PlatformCertificateInfo.cpp:
        (WebKit::PlatformCertificateInfo::PlatformCertificateInfo): Added PlatformCertificateInfo(PCCERT_CONTEXT) construtor. Use return value from CertDuplicateCertificateContext().
        (WebKit::PlatformCertificateInfo::operator=): Use return value from CertDuplicateCertificateContext().
        * Shared/win/PlatformCertificateInfo.h: Added PlatformCertificateInfo(PCCERT_CONTEXT) construtor.

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

        Reviewed by Sam Weinig.

        Graphic corruption appeared with Silverlight contents while resizing window
        https://bugs.webkit.org/show_bug.cgi?id=57167
        <rdar://problem/9094052>

        Pass DispatchMessageEvenWhenWaitingForSyncReply when sending GeometryDidChange messages since that will guarantee
        that those messages will be handled before PaintEntirePlugin messages which prevents the PaintEntirePlugin handler from
        painting into the wrong backing store.

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

2011-03-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Web process considered unresponsive (SPOD shown) when displaying a JavaScript alert() as a result of a click
        <rdar://problem/9067557>
        https://bugs.webkit.org/show_bug.cgi?id=57166

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runJavaScriptAlert):
        (WebKit::WebPageProxy::runJavaScriptConfirm):
        (WebKit::WebPageProxy::runJavaScriptPrompt):
        Invalidate the responsiveness timer before calling out to the client.

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

        Reviewed by Sam Weinig.

        ASSERTION FAILED: m_operationInProgress == NoOperation loading nytimes.com
        https://bugs.webkit.org/show_bug.cgi?id=57165
        <rdar://problem/9024311>

        The assertion fired because during GC, the web process sends a synchronous NPObjectMessageReceiver::Deallocate
        message to the plug-in process. Since this is a synchronous message, the web process needs to process incoming synchronous
        messages. While waiting, we get an incoming PluginProxy::Evaluate message from the plug-in. This causes JavaScript to run
        during GC which is very bad.

        The fix for this is to add a flag on the connection that will cause synchronous messages sent by the connection (in this case the
        plug-in process) to not be processed while the other side (the web process) is waiting for a synchronous reply _unless_ the connection
        is actually processing a synchronous message. (The last part is to avoid deadlocks).

        Since the call to NPN_Evaluate by the plug-in (that ends up sending the PluginProxy::Evaluate message) comes from a run loop timer firing,
        it's OK to wait for it to be processed by the web process when it returns to the run loop.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::Connection):
        Initialize m_onlySendMessagesAsDispatchWhenWaitingForSyncReplyWhenProcessingSuchAMessage and m_inDispatchMessageMarkedDispatchWhenWaitingForSyncReplyCount.

        (CoreIPC::Connection::setOnlySendMessagesAsDispatchWhenWaitingForSyncReplyWhenProcessingSuchAMessage):
        Set m_onlySendMessagesAsDispatchWhenWaitingForSyncReplyWhenProcessingSuchAMessage.

        (CoreIPC::Connection::sendMessage):
        Don't add the MessageID::DispatchMessageWhenWaitingForSyncReply flag when the right flags has been set on the connection, and it's not processing a synchronous message.

        (CoreIPC::Connection::dispatchMessage):
        Increment and decrement m_inDispatchMessageMarkedDispatchWhenWaitingForSyncReplyCount accordingly.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::WebProcessConnection):
        Call setOnlySendMessagesAsDispatchWhenWaitingForSyncReplyWhenProcessingSuchAMessage on the connection.

2011-03-26  Sam Weinig  <sam@webkit.org>

        Rollout r82042 (If a user doesn't have a Database/LocalStorage directory, it can't be created (sandbox violations))

        -[NSString stringByResolvingSymlinksInPath] does not do what we needed for paths within /private.
        This caused all SSL sites to stop working.

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::appendSandboxParameterPath):
        (WebKit::initializeSandbox):

2011-03-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        If a user doesn't have a Database/LocalStorage directory, it can't be created (sandbox violations)
        <rdar://problem/9127411>
        https://bugs.webkit.org/show_bug.cgi?id=57164

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::appendSandboxParameterPath):
        (WebKit::initializeSandbox):
        Use -[NSString stringByResolvingSymlinksInPath] instead of realpath to ensure we can resolve
        symlinks even if the file/directory doesn't exist yet.

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

        Reviewed by Sam Weinig.

        Factor processing of incoming sync replies out into processIncomingSyncReply
        https://bugs.webkit.org/show_bug.cgi?id=57161

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendSyncMessage):
        Pass DispatchMessageEvenWhenWaitingForSyncReply to sendMessage.

        (CoreIPC::Connection::processIncomingSyncReply):
        Move code from processIncomingMessage to here.

        (CoreIPC::Connection::processIncomingMessage):
        Call processIncomingSyncReply.

2011-03-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2: Assert in CoreIPC::typeFromCFTypeRef() when loading a site with an invalid certificate
        <rdar://problem/9188041>
        https://bugs.webkit.org/show_bug.cgi?id=57159

        * Shared/cf/ArgumentCodersCF.cpp:
        (CoreIPC::typeFromCFTypeRef):
        (CoreIPC::encode):
        (CoreIPC::decode):
        * Shared/cf/ArgumentCodersCF.h:
        Add encoding/decoding for SecCertificateRef type.

        * Shared/mac/PlatformCertificateInfo.mm:
        (WebKit::PlatformCertificateInfo::encode):
        (WebKit::PlatformCertificateInfo::decode):
        Use ArgumentCodersCF now that it knows how to encode/decode SecCertificateRefs.

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

        Reviewed by Sam Weinig.

        Handle synchronous replies coming in out of order
        https://bugs.webkit.org/show_bug.cgi?id=57158

        When processing an incoming reply, don't assume that it belongs to the last sent synchronous request.
        Instead, iterate over the m_pendingSyncReplies vector backwards looking for the corresponding request.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::processIncomingMessage):

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

        Reviewed by Sam Weinig.

        Fix a possible deadlock when two synchronous messages are sent at the same time
        https://bugs.webkit.org/show_bug.cgi?id=57155

        Simplify code and fix a possible (although highly improbable) dead lock.

        * Platform/CoreIPC/Connection.cpp:
        Make SyncMessageState atomically ref counted since it can be ref()'ed from the connection queue.
        Get rid of m_waitForSyncReplyCount and add m_didScheduleDispatchMessagesWork.

        (CoreIPC::Connection::SyncMessageState::SyncMessageState):
        Initialize m_didScheduleDispatchMessagesWork to false.

        (CoreIPC::Connection::SyncMessageState::processIncomingMessage):
        if m_didScheduleDispatchMessagesWork is false, schedule a call to dispatchMessageAndResetDidScheduleDispatchMessagesWork
        on the client run loop.

        (CoreIPC::Connection::SyncMessageState::dispatchMessageAndResetDidScheduleDispatchMessagesWork):
        Dispatch messages and set m_didScheduleDispatchMessagesWork back to false.

        (CoreIPC::Connection::sendSyncMessage):
        Remove calls to beginWaitForSyncReply and endWaitForSyncReply.

2011-03-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Adele Peterson.

        WKPageLoadAlternateHTMLString doesn't re-spawn a dead WebProcess, but should
        <rdar://problem/9191493>
        https://bugs.webkit.org/show_bug.cgi?id=57134

        Make all load functions respawn a dead WebProcess for consistency.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadHTMLString):
        Respawn a dead WebProcess.

        (WebKit::WebPageProxy::loadAlternateHTMLString):
        Respawn a dead WebProcess.

        (WebKit::WebPageProxy::loadPlainTextString):
        Respawn a dead WebProcess.

        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidStartProvisionalLoad):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadAlternateHTMLString):
        Since we may no longer always have a main frame when calling WKPageLoadAlternateHTMLString,
        set the unreachable URL, if there is one, on provisional load.

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

        Reviewed by Sam Weinig.

        PluginView's call to invalidateContentsAndWindow() in invalidateRect() is wrong for plug-ins which paint into compositing layers
        https://bugs.webkit.org/show_bug.cgi?id=57133
        <rdar://problem/9029442>

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformInvalidate):
        Return true under the Core Animation drawing model, since that prevents the plug-in from calling PluginController::invalidate.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::invalidateRect):
        Don't call invalidateContentsAndWindow() if the plug-in has a Core Animation layer.

2011-03-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8648311> and https://bugs.webkit.org/show_bug.cgi?id=56425
        WebKit2 IconDatabase and API

        This gets a basic, usable API in place.
        Enhancements can come in other bugs as they're needed.

        * UIProcess/API/C/WKIconDatabase.cpp:
        (WKIconDatabaseRetainIconForURL):
        (WKIconDatabaseReleaseIconForURL):
        (WKIconDatabaseEnableDatabaseCleanup):
        * UIProcess/API/C/WKIconDatabase.h:
        
        The first actual accessor for an "icon for a URL" is for a CGImageRef:
        * UIProcess/API/C/cg: Added.
        * UIProcess/API/C/cg/WKIconDatabaseCG.cpp: Added.
        (WKIconDatabaseGetCGImageForURL):
        * UIProcess/API/C/cg/WKIconDatabaseCG.h: Added.
        
        Expose relevant methods to support the above API:
        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::WebIconDatabase): New IconDatabases will have cleanup disabled from the start,
          and require a single call to "enableDatabaseCleanup" to allow cleanup.
        (WebKit::WebIconDatabase::setDatabasePath):
        (WebKit::WebIconDatabase::enableDatabaseCleanup):
        (WebKit::WebIconDatabase::imageForPageURL):
        * UIProcess/WebIconDatabase.h:
        
        Project file stuff:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2011-03-25  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Add CoreIPC::encodeResourceError() and CoreIPC::decodeResourceError() for all platforms
        https://bugs.webkit.org/show_bug.cgi?id=57125
        
        Currently, these are only implemented on the Mac, but we're going to need them for Windows as well, so we might as well make them always platform-specific.
        In this patch, just replicate the existing common non-Mac implementation in WebCoreArgumentCoders.h to platform-specific files.

        * Shared/WebCoreArgumentCoders.h: Move non-Mac implementations of encodeResourceError() and decodeResourceError() to common files.
        * Shared/gtk/WebCoreArgumentCodersGtk.cpp:
        (CoreIPC::encodeResourceError): Added.
        (CoreIPC::decodeResourceError): Added.
        * Shared/qt/WebCoreArgumentCodersQt.cpp:
        (CoreIPC::encodeResourceError): Added.
        (CoreIPC::decodeResourceError): Added.
        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::encodeResourceError): Added.
        (CoreIPC::decodeResourceError): Added.

2011-03-25  Andy Estes  <aestes@apple.com>

        Reviewed by Adele Peterson.

        REGRESSION (r70748): latest nightly builds kills AC_QuickTime.js
        https://bugs.webkit.org/show_bug.cgi?id=49016

        Update objectContentType() implementation to handle the
        shouldPreferPlugInsForImages flag.

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

2011-03-25  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction.

        Add stubs for WK2 cookie handling with cURL.

        * WebProcess/Cookies/curl: Added.
        * WebProcess/Cookies/curl/WebCookieManagerCurl.cpp: Added.
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManager::platformGetHTTPCookieAcceptPolicy):
        * win/WebKit2.vcproj:

2011-03-25  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Brian Weinstein.

        Microsoft Windows Presentation Foundation (WPF) plug-in complains about missing xpcom.dll
        https://bugs.webkit.org/show_bug.cgi?id=57119
        <rdar://problem/9054148>

        This plug-in from Microsoft links against xpcom.dll, which is a Firefox-specific DLL
        not available in WebKit. The plug-in is fairly widespread, since it was included in
        a Windows Update push at one point.

        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        (WebKit::PluginInfoStore::shouldUsePlugin): Blacklist npwpf.dll.

2011-03-25  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Anders Carlsson.

        WebKit2: Need to be able to set and get the Cookie Storage Policy.
        https://bugs.webkit.org/show_bug.cgi?id=50780

        Part 2: Make it possible to set the initial policy on Windows.

        In WebKit1, we read the initial policy on Windows from WebPreferences at startup.
        Since that is not possible in WebKit2, make it possible to specify the initial policy
        as a creation parameter to the WebProcess.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        Encode initialHTTPCookieAcceptPolicy on Windows.
        (WebKit::WebProcessCreationParameters::decode):
        Decode initialHTTPCookieAcceptPolicy on Windows.
        * Shared/WebProcessCreationParameters.h:

        * UIProcess/API/C/win/WKContextPrivateWin.h:
        * UIProcess/API/C/win/WKContextWin.cpp:
        (WKContextSetInitialHTTPCookieAcceptPolicy):
        Call through to WebContext.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        Give the initial policy a default of "Always".
        * UIProcess/WebContext.h:
        (WebKit::WebContext::setInitialHTTPCookieAcceptPolicy):
        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):
        Set the initial policy on Windows.

        * WebProcess/Cookies/WebCookieManager.h:
        Make setHTTPCookieAcceptPolicy public so that it can be called from WebProcessWin.

        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):
        Tell the WebCookieManager about the initial policy.

2011-03-25  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Need to be able to set and get the Cookie Storage Policy.
        https://bugs.webkit.org/show_bug.cgi?id=50780

        * Shared/HTTPCookieAcceptPolicy.h: Added.

        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toHTTPCookieAcceptPolicy):
        (WebKit::toAPI):

        * UIProcess/API/C/WKCookieManager.cpp:
        (WKCookieManagerSetHTTPCookieAcceptPolicy):
        Call through to WebCookieManagerProxy.
        (WKCookieManagerGetHTTPCookieAcceptPolicy):
        Ditto.
        * UIProcess/API/C/WKCookieManager.h:

        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::invalidate):
        Invalidate the get http cookie accept policy callbacks.
        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):
        Send a message to the Web Process with the new value.
        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
        Keep track of the callback and send a message to the Web Process.
        (WebKit::WebCookieManagerProxy::didGetHTTPCookieAcceptPolicy):
        Invoke the callback.
        * UIProcess/mac/WebCookieManagerProxyMac.mm: Added.
        (WebKit::WebCookieManagerProxy::persistHTTPCookieAcceptPolicy):
        On Mac, also set the policy in the UI Process because the sandboxed Web Process cannot
        persist the policy.
        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/WebCookieManagerProxy.messages.in:

        * WebKit2.pri:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Common.vsprops:

        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::setHTTPCookieAcceptPolicy):
        Call platformSetHTTPCookieAcceptPolicy.
        (WebKit::WebCookieManager::getHTTPCookieAcceptPolicy):
        Send the result of platformGetHTTPCookieAcceptPolicy to the UI Process.
        * WebProcess/Cookies/WebCookieManager.h:
        * WebProcess/Cookies/WebCookieManager.messages.in:

        * WebProcess/Cookies/cf: Added.
        * WebProcess/Cookies/cf/WebCookieManagerCFNet.cpp: Added.
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
        Set the policy on both the default cookie storage and any Private Browsing cookie storage.
        (WebKit::WebCookieManager::platformGetHTTPCookieAcceptPolicy):
        * WebProcess/Cookies/mac: Added.
        * WebProcess/Cookies/mac/WebCookieManagerMac.mm: Added.
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
        Set the policy on the default cookie storage and add a FIXME to set it on any Private
        Browsing cookie storage.
        (WebKit::WebCookieManager::platformGetHTTPCookieAcceptPolicy):

        * WebProcess/Cookies/gtk: Added.
        * WebProcess/Cookies/gtk/WebCookieManagerGtk.cpp: Added.
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManager::platformGetHTTPCookieAcceptPolicy):
        * WebProcess/Cookies/qt: Added.
        * WebProcess/Cookies/qt/WebCookieManagerQt.cpp: Added.
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManager::platformGetHTTPCookieAcceptPolicy):

2011-03-25  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Alexey Proskuryakov.

        REGRESSION(r79227): CFURLCache not initialized correctly in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=57109
        <rdar://problem/9184590>
        
        Check for a trailing Windows path separator, not a Unix path separator.

        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):

2011-03-25  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] QtWebKit will not compile with QT_ASCII_CAST_WARNINGS enabled
        https://bugs.webkit.org/show_bug.cgi?id=57087

        Use explicit conversion for string to avoid depending on the default codec
        installed by the user code.

        * Platform/qt/SharedMemoryQt.cpp:
        (WebKit::SharedMemory::create):
        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::initializeGTK):
        * UIProcess/API/qt/tests/qgraphicswkview/tst_qgraphicswkview.cpp:
        (tst_QGraphicsWKView::loadEmptyPage):
        (tst_QGraphicsWKView::loadEmptyUrl):
        * UIProcess/API/qt/tests/qwkpage/tst_qwkpage.cpp:
        (tst_QWKPage::loadEmptyUrl):
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::getPluginDisplay):
        * WebProcess/qt/WebProcessMainQt.cpp:
        (WebKit::EnvHttpProxyFactory::initializeFromEnvironment):
        (WebKit::WebProcessMainQt):

2011-03-25  Brent Fulgham  <bfulgham@webkit.org>

        Correct project file missing $(WebKitVSPropsRedirectionDir)s
        after r81924.

        * win/WebKit2.vcproj: Restore lost $(WebKitVSPropsRedirectionDir)

2011-03-25  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [WK2] Consider .c files in the generate-forwarding-headers script
        https://bugs.webkit.org/show_bug.cgi?id=56680

        * Scripts/generate-forwarding-headers.pl:

2011-03-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81916 and r81917.
        http://trac.webkit.org/changeset/81916
        http://trac.webkit.org/changeset/81917
        https://bugs.webkit.org/show_bug.cgi?id=57071

        broke a test on platforms that do not have QuickTime installed
        (Requested by estes on #webkit).

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

2011-03-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=57069
        Add WKIconDatabase api to the project files, and expose accessor on WKContext.

        Project file stuffs:
        * GNUmakefile.am:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

        * Shared/API/c/WKBase.h:
        * UIProcess/API/C/WKAPICast.h:

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetIconDatabase):
        * UIProcess/API/C/WKContext.h:

        * UIProcess/API/C/WKIconDatabase.cpp: Added.
        (WKIconDatabaseGetTypeID):
        * UIProcess/API/C/WKIconDatabase.h: Added.

        * UIProcess/WebContext.h:
        (WebKit::WebContext::iconDatabase):

2011-03-24  Brent Fulgham  <bfulgham@webkit.org>

        Build correction.

        Disable the CA Layer stuff when building with Cairo.

        * win/WebKit2.vcproj:

2011-03-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=57058
        Hookup the UIProcess WebIconDatabase to a WebCore::IconDatabase as its implementation

        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::WebIconDatabase):
        (WebKit::WebIconDatabase::setDatabasePath): Create a new WebCore::IconDatabase and open it to this path.
        (WebKit::WebIconDatabase::retainIconForPageURL): Actually retain the url, using the impl.
        (WebKit::WebIconDatabase::releaseIconForPageURL): Actually release the url, using the impl.
        (WebKit::WebIconDatabase::setIconURLForPageURL): Actually set the url, using the impl.
        (WebKit::WebIconDatabase::setIconDataForIconURL): Actually set the data, using the impl.
        (WebKit::WebIconDatabase::getLoadDecisionForIconURL): Actually ask for a load decision to call back with.
        (WebKit::WebIconDatabase::performImport):
        (WebKit::WebIconDatabase::didImportIconURLForPageURL):
        (WebKit::WebIconDatabase::didImportIconDataForPageURL):
        (WebKit::WebIconDatabase::didChangeIconForPageURL):
        (WebKit::WebIconDatabase::didRemoveAllIcons):
        (WebKit::WebIconDatabase::didFinishURLImport): Notify all the pending callbacks what their load decisions
          are now that they're available.
        * UIProcess/WebIconDatabase.h:

        Add an IconDatabase logging channel:
        * Platform/Logging.cpp:
        (WebKit::initializeLogChannelsIfNecessary):
        * Platform/Logging.h:

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::setIconDatabasePath): Pass the new path on to the WebIconDatabase, possibly
          opening it.
        * UIProcess/WebContext.h:

2011-03-24  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r70748): latest nightly builds kills AC_QuickTime.js
        https://bugs.webkit.org/show_bug.cgi?id=49016

        Update objectContentType() implementation to handle the
        shouldPreferPlugInsForImages flag.

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

2011-03-24  Adam Roben  <aroben@apple.com>

        Start compiling LayerTreeHostCA on Windows

        Fixes <http://webkit.org/b/57060> WebKit2.vcproj should compile LayerTreeHostCA

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.cpp: Added.
        (WebKit::LayerTreeHostCA::platformInitialize):
        (WebKit::LayerTreeHostCA::scheduleLayerFlush):
        (WebKit::LayerTreeHostCA::platformInvalidate):
        (WebKit::LayerTreeHostCA::platformSizeDidChange):
        (WebKit::LayerTreeHostCA::platformForceRepaint):
        (WebKit::LayerTreeHostCA::platformDidPerformScheduledLayerFlush):
        Stubbed out.

        * win/WebKit2.vcproj: Added new files. Let VS reorder existing files.

        * win/WebKit2Apple.vsprops: Added WebProcess\WebPage\ca to the include path.

2011-03-24  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix.

        Remove reference to LayerTreeHostMac.h from WebFullScreenManagerMac.mm.

        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:

2011-03-24  Adam Roben  <aroben@apple.com>

        Split Mac-specific parts of LayerTreeHostCA into LayerTreeHostCAMac.mm

        Fixes <http://webkit.org/b/57046> LayerTreeHostMac's code should be shareable with Windows

        Reviewed by Anders Carlsson.

        * WebKit2.xcodeproj/project.pbxproj:

        * WebProcess/WebPage/ca/LayerTreeHostCA.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/ca/LayerTreeHostCA.mm.
        (WebKit::LayerTreeHostCA::LayerTreeHostCA): Moved some Mac-specific code to
        LayerTreeHostCAMac.mm.
        (WebKit::LayerTreeHostCA::~LayerTreeHostCA): Wrapped some Mac-specific code in
        PLATFORM(MAC).

        (WebKit::LayerTreeHostCA::invalidate):
        (WebKit::LayerTreeHostCA::sizeDidChange):
        (WebKit::LayerTreeHostCA::forceRepaint):
        Moved some Mac-specific code to LayerTreeHostCAMac.mm.

        (WebKit::LayerTreeHostCA::performScheduledLayerFlush): Renamed from
        flushPendingLayerChangesRunLoopObserverCallback. Moved some code from here...
        (WebKit::LayerTreeHostCA::didPerformScheduledLayerFlush): ...to here. Moved some
        Mac-specific code to LayerTreeHostCAMac.mm.

        * WebProcess/WebPage/ca/LayerTreeHostCA.h: Added new functions, wrapped some Mac-specific
        declarations in PLATFORM(MAC).

        * WebProcess/WebPage/ca/mac/LayerTreeHostCAMac.mm: Added.
        (WebKit::LayerTreeHostCA::platformInitialize):
        (WebKit::LayerTreeHostCA::scheduleLayerFlush):
        (WebKit::LayerTreeHostCA::platformInvalidate):
        (WebKit::LayerTreeHostCA::platformSizeDidChange):
        (WebKit::LayerTreeHostCA::platformForceRepaint):
        (WebKit::LayerTreeHostCA::flushPendingLayerChangesRunLoopObserverCallback):
        (WebKit::LayerTreeHostCA::platformDidPerformScheduledLayerFlush):
        Code was extracted from LayerTreeHostCA.cpp.

2011-03-24  Adam Roben  <aroben@apple.com>

        Rename LayerTreeHostMac to LayerTreeHostCA

        This is the first step toward sharing code with Windows.

        Fixes <http://webkit.org/b/57051>.

        Reviewed by Anders Carlsson.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create):
        Updated for rename.

        * WebProcess/WebPage/ca/LayerTreeHostCA.h: Renamed from Source/WebKit2/WebProcess/WebPage/mac/LayerTreeHostMac.h.
        * WebProcess/WebPage/ca/LayerTreeHostCA.mm: Renamed from Source/WebKit2/WebProcess/WebPage/mac/LayerTreeHostMac.mm.

2011-03-17  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKit2: Cancelling full screen early leaves full screen window up.
        https://bugs.webkit.org/show_bug.cgi?id=56589

        No new tests, as WebKitTestRunner does not currently support the new Full Screen API.

        Notify the UIProcess when it needs to tear down its layer hosting view, turn off
        the background layer when not in accelerated rendering mode and don't swap out 
        the web view unnecessarily 

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController beganExitFullScreenAnimation]): Check before swapping _webView.
        (-[WKFullScreenWindowController enterAcceleratedCompositingMode:]): Add the _layerHostingView
            to the full screen window's animationView, not its contentsView.
        (-[WKFullScreenWindowController exitAcceleratedCompositingMode]): Hide the background layer.
        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
        (WebKit::WebFullScreenManagerMac::setRootFullScreenLayer): If given a null rootLayer, tell
            the client to exit accelerated mode.

2011-03-24  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        WebKit2:Services menu item to convert selected Simplified/Traditional Chinese Text is not working.
        https://bugs.webkit.org/show_bug.cgi?id=56975
        <rdar://problem/8915066>
        
        Adding missing entry point to support Mac OS X services in WebKit2.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView readSelectionFromPasteboard:]): Added.
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::readSelectionFromPasteboard): Added.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Added synchronous
        message.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::readSelectionFromPasteboard): Added.

2011-03-24  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Dismissed reversion suggestion is incorrectly learned.
        https://bugs.webkit.org/show_bug.cgi?id=57039

        CorrectionPanel should always use [NSSpellChecker dismissCorrectionBubbleForView].
        [NSSpellChecker cancelCorrectionBubbleForView] is reserved for situation where correction panel
        is dismissed explicitly by ESC key or clicking the dimiss button. Misusing these causes
        incorrect automatic learning.

        * UIProcess/mac/CorrectionPanel.mm:
        (WebKit::CorrectionPanel::dismissInternal):

2011-03-24  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Add Trackpoint driver hack to support IBM trackpads
        https://bugs.webkit.org/show_bug.cgi?id=49830
        <rdar://problem/8705951>

        Copy code from WebKit1 to WebKit2 to handle initializing fake scrollbars so 
        IBM machines with a trackpad send us WM_VSCROLL and WM_HSCROLL messages.

        Listen for the WM_VSCROLL and WM_HSCROLL messages, and turn the values into
        ScrollDirection and ScrollGranularity, and send a scroll command to the
        WebProcess.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::scrollBy): Send a message to the WebProcess.
        * UIProcess/WebPageProxy.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::wndProc): Add WM_VSCROLL and WM_HSCROLL message handling.
        (WebKit::WebView::initialize): Call shouldInitializeTrackPointHack.
        (WebKit::WebView::onHorizontalScroll): Turn wParam into a ScrollDirection and ScrollGranularity. 
        (WebKit::WebView::onVerticalScroll): Ditto.
        (WebKit::WebView::shouldInitializeTrackPointHack): Check the registry for keys that indicate
            the machine has a IBM Trackpoint driver.
        * UIProcess/win/WebView.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scrollBy): Call scroll method.
        (WebKit::WebPage::scroll): Moved from WebPageMac and WebPageWin.
        (WebKit::WebPage::logicalScroll): Ditto.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Add a new scrollBy message. 
        * WebProcess/WebPage/mac/WebPageMac.mm: Remove scroll and logicalScroll, they are now in WebPage.cpp.
        * WebProcess/WebPage/win/WebPageWin.cpp: Ditto.

2011-03-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Dictionary text extraction is not correctly detecting word boundaries on bing.com
        <rdar://problem/9078569>
        https://bugs.webkit.org/show_bug.cgi?id=56995

        * Shared/DictionaryPopupInfo.cpp:
        (WebKit::DictionaryPopupInfo::encode):
        (WebKit::DictionaryPopupInfo::decode):
        * Shared/DictionaryPopupInfo.h:
        Add options dictionary.

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        Add path that can pass options through.

        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        (WebKit::WebContextMenuClient::lookUpInDictionary):
        Use the new performDictionaryLookupForSelection which can extract context
        if supported.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::characterRangeAtPositionForPoint):
        (WebKit::characterRangeAtPoint):
        Split functionality out of characterRangeAtPoint and into 
        characterRangeAtPositionForPoint to avoid doing duplicate work 
        if you already have the position.

        (WebKit::isPositionInRange):
        (WebKit::shouldUseSelection):
        Add predicate to determine if we should use the selection instead
        of expanding to find the word we are over.

        (WebKit::WebPage::performDictionaryLookupAtLocation):
        If available, use the surrounding paragraph as context to get better extraction
        and to get lexicographical information about the word. Also, clean up and use 
        editing APIs to make the code more concise and understandable.

        (WebKit::WebPage::performDictionaryLookupForSelection):
        Use similar logic as in performDictionaryLookupAtLocation to extract additional
        details from a selection for use in the dictionary popup.

        (WebKit::WebPage::performDictionaryLookupForRange):
        Pass options to WebProcess if available.

2011-03-24  Jon Lee  <jonlee@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Tabbing from the last focused field to a non-webpage element leaves the selection in a weird state
        <rdar://problem/8553962>

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setFocused): When the page loses focus, clear out any selection in the frame

2011-03-24  Brian Weinstein  <bweinstein@apple.com>

        Rubber-stamped by Sam Weinig.

        Fix a typo in the VK_LEFT case of performDefaultBehaviorForKeyEvent.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent): It should be a logical or,
            not a bitwise or.

2011-03-24  Jeff Miller  <jeffm@apple.com>

        Fix typo - USE(CF_NETWORK) should be USE(CFNETWORK).

        * WebProcess/InjectedBundle/win/InjectedBundleWin.cpp:
        (WebKit::InjectedBundle::setHostAllowsAnyHTTPSCertificate): USE(CF_NETWORK) should be USE(CFNETWORK)

2011-03-23  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Hook up new AppKit autocorrection UI with WK2.
        https://bugs.webkit.org/show_bug.cgi?id=56055
        <rdar://problem/8947463>

        Please see WebCore/ChangeLog for detail.

        The calls to AppKit are implemented in PageClientImpl. Other changes are necessary for the
        plumbing work.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::showCorrectionPanel):
        (WebKit::PageClientImpl::dismissCorrectionPanel):
        (WebKit::PageClientImpl::dismissCorrectionPanelSoon):
        (WebKit::PageClientImpl::recordAutocorrectionResponse):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView spellCheckerDocumentTag]):
        (-[WKView handleCorrectionPanelResult:]):
        * UIProcess/API/mac/WKViewPrivate.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::showCorrectionPanel):
        (WebKit::WebPageProxy::dismissCorrectionPanel):
        (WebKit::WebPageProxy::dismissCorrectionPanelSoon):
        (WebKit::WebPageProxy::recordAutocorrectionResponse):
        (WebKit::WebPageProxy::handleCorrectionPanelResult):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/CorrectionPanel.h: Added.
        (WebKit::CorrectionPanel::isShowing):
        * UIProcess/mac/CorrectionPanel.mm: Added.
        (correctionBubbleType):
        (WebKit::CorrectionPanel::CorrectionPanel):
        (WebKit::CorrectionPanel::~CorrectionPanel):
        (WebKit::CorrectionPanel::show):
        (WebKit::CorrectionPanel::dismiss):
        (WebKit::CorrectionPanel::dismissSoon):
        (WebKit::CorrectionPanel::dismissInternal):
        (WebKit::CorrectionPanel::recordAutocorrectionResponse):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::showCorrectionPanel):
        (WebKit::WebEditorClient::dismissCorrectionPanel):
        (WebKit::WebEditorClient::dismissCorrectionPanelSoon):
        (WebKit::WebEditorClient::recordAutocorrectionResponse):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::handleCorrectionPanelResult):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2011-03-23  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKit2: Need API to manage the Media Cache
        https://bugs.webkit.org/show_bug.cgi?id=56878
        <rdar://problem/9082503>

        Call through to HTMLMediaElement functions to manage the WebCore media cache.

        * WebProcess/MediaCache/WebMediaCacheManager.cpp:
        (WebKit::WebMediaCacheManager::getHostnamesWithMediaCache):
        (WebKit::WebMediaCacheManager::clearCacheForHostname):
        (WebKit::WebMediaCacheManager::clearCacheForAllHostnames):

2011-03-23  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Add WKBundleSetHostAllowsAnyHTTPSCertificate() for Windows
        https://bugs.webkit.org/show_bug.cgi?id=56972
        
        This is the WebKit2 equivalent to the WebKit1 API IWebMutableURLRequest::setAllowsAnyHTTPSCertificate().

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetHostAllowsAnyHTTPSCertificate): Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h: Added WKBundleSetHostAllowsAnyHTTPSCertificate().
        * WebProcess/InjectedBundle/InjectedBundle.h: Added setHostAllowsAnyHTTPSCertificate().
        * WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        (WebKit::InjectedBundle::setHostAllowsAnyHTTPSCertificate): Added, should never be called.
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp:
        (WebKit::InjectedBundle::setHostAllowsAnyHTTPSCertificate): Added, should never be called.
        * WebProcess/InjectedBundle/qt/InjectedBundleQt.cpp:
        (WebKit::InjectedBundle::setHostAllowsAnyHTTPSCertificate): Added, should never be called.
        * WebProcess/InjectedBundle/win/InjectedBundleWin.cpp:
        (WebKit::InjectedBundle::setHostAllowsAnyHTTPSCertificate): Added.

2011-03-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Roll out r81593 Need WebKit2 API for creating a page with a specific main frame name

        This API is not necessary.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/mac/WKView.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:]):
        (-[WKView initWithFrame:contextRef:]):
        (-[WKView initWithFrame:contextRef:pageGroupRef:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createMainFrame):
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):

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

        Reviewed by Andreas Kling.

        [WK2] Handle keyboard and mouse events on X11
        https://bugs.webkit.org/show_bug.cgi?id=56103

        Propagate keyboard and mouse events to the plugin
        as XEvent's.

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::initializeXEvent):
        (WebKit::xTimeStamp):
        (WebKit::xKeyModifiers):
        (WebKit::setCommonMouseEventFields):
        (WebKit::setXMotionEventFields):
        (WebKit::setXButtonEventFields):
        (WebKit::setXCrossingEventFields):
        (WebKit::NetscapePlugin::platformHandleMouseEvent):
        (WebKit::NetscapePlugin::platformHandleMouseEnterEvent):
        (WebKit::NetscapePlugin::platformHandleMouseLeaveEvent):
        (WebKit::setXKeyEventFields):
        (WebKit::NetscapePlugin::platformHandleKeyboardEvent):

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

        Reviewed by Sam Weinig.

        Connection::SyncMessageState::processIncomingMessage should ignore whether the message is sync or not
        https://bugs.webkit.org/show_bug.cgi?id=56954

        This is so we'll eventually be able to send sync messages that aren't processed immediately if the 
        destination is waiting for a reply to another synchronous message.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::SyncMessageState::processIncomingMessage):
        Only check for the DispatchMessageWhenWaitingForSyncReply flag.

        (CoreIPC::Connection::sendSyncMessage):
        Add both DispatchMessageWhenWaitingForSyncReply and SyncMessage to the message ID.

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::sendSync):        
        (CoreIPC::Connection::deprecatedSendSync):
        No need to add SyncMessage here anymore.

2011-03-23  Brian Weinstein  <bweinstein@apple.com>

        Qt Build Fix.

        * DerivedSources.pro:

2011-03-22  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Need API to manage the Media Cache
        https://bugs.webkit.org/show_bug.cgi?id=56878
        <rdar://problem/9082503>

        Project File Fun:
        * GNUmakefile.am:
        * WebKit2.pri:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Common.vsprops:
        * win/WebKit2Generated.make:
        
        Derived Sources and API fun:
        * DerivedSources.make:
        * DerivedSources.pro:
        * Platform/CoreIPC/MessageID.h:
        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        * UIProcess/API/C/WKAPICast.h:
        
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage): Add a case for MediaCache messages.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage): Ditto.
        
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext): Initialize the WebMediaCacheManagerProxy member variable.
        (WebKit::WebContext::~WebContext): Invalidate the WebMediaCacheManagerProxy.
        (WebKit::WebContext::disconnectProcess): Ditto.
        (WebKit::WebContext::didReceiveMessage): Add a case for MediaCache messages.
        * UIProcess/WebContext.h:
        (WebKit::WebContext::mediaCacheManagerProxy):

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetMediaCacheManager): Returns the context's WebMediaCacheManager.
        * UIProcess/API/C/WKContext.h:

        * UIProcess/API/C/WKMediaCacheManager.cpp: Added.
        (WKMediaCacheManagerGetTypeID): Returns the WebMediaCacheManagerProxy type.
        (WKMediaCacheManagerGetHostnamesWithMediaCache): Calls down to the WebMediaCacheManagerProxy.
        (WKMediaCacheManagerClearCacheForHostname): Ditto.
        (WKMediaCacheManagerClearCacheForAllHostnames): Ditto.
        * UIProcess/API/C/WKMediaCacheManager.h: Added.

        * UIProcess/WebMediaCacheManagerProxy.cpp: Added.
        (WebKit::WebMediaCacheManagerProxy::create):
        (WebKit::WebMediaCacheManagerProxy::WebMediaCacheManagerProxy):
        (WebKit::WebMediaCacheManagerProxy::~WebMediaCacheManagerProxy):
        (WebKit::WebMediaCacheManagerProxy::invalidate):
        (WebKit::WebMediaCacheManagerProxy::didReceiveMessage):
        (WebKit::WebMediaCacheManagerProxy::getHostnamesWithMediaCache): Call through to the WebProcess.
        (WebKit::WebMediaCacheManagerProxy::didGetHostnamesWithMediaCache): Process the WebProcess response,
            and call the callback.
        (WebKit::WebMediaCacheManagerProxy::clearCacheForHostname): Call through to the WebProcess.
        (WebKit::WebMediaCacheManagerProxy::clearCacheForAllHostnames): Call through to the WebProcess.
        * UIProcess/WebMediaCacheManagerProxy.h: Added.
        (WebKit::WebMediaCacheManagerProxy::clearContext):
        (WebKit::WebMediaCacheManagerProxy::type):
        * UIProcess/WebMediaCacheManagerProxy.messages.in: Added.

        * WebProcess/MediaCache: Added.
        * WebProcess/MediaCache/WebMediaCacheManager.cpp: Added.
        (WebKit::WebMediaCacheManager::shared):
        (WebKit::WebMediaCacheManager::WebMediaCacheManager):
        (WebKit::WebMediaCacheManager::didReceiveMessage):
        (WebKit::WebMediaCacheManager::getHostnamesWithMediaCache): Added a FIXME to call through to WebCore.
        (WebKit::WebMediaCacheManager::clearCacheForHostname): Ditto.
        (WebKit::WebMediaCacheManager::clearCacheForAllHostnames): Ditto.
        * WebProcess/MediaCache/WebMediaCacheManager.h: Added.
        * WebProcess/MediaCache/WebMediaCacheManager.messages.in: Added.

2011-03-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Add asynchronous load decision call to WebKit2 IconDatabase
        https://bugs.webkit.org/show_bug.cgi?id=56887

        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::getLoadDecisionForIconURL): In the future, get the actual load decision from the database.
          For now, always message "IconLoadNo" back to the WebProcess.
        * UIProcess/WebIconDatabase.h:
        * UIProcess/WebIconDatabase.messages.in:
        
        * WebProcess/IconDatabase/WebIconDatabaseProxy.cpp:
        (WebKit::WebIconDatabaseProxy::loadDecisionForIconURL): Message the UIProcess for the load decision.
        (WebKit::WebIconDatabaseProxy::receivedIconLoadDecision): Callback into WebCore with the received load decision.
        * WebProcess/IconDatabase/WebIconDatabaseProxy.h:
        * WebProcess/IconDatabase/WebIconDatabaseProxy.messages.in:

2011-03-23  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        REGRESSION: WK2: AX: PDF in Safari no longer accessible.
        https://bugs.webkit.org/show_bug.cgi?id=56849

        The WKView needs to know when to return the WKPDFView and when to return
        the remote web process connection.

        * UIProcess/API/mac/PDFViewController.h:
        (WebKit::PDFViewController::pdfView):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView accessibilityFocusedUIElement]):
        (-[WKView accessibilityHitTest:]):
        (-[WKView accessibilityAttributeValue:]):

2011-03-21  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=56798
        Wrap autorelease pools around calls that can have pathological memory growth on Membuster.  
        Only wrap the main runloop because some background threads are not expected to call into 
        objc and an autorelease pool could mask bugs.

        * Platform/mac/RunLoopMac.mm:
        (RunLoop::performWork):
        (RunLoop::TimerBase::timerFired):
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::flushPendingLayerChangesRunLoopObserverCallback):

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

        Reviewed by Sam Weinig.

        OBJECT element with DivX source is always downloaded
        https://bugs.webkit.org/show_bug.cgi?id=56879

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::getPluginInfoFromPropertyLists):
        Always try to split every element in the "WebPluginExtensions" array, since the DivX plug-in
        specifies multiple file extensions in a single element.
        
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::pluginSupportsExtension):
        Add a new helper function.

        (WebKit::WebFrameLoaderClient::objectContentType):
        If we can't find the MIME for an extension, explicitly check if there's a plugin that claims to
        handle the given extension.

2011-03-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Rename the synchronous icon database messages to be prefixed with "synchronous"

        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::synchronousIconDataForPageURL):
        (WebKit::WebIconDatabase::synchronousIconURLForPageURL):
        (WebKit::WebIconDatabase::synchronousIconDataKnownForIconURL):
        (WebKit::WebIconDatabase::synchronousLoadDecisionForIconURL):
        * UIProcess/WebIconDatabase.h:
        * UIProcess/WebIconDatabase.messages.in:

        * WebProcess/IconDatabase/WebIconDatabaseProxy.cpp:
        (WebKit::WebIconDatabaseProxy::synchronousIconForPageURL):

2011-03-22  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Anders Carlsson.

        Loading a new tab does not dismiss Lookup
        <rdar://problem/9138391> 

        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewDidMoveToWindow]):
        Hide the dictionary popup when moving the WKView out of a window.

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

        Reviewed by Sam Weinig.

        Microsoft Silverlight playback shows artifacts
        https://bugs.webkit.org/show_bug.cgi?id=56863
        <rdar://problem/9103136>

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::paint):
        If the plug-in is transparent, clear the dirty rect before painting.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::determineQuirks):
        Add the MakeTransparentIfBackgroundAttributeExists quirk for Silverlight plug-ins.

        * Shared/Plugins/PluginQuirks.h:
        Add MakeTransparentIfBackgroundAttributeExists quirk.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_SetValue):
        Handle NPPVpluginTransparentBool.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin):
        Initialize m_isTransparent to false.

        (WebKit::NetscapePlugin::setIsTransparent):
        Set m_isTransparent.

        (WebKit::NetscapePlugin::initialize):
        If the plug-in has the MakeTransparentIfBackgroundAttributeExists quirk, make it transparent
        if there's a 'background' attribute.

        (WebKit::NetscapePlugin::isTransparent):
        Add getter.

        * WebProcess/Plugins/Plugin.h:
        Add isTransparent().

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::paint):
        Always copy the plug-in backing store to the plug-in proxy backing store.

        (WebKit::PluginProxy::isTransparent):
        Add getter that should never be called.

        (WebKit::PluginProxy::update):
        Always copy the plug-in backing store to the plug-in proxy backing store.

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

        Reviewed by Sam Weinig.

        Crash when calling PluginProxy::evaluate on a destroyed plug-in
        https://bugs.webkit.org/show_bug.cgi?id=56848
        <rdar://problem/9168975>

        Return early if the NPObject doesn't exist anymore.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::evaluate):

2011-03-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        WebKit2: Cannot make a selection past the end of the visible page (no autoscrolling)
        <rdar://problem/8823874>
        https://bugs.webkit.org/show_bug.cgi?id=56847

        * Shared/mac/WebEventFactory.mm:
        (WebKit::currentMouseButton):
        (WebKit::mouseButtonForEvent):
        Add mouse button for mouseEnter/Exit events. [NSEvent buttonNumber] doesn't seem to give the right result
        for these events, but getting the currentMouseButton does work.

2011-03-21  Brady Eidson  <beidson@apple.com>

        Fix Mac release builds after https://bugs.webkit.org/show_bug.cgi?id=56783

        * Platform/mac/Logging.mac.mm:

2011-03-21  Brady Eidson  <beidson@apple.com>

        Reviewed by Brian Weinstein.

        https://bugs.webkit.org/show_bug.cgi?id=56783
        Actually hook up WebKit2 logging on Mac.

        * Platform/Logging.cpp:
        (WebKit::initializeLogChannel):
        * Platform/Logging.h:
        * Platform/mac/Logging.mac.mm: Added.
        (WebKit::initializeLogChannel):
 
       * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext): Initialize logging if necessary.

        * WebKit2.xcodeproj/project.pbxproj:

2011-03-21  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r81269): WebKit2 gets into an infinite recursion after an unhandled command key
        https://bugs.webkit.org/show_bug.cgi?id=56782
        <rdar://problem/9151993>

        * UIProcess/API/mac/PageClientImpl.mm: (WebKit::PageClientImpl::doneWithKeyEvent):
        Factored out code for resending an event and moved it to WKView.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView performKeyEquivalent:]): Don't zero out _keyDownEventBeingResent, it's easier
        to just do that in _resendKeyDownEvent:.
        (-[WKView keyDown:]): Ditto.
        (-[WKView _resendKeyDownEvent:]): Moved from PageClientImpl.mm. Added an assertion that we
        are not already resending an event - it would be too confusing if we ever had to do that,
        but looks like this never happens.

        * UIProcess/API/mac/WKViewInternal.h: Exposed _resendKeyDownEvent.

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

        Reviewed by Sam Weinig.

        QT plug-in fails to load contextual menu
        https://bugs.webkit.org/show_bug.cgi?id=56777
        <rdar://problem/8979033>

        Open a Carbon resource map and make it the current map when calling NP_Initialize.

        * Platform/Module.cpp:
        (WebKit::Module::Module):
        Initialize m_bundleResourceMap to -1.

        * Platform/Module.h:
        Add m_bundleResourceMap.

        * Platform/mac/ModuleMac.mm:
        (WebKit::Module::unload):
        Close the resource map.

        (WebKit::Module::bundleResourceMap):
        Open a resource map if necessary.

        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::tryLoad):
        Get the resource map and make it current before calling NP_Initialize.

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

        Reviewed by Sam Weinig.

        Plug-in process crashes if it fails to load a plug-in module
        https://bugs.webkit.org/show_bug.cgi?id=56775

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::initialize):
        If NetscapePlugin::create returns null, call removePluginControllerProxy with a null plug-in.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::removePluginControllerProxy):
        Remove an incorrect assertion. Don't invalidate the remote object map if the plug-in is null.

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

        Reviewed by Sam Weinig.

        QT plug-in loads controller at top of movie not bottom
        https://bugs.webkit.org/show_bug.cgi?id=56764
        <rdar://problem/8979037>

        Create a layer with geometryFlipped set and add the plug-in layer as a sublayer,
        matching WebKit1.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformPostInitialize):

2011-03-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2 needs preferences to change security knobs
        https://bugs.webkit.org/show_bug.cgi?id=56762

        Add preferences for WebSecurityEnabled, UniversalAccessFromFileURLsAllowed
        and FileAccessFromFileURLsAllowed.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetWebSecurityEnabled):
        (WKPreferencesGetWebSecurityEnabled):
        (WKPreferencesSetUniversalAccessFromFileURLsAllowed):
        (WKPreferencesGetUniversalAccessFromFileURLsAllowed):
        (WKPreferencesSetFileAccessFromFileURLsAllowed):
        (WKPreferencesGetFileAccessFromFileURLsAllowed):
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2011-03-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove old DrawingArea and LayerHostingView code from WKView.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView drawRect:]):
        (-[WKView hitTest:]):
        (-[WKView WebKit::]):

2011-03-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Need WebKit2 API for creating a page with a specific main frame name
        https://bugs.webkit.org/show_bug.cgi?id=56759

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        Add mainFrameName to creation parameters.

        * UIProcess/API/mac/WKView.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:]):
        (-[WKView initWithFrame:contextRef:]):
        (-[WKView initWithFrame:contextRef:pageGroupRef:]):
        (-[WKView initWithFrame:contextRef:pageGroupRef:mainFrameName:]):
        Add new initializer which takes a main frame name.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setMainFrameName):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        Store the main frame name for initialization/re-initialization.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createMainFrame):
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        Pass the name to main frame creation.

2011-03-20  Bill Budge  <bbudge@chromium.org>

        Reviewed by Adam Barth.

        Rename ThreadSafeShared to ThreadSafeRefCounted
        https://bugs.webkit.org/show_bug.cgi?id=56714

        No new tests. Exposes no new functionality.

        * Platform/CoreIPC/Connection.h:
        * Platform/WorkQueue.h:
        * Platform/win/WorkQueueWin.cpp:
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/ThreadLauncher.h:

2011-03-19  Anton D'Auria  <adauria@apple.com>

        Reviewed by Alexey Proskuryakov.

        ApplicationCacheGroup is not obsolete after being deleted via ApplicationCacheStorage::deleteEntriesForOrigin
        https://bugs.webkit.org/show_bug.cgi?id=56415

        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp: calling ApplicationCacheGroup::deleteCacheGroupsForOrigin
        instead of ApplicationCacheStorage::deleteEntriesForOrigin.
        (WebKit::WebApplicationCacheManager::deleteEntriesForOrigin):

2011-03-18  Sam Weinig  <sam@webkit.org>

        Attempt to fix the WinCairo build.

        * win/WebKit2.vcproj:

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

        Reviewed by Dan Bernstein.

        Empty gray page after going back from a PDF
        https://bugs.webkit.org/show_bug.cgi?id=56694
        <rdar://problem/8811854>

        Update m_frameHasCustomRepresentation when loading a page that's in the page cache.

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

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

        Reviewed by Sam Weinig.

        Crash when sending a sync message ends up invalidating the connection
        https://bugs.webkit.org/show_bug.cgi?id=56686
        <rdar://problem/9048781>

        Guard against a null client.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendSyncMessage):

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

        Reviewed by Benjamin Poulain.

        [Qt][WK2] Need a way to debug the web process after the UI process dies
        https://bugs.webkit.org/show_bug.cgi?id=56116

        Allow the web process to outlive it's parent process
        in debug builds if the QT_WEBKIT_KEEP_ALIVE_WEB_PROCESS
        environment variable is set.

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::QtWebProcess::setupChildProcess): Used getenv
        since the prctl call is already in a Linux-only block
        and the implementation in this file is a candidate
        for sharing across ports in the future.

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

        Reviewed by Anders Carlsson.

        Command-period does not stop load when page has focus in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=56601

        * UIProcess/API/mac/WKView.mm:
        (-[WKView doCommandBySelector:]): If called outside interpretKeyEvents,
        call through to super.
        (-[WKView insertText:]): Assert that we are inside interpretKeyEvents.
        (-[WKView unmarkText]): Ditto.
        (-[WKView setMarkedText:selectedRange:]): Ditto.
        (-[WKView _interceptKeyEvent:]): Set a flag to indicate we are inside
        interpretKeyEvents for use by the above.

2011-03-18  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=56425
        More groundwork for WebKit2 IconDatabase

        -Update the synchronous method names to be prefixed with "synchronous."
        -Add empty implementations for the asynchronous accessors.

        * WebProcess/IconDatabase/WebIconDatabaseProxy.cpp:
        (WebKit::WebIconDatabaseProxy::setEnabled):
        (WebKit::WebIconDatabaseProxy::synchronousIconForPageURL):
        (WebKit::WebIconDatabaseProxy::synchronousIconURLForPageURL):
        (WebKit::WebIconDatabaseProxy::synchronousIconDataKnownForIconURL):
        (WebKit::WebIconDatabaseProxy::synchronousLoadDecisionForIconURL):
        (WebKit::WebIconDatabaseProxy::supportsAsynchronousMode):
        (WebKit::WebIconDatabaseProxy::loadDecisionForIconURL):
        (WebKit::WebIconDatabaseProxy::iconDataForIconURL):
        * WebProcess/IconDatabase/WebIconDatabaseProxy.h:

2011-03-18  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        Fixed compilation after r80925.

        * GNUmakefile.am:
        * UIProcess/gtk/WebFullScreenManagerProxyGtk.cpp: Added.
        (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):
        * WebProcess/FullScreen/gtk/WebFullScreenManagerGtk.cpp: Added.
        (WebKit::WebFullScreenManagerGtk::WebFullScreenManagerGtk):
        (WebKit::WebFullScreenManager::create):
        (WebKit::WebFullScreenManagerGtk::setRootFullScreenLayer):
        (WebKit::WebFullScreenManagerGtk::beginEnterFullScreenAnimation):
        (WebKit::WebFullScreenManagerGtk::beginExitFullScreenAnimation):
        * WebProcess/FullScreen/gtk/WebFullScreenManagerGtk.h: Added.

2011-03-18  Alejandro G. Castro  <alex@igalia.com>

        Unreviewed, fixed compilation after r81208.

        * GNUmakefile.am:

2011-03-18  John Sullivan  <sullivan@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=56645
        Assertion fires when hidden Find-on-Page matches are encountered in WebKit2

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindIndicator):
        Bail out if the selection rect is empty, before trying to generate an appropriately-sized
        bitmap. (Previously it was bailing out afterwards, but encountering an assertion in debug
        builds along the way.)

2011-03-18  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Jon Honeycutt.

        <rdar://problem/9153929> PluginProcess fails to launch due to PluginProcessShim.dylib building for 64-bit only

        Fix a bogus change from r81392 that made PluginProcessShim.xcconfig import DebugRelease.xcconfig.
        As its name suggests, DebugRelease.xcconfig is only applicable for the debug and release configurations.
        It overrides the valid build architectures and also restricts the build to only the active architecture.
        
        * Configurations/PluginProcessShim.xcconfig: Import BaseTarget.xcconfig instead. This is what
        each target-specific .xcconfig file should import.

2011-03-17  Mark Rowe  <mrowe@apple.com>

        Fix the build.

        * WebKit2.xcodeproj/project.pbxproj:

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

        Reviewed by Sam Weinig.

        Implement PluginProcessProxy::setFullscreenWindowIsShowing
        https://bugs.webkit.org/show_bug.cgi?id=56618

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::PluginProcessProxy):
        Initialize m_fullscreenWindowIsShowing.

        (WebKit::PluginProcessProxy::didClose):
        if m_fullscreenWindowIsShowing is true, call exitFullscreen.

        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::getPluginProcessSerialNumber):
        Add helper function for getting a PSN for the plug-in process.

        (WebKit::PluginProcessProxy::makePluginProcessTheFrontProcess):
        Make the plug-in process the front process.

        (WebKit::PluginProcessProxy::makeUIProcessTheFrontProcess):
        Make the current process (the UI process) the front process.

        (WebKit::PluginProcessProxy::setFullscreenWindowIsShowing):
        Call enterFullscreen or exitFullscreen.

        (WebKit::PluginProcessProxy::enterFullscreen):
        Make the plug-in process the front process and hide the menu bar.

        (WebKit::PluginProcessProxy::exitFullscreen):
        Show the menu bar and if necessary make the UI process the front process.

        (WebKit::PluginProcessProxy::endModal):
        call makeUIProcessTheFrontProcess.

        (WebKit::PluginProcessProxy::applicationDidBecomeActive):
        Call makePluginProcessTheFrontProcess.

2011-03-17  Adam Roben  <aroben@apple.com>

        Make bidi text in <select> menus in WebKit2 on Windows match WebKit1

        Fixes <http://webkit.org/b/56614> 3 <select> bidi tests failing on Windows 7 Release
        (WebKit2 Tests)

        Reviewed by Sam Weinig.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::selectItemWritingDirectionIsNatural):
        (WebKit::WebChromeClient::selectItemAlignmentFollowsMenuWritingDirection):
        On Windows, return the same values we return in WebKit1.

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

        Reviewed by Sam Weinig.

        Implement PluginProcessProxy::setModalWindowIsShowing
        https://bugs.webkit.org/show_bug.cgi?id=56615

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::PluginProcessProxy):
        Initialize m_modalWindowIsShowing.

        (WebKit::PluginProcessProxy::didClose):
        If m_modalWindowIsShowing is true, we must call endModal.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (-[WKPlaceholderModalWindow _wantsUserAttention]):
        Add a WKPlaceholderModalWindow.

        (WebKit::PluginProcessProxy::setModalWindowIsShowing):
        Call beginModal or endModal depending on whether we're showing a modal window or not.

        (WebKit::PluginProcessProxy::beginModal):
        Create a fake window and start a nested run loop. Listen for NSApplicationWillBecomeActiveNotification notifications.

        (WebKit::PluginProcessProxy::endModal):
        Tear down the window and the run loop.

        (WebKit::PluginProcessProxy::applicationDidBecomeActive):
        Make sure that the plug-in process is frontmost.

2011-03-17  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adam Roben.

        Web page shouldn't swallow alt-key combinations on Windows
        https://bugs.webkit.org/show_bug.cgi?id=56612
        
        Make Alt+Left Arrow and Alt+Right Arrow go back and forward, but make
        sure any alt-key combinations bubble up to the client.

        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent): Make Alt+Left Arrow and Alt+Right Arrow go back and forward, ignore any other alt-key combinations.

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

        Reviewed by Sam Weinig.

        Send SetModalWindowIsShowing and SetFullscreenWindowIsShowing messages to the UI process
        https://bugs.webkit.org/show_bug.cgi?id=56610

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::FullscreenWindowTracker::FullscreenWindowTracker):
        Add fullscreen window tracker class.

        (WebKit::rectCoversAnyScreen):
        Return whether the given rect covers any screen.

        (WebKit::windowCoversAnyScreen):
        Return whether the given window covers any screen.

        (WebKit::FullscreenWindowTracker::windowShown):
        If we're showing a fullscreen window, call PluginProcess::setFullscreenWindowIsShowing.

        (WebKit::FullscreenWindowTracker::windowHidden):
        If we're hiding the last fullscreen window, call PluginProcess::setFullscreenWindowIsShowing.

        (WebKit::cocoaWindowShown):
        (WebKit::cocoaWindowHidden):
        (WebKit::carbonWindowShown):
        (WebKit::carbonWindowHidden):
        Call the window tracking functions.

        (WebKit::setModal):
        Call PluginProcess::setModalWindowIsShowing.

        (WebKit::PluginProcess::setModalWindowIsShowing):
        (WebKit::PluginProcess::setFullscreenWindowIsShowing):
        Send CoreIPC messages.

        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.messages.in:
        Add new messages.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::setModalWindowIsShowing):
        (WebKit::PluginProcessProxy::setFullscreenWindowIsShowing):
        Add stubs.

2011-03-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        Allow passing a certificate chain as a user message
        <rdar://problem/8951709>
        https://bugs.webkit.org/show_bug.cgi?id=56605

        * Shared/API/c/mac/WKCertificateInfoMac.h:
        * Shared/API/c/mac/WKCertificateInfoMac.mm:
        (WKCertificateInfoCreateWithCertficateChain):
        Added. Creates a WKCertificate from a certificate chain.

        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        (WebKit::UserMessageDecoder::baseDecode):
        Add encoding/decoding of WebCertificateInfo.

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

        Reviewed by Sam Weinig.

        Add PluginProcessShim hooks for when windows are shown and hidden
        https://bugs.webkit.org/show_bug.cgi?id=56597

        * Configurations/PluginProcessShim.xcconfig:
        Add HEADER_SEARCH_PATHS so we can find WebKitSystemInterface.h.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::cocoaWindowShown):
        (WebKit::cocoaWindowHidden):
        (WebKit::carbonWindowShown):
        (WebKit::carbonWindowHidden):
        (WebKit::setModal):
        (WebKit::PluginProcess::initializeShim):
        Add empty stubs.

        * PluginProcess/mac/PluginProcessShim.h:
        * PluginProcess/mac/PluginProcessShim.mm:
        (WebKit::beginModal):
        (WebKit::endModal):
        Keep a modal count and call setModal accordingly.

        (WebKit::shim_NSApplication_RunModalForWindow):
        (WebKit::shimModalDialog):
        (WebKit::shimAlert):
        Call beginModal/endModal.

        (WebKit::shimShowWindow):
        (WebKit::shimHideWindow):
        Call the shim functions.
        
        (WebKit::WebKitPluginProcessShimInitialize):
        Listen for notifications and call the necessary shim functions.

        * WebKit2.xcodeproj/project.pbxproj:
        Link the plug-in process shim with AppKit and QuartzCore and WKSI.

2011-03-17  Jeff Miller  <jeffm@apple.com>

        Use a consistent set of file patterns in the svn:ignore property for all .xcodeproj directories, specifically:
        
        *.mode*
        *.pbxuser
        *.perspective*
        project.xcworkspace
        xcuserdata

        * WebKit2.xcodeproj: Modified property svn:ignore.

2011-03-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WKErrors need the PeerCertificateChain for certificate errors
        <rdar://problem/8951784>
        https://bugs.webkit.org/show_bug.cgi?id=56592

        * Shared/WebCoreArgumentCoders.h:
        Special case encoding/decoding of ResourceErrors for the mac.

        * Shared/mac/PlatformCertificateInfo.h:
        * Shared/mac/PlatformCertificateInfo.mm:
        (WebKit::PlatformCertificateInfo::PlatformCertificateInfo):
        Add constructor that take the PeerCertificateChain as CFArrayRef.

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (CoreIPC::encodeResourceError):
        (CoreIPC::decodeResourceError):
        Add encode/decode for ResourceError using the underlying NSError
        and encoding/decoding as much of the userInfo as we know how to.
        Right now this includes all string values and the PeerCertificateChain.

2011-03-17  John Sullivan  <sullivan@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=56574
        Dealloc'ing a WKView can leave a stale reference to it in NSWindow

        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewWillMoveToWindow:]):
        Clear the outgoing window's growBoxOwner if it is this view.

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

        Rubber-stamped by John Sullivan.

        Rename PluginProcessShim.cpp to PluginProcessShim.mm.

        * PluginProcess/mac/PluginProcessShim.cpp: Removed.
        * PluginProcess/mac/PluginProcessShim.mm: Copied from PluginProcess/mac/PluginProcessShim.cpp.
        * WebKit2.xcodeproj/project.pbxproj:

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

        Reviewed by Darin Adler.

        Invalidate all NPObjects for a plug-in when that plug-in is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=56511
        <rdar://problem/8993491>

        Before this change, we would invalidate NPObjectProxy objects and delete NPObjectMessageReceiver
        objects when the last plug-in of a certain type was destroyed. Doing so caused us to hold on to memory
        which we don't need, and could also lead to crashes if the NPObjectMessageReceiver would get a message and
        tried to invoke it on a already deallocated NPObject.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::initialize):
        If we fail to initialize, call removePluginControllerProxy instead of having WebProcessConnection do so.

        (WebKit::PluginControllerProxy::destroy):
        Pass the plug-in to removePluginControllerProxy.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::removePluginControllerProxy):
        Call NPRemoteObjectMap::pluginDestroyed when the plug-in has been destroyed.

        (WebKit::WebProcessConnection::createPlugin):
        Don't call removePluginControllerProxy if the plug-in fails to initialize. PluginControllerProxy::initialize now
        takes care of doing this.

        * Shared/Plugins/NPObjectMessageReceiver.cpp:
        (WebKit::NPObjectMessageReceiver::NPObjectMessageReceiver):
        (WebKit::NPObjectMessageReceiver::~NPObjectMessageReceiver):
        * Shared/Plugins/NPObjectMessageReceiver.h:
        Remove m_shouldReleaseObjectWhenInvalidating, we now know that no NPObjects will have been deallocated
        by the time the NPObjectMessageReceiver is destroyed.

        (WebKit::NPObjectMessageReceiver::plugin):
        Add getter.
        
        * Shared/Plugins/NPObjectProxy.h:
        (WebKit::NPObjectProxy::plugin):
        Add getter.
        
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::NPRemoteObjectMap):
        Remove m_isInvalidating.

        (WebKit::NPRemoteObjectMap::npObjectProxyDestroyed):
        Simplify code.

        (WebKit::NPRemoteObjectMap::pluginDestroyed):
        Rename invalidate to pluginDestroyed. Only invalidate/delete objects that belong to the given plug-in.

        * Shared/Plugins/NPRemoteObjectMap.h:
        Remove m_isInvalidating.
        
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::removePluginProxy):
        Call NPRemoteObjectMap::pluginDestroyed when the plug-in has been destroyed.

2011-03-17  Oleg Romashin  <oleg.romashin@nokia.com>

        Reviewed by Anders Carlsson.

        Teach WebKit2 messages.py generator to ifdef headers include
        which are related to ifdef-ed methods/types
        https://bugs.webkit.org/show_bug.cgi?id=55658

        * Scripts/webkit2/messages.py:
        * Scripts/webkit2/messages_unittest.py:

2011-03-16  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Viewport no longer allows an auto value for "user-scalable"
        https://bugs.webkit.org/show_bug.cgi?id=55416

        Make the default value for userScalable be true.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::viewportAttributesForSize):

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

        Reviewed by Dan Bernstein.

        NPObjectProxy and NPObjectMessageReceiver objects should know their Plugin object
        https://bugs.webkit.org/show_bug.cgi?id=56506

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::windowScriptNPObject):
        (WebKit::PluginControllerProxy::pluginElementNPObject):
        (WebKit::PluginControllerProxy::evaluate):
        (WebKit::PluginControllerProxy::getPluginScriptableNPObject):
        * Shared/Plugins/NPObjectMessageReceiver.cpp:
        (WebKit::NPObjectMessageReceiver::create):
        (WebKit::NPObjectMessageReceiver::NPObjectMessageReceiver):
        (WebKit::NPObjectMessageReceiver::invoke):
        (WebKit::NPObjectMessageReceiver::invokeDefault):
        (WebKit::NPObjectMessageReceiver::getProperty):
        (WebKit::NPObjectMessageReceiver::setProperty):
        (WebKit::NPObjectMessageReceiver::construct):
        * Shared/Plugins/NPObjectMessageReceiver.h:
        * Shared/Plugins/NPObjectProxy.cpp:
        (WebKit::NPObjectProxy::create):
        (WebKit::NPObjectProxy::NPObjectProxy):
        (WebKit::NPObjectProxy::invalidate):
        (WebKit::NPObjectProxy::initialize):
        (WebKit::NPObjectProxy::invoke):
        (WebKit::NPObjectProxy::invokeDefault):
        (WebKit::NPObjectProxy::getProperty):
        (WebKit::NPObjectProxy::setProperty):
        (WebKit::NPObjectProxy::construct):
        * Shared/Plugins/NPObjectProxy.h:
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::createNPObjectProxy):
        (WebKit::NPRemoteObjectMap::registerNPObject):
        (WebKit::NPRemoteObjectMap::npVariantToNPVariantData):
        (WebKit::NPRemoteObjectMap::npVariantDataToNPVariant):
        * Shared/Plugins/NPRemoteObjectMap.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::pluginScriptableNPObject):
        (WebKit::PluginProxy::getWindowScriptNPObject):
        (WebKit::PluginProxy::getPluginElementNPObject):
        (WebKit::PluginProxy::evaluate):

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

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=54987 Crash beneath 
        WebPageProxy::viewWillStartLiveResize when resizing window after web process 
        crashed
        -and corresponding-
        <rdar://problem/9037685>

        Just need simple isValid() checks here. 
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeUIClient):
        (WebKit::WebPageProxy::viewWillStartLiveResize):
        (WebKit::WebPageProxy::viewWillEndLiveResize):

2011-03-16  Damian Kaleta  <dkaleta@apple.com>

        Reviewed by Kevin Decker.

        Add a user default that will force all plugins to opt in to non-executable data
        https://bugs.webkit.org/show_bug.cgi?id=56487
        <rdar://problem/9109095>

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::PluginProcessProxy):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::pluginNeedsExecutableHeap):

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

        Reviewed by Darin Adler.

        WK2: Need to propagate enhanced accessibility flag from UI -> web process
        https://bugs.webkit.org/show_bug.cgi?id=56379

        Support sending the enhanced accessibility flag between processes.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::setEnhancedAccessibility):
        * UIProcess/WebContext.h:
        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContet::platformInvalidateContext):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        (WebKit::WebContext::platformInvalidateContext):
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::platformInvalidateContext):
        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformInvalidateContext):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setEnhancedAccessibility):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2011-03-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make Structure creation require a JSGlobalData
        https://bugs.webkit.org/show_bug.cgi?id=56438

        Mechanical change to make all Structure creation use a JSGlobalData&.

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

2011-03-16  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        WebKit2: Sometimes Command-[ opens a new tab and loads the back page in it
        https://bugs.webkit.org/show_bug.cgi?id=56477
        <rdar://problem/8806664>

        * UIProcess/API/mac/PageClientImpl.mm: (WebKit::PageClientImpl::doneWithKeyEvent):
        Set NSApplication current event when re-dispatching a key event that returned from the web
        process unhandled. That way, code that looks at current event modifiers won't be confused.

2011-03-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Add WebKit2 API to figure out if an input or textarea was edited
        https://bugs.webkit.org/show_bug.cgi?id=56474

        Expose WKBundleNodeHandleGetHTMLInputElementLastChangeWasUserEdit and
        WKBundleNodeHandleGetHTMLTextAreaElementLastChangeWasUserEdit. Next time,
        I will work on giving these functions longer names.

        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleGetHTMLInputElementLastChangeWasUserEdit):
        (WKBundleNodeHandleGetHTMLTextAreaElementLastChangeWasUserEdit):
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::htmlInputElementLastChangeWasUserEdit):
        (WebKit::InjectedBundleNodeHandle::htmlTextAreaElementLastChangeWasUserEdit):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:

2011-03-16  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=56467
        IconDatabase-related crash seen in WK2 tests

        * WebProcess/IconDatabase/WebIconDatabaseProxy.cpp:
        (WebKit::WebIconDatabaseProxy::setIconDataForIconURL): The IconLoader might set a null data for an icon, so handle that case.

2011-03-16  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Loading an empty URL crashes
        https://bugs.webkit.org/show_bug.cgi?id=55501

        A null WKURLRef is created in the API of WebKit 2 when converting a null string. The code
        of WKPageLoadURL assume the WKPageRef is not null which causes crashes if it is.

        This patch uses the converter toWTFString() to pass from WKPageRef to WTFString. This converter
        ensure the returned string is a valid null string.

        Tested through the Qt API tests.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageLoadURL):
        * UIProcess/API/qt/tests/qgraphicswkview/tst_qgraphicswkview.cpp:
        (tst_QGraphicsWKView::loadEmptyUrl):
        * UIProcess/API/qt/tests/qwkpage/qwkpage.pro: Added.
        * UIProcess/API/qt/tests/qwkpage/tst_qwkpage.cpp: Added.
        (tst_QWKPage::init):
        (tst_QWKPage::cleanup):
        (tst_QWKPage::loadEmptyUrl):
        * UIProcess/API/qt/tests/tests.pro:

2011-03-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=56425
        WebKit2 icon database.

        Project file paperwork:
        * DerivedSources.make:
        * DerivedSources.pro:
        * GNUmakefile.am:
        * WebKit2.pri:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Common.vsprops:
        * Scripts/webkit2/messages.py: Special-case capitalization for messages that start with "URL" to be lowercased
          to "url" instead of "uRL".

        Add messaging-related stuff:
        * Platform/CoreIPC/MessageID.h:
        * UIProcess/WebIconDatabase.messages.in: Added.
        * WebProcess/IconDatabase/WebIconDatabaseProxy.messages.in: Added.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):

        Prep to make WebIconDatabase an API object:
        * Shared/APIObject.h:

        Add an "icon DB is enabled" flag to WebProcessCreationParameters:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:

        Add SPI for client apps to set the icon database path:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetIconDatabasePath):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/WebContext.h:
        (WebKit::WebContext::setIconDatabasePath):

        Hook up initialization, clearing, and messaging for the icon database:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::ensureWebProcess):
        (WebKit::WebContext::didReceiveMessage):
        (WebKit::WebContext::didReceiveSyncMessage):
        (WebKit::WebContext::iconDatabasePath):
        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformDefaultIconDatabasePath):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformDefaultIconDatabasePath):
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::platformDefaultIconDatabasePath):
        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformDefaultIconDatabasePath):

        Add the UIProcess-side IconDatabase. It will be the "actual database" as well as the API object:
        * UIProcess/WebIconDatabase.cpp: Added.
        (WebKit::WebIconDatabase::create):
        (WebKit::WebIconDatabase::~WebIconDatabase):
        (WebKit::WebIconDatabase::WebIconDatabase):
        (WebKit::WebIconDatabase::invalidate):
        (WebKit::WebIconDatabase::retainIconForPageURL):
        (WebKit::WebIconDatabase::releaseIconForPageURL):
        (WebKit::WebIconDatabase::setIconURLForPageURL):
        (WebKit::WebIconDatabase::setIconDataForIconURL):
        (WebKit::WebIconDatabase::iconDataForPageURL):
        (WebKit::WebIconDatabase::iconURLForPageURL):
        (WebKit::WebIconDatabase::iconDataKnownForIconURL):
        (WebKit::WebIconDatabase::loadDecisionForIconURL):
        (WebKit::WebIconDatabase::didReceiveMessage):
        (WebKit::WebIconDatabase::didReceiveSyncMessage):
        * UIProcess/WebIconDatabase.h: Added.
        (WebKit::WebIconDatabase::clearContext):
        (WebKit::WebIconDatabase::type):

        Add the WebProcess-side IconDatabaseProxy. It acts as the WebCore IconDatabase and operates via messaging:
        * WebProcess/IconDatabase: Added.
        * WebProcess/IconDatabase/WebIconDatabaseProxy.cpp: Added.
        (WebKit::WebIconDatabaseProxy::~WebIconDatabaseProxy):
        (WebKit::WebIconDatabaseProxy::WebIconDatabaseProxy):
        (WebKit::WebIconDatabaseProxy::isEnabled):
        (WebKit::WebIconDatabaseProxy::setEnabled):
        (WebKit::WebIconDatabaseProxy::iconForPageURL):
        (WebKit::WebIconDatabaseProxy::retainIconForPageURL):
        (WebKit::WebIconDatabaseProxy::releaseIconForPageURL):
        (WebKit::WebIconDatabaseProxy::iconURLForPageURL):
        (WebKit::WebIconDatabaseProxy::iconDataKnownForIconURL):
        (WebKit::WebIconDatabaseProxy::loadDecisionForIconURL):
        (WebKit::WebIconDatabaseProxy::setIconURLForPageURL):
        (WebKit::WebIconDatabaseProxy::setIconDataForIconURL):
        (WebKit::WebIconDatabaseProxy::urlImportFinished):
        (WebKit::WebIconDatabaseProxy::didReceiveMessage):
        * WebProcess/IconDatabase/WebIconDatabaseProxy.h: Added.

        Hook up initialization and messaging for the icon database proxy:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/WebProcess.h:

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

        Reviewed by Anders Carlsson.

        WebKit2: False SPOD cursor when context menu is open
        <rdar://problem/9029154>
        https://bugs.webkit.org/show_bug.cgi?id=56433

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showContextMenu):
        Update to match showPopupMenu idiomatically, and stop the responsivenessTimer
        since the act of showing the context menu could spin a nested runloop.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenu):
        * UIProcess/qt/WebContextMenuProxyQt.cpp:
        (WebKit::WebContextMenuProxyQt::showContextMenu):
        * UIProcess/win/WebContextMenuProxyWin.cpp:
        (WebKit::WebContextMenuProxyWin::showContextMenu):
        Move isEmpty() check to implementations, since we don't want to show
        this in any case, not just the one where we check it.

2011-03-15  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt][Symbian][WK2] Fix exporting and importing the WebProcessMainQt symbol
        https://bugs.webkit.org/show_bug.cgi?id=56417

        Use the Q_DECL_EXPORT and Q_DECL_IMPORT macros directly to make sure
        the symbol is always exported/imported.

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

2011-03-15  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (WebKit2): keygen element doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=56402
        <rdar://problem/9006545>

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        Added strings used by keygen.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm: Initialize a WebCore pointer to
        a function used by keygen.

2011-03-15  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser.

        WebKit2 part of <rdar://problem/9075624> Overlay scrollbars slow down PLT by 6%

        New WebKitystemInterface function to force the scrollbars to flash
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

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

        Reviewed by Sam Weinig.

        Make sure that NP_Shutdown is always the last NPP function called
        https://bugs.webkit.org/show_bug.cgi?id=56391
        <rdar://problem/8989902>

        Make sure to always increment the load count whenever a web process connection
        is opened to a plug-in process, and decrement it when the last web process connection
        goes away.

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::createWebProcessConnection):
        (WebKit::PluginProcess::startShutdownTimerIfNecessary):
        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        * Shared/Plugins/Netscape/NetscapePluginModule.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin):
        (WebKit::NetscapePlugin::~NetscapePlugin):

2011-03-15  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Adam Barth.

        [GTK] [WebKit2] The UIProcess never changes the mouse cursor
        https://bugs.webkit.org/show_bug.cgi?id=56333

        Add an implementation for WebView::addCursor for WebKit2 GTK+. This allows
        the cursor to change as the user mouses around the page. There is currently
        no test infrastructure to track cursor changes.

        * UIProcess/gtk/WebView.cpp:
        (WebKit::WebView::setCursor): Ported implementation from WebKit1.

2011-03-15  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin Adler.

        Introduce WTF_USE_EXPORT_MACROS, which will allow us to put shared library import/export
        info into the headers rather than in export symbol definition files, but disable it on 
        all platforms initially so we can deal with port build issues one port at a time.
        
        https://bugs.webkit.org/show_bug.cgi?id=27551

        * config.h:

2011-03-14  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        REGRESSION: Print preview is blank when selecting multiple pages per sheet
        https://bugs.webkit.org/show_bug.cgi?id=56341
        <rdar://problem/8991382>

        * UIProcess/API/mac/WKPrintingView.mm: (pageDidDrawToPDF): Don't reset latest expected
        callback number after receiving a different one. We only update preview after receiving
        the latest expected page data (and the assumption is that AppKit will ask for pages in
        natural order for N-up).

2011-03-14  Adam Roben  <aroben@apple.com>

        Make WKBundlePageCanHandleRequest return true for empty document URLs

        Reviewed by Sam Weinig.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::canHandleRequest): Return true for any URL schemes that are handled as
        empty documents, and defer to the platform for everything else.

        * WebProcess/WebPage/WebPage.h: Added platformCanHandleRequest.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformCanHandleRequest):
        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (WebKit::WebPage::platformCanHandleRequest):
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::platformCanHandleRequest):
        Renamed from canHandleRequest.

2011-03-14  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        CrashTracer: 60 crashes in WebProcess at com.apple.WebKit2: -[AccessibilityWebPageObject accessibilityHitTest:] + 248
        https://bugs.webkit.org/show_bug.cgi?id=56336

        Crash trace indicates a nil pointer access in one of these m_page->mainFrame()->coreFrame()->view()
        pointers.

        * WebProcess/WebPage/mac/AccessibilityWebPageObject.mm:
        (-[AccessibilityWebPageObject accessibilityHitTest:]):

2011-03-14  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        Provide API for creating WKImage from CGImageRef
        https://bugs.webkit.org/show_bug.cgi?id=56159

        Add function for creating a WKImage from CGImage data.
        * Shared/API/c/cg/WKImageCG.cpp:
        (WKImageCreateFromCGImage): Added. Creates a graphics context for the bitmap-backed image and draws into it. 
        * Shared/API/c/cg/WKImageCG.h:

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

        Reviewed by Adam Roben.

        [Qt][WK2]Unbreak InjectedBundle on Qt
        https://bugs.webkit.org/show_bug.cgi?id=54109

        Add API's to WKURL and WKString to satisfy
        WebKitTestRunner's needs.

        * Shared/API/c/WKString.cpp:
        (WKStringIsEqualToUTF8CStringIgnoringCase):
        * Shared/API/c/WKString.h:
        * Shared/API/c/WKURL.cpp:
        (WKURLCopyHostName):
        (WKURLCopyScheme):
        * Shared/API/c/WKURL.h:
        * Shared/WebString.h:
        (WebKit::WebString::equalToUTF8StringIgnoringCase):
        * Shared/WebURL.h: Added OwnPtr<KURL> member to be able
        to lazily parse the URL and store the result.
        (WebKit::WebURL::host):
        (WebKit::WebURL::protocol):
        (WebKit::WebURL::parseURLIfNecessary):
        * win/WebKit2.def: Revert the symbol exports that were
        needed to use KURL in WebKitTestRunner.

2011-03-14  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adam Roben.

        Add WKViewSetScrollOffsetOnNextResize() to C API on Windows
        https://bugs.webkit.org/show_bug.cgi?id=56340

        * UIProcess/API/C/win/WKView.cpp:
        (WKViewSetScrollOffsetOnNextResize): Added.
        * UIProcess/API/C/win/WKView.h: Added WKViewSetScrollOffsetOnNextResize().
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::onSizeEvent): Apply any scroll offset when setting the drawing area size.
        (WebKit::WebView::setScrollOffsetOnNextResize): Added.
        * UIProcess/win/WebView.h: Added setScrollOffsetOnNextResize().

2011-03-14  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben and Gavin Barraclough.

        FileSystemWin.cpp needs listDirectory() implementation
        https://bugs.webkit.org/show_bug.cgi?id=56331
        <rdar://problem/9126635>
        
        Move PathWalker down into WebCore, and call the PathWalker in WebCore
        (that now has a second argument, the pattern to take).

        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        (WebKit::PluginInfoStore::pluginPathsInDirectory):

2011-03-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        WebKit2: No icon shown for <input type=file>
        <rdar://problem/8988982>
        https://bugs.webkit.org/show_bug.cgi?id=54288

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::chooseIconForFiles):
        Add implementation for chooseIconForFiles which calls down to Icon::createIconForFiles.

2011-03-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/8762095> and https://bugs.webkit.org/show_bug.cgi?id=55172
        Need WK2 API to view/manage origins with LocalStorage

        Hookup the existing API stubs to the WebCore implementations:
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.cpp:
        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManager::deleteEntriesForOrigin):
        (WebKit::WebKeyValueStorageManager::deleteAllEntries):

2011-03-13  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/9127270> and https://bugs.webkit.org/show_bug.cgi?id=56282

        Pass the path along with creation parameters:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:

        Add SPI to set the path:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetLocalStorageDirectory):
        * UIProcess/API/C/WKContextPrivate.h:

        Pass the path along in the process creation parameters:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureWebProcess):
        (WebKit::WebContext::localStorageDirectory):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::setLocalStorageDirectory):

        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformDefaultLocalStorageDirectory):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformDefaultLocalStorageDirectory):
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::platformDefaultLocalStorageDirectory):
        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformDefaultLocalStorageDirectory):

        Include the path with settings updates, because WebCore needs it set on the Settings object:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::localStorageDirectory):

        Sandboxing stuff:
        * WebProcess/com.apple.WebProcess.sb:
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::initializeSandbox):

2011-03-12  Jer Noble  <jer.noble@apple.com>

        Reviewed by Mark Rowe.

        WebKit2: Build WKFullScreenWindowController cleanly in 32-bit.
        https://bugs.webkit.org/show_bug.cgi?id=56260

        Include <Carbon/Carbon.h> instead of <HIToolbox/MacApplication.h>.

        * UIProcess/mac/WKFullScreenWindowController.mm:

2011-03-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add ability to create a WKErrorRef
        <rdar://problem/9115768>
        https://bugs.webkit.org/show_bug.cgi?id=56279

        * Shared/API/c/cf/WKErrorCF.cpp: Added.
        (WKErrorCreateWithCFError):
        (WKErrorCopyCFError):
        * Shared/API/c/cf/WKErrorCF.h: Added.
        Add new API to create a WKErrorRef from a CFErrorRef
        and vice-versa.

        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:
        Add new files.

2011-03-13  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Brady Eidson.

        Make adjustMIMETypeIfNecessary use CFNetwork directly
        https://bugs.webkit.org/show_bug.cgi?id=55912

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Support for new WKSI functions.

2011-03-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        WebPageProxy cleanup
        https://bugs.webkit.org/show_bug.cgi?id=56267

        * UIProcess/WebPageProxy.cpp: Moved all Mac-only function implementations from
        here to WebPageProxyMac.mm.
        * UIProcess/WebPageProxy.h: Cleaned up #includes.
        * UIProcess/mac/WebPageProxyMac.mm: Moved all Mac-only function implementations
        here.
        (WebKit::WebPageProxy::updateWindowIsVisible):
        (WebKit::WebPageProxy::windowAndViewFramesChanged):
        (WebKit::WebPageProxy::getMarkedRange):
        (WebKit::WebPageProxy::characterIndexForPoint):
        (WebKit::WebPageProxy::firstRectForCharacterRange):
        (WebKit::WebPageProxy::writeSelectionToPasteboard):
        (WebKit::WebPageProxy::setDragImage):
        (WebKit::WebPageProxy::performDictionaryLookupAtLocation):
        (WebKit::WebPageProxy::interpretKeyEvent):
        (WebKit::WebPageProxy::sendComplexTextInputToPlugin):
        (WebKit::WebPageProxy::uppercaseWord):
        (WebKit::WebPageProxy::lowercaseWord):
        (WebKit::WebPageProxy::capitalizeWord):
        (WebKit::WebPageProxy::setSmartInsertDeleteEnabled):
        (WebKit::WebPageProxy::didPerformDictionaryLookup):
        (WebKit::WebPageProxy::registerWebProcessAccessibilityToken):
        (WebKit::WebPageProxy::registerUIProcessAccessibilityTokens):
        (WebKit::WebPageProxy::setComplexTextInputEnabled):

2011-03-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8949683> WebKit2: Drag image is offset when the page is scrolled down
        https://bugs.webkit.org/show_bug.cgi?id=56265

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::startDrag): Send the location in view coordinates rather than
        document coordinates.

2011-03-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        Fix a crash when dragging.

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::convertImageToBitmap): Retain the saved context.

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

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::startDrag): Fixed typo in a comment.

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

        Reviewed by Sam Weinig.

        Dragging image to desktop gives webloc instead of image file in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=56193

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::convertImageToBitmap): Added. Factored out from startDrag to
        make the startDrag code clearer.
        (WebKit::WebDragClient::startDrag): Streamlined code a bit.
        (WebKit::cachedImage): Added. Helper for function below.
        (WebKit::arrayForURLsWithTitles): Added. Helper for function below.
        (WebKit::WebDragClient::declareAndWriteDragImage): Added code to handle file
        promises and removed a log of uneeded code.
        (-[WKPasteboardFilePromiseOwner copyDropDirectory]): Added.
        (promisedDataClient): Added.
        (-[WKPasteboardOwner clearImage]): Added.
        (-[WKPasteboardOwner initWithImage:]): Added.
        (-[WKPasteboardOwner dealloc]): Added.
        (-[WKPasteboardOwner finalize]): Added.
        (-[WKPasteboardOwner pasteboard:provideDataForType:]): Added.
        (-[WKPasteboardOwner pasteboardChangedOwner:]): Added.
        (matchesExtensionOrEquivalent): Added.
        (-[WKPasteboardOwner namesOfPromisedFilesDroppedAtDestination:]): Added.
        Much of the new code above came from the WebKit1 drag code.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::dragEnded): Added call to Mac-only platformDragEnded.
        * WebProcess/WebPage/WebPage.h: Added Mac-only platformDragEnded and m_dragSource.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::setDragSource): Added.
        (WebKit::WebPage::platformDragEnded): Added.

2011-03-12  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit build.

        This involves hacking around some HIToolbox headers that do things of dubious correctness,
        and fixing the usual CGRect vs NSRect issues.
        
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController enterFullScreen:]): NSRect is not CGRect.
        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
        (WebKit::WebFullScreenManagerMac::beginExitFullScreenAnimation): Ditto.

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

        Reviewed by Sam Weinig.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::url):
        Get the URL from the loader, not from the document.

        (WebKit::WebFrame::suggestedFilenameForResourceWithURL):
        Return the correct suggested filename for the main resource.

        (WebKit::WebFrame::mimeTypeForResourceWithURL):
        Return the correct mime type for the main resource.

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

        Reviewed by Sam Weinig.

        Should be able to download a PDF to the Downloads folder
        https://bugs.webkit.org/show_bug.cgi?id=56256

        * UIProcess/API/C/WKPage.h:
        Add WKPageSaveDataToFileInDownloadsFolderCallback to the UI client.

        * UIProcess/API/mac/PDFViewController.h:
        * UIProcess/API/mac/PDFViewController.mm:
        (-[WKPDFView _applyPDFPreferences]):
        (-[WKPDFView _updatePreferences:]):
        Use new PDFViewController::page getter.

        (-[WKPDFView PDFViewSavePDFToDownloadFolder:]):
        Call PDFViewController::savePDFToDownloadsFolder.

        (WebKit::releaseCFData):
        (WebKit::PDFViewController::savePDFToDownloadsFolder):
        Create a WebData that wraps the CFData, then pass it along to
        WebPageProxy::saveDataToFileInDownloadsFolder.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::saveDataToFileInDownloadsFolder):
        Call WebUIClient::saveDataToFileInDownloadsFolder.

        (WebKit::WebUIClient::saveDataToFileInDownloadsFolder):
        * UIProcess/WebUIClient.h:
        Call the UI client callback function.

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

        Reviewed by Sam Weinig.

        WebData should be able to wrap already existing data
        https://bugs.webkit.org/show_bug.cgi?id=56254

        * Shared/WebData.h:
        (WebKit::WebData::createWithoutCopying):
        (WebKit::WebData::create):
        (WebKit::WebData::~WebData):
        (WebKit::WebData::bytes):
        (WebKit::WebData::size):
        (WebKit::WebData::WebData):
        (WebKit::WebData::fastFreeBytes):

2011-03-12  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        WebKit2: Initialize the WebFullScreenManagerProxy with a WKView
        https://bugs.webkit.org/show_bug.cgi?id=56250

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:contextRef:pageGroupRef:]): Call fullScreenManager()->setView(self).

2011-03-11  Jer Noble  <jer.noble@apple.com>

        Reviewed by Anders Carlsson.

        Add full screen animation code to WebFullScreenManager.
        https://bugs.webkit.org/show_bug.cgi?id=56220

        * WebProcess/FullScreen/WebFullScreenManager.cpp: .
        (WebKit::WebFullScreenManager::~WebFullScreenManager): Added.
        (WebKit::WebFullScreenManager::exitFullScreenForElement): Remove ASSERTs.
        (WebKit::WebFullScreenManager::willEnterFullScreen): Set the full screen renderer's background color.
        (WebKit::WebFullScreenManager::didEnterFullScreen): Ditto.
        (WebKit::WebFullScreenManager::willExitFullScreen): Ditto.
        (WebKit::WebFullScreenManager::didExitFullScreen): Ditto.
        * WebProcess/FullScreen/WebFullScreenManager.h: Make a few functions pure virtual to be implemented in a 
            concrete subclass.
        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.h: Added.
        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm: Added.
        (-[WebFullScreenManagerAnimationListener initWithManager:WebKit::began:finished:]): Listener for CAAnimations.
        (-[WebFullScreenManagerAnimationListener animationDidStart:]): Added.
        (-[WebFullScreenManagerAnimationListener animationDidStop:finished:]): Added.
        (-[WebFullScreenManagerAnimationListener invalidate]): Added.
        (WebKit::WebFullScreenManager::create): Now creates a WebFullScreenManagerMac.
        (WebKit::WebFullScreenManagerMac::create): Added.
        (WebKit::WebFullScreenManagerMac::WebFullScreenManagerMac): Added.
        (WebKit::WebFullScreenManagerMac::~WebFullScreenManagerMac): Added.
        (WebKit::WebFullScreenManagerMac::setRootFullScreenLayer): Set up the remote layer host.
        (WebKit::WebFullScreenManagerMac::beginEnterFullScreenAnimation): Create a CATransform3D
            which will animate the full screen renderer from its initial position to its final one.
        (WebKit::WebFullScreenManagerMac::beginExitFullScreenAnimation): Ditto.

2011-03-11  Jer Noble  <jer.noble@apple.com>

        Reviewed by Anders Carlsson.

        Hook up new WKFullScreenWindowController functions to WebFullScreenManagerProxy
        https://bugs.webkit.org/show_bug.cgi?id=56218

        * UIProcess/WebFullScreenManagerProxy.cpp:
        * UIProcess/mac/WebFullScreenManagerProxyMac.mm: Added.
        (WebKit::WebFullScreenManagerProxy::enterFullScreen): Call into WKFullScreenWindowController.
        (WebKit::WebFullScreenManagerProxy::exitFullScreen): Ditto.
        (WebKit::WebFullScreenManagerProxy::beganEnterFullScreenAnimation): Ditto.
        (WebKit::WebFullScreenManagerProxy::finishedEnterFullScreenAnimation): Ditto.
        (WebKit::WebFullScreenManagerProxy::beganExitFullScreenAnimation): Ditto.
        (WebKit::WebFullScreenManagerProxy::finishedExitFullScreenAnimation): Ditto.
        (WebKit::WebFullScreenManagerProxy::enterAcceleratedCompositingMode): Ditto.
        (WebKit::WebFullScreenManagerProxy::exitAcceleratedCompositingMode): Ditto.
        (WebKit::WebFullScreenManagerProxy::getFullScreenRect): Ditto.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView fullScreenWindowController]): Lazily instantiate a WKFullScreenWindowController.
        * UIProcess/API/mac/WKViewInternal.h:

2011-03-11  Jer Noble  <jer.noble@apple.com>

        Reviewed by Anders Carlsson.

        Add the WKFullScreenWindowController, mostly cribbed from WebKit's WebFullScreenController.

        [WebKit2] Implement a full screen window controller
        https://bugs.webkit.org/show_bug.cgi?id=56210

        * UIProcess/mac/WKFullScreenWindowController.h: Added.
        * UIProcess/mac/WKFullScreenWindowController.mm: Added.
        (-[WKFullScreenWindowController init]): Remove the _mediaEventListener.
        (-[WKFullScreenWindowController dealloc]): Make sure to cancel previous async requests.
        (-[WKFullScreenWindowController windowDidLoad]): Remove the Tiger protection.
        (-[WKFullScreenWindowController webView]): Type change.
        (-[WKFullScreenWindowController setWebView:]): Type change.
        (-[WKFullScreenWindowController applicationDidResignActive:]): Case changes.
        (-[WKFullScreenWindowController applicationDidChangeScreenParameters:]): Case changes.
        (-[WKFullScreenWindowController enterFullScreen:]): Removed most of the animation code
            which will reappear in WebFullScreenManager.
        (-[WKFullScreenWindowController beganEnterFullScreenAnimation]): Added.
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]): Added.
        (-[WKFullScreenWindowController exitFullScreen]): Ditto to enterFullScreen.
        (-[WKFullScreenWindowController beganExitFullScreenAnimation]): Added.
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]): Added.
        (-[WKFullScreenWindowController enterAcceleratedCompositingMode:WebKit::]): Set up the
            layer tree host.
        (-[WKFullScreenWindowController exitAcceleratedCompositingMode]): Tear down same.
        (-[WKFullScreenWindowController getFullScreenRect:WebCore::]): Added.
        (-[WKFullScreenWindowController _updateMenuAndDockForFullScreen]): Case changes.
        (-[WKFullScreenWindowController _disableIdleDisplaySleep]): Ditto.
        (-[WKFullScreenWindowController _enableIdleDisplaySleep]): Ditto.
        (-[WKFullScreenWindowController _disableIdleSystemSleep]): Ditto.
        (-[WKFullScreenWindowController _enableIdleSystemSleep]): Ditto.
        (-[WKFullScreenWindowController _enableTickleTimer]): Ditto.
        (-[WKFullScreenWindowController _disableTickleTimer]): Ditto.
        (-[WKFullScreenWindowController _tickleTimerFired]): Ditto.
        (-[WKFullScreenWindowController _updatePowerAssertions]): Use _isPlaying ivar.
        (-[WKFullScreenWindowController _manager]): Added.
        (-[WKFullScreenWindowController _requestExit]): Case changes.
        (-[WKFullScreenWindowController _requestExitFullScreenWithAnimation:]): Ditto.
        (-[WKFullScreenWindowController _swapView:with:]): Added.
        (-[WKFullScreenWindowController _fullScreenWindow]): Case changes.
        (-[WKFullScreenWindow initWithContentRect:styleMask:backing:defer:]): Geometry no
            longer needs to be flipped.
        (-[WKFullScreenWindow cancelOperation:]): Case changes.

2011-03-11  Jer Noble  <jer.noble@apple.com>

        Reviewed by Anders Carlsson.

        Create new interface stubs to support full screen mode in WebKit2.

        WebKit2: Plumb new full screen animation APIs through WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=55993

        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::WebFullScreenManagerProxy): Added.
        (WebKit::WebFullScreenManagerProxy::invalidate): Clear m_webView.
        (WebKit::WebFullScreenManagerProxy::setWebView): Set m_webView.
        (WebKit::WebFullScreenManagerProxy::beginEnterFullScreenAnimation): Added.
        (WebKit::WebFullScreenManagerProxy::beginExitFullScreenAnimation): Added.
        (WebKit::WebFullScreenManagerProxy::beganEnterFullScreenAnimation): Added stub.
        (WebKit::WebFullScreenManagerProxy::finishedEnterFullScreenAnimation): Added stub.
        (WebKit::WebFullScreenManagerProxy::beganExitFullScreenAnimation): Added stub.
        (WebKit::WebFullScreenManagerProxy::finishedExitFullScreenAnimation): Added stub.
        (WebKit::WebFullScreenManagerProxy::enterAcceleratedCompositingMode): Added stub.
        (WebKit::WebFullScreenManagerProxy::exitAcceleratedCompositingMode): Added stub.
        (WebKit::WebFullScreenManagerProxy::getFullScreenRect): Added stub.
        * UIProcess/WebFullScreenManagerProxy.h:
        * UIProcess/WebFullScreenManagerProxy.messages.in: Added new message definitions.
        * UIProcess/WebPageProxy.cpp: Moved include of WebFullScreenManagerProxy.h into source file.
        * UIProcess/WebPageProxy.h: Ditto.
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::element): Added.
        (WebKit::WebFullScreenManager::supportsFullScreen): Send message through WebPage.
        (WebKit::WebFullScreenManager::enterFullScreenForElement): Ditto.
        (WebKit::WebFullScreenManager::exitFullScreenForElement): Ditto.
        (WebKit::WebFullScreenManager::beganEnterFullScreenAnimation): Added..
        (WebKit::WebFullScreenManager::finishedEnterFullScreenAnimation): Added.
        (WebKit::WebFullScreenManager::beganExitFullScreenAnimation): Added.
        (WebKit::WebFullScreenManager::finishedExitFullScreenAnimation): Added.
        (WebKit::WebFullScreenManager::setRootFullScreenLayer): Added stub.
        (WebKit::WebFullScreenManager::getFullScreenRect): Added.
        (WebKit::WebFullScreenManager::beginEnterFullScreenAnimation): Added stub.
        (WebKit::WebFullScreenManager::beginExitFullScreenAnimation): Added stub.
        * WebProcess/FullScreen/WebFullScreenManager.h:
        * WebProcess/FullScreen/WebFullScreenManager.messages.in: Added new message definitions.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::setRootFullScreenLayer): Added.
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2011-03-11  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        Support encoding /decoding WebData in usermessages
        https://bugs.webkit.org/show_bug.cgi?id=56158

        Added encoding/decoding for APIObject::TypeData
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        (WebKit::UserMessageDecoder::baseDecode):

2011-03-11  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        Add api for "remove" to WKMutableDictionary
        https://bugs.webkit.org/show_bug.cgi?id=56157

        * Shared/API/c/WKMutableDictionary.cpp:
        (WKDictionaryRemoveItem): Added; call remove on MutableDictionary impl.
        * Shared/API/c/WKMutableDictionary.h:
        * Shared/MutableDictionary.cpp:
        (WebKit::MutableDictionary::remove): Added; call remove on the underlying hashmap.
        * Shared/MutableDictionary.h:

2011-03-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80899 and r80912.
        http://trac.webkit.org/changeset/80899
        http://trac.webkit.org/changeset/80912
        https://bugs.webkit.org/show_bug.cgi?id=56236

        Caused animation tests to crash on Snow Leopard WebKit2
        (Requested by rniwa on #webkit).

        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::create):
        (WebKit::ShareableBitmap::createShareable):
        (WebKit::ShareableBitmap::resize):
        * Shared/ShareableBitmap.h:
        (WebKit::ShareableBitmap::numBytesForSize):
        (WebKit::ShareableBitmap::sizeInBytes):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::update):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::didUpdate):
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::~DrawingAreaImpl):
        (WebKit::DrawingAreaImpl::sendDidUpdateBackingStoreState):
        (WebKit::DrawingAreaImpl::didUpdate):
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
        (WebKit::DrawingAreaImpl::display):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/SharedMemoryCache.cpp: Removed.
        * WebProcess/WebPage/SharedMemoryCache.h: Removed.
        * win/WebKit2.vcproj:

2011-03-11  Brian Weinstein  <bweinstein@apple.com>

        Windows build fix. Add SharedMemoryCache to the vcproj.

        * win/WebKit2.vcproj:

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

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=56222
        A window remains frozen if web process crashes during printing

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setComplexTextInputEnabled):
        * UIProcess/WebPageProxy.h:
        Moved setAutodisplay code into WKPrintingView.

        * UIProcess/API/mac/WKPrintingView.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView printOperationWithPrintInfo:forFrame:]):
        Keep a reference to the actual WKView, so that we can manipulate how it displays, even if
        page goes away.

        * UIProcess/API/mac/WKPrintingView.mm:
        (-[WKPrintingView initWithFrameProxy:WebKit::view:]):
        (-[WKPrintingView _setAutodisplay:]):
        (-[WKPrintingView _suspendAutodisplay]):
        (-[WKPrintingView _delayedResumeAutodisplayTimerFired]):
        Move setAutodisplay here.

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

        Reviewed by Sam Weinig.

        Add a shared memory cache to the web process
        https://bugs.webkit.org/show_bug.cgi?id=56232

        Add a very simple shared memory cache to the web process, so that we don't have to allocate and
        free memory over and over when painting.

        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::create):
        (WebKit::ShareableBitmap::createShareable):
        (WebKit::ShareableBitmap::resize):
        * Shared/ShareableBitmap.h:
        (WebKit::ShareableBitmap::numBytesNeededForBitmapSize):
        (WebKit::ShareableBitmap::sizeInBytes):
        Rename numBytesForSize to numBytesNeededForBitmapSize.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::update):
        Always send back a DidUpdate message, even if we didn't use the update info.
        This is needed so that the web process knows when the UI process is done with the shared memory inside
        the update info struct.

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

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::didUpdate):
        * WebProcess/WebPage/DrawingArea.messages.in:
        DidUpdate now takes a boolean.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::sharedMemoryCache):
        Add shared memory cache.

        (WebKit::DrawingAreaImpl::~DrawingAreaImpl):
        Return the shared memory to the cache.

        (WebKit::DrawingAreaImpl::sendDidUpdateBackingStoreState):
        display now takes an extra boolean.

        (WebKit::DrawingAreaImpl::didUpdate):
        Return the shared memory to the cache.

        (WebKit::DrawingAreaImpl::display):
        If useSharedMemoryCache is true, get shared memory from the cache.

        * WebProcess/WebPage/SharedMemoryCache.cpp: Added.
        (WebKit::SharedMemoryCache::acquireSharedMemory):
        If the memory we currently hold on to is big enough, return it.

        (WebKit::SharedMemoryCache::releaseSharedMemory):
        If we're already holding on to shared memory, evict it if the returned
        shared memory object is bigger than the one we currently hold.

        (WebKit::SharedMemoryCache::clearCacheTimerFired):
        Null out the shared memory object.

2011-03-11  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        Crash calling WebContext::clearResourceCaches(InMemoryResourceCachesOnly) before the Web
        Process has finished launching.
        https://bugs.webkit.org/show_bug.cgi?id=56208

        Only send the message if the Web Process is valid.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::clearResourceCaches):

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

        Reviewed by Dan Bernstein.

        Don't paint more than 60 times per second
        https://bugs.webkit.org/show_bug.cgi?id=56206
        <rdar://problem/9085989>

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        Initialize m_lastDisplayTime to 0. Change the display timer to call displayTimerFired.

        (WebKit::DrawingAreaImpl::didUpdate):
        Call displayTimerFired instead of display.

        (WebKit::DrawingAreaImpl::displayTimerFired):
        If we're asked to paint again less than 1/60th of a second after we've already painted,
        defer painting.

        (WebKit::DrawingAreaImpl::display):
        Update m_lastDisplayTime.

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

        Reviewed by Alice Liu.

        <rdar://problem/9120161> WKPageRestoreFromSessionState does not set the pending API request URL.

        * UIProcess/cf/WebPageProxyCF.cpp:
        (WebKit::WebPageProxy::restoreFromSessionStateData): If we're navigating to a back/forward item
        as part of the restoration, call setPendingAPIRequestURL. When there's a provisional URL this will
        be done by our call to loadURL elsewhere in the function.

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

        Reviewed by Jon Honeycutt.

        WebKit2 UI process crashes if web process crashes while computing page rects for printing
        https://bugs.webkit.org/show_bug.cgi?id=56160
        <rdar://problem/9027410>

        * UIProcess/API/mac/WKPrintingView.mm:
        (-[WKPrintingView _suspendAutodisplay]): Added a null check for page, matching one that
        we have when resuming autodisplay.
        (-[WKPrintingView _delayedResumeAutodisplayTimerFired]): Added a FIXME.
        (pageDidComputePageRects): Sanitize results coming from the web process (and avoid crashing
        when there is a communication error, so results are all null).
        (-[WKPrintingView knowsPageRange:]): If there is no page any more, we can't tell how many
        pages it had.
        (-[WKPrintingView rectForPage:]): Handle the case where we are neither calculating pages
        nor knowing them, as it happens when the web process crashes.        

2011-03-10  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Sam Weinig.

        Part of <rdar://problem/8728860> WebKit2 needs to be made localizable

        The presence of CFBundleDevelopmentRegion in the application's Info.plist prevents
        the default localization that we set during launch from being respected.

        * PluginProcess/Info.plist: Remove CFBundleDevelopmentRegion.
        * WebProcess/Info.plist: Ditto.

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

        Build for WebKit2 GTK+ after r80714.

        * GNUmakefile.am: Update source list.
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp: 
        (WebKit::x11Display): Add missing semicolon.

2011-03-10  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (WebKit2): VoiceOver focus no longer follows keyboard focus
        https://bugs.webkit.org/show_bug.cgi?id=55959

        NSApplication has to return the focused element within the app in order
        for NSAccessibilityHandleFocusChanged() to work. The default implementation
        relies on keyWindow. Consequently, in WK2, the WebProcess must override that method
        to return the appropriate focused element within the WebProcess, since
        there is no keyWindow.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/mac/AccessibilityWebPageObject.mm:
        (-[AccessibilityWebPageObject accessibilityFocusedUIElement]):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::focusedWebPage):
        * WebProcess/WebProcess.h:
        * WebProcess/mac/NSApplicationOverride.mm: Added.
        (-[NSApplication accessibilityFocusedUIElement]):

2011-03-10  Oleg Romashin  <romaxa@gmail.com>

        Reviewed by Andreas Kling.

        Make Qt port compiling with ENABLE_PLUGIN_PROCESS=1, part3
        Solving conflict of Qt and Xlib includes

        * Shared/Plugins/NPIdentifierData.cpp:
        * Shared/Plugins/NPIdentifierData.h:
        * Shared/Plugins/NPObjectProxy.cpp:
        * Shared/Plugins/NPVariantData.h:

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

        Reviewed by Mark Rowe.

        - Fix plugins in release and production builds.

        * WebKit2.xcodeproj/project.pbxproj:
        Make sure to base the PluginProcess target on the correct xcconfig file
        in all configurations.

2011-03-09  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Plumb through settings for accelerated drawing for canvas
        https://bugs.webkit.org/show_bug.cgi?id=56039

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:

2011-03-10  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Oliver Hunt and Brian Weinstein.

        WebKit2: Need a way to clear only the in-memory resource caches
        https://bugs.webkit.org/show_bug.cgi?id=56022

        Add a parameter to WKContextClearResourceCaches to specify whether to clear all the caches
        or just the memory caches.

        * Shared/ResourceCachesToClear.h: Added.
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toResourceCachesToClear):

        * UIProcess/API/C/WKContext.cpp:
        (WKContextClearResourceCaches):
        Add the new parameter.
        * UIProcess/API/C/WKContext.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::clearResourceCaches):
        Ditto.
        * UIProcess/WebContext.h:

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::clearResourceCaches):
        Pass the new parameter through to the platform-specific functions.
        * WebProcess/WebProcess.h:
        Add the new parameter and give it a default of AllResourceCaches.
        * WebProcess/WebProcess.messages.in:
        Ditto.
        * WebProcess/gtk/WebProcessGtk.cpp:
        (WebKit::WebProcess::platformClearResourceCaches):
        Ditto.
        * WebProcess/qt/WebProcessQt.cpp:
        (WebKit::WebProcess::platformClearResourceCaches):
        Ditto.
        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformClearResourceCaches):
        When told to clear only the in-memory caches, return early so as not to clear the CFNetwork
        disk cache.
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformClearResourceCaches):
        Ditto.

        * WebKit2.xcodeproj/project.pbxproj:
        Add ResourceCachesToClear.h
        * win/WebKit2.vcproj:
        Ditto.

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

        Reviewed by Adam Roben.

        WKViewRegisterEditCommandCallback should use WKViewUndoType
        https://bugs.webkit.org/show_bug.cgi?id=56120

        * UIProcess/API/C/win/WKView.h: Change undoOrRedo parameter in WKViewRegisterEditCommandCallback to be WKViewUndoType.

2011-03-10  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Kenneth Rohde Christiansen.

        Tiled backing store's delegated scroll request uses incorrect convention
        https://bugs.webkit.org/show_bug.cgi?id=56011

        Adapt all of the internal API to match the delta to point
        conversion at the WebCore side.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::pageDidRequestScroll):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::pageDidRequestScroll):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::delegatedScrollRequested):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::pageDidRequestScroll):
        * WebProcess/WebPage/WebPage.h:

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

        Reviewed by Andreas Kling.

        [WK2] Make non-transparent windowless plugins paint on X11
        https://bugs.webkit.org/show_bug.cgi?id=55660

        Implement painting for non-transparent windowless X11 plugins.
        The essence of the logic has been adapted from WebCore.
        The implementation is stubbed for GTK and working only on Qt
        but it should be really easy to finish it for GTK.

        * WebKit2.pro:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue): Handle X11 specific values that are necessary.
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin): Initialize the X11 specific
        members that has been added.
        (WebKit::NetscapePlugin::callSetWindow): Always set the x and y coordinates
        of the NP_Window to 0 on X11 since we are using a backings store as the
        painting area for the plugin.
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/gtk/NetscapePluginGtk.cpp: Removed in favour
        of a common implementation for X11.
        * WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp: Ditto.
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp: Added.
        (WebKit::getPluginDisplay):

        Platform specific static getters.
        (WebKit::x11Display):
        (WebKit::displayDepth):
        (WebKit::rootWindowID):
        (WebKit::x11Screen):

        (WebKit::NetscapePlugin::platformPostInitialize): Set up the visual
        settings and the colormap for the plugin.
        (WebKit::NetscapePlugin::platformDestroy):
        (WebKit::NetscapePlugin::platformInvalidate): Remained stub.
        (WebKit::NetscapePlugin::platformGeometryDidChange): Create a new
        pixmap that fits the geometry.
        (WebKit::NetscapePlugin::platformPaint): Propagate a paint event
        to the plugin, sync with it if necessary and draw the pixmap to
        the screen.
        (WebKit::toNP): Remained stub.
        (WebKit::NetscapePlugin::platformHandleMouseEvent): Remained stub.
        (WebKit::NetscapePlugin::platformHandleWheelEvent): Remained stub.
        (WebKit::NetscapePlugin::platformSetFocus): Remained stub.
        (WebKit::NetscapePlugin::platformHandleMouseEnterEvent): Remained stub.
        (WebKit::NetscapePlugin::platformHandleMouseLeaveEvent): Remained stub.
        (WebKit::NetscapePlugin::platformHandleKeyboardEvent): Remained stub.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin): Hack. Inject wmode=opaque
        key-value pair to the plugin parameters to force Flash to act in
        non-transparent windowless mode. Qt also doing this in WebCore.

2011-03-09  Peter Kasting  <pkasting@google.com>

        Reviewed by Mihai Parparita.

        Unify Windows version checks.
        https://bugs.webkit.org/show_bug.cgi?id=55979

        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::WebPageProxy::standardUserAgent):

2011-03-09  Adele Peterson  <adele@apple.com>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=56068
        <rdar://problem/9058245> WebKit2: Can't uncheck 'Spelling and Grammar' contextual items

        * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::contextMenuItemSelected):
        Add cases for ContextMenuItemTagCorrectSpellingAutomatically, ContextMenuItemTagCheckSpellingWhileTyping, 
        and ContextMenuItemTagCheckGrammarWithSpelling

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

        Reviewed by Dan Bernstein.

        Frequent crashes when printing in WebPageProxy::setAutodisplay
        https://bugs.webkit.org/show_bug.cgi?id=56057
        <rdar://problem/9053290>

        * UIProcess/API/mac/WKPrintingView.mm: (-[WKPrintingView _delayedResumeAutodisplayTimerFired]):
        Null check the page, there is no reason for it to still exist.

2011-03-09  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction.

        * UIProcess/DrawingAreaProxy.messages.in: Exclude the other
          method using LayerTreeContext for non-accelerated composition case.

2011-03-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Change plugins to use their own executable on Mac OS X
        https://bugs.webkit.org/show_bug.cgi?id=55991

        * Configurations/PluginProcess.xcconfig: Copied from Source/WebKit2/Configurations/WebProcess.xcconfig.
        * PluginProcess/Info.plist: Copied from Source/WebKit2/WebProcess/Info.plist.
        Add files necessary for adding PluginProcess.app.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        Launch the PluginProcess.app when launching a plugin process.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new executable and new files, removes some unneeded copying
        and duplicate compiling of files.

        * WebProcess/Info.plist:
        Sorted.

2011-03-09  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        Use the Cookie Storage from the Private Browsing Storage Session directly
        https://bugs.webkit.org/show_bug.cgi?id=55986

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-03-09  Alejandro G. Castro  <alex@igalia.com>

        Fix compilation after r80596, add soup Download stubs.

        * GNUmakefile.am:
        * WebProcess/Downloads/soup/DownloadSoup.cpp: Added.
        (WebKit::Download::start):
        (WebKit::Download::startWithHandle):
        (WebKit::Download::cancel):
        (WebKit::Download::platformInvalidate):
        (WebKit::Download::didDecideDestination):
        (WebKit::Download::platformDidFinish):

2011-03-09  Alejandro G. Castro  <alex@igalia.com>

        Fix GTK+ compilation after r80619. Add WebFullScreenManager.

        * GNUmakefile.am:

2011-03-08  Jer Noble  <jer.noble@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Plumb through the FULLSCREEN_API Chrome client calls
        https://bugs.webkit.org/show_bug.cgi?id=55273

        The FULLSCREEN_API Chrome client calls need to be plumbed through from the 
        WebProcess to the UIProcess.  To do this, WebFullScreenManager (and Proxy)
        classes have been added to WebPage.

        * DerivedSources.make: Added rules necessary to build DerivedSources for new .in files.
        * DerivedSources.pro: Ditto.
        * Platform/CoreIPC/MessageID.h: Added message types for WebFullScreenManager.
        * Shared/API/c/WKBase.h: Added WKFullScreenManagerRef.
        * Shared/APIObject.h: Added APIType for WebFullScreenManager.
        * UIProcess/WebFullScreenManagerProxy.cpp: Added.
        * UIProcess/WebFullScreenManagerProxy.h: Added.
        * UIProcess/WebFullScreenManagerProxy.messages.in: Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close): Invalidate and clear m_fullScreenManager.
        (WebKit::WebPageProxy::processDidCrash): Ditto.
        (WebKit::WebPageProxy::didReceiveMessage): Pass messages on to WebFullScreenManagerProxy.
        (WebKit::WebPageProxy::didReceiveSyncMessage): Ditto.
        (WebKit::WebPageProxy::fullScreenManager): Added. Lazy instantiation of m_fullScreenManager.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebUIClient.cpp:
        * UIProcess/WebUIClient.h:
        * WebKit2.xcodeproj/project.pbxproj: Added references to new classes in project file.
        * WebKit2.pro: Ditto.
        * win/WebKit2.vcproj: Ditto.
        * WebKit2.pri: Added new directories to include file path.
        * win/WebKit2Common.vsprops: Ditto.
        * WebProcess/FullScreen/WebFullScreenManager.cpp: Added.
        * WebProcess/FullScreen/WebFullScreenManager.h: Added.
        * WebProcess/FullScreen/WebFullScreenManager.messages.in: Added.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::supportsFullScreenForElement): Pass through to WebFullScreenManager.
        (WebKit::WebChromeClient::enterFullScreenForElement): Ditto.
        (WebKit::WebChromeClient::exitFullScreenForElement): Ditto.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close): Invalidate and clear m_fullScreenManager.
        (WebKit::WebPage::fullScreenManager): Lazy instantiation of m_fullScreenManager.
        (WebKit::WebPage::didReceiveMessage): Pass messages through to WebFullScreenManager.
        * WebProcess/WebPage/WebPage.h:

2011-03-08  Jer Noble  <jer.noble@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Plumb through the "supportsFullScreen" preference.
        https://bugs.webkit.org/show_bug.cgi?id=55261

        The "supportsFullScreen" preference needs to be plumbed through from
        the UIProcess to the WebProcess.

        * Shared/WebPreferencesStore.h: Add a new macro entry.
        * UIProcess/API/C/WKPreferences.cpp: Implement preferences getter and setter.
        (WKPreferencesSetFullScreenEnabled):
        (WKPreferencesGetFullScreenEnabled):
        * UIProcess/API/C/WKPreferences.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Sync the fullScreenEnabled setting through to
            the settings object.

2011-03-08  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adele Peterson.

        WebKit2: Implement Windows glue for Undo/Redo
        https://bugs.webkit.org/show_bug.cgi?id=55961
        
        Expose Undo/Redo infrastructure through WKView on Windows by
        adding an undo client as well as APIs to reapply and unapply
        an edit command.

        * UIProcess/API/C/win/WKView.cpp:
        (WKViewSetViewUndoClient): Added.
        (WKViewReapplyEditCommand): Added.
        (WKViewUnapplyEditCommand): Added.
        * UIProcess/API/C/win/WKView.h: Added WKViewUndoClient, WKViewSetViewUndoClient(), and WKViewUnapplyEditCommand().
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::isValidEditCommand): Added, used to validated an edit command from a WKView API.
        * UIProcess/WebPageProxy.h: Added isValidEditCommand().
        * UIProcess/win/WebUndoClient.cpp: Added, APIClient for WKViewUndoClient. 
        (WebKit::WebUndoClient::registerEditCommand): Added.
        (WebKit::WebUndoClient::clearAllEditCommands): Added.
        * UIProcess/win/WebUndoClient.h: Added, APIClient for WKViewUndoClient.
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::initializeUndoClient): Added.
        (WebKit::WebView::close): Clear out undo client.
        (WebKit::WebView::registerEditCommand): Implemented to call through to WKViewUndoClient.
        (WebKit::WebView::clearAllEditCommands): Implmented to call through to WKViewUndoClient.
        (WebKit::WebView::reapplyEditCommand): Added.
        (WebKit::WebView::unapplyEditCommand): Added.
        * UIProcess/win/WebView.h: Added undo client support.
        * win/WebKit2.vcproj: Added WebUndoClient.cpp and WebUndoClient.h.

2011-03-08  Jeff Miller  <jeffm@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Expose WebEditCommandProxy in the C API on Windows
        https://bugs.webkit.org/show_bug.cgi?id=55962
        
        Make WebEditCommandProxy a subclass of APIObject, and define
        WKEditCommandRef as the type that will be exposed through the C API.

        * Shared/API/c/win/WKBaseWin.h: Add WKEditCommandRef.
        * Shared/APIObject.h: Add platform-specific TypeEditCommandProxy.
        * UIProcess/API/C/win/WKAPICastWin.h: Add API mapping for WKEditCommandRef.
        * UIProcess/WebEditCommandProxy.h: Subclass WebEditCommandProxy from APIObject.
        (WebKit::WebEditCommandProxy::type): Added.

2011-03-08  Jeff Miller  <jeffm@apple.com>

        Reviewed by Oliver Hunt.

        WebKit2: Redo is broken
        https://bugs.webkit.org/show_bug.cgi?id=55978
        
        WebEditCommandProxy::unapply() and WebEditCommandProxy::reapply() were registering the wrong edit command when an undo or redo happens.
        For example, when we unapply(), we should register a Redo command, not an Undo command.

        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::unapply): Register a Redo command, not an Undo command.
        (WebKit::WebEditCommandProxy::reapply): Register an Undo command, not a Redo command.

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

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=55977
        Refine CF/CFNet distinctions for better code sharing.
        1. Rename Downloads/cf/win/DownloadCFNetWin.cpp to DownloadCFWin.cpp
           since it does not use any CFNETWORK features.
        2. Create new cfnet directory.
        3. Move Downloads/cf/DownloadCFNet.cpp to Downloads/cfnet
        4. Update project file.

        * WebProcess/Downloads/cf/DownloadCFNet.cpp: Removed.
        * WebProcess/Downloads/cf/win/DownloadCFNetWin.cpp: Removed.
        * WebProcess/Downloads/cf/win/DownloadCFWin.cpp: Copied from WebProcess/Downloads/cf/win/DownloadCFNetWin.cpp.
        * WebProcess/Downloads/cfnet: Added.
        * WebProcess/Downloads/cfnet/DownloadCFNet.cpp: Copied from WebProcess/Downloads/cf/DownloadCFNet.cpp.
        * win/WebKit2.vcproj:

2011-03-08  Mark Rowe  <mrowe@apple.com>

        Reviewed by Brady Eidson.

        <http://webkit.org/b/55976> Provisional URL should be loaded when restoring session state even if there are back / forward list entries.

        * UIProcess/cf/WebPageProxyCF.cpp:
        (WebKit::WebPageProxy::restoreFromSessionStateData): If there's a provisional URL that we will load then restore the session state
        without navigating to the current item.
        * WebProcess/WebPage/WebPage.messages.in: Expose the ability to restore the session state without navigating to the current item.

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

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=55956
        WebKit2 Changes to correct WinCairo port build

        * Shared/LayerTreeContext.h: Don't exclude CoreIPC declarations for non-accelerated
          compositing case.
        * UIProcess/DrawingAreaProxy.h: Add "stdint.h" include needed for Cairo build.
        * UIProcess/DrawingAreaProxyImpl.cpp: Exclude accelerated compositing code for
          WinCairo build.
        (WebKit::DrawingAreaProxyImpl::~DrawingAreaProxyImpl):
        (WebKit::DrawingAreaProxyImpl::didUpdateBackingStoreState):
        (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxyImpl::sendUpdateBackingStoreState):
        (WebKit::DrawingAreaProxyImpl::waitForAndDispatchDidUpdateBackingStoreState):
        * UIProcess/DrawingAreaProxyImpl.h: Exclude declarations for code only used when
          accelerated compositing is enabled.
        (WebKit::DrawingAreaProxyImpl::isInAcceleratedCompositingMode):
        * UIProcess/win/WebView.cpp: Protect CG-specific drawing code.
        (WebKit::WebView::setFindIndicator):
        * WebProcess/Downloads/Download.h: Allow CFLite implentation to share overwrite flag,
          as well as destination and bundle paths.
        * WebProcess/Downloads/curl/DownloadCurl.cpp: Remove stub (to share CFNet implementation
          of file handling.  This will be moved to a common area in a future patch.)
        * WebProcess/WebPage/DrawingAreaImpl.cpp: Exclude accelerated-compositing paths.
        (WebKit::DrawingAreaImpl::layerHostDidFlushLayers):
        (WebKit::DrawingAreaImpl::sendDidUpdateBackingStoreState):
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
        * WebProcess/WebPage/WebPage.cpp: Protect CG-specific drawing code.
        (WebKit::WebPage::drawRectToPDF):
        (WebKit::WebPage::drawPagesToPDF):
        * win/WebKit2.vcproj: Exclude unused LayerTreeContext from WinCairo

2011-03-08  Ivan Krstić  <ike@apple.com>

        Reviewed by Sam Weinig.

        Re-fix: can't paste from 3rd party text editor into WebKit2 window
        <rdar://problem/8978624>

        * WebProcess/com.apple.WebProcess.sb:

2011-03-08  Martin Robinson  <mrobinson@igalia.com>

        Fix the WebKit2 compilation after r80578.

        * UIProcess/gtk/WebView.cpp:
        (WebKit::WebView::setFocus): Added.
        * UIProcess/gtk/WebView.h:

2011-03-08  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Anders Carlsson.

        Crash in CFNetwork visiting google.com
        https://bugs.webkit.org/show_bug.cgi?id=55958

        * Shared/API/c/cf/WKURLResponseCF.cpp:
        (WKURLResponseCopyCFURLResponse):
        If the response to copy is null, return 0;

2011-03-08  John Sullivan  <sullivan@apple.com>

        Reverted the patch for https://bugs.webkit.org/show_bug.cgi?id=55940
        
        The patch was insufficient, and it wasn't useful for the intended client use either.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2011-03-08  Alejandro G. Castro  <alex@igalia.com>

        Unreviewed, fixed GTK+ compilation after r80569.

        * UIProcess/gtk/WebView.cpp:
        (WebKit::WebView::windowToScreen):
        * UIProcess/gtk/WebView.h:

2011-03-08  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Sam Weinig.

        WK2: Cannot set focus on an element when focus is outside of WKView
        https://bugs.webkit.org/show_bug.cgi?id=55281

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setFocus):
        * UIProcess/API/qt/qwkpage_p.h:
        (QWKPagePrivate::setFocus):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setFocus):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/win/WebView.h:
        (WebKit::WebView::setFocus):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::focus):
        (WebKit::WebChromeClient::unfocus):

2011-03-08  Jeff Miller  <jeffm@apple.com>

        Unreviewed, fix last change so WKBaseWin.h is in alphabetical order in the project XML.

        * win/WebKit2.vcproj: Move WKBaseWin.h to be in alphabetical order.

2011-03-08  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Remove Source/WebKit2/UIProcess/API/C/win/WKBaseWin.h
        https://bugs.webkit.org/show_bug.cgi?id=55952

        * UIProcess/API/C/win/WKBaseWin.h: Removed.
        * win/WebKit2.vcproj: Refer to the Shared version of WKBaseWin.h instead of the one in UIProcess.

2011-03-08  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add new files to compilation after r77974
        https://bugs.webkit.org/show_bug.cgi?id=54076

        The commit added new code to allow passing context to policy
        delegate methods, we also added dummy ResourceRequest and
        ResourceResponse decoders until we implement them.

        * GNUmakefile.am:
        * Shared/gtk/WebCoreArgumentCodersGtk.cpp:
        (CoreIPC::decodeResourceRequest):
        (CoreIPC::decodeResourceResponse):

2011-03-08  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: Webkit2 not sending UAZoomFocusChanged notifications
        https://bugs.webkit.org/show_bug.cgi?id=55916

        Needed to implement the windowToScreen() method so that the right frame
        could be calculated to send for zoom focus changes.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::windowToScreen):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::windowToScreen):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::windowToScreen):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::windowToScreen):
        * UIProcess/win/WebView.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::windowToScreen):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::windowToScreen):
        * WebProcess/WebPage/WebPage.h:

2011-03-08  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=55940
        WebKit2 should support Ignore policy from injected bundle client

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        Added WKBundlePagePolicyActionIgnore.
        
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        If the injected bundle client returns WKBundlePagePolicyActionIgnore, convert it
        to the loader's PolicyIgnore.

2011-03-08  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] [Symbian] [WK2] Fix building WebKit 2 API tests
        https://bugs.webkit.org/show_bug.cgi?id=55876

        Make sure TESTS_SOURCE_DIR is set for Symbian the same way
        as it is for WK1.

        * UIProcess/API/qt/tests/qgraphicswkview/tst_qgraphicswkview.cpp:
        (tst_QGraphicsWKView::loadEmptyPage):
        * UIProcess/API/qt/tests/tests.pri:

2011-03-07  Damian Kaleta  <dkaleta@apple.com>

        Reviewed by Anders Carlsson.

        QuickTime plugin should opt in to a 32-bit non-executable heap
        https://bugs.webkit.org/show_bug.cgi?id=55704
        <rdar://problem/8105706>

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::pluginNeedsExecutableHeap): Decides per plugin if it should opt-in to a 32-bit non-executable heap.
        By default it should opt-out.
        (WebKit::PluginProcessProxy::PluginProcessProxy):

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

        Reviewed by Anders Carlsson.

        Add unableToImplementPolicy callback for WebKit2 policy client
        <rdar://problem/9071902>
        https://bugs.webkit.org/show_bug.cgi?id=55884

        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::unableToImplementPolicy):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebPolicyClient.cpp:
        (WebKit::WebPolicyClient::unableToImplementPolicy):
        * UIProcess/WebPolicyClient.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.cpp:
        (WebKit::InjectedBundlePagePolicyClient::unableToImplementPolicy):
        * WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchUnableToImplementPolicy):
        Pipe unableToImplementPolicy through both the bundle and the main WebKit2 API.

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

        Reviewed by Anders Carlsson.

        Replace WebKit2's decidePolicyForMIMEType with decidePolicyForResponse
        https://bugs.webkit.org/show_bug.cgi?id=55827

        - Renamed FrameLoaderClient::dispatchDecidePolicyForMIMEType to dispatchDecidePolicyForResponse
          and pass the entire response, instead of just the MIMEType.
        - Updated both UIProcess API and bundle API to also be based on the whole response, not just the
          MIMEType.

        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForResponse):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebPolicyClient.cpp:
        (WebKit::WebPolicyClient::decidePolicyForResponse):
        * UIProcess/WebPolicyClient.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.cpp:
        (WebKit::InjectedBundlePagePolicyClient::decidePolicyForResponse):
        * WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2011-03-06  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435.

        When Private Browsing is enabled, use cookies from a in-memory cookie storage based on the
        Private Browsing Storage Session.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        Add support for using the new WKSI functions in WebCore.

2011-03-06  Oleg Romashin  <romaxa@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Make Qt port compiling with ENABLE_PLUGIN_PROCESS=1, part1
        Adding dummy Qt files for Plugin Process implementation,
        Adding missing sources into Qt pro files
        https://bugs.webkit.org/show_bug.cgi?id=55719

        * DerivedSources.pro:
        * PluginProcess/qt: Added.
        * PluginProcess/qt/PluginControllerProxyQt.cpp: Added.
        (WebKit::PluginControllerProxy::platformInitialize):
        (WebKit::PluginControllerProxy::platformDestroy):
        (WebKit::PluginControllerProxy::platformGeometryDidChange):
        * PluginProcess/qt/PluginProcessMainQt.cpp: Added.
        (WebKit::PluginProcessMain):
        * PluginProcess/qt/PluginProcessQt.cpp: Added.
        (WebKit::PluginProcess::platformInitialize):
        * UIProcess/Plugins/qt/PluginProcessProxyQt.cpp: Added.
        (WebKit::PluginProcessProxy::platformInitializePluginProcess):
        * WebKit2.pri:
        * WebKit2.pro:
        * WebKit2API.pri:
        * WebProcess/Plugins/Netscape/qt/PluginProxyQt.cpp: Added.
        (WebKit::PluginProxy::needsBackingStore):

2011-03-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Remove unneeded onPageClose function from DrawingArea
        https://bugs.webkit.org/show_bug.cgi?id=55836

        * WebProcess/WebPage/DrawingArea.h:
        Remove empty function.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):
        Remove only called

2011-03-04  Jon Honeycutt  <jhoneycutt@apple.com>

        WK2 Mac build fix.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageComputePagesForPrinting):
        (WKPageBeginPrinting):

        * UIProcess/API/C/WKPagePrivate.h:

2011-03-04  Jon Honeycutt  <jhoneycutt@apple.com>

        WK2 Mac build fix.

        * UIProcess/API/C/WKPagePrivate.h:

2011-03-04  Jon Honeycutt  <jhoneycutt@apple.com>

        WK2 needs printing support on Windows
        https://bugs.webkit.org/show_bug.cgi?id=55800
        <rdar://problem/8903808>

        Reviewed by Darin Adler.

        * UIProcess/API/C/WKPage.cpp:
        (ComputedPagesContext::ComputedPagesContext):
        (computedPagesCallback):
        From the Vector of WebCore::IntRects, build up a Vector of WKRects.
        Call the callback, passing these rects and the scale factor.
        (printInfoFromWKPrintInfo):
        Return a PrintInfo structure from the WKPrintInfo.
        (WKPageComputePagesForPrinting):
        Call WebPageProxy::computePagesForPrinting(). Pass
        computedPagesCallback as the callback function, so that we can
        translate the WebCore rect type to WKRect before calling the caller's
        callback function.
        (WKPageBeginPrinting):
        Call WebPageProxy::beginPrinting().
        (WKPageDrawPagesToPDF):
        Call WebPageProxy::drawPagesToPDF().

        * UIProcess/API/C/WKPagePrivate.h:
        Declare the WKPrintInfo type and new functions.

        * UIProcess/WebPageProxy.cpp:
        Compile this code on Windows.

        * UIProcess/WebPageProxy.h:
        Ditto.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::paint):
        We're painting the window; leave printing mode.

        * WebProcess/WebPage/WebPage.cpp:
        Compile this code on Windows.

        * WebProcess/WebPage/WebPage.h:
        Ditto.

        * WebProcess/WebPage/WebPage.messages.in:
        Ditto.

2011-03-04  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Adopt VersionStamper tool for Windows WebKit DLLs
        https://bugs.webkit.org/show_bug.cgi?id=55784
        <rdar://problem/9021320>

        We now use a tool to stamp the version number onto the Apple WebKit DLLs
        during the post-build step.

        Fetch the WebKit version from a string resource instead of the version resource.

        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::userVisibleWebKitVersionString): Fetch version from a string resource.
        * win/WebKit2.rc: Removed version, added stringtable.
        * win/WebKit2WebProcess.rc: Removed.
        * win/WebKit2WebProcess.vcproj:
        * win/WebKit2WebProcessPostBuild.cmd: Don't run autoversion script. It isn't used in this project.
        * win/WebKit2WebProcessPreBuild.cmd: Stamp version.
        * win/WebKitPostBuild.cmd: Stamp version.

2011-03-04  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Add WKPageValidateCommand()
        https://bugs.webkit.org/show_bug.cgi?id=55793
        
        On the Mac, validation of edit menu commands is handled within WebKit2 in WKView.mm.
        However, on Windows we need to do this in the client, so expose this functionality
        in the API via WKPageValidateCommand().
        
        Change the Mac implementation to call WebPageProxy::validateCommand() with a callback
        to match this new API, so it no longer has to go through PageClient to get notified
        when a command is validated.  This makes PageClient::setEditCommandState() obsolete,
        so I removed the stub implementations in qt and gtk as well.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageValidateCommand): Added.
        * UIProcess/API/C/WKPage.h: Added WKPageValidateCommand().
        * UIProcess/API/mac/PageClientImpl.h: Removed setEditCommandState().
        * UIProcess/API/mac/PageClientImpl.mm: Removed setEditCommandState().
        * UIProcess/API/mac/WKView.mm:
        (validateCommandCallback): Added.
        (-[WKView validateUserInterfaceItem:]): Pass callback to validateCommand().
        * UIProcess/API/qt/qwkpage.cpp: Removed setEditCommandState().
        * UIProcess/API/qt/qwkpage_p.h: Removed setEditCommandState().
        * UIProcess/PageClient.h: Removed setEditCommandState().
        * UIProcess/WebPageProxy.cpp: Removed didValidateCommand().
        (WebKit::WebPageProxy::validateCommand): This now takes a callback.
        (WebKit::WebPageProxy::validateCommandCallback): Added.
        (WebKit::WebPageProxy::processDidCrash): Invalidate m_validateCommandCallbacks.
        * UIProcess/WebPageProxy.h: Removed didValidateCommand(), validateCommand() now takes a callback.
        (WebKit::ValidateCommandCallback::create): Added.
        (WebKit::ValidateCommandCallback::~ValidateCommandCallback): Added.
        (WebKit::ValidateCommandCallback::performCallbackWithReturnValue): Added.
        (WebKit::ValidateCommandCallback::invalidate): Added.
        (WebKit::ValidateCommandCallback::ValidateCommandCallback): Added.
        * UIProcess/WebPageProxy.messages.in: Removed DidValidateCommand, added ValidateCommandCallback.
        * UIProcess/gtk/WebView.cpp: Removed setEditCommandState().
        * UIProcess/gtk/WebView.h: Removed setEditCommandState().
        * UIProcess/win/WebView.cpp: Removed setEditCommandState().
        * UIProcess/win/WebView.h: Removed setEditCommandState().
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::validateCommand): This now takes a callbackID.
        * WebProcess/WebPage/WebPage.h: validateCommand now takes a callbackID.
        * WebProcess/WebPage/WebPage.messages.in: ValidateCommand now takes a callbackID.

2011-03-04  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Darin Adler.

        Reference-counting for WKBundlePageResourceLoadClient::willSendRequestForFrame seems unclear/wrong
        https://bugs.webkit.org/show_bug.cgi?id=53919
        <rdar://problem/8966020>
        
        Adopt the result of m_client.willSendRequestForFrame (which will be leaked by the client).

        * WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.cpp:
        (WebKit::InjectedBundlePageResourceLoadClient::willSendRequestForFrame):

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

        Reviewed by Mark Rowe.

        WebKit2 session state should include even loads too new to be in the back/forward list
        https://bugs.webkit.org/show_bug.cgi?id=55781
        part of <rdar://problem/8968847>

        * UIProcess/cf/WebPageProxyCF.cpp:
        (WebKit::WebPageProxy::sessionStateData): Save URLs that are early enough in the loading
        process to not be included in the back/forward list yet: The pending API request URL and
        the provisional URL.
        (WebKit::WebPageProxy::restoreFromSessionStateData): Call loadURL if the back/forward
        list is not restored and a URL is present. Later we can improve the way we handle the
        case where we have both a back/forward list and a URL.

2011-03-04  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435.

        Add in the CFURLSTORAGESESSIONS guards that I incorrectly left out because the code was
        contained within guards that made USE(CFURLSTORAGESESSIONS) always be true.

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

2011-03-04  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435.

        When Private Browsing is enabled, get the cached url response from the cache associated with
        the Private Browsing Storage Session.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformHasLocalDataForURL):
        If Private Browsing is enabled, call into WKSI to get the response.
        (WebKit::WebPage::cachedResponseMIMETypeForURL):
        Ditto.
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::platformHasLocalDataForURL):
        If Private Browsing is enabled, call into WKSI to get the CFURLCacheRef.
        (WebKit::WebPage::cachedResponseMIMETypeForURL):
        Ditto.

2011-03-04  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Move WKViewExecuteCommand() to WKPageExecuteCommand()
        https://bugs.webkit.org/show_bug.cgi?id=55744
        
        Executing a command operates on a page, so it makes more sense for it to be in WKPage.
        This also makes it available on all platforms, not just Windows.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageExecuteCommand): Added.
        * UIProcess/API/C/WKPage.h: Add WKPageExecuteCommand().
        * UIProcess/API/C/win/WKView.cpp: Remove WKViewExecuteCommand().
        * UIProcess/API/C/win/WKView.h: Remove WKViewExecuteCommand().

2011-03-04  Dan Bernstein  <mitz@apple.com>

        LLVM Compiler build fix.

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

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

        Make the WKPageRunJavaScriptFunction callback take a WKSerializedScriptValueRef.

        https://webkit.org/b/55623

        Reviewed by Darin Adler.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageRunJavaScriptInMainFrame): Use ScriptValueCallback.
        (callRunJavaScriptBlockAndRelease): Use WKSerializedScriptValueRef.
        * UIProcess/API/C/WKPage.h: Use WKSerializedScriptValueRef.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close): Call invalidateCallbackMap for m_scriptValueCallbacks.
        (WebKit::WebPageProxy::runJavaScriptInMainFrame): Take a ScriptValueCallback.
        (WebKit::WebPageProxy::scriptValueCallback): Added. Create a WebSerializedScriptValue
        from the DataReference before calling the callback.
        (WebKit::WebPageProxy::processDidCrash): Call invalidateCallbackMap for m_scriptValueCallbacks.
        * UIProcess/WebPageProxy.h: Added ScriptValueCallback and m_scriptValueCallbacks.
        * UIProcess/WebPageProxy.messages.in: Added ScriptValueCallback.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInMainFrame): Create a DataReference from a WebCore::SerializedScriptValue.
        And use ScriptValueCallback to send the message back.

2011-03-03  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Cleanup from https://bugs.webkit.org/show_bug.cgi?id=55427.
        
        Call WebCore::startObservingCookieChanges and WebCore::stopObservingCookieChanges
        on all platforms, and stub the functions on platforms that don't implement them.

        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::startObservingCookieChanges):
        (WebKit::WebCookieManager::stopObservingCookieChanges):

2011-03-03  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Refactor classes in GenericCallback.h
        https://bugs.webkit.org/show_bug.cgi?id=55732
        
        Since we're going to need to add additional callback classes, make a CallbackBase class that manages
        the context and the callback ID.  The existing callback classes (VoidCallback, GenericCallback, and
        ComputedPagesCallback) now all derive from CallbackBase.
        
        Fix bug in VoidCallback where we meant to implement the destructor, but we were implementing the default
        constructor instead (we forgot the leading ~).
 
        * UIProcess/GenericCallback.h:
        (WebKit::CallbackBase::~CallbackBase):
        (WebKit::CallbackBase::callbackID):
        (WebKit::CallbackBase::CallbackBase):
        (WebKit::CallbackBase::context):
        (WebKit::CallbackBase::generateCallbackID):
        (WebKit::VoidCallback::~VoidCallback):
        (WebKit::VoidCallback::performCallback):
        (WebKit::VoidCallback::invalidate):
        (WebKit::VoidCallback::VoidCallback):
        (WebKit::GenericCallback::create):
        (WebKit::GenericCallback::~GenericCallback):
        (WebKit::GenericCallback::performCallbackWithReturnValue):
        (WebKit::GenericCallback::invalidate):
        (WebKit::GenericCallback::GenericCallback):
        (WebKit::ComputedPagesCallback::create):
        (WebKit::ComputedPagesCallback::~ComputedPagesCallback):
        (WebKit::ComputedPagesCallback::performCallbackWithReturnValue):
        (WebKit::ComputedPagesCallback::invalidate):
        (WebKit::ComputedPagesCallback::ComputedPagesCallback):

2011-03-03  Adam Roben  <aroben@apple.com>

        Don't assume the web process has had a chance to paint before the view has to paint

        Fixes <http://webkit.org/b/55739> REGRESSION (r80307): Lots of tests crashing in
        BackingStore::paint

        Reviewed by Anders Carlsson.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::paint): Bail if the web process hasn't had a chance to paint
        yet.

2011-03-03  Adam Roben  <aroben@apple.com>

        Throw away DrawingAreaProxyImpl's backing store after not painting for 5 seconds

        The intent is to save memory for views that aren't painting.

        Fixes <http://webkit.org/b/51262> <rdar://problem/8782537> WebPageProxy should delete its
        backing store after not painting for a while

        Reviewed by Anders Carlsson.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl): Initialize our timer.
        (WebKit::DrawingAreaProxyImpl::paint): Don't bail if we don't have a backing store (but do
        bail if we're in accelerated compositing mode); we might have thrown it away to save memory
        but now are being asked to paint by the view. The existing code in this function will handle
        getting a new backing store if possible by blocking for a little while to try to receive a
        DidUpdateBackingStoreState message. Added an assertion that we do have a backing store if we
        don't have any outstanding UpdateBackingStoreState requests. After painting, call
        discardBackingStoreSoon to update our timer.
        (WebKit::DrawingAreaProxyImpl::discardBackingStoreSoon): Set the timer for 5 seconds in the
        future.
        (WebKit::DrawingAreaProxyImpl::discardBackingStore): Throw away the backing store, and tell
        the web process we'll need a full backing store update on the next paint.

        * UIProcess/DrawingAreaProxyImpl.h: Added m_discardBackingStoreTimer.

2011-03-03  Adam Roben  <aroben@apple.com>

        Add a way to tell the web process to perform a full backing store update on its next paint

        Messages::DrawingArea::UpdateBackingStoreState now takes a boolean specifying whether the
        full backing store update should happen immediately or should be deferred until the next
        paint or compositing mode change occurs. The deferred update isn't used yet, but will be
        used when we start throwing away backing stores to save memory.

        Fixes <http://webkit.org/b/55730> UI process needs a way to tell the web process its backing
        store needs a full update on the next paint

        Reviewed by Anders Carlsson.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::paint): If we have an outstanding backing store state change
        request, tell the web process to perform the backing store update right away, in case we
        previously told it it could defer the update.
        (WebKit::DrawingAreaProxyImpl::sizeDidChange): Specify that we need an immediate backing
        store update.
        (WebKit::DrawingAreaProxyImpl::didUpdateBackingStoreState): We can no longer assert that we
        were waiting for a DidUpdateBackingStoreState message when we receive one, as it's possible
        for the web process to decide to send us this message on its own (if we asked it to do a
        deferred backing store update and then it needed to paint some part of the page). Specify
        that we need an immediate backing store update if the web process hasn't updated to our
        latest state, as we're about to draw potentially out-of-date bits to the screen and want to
        get the right bits as soon as possible. Also added a FIXME about a potential optimization.
        (WebKit::DrawingAreaProxyImpl::backingStoreStateDidChange): Added a RespondImmediatelyOrNot
        parameter, which is just passed through to sendUpdateBackingStoreState.
        (WebKit::DrawingAreaProxyImpl::sendUpdateBackingStoreState): Added a RespondImmediatelyOrNot
        parameter that is used to specify to the web process whether to perform the full backing
        store update immediately. We now only wait for a DidUpdateBackingStoreState message (and
        thus suppress any more UpdateBackingStoreState messages until one is received) when we ask
        the web process for an immediate response; otherwise we could end up accidentally calling
        waitForAndDispatchDidUpdateBackingStoreState when the web process hasn't been told to send
        us such a message.

        * UIProcess/DrawingAreaProxyImpl.h: Added RespondImmediatelyOrNot.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::updateBackingStoreState): Added respondImmediately argument.

        * WebProcess/WebPage/DrawingArea.messages.in: Added respondImmediately argument to
        UpdateBackingStoreState message.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl): Initialize new member that's used to track
        whether we should send a DidUpdateBackingStoreState message instead of an Update or
        compositing mode change message. This will be set to true when a deferred backing store
        update is pending.
        (WebKit::DrawingAreaImpl::layerHostDidFlushLayers): If a deferred update is pending, send a
        DidUpdateBackingStoreState message instead of a compositing mode change message.
        (WebKit::DrawingAreaImpl::updateBackingStoreState): Added respondImmediately argument. If
        we've already been told about this state ID (as can happen when the UI process decides it
        needs an immediate update to a state that it previously requested a deferred update to),
        don't bother updating the page's size, etc. In addition, if we've already sent a
        DidUpdateBackingStoreState message for this state, we don't have to do anything at all.
        Moved code to send the DidUpdateBackingStoreState message from here...
        (WebKit::DrawingAreaImpl::sendDidUpdateBackingStoreState): ...to here.
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode): Always update our dirty region,
        even if painting is suspended or we're in the process of updating the backing store state.
        It causes no harm and simplifies the code. If a deferred update is pending, send a
        DidUpdateBackingStoreState message instead of a compositing mode change message. Also
        removed a redundant if.
        (WebKit::DrawingAreaImpl::display): Added an assertion that this isn't called while updating
        backing store state, as otherwise we might end up sending two DidUpdateBackingStoreState
        messages. If a deferred update is pending, send a DidUpdateBackingStoreState message instead
        of an Update message.

        * WebProcess/WebPage/DrawingAreaImpl.h: Updated updateBackingStoreState to match the base
        class. Added sendDidUpdateBackingStoreState and m_shouldSendDidUpdateBackingStoreState.

2011-03-03  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        When displaying the missing plug-in sheet, pass the 'pluginspage'
        attribute to the UI process.
        https://bugs.webkit.org/show_bug.cgi?id=55553

        * UIProcess/API/C/WKPage.h: Add pluginsPageURL as the third argument to
        missingPluginButtonClicked.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::missingPluginButtonClicked): Ditto.
        * UIProcess/WebPageProxy.h: Ditto.
        * UIProcess/WebPageProxy.messages.in: Ditto.
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::missingPluginButtonClicked): Ditto.
        * UIProcess/WebUIClient.h: Ditto.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::missingPluginButtonClicked): Get the value of
        pluginspageAttr.

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

        Suggested by Dan Bernstein.

        Move "const" around "NSString *", so that it suddenly begins to make sense.

        * WebProcess/mac/FullKeyboardAccessWatcher.mm:

2011-03-03  Jeff Miller  <jeffm@apple.com>

        Reviewed by Anders Carlsson.

        WebKit2: Add WKViewRef API for executing edit commands
        https://bugs.webkit.org/show_bug.cgi?id=49829

        Added WKViewExecuteCommand() and documented some of the WebCore EditorCommand strings.

        * UIProcess/API/C/win/WKView.cpp:
        (WKViewExecuteCommand): Added.
        * UIProcess/API/C/win/WKView.h: Added WKViewExecuteCommand() and comment block with WebCore EditorCommand strings.

2011-03-03  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435

        Set the Private Browsing Storage Session on requests when Private Browsing is enabled.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        Support using WKCopyRequestWithStorageSession in WebCore.

2011-03-03  Adam Roben  <aroben@apple.com>

        Don't try to paint outside the page's bounds

        When the page is resized smaller, we would allocate a ShareableBitmap at the old, larger
        size, even though we only needed to paint at the new, smaller size.

        The assertion added in this patch will fire during the WebKit2/ResizeViewWhileHidden API
        test if this fix gets broken in the future.

        Fixes <http://webkit.org/b/55715> DrawingAreaImpl allocates more memory than necessary when
        the page is resized smaller

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::updateBackingStoreState): Update our dirty region even if painting
        is suspended (but still refrain from updating it when in accelerated compositing mode).
        Rather than unite our existing dirty region with the page's new bounds, overwrite our dirty
        region with the page's new bounds. This prevents us from accumulating a dirty region that is
        larger than the page in the case where the page is being resized smaller.
        (WebKit::DrawingAreaImpl::display): Added an assertion that we're not trying to paint
        outside of the page's bounds.

2011-03-03  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Brady Eidson.

        WebProcess is calling CFURLCacheRemoveAllCachedResponses when loading, results in origin-load for all resources
        https://bugs.webkit.org/show_bug.cgi?id=55701
        <rdar://problem/9074017>

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters): Initialize cache-clearing
        flag parameters to false.
        (WebKit::WebProcessCreationParameters::encode): Serialize them properly.
        (WebKit::WebProcessCreationParameters::decode): And deserialize.

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

        Reviewed by Darin Adler.

        REGRESSION (WebKit2): Tab keys no longer observe Full Keyboard Access
        https://bugs.webkit.org/show_bug.cgi?id=55633
        <rdar://problem/8963023>

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/mac/FullKeyboardAccessWatcher.h: Added.
        * WebProcess/mac/FullKeyboardAccessWatcher.mm: Added.
        (-[FullKeyboardAccessWatcher retrieveKeyboardUIModeFromPreferences:]):
        (-[FullKeyboardAccessWatcher init]):
        (+[FullKeyboardAccessWatcher fullKeyboardAccessEnabled]):
        Get the current state of full keyboard access, listening for change notifications.

        * WebProcess/WebProcess.h:  Added fullKeyboardAccessEnabled().

        * WebProcess/WebProcess.cpp: (WebKit::WebProcess::fullKeyboardAccessEnabled):
        WebKit1 also doesn't implement this on platforms other than Mac.

        * WebProcess/mac/WebProcessMac.mm: (WebKit::WebProcess::fullKeyboardAccessEnabled):
        Just ask FullKeyboardAccessWatcher.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::keyboardUIMode):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        Added keyboardUIMode(), removed tabsToLinks().

        * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::keyboardUIMode):
        * WebProcess/WebPage/WebPage.h:
        Generate keyboard UI mode from tabToLinks preference and current state of FKA.

2011-03-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Give the Bundle's policy client the option of deciding the policy
        https://bugs.webkit.org/show_bug.cgi?id=55699

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        Add WKBundlePagePolicyAction enum and make it the return value of
        the WKBundlePagePolicyClient functions.

        * WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.cpp:
        (WebKit::InjectedBundlePagePolicyClient::decidePolicyForNavigationAction):
        (WebKit::InjectedBundlePagePolicyClient::decidePolicyForNewWindowAction):
        (WebKit::InjectedBundlePagePolicyClient::decidePolicyForMIMEType):
        * WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.h:
        Pass the return value back to the caller. For unimplemented functions, return WKBundlePagePolicyActionPassThrough.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForMIMEType):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        Call the policy function early if the bundle handles it.

2011-03-02  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Rest of WebKit2: Need a way to send notifications to client when cookies change
        https://bugs.webkit.org/show_bug.cgi?id=55427
        <rdar://problem/9056027>
        
        This patch adds the communication from the WebProcess <-> UIProcess about starting/stopping
        listening for cookies changing, and adds a mechanism for the WebProcess to notify the UIProcess
        when the cookies have changed. The WebProcess sends a message to the UIProcess when the cookies
        change, and the UIProcess passes this along to the WebCookieManagerProxyClient.

        * UIProcess/API/C/WKCookieManager.cpp:
        (WKCookieManagerSetClient): Call through to WebCookieManagerProxy.
        (WKCookieManagerStartObservingCookieChanges): Ditto.
        (WKCookieManagerStopObservingCookieChanges): Ditto.

        * UIProcess/API/C/WKCookieManager.h: Add new functions and a WKCookieManagerClient
            which is responsible for cookiesDidChange.

        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::initializeClient):
        (WebKit::WebCookieManagerProxy::startObservingCookieChanges): Send the message down to the web process.
        (WebKit::WebCookieManagerProxy::stopObservingCookieChanges): Ditto.
        (WebKit::WebCookieManagerProxy::cookiesDidChange): Tell the WKCookieManagerClient the cookies were
            modified.
        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/WebCookieManagerProxy.messages.in: Add new messages.

        * UIProcess/WebCookieManagerProxyClient.cpp: Added.
        (WebKit::WebCookieManagerProxyClient::cookiesDidChange): Calls through to the client saying that
            cookies changed.
        * UIProcess/WebCookieManagerProxyClient.h: Added.
    
        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::startObservingCookieChanges): Call through to WebCore::startObservingCookieChanges
            (on platforms that support it).
        (WebKit::WebCookieManager::stopObservingCookieChanges): Ditto (for stopObservingCookieChanges).
        (WebKit::WebCookieManager::dispatchDidModifyCookies): Send a message to the UI process that cookies changed.
        * WebProcess/Cookies/WebCookieManager.h:
        * WebProcess/Cookies/WebCookieManager.messages.in:
        
        Add new files.
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * GNUmakefile.am:
        * win/WebKit2.vcproj:

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

        Reviewed by Darin Adler.

        Remove CanRunBeforeUnloadConfirmPanel sync message
        https://bugs.webkit.org/show_bug.cgi?id=55689

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        Encode and decode canRunBeforeUnloadConfirmPanel, as well as canRunModal, which wasn't
        being encoded/decoded.

        * Shared/WebPageCreationParameters.h:
        Add canRunBeforeUnloadConfirmPanel.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeUIClient):
        Send SetCanRunBeforeUnloadConfirmPanel and SetCanRunModal messages.

        (WebKit::WebPageProxy::creationParameters):
        Initialize parameters.canRunBeforeUnloadConfirmPanel.

        * UIProcess/WebPageProxy.messages.in:
        Remove CanRunBeforeUnloadConfirmPanel message.

        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::canRunBeforeUnloadConfirmPanel):
        * UIProcess/WebUIClient.h:
        Make canRunBeforeUnloadConfirmPanel const.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::canRunBeforeUnloadConfirmPanel):
        Ask the web page instead of sending a synchronous message.

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

        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::canRunBeforeUnloadConfirmPanel):
        (WebKit::WebPage::setCanRunBeforeUnloadConfirmPanel):
        Add getter and setter for m_canRunBeforeUnloadConfirmPanel.

        (WebKit::WebPage::setCanRunModal):
        Add setter for m_canRunModal.

        * WebProcess/WebPage/WebPage.messages.in:
        Add SetCanRunBeforeUnloadConfirmPanel and SetCanRunModal messages.

2011-03-03  Adam Roben  <aroben@apple.com>

        Create the CFBundleRef for WebKit.dll on Windows if needed

        WebKit part of <http://webkit.org/b/55672> <rdar://problem/9080867> All inspector tests time
        out or crash on Windows 7 Release (WebKit2 Tests)

        Reviewed by Darin Adler.

        * Shared/win/WebKitBundle.cpp: Added.
        (WebKit::createWebKitBundle): Returns a pre-existing bundle, if possible, otherwise creates
        and returns a new bundle.
        (WebKit::webKitBundle): Creates and caches a bundle, and returns it.

        * Shared/win/WebKitBundle.h: Added.

        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::inspectorPageURL):
        * WebProcess/WebPage/win/WebInspectorWin.cpp:
        (WebKit::WebInspector::localizedStringsURL):
        Changed to use webKitBundle() to ensure that the bundle has been created.

        * win/WebKit2.vcproj: Added new files.

2011-03-03  Peter Kasting  <pkasting@google.com>

        Reviewed by James Robinson.

        Drop redundant "Windows; " from the Windows-specific User Agent string.
        https://bugs.webkit.org/show_bug.cgi?id=54567

        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::WebPageProxy::standardUserAgent):

2011-03-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80188.
        http://trac.webkit.org/changeset/80188
        https://bugs.webkit.org/show_bug.cgi?id=55647

        Broke the WebKit API tests. (Requested by xenon on #webkit).

        * UIProcess/API/C/WKPage.cpp:
        (WKPageRunJavaScriptInMainFrame):
        (callRunJavaScriptBlockAndRelease):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::runJavaScriptInMainFrame):
        (WebKit::WebPageProxy::processDidCrash):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInMainFrame):

2011-03-02  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Rename WebKit::WebPage::validateMenuItem() to validateCommand()
        https://bugs.webkit.org/show_bug.cgi?id=55636
        
        Since this method can validate more than menu items, validateCommand() is a better name.  Also rename various messages and WebKit::WebPageProxy::didValidateMenuItem() to didValidateCommand().

        * UIProcess/API/mac/WKView.mm:
        (-[WKView validateUserInterfaceItem:]): Call validateCommand() instead of validateMenuItem().
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::validateCommand): Renamed from validateMenuItem().
        (WebKit::WebPageProxy::didValidateCommand): Renamed from didValidateMenuItem().
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in: Renamed DidValidateMenuItem to DidValidateCommand.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::validateCommand): Renamed from validateMenuItem().
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Renamed ValidateMenuItem to ValidateCommand.

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

        Reviewed by Sam Weinig.

        WKPageSetMemoryCacheClientCallsEnabled doesn't persist if web process crashes
        https://bugs.webkit.org/show_bug.cgi?id=55635

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        Encode and decode areMemoryCacheClientCallsEnabled.

        * Shared/WebPageCreationParameters.h:
        Add areMemoryCacheClientCallsEnabled member variable.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        Initialize m_areMemoryCacheClientCallsEnabled.

        (WebKit::WebPageProxy::setMemoryCacheClientCallsEnabled):
        Update m_areMemoryCacheClientCallsEnabled. Send a message if necessary.

        (WebKit::WebPageProxy::creationParameters):
        Set areMemoryCacheClientCallsEnabled.

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

2011-03-02  Timothy Hatcher  <timothy@apple.com>

        Make the runJavaScriptInMainFrame callback send a WKSerializedScriptValueRef.

        https://webkit.org/b/55623

        Reviewed by Darin Adler.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageRunJavaScriptInMainFrame): Use ScriptValueCallback.
        (callRunJavaScriptBlockAndRelease): Use WKSerializedScriptValueRef.
        * UIProcess/API/C/WKPage.h: Use WKSerializedScriptValueRef.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close): Call invalidateCallbackMap for m_scriptValueCallbacks.
        (WebKit::WebPageProxy::runJavaScriptInMainFrame): Take a ScriptValueCallback.
        (WebKit::WebPageProxy::scriptValueCallback): Added. Create a WebSerializedScriptValue
        from the DataReference before calling the callback.
        (WebKit::WebPageProxy::processDidCrash): Call invalidateCallbackMap for m_scriptValueCallbacks.
        * UIProcess/WebPageProxy.h: Added ScriptValueCallback and m_scriptValueCallbacks.
        * UIProcess/WebPageProxy.messages.in: Added ScriptValueCallback.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInMainFrame): Create a DataReference from a WebCore::SerializedScriptValue.
        And use ScriptValueCallback to send the message back.

2011-03-02  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435

        Add the ability to create a Private Browsing Storage Session.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        Encode the UI Process bundle identifier.
        (WebKit::WebProcessCreationParameters::decode):
        Decode the UI Process bundle identifier.
        * Shared/WebProcessCreationParameters.h:

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        Grab the bundle identifier and use it to set the WebProcessCreationParameter.
        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):
        Ditto.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        Support using the wkCreatePrivateStorageSession WKSI in WebCore.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        Set the base for the Private Browsing Storage Session identifier to be the bundle identifier
        from the UI Process so that WebKit1 would create a Private Browsing Storage Session with the
        same identifier as WebKit2.

2011-03-01  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Part of WebKit2: Need a way to send notifications to client when cookies change
        https://bugs.webkit.org/show_bug.cgi?id=55427
        <rdar://problem/9056027>

        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::dispatchDidModifyCookies): Add a stub with a FIXME to send a 
            message to the UI process.

        * WebProcess/Cookies/WebCookieManager.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createCookiesStrategy):
        (WebKit::WebPlatformStrategies::notifyCookiesChanged): Call WebCookieManager::dispatchDidModifyCookies.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2011-03-02  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt][WK2] generate-forwarding-headers.pl should generate paths with framework names
        https://bugs.webkit.org/show_bug.cgi?id=55478

        On case insensitive systems the generated forwarding headers cause build problems.

        * Scripts/generate-forwarding-headers.pl: The generated header should
        also contain the framework name.

2011-03-01  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Expose some selection state fields in WKPage
        https://bugs.webkit.org/show_bug.cgi?id=55541
        
        Added WKPageCanDelete(), WKPageHasSelectedRange(), and WKPageIsContentEditable() so we can enable some
        Edit menu items properly on Windows when using WebKit2.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageCanDelete): Added.
        (WKPageHasSelectedRange): Added.
        (WKPageIsContentEditable): Added.
        * UIProcess/API/C/WKPage.h: Added new functions.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::canDelete): Added.
        (WebKit::WebPageProxy::hasSelectedRange): Added.
        (WebKit::WebPageProxy::isContentEditable): Added.

2011-03-01  Mark Rowe  <mrowe@apple.com>

        Hide the typeinfo name symbols for std::exception and std::bad_alloc too.

        * Configurations/Base.xcconfig:

2011-03-01  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Add verification scripts to WebKit2 project and fix the issues they reveal.

        * Configurations/Base.xcconfig: Add linker flags to prevent C++ standard
        library functions from being exported as weak externals.
        * Configurations/WebKit2.xcconfig: Inherit linker flags from the project level.
        * Shared/WebContextMenuItem.cpp:
        (WebKit::WebContextMenuItem::separatorItem): Use DEFINE_STATIC_LOCAL.
        * UIProcess/WebPageGroup.cpp:
        (WebKit::webPageGroupMap): Ditto.
        * WebKit2.xcodeproj/project.pbxproj: Don't copy .in files in to the framework.
        Run verification scripts at the appropriate times.
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::didBeginEditing): Use DEFINE_STATIC_LOCAL.
        (WebKit::WebEditorClient::respondToChangedContents): Ditto.
        (WebKit::WebEditorClient::respondToChangedSelection): Ditto.
        (WebKit::WebEditorClient::didEndEditing): Ditto.
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::idToHistoryItemMap): Ditto.
        (WebKit::historyItemToIDMap): Ditto.

2011-03-01  Joseph Pecoraro  <joepeck@webkit.org>

        Unreviewed. Roll out r80068 and r80073 due to breaking WebKit2 Qt port.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::viewportAttributesForSize):

2011-03-01  Joseph Pecoraro  <joepeck@webkit.org>

        Unreviewed, missed updating a call to WebCore::computeViewportAttributes
        who's prototype changed.

        Viewport Warning/Error Messages Are Now Inaccurate
        https://bugs.webkit.org/show_bug.cgi?id=53707

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::viewportAttributesForSize): pass in a value for the document argument.

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

        Reviewed by Sam Weinig.

        WKPluginSiteDataManagerClearAllSiteData is not working
        https://bugs.webkit.org/show_bug.cgi?id=55528
        <rdar://problem/9071823>

        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::tryGetSitesWithData):
        Remove version checks, checking that the function pointer is not null is enough.

        (WebKit::NetscapePluginModule::tryClearSiteData):
        Remove version checks, checking that the function pointer is not null is enough.
        Also, correctly convert a null String to a null CString.

2011-03-01  Adam Roben  <aroben@apple.com>

        Incorporate a review comment I missed in r80051

        * Shared/Plugins/Netscape/NetscapePluginModule.cpp: Clarified error message.

2011-03-01  Adam Roben  <aroben@apple.com>

        Make the PLUGIN_ARCHITECTURE() macro work with MSVC

        Fixes <http://webkit.org/b/55513> <rdar://problem/9069189> REGRESSION (r79925): Lots of
        plugins tests crashing in NetscapePlugin::initialize on Windows

        Reviewed by Anders Carlsson.

        * Shared/Plugins/Netscape/NetscapePluginModule.cpp: Added a compile-time check to make sure
        PLUGIN_ARCHITECTURE() is defined for some platform.

        * config.h: Removed the parentheses from the use of "defined" in the PLUGIN_ARCHITECTURE()
        macro. This matches PLATFORM(), OS(), etc., and makes the macro work on Windows. Also
        replaced the nonsense OS(WIN) with OS(WINDOWS).

        * win/WebKit2.vcproj: Added config.h for editing convenience. Let VS do its thang.

2011-03-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Timothy Hatcher.

        WebKit2 needs to be made localizable
        https://bugs.webkit.org/show_bug.cgi?id=55483

        * PluginProcess/mac/PluginProcessMainMac.mm:
        * WebProcess/mac/WebProcessMainMac.mm:
        Set the default localization from the passed in parameter.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        Add the preferred localization as a parameter when launching processes
        so that they can set their localization to match the launching app.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        Use WebCore's localizedString function on the mac, to actually localize
        these strings.

        (WebKit::WebPlatformStrategies::imageTitle):
        Switch to using replace, instead of concatenation, to give localizers a chance
        to rearrange the wording.

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

        Reviewed by Anders Carlsson.

        [Qt][WK2] Plugin initialization
        https://bugs.webkit.org/show_bug.cgi?id=48127

        Apply the quirks that are necessary for the flash plugin
        to not crash on X11.

        * Platform/qt/ModuleQt.cpp:
        (WebKit::Module::load): Use the ResolveAllSymbols hint as we do in WebCore.
        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::tryLoad): Call applyX11QuirksBeforeLoad
        if PLUGIN_ARCHITECTURE is X11.
        * Shared/Plugins/Netscape/NetscapePluginModule.h:
        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::initializeGTK):  The same hack that we do in WebCore.
        Call gtk_init because flash don't do it for itself.
        (WebKit::NetscapePluginModule::applyX11QuirksBeforeLoad): Added for X11.
        Do the hacks that we need to do before calling NP_Initialize on the
        flash plugin to save it form crashing.
        * Shared/Plugins/PluginQuirks.h: Use PLUGIN_ARCHITECTURE macros.
        Added RequiresGTKToolKit quirk for X11.
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue): Handle the RequiresGTKToolKit quirk on X11.
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        (WebKit::NetscapePlugin::quirks): Added getter for the PluginModule's
        quirks to be available in NPN_GetValue.

2011-03-01  Adam Roben  <aroben@apple.com>

        Convert seconds to milliseconds before calling ::SetTimer

        Fixes <http://webkit.org/b/55417> <rdar://problem/9065287> RunLoop::Timer fires 1000x too
        early on Windows

        Reviewed by Anders Carlsson.

        * Platform/win/RunLoopWin.cpp:
        (RunLoop::TimerBase::start): Convert the timeout interval to milliseconds, since that's what
        ::SetTimer expects.

2011-03-01  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Clean up the project files and move common options to WebKit.pri.

        * WebKit2.pro: Deduplicate options.

2011-03-01  Juha Savolainen  <juha.savolainen@weego.fi>

        Reviewed by Andreas Kling.

        [Qt] WebKit2 needs to support font size changing and getting default font size
        https://bugs.webkit.org/show_bug.cgi?id=53671

        Added new enum for font size type and added methods to set and get default font sizes.

        * UIProcess/API/qt/qwkpreferences.cpp:
        (QWKPreferences::setFontSize): Added.
        (QWKPreferences::fontSize): Added.
        * UIProcess/API/qt/qwkpreferences.h:

2011-02-28  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam Roben and Gavin Barraclough.

        https://bugs.webkit.org/show_bug.cgi?id=54898
        InjectedBundleNodeHandle dies too early in WKBundleHitTestResultGetNodeHandle

        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp:
        (WKBundleHitTestResultCopyNodeHandle): 
        Instead of .get(), call .release.leakRef() like other functions that return WKBundleNodeHandleRef.
        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.h:
        Renamed from "get" to "copy", because it leaksRef.

2011-02-28  Alice Liu  <alice.liu@apple.com>

        Reviewed by Gavin Barraclough.

        https://bugs.webkit.org/show_bug.cgi?id=55442
        Webarchives don't contain subframe content

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::getWebArchiveOfFrame):
        Pass the frame's document instead of just the frame, to use a different LegacyWebArchive::create function.

2011-02-28  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Add a way to test the WebKit 2 APIs
        https://bugs.webkit.org/show_bug.cgi?id=55408

        Add an initial test for the WebKit 2 APIs of Qt.

        * UIProcess/API/qt/tests/html/basic_page.html: Added.
        * UIProcess/API/qt/tests/qgraphicswkview/qgraphicswkview.pro: Added.
        * UIProcess/API/qt/tests/qgraphicswkview/tst_qgraphicswkview.cpp: Added.
        (View::View):
        (View::resizeEvent):
        (tst_QGraphicsWKView::init):
        (tst_QGraphicsWKView::cleanup):
        (tst_QGraphicsWKView::loadEmptyPage):
        * UIProcess/API/qt/tests/tests.pri: Added.
        * UIProcess/API/qt/tests/tests.pro: Added.
        * UIProcess/API/qt/tests/util.h: Added.
        (waitForSignal):

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

        Fix clang build.

        * UIProcess/API/mac/FindIndicatorWindow.mm:
        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::deprecatedUpdate):
        (WebKit::ChunkedUpdateDrawingAreaProxy::didReceiveMessage):
        * UIProcess/ChunkedUpdateDrawingAreaProxy.h:
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
        (WebKit::ChunkedUpdateDrawingArea::deprecatedResumePainting):
        (WebKit::ChunkedUpdateDrawingArea::didReceiveMessage):
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.h:

2011-02-28  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Anders Carlsson.

        Do not copy config.h into WebKit2.

        * WebKit2.xcodeproj/project.pbxproj:

2011-02-28  Dan Bernstein  <mitz@apple.com>

        LLVM Compiler build fix.

        * Scripts/webkit2/messages.py:
        * UIProcess/WebPageProxy.h:

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

        Reviewed by Dan Bernstein, Sam Weinig, Alexey Proskuryakov and Darin Adler.

        Open PDF in Preview doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=55400
        <rdar://problem/8750353>

        * UIProcess/API/mac/PDFViewController.mm:
        (-[WKPDFView initWithFrame:PDFViewController:]):
        Set the WKPDFView as the delegate of itself.

        (-[WKPDFView PDFViewOpenPDFInNativeApplication:]):
        Call PDFViewController::openPDFInFinder.

        (WebKit::PDFViewController::PDFViewController):
        Initialize m_hasWrittenPDFToDisk to false.

        (WebKit::PDFViewController::openPDFInFinder):
        Write the PDF to disk if needed and then open it using -[NSWorkspace openFile:].
        
        (WebKit::temporaryPDFDirectoryPath):
        Create a directory to put PDFs in.

        (WebKit::PDFViewController::pathToPDFOnDisk):
        Return a path to a (non-existent) file in the temporary PDF directory.

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

        Reviewed by Dan Bernstein.

        Frequent crashes in CFURLCache code on Snow Leopard
        https://bugs.webkit.org/show_bug.cgi?id=55412
        <rdar://problem/9063922>

        CString is evil, it has two lengths which can be different - specifically, fileSystemRepresentation()
        creates a string with maximum possible buffer size. A path with garbage at the end confused
        CFURLCache into corrupting its data structures.

        * Shared/WebProcessCreationParameters.h: Added a FIXME about merging Mac and Windows code.
        This problem wouldn't have occured if we didn't use CString in the first place.

        * UIProcess/mac/WebContextMac.mm: (WebKit::WebContext::platformInitializeWebProcess):
        Added an assertion matching Windows behavior (seems likely that NSURLCache also wouldn't
        have liked trailing slash).

        * UIProcess/win/WebContextWin.cpp: (WebKit::WebContext::platformInitializeWebProcess):
        Made slash removal conditional for robustness.

        * WebProcess/mac/WebProcessMac.mm: (WebKit::WebProcess::platformInitializeWebProcess):
        Use actual string length, not CString::length().

2011-02-28  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Anders Carlsson.

        [Qt][WK2] Plugin initialization
        https://bugs.webkit.org/show_bug.cgi?id=48127

        Specialize the way of initializing the plugin for X11.
        Introduce PLUGIN_ARCHITECTURE macros to allow code sharing
        across platforms.

        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::tryLoad):
        * config.h:

2011-02-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        WK2 Context Menus - Implement LookUpInDictionary
        https://bugs.webkit.org/show_bug.cgi?id=55405

        * Shared/DictionaryPopupInfo.cpp:
        (WebKit::DictionaryPopupInfo::encode):
        (WebKit::DictionaryPopupInfo::decode):
        * Shared/DictionaryPopupInfo.h:
        Add type to differentiate between HotKey and ContextMenu triggered
        dictionary popups. This is necessary since HotKey triggered ones want
        to override the style to always be overlay.

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        Only force the overlay style for HotKey triggered dictionary lookups.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation):
        (WebKit::WebPage::performDictionaryLookupForRange):
        Factor out shared functionality into performDictionaryLookupForRange.

        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        (WebKit::WebContextMenuClient::lookUpInDictionary):
        Get selected range and call newly factored out performDictionaryLookupForRange.

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

        Reviewed by Dan Bernstein.

        PDFViewController should hold a reference to the PDF data
        https://bugs.webkit.org/show_bug.cgi?id=55394

        * UIProcess/API/mac/PDFViewController.h:
        * UIProcess/API/mac/PDFViewController.mm:
        (WebKit::PDFViewController::setPDFDocumentData):

2011-02-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Size of text in popup menu doesn't match size of text in <select> itself in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=48234

        * Shared/TextInfo.cpp: Removed.
        * Shared/TextInfo.h: Removed.
        Replace this with the more appropriately DictionaryPopupInfo.

        * Shared/DictionaryPopupInfo.cpp: Copied from Source/WebKit2/Shared/TextInfo.cpp.
        (WebKit::DictionaryPopupInfo::encode):
        (WebKit::DictionaryPopupInfo::decode):
        * Shared/DictionaryPopupInfo.h: Copied from Source/WebKit2/Shared/TextInfo.h.
        (WebKit::DictionaryPopupInfo::DictionaryPopupInfo):
        Replace individual font related fields with FontInfo.

        * Shared/FontInfo.cpp: Added.
        (WebKit::FontInfo::FontInfo):
        (WebKit::FontInfo::encode):
        (WebKit::FontInfo::decode):
        * Shared/FontInfo.h: Added.
        Add class to encapsulate passing a font description over the wire.

        * Shared/PlatformPopupMenuData.cpp:
        (WebKit::PlatformPopupMenuData::encode):
        (WebKit::PlatformPopupMenuData::decode):
        * Shared/PlatformPopupMenuData.h:
        Add FontInfo as extra data for the Mac.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        * UIProcess/PageClient.h:
        Add scaleFactor and use it to construct a font at the right size.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showPopupMenu):
        (WebKit::WebPageProxy::didPerformDictionaryLookup):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebPopupMenuProxy.h:
        * UIProcess/mac/WebPopupMenuProxyMac.h:
        (WebKit::WebPopupMenuProxyMac::create):
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::WebPopupMenuProxyMac):
        (WebKit::WebPopupMenuProxyMac::populate):
        (WebKit::WebPopupMenuProxyMac::showPopupMenu):
        * UIProcess/qt/WebPopupMenuProxyQt.cpp:
        (WebKit::WebPopupMenuProxyQt::showPopupMenu):
        * UIProcess/qt/WebPopupMenuProxyQt.h:
        * UIProcess/win/WebPopupMenuProxyWin.cpp:
        (WebKit::WebPopupMenuProxyWin::showPopupMenu):
        * UIProcess/win/WebPopupMenuProxyWin.h:
        * WebProcess/WebCoreSupport/mac/WebPopupMenuMac.mm:
        (WebKit::WebPopupMenu::setUpPlatformData):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation):
        Pass scale factor through and rename TextInfo -> DictionaryPopupInfo.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Add new files.

2011-02-28  Adam Roben  <aroben@apple.com>

        One more rename as a followup to r79868

        Rubber-stamped by Anders Carlsson.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        * UIProcess/DrawingAreaProxyImpl.h:
        Rename stateDidChange to backingStoreStateDidChange.

2011-02-28  Adam Roben  <aroben@apple.com>

        Rename DrawingArea[Proxy]Impl's "state ID" concept to "backing store state ID"

        Rubber-stamped (and suggested) by Anders Carlsson.

        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxy.messages.in:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        * UIProcess/DrawingAreaProxyImpl.h:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        * WebProcess/WebPage/DrawingAreaImpl.h:
        Perform the rename.

2011-02-28  Adam Roben  <aroben@apple.com>

        Decouple state changes from sending of UpdateState messages in DrawingAreaProxyImpl

        The new DrawingAreaProxyImpl::stateDidChange function should be called whenever
        DrawingAreaProxyImpl's state changes in a way that will require allocating a new backing
        store. (Currently, this is just when the size changes.) This function will sometimes (but
        not always, as when we're waiting for a DidUpdateState message) send an UpdateState message
        to the web process. This means it's now possible for the state IDs sent in consecutive
        UpdateState messages to increase by more than one, but that's OK.

        This should cause no change in behavior.

        Fixes <http://webkit.org/b/55382> DrawingAreaProxyImpl's state ID should be updated whenever
        its state changes, not just when we send an UpdateState message

        Reviewed by Anders Carlsson.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl): Updated for rename.
        (WebKit::DrawingAreaProxyImpl::sizeDidChange): Changed to call stateDidChange.
        (WebKit::DrawingAreaProxyImpl::didUpdateState): Updated for rename, and changed to call
        sendUpdateState whenever our state has changed for any reason since the last UpdateState
        message was sent.
        (WebKit::DrawingAreaProxyImpl::stateDidChange): Added. Increments m_nextStateID and calls
        through to sendUpdateState.
        (WebKit::DrawingAreaProxyImpl::sendUpdateState): Updated for rename, moved incrementing of
        the state ID we send to the web process from here to stateDidChange, and added an assertion.

        * UIProcess/DrawingAreaProxyImpl.h: Renamed m_requestedStateID to m_nextStateID, and updated
        the comment explaining its meaning.

2011-02-28  Adam Roben  <aroben@apple.com>

        Pass the right dirty rect to Plugin::paint

        A typo in r79040 broke this. Much of this patch is just support for testing the fix.

        Fixes <http://webkit.org/b/55365> <rdar://problem/9031089> REGRESSION (r79040): WebKit2:
        Large portions of pages with plugins paint black

        Reviewed by Anders Carlsson.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::paint): Pass the dirty rect we calculated earlier to Plugin::paint,
        rather than just passing along the dirty rect that was passed into this function. This is
        the bug fix.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageForceRepaint):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        Added new SPI. Just calls through to WebPage::forceRepaintWithoutCallback.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::forceRepaintWithoutCallback): Moved code to force a repaint here...
        (WebKit::WebPage::forceRepaint): ...from here.

        * WebProcess/WebPage/WebPage.h: Added forceRepaintWithoutCallback.

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

        Reviewed by Dan Bernstein.

        Force dictionary popup to use overlay type
        <rdar://problem/9052483>
        https://bugs.webkit.org/show_bug.cgi?id=55337

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformDictionaryLookup): As this is only
        used for the hot key version of the dictionary popup, force the overlay
        style.

2011-02-27  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] [WK2] QGraphicsWKView::showContextMenu() should be public
        https://bugs.webkit.org/show_bug.cgi?id=55330

        Move QGraphicsWKView::showContextMenu() to the public API. Add documentation
        on its use.

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

2011-02-27  Alejandro G. Castro  <alex@igalia.com>

        Unreviewed, fixed GTK compilation after r79806.

        * UIProcess/gtk/WebView.cpp:
        (WebKit::WebView::didFinishLoadingDataForCustomRepresentation):
        * UIProcess/gtk/WebView.h:

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

        Reviewed by Dan Bernstein.

        Asynchronous response to FramePolicyListener is not finishing the load
        https://bugs.webkit.org/show_bug.cgi?id=55305
        <rdar://problem/9044356>

        Always initialize the receivedPolicyAction reply parameter.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForMIMEType):

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

        Reviewed by Sam Weinig.

        DidFinishLoadingDataForCustomRepresentation should pass along the suggested filename
        https://bugs.webkit.org/show_bug.cgi?id=55304

        * UIProcess/API/mac/PDFViewController.h:
        * UIProcess/API/mac/PDFViewController.mm:
        (WebKit::PDFViewController::setPDFDocumentData):
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didFinishLoadingDataForCustomRepresentation):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _didFinishLoadingDataForCustomRepresentationWithSuggestedFilename:dataReference:CoreIPC::]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::didFinishLoadingDataForCustomRepresentation):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFinishLoadingDataForCustomRepresentation):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::didFinishLoadingDataForCustomRepresentation):
        * UIProcess/win/WebView.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::finishedLoading):

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

        Reviewed by Oliver Hunt.

        DrawingArea should not be reference counted
        https://bugs.webkit.org/show_bug.cgi?id=55284

        * Shared/DrawingAreaInfo.h:
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::ChunkedUpdateDrawingAreaProxy):
        (WebKit::ChunkedUpdateDrawingAreaProxy::setPageIsVisible):
        (WebKit::ChunkedUpdateDrawingAreaProxy::update):
        (WebKit::ChunkedUpdateDrawingAreaProxy::sendSetSize):
        * UIProcess/ChunkedUpdateDrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::DrawingAreaProxy):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::type):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl):
        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::TiledDrawingAreaProxy):
        * UIProcess/TiledDrawingAreaProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveSyncMessage):
        (WebKit::WebPageProxy::creationParameters):
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
        (WebKit::ChunkedUpdateDrawingArea::ChunkedUpdateDrawingArea):
        (WebKit::ChunkedUpdateDrawingArea::display):
        (WebKit::ChunkedUpdateDrawingArea::setSize):
        (WebKit::ChunkedUpdateDrawingArea::didReceiveMessage):
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.h:
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        (WebKit::DrawingArea::DrawingArea):
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::create):
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/TiledDrawingArea.cpp:
        (WebKit::TiledDrawingArea::TiledDrawingArea):
        * WebProcess/WebPage/TiledDrawingArea.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::drawRect):
        * WebProcess/WebPage/WebPage.h:

2011-02-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Added clearOpener method to WKBundleWebFramePrivate.

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

2011-02-26  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Fix the focus in MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=55288

        Implement basic functionality for focus in QWKPagePrivate.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::isViewWindowActive):
        (QWKPagePrivate::isViewFocused):
        (QWKPagePrivate::isViewVisible):

2011-02-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79764.
        http://trac.webkit.org/changeset/79764
        https://bugs.webkit.org/show_bug.cgi?id=55295

        "broke Chromium builds" (Requested by rniwa on #webkit).

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleFramePrivate.h:

2011-02-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Added clearOpener method to WKBundleWebFramePrivate.

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

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

        Reviewed by Darin Adler.

        Plug-in process crashes when using GuardMalloc
        https://bugs.webkit.org/show_bug.cgi?id=55279
        <rdar://problem/9044618>

        Update m_environmentPointer after copying the environment variables.
        
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::EnvironmentVariables::copyEnvironmentVariables):

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

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess): Fixed backwards logic from last change.

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

        Reviewed by Mark Rowe.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess): Fixed performance problem in production
        builds by only setting DYLD_FRAMEWORK_PATH in engineering configurations.

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

        Reviewed by Anders Carlsson.

        <rdar://problem/8036034> WebKit2 should work even if DYLD_FRAMEWORK_PATH is not set

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::EnvironmentVariables::~EnvironmentVariables): Use fastFree, not delete, on
        the strings here because they are allocated with fastMalloc, not new.
        (WebKit::EnvironmentVariables::set): Use const more.
        (WebKit::EnvironmentVariables::get): Ditto.
        (WebKit::EnvironmentVariables::appendValue): Ditto.
        (WebKit::EnvironmentVariables::valueIfVariableHasName): Ditto. Also fix mistake
        where this would match if the name matched only a prefix of the environment variable's
        name. We want to match the whole name, so we need to use memcmp, not strncmp.
        (WebKit::EnvironmentVariables::createStringForVariable): Use const more.
        (WebKit::ProcessLauncher::launchProcess): Use clearer name, frameworkExecutablePath,
        for what was called bundlePath before. Append the frameworks path to DYLD_FRAMEWORK_PATH,
        ensuring we can pick up other frameworks from the same directory in the web process.
        Use a const_cast instead of a C-style cast.

2011-02-25  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Anders Carlsson.

        AX: WK2: AXApplication not returning the AXFocusedUIElement within the web area
        https://bugs.webkit.org/show_bug.cgi?id=55277

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

2011-02-25  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=55276
        WebPage::close() accesses "this" after it is destroyed.

        This was making many tests crash with GuardMalloc.

        * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::close): Access "this" before it can be
        destroyed, not after.

2011-02-25  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed.
        Add missing sources to WebKit2API.pri.

        * WebKit2API.pri:

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

        Reviewed by Darin Adler.

        A WKView without a window will cause CG errors in the console
        https://bugs.webkit.org/show_bug.cgi?id=55264
        <rdar://problem/9044281>

        Check that the window has a valid window number before trying to get its graphics context.

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::containingWindowGraphicsContext):

2011-02-25  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Brady Eidson and looked over by Jessie Berlin.

        WebKit2: Need a way to manage cookies from the web process
        https://bugs.webkit.org/show_bug.cgi?id=55086
        
        Call through to WebCore::CookieJar in our WebCookieManager functions.

        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::getHostnamesWithCookies):
        (WebKit::WebCookieManager::deleteCookiesForHostname):
        (WebKit::WebCookieManager::deleteAllCookies):

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

        Reviewed by Sam Weinig.

        Option-clicking on links doesn't download them due to sandbox violation
        https://bugs.webkit.org/show_bug.cgi?id=55250
        <rdar://problem/9018359>

        The change to make DecidePolicyForNavigationAction sync didn't handle the case when the
        decided policy was "Download". Fix this by passing along the download ID back to the web process.

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction):
        Add new overload.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        Initialize m_syncNavigationActionPolicyDownloadID.

        (WebKit::WebPageProxy::receivedPolicyDecision):
        Set m_syncNavigationActionPolicyDownloadID to the download ID.

        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        Return the m_syncNavigationActionPolicyDownloadID.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        Add a DownloadID reply parameter.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        Don't pass a zero download ID to didReceivePolicyDecision.

2011-02-25  Amruth Raj  <amruthraj@motorola.com> and Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com> and Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement WebContext and NativeKeyboardEvent classes for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=48510

        * GNUmakefile.am:
        * Shared/NativeWebKeyboardEvent.h: Added the GTK event attribute
        and constructors, in our case we need it because we use a pointer
        and copy the event.
        (WebKit::NativeWebKeyboardEvent::nativeEvent):
        * Shared/gtk/NativeWebKeyboardEventGtk.cpp: Added.
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent): We need
        to copy the event in the constructor to avoid two references to
        the same event.
        * Shared/gtk/WebEventFactory.cpp: Changed the prototype of the
        functions to add const, we need it for the NativeWebKeyboardEvent
        constructor.
        (WebKit::modifiersForEvent):
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        * UIProcess/gtk/WebContextGtk.cpp: Added. Stubbed implementation
        for GTK port. Yet to implement.
        (WebKit::WebContext::applicationCacheDirectory):
        (WebKit::WebContext::platformInitializeWebProcess):
        (WebKit::WebContext::platformDefaultDatabaseDirectory):
        * UIProcess/gtk/WebView.cpp:
        (WebKit::WebView::handleKeyboardEvent):

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

        Reviewed by Sam Weinig.

        Get rid of more old accelerated compositing code
        https://bugs.webkit.org/show_bug.cgi?id=55235

        * Shared/CoreIPCSupport/DrawingAreaProxyMessageKinds.h:
        * UIProcess/ChunkedUpdateDrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        * UIProcess/DrawingAreaProxyImpl.h:
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.h:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        * WebProcess/WebPage/DrawingAreaImpl.h:

2011-02-25  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Make the WebKit2 build system less confusing for non-Qt developers
        https://bugs.webkit.org/show_bug.cgi?id=55213

        * WebKit2API.pri: Added.

2011-02-25  Amruth Raj  <amruthraj@motorola.com> and Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com> and Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement WebView and WebKitWebView classes for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=48509

        * GNUmakefile.am:
        * UIProcess/API/C/gtk/WKView.cpp:
        * UIProcess/API/C/gtk/WKView.h: Removed gdkrectangle from
        constructor.
        * UIProcess/gtk/WebViewWidget.cpp: Added. The GObject interface
        for WebView. The GObject is the GtkWidget handle which is used by
        WebView class for GTK port.
        * UIProcess/gtk/WebViewWidget.h: Added. The GObject interface
        declarations for GtkWidget handle for GTK port.
        * UIProcess/gtk/WebView.cpp: Added. The native GtkWidget handle
        for GTK port which is associated with each WKViewRef.
        * UIProcess/gtk/WebView.h: Added. Class which implements the
        PageClient interface. It is a wrapper over the native GtkWidget
        handle associated with each WKViewRef for GTK port.

2011-02-25  Alejandro G. Castro  <alex@igalia.com>

        Fix GTK compilation after r79654.

        * GNUmakefile.am:

2011-02-24  Brian Weinstein  <bweinstein@apple.com>

        Qt build fix.

        * WebKit2.pri:

2011-02-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig and looked over by Brian Weinstein.

        Part of <rdar://problem/8762095> and https://bugs.webkit.org/show_bug.cgi?id=55172
        Need WebKit2 API to view/manage origins with LocalStorage.

        Project file stuff:
        * GNUmakefile.am:
        * WebKit2.pri:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Common.vsprops:
        * win/WebKit2Generated.make:

        WK2 derived sources and API stuff:
        * DerivedSources.make:
        * DerivedSources.pro:
        * Platform/CoreIPC/MessageID.h:
        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        * UIProcess/API/C/WKAPICast.h:

        Add an KeyValueStorageManager to the context and invalidate it at the appropriate times:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::disconnectProcess):
        (WebKit::WebContext::didReceiveMessage):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::keyValueStorageManagerProxy):

        Add API to get the KeyValueStorageManager for a context:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetKeyValueStorageManager):
        * UIProcess/API/C/WKContext.h:

        Route messages to the right place:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage):

        Add the API object, which wraps to WebKeyValueStorageManagerProxy:
        * UIProcess/API/C/WKKeyValueStorageManager.cpp: Added.
        (WKKeyValueStorageManagerGetTypeID):
        (WKKeyValueStorageManagerGetKeyValueStorageOrigins):
        (WKKeyValueStorageManagerDeleteEntriesForOrigin):
        (WKKeyValueStorageManagerDeleteAllEntries):
        * UIProcess/API/C/WKKeyValueStorageManager.h: Added.

        The UIProcess implementation of the manager to send messages to the WebProcess and pipe a callback back up to the client:
        * UIProcess/WebKeyValueStorageManagerProxy.cpp: Added.
        (WebKit::WebKeyValueStorageManagerProxy::create):
        (WebKit::WebKeyValueStorageManagerProxy::WebKeyValueStorageManagerProxy):
        (WebKit::WebKeyValueStorageManagerProxy::~WebKeyValueStorageManagerProxy):
        (WebKit::WebKeyValueStorageManagerProxy::invalidate):
        (WebKit::WebKeyValueStorageManagerProxy::didReceiveMessage):
        (WebKit::WebKeyValueStorageManagerProxy::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManagerProxy::didGetKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManagerProxy::deleteEntriesForOrigin):
        (WebKit::WebKeyValueStorageManagerProxy::deleteAllEntries):
        * UIProcess/WebKeyValueStorageManagerProxy.h: Added.
        (WebKit::WebKeyValueStorageManagerProxy::clearContext):
        (WebKit::WebKeyValueStorageManagerProxy::type):
        * UIProcess/WebKeyValueStorageManagerProxy.messages.in: Added.

        The WebProcess implementation to response to UIProcess messages and actually do the dirty-work in WebCore:
        * WebProcess/KeyValueStorage: Added.
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.cpp: Added.
        (WebKit::WebKeyValueStorageManager::shared):
        (WebKit::WebKeyValueStorageManager::WebKeyValueStorageManager):
        (WebKit::WebKeyValueStorageManager::didReceiveMessage):
        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManager::deleteEntriesForOrigin):
        (WebKit::WebKeyValueStorageManager::deleteAllEntries):
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.h: Added.
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.messages.in: Added.

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

        Reviewed by Anders Carlsson.

        WebKit2: Image-based cursors do not work
        https://bugs.webkit.org/show_bug.cgi?id=55184

        * Shared/ShareableBitmap.h: Added releaseData function
        declaration. This is only defined for CG, but we can declare
        it without defining it on non-CG platforms without causing problems.

        * Shared/WebCoreArgumentCoders.cpp: Added.
        (CoreIPC::encodeImage): Added. For use in the Cursor argument coder.
        (CoreIPC::decodeImage): Ditto.

        * Shared/WebCoreArgumentCoders.h: Added code to the Cursor encoder
        and decoder to handle image-based cursors, using the new encodeImage
        and decodeImage functions.

        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::releaseData): Added.
        (WebKit::ShareableBitmap::createGraphicsContext): Use
        CGBitmapContextCreateWithData instead of CGBitmapContextCreate,
        to guarantee we outlast the CGBitmapContext we create.
        (WebKit::ShareableBitmap::paint): Got rid of unnneeded local variable.

        * Shared/cg/WebCoreArgumentCodersCG.cpp: Added.
        (CoreIPC::createImage): Added. For use by CoreIPC::decodeImage.

        * WebKit2.xcodeproj/project.pbxproj: Added WebCoreArgumentCoders.cpp
        and WebCoreArgumentCodersCG.cpp.
        * win/WebKit2.vcproj: Ditto.

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

        Reviewed by Dan Bernstein.

        Crash when trying to send a sync message on an invalid connection
        https://bugs.webkit.org/show_bug.cgi?id=55190
        <rdar://problem/9035806>

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendSyncMessage):
        Don't try to call a client function if isValid() returns false since the client
        will be null in that case.

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

        Reviewed by Dan Bernstein.

        Remove the layer backed drawing area
        https://bugs.webkit.org/show_bug.cgi?id=55174

        * GNUmakefile.am:
        * Shared/DrawingAreaInfo.h:
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/LayerBackedDrawingAreaProxy.cpp: Removed.
        * UIProcess/LayerBackedDrawingAreaProxy.h: Removed.
        * UIProcess/mac/LayerBackedDrawingAreaProxyMac.mm: Removed.
        * UIProcess/win/LayerBackedDrawingAreaProxyWin.cpp: Removed.
        * UIProcess/win/WebView.cpp:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        * WebProcess/WebPage/LayerBackedDrawingArea.cpp: Removed.
        * WebProcess/WebPage/LayerBackedDrawingArea.h: Removed.
        * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm: Removed.
        * WebProcess/WebPage/win/LayerBackedDrawingAreaWin.cpp: Removed.
        * win/WebKit2.vcproj:

2011-02-24  Mike Thole  <mthole@apple.com>

        Reviewed by Sam Weinig.

        WK2: Add ability to get document node for a WKBundleNodeHandle
        https://bugs.webkit.org/post_bug.cgi

        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleCopyDocument):
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::document):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:

2011-02-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam Roben and looked at by Brian Weinstein.

        https://bugs.webkit.org/show_bug.cgi?id=55165
        Can call CF API with a null CFArray in WebResourceCacheManager

        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::getCacheOrigins): cfURLCacheHostNames() can return a null CFArrayRef, 
          so the call to CFArrayGetCount must be null checked.

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

        Reviewed by Simon Fraser.

        ASSERTION FAILED: !isInAcceleratedCompositingMode() when entering accelerated compositing early
        https://bugs.webkit.org/show_bug.cgi?id=55162
        <rdar://problem/9048523>

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::updateState):
        Call setShouldNotifyAfterNextScheduledLayerFlush(false) so the web process process won't send an
        EnterAcceleratedCompositingMode message.

        (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode):
        setShouldNotifyAfterNextScheduledLayerFlush now takes a boolean.

        * WebProcess/WebPage/LayerTreeHost.h:
        * WebProcess/WebPage/mac/LayerTreeHostMac.h:
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::setShouldNotifyAfterNextScheduledLayerFlush):
        Make this take a boolean.

2011-02-24  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        Drop the "U; " encryption level from the User Agent string.
        https://bugs.webkit.org/show_bug.cgi?id=54566

        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::standardUserAgent):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::standardUserAgent):
        * UIProcess/qt/WebPageProxyQt.cpp:
        (WebKit::WebPageProxy::standardUserAgent):
        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::WebPageProxy::standardUserAgent):

2011-02-24  Andrew Wilson  <atwilson@chromium.org>

        Unreviewed, rolling out r79570.
        http://trac.webkit.org/changeset/79570
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Breaks chromium build because glue/mocks/mock_web_frame.h/cc
        was not updated

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleFramePrivate.h:

2011-02-23  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben and looked over by Jessie Berlin.

        Part of WebKit2: Need a way to manage cookies from the web process
        https://bugs.webkit.org/show_bug.cgi?id=55086
        
        This patch adds the plumbing and classes that are needed to manage cookies from the web process.
        The functions that the API calls are currently stubs, but will be implemented in a follow-up patch.

        Project file changes.
        * DerivedSources.make:
        * DerivedSources.pro:
        * GNUmakefile.am:
        * WebKit2.pri:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Common.vsprops:
        * win/WebKit2Generated.make:

        Add some needed plumbing for WebCookieManager{Proxy}.
        * Platform/CoreIPC/MessageID.h:
        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        * UIProcess/API/C/WKAPICast.h:

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetCookieManager): Gets the cookie manager proxy.
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/WKCookieManager.cpp: Added.
        (WKCookieManagerGetTypeID):
        (WKCookieManagerGetHostnamesWithCookies): Calls through to WebCookieManagerProxy.
        (WKCookieManagerDeleteCookiesForHostname): Ditto.
        (WKCookieManagerDeleteAllCookies): Ditto.
        * UIProcess/API/C/WKCookieManager.h: Added.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage): Add a case for the cookie manager.
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext): Initialize the cookie manager.
        (WebKit::WebContext::~WebContext): Invalidate the cookie manager.
        (WebKit::WebContext::disconnectProcess): Ditto.
        (WebKit::WebContext::didReceiveMessage): Add a case for the cookie manager.
        * UIProcess/WebContext.h:
        (WebKit::WebContext::cookieManagerProxy): Returns the cookie manager.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage): Add a case for the cookie manager.

        * UIProcess/WebCookieManagerProxy.cpp: Added.
        (WebKit::WebCookieManagerProxy::create):
        (WebKit::WebCookieManagerProxy::WebCookieManagerProxy):
        (WebKit::WebCookieManagerProxy::~WebCookieManagerProxy):
        (WebKit::WebCookieManagerProxy::invalidate):
        (WebKit::WebCookieManagerProxy::didReceiveMessage): 
        (WebKit::WebCookieManagerProxy::getHostnamesWithCookies): Call through to the web process to get hostnames with cookies.
        (WebKit::WebCookieManagerProxy::didGetHostnamesWithCookies): Call the callback we were passed in getHostnamesWithCookies.
        (WebKit::WebCookieManagerProxy::deleteCookiesForHostname): Call through to the web process to delete cookies
            for the origin.
        (WebKit::WebCookieManagerProxy::deleteAllCookies): Call through to the web process to delete all cookies.
        * UIProcess/WebCookieManagerProxy.h: Added.
        (WebKit::WebCookieManagerProxy::clearContext):
        (WebKit::WebCookieManagerProxy::type):
        * UIProcess/WebCookieManagerProxy.messages.in: Added.

        * WebProcess/Cookies: Added.
        * WebProcess/Cookies/WebCookieManager.cpp: Added.
        (WebKit::WebCookieManager::shared):
        (WebKit::WebCookieManager::WebCookieManager):
        (WebKit::WebCookieManager::didReceiveMessage): Call through to didReceiveWebCookieManagerMessage.
        (WebKit::WebCookieManager::getHostnamesWithCookies): Build an array from a HashSet (that isn't filled yet), and 
            convert that HashSet to a Vector to send to the UI process.
        (WebKit::WebCookieManager::deleteCookiesForHostname): Added a stub.
        (WebKit::WebCookieManager::deleteAllCookies): Ditto.
        * WebProcess/Cookies/WebCookieManager.h: Added.
        * WebProcess/Cookies/WebCookieManager.messages.in: Added.

2011-02-24   Amruth Raj  <amruthraj@motorola.com> and Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com> and Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement WebEventFactory, WebErrors classes for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=48510

        * GNUmakefile.am:
        * Shared/gtk/WebEventFactory.cpp: Added. implementation for
        WebMouseEvent, WebWheelEvent, WebKeyboardEvent.
        * Shared/gtk/WebEventFactory.h: Added.
        * WebProcess/WebCoreSupport/gtk/WebErrorsGtk.cpp: Added. Stubbed
        implementation for GTK port.

2011-02-24  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Alexey Proskuryakov.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Added clearOpener method to WKBundleWebFramePrivate.

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

2011-02-24  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Eric Seidel.

        Support building WebKit with Python 3
        https://bugs.webkit.org/show_bug.cgi?id=55038

        Update the generator scripts to support Python 3.

        * Scripts/generate-message-receiver.py: print is a function in Python 3, write the output to
        sys.stdout to be compatible with Python 2 and 3.
        * Scripts/generate-messages-header.py:
        * Scripts/webkit2/messages.py: dist.iteritems does not exist in Python 3, fallback
          to dict.items which is common to Python 2 and 3.

2011-02-24  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt] MinGW build fails to link
        https://bugs.webkit.org/show_bug.cgi?id=55050

        Prepend the libraries of subcomponents instead of appending them
        to fix the library order according to the dependency of the libraries

        * WebKit2.pri:

2011-02-24  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] REGRESSION(69304): WKNativeEvent.h forwarding header is always regenerated
        https://bugs.webkit.org/show_bug.cgi?id=47589

        In case of file name clashes only generate forwarding header for the current platform.

        * Scripts/generate-forwarding-headers.pl:

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

        Reviewed by Sam Weinig.

        Remove some of the old accelerated compositing code
        https://bugs.webkit.org/show_bug.cgi?id=55084

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::exitAcceleratedCompositingMode):
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::exitAcceleratedCompositingMode):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/LayerBackedDrawingAreaProxyMac.mm:
        (WebKit::LayerBackedDrawingAreaProxy::attachCompositingContext):
        (WebKit::LayerBackedDrawingAreaProxy::detachCompositingContext):
        * UIProcess/win/WebView.cpp:
        * UIProcess/win/WebView.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::enterAcceleratedCompositingMode):
        (WebKit::WebPage::exitAcceleratedCompositingMode):
        * WebProcess/WebPage/WebPage.h:

2011-02-23  Enrica Casucci  <enrica@apple.com>

        Reverting an unintentional change that was part of http://trac.webkit.org/changeset/79494.
        Unreviewed.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::interceptEditingKeyboardEvent):

2011-02-18  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adam Roben.

        Mac OS X Services are not available for selected text in WebKit2 windows.
        https://bugs.webkit.org/show_bug.cgi?id=54777
        <rdar://problem/8666428>
        
        This patch adds support for Mac OS X Services in WebKit2 windows.
        In WKView we now call registerServicesMenuSendTypes providing the
        pasteboard types supported by WebKit and we also implement the two
        protocol methods required to validate the send type and write the
        content to the pasteboard. Unfortunately, AppKit expects the content
        to be available in the pasteboard upon return from writeSelectionToPasteboard and
        this is the reason why the call to the WebProcess is synchronous.

        * Shared/SelectionState.h:
        (WebKit::SelectionState::SelectionState): Extended to include
        isContentRichlyEditable
        * Shared/mac/PasteboardTypes.h:
        * Shared/mac/PasteboardTypes.mm:
        (WebKit::PasteboardTypes::forSelection): Added.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:contextRef:pageGroupRef:]): Added call
        to registerServicesMenuSendTypes.
        (-[WKView writeSelectionToPasteboard:types:]): Added.
        (-[WKView validRequestorForSendType:returnType:]): Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::writeSelectionToPasteboard):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::respondToChangedSelection): Modified to
        support the new SelectionState value.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::writeSelectionToPasteboard): Added synchronous
        message to write the selected content to the pasteboard.

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

        Reviewed by Sam Weinig.

        Add a ShareableBitmap::create overload that takes an existing SharedMemory object
        https://bugs.webkit.org/show_bug.cgi?id=55081

        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::createShareable):
        (WebKit::ShareableBitmap::create):
        * Shared/ShareableBitmap.h:

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

        Reviewed by Dan Bernstein.

        Web Inspector toolbar looks bad in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=55076
        <rdar://problem/8866258>

        * UIProcess/API/mac/WKView.mm:
        (-[WKView mouseDownCanMoveWindow]):
        Return NO from mouseDownCanMoveWindow to prevent drags in the (now transparent) inspector WKView
        from dragging the window around.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        Call [WKView setDrawsBackground:NO].

2011-02-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove WKPageForceRepaintWithInvalidation and instead make WKPageForceRepaint
        always dirty the entire page.

        * Shared/ForceRepaintFlags.h: Removed.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageForceRepaint):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::forceRepaint):
        * UIProcess/WebPageProxy.h:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::forceRepaint):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::forceRepaint):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * win/WebKit2.vcproj:

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

        Reviewed by Sam Weinig.

        Race condition when creating and destroying pages quickly
        https://bugs.webkit.org/show_bug.cgi?id=55061
        <rdar://problem/8708435>

        When the last page in a web process is closed, the web process would
        previously terminate, even if the UI process had created a new page
        (the CreateNewPage message just wouldn't have reached the web process yet).

        Fix this by adding a ShouldTerminate message that the web process sends when it's
        about to terminate. If the UI process has any pending pages, downloads etc. it will
        prevent the web process from terminating. Otherwise, it will immmediately disconnect
        the WebPageProxy so that creating a page after that will launch a new web process.

        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
        (WebKit::WebPluginSiteDataManager::shouldTerminate):
        * UIProcess/Plugins/WebPluginSiteDataManager.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::shouldTerminate):
        (WebKit::WebContext::disconnectProcess):
        * UIProcess/WebContext.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::disconnect):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        (WebKit::WebProcessProxy::didClose):
        (WebKit::WebProcessProxy::shouldTerminate):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::terminateIfPossible):

2011-02-23  Mike Thole  <mthole@apple.com>

        Reviewed by Darin Adler.

        WKBundleNavigationAction.h should be exposed as a public header
        https://bugs.webkit.org/show_bug.cgi?id=55059

        * WebKit2.xcodeproj/project.pbxproj:
        Changed WKBundleNavigationAction.h from 'project' to 'public'.

2011-02-23  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Make sure Symbian binary UIDs are unique

        * WebProcess.pro: Resolve the UID collision with QtTestBrowser.pro
        by changing the UID.

2011-02-23  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Fix the Symbian build after r79334
        https://bugs.webkit.org/show_bug.cgi?id=55044

        * WebKit2.pri: Copy the rules from JavaScriptCore.pri for
        defineTest().

        Remove addWebKit2LibWholeArchive as it is no longer needed.

2011-02-23  Alejandro G. Castro  <alex@igalia.com>

        Unreviewed, fixed GTK WebKit2 compilation after r79366.

        * GNUmakefile.am:

2011-02-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Rename PLATFORM(CF) to USE(CF)
        https://bugs.webkit.org/show_bug.cgi?id=53540

        * UIProcess/WebBackForwardList.h:
        * UIProcess/WebPageProxy.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::formatLocalizedString):

2011-02-23  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] [WK2] When the context menu is empty, we should still send the signal QWKPage::showContextMenu()
        https://bugs.webkit.org/show_bug.cgi?id=54996

        Send the signal QWKPage::showContextMenu() with an empty menu even if the content menu generated
        is empty/contain only disabled elements.

        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::showContextMenu):
        * UIProcess/qt/WebContextMenuProxyQt.cpp:
        (WebKit::WebContextMenuProxyQt::showContextMenu):

2011-02-22  Dan Bernstein  <mitz@apple.com>

        LLVM Compiler build fix.

        * Scripts/webkit2/messages.py:
        * WebProcess/ApplicationCache/WebApplicationCacheManager.h:

2011-02-22  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Alexey Proskuryakov.

        Drop the language tag part from the User Agent string
        https://bugs.webkit.org/show_bug.cgi?id=54560

        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::standardUserAgent):

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::standardUserAgent):

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

        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::WebPageProxy::standardUserAgent): Drop the language tag
        part and fix style.

2011-02-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add WebKit2 API to force a repaint with an invalidation
        https://bugs.webkit.org/show_bug.cgi?id=55015

        * Shared/ForceRepaintFlags.h: Added.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageForceRepaint):
        (WKPageForceRepaintWithInvalidation):
        * UIProcess/API/C/WKPage.h:
        Add WKPageForceRepaintWithInvalidation which does the same thing WKPageForceRepaint
        but also calls setNeedsDisplay on the entire bounds of the page.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::forceRepaint):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::forceRepaint):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Pipe the flag down to the WebProcess.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Add ForceRepaintFlags.h.

2011-02-22  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/9039670>
        
        Make sure that we set the accelerateDrawing property on the LayerTreeHosts's
        non-composited content layer if the preference is set.

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

2011-02-22  Brady Eidson  <beidson@apple.com>

        Fix it Windows-style.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::getSitesWithPluginData):
        (WebKit::WebProcess::clearPluginSiteData):

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

        Reviewed by Dan Bernstein.

        Rename WebProcess::shutdownIfPossible to WebProcess::terminateIfPossible
        https://bugs.webkit.org/show_bug.cgi?id=55008

        * WebProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::downloadFinished):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::removeWebPage):
        (WebKit::WebProcess::terminateIfPossible):
        (WebKit::WebProcess::getSitesWithPluginData):
        * WebProcess/WebProcess.h:
        * WebProcess/gtk/WebProcessGtk.cpp:
        (WebKit::WebProcess::platformTerminate):
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformTerminate):
        * WebProcess/qt/WebProcessQt.cpp:
        (WebKit::WebProcess::platformTerminate):
        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformTerminate):

2011-02-22  Brady Eidson  <beidson@apple.com>

        Windows build-fix attempt.

        * win/WebKit2Generated.make:

2011-02-22  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed.

        <rdar://problem/8762042> and  https://bugs.webkit.org/show_bug.cgi?id=54514
        API to view and delete Application Cache data by origin.

        [Qt][WK2] Buildfix after r79364.

        * DerivedSources.pro:
        * WebKit2.pri:

2011-02-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson and looked over by Brian Weinstein.

        <rdar://problem/8762042> and https://bugs.webkit.org/show_bug.cgi?id=54514
        API to view and delete Application Cache data by origin.

        I couldn't help myself - I also re-alphabetized WebResourceCacheManager in many places where
        it's sorting was wrong due to a last minute name change.

        Project file changes:
        * GNUmakefile.am:
        * win/WebKit2.vcproj:
        * win/WebKit2Common.vsprops:
        * win/WebKit2Generated.make:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:

        WK2 build-system and API paperwork:
        * DerivedSources.make:
        * Platform/CoreIPC/MessageID.h:
        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        * UIProcess/API/C/WKAPICast.h:

        Add a helper to perform an ArrayCallback with a Vector of SecurityOriginDatas:
        * Shared/SecurityOriginData.cpp:
        (WebKit::performAPICallbackWithSecurityOriginDataVector):
        * Shared/SecurityOriginData.h:
        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::didGetCacheOrigins): Use performAPICallbackWithSecurityOriginDataVector here.

        Add an ApplicationCacheManagerProxy to the context and invalidate it at the appropriate times:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::processDidClose):
        (WebKit::WebContext::didReceiveMessage): Route messages to the right proxy.
        * UIProcess/WebContext.h:
        (WebKit::WebContext::applicationCacheManagerProxy):
        (WebKit::WebContext::resourceCacheManagerProxy):

        Add API to get the ApplicationCacheManager for a context:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetApplicationCacheManager):
        (WKContextGetResourceCacheManager):
        * UIProcess/API/C/WKContext.h:

        Route messages to the right place:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage):

        Add the API object, which wraps to WebApplicationCacheManagerProxy:
        * UIProcess/API/C/WKApplicationCacheManager.cpp: Added.
        (WKApplicationCacheManagerGetTypeID):
        (WKApplicationCacheManagerGetApplicationCacheOrigins):
        (WKApplicationCacheManagerDeleteEntriesForOrigin):
        (WKApplicationCacheManagerDeleteAllEntries):
        * UIProcess/API/C/WKApplicationCacheManager.h: Added.

        The UIProcess implementation of the manager to send messages to the WebProcess and pipe a callback back up to the client:
        * UIProcess/WebApplicationCacheManagerProxy.cpp: Added.
        (WebKit::WebApplicationCacheManagerProxy::create):
        (WebKit::WebApplicationCacheManagerProxy::WebApplicationCacheManagerProxy):
        (WebKit::WebApplicationCacheManagerProxy::~WebApplicationCacheManagerProxy):
        (WebKit::WebApplicationCacheManagerProxy::invalidate):
        (WebKit::WebApplicationCacheManagerProxy::didReceiveMessage):
        (WebKit::WebApplicationCacheManagerProxy::getApplicationCacheOrigins):
        (WebKit::WebApplicationCacheManagerProxy::didGetApplicationCacheOrigins): Use performAPICallbackWithSecurityOriginDataVector here.
        (WebKit::WebApplicationCacheManagerProxy::deleteEntriesForOrigin):
        (WebKit::WebApplicationCacheManagerProxy::deleteAllEntries):
        * UIProcess/WebApplicationCacheManagerProxy.h: Added.
        (WebKit::WebApplicationCacheManagerProxy::clearContext):
        (WebKit::WebApplicationCacheManagerProxy::type):
        * UIProcess/WebApplicationCacheManagerProxy.messages.in: Added.

        The WebProcess implementation to response to UIProcess messages and actually do the dirty-work in WebCore:
        * WebProcess/ApplicationCache: Added.
        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp: Added.
        (WebKit::WebApplicationCacheManager::shared):
        (WebKit::WebApplicationCacheManager::WebApplicationCacheManager):
        (WebKit::WebApplicationCacheManager::didReceiveMessage):
        (WebKit::WebApplicationCacheManager::getApplicationCacheOrigins):
        (WebKit::WebApplicationCacheManager::deleteEntriesForOrigin):
        (WebKit::WebApplicationCacheManager::deleteAllEntries):
        * WebProcess/ApplicationCache/WebApplicationCacheManager.h: Added.
        * WebProcess/ApplicationCache/WebApplicationCacheManager.messages.in: Added.

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

        Reviewed by Sam Weinig.

        Get rid of WebProcessManager
        https://bugs.webkit.org/show_bug.cgi?id=55001

        WebProcessManager had become a stupid map of WebContext > WebProcess relations,
        which isn't really useful since the WebContext already knows about its process.

        * Shared/WebURLRequest.cpp:
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::ensureWebProcess):
        (WebKit::WebContext::processDidFinishLaunching):
        * UIProcess/WebProcessManager.cpp: Removed.
        * UIProcess/WebProcessManager.h: Removed.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didClose):
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

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

        Reviewed by Darin Adler.

        Get rid of WebProcessManager::getAllWebProcessContexts
        https://bugs.webkit.org/show_bug.cgi?id=55000

        * Shared/WebURLRequest.cpp:
        (WebKit::WebURLRequest::setDefaultTimeoutInterval):
        Call WebContext::allContexts instead.

        * UIProcess/WebContext.cpp:
        * UIProcess/WebContext.h:
        Add a vector of WebContext objects. Update it when creating and destroying contexts.

        * UIProcess/WebProcessManager.cpp:
        * UIProcess/WebProcessManager.h:
        Remove WebProcessManager::getAllWebProcessContexts.

2011-02-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Re-add early bail out in dispatchDecidePolicyForNavigationAction with prevents
        a crash running fast/loader/empty-embed-src-attribute.html. This matches a 
        bail out in the default policy delegate in WebKit1.

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

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

        Reviewed by Dan Bernstein.

        Grammar correction from Spelling & Grammar window doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=54982
        <rdar://problem/8940918>

        * UIProcess/API/mac/WKView.mm:
        (-[WKView isGrammarCheckingEnabled]):
        (-[WKView setGrammarCheckingEnabled:]):
        Call down to the text checker.

        * UIProcess/TextChecker.h:
        Add updateSpellingUIWithGrammarString.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateSpellingUIWithGrammarString):
        Call TextChecker::updateSpellingUIWithGrammarString.

        * UIProcess/WebPageProxy.messages.in:
        Add UpdateSpellingUIWithGrammarString message.

        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        * UIProcess/qt/TextCheckerQt.cpp:
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        * UIProcess/win/TextCheckerWin.cpp:
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        Add stubs.

        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        Update the spelling panel.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::updateSpellingUIWithGrammarString):
        Send an UpdateSpellingUIWithGrammarString message to the UI process.

2011-02-22  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Anders Carlsson.

        notImplemented() should behave identical in WebCore and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=54449

        Use NotImplemented.h from WebCore. Initialize logging channels.
        Remove the WebKit2 concept of notImplemented().

        * Platform/gtk/SharedMemoryGtk.cpp:
        * Platform/gtk/WorkQueueGtk.cpp:
        * Platform/qt/WorkQueueQt.cpp:
        * Platform/win/WorkQueueWin.cpp:
        * Shared/NotImplemented.h: Removed.
        * Shared/Plugins/NPIdentifierData.cpp:
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        * Shared/Plugins/NPVariantData.cpp:
        * Shared/cairo/ShareableBitmapCairo.cpp:
        * Shared/gtk/ShareableBitmapGtk.cpp:
        * Shared/gtk/WebCoreArgumentCodersGtk.cpp:
        * Shared/qt/WebCoreArgumentCodersQt.cpp:
        * Shared/win/LayerTreeContextWin.cpp:
        * UIProcess/API/mac/PageClientImpl.mm:
        * UIProcess/API/qt/qwkpage.cpp:
        * UIProcess/Launcher/gtk/ThreadLauncherGtk.cpp:
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        * UIProcess/Plugins/gtk/PluginInfoStoreGtk.cpp:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        * UIProcess/WebInspectorProxy.cpp:
        * UIProcess/gtk/TextCheckerGtk.cpp:
        * UIProcess/gtk/WebInspectorGtk.cpp:
        * UIProcess/gtk/WebPreferencesGtk.cpp:
        * UIProcess/qt/TextCheckerQt.cpp:
        * UIProcess/qt/WebInspectorProxyQt.cpp:
        * UIProcess/win/TextCheckerWin.cpp:
        * UIProcess/win/WebContextMenuProxyWin.cpp:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Downloads/cf/DownloadCFNet.cpp:
        * WebProcess/Downloads/curl/DownloadCurl.cpp:
        * WebProcess/Downloads/mac/DownloadMac.mm:
        * WebProcess/Downloads/qt/DownloadQt.cpp:
        * WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        * WebProcess/Plugins/Netscape/gtk/NetscapePluginGtk.cpp:
        * WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp:
        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/gtk/WebContextMenuClientGtk.cpp:
        * WebProcess/WebCoreSupport/gtk/WebPopupMenuGtk.cpp:
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        * WebProcess/WebCoreSupport/qt/WebContextMenuClientQt.cpp:
        * WebProcess/WebPage/gtk/WebInspectorGtk.cpp:
        * WebProcess/WebPage/qt/WebInspectorQt.cpp:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        * WebProcess/gtk/WebProcessGtk.cpp:
        * config.h:
        * win/WebKit2.vcproj:

2011-02-22  Brian Weinstein  <bweinstein@apple.com>

        Rubber-stamped by Brady Eidson.

        Invalidate the WebResourceCacheManagerProxy in WebContext::processDidClose.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::processDidClose):

2011-02-21  Adam Roben  <aroben@apple.com>

        Make DrawingAreaProxyImpl keep track of the most recent state ID it sent to the web process

        This will be useful for sending repeated messages for the same state ID to the web process.
        We don't do this currently, but will need to if we're asked to paint after we've thrown away
        our backing store to save memory.

        Fixes <http://webkit.org/b/54916> DrawingAreaProxyImpl should keep track of the state ID it
        last sent to the web process

        Reviewed by Anders Carlsson.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl): Initialize m_requestedStateID, and
        reordered member initialization to match the new declaration order.
        (WebKit::DrawingAreaProxyImpl::didUpdateState): Added an assertion that the stateID we got
        from the web process is no newer than the most recent one we requested.
        (WebKit::DrawingAreaProxyImpl::sendUpdateState): Changed to increment and send
        m_requestedStateID instead of a new global stateID.

        * UIProcess/DrawingAreaProxyImpl.h: Added m_requestedStateID, and moved the state IDs before
        other data members. Also beefed the comment explaining m_currentStateID.

2011-02-22  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt] Redesign the build system
        https://bugs.webkit.org/show_bug.cgi?id=51339

        Part 2.

        Build WebCore as a static library, compile the WebKit API and WebKit2 API
        in a final step and link to WebKit2, WebCore and JSC libraries to fix
        linking issues resulting from stripped away symbols.

        * WebKit2.pri: Add include paths.
        * WebKit2.pro: Move include paths to WebKit2.pri and move
        the API source to WebKit/qt/QtWebKit.pro

2011-02-22  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] [WK2] Improve the memory handling of the context menu for WebKit 2
        https://bugs.webkit.org/show_bug.cgi?id=54902

        Refactor the context menu handling of Qt to make it simpler to manage memory.

        WebContextMenuProxyQt uses smart pointer for all the references to menu so
        there is no need to delete it explicitely.

        Passing the QMenu from QWKPage to the client of the signal now uses a QSharedPointer so
        the client can choose to handle the memory, but there is no leak if it does not.

        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::QGraphicsWKView):
        (QGraphicsWKView::showContextMenu):
        * UIProcess/API/qt/qgraphicswkview.h:
        * UIProcess/API/qt/qwkpage.h:
        * UIProcess/qt/WebContextMenuProxyQt.cpp:
        (WebKit::WebContextMenuProxyQt::showContextMenu):
        (WebKit::WebContextMenuProxyQt::createContextMenu):
        * UIProcess/qt/WebContextMenuProxyQt.h:

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

        Reviewed by Xan Lopez.

        [GTK] make distcheck fails
        https://bugs.webkit.org/show_bug.cgi?id=54943

        Removed reference to NotImplemented.h which was removed.

        * GNUmakefile.am:

2011-02-22  Kimmo Kinnunen  <kimmo.t.kinnunen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QtWebProcess should be installed with 'make install'
        https://bugs.webkit.org/show_bug.cgi?id=44100

        Follow the standard in other project files and allow install
        location to be changed with INSTALL_BINS variable.

        * WebProcess.pro: Install QtWebProcess.

2011-02-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79296.
        http://trac.webkit.org/changeset/79296
        https://bugs.webkit.org/show_bug.cgi?id=54941

        Breaks compilation on SnowLeapard Intel Release (Requested by
        kbalazs_ on #webkit).

        * Platform/gtk/SharedMemoryGtk.cpp:
        * Platform/gtk/WorkQueueGtk.cpp:
        * Platform/qt/WorkQueueQt.cpp:
        * Platform/win/WorkQueueWin.cpp:
        * Shared/NotImplemented.h: Copied from Source/WebKit2/WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp.
        * Shared/Plugins/NPIdentifierData.cpp:
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        * Shared/Plugins/NPVariantData.cpp:
        * Shared/cairo/ShareableBitmapCairo.cpp:
        * Shared/gtk/ShareableBitmapGtk.cpp:
        * Shared/gtk/WebCoreArgumentCodersGtk.cpp:
        * Shared/qt/WebCoreArgumentCodersQt.cpp:
        * Shared/win/LayerTreeContextWin.cpp:
        * UIProcess/API/mac/PageClientImpl.mm:
        * UIProcess/API/qt/qwkpage.cpp:
        * UIProcess/Launcher/gtk/ThreadLauncherGtk.cpp:
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        * UIProcess/Plugins/gtk/PluginInfoStoreGtk.cpp:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        * UIProcess/WebInspectorProxy.cpp:
        * UIProcess/gtk/TextCheckerGtk.cpp:
        * UIProcess/gtk/WebInspectorGtk.cpp:
        * UIProcess/gtk/WebPreferencesGtk.cpp:
        * UIProcess/qt/TextCheckerQt.cpp:
        * UIProcess/qt/WebInspectorProxyQt.cpp:
        * UIProcess/win/TextCheckerWin.cpp:
        * UIProcess/win/WebContextMenuProxyWin.cpp:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Downloads/cf/DownloadCFNet.cpp:
        * WebProcess/Downloads/curl/DownloadCurl.cpp:
        * WebProcess/Downloads/mac/DownloadMac.mm:
        * WebProcess/Downloads/qt/DownloadQt.cpp:
        * WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        * WebProcess/Plugins/Netscape/gtk/NetscapePluginGtk.cpp:
        * WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp:
        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/gtk/WebContextMenuClientGtk.cpp:
        * WebProcess/WebCoreSupport/gtk/WebPopupMenuGtk.cpp:
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        * WebProcess/WebCoreSupport/qt/WebContextMenuClientQt.cpp:
        * WebProcess/WebPage/gtk/WebInspectorGtk.cpp:
        * WebProcess/WebPage/qt/WebInspectorQt.cpp:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        * WebProcess/gtk/WebProcessGtk.cpp:
        * config.h:
        * win/WebKit2.vcproj:

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

        Reviewed by Anders Carlsson.

        notImplemented() should behave identical in WebCore and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=54449

        Use NotImplemented.h from WebCore. Initialize logging channels.
        Remove the WebKit2 concept of notImplemented().

        * Platform/gtk/SharedMemoryGtk.cpp:
        * Platform/gtk/WorkQueueGtk.cpp:
        * Platform/qt/WorkQueueQt.cpp:
        * Platform/win/WorkQueueWin.cpp:
        * Shared/NotImplemented.h: Removed.
        * Shared/Plugins/NPIdentifierData.cpp:
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        * Shared/Plugins/NPVariantData.cpp:
        * Shared/cairo/ShareableBitmapCairo.cpp:
        * Shared/gtk/ShareableBitmapGtk.cpp:
        * Shared/gtk/WebCoreArgumentCodersGtk.cpp:
        * Shared/qt/WebCoreArgumentCodersQt.cpp:
        * Shared/win/LayerTreeContextWin.cpp:
        * UIProcess/API/qt/qwkpage.cpp:
        * UIProcess/Launcher/gtk/ThreadLauncherGtk.cpp:
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        * UIProcess/Plugins/gtk/PluginInfoStoreGtk.cpp:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        * UIProcess/WebInspectorProxy.cpp:
        * UIProcess/gtk/TextCheckerGtk.cpp:
        * UIProcess/gtk/WebInspectorGtk.cpp:
        * UIProcess/gtk/WebPreferencesGtk.cpp:
        * UIProcess/qt/TextCheckerQt.cpp:
        * UIProcess/qt/WebInspectorProxyQt.cpp:
        * UIProcess/win/TextCheckerWin.cpp:
        * UIProcess/win/WebContextMenuProxyWin.cpp:
        * WebKit2.pro:
        * WebProcess/Downloads/cf/DownloadCFNet.cpp:
        * WebProcess/Downloads/curl/DownloadCurl.cpp:
        * WebProcess/Downloads/mac/DownloadMac.mm:
        * WebProcess/Downloads/qt/DownloadQt.cpp:
        * WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        * WebProcess/Plugins/Netscape/gtk/NetscapePluginGtk.cpp:
        * WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp:
        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/gtk/WebContextMenuClientGtk.cpp:
        * WebProcess/WebCoreSupport/gtk/WebPopupMenuGtk.cpp:
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        * WebProcess/WebCoreSupport/qt/WebContextMenuClientQt.cpp:
        * WebProcess/WebPage/gtk/WebInspectorGtk.cpp:
        * WebProcess/WebPage/qt/WebInspectorQt.cpp:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        * WebProcess/gtk/WebProcessGtk.cpp:

2011-02-21  Timothy Hatcher  <timothy@apple.com>

        Set and update the window title for the Web Inspector in WebKit2.

        https://webkit.org/b/50945
        rdar://problem/8762410

        Reviewed by Adam Roben.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::inspectedURLChanged): Added. Call platformInspectedURLChanged.
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.messages.in: Added InspectedURLChanged.
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformInspectedURLChanged): Added. Set the window title.
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformInspectedURLChanged): Added. Set the window title.
        * UIProcess/gtk/WebInspectorGtk.cpp:
        (WebKit::WebInspectorProxy::platformInspectedURLChanged): Added. Not implemented.
        * UIProcess/qt/WebInspectorProxyQt.cpp:
        (WebKit::WebInspectorProxy::platformInspectedURLChanged): Added. Not implemented.
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        (WebKit::WebInspectorFrontendClient::inspectedURLChanged): Call WebInspector::inspectedURLChanged.
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::inspectedURLChanged): Added. Send the InspectedURLChanged message.
        * WebProcess/WebPage/WebInspector.h:

2011-02-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Can't paste from 3rd party text editor into WebKit2 window.
        <rdar://problem/8978624>

        * WebProcess/com.apple.WebProcess.sb:

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

        Reviewed by Dan Bernstein.

        Initialize DrawingAreaProxy::m_size
        https://bugs.webkit.org/show_bug.cgi?id=54913

        This was removed in r76962 since it caused flashes when switching drawing areas due to
        entering and exiting composited mode, but since we no longer switch drawing areas we can
        put it back.

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

2011-02-21  Adam Roben  <aroben@apple.com>

        Add some assertions about the state IDs we receive from the web process

        Rubber-stamped by Anders Carlsson.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::update):
        (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode):
        Assert that the state ID the web process sent us is no newer than our own state ID.

2011-02-21  Adam Roben  <aroben@apple.com>

        Rename DrawingArea[Proxy]Impl's "sequence number" concept to "state ID".

        As explained in r79251, DrawingAreaProxyImpl has some state that, when it changes, causes
        all operations performed before that state change to become invalid. Currently, this state
        consists of a single piece of data: the view's size. Eventually it will encompass more data
        (e.g., the backing store we're drawing into; when we start throwing away the backing store
        to save memory, our state will have changed, and any operations that were intended for the
        old backing store will have become invalid). r79251 effectively transformed
        DrawingArea[Proxy]Impl's "sequence number," which incremented every time DrawingAreaImpl
        sent DrawingAreaProxyImpl a message, to a "state ID," which only increments when the view's
        size changes.

        This patch is just a set of simple renames to reflect the transformation that r79251
        effected. It should not introduce any changes in behavior. The renames are:
          - Messages::DrawingArea::SetSize -> UpdateState
          - Messages::DrawingAreaProxy::DidSetSize -> DidUpdateState
          - DrawingAreaProxyImpl::m_lastDidSetSizeSequenceNumber -> m_currentStateID
          - DrawingAreaProxyImpl::m_isWaitingForDidSetSize -> m_isWaitingForDidUpdateState
          - DrawingAreaProxyImpl::waitForAndDispatchDidSetSize -> waitForAndDispatchDidUpdateState
          - DrawingAreaImpl::m_inSetSize -> m_inUpdateState
          - generateSequenceNumber -> generateStateID
          - sequenceNumber -> stateID

        Fixes <http://webkit.org/b/54911> DrawingArea[Proxy]Impl's "sequence number" concept should
        be renamed to "state ID"

        Reviewed by Anders Carlsson.

        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxy.messages.in:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        * UIProcess/DrawingAreaProxyImpl.h:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        * WebProcess/WebPage/DrawingAreaImpl.h:
        Performed the renames described above.

2011-02-21  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Roben.

        REGRESSION (WebKit2): HTTP requests time out after 60 seconds
        https://bugs.webkit.org/show_bug.cgi?id=54755
        <rdar://problem/9006592>

        * Shared/API/c/WKURLRequest.cpp:
        (WKURLRequestSetDefaultTimeoutInterval):
        * Shared/API/c/WKURLRequest.h:
        Added an API to set a default timeout interval for requests created from URLs. The API
        affects both the UI process and requests created internally by the Web process. Requests
        created from NSURLRequest or CFURLRequest take timeout from those.

        * Shared/WebURLRequest.cpp: (WebKit::WebURLRequest::setDefaultTimeoutInterval):
        * Shared/WebURLRequest.h:
        Pipe the default timeout interval from WKURLRequest down to actual implementation. Since
        WebURLRequest is currently implemented with WebCore::ResourceRequest, it automatically respects
        NSURLRequest default timeout interval.

        * UIProcess/WebProcessManager.cpp: (WebKit::WebProcessManager::getAllWebProcessContexts):
        * UIProcess/WebProcessManager.h:
        Added a way to enumerate all contexts running in separate processes.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        (WebKit::WebContext::ensureWebProcess):
        (WebKit::WebContext::setDefaultRequestTimeoutInterval):
        * UIProcess/WebContext.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::setDefaultRequestTimeoutInterval):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        Use UI process default timeout interval in separate process contexts, too.

2011-02-18  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        WebResourceCacheManager should be responsible for managing the CFURLCache as well
        as the WebCore memory cache.
        https://bugs.webkit.org/show_bug.cgi?id=54886
        Part of <rdar://problem/8971738>

        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::getCacheOrigins): Call through to cFURLCacheHostNames, and add
            create SecurityOrigin's for them and add them to the set of SecurityOrigins with cache.
        (WebKit::WebResourceCacheManager::clearCacheForOrigin): Call through to clear the CFURLCache for
            the origin's hostname.
        * WebProcess/ResourceCache/WebResourceCacheManager.h:

        * WebProcess/ResourceCache/cf: Added.
        * WebProcess/ResourceCache/cf/WebResourceCacheManagerCFNet.cpp: Added.
        (WebKit::WebResourceCacheManager::cfURLCacheHostNames): Call through to WebKitSystemInterface.
        (WebKit::WebResourceCacheManager::clearCFURLCacheForHostNames): Ditto.

        * win/WebKit2.vcproj: Added new file.
        * WebKit2.xcodeproj/project.pbxproj: Ditto.

2011-02-21  Adam Roben  <aroben@apple.com>

        Move control of the sequence number from DrawingAreaImpl to DrawingAreaProxyImpl

        DrawingAreaProxyImpl has some state that, when it changes, causes all operations performed
        before that state change to become invalid. When painting, we need to have performed at
        least one Update for the most recent state; otherwise, we'll be painting old/incorrect bits
        into the view.

        Currently, this state consists of a single piece of data: the view's size. Whenever the
        state (i.e., size) changes, we tell the web process via the SetSize message, and the web
        process lets us know that it has updated to match the new state (i.e., size) via the
        DidSetSize message.

        When it's time to paint, if we're waiting for the web process to update to match our current
        state (i.e., size), we block for a little while hoping to receive a DidSetSize message so
        that we can paint up-to-date bits into the window. This can cause us to receive messages
        out-of-order; the DidSetSize message will be processed immediately, and any messages that
        were sent before the DidSetSize message will be processed later. Since the messages from
        before the DidSetSize message correspond to an old state (i.e., size), they are no longer
        useful (e.g., they contain bits of the page that are drawn at the wrong size/location), so
        we discard them.

        The way we identify and discard these messages is by keeping track of a sequence number.
        Currently, DrawingAreaImpl sends a monotonically-increasing sequence number to
        DrawingAreaProxyImpl with every message. Whenever DrawingAreaProxyImpl receives a DidSetSize
        message, it records the sequence number that came along with it. If we then later receive
        any messages that have a lower sequence number, we know they correspond to an old state
        (i.e., size) and can discard them.

        This patch moves control of the sequence number to DrawingAreaProxyImpl.
        DrawingAreaProxyImpl now sends a monotonically-increasing sequence number in the SetSize
        message. DrawingAreaImpl records this sequence number when it receives the SetSize message,
        and sends it back to DrawingAreaProxyImpl in every message. Otherwise the logic is the same
        as before.

        This should cause no changes in behavior, but will allow DrawingAreaProxyImpl to request a
        full backing store update (by incrementing the sequence number) at times other than when the
        view's size changes (e.g., after it has thrown away its backing store in order to save
        memory).

        Fixes <http://webkit.org/b/54907> DrawingAreaProxyImpl should tell DrawingAreaImpl what
        sequence number to use

        Reviewed by Anders Carlsson.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::generateSequenceNumber): Moved here from DrawingAreaImpl.cpp.
        (WebKit::DrawingAreaProxyImpl::sendSetSize): Changed to pass a new sequence number in the
        SetSize message.
        (WebKit::DrawingAreaProxyImpl::waitForAndDispatchDidSetSize): Added a FIXME about a
        potential improvement.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::setSize): Updated to match the message's new parameters.

        * WebProcess/WebPage/DrawingArea.messages.in: Added a sequenceNumber parameter to SetSize.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl): Initialize m_sequenceNumber.
        (WebKit::DrawingAreaImpl::setSize): Record the new sequence number from the UI process.

        (WebKit::DrawingAreaImpl::layerHostDidFlushLayers):
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
        (WebKit::DrawingAreaImpl::display):
        Send m_sequenceNumber, instead of a new sequence number, back to the UI process.

        * WebProcess/WebPage/DrawingAreaImpl.h: Added m_sequenceNumber, updated setSize function to
        match the base class.

2011-02-21  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 54894 - Make inheritance structure described by ClassInfo match C++ class hierarchy.

        The ClassInfo objects describe an inheritance hierarchy, with each ClassInfo instance
        containing a pointer to its parent class. These links should reflect the inheritance
        hierarchy of C++ classes below JSObject. For the large part it does, but in some cases
        entries in the C++ hierarchy are skipped over. This presently likely doesn't matter,
        since intervening C++ classes may not have ClassInfo - but would be a potential bug
        were ClassInfo were to be added.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:

2011-02-21  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement WorkQueue::sheduleWorkAfterDelay
        https://bugs.webkit.org/show_bug.cgi?id=54878

        * Platform/qt/WorkQueueQt.cpp:
        (WorkQueue::scheduleWorkAfterDelay):

2011-02-20  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add WebResourceCacheDataManager to the compilation after r78848
        https://bugs.webkit.org/show_bug.cgi?id=54732

        Added resource cache manager API to GTK+ compilation after r78848.

        * GNUmakefile.am:

2011-02-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Crash in WebProcess at com.apple.WebCore: WebCore::Page::goToItem + 46
        <rdar://problem/8942726>

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::goForward):
        (WebKit::WebPage::goBack):
        (WebKit::WebPage::goToBackForwardItem):
        Defend agains null HistoryItems.

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

        Reviewed by Maciej Stachowiak.

        Crash when a plug-in requests a javascript: url that destroys the plug-in
        https://bugs.webkit.org/show_bug.cgi?id=54837
        <rdar://problem/9005475>

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::destroy):
        Null out m_pluginController.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performJavaScriptURLRequest):
        Don't access the frame through m_pluginElement since it will be nulled out
        when the plug-in is destroyed.

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

        Reviewed by Sam Weinig.

        Fix another crash when a plug-in is destroyed when evaluating JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=54834
        <rdar://problem/9005475>

        This contains three separate fixes:

        - In unprotectPluginFromDestruction we can't just destroy the plug-in once
          the count reaches zero, because the plug-in might still have code executing
          on the stack. To fix this we use a zero-delay timer to defer destruction
          of the plug-in.

        - Trying to get the NPObject for the window using NPN_GetValue would return
          NPERR_NO_ERROR, even if the returned NPObject was null. Fix this to return
          NPERR_GENERIC_ERROR instead.

        - Protect the plug-in from destruction anytime an NPAPI call that sends a 
          synchronous IPC message is made.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::PluginControllerProxy):
        (WebKit::PluginControllerProxy::destroy):
        (WebKit::PluginControllerProxy::unprotectPluginFromDestruction):
        * PluginProcess/PluginControllerProxy.h:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::PluginDestructionProtector::PluginDestructionProtector):
        (WebKit::NPN_GetValue):
        (WebKit::NPN_Evaluate):
        (WebKit::NPN_GetProperty):
        (WebKit::NPN_SetProperty):
        (WebKit::NPN_RemoveProperty):
        (WebKit::NPN_HasProperty):
        (WebKit::NPN_HasMethod):
        (WebKit::NPN_Enumerate):
        (WebKit::NPN_Construct):
        (WebKit::NPN_GetValueForURL):
        (WebKit::NPN_SetValueForURL):

2011-02-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add phase in addition to momentumPhase to platform wheel events
        Part of <rdar://problem/8945362>

        Rename existing phase to momentumPhase.

        * Shared/WebEvent.h:
        (WebKit::WebWheelEvent::momentumPhase):
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformWheelEvent::WebKit2PlatformWheelEvent):
        * Shared/WebWheelEvent.cpp:
        (WebKit::WebWheelEvent::WebWheelEvent):
        (WebKit::WebWheelEvent::encode):
        (WebKit::WebWheelEvent::decode):
        * Shared/mac/WebEventFactory.mm:
        (WebKit::phaseForEvent):
        (WebKit::momentumPhaseForEvent):
        (WebKit::WebEventFactory::createWebWheelEvent):

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

        Reviewed by Dan Bernstein.

        Crash when trying to take a snapshot of an uninitialized plug-in
        https://bugs.webkit.org/show_bug.cgi?id=54812

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::notifyWidget):
        Don't try to create a snapshot of the plug-in if it hasn't been initialized.

2011-02-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 54786 - Devirtualize JSCell::classInfo()

        Instead of making a virtual function call, add a pointer to the ClassInfo
        onto Structure.

        This removes a virtual function call, and paves the way towards removing all
        the createStructure methods, and StructureFlags/AnonymousSlotCount properties
        (these should be able to move onto ClassInfo).

        Calls to Structure::create must now pass a pointer to the ClassInfo for the
        structure. All objects now have a ClassInfo pointer, non-object cell types
        still do not.

        Changes are most mechanical, involving three steps:
            * Remove virtual classInfo() methods.
            * Add &s_info parameter to calls to Structure::create.
            * Rename ClassInfo static members on classes from 'info' to 's_info',
              for consistency.

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

2011-02-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Rename performLookupAtCurrentMouseLocation to performDictionaryLookupAtCurrentMouseLocation

        * UIProcess/API/mac/WKView.mm:
        (-[WKView performDictionaryLookupAtCurrentMouseLocation]):
        * UIProcess/API/mac/WKViewPrivate.h:

2011-02-19  Charlie Reis  <creis@chromium.org>

        Reviewed by Mihai Parparita.

        Ensure loading has stopped in HistoryController::goToItem
        https://bugs.webkit.org/show_bug.cgi?id=54517

        Add a FrameLoaderClient callback for whether to stop loading before goToItem.

        Test: http/tests/navigation/forward-to-fragment-fires-onload.html

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

2011-02-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Adele Peterson.

        Real fix for <rdar://problem/9025723> CrashTracer: [USER] 
        1 crash in WebProcess at com.apple.WebKit2: 
        WebKit::WebPage::didChangeScrollOffsetForMainFrame + 31

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::didChangeScrollOffset):
        Add null check for the FrameView. This function can be called when the
        FrameView is being torn down during a transition to a new FrameView.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didChangeScrollOffsetForMainFrame):
        Revert last attempt.

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

        Reviewed by Sam Weinig.

        Hang trying to load nytimes.com with Flash installed
        <rdar://problem/9018113> 

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendSyncMessage):
        Call beginWaitForSyncReply() before sending the message. Otherwise, in some cases we could
        have gotten back a synchronous request before calling beginWaitForSyncReply(), and then we wouldn't
        process it correctly. (Which would lead to the hang).

2011-02-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/9021296> Some plug-ins are the wrong size after zooming
        
        Use the same frame/bounds adjustment that we use for NSView-based
        plugins in WebKit2, which allows plug-ins and their snapshots to
        render with the correct size after scaling.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::setBoundsSize):
        (WebKit::PluginView::viewGeometryDidChange):
        (WebKit::PluginView::clipRectInWindowCoordinates):
        * WebProcess/Plugins/PluginView.h:

2011-02-18  Beth Dakin  <bdakin@apple.com>

        Rubber-stamped by Adele Peterson.

        Fix for <rdar://problem/9025723> CrashTracer: [USER] 
        1 crash in WebProcess at com.apple.WebKit2: 
        WebKit::WebPage::didChangeScrollOffsetForMainFrame + 31

        Simple null-check.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didChangeScrollOffsetForMainFrame):

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

        Reviewed by Kenneth Rohde Christiansen.

        Tiled backing store area is too big.
        Error in area calculcation causes size of backing store
        up to 8 times bigger than viewport with default multipliers.
        https://bugs.webkit.org/show_bug.cgi?id=54587

        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::calculateKeepRect):
        (WebKit::TiledDrawingAreaProxy::calculateCoverRect):

2011-02-18  John Sullivan  <sullivan@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9026169>
        https://bugs.webkit.org/show_bug.cgi?id=54780
        pendingAPIRequestURL isn't updated for WKPageGoToBackForwardListItem

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::goToBackForwardItem):
        Update the pending API URL.

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

        Reviewed by Sam Weinig.

        Accelerated content fades in when using a layer backed WKView
        <rdar://problem/9021586>

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _enterAcceleratedCompositingMode:]):
        Make a new nested CATransaction and disable animations when adding the layer 
        hosting subview. This avoids an implicit fade animation that would otherwise occur.

2011-02-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Plugin snapshot location is wrong for subframes
        https://bugs.webkit.org/show_bug.cgi?id=54776
        
        Only change the CTM to the way that the plugin expects it
        when painting the plugin, not when drawing the snapshot.
        This fixes the snapshot location when painting flattened
        frames.

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

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

        Reviewed by Simon Fraser.

        Implement NetscapePlugin::pluginComplexTextInputIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=54770

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::pluginComplexTextInputIdentifier):

2011-02-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Add the ability to ask the WKPage if the main frame is pinned
        to the right or left hand side.
        Part of <rdar://problem/9017043>.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageIsPinnedToLeftSide):
        (WKPageIsPinnedToRightSide):
        * UIProcess/API/C/WKPage.h:
        Add new API calls.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::processDidCrash):
        (WebKit::WebPageProxy::didChangeScrollOffsetPinningForMainFrame):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isPinnedToLeftSide):
        (WebKit::WebPageProxy::isPinnedToRightSide):
        Initialize, reset and update the pinned state.

        * UIProcess/WebPageProxy.messages.in:
        Add message to update the pinned state.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::didChangeScrollOffset):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::didChangeScrollOffsetForMainFrame):
        * WebProcess/WebPage/WebPage.h:
        Cache the pinned state, and only update the UIProcess when it
        changes.

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

        Reviewed by Simon Fraser.

        Fix assertion in SharedMemory::create when trying to snapshot 0x0 plug-in
        https://bugs.webkit.org/show_bug.cgi?id=54768

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::snapshot):
        Don't try to create a handle from a null ShareableBitmap.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::snapshot):
        Check for a zero sized plug-in before trying to create a snapshot.

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

        Reviewed by Simon Fraser.

        WKView flashes when entering/exiting compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=54695
        <rdar://problem/9011554>

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _exitAcceleratedCompositingMode]):
        Remove the layer hosting view before clearing out its layer, otherwise we can get
        white flashes when exiting accelerated compositing mode.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        When entering accelerated compositing mode, we want to defer sending the message
        until we've actually committed the layer tree and pushed all changes over to the
        UI process.

        (WebKit::DrawingAreaImpl::layerHostDidFlushLayers):
        Tell the layer tree host to force a repaint. This will ensure that all layer tree
        changes are pushed over to the UI process. When that is done, send the new layer tree
        context over to the UI process.

        (WebKit::DrawingAreaImpl::setRootCompositingLayer):
        When exiting compositing mode in response to a didSetSize, we want to exit accelerated 
        compositing mode right away to avoid flashes. This is safe since we've laid out the page
        already so we won't end up reentering setRootCompositingLayer.

        (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode):
        Tell the layer tree host to notify us when the next layer tree flush happened, so we can
        let the UI process know. If we're entering accelerated compositing mode in response to a
        SetSize message, the new layer tree context will be passed in the DidSetSize message.

        * WebProcess/WebPage/DrawingAreaImpl.h:
        Add layerHostDidFlushLayers.

        * WebProcess/WebPage/LayerTreeHost.h:
        Add setShouldNotifyAfterNextScheduledLayerFlush.

        * WebProcess/WebPage/mac/LayerTreeHostMac.h:
        Add a m_notifyAfterScheduledLayerFlush flag.

        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::LayerTreeHostMac):
        Initialize m_notifyAfterScheduledLayerFlush to false.

        (WebKit::LayerTreeHostMac::setShouldNotifyAfterNextScheduledLayerFlush):
        Set m_notifyAfterScheduledLayerFlush to true.

        (WebKit::LayerTreeHostMac::flushPendingLayerChangesRunLoopObserverCallback):
        If m_notifyAfterScheduledLayerFlush is true, call DrawingAreaImpl::layerHostDidFlushLayers.

2011-02-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adele Peterson.

        REGRESSION (WebKit2): Wrong frame printed on tivofaq.com
        https://bugs.webkit.org/show_bug.cgi?id=54677
        <rdar://problem/8994133>

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::area): Use visible frame bounds.
        (WebKit::findLargestFrameInFrameSet): Added a comment explaining what we're up to here.
        WebKit2 shouldn't be making policy decisions for the client, but it gets dangerously close
        to that. We used to expose the same as WK1 API though.

2011-02-18  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviwed.

        Remove CleanupHandler since we do not use it anymore.

        * Shared/qt/CleanupHandler.cpp: Removed.
        * Shared/qt/CleanupHandler.h: Removed.

2011-02-18  Alejandro G. Castro  <alex@igalia.com>

        Fix GTK build by fixing signature of platformPaint(), required after r78956.

        * WebProcess/Plugins/Netscape/gtk/NetscapePluginGtk.cpp:
        (WebKit::NetscapePlugin::platformPaint):

2011-02-17  Dan Bernstein  <mitz@apple.com>

        LLVM Compiler build fix.

        * UIProcess/WebResourceCacheManagerProxy.h:
        * WebProcess/ResourceCache/WebResourceCacheManager.h:

2011-02-17  Simon Fraser  <simon.fraser@apple.com>

        Fix Windows and Qt builds by fixing signature of platformPaint().

        * WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp:
        (WebKit::NetscapePlugin::platformPaint):
        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::NetscapePlugin::platformPaint):

2011-02-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        WebKit2 snapshots don't show plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=54716
        
        Fix WebKit2 plug-ins to do a software paint for
        snapshotting.

        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::snapshot): Respond to the snapshot
        message by getting a sharable bitmap from the plugin, and returning
        a handle to it in the reply.

        * PluginProcess/PluginControllerProxy.messages.in: Add the snapshot
        message.
        
        * Shared/Plugins/PluginQuirks.h:
        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::determineQuirks): Add a quirk for the
        ability to be snapshotted, which we only set for Flash at the moment.
        
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::snapshot): Create a shareable bitmap, and
        paint into it.
        (WebKit::NetscapePlugin::supportsSnapshotting): Test the quirk.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformPaint): Allow the paint to happen
        if we're snapshotting, even when using the CoreAnimation drawing
        model.
        
        * WebProcess/Plugins/Plugin.h: New snapshot method.
        
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::snapshot): Send a sync message to the plugin process,
        asking for a snapshot in a shareble bitmap.
        
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::paint): Use the snapshot if we have one, to avoid
        calling into the plugin to draw, which may run script.
        
        (WebKit::PluginView::notifyWidget): Generate the snapshot before
        a flattening paint, and throw it away after.

2011-02-17  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        WebKit2: The CFNetwork Cache should be shared between the UI Process and the Web Process on
        Windows.
        https://bugs.webkit.org/show_bug.cgi?id=54683

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
 
        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):
        Make sure to remove the ending slash, as CFNetwork does not recognize the directory with
        that slash.

        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):
        Create a cache using the path, disk capacity, and memory capacity and set it as default.

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

        Reviewed by Sam Weinig.

        Web and/or plug-in process crashes when NPN_Evaluate destroys the plug-in
        https://bugs.webkit.org/show_bug.cgi?id=54686
        <rdar://problem/9013384>

        This patch fixes two bugs with a plug-in calling NPN_Evaluate to destroy itself:

        - The PluginProxy object would be destroyed in the middle of PluginProxy::evaluate.
          This would cause the web process to crash.

        - The PluginControllerProxy would call NPP_Destroy while the plug-in was busy running
          code. This would cause the plug-in process to crash.

        To fix this, we add protectPluginFromDestruction/unprotectPluginFromDestruction to
        PluginControllerProxy and use it to defer calling destroy() in the plug-in process,
        and defer actually destroying the plug-in in the web process.

        https://bugs.webkit.org/show_bug.cgi?id=54171 tracks adding a test for this.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::PluginControllerProxy):
        (WebKit::PluginControllerProxy::destroy):
        (WebKit::PluginControllerProxy::evaluate):
        (WebKit::PluginControllerProxy::protectPluginFromDestruction):
        (WebKit::PluginControllerProxy::unprotectPluginFromDestruction):
        * PluginProcess/PluginControllerProxy.h:
        (WebKit::PluginControllerProxy::asPluginController):
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::destroyPluginControllerProxy):
        (WebKit::WebProcessConnection::didReceiveMessage):
        (WebKit::WebProcessConnection::didReceiveSyncMessage):
        * PluginProcess/WebProcessConnection.h:
        (WebKit::WebProcessConnection::connection):
        * WebProcess/Plugins/PluginController.h:
        (WebKit::PluginController::PluginDestructionProtector::PluginDestructionProtector):
        (WebKit::PluginController::PluginDestructionProtector::~PluginDestructionProtector):
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::evaluate):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::protectPluginFromDestruction):
        (WebKit::PluginView::unprotectPluginFromDestruction):
        * WebProcess/Plugins/PluginView.h:

2011-02-17  Sam Weinig  <sam@webkit.org>

        Build fix.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation):

2011-02-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        WebKit2: Support Dictionary popup
        <rdar://problem/7660670>

        * Shared/TextInfo.cpp: Added.
        (WebKit::TextInfo::encode):
        (WebKit::TextInfo::decode):
        * Shared/TextInfo.h: Added.
        (WebKit::TextInfo::TextInfo):
        Add class to represent the location and style of a run of text.

        * UIProcess/PageClient.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        Invoke the dictionary popup.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView performLookupAtCurrentMouseLocation]):
        Tell the WebProcess to get get the text under the mouse and cause
        the dictionary popup to appear.

        * UIProcess/API/mac/WKViewPrivate.h:
        Add performLookupAtCurrentMouseLocation.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::performDictionaryLookupAtLocation):
        (WebKit::WebPageProxy::didPerformDictionaryLookup):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Pipe messages through.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::characterRangeAtPoint): Fix to return PassRefPtr
        and not potentially stale pointers.

        (WebKit::WebPage::characterIndexForPoint):
        Change to use a RefPtr.

        (WebKit::WebPage::performDictionaryLookupAtLocation):
        Add simple heuristic to get the word at the current point (or the current selection
        if it is at that point) and grab the style of the word to send the UIProcess.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Add new files.

2011-02-17  Brian Weinstein  <bweinstein@apple.com>

        Qt build fix.

        * WebKit2.pro: Update after renaming of MemoryCache to ResourceCache.

2011-02-17  Brian Weinstein  <bweinstein@apple.com>

        Mac build fix.

        * WebKit2.xcodeproj/project.pbxproj: Use relative to group instead of absolute paths. Not everyone's home
            directory is /Users/brian_weinstein.

2011-02-16  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Brady Eidson.

        WebKit2: Need a way to manage the WebCore Cache
        https://bugs.webkit.org/show_bug.cgi?id=54501
        
        Implement a WebKit2 API to manage the WebCore memory cache. This API exposes three functions:
        
        1) A method to get a list of all security origins that have entries in the WebCore memory cache.
        2) A method to remove all entries in the WebCore memory cache from a SecurityOrigin.
        3) A method to remove all entries from the WebCore memory cache.

        * Platform/CoreIPC/MessageID.h: Add two new MessageClasses.
        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h: Add a CacheManager type.
        * Shared/WebSecurityOrigin.h: Typedef WKCacheManagerRef.
        (WebKit::WebSecurityOrigin::createFromString): Creates a WebCore::SecurityOrigin using 
            SecurityOrigin::createFromString.
        (WebKit::WebSecurityOrigin::toString): Calls through to SecurityOrigin::toString.
        * UIProcess/API/C/WKAPICast.h:

        * UIProcess/API/C/WKCacheManager.cpp: Added.
        (WKCacheManagerGetTypeID): Returns the WebResourceCacheManagerProxy type.
        (WKCacheManagerGetCacheOrigins): Calls through to WebResourceCacheManagerProxy::getCacheOrigins.
        (callGetCacheOriginsBlockBlockAndDispose):
        (WKCacheManagerGetCacheOrigins_b):
        (WKCacheManagerDeleteCacheForOrigin): Calls through to WebResourceCacheManagerProxy::deleteCacheForOrigin.
        (WKCacheManagerDeleteAllCache): Calls through to WebResourceCacheManagerProxy::deleteAllCache.
        * UIProcess/API/C/WKCacheManager.h: Added.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetCacheManager): Calls to get the WebResourceCacheManagerProxy.
        * UIProcess/API/C/WKContext.h:

        * UIProcess/WebResourceCacheManagerProxy.cpp: Added.
        (WebKit::WebResourceCacheManagerProxy::create): Calls through to the constructor.
        (WebKit::WebResourceCacheManagerProxy::WebResourceCacheManagerProxy): Initialize the m_webContext variable.
        (WebKit::WebResourceCacheManagerProxy::~WebResourceCacheManagerProxy):
        (WebKit::WebResourceCacheManagerProxy::invalidate): Invalidate the callback map.
        (WebKit::WebResourceCacheManagerProxy::getCacheOrigins): Call through to the web process to get the cache
            origins.
        (WebKit::WebResourceCacheManagerProxy::didGetCacheOrigins): Call the callback.
        (WebKit::WebResourceCacheManagerProxy::deleteCacheForOrigin): Call through to the web process to delete cache
            for the given origin. 
        (WebKit::WebResourceCacheManagerProxy::deleteAllCache): Call through to the web process to delete all of the cache.
        * UIProcess/WebResourceCacheManagerProxy.h: Added.
        (WebKit::WebResourceCacheManagerProxy::clearContext):
        (WebKit::WebResourceCacheManagerProxy::type):
        * UIProcess/WebResourceCacheManagerProxy.messages.in: Added.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext): Initialize new member variable.
        (WebKit::WebContext::~WebContext):  Invalidates new member variable.
        (WebKit::WebContext::didReceiveMessage): Passes cache messages to the cache manager.
        * UIProcess/WebContext.h:
        (WebKit::WebContext::cacheManagerProxy):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage): Add a new message class.

        * WebProcess/ResourceCache/WebResourceCacheManager.cpp: Added.
        (WebKit::WebResourceCacheManager::shared):
        (WebKit::WebResourceCacheManager::WebResourceCacheManager):
        (WebKit::WebResourceCacheManager::~WebResourceCacheManager):
        (WebKit::WebResourceCacheManager::didReceiveMessage): Calls through to didReceiveWebResourceCacheManagerMessage.
        (WebKit::WebResourceCacheManager::getCacheOrigins): Gets a list of origins with cache entries from the memory
            cache, and puts them into a vector to send to the UI process.
        (WebKit::WebResourceCacheManager::deleteCacheForOrigin): Calls through to ResourceCache to delete all cache entries
            from a given origin.
        (WebKit::WebResourceCacheManager::deleteAllCache):
        * WebProcess/ResourceCache/WebResourceCacheManager.h: Added.
        * WebProcess/ResourceCache/WebResourceCacheManager.messages.in: Added.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage):
        (WebKit::WebProcess::clearResourceCaches): Tell the memory cache to evict its resources. This was done on WebKit1, 
            but not WebKit2.
        * WebProcess/WebProcess.h:
        
        * WebKit2.xcodeproj/project.pbxproj: Added new files.
        * win/WebKit2.vcproj: Ditto.
        * win/WebKit2Common.vsprops: Added new include directory.
        * win/WebKit2Generated.make: Added new header.

2011-02-16  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=54244
        
        Convert the line box tree to floating point and eliminate font rounding hacks.  This patch removes all of the rounding
        hacks from the Font code and makes sure all Font APIs involving width measurement and width offsets use floats.
        
        The line box tree's x, y and logicalWidth members have all been converted to floats and all of the line box APIs have
        been changed as well.
        
        In terms of pixel adjustments, overflow is using an enclosing model (so it will be enclosingIntRect of a line box's x/y/width/height).
        
        Background and border painting is using a rounding model, so borders and backgrounds will round to the nearest pixel when painting.
        
        Replaced elements still snap to integer positions on lines, and they use a rounding model as well, although their underlying line boxes
        still have a precise floating point position.

        Justification will now allow subpixel positioning to occur as well.  Platforms that don't support subpixel positioning should already
        be rounding justification spacing in their font code.

        Many layout test results change on Mac, since rounding hacks were used there and are now gone.

        * WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp:
        (WebKit::WebPopupMenu::setUpPlatformData):

2011-02-10  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Adam Roben.

        HTML5 <details> and <summary>: localized text
        https://bugs.webkit.org/show_bug.cgi?id=54260

        The method defaultDetailsSummaryText was added to LocalizationStrategy class. It is used to
        provide the default label to be used by a <details> tag that has no <summary> child.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::defaultDetailsSummaryText):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2011-02-17  Adam Roben  <aroben@apple.com>

        Make sure layout is up-to-date before rendering the layer tree in DrawingAreaImpl

        Fixes <http://webkit.org/b/54646> <rdar://problem/9016889> Assertion failure in
        FrameView::paintContents when calling WKPageForceRepaint on a page that uses accelerated
        compositing

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::forceRepaint): Lay out before we do anything else.

2011-02-17  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add WKPluginSiteDataManager.cpp compilation after r78647
        https://bugs.webkit.org/show_bug.cgi?id=54564

        * GNUmakefile.am: Added files to compilation.
        * Shared/Plugins/Netscape/NetscapePluginModule.h: used
        npruntime_internal.h in the include to avoid problems with X
        types.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setAlwaysUsesComplexTextCodePath): fixed
        ambiguous reference to Font caused by the X headers required by
        the plugins.

2011-02-16  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Allow acceleratesDrawing for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=54511

        Plumb through preference for accelerated drawing.
        
        If accelerated drawing is enabled, keep the DrawingAreaImpl in
        accelerated compositing mode.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetAcceleratedDrawingEnabled):
        (WKPreferencesGetAcceleratedDrawingEnabled):
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        (WebKit::DrawingAreaImpl::setRootCompositingLayer):
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2011-02-16  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] White screen is displayed when tiled backing store is enabled in MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=54583

        Make sure to invalidate all the tiles, including the last one.

        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::invalidate):

2011-02-16  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Tiles are not created for webkit2 after r77286.
        https://bugs.webkit.org/show_bug.cgi?id=54577

        When using the default tile size of 1024x1024, only one tile is created.
        Make sure to create this tile by undoing what seems to be a typo in r77286.

        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::paint):
        (WebKit::TiledDrawingAreaProxy::createTiles):

== Rolled over to ChangeLog-2011-02-16 ==
