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

        Reviewed by Adam Roben.

        Always disable the responsiveness timer when showing a popup menu
        https://bugs.webkit.org/show_bug.cgi?id=54578
        <rdar://problem/9009170>

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

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

        Reviewed by Adam Roben.

        Assertion failure in DrawingAreaImpl::display when calling WKPageForceRepaint on a page that uses accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=54575
        <rdar://problem/8979594>

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::forceRepaint):
        If there is a layer tree host, ask it to force a repaint instead.

        * WebProcess/WebPage/LayerTreeHost.h:
        * WebProcess/WebPage/mac/LayerTreeHostMac.h:
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::forceRepaint):
        Flush any layer changes, then flush and synchronize the current CA transaction.

2011-02-16  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=54572
        REGRESSION (WebKit2): Print Backgrounds checkbox has no effect for DOM initiated printing

        * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::preferencesDidChange): Preferences need
        to be propagated to Web process during synchronous printing.

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

        Reviewed by Sam Weinig.

        WebPluginSiteDataManager should work with plug-in process
        https://bugs.webkit.org/show_bug.cgi?id=54523
        <rdar://problem/8689312>

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::removeWebProcessConnection):
        Call startShutdownTimerIfNecessary().

        (WebKit::PluginProcess::getSitesWithData):
        Ask the plug-in module for the sites with data and send them back
        in a PluginProcessProxy::DidGetSitesWithData message.

        (WebKit::PluginProcess::clearSiteData):
        Clear site data and send back a DidClearSiteData message.

        (WebKit::PluginProcess::startShutdownTimerIfNecessary):
        Factor code out from removeWebProcessConnection.

        * PluginProcess/PluginProcess.messages.in:
        Add new messages.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::plugins):
        New function for getting all plug-ins.

        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::getPluginProcessConnection):
        Call getOrCreatePluginProcess.

        (WebKit::PluginProcessManager::getSitesWithData):
        Get a plug-in process proxy and call getSitesWithData.

        (WebKit::PluginProcessManager::clearSiteData):
        Get a plug-in process proxy and call clearSiteData.

        (WebKit::PluginProcessManager::getOrCreatePluginProcess):
        Factor code to create a plug-in process out into a separate function.

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::getSitesWithData):
        (WebKit::PluginProcessProxy::clearSiteData):
        Update the pending reply struct. If the process is still launching,
        enqueue the request. Otherwise, just send the message.

        (WebKit::PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch):
        Make sure that pending replies are sent out.

        (WebKit::PluginProcessProxy::didFinishLaunching):
        Send our pending requests.

        (WebKit::PluginProcessProxy::didGetSitesWithData):
        (WebKit::PluginProcessProxy::didClearSiteData):
        Call down to the plug-in site data manager.

        * UIProcess/Plugins/PluginProcessProxy.messages.in:
        Add DidGetSitesWithData and DidClearSiteData messages.

        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
        (WebKit::WebPluginSiteDataManager::GetSitesWithDataState::GetSitesWithDataState):
        Initialize the state.

        (WebKit::WebPluginSiteDataManager::GetSitesWithDataState::getSitesWithDataForNextPlugin):
        If the plug-in queue is empty, call didGetSitesWithDataForAllPlugins. Otherwise, ask
        the plug-in process manager to get sites for the next plug-in.

        (WebKit::WebPluginSiteDataManager::GetSitesWithDataState::didGetSitesWithDataForSinglePlugin):
        Update the sites set and get sites for the next plug-in.

        (WebKit::WebPluginSiteDataManager::ClearSiteDataState::ClearSiteDataState):
        Initialize the state.

        (WebKit::WebPluginSiteDataManager::ClearSiteDataState::clearSiteDataForNextPlugin):
        If the plug-in queue is empty, call didClearSiteDataForAllPlugins. Otherwise, ask
        the plug-in process manager to get sites for the next plug-in.
        
        (WebKit::WebPluginSiteDataManager::ClearSiteDataState::didClearSiteDataForSinglePlugin):
        Update the sites set and ask the next plug-in to clear site data.

        (WebKit::WebPluginSiteDataManager::~WebPluginSiteDataManager):
        Assert that all maps are empty.

        (WebKit::WebPluginSiteDataManager::invalidate):
        Delete and clear the pending state maps.

        (WebKit::WebPluginSiteDataManager::getSitesWithData):
        In the ENABLE(PLUGIN_PROCESS) case, allocate a new GetSitesWithDataState object and
        tell it to get sites for the next plug-in. Otherwise, make sure that the web process
        is alive before sending a GetSitesWithPluginData message.
        
        (WebKit::WebPluginSiteDataManager::clearSiteData):
        In the ENABLE(PLUGIN_PROCESS) case, allocate a new ClearSiteDataState object and
        tell it to get sites for the next plug-in. Otherwise, make sure that the web process
        is alive before sending a ClearPluginSiteData message.
        
        (WebKit::WebPluginSiteDataManager::didGetSitesWithDataForSinglePlugin):
        Call down to the GetSitesWithDataState object.

        (WebKit::WebPluginSiteDataManager::didGetSitesWithDataForAllPlugins):
        Free the GetSitesWithDataState object and invoke the callback.

        (WebKit::WebPluginSiteDataManager::didClearSiteDataForSinglePlugin):
        Call down to the GetSitesWithDataState object.
        
        (WebKit::WebPluginSiteDataManager::didClearSiteDataForAllPlugins):
        Free the GetSitesWithDataState object and invoke the callback.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::processDidClose):
        Don't invalidate the plug-in site data manager if we're using a plug-in process.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::getSitesWithPluginData):
        (WebKit::WebProcess::clearPluginSiteData):
        Call shutdownIfPossible().

2011-02-15  Jon Honeycutt  <jhoneycutt@apple.com>

        Copy over new WebKit 2 header.

        Rubber-stamped by Alice Liu.

        * win/WebKit2Generated.make:

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

        Reviewed by Darin Adler.

        Implement WKPluginSiteDataManagerClearSiteData
        https://bugs.webkit.org/show_bug.cgi?id=54512
        <rdar://problem/8689312>

        * UIProcess/API/C/WKPluginSiteDataManager.cpp:
        (WKPluginSiteDataManagerGetTypeID):
        Implement this.

        (toNPClearSiteDataFlags):
        Convert WKClearSiteDataFlags to NPP_ClearSiteData flags.
        
        (WKPluginSiteDataManagerClearSiteData):
        (WKPluginSiteDataManagerClearAllSiteData):
        Call through to WebPluginSiteDataManager::clearSiteData.

        * UIProcess/API/C/WKPluginSiteDataManager.h:
        Change the clear functions to take a completion callback.

        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
        (WebKit::WebPluginSiteDataManager::clearSiteData):
        Ask the plug-in info store for all plug-in paths and send a
        ClearPluginSiteData message to the web process.
        
        (WebKit::WebPluginSiteDataManager::didClearSiteData):
        call the callback.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::didClearPluginSiteData):
        Call through to the plug-in site data manager.

        * UIProcess/WebContext.messages.in:
        Add ClearPluginSiteData message.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::clearPluginSiteData):
        Iterate over all the plug-in paths, creating plug-in modules and calling
        clearSiteData for each one.

        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        Add DidClearPluginSiteData message.

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

        Reviewed by Jon Honeycutt.

        Implement WKPluginSiteDataManagerGetSitesWithData
        https://bugs.webkit.org/show_bug.cgi?id=54510
        <rdar://problem/8689312>

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetPluginSiteDataManager):
        Call WebContext::pluginSiteDataManager.
        
        * UIProcess/API/C/WKPluginSiteDataManager.cpp:
        (WKPluginSiteDataManagerGetSitesWithData):
        Call WebPluginSiteDataManager::getSitesWithData.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::getPluginPaths):
        * UIProcess/Plugins/PluginInfoStore.h:
        Populate the paths argument with the paths of all plug-ins.
        
        * UIProcess/Plugins/WebPluginSiteDataManager.cpp: Added.
        (WebKit::WebPluginSiteDataManager::invalidate):
        Invalidate the callbacks map.

        (WebKit::WebPluginSiteDataManager::getSitesWithData):
        Ask the plug-in info store for all plug-in paths and send a
        GetSitesWithPluginData message to the web process.

        (WebKit::WebPluginSiteDataManager::didGetSitesWithPluginData):
        Call the callback.

        * UIProcess/Plugins/WebPluginSiteDataManager.h: Added.
        (WebKit::WebPluginSiteDataManager::clearContext):
        Clear the context.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        Initialize m_pluginSiteDataManager.

        (WebKit::WebContext::~WebContext):
        Invalidate the plug-in site data manager and clear its context.

        (WebKit::WebContext::processDidClose):
        Invalidate the plug-in site data manager.
        
        (WebKit::WebContext::didGetSitesWithPluginData):
        Call through to the plug-in site data manager.

        * UIProcess/WebContext.h:
        * UIProcess/WebContext.messages.in:
        Add GetSitesWithPluginData message.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Add new files.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::getSitesWithPluginData):
        Iterate over all plug-in paths and get the sites from all plug-ins.

        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        Add DidGetSitesWithPluginData.

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

        Fix Qt build.

        * WebKit2.pro:

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

        Fix Windows build.

        * win/WebKit2.vcproj:

2011-02-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough and Geoff Garen.

        Refactor handles and weak pointers to become nicer and more automatic
        https://bugs.webkit.org/show_bug.cgi?id=54415

        Update code to new Global<> API, and refactor to get global data to
        necessary points.

        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::NPJSObject::create):
        (WebKit::NPJSObject::NPJSObject):
        (WebKit::NPJSObject::initialize):
        (WebKit::NPJSObject::invokeDefault):
        (WebKit::NPJSObject::construct):
        (WebKit::NPJSObject::invoke):
        * WebProcess/Plugins/Netscape/NPJSObject.h:
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::getOrCreateNPObject):
        (WebKit::NPRuntimeObjectMap::convertJSValueToNPVariant):
        (WebKit::NPRuntimeObjectMap::evaluate):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::windowScriptNPObject):
        (WebKit::PluginView::pluginElementNPObject):

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

        Reviewed by Jon Honeycutt.

        Add stubbed out WKPluginSiteDataManagerRef API
        https://bugs.webkit.org/show_bug.cgi?id=54504

        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetPluginSiteDataManager):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/WKPluginSiteDataManager.cpp: Added.
        (WKPluginSiteDataManagerGetTypeID):
        (WKPluginSiteDataManagerGetSitesWithData):
        (WKPluginSiteDataManagerClearSiteData):
        (WKPluginSiteDataManagerClearAllSiteData):
        * UIProcess/API/C/WKPluginSiteDataManager.h: Added.
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2011-02-15  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Autocorrection should respect undo.
        https://bugs.webkit.org/show_bug.cgi?id=52221
        <rdar://problem/8663399>

        Please see WebCore/ChangeLog for detailed description.

        * WebProcess/WebCoreSupport/WebEditorClient.h: Updated for the new function declared in EditorClient.

        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::recordAutocorrectionResponse): Ditto.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::replaceSelectionWithText): Adopted new signature of ReplaceSelectionCommand::create().

2011-02-15  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Use the Database directory location specified in NSUserDefaults.
        https://bugs.webkit.org/show_bug.cgi?id=54496

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformDefaultDatabaseDirectory):
        Use the same logic as WebKit1's WebDatabaseManager::databasesDirectoryPath.

2011-02-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson, Darin Adler.

        Layers stick around in DrawingAreaImpl until we switch out of compositing
        https://bugs.webkit.org/show_bug.cgi?id=54498
        
        When leaving compositing mode soon, remove all the child layers
        of the nonCompositedContent layer right away, so they don't stick
        around.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::setRootCompositingLayer):
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::setRootCompositingLayer):

2011-02-15  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Fisher.

        Allow controlling minimum DOMTimer interval on a per-page basis
        https://bugs.webkit.org/show_bug.cgi?id=54312

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

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

        Reviewed by Sam Weinig.

        Add sitesWithData and clearSiteData to NetscapePluginModule
        https://bugs.webkit.org/show_bug.cgi?id=54492

        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::NetscapePluginModule):
        (WebKit::NetscapePluginModule::pluginCreated):
        (WebKit::NetscapePluginModule::pluginDestroyed):
        (WebKit::NetscapePluginModule::sitesWithData):
        (WebKit::NetscapePluginModule::clearSiteData):
        (WebKit::NetscapePluginModule::tryGetSitesWithData):
        (WebKit::NetscapePluginModule::tryClearSiteData):
        (WebKit::NetscapePluginModule::incrementLoadCount):
        (WebKit::NetscapePluginModule::decrementLoadCount):
        * Shared/Plugins/Netscape/NetscapePluginModule.h:

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

        Fix windows build.

        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::encodeResourceRequest):

2011-02-15  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=54480
        <rdar://problem/8975229> REGRESSION (WebKit2): A web page remains unresponsive for a long
        time after printing

        Nothing was painted until moving the mouse over browser chrome, deactivating the window,
        or taking some other drastic measure like that.

        * UIProcess/API/mac/PageClientImpl.mm: (WebKit::PageClientImpl::setAutodisplay):
        Call -[NSView displayIfNeeded] after enabling autodisplay. For some reason, this makes
        WebCore push updates again.

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

        Reviewed by Darin Adler.

        Crash loading fast/loader/empty-embed-src-attribute.html
        <rdar://problem/9005541>
        https://bugs.webkit.org/show_bug.cgi?id=54483

        Add the ability to encode/decode and empty ResourceRequest.

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (CoreIPC::encodeResourceRequest):
        (CoreIPC::decodeResourceRequest):
        (CoreIPC::decodeResourceResponse): Add missing false check for the
        decode step.
        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::encodeResourceRequest):
        (CoreIPC::decodeResourceRequest):
        (CoreIPC::decodeResourceResponse): Add missing false check for the
        decode step.

2011-02-15  Andreas Kling  <kling@webkit.org>

        Unreviewed Qt build fix after r78588.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage): Add WKPageLoaderClient::shouldGoToHistoryItem.

2011-02-15  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        Stop using deprecated API to flip the dragImage.
        <rdar://problem/8930897>
        https://bugs.webkit.org/show_bug.cgi?id=54477
        
        NSImage setFlipped is a deprecated API. We replace it with
        drawInRect:fromRect:operation:fraction:respectFlipped:hints.
        
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setDragImage): Removed call to setFlipped.
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::startDrag): The image is now drawn with
        drawInRect:fromRect:operation:fraction:respectFlipped:hints.

2011-02-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/9002047> and https://bugs.webkit.org/show_bug.cgi?id=54426
        WebFrameLoaderClient::shouldGoToHistoryItem needs implementation

        Expose HistoryItem -> ItemID mapping for the message:
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::idForItem):
        * WebProcess/WebPage/WebBackForwardListProxy.h:

        Sync message to the UIProcess for the answer:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::shouldGoToHistoryItem):

        Call out to the WebLoaderClient for the answer:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::shouldGoToBackForwardListItem):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        Call out to the client application for the answer:
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::shouldGoToBackForwardListItem):
        * UIProcess/WebLoaderClient.h:

        Add API for the client application to listen for this:
        * UIProcess/API/C/WKPage.h:

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

        Reviewed by Anders Carlsson.

        Fix Anders typo. false -> 0.

        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::create):

2011-02-15  Andras Becsi  <abecsi@webkit.org>

        Reviewed by NOBODY Csaba Osztrogonác.

        [Qt] Redesign the build system
        https://bugs.webkit.org/show_bug.cgi?id=51339

        Part 1.

        Introduce CodeGenerators.pri and add common includepaths to WebCore.pri,
        thus unnecessary duplications can be removed from project files.

        * WebKit2.pro: Simplify and deduplicate includepaths.

2011-01-26  MORITA Hajime  <morrita@google.com>

        Reviewed by Ryosuke Niwa.

        Refactoring: Extract TextCheckerClient from EditorClient
        https://bugs.webkit.org/show_bug.cgi?id=53213

        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/TextChecker.h:
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        (WebKit::WebEditorClient::textChecker):
        * Scripts/webkit2/messages.py: Re-arranged the include file

2011-02-07  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Adam Barth.

        Add EditorClient callbacks to override isDOMPasteAllowed and javaScriptCanAccessClipboard
        https://bugs.webkit.org/show_bug.cgi?id=52417

        Added two callback functions, canCopyCut and canPaste to EditorClient. They are currently
        not implemented.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::canCopyCut): Added.
        (WebKit::WebEditorClient::canPaste): Added.
        * WebProcess/WebCoreSupport/WebEditorClient.h:

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

        Reviewed by Dan Bernstein.

        Add WKPageSetMemoryCacheClientCallsEnabled API
        https://bugs.webkit.org/show_bug.cgi?id=54422

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetMemoryCacheClientCallsEnabled):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setMemoryCacheClientCallsEnabled):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setMemoryCacheMessagesEnabled):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2011-02-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2: View not updated completely when coming back from a cached back/forward navigation
        <rdar://problem/8787264>
        https://bugs.webkit.org/show_bug.cgi?id=54419

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::restoreViewState): Invalidate the entire page
        when completing a restore from the back/forward cache.

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

        Reviewed by Dan Bernstein.

        Shared memory should be made shared immediately
        https://bugs.webkit.org/show_bug.cgi?id=54413
        <rdar://problem/8972153>

        Under some circumstances, mach_make_memory_entry_64 may only return parts of a
        memory allocation. Work around this by creating a mach port representing the shared memory
        right away. Also, hand out this mach port in createHandle when using the default memory protection.

        * Platform/SharedMemory.h:
        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::create):
        (WebKit::SharedMemory::~SharedMemory):
        (WebKit::SharedMemory::createHandle):

2011-02-14  Adam Roben  <aroben@apple.com>

        React to accelerated compositing changes and allocation failures in DrawingAreaImpl::display

        Fixes <http://webkit.org/b/54398> DrawingAreaImpl::display handles error cases poorly.

        Reviewed by Darin Adler and Anders Carlsson.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::display): Bail out if the layout we perform puts us into
        accelerated compositing mode. Moved the layout earlier in this function so we can bail
        before doing other work that would be unnecessary in this case. Moved the allocation of the
        ShareableBitmap earlier so we will leave our state (e.g., dirty region) intact even if the
        allocation fails.

2011-02-14  Adam Roben  <aroben@apple.com>

        Add a way to flash backing store and view updates

        The new WKPageSetDebugPaintFlags SPI can be used to control whether backing store and/or
        view updates are flashed. A blueish color is used for view updates, and a purpleish color is
        used for backing store updates. The flashing currently only works on Windows.

        Fixes <http://webkit.org/b/54303>.

        Reviewed by Anders Carlsson.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetDebugPaintFlags):
        (WKPageGetDebugPaintFlags):
        * UIProcess/API/C/WKPagePrivate.h:
        Added. These call through to WebPageProxy.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::flashBackingStoreUpdates):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::flashBackingStoreUpdates):
        * UIProcess/API/qt/qwkpage_p.h:
        Stubbed out new PageClient functions.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::incorporateUpdate): Tell the WebPageProxy to flash the
        backing store updates we're performing.

        * UIProcess/PageClient.h: Added flashBackingStoreUpdates.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::flashBackingStoreUpdates): Call through to the PageClient.
        (WebKit::WebPageProxy::viewUpdatesFlashColor): Return the blueish color used for view
        updates.
        (WebKit::WebPageProxy::backingStoreUpdatesFlashColor): Return the purpleish color used for
        backing store updates.

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::setDebugPaintFlags):
        (WebKit::WebPageProxy::debugPaintFlags):
        Added these simple accessors.

        * UIProcess/win/WebView.cpp:
        (WebKit::flashRects):
        (WebKit::createBrush):
        New helper functions.

        (WebKit::WebView::onPaintEvent): Flash the dirty region if requested.
        (WebKit::WebView::flashBackingStoreUpdates): Added. Calls through to flashRects.

        * UIProcess/win/WebView.h: Added flashBackingStoreUpdates.

        * win/WebKit2Generated.make: Export WKPagePrivate.h so clients can use it.

2011-02-14  Adam Roben  <aroben@apple.com>

        Add some .messages.in and script files to WebKit2 projects

        This is just for convenience. It doesn't affect the build.

        * win/WebKit2.vcproj: Also let VS resort some files.
        * win/WebKit2Generated.vcproj:

2011-02-14  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Need implementation of ResourceRequest and ResourceResponse serialization
        https://bugs.webkit.org/show_bug.cgi?id=54339

        Add dummy implementation with FIXME and let the core go with it for now.
        * Shared/qt/WebCoreArgumentCodersQt.cpp:
        (CoreIPC::decodeResourceRequest):
        (CoreIPC::decodeResourceResponse):

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

        Reviewed by Maciej Stachowiak.

        Speculative fix for

        <rdar://problem/8995361>
        CrashTracer: [USER] 47 crashes in WebProcess at com.apple.WebKit2: WebKit::WebPage::layoutIfNeeded + 4

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::~DrawingAreaImpl):
        Invalidate the layer tree host.

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

        Reviewed by Dan Bernstein.

        The plug-in process heap should be executable by default
        https://bugs.webkit.org/show_bug.cgi?id=54364
        <rdar://problem/8990563>

        * UIProcess/Launcher/ProcessLauncher.h:
        Add executableHeap flag.
        
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        Set the right posix_spawn flag if executableHeap is true.

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::PluginProcessProxy):
        Initialize executableHeap to true.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::connect):
        Initialize executableHeap to false.

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

        Reviewed by Sam Weinig.

        Messages waited on are never dispatched
        https://bugs.webkit.org/show_bug.cgi?id=54362
        <rdar://problem/8995051>

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::processIncomingMessage):
        Get the argument encoder from the incoming message.

2011-02-13  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Adam Barth.

        Add a compile-time option to completely disable WebArchive support.
        https://bugs.webkit.org/show_bug.cgi?id=52712

        Add an ENABLE(WEB_ARCHIVE) compile-time setting and use it for all WebArchive code.

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

2011-02-13  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=54348
        Crash when printing a document with no pages

        * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::drawPagesToPDF): Don't fail on a fake
        page that computePagesForPrinting() added to a pageless document.

2011-02-13  Chris Fleizach  <cfleizach@apple.com>

        Reviewed and landed by Sam Weinig.

        AX: Update WK2 usage of remote accessibility api
        https://bugs.webkit.org/show_bug.cgi?id=54220

        Rename some of the remote accessibility methods to be more accurate.
        Make sure to unregister the AccessibilityWebPageObject on dealloc.
        Send the window remote token along with the WKView remote token.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::accessibilityWebProcessTokenReceived):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _updateRemoteAccessibilityRegistration:]):
        (-[WKView initWithFrame:contextRef:pageGroupRef:]):
        (-[WKView viewDidMoveToWindow]):
        (-[WKView _processDidCrash]):
        (-[WKView _pageClosed]):
        (-[WKView _setAccessibilityWebProcessToken:]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::registerWebProcessAccessibilityToken):
        (WebKit::WebPageProxy::registerUIProcessAccessibilityTokens):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/AccessibilityWebPageObject.mm:
        (-[AccessibilityWebPageObject dealloc]):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformInitialize):
        (WebKit::WebPage::registerUIProcessAccessibilityTokens):

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

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=54335
        <rdar://problem/8895141> Make window.print() work with WebKit2

        * Platform/CoreIPC/Connection.h: Corrected a typo in FIXME comment.

        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::setPageIsVisible):
        (WebKit::ChunkedUpdateDrawingAreaProxy::update):
        (WebKit::ChunkedUpdateDrawingAreaProxy::sendSetSize):
        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::sizeDidChange):
        (WebKit::TiledDrawingAreaProxy::setPageIsVisible):
        (WebKit::TiledDrawingAreaProxy::takeSnapshot):
        (WebKit::TiledDrawingAreaProxy::removeTile):
        * UIProcess/LayerBackedDrawingAreaProxy.cpp:
        (WebKit::LayerBackedDrawingAreaProxy::sizeDidChange):
        (WebKit::LayerBackedDrawingAreaProxy::setPageIsVisible):
        (WebKit::LayerBackedDrawingAreaProxy::update):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureWebProcess):
        (WebKit::WebContext::postMessageToInjectedBundle):
        Updated for send() -> deprecatedSend() rename.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Added a flag that's true while serving window.print().
        (WebKit::WebPageProxy::printFrame): Set and unset m_isPerformingDOMPrintOperation.
        (WebKit::WebPageProxy::beginPrinting): Force message processing in web process when serving
        window.print().
        (WebKit::WebPageProxy::endPrinting): Ditto.
        (WebKit::WebPageProxy::computePagesForPrinting): Ditto.
        (WebKit::WebPageProxy::drawRectToPDF): Ditto.
        (WebKit::WebPageProxy::drawPagesToPDF): Ditto.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::~WebProcessProxy):
        (WebKit::WebProcessProxy::sendMessage):
        (WebKit::WebProcessProxy::didFinishLaunching):
        When waiting for a web process to launch, store message flags, too. This is not practically
        important for DispatchMessageEvenWhenWaitingForSyncReply, but it's easier to store flags
        than to remember about this pitfall.

        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::send): Added a flags argument, matching Connection::send().
        (WebKit::WebProcessProxy::deprecatedSend): Renamed one of send() overloads, because it was
        conflicting with the other one after adding a flags argument. This matches a change previously
        made to CoreIPC::Connection.

2011-02-12  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Dan Bernstein.

        Crash in RenderLayerCompositor::updateCompositingLayers when loading some sites
        https://bugs.webkit.org/show_bug.cgi?id=54345

        Some sites flip between composited and non-comosited state while loading. When the timing is
        right, when we flip out of compositing we will need to do a display while tossing all the
        compositing layers. This causes us to reenter RenderLayerCompositor::computeCompositingRequirements()
        while we are in the middle of tossing layers, which leads to a crash.

        The solution is to defer the logic of exiting compositing mode until the DrawingArea is finished
        doing its display, using a timer.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        (WebKit::DrawingAreaImpl::setRootCompositingLayer):
        (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingModeSoon):
        * WebProcess/WebPage/DrawingAreaImpl.h:

2011-02-12  Kevin Decker  <kdecker@apple.com>

        Reviewed by Dan Bernstein.

        Follow up fix to:
        https://bugs.webkit.org/show_bug.cgi?id=54341 - optionally scale snapshots in document view coordinates

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scaledSnapshotInDocumentCoordinates): Fixed the order of the scale and translate.

2011-02-12  Kevin Decker  <kdecker@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=54341 - optionally scale snapshots in document view coordinates
        <rdar://problem/8990069>
        
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCreateScaledSnapshotInDocumentCoordinates): Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h: Added above new function.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scaledSnapshotInDocumentCoordinates): Added.
        (WebKit::WebPage::snapshotInDocumentCoordinates): Call scaledSnapshotInDocumentCoordinates with a scale of 1.
        * WebProcess/WebPage/WebPage.h: Added scaledSnapshotInDocumentCoordinates().

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

        Reviewed by Maciej Stachowiak.

        Can’t open local files on reload or navigation from the back/forward cache
        https://bugs.webkit.org/show_bug.cgi?id=54332
        <rdar://problem/8903076>

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::isInspectorPage):
        * UIProcess/WebInspectorProxy.h:
        Check whether the given page is a web inspector page.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeSandboxExtensionHandle):
        If this is a web inspector page, we don't want to make a sandbox extension.

        (WebKit::WebPageProxy::reattachToWebProcessWithItem):
        (WebKit::WebPageProxy::goForward):
        (WebKit::WebPageProxy::goBack):
        (WebKit::WebPageProxy::goToBackForwardItem):
        Pass a sandbox extension along when sending the message.

        * UIProcess/WebPageProxy.h:
        Make initializeSandboxExtensionHandle a member function.

        * UIProcess/cf/WebPageProxyCF.cpp:
        (WebKit::WebPageProxy::restoreFromSessionStateData):
        Pass a sandbox extension along.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::goForward):
        (WebKit::WebPage::goBack):
        (WebKit::WebPage::goToBackForwardItem):
        Hand the sandbox extension to the sandbox extension tracker.

        (WebKit::WebPage::restoreSessionAndNavigateToCurrentItem):
        Pass the sandbox extension to goToBackForwardItem.

        (WebKit::shouldReuseCommittedSandboxExtension):
        New function that checks whether a committed sandbox extension should be re-used. We
        do this for page reloads, as well as regular page navigations when both the committed
        and provisional documents have file URLs.

        (WebKit::WebPage::SandboxExtensionTracker::didStartProvisionalLoad):
        Reuse the committed sandbox extension if necessary.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

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

        Fix Snow Leopard build.

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::didFailToSendSyncMessage):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didFailToSendSyncMessage):

2011-02-11  Yael Aharon  <yael.aharon@nokia.com>

        Unreviewed Qt webkit2 build fix after r78392.

        * WebProcess/WebProcess.h:

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

        Reviewed by Sam Weinig.

        WebProcess hung communicating with the plug-in process
        https://bugs.webkit.org/show_bug.cgi?id=54328
        <rdar://problem/8854075>

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::createWebProcessConnection):
        Add the DispatchMessageEvenWhenWaitingForSyncReply message send flag when sending the
        PluginProcess::CreateWebProcessConnection message, since the plug-in process can be busy waiting
        for a sync reply from the web process.

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

        Reviewed by Sam Weinig.

        Incoming synchronous messages should always be processed regardless of connection waiting for a reply
        https://bugs.webkit.org/show_bug.cgi?id=54326

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::SyncMessageState::getOrCreate):
        Assert that the map has a non-null SyncMessageState object.

        (CoreIPC::Connection::SyncMessageState::SyncMessageState):
        Initialize m_waitForSyncReplyCount.

        (CoreIPC::Connection::SyncMessageState::beginWaitForSyncReply):
        Increment m_waitForSyncReplyCount.

        (CoreIPC::Connection::SyncMessageState::endWaitForSyncReply):
        Decrement m_waitForSyncReplyCount. If it's 0, enqueue any incoming sync messages.

        (CoreIPC::Connection::SyncMessageState::processIncomingMessage):
        If this is a message that needs to be dispatched, add it to the queue and wake up the client run loop.

        (CoreIPC::Connection::SyncMessageState::dispatchMessages):
        Go through the queue of incoming messages and dispatch them.

        (CoreIPC::Connection::sendSyncMessage):
        call beginWaitForSyncReply/endWaitForSyncReply.

        (CoreIPC::Connection::waitForSyncReply):
        Dispatch messages.

        (CoreIPC::Connection::processIncomingMessage):
        Call SyncMessageState::processIncomingMessage.

        (CoreIPC::Connection::enqueueIncomingMessage):
        Add helper function for enqueuing an incoming message.

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::Message::destinationID):

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

        Reviewed by Maciej Stachowiak.

        WebKit2: Going to Ars Technica crashes WebProcess in WebCore::ResourceRequestBase::url() const + 9
        <rdar://problem/8978832>

        Speculative fix for crash accessing a bad ResourceRequest in policy
        client code. Remove early returns from dispatchDecidePolicyForMIMEType 
        and dispatchDecidePolicyForNavigationAction that are not present in the WebKit1
        equivalent code. This should be safe, now that the IPC calls are synchronous.

        Also removes some invalid assertions in WebFrameProxy that were getting hit. It is okay
        for the url to empty.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didReceiveServerRedirectForProvisionalLoad):
        (WebKit::WebFrameProxy::didFailProvisionalLoad):
        (WebKit::WebFrameProxy::didFailLoad):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForMIMEType):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

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

        Reviewed by Darin Adler and Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=53593
        <rdar://problem/8948380> Crash beneath HistoryController::recursiveSetProvisionalItem in web
        process (preceded by assertion failure) if UI process exits while 
        Messages::WebPage::RestoreSessionAndNavigateToCurrentItem is being handled

        Can't test exiting the UI process.

        * Platform/CoreIPC/Connection.cpp: (CoreIPC::Connection::sendSyncMessage):
        * Platform/CoreIPC/Connection.h: (CoreIPC::Connection::Client::didFailToSendSyncMessage):
        Notify connection client when the connection fails to send a sync message.

        * WebProcess/WebProcess.cpp: (WebKit::WebProcess::didFailToSendSyncMessage):
        * WebProcess/WebProcess.h:
        Quit the web process immediately if it tried to send a sync message to a dead UI process.
        It never needs to continue and handle an unexpected null "reply".

        * PluginProcess/PluginProcess.cpp: (WebKit::PluginProcess::didFailToSendSyncMessage):
        * PluginProcess/PluginProcess.h:
        Ditto. There is no need for a plug-in to keep running even briefly if it couldn't get a
        reply to a sync message.

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

        Reviewed by Sam Weinig.

        Add a way to send async messages that can't get out of order with sync ones
        https://bugs.webkit.org/show_bug.cgi?id=54319
        <rdar://problem/8894844>

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendMessage):
        sendMessage now takes a messageSendFlags. Update the messageID if the
        messageSendFlags contain DispatchMessageEvenWhenWaitingForSyncReply.

        (CoreIPC::Connection::waitForSyncReply):
        Process asynchronous messages as well.

        (CoreIPC::Connection::processIncomingMessage):
        Check if a message should be dispatched even when we're waiting for a
        synchronous reply.

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::send):
        Send now takes a messageSendFlags parameter.

        * Platform/CoreIPC/MessageID.h:
        (CoreIPC::MessageID::messageIDWithAddedFlags):
        Return a new MessageID object with the given flags added.

        (CoreIPC::MessageID::shouldDispatchMessageWhenWaitingForSyncReply):
        Add getter.

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

        Reviewed by Anders Carlsson.

        Crash with dynamic popup menu use
        <rdar://problem/8716952>

        Invalidate popup menus when forcing them closed, since they might still be
        in their tracking loop.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showPopupMenu):
        (WebKit::WebPageProxy::hidePopupMenu):
        * UIProcess/WebPopupMenuProxy.h:
        (WebKit::WebPopupMenuProxy::invalidate):
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::showPopupMenu):
        * UIProcess/win/WebPopupMenuProxyWin.cpp:
        (WebKit::WebPopupMenuProxyWin::showPopupMenu):
        (WebKit::WebPopupMenuProxyWin::setFocusedIndex):

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

        Reviewed by Adam Roben.

        Actually initialize m_syncMessageState.

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

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

        Reviewed by Adam Roben.

        Move the binary semaphore into SyncMessageState
        https://bugs.webkit.org/show_bug.cgi?id=54311

        With this change, all connections that belong to the same run loop will use same binary semaphore.
        This is in preparation for making any connection be able to wakeup the client run loop.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::SyncMessageState::wakeUpClientRunLoop):
        (CoreIPC::Connection::SyncMessageState::wait):
        (CoreIPC::Connection::waitForSyncReply):
        (CoreIPC::Connection::processIncomingMessage):
        (CoreIPC::Connection::connectionDidClose):
        * Platform/CoreIPC/Connection.h:

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

        Reviewed by Adam Roben.

        Add a SyncMessageState class to CoreIPC::Connection
        https://bugs.webkit.org/show_bug.cgi?id=54309

        SyncMessageState objects are shared between all connections scheduled on
        a given run loop. It will be used to keep track of state when waiting
        for replies for a synchronous message.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::SyncMessageState::syncMessageStateMap):
        (CoreIPC::Connection::SyncMessageState::syncMessageStateMapMutex):
        Add a global RunLoop -> SyncMessageState map and a mutex for locking.

        (CoreIPC::Connection::SyncMessageState::getOrCreate):
        Look in the map for an existing SyncMessageState object and create a new
        one if none is found.

        (CoreIPC::Connection::SyncMessageState::SyncMessageState):
        Initialize m_runLoop.

        (CoreIPC::Connection::SyncMessageState::~SyncMessageState):
        Remove the object from the map.

2011-02-11  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        crashes in WebProcess at WebCore::Range::startPosition const + 16
        https://bugs.webkit.org/show_bug.cgi?id=54294
        <rdar://problem/8982710>
        
        I don't have a repro case for this bugs, but the side-by-side
        comparison of the IME support implementation in WebKit and WebKi2
        shows a missing null check on a Range that could very well explain
        this crash.
        I tried running platform/mac/editing/input tests with a version of WebKit
        without the null check and I can reproduce a crash with the same signature.
        These tests are not yet enabled for WebKit2.

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

2011-02-11  Jeff Miller  <jeffm@apple.com>

        Reviewed by Steve Falkenburg.

        Eliminate /DELAYLOAD:msimg32.dll ignored warning when building WebKit project
        https://bugs.webkit.org/show_bug.cgi?id=54296

        * win/WebKit2Common.vsprops: Remove msimg32.dll from the list of DelayLoadDLLs.

2011-02-11  Chandra Vallala  <chandra.vallala@motorola.com> and Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement UpdateChunk, ChunkedUpdateDrawingArea/Proxy
        classes for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=54080

        * GNUmakefile.am:
        * Shared/gtk/UpdateChunk.cpp: Added.
        (WebKit::UpdateChunk::UpdateChunk):
        (WebKit::UpdateChunk::~UpdateChunk):
        (WebKit::UpdateChunk::encode):
        (WebKit::UpdateChunk::decode):
        (WebKit::UpdateChunk::createImage):
        * Shared/gtk/UpdateChunk.h: Added.
        (WebKit::UpdateChunk::rect):
        (WebKit::UpdateChunk::isEmpty):
        (WebKit::UpdateChunk::size):
        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::ChunkedUpdateDrawingAreaProxy):
        Initialize the surface.
        * UIProcess/ChunkedUpdateDrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxy.h: Added cairo variables.
        * UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp: Added.
        (WebKit::ChunkedUpdateDrawingAreaProxy::page):
        (WebKit::ChunkedUpdateDrawingAreaProxy::ensureBackingStore):
        (WebKit::ChunkedUpdateDrawingAreaProxy::invalidateBackingStore):
        (WebKit::ChunkedUpdateDrawingAreaProxy::platformPaint):
        (WebKit::ChunkedUpdateDrawingAreaProxy::drawUpdateChunkIntoBackingStore):
        * WebProcess/WebPage/gtk/ChunkedUpdateDrawingAreaGtk.cpp: Added.
        (WebKit::ChunkedUpdateDrawingArea::paintIntoUpdateChunk):

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

        Reviewed by Dan Bernstein.

        Repro crash with Sony Google TV ad at Gizmodo
        https://bugs.webkit.org/show_bug.cgi?id=54150
        <rdar://problem/8782346>

        Re-landing this fix, bug without the test case, since it causes hangs on the bots.
        https://bugs.webkit.org/show_bug.cgi?id=54171 tracks adding back the test.

        Since PluginView::evaluate can cause the plug-in element to go away, we need to protect it.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::~PluginView):
        Null out m_pluginElement here so we'll catch crashes earlier.

        (WebKit::PluginView::evaluate):
        Add a plug-in protector.

2011-02-10  Alice Liu  <alice.liu@apple.com>

        Reviewed by Enrica Casucci and Adele Peterson.

        WebKit2 pages gobble up cmd-I as an editing command in some cases where it shouldn't
        https://bugs.webkit.org/show_bug.cgi?id=54254

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _handleStyleKeyEquivalent:]):
        Return early if we're not in an editable region.

2011-02-10  Andreas Kling  <kling@webkit.org>

        Unreviewed Qt build fix.

        waitFor() -> deprecatedWaitFor()

        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::waitUntilUpdatesComplete):

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

        Reviewed by Adam Roben.

        Move code to dispatch an incoming message out into a new function
        https://bugs.webkit.org/show_bug.cgi?id=54239

        This also fixes a leak where we wouldn't free ArgumentDecoder objects
        after a connection has been invalidated.
        
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::dispatchMessage):
        (CoreIPC::Connection::dispatchMessages):
        * Platform/CoreIPC/Connection.h:

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

        Try again to fix the Qt build.

        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::sizeDidChange):
        (WebKit::TiledDrawingAreaProxy::setPageIsVisible):
        (WebKit::TiledDrawingAreaProxy::takeSnapshot):
        (WebKit::TiledDrawingAreaProxy::removeTile):

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

        Attempt to fix the Qt build.

        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::sizeDidChange):
        (WebKit::TiledDrawingAreaProxy::setPageIsVisible):
        (WebKit::TiledDrawingAreaProxy::requestTileUpdate):
        (WebKit::TiledDrawingAreaProxy::takeSnapshot):
        (WebKit::TiledDrawingAreaProxy::removeTile):
        * WebProcess/WebPage/TiledDrawingArea.cpp:
        (WebKit::TiledDrawingArea::display):
        (WebKit::TiledDrawingArea::setSize):
        (WebKit::TiledDrawingArea::updateTile):
        (WebKit::TiledDrawingArea::tileUpdateTimerFired):
        (WebKit::TiledDrawingArea::didReceiveMessage):

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

        Handle a null FindIndicator correctly

        We are passed a null FindIndicator when the find indicator becomes hidden.

        Fixes <http://webkit.org/b/54213> <rdar://problem/8983261> REGRESSION (r78198): Crash in
        FindIndicator::contentImage when scrolling page

        Reviewed by Steve Falkenburg.

        * Platform/win/SharedMemoryWin.cpp:
        (WebKit::SharedMemory::Handle::isNull): Implemented.
        (WebKit::SharedMemory::create): Bail out if the handle is null, just like Mac does.
        Otherwise assert that ::MapViewOfFile succeeded. This doesn't fix the bug, but should help
        catch other errors.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::setFindIndicator): Null-check the FindIndicator before dereferencing it.
        Also changed the function to store the FindIndicator in a RefPtr.

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

        Reviewed by Sam Weinig.

        Add 'deprecated' to the deprecated CoreIPC functions
        https://bugs.webkit.org/show_bug.cgi?id=54223

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendMessage):
        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::send):
        (CoreIPC::Connection::deprecatedSendSync):
        (CoreIPC::Connection::deprecatedSend):
        (CoreIPC::Connection::deprecatedWaitFor):
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::open):
        * PluginProcess/PluginProcess.cpp:
        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::paint):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::createWebProcessConnection):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::postMessage):
        (WebKit::InjectedBundle::postSynchronousMessage):
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
        (WebKit::ChunkedUpdateDrawingArea::display):
        (WebKit::ChunkedUpdateDrawingArea::setSize):
        * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
        (WebKit::LayerBackedDrawingArea::setSize):
        * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm:
        (WebKit::LayerBackedDrawingArea::attachCompositingContext):

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

        Reviewed by Anders Carlsson.

        Window resizer does not have a border when there are scrollbars in WebKit2 windows
        <rdar://problem/8488476>
        https://bugs.webkit.org/show_bug.cgi?id=54222

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didChangeScrollbarsForMainFrame):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _updateGrowBoxForWindowFrameChange]):
        (-[WKView _didChangeScrollbarsForMainFrame]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/API/qt/qwkpage_p.h:
        (QWKPagePrivate::didChangeScrollbarsForMainFrame):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didChangeScrollbarsForMainFrame):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::didChangeScrollbarsForMainFrame):
        * UIProcess/win/WebView.h:

2011-02-10  Ivan Krstić  <ike@apple.com>

        Reviewed by Adam Roben.

        Rename remaining instances of _HOME sandbox parameter.
        <rdar://problem/8983428>

        * WebProcess/com.apple.WebProcess.sb:

2011-02-10  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Anders Carlsson.

        AX: AX needs to stop using WebCoreViewFactory
        https://bugs.webkit.org/show_bug.cgi?id=54153

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

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

        Reviewed by Anders Carlsson.

        Sandbox violations trying to read crypto preferences.
        <rdar://problem/8981151>

        * WebProcess/com.apple.WebProcess.sb:

2011-02-10  Peter Varga  <pvarga@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Remove PCRE source from trunk
        https://bugs.webkit.org/show_bug.cgi?id=54188

        * WebKit2.pro:

2011-02-09  Adam Roben  <aroben@apple.com>

        Turn on the new drawing area on Windows

        Fixes <http://webkit.org/b/53805> <rdar://problem/8960666> WebKit2 on Windows should use
        DrawingAreaProxyImpl

        Reviewed by Darin Adler.

        * UIProcess/win/WebView.cpp:
        (WebKit::useNewDrawingArea): Return true!

2011-02-09  Adam Roben  <aroben@apple.com>

        Hook up WM_PRINT to the new drawing area

        Fixes <http://webkit.org/b/54145> <rdar://problem/8979559> WM_PRINT doesn't work with new
        drawing area (assertion failure in DrawingAreaProxyImpl in Debug builds)

        Reviewed by Darin Adler.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::paint): Added. Code came from onPaintEvent.

        (WebKit::WebView::onPaintEvent):
        (WebKit::WebView::onPrintClientEvent):
        Changed to call paint.

        * UIProcess/win/WebView.h: Added paint. Also separated message handler functions into their
        own paragraph.

2011-02-09  Adam Roben  <aroben@apple.com>

        Notice when the backing store goes away after DidSetSize

        Fixes <http://webkit.org/b/54142> <rdar://problem/8979365> Crash in
        DrawingAreaProxyImpl::paint when WKView paints after being resized while hidden

        Reviewed by Darin Adler.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::paint): Null-check m_backingStore after waiting for
        DidSetSize, as m_backingStore can go away when we receive that message. This is the bug fix.
        Also moved the accelerated compositing check inside the block where we wait for DidSetSize.
        If we didn't wait for DidSetSize, we already know that we're not in accelerated compositing
        mode (and asserted so earlier in this function).

2011-02-09  Adam Roben  <aroben@apple.com>

        Decode a null SharedMemory::Handle correctly on Windows

        Fixes <http://webkit.org/b/54141> <rdar://problem/8979195> WKView draws at wrong size,
        performs badly if is resized while hidden (assertion fails in
        BackingStore::incorporateUpdate in Debug builds)

        Reviewed by Darin Adler.

        * Platform/win/SharedMemoryWin.cpp:
        (WebKit::getDuplicatedHandle): Added. Code came from decode. The only changes were to
        null-check sourceHandle (this is the bug fix) and to assert when ::DuplicateHandle fails
        (which would have caught the bug earlier).
        (WebKit::SharedMemory::Handle::decode): Changed to use getDuplicatedHandle.

2011-02-09  Adam Roben  <aroben@apple.com>

        Don't invalidate outside of the WebPage's bounds

        Fixes <http://webkit.org/b/54123> <rdar://problem/8978383> Assertion failure in
        BackingStore::BackingStore if a new WebPage becomes active before receiving a size

        Reviewed by Darin Adler.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::setNeedsDisplay): Intersect the dirty rect with our bounds before
        doing anything else.
        (WebKit::DrawingAreaImpl::display): Added an assertion to help catch the bad case a little
        earlier.

2011-02-10  Eric Seidel  <eric@webkit.org>

        Unreviewed, rolling out r78157.
        http://trac.webkit.org/changeset/78157
        https://bugs.webkit.org/show_bug.cgi?id=54150

        Fails on a bunch of bots

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::~PluginView):
        (WebKit::PluginView::evaluate):

2011-02-09  Brian Weinstein  <bweinstein@apple.com>

        Rubber-stamped by Sam Weinig.

        Fix a typo in WebSecurityOrigin::protocol.

        * Shared/WebSecurityOrigin.h:
        (WebKit::WebSecurityOrigin::protocol): This should return the protocol, not the domain.

2011-02-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        File uploads do not work within the sandbox
        <rdar://problem/8950518>
        https://bugs.webkit.org/show_bug.cgi?id=54154

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didChooseFilesForOpenPanel):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::extendSandboxForFileFromOpenPanel):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=54148
        <rdar://problem/8973887> REGRESSION (WebKit2): Opening two print dialogs causes havoc

        * UIProcess/API/mac/WKPrintingView.h: Moved _isForcingPreviewUpdate into a static variable,
        because dispatching a notification affects all WKPrintingViews at once.
        * UIProcess/API/mac/WKPrintingView.mm:
        (-[WKPrintingView _updatePreview]): Updated for new variable name.
        (-[WKPrintingView knowsPageRange:]): Don't break if the method is called twice in a row
        (we already had this logic when printing from separate thread, but not for preview).
        (-[WKPrintingView drawRect:]): Changed all LOG messages to have view object address for
        easier matching.
        (-[WKPrintingView rectForPage:]): Ditto.
        (-[WKPrintingView beginDocument]): Ditto.
        (-[WKPrintingView endDocument]): Ditto.

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

        Reviewed by Sam Weinig.

        Repro crash with Sony Google TV ad at Gizmodo
        https://bugs.webkit.org/show_bug.cgi?id=54150

        Since PluginView::evaluate can cause the plug-in element to go away, we need to protect it.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::~PluginView):
        Null out m_pluginElement here so we'll catch crashes earlier.

        (WebKit::PluginView::evaluate):
        Add a plug-in protector.

2011-02-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Google Maps says it has horizontal scrollbars when it doesn't
        <rdar://problem/8978005>

        We were updating the main frame's scrollbar state for changes to
        frames other than the main frame.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::contentsSizeChanged):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebKit::WebChromeClient::WebChromeClient):
        Change to bail out early if we are not looking at the main frame. Also
        fix some silly typos and rename the variables to be more specific.

2011-02-09  Ivan Krstić  <ike@apple.com>

        Reviewed by Sam Weinig.

        Allow read-only access to mouse preferences from sandboxed WebProcess.
        <rdar://problem/8975279>

        * WebProcess/com.apple.WebProcess.sb:

2011-02-09  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * win/MainWin.cpp:
        (wWinMain):

2011-02-09  Amruth Raj  <amruthraj@motorola.com> and Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com>

        Reviewed by Martin Robinson.

        [GTK] Implement Module class for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=48510

        * GNUmakefile.am:
        * Platform/Module.h: Added GModule handle for GTK port.
        * Platform/gtk/ModuleGtk.cpp: Initial code using GModule calls.
        (WebKit::Module::load):
        (WebKit::Module::unload):
        (WebKit::Module::platformFunctionPointer):

2011-02-09  Chandra Vallala  <chandra.vallala@motorola.com> and Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement WKBaseGtk API for Webkit2
        https://bugs.webkit.org/show_bug.cgi?id=54081

        * GNUmakefile.am: Added new files to compilation.
        * Shared/API/c/WKBase.h: Included WKBaseGtk.h in this file.
        * Shared/API/c/gtk: Added.
        * Shared/API/c/gtk/WKBaseGtk.h: Added. Declaration of WKViewRef
        for GTK port.
        * UIProcess/API/C/WKAPICast.h: Included WKAPICastGtk.h in this
        file.
        * UIProcess/API/C/gtk: Added.
        * UIProcess/API/C/gtk/WKAPICastGtk.h: Added. Type definition
        template for WKViewRef to WebView and vice-versa.
        * UIProcess/API/C/gtk/WKView.cpp: Added. Implementation of WKView
        API interface.
        (WKViewCreate):
        (WKViewGetWindow):
        (WKViewGetPage):
        (WKURLCreateWithURL):
        * UIProcess/API/C/gtk/WKView.h: Added. Declaration of WKView API
        interface.

2011-02-09  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add WebGraphicsContext stub to the compilation
        https://bugs.webkit.org/show_bug.cgi?id=54078

        * GNUmakefile.am:
        * Shared/API/c/gtk/WKGraphicsContextGtk.cpp: Added stub just for
        compilation.
        (WKGraphicsContextGetGtkContext):
        * Shared/API/c/gtk/WKGraphicsContextGtk.h: Added stub just for
        compilation.
        * Shared/WebGraphicsContext.cpp:
        (WebKit::WebGraphicsContext::WebGraphicsContext):
        * Shared/WebGraphicsContext.h:
        (WebKit::WebGraphicsContext::platformContext):

2011-02-09  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add geolocation support to the webkit2 compilation
        https://bugs.webkit.org/show_bug.cgi?id=54077

        Add Geolocation files to the GTK compilation.

        * GNUmakefile.am:

2011-02-09  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt][WK2] Don't generate superfluous forwarding header for config.h.

        * Scripts/generate-forwarding-headers.pl:

2011-02-09  Adam Roben  <aroben@apple.com>

        Hide the ugly details of WebView::m_window initialization from WebPageProxy, and make it
        less ugly

        WebView::WebView was initially creating a hidden window, then showing it. It would tell
        WebPageProxy about the window while it was still hidden, and then have to inform
        WebPageProxy that the window had become shown. This resulted in WebPageProxy sending
        unnecessary messages to the web process, and confused code that assumed that the window
        would be in the same state after WebView's constructor exited as it was when WebPageProxy
        first found out about the window.

        We now don't hide the window when creating it, which simplifies the code, and only tell
        WebPageProxy about the window after we're done modifying it, which fixes the bug.

        Fixes <http://webkit.org/b/53878> <rdar://problem/8977306> Assertion failure in
        DrawingAreaImpl::resumePainting after window.open or when opening Web Inspector

        Reviewed by Anders Carlsson.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView): Changed ::CreateWindowEx to ::CreateWindowExW, to match other
        Win32 API calls in WebKit2. Pass WS_VISIBLE to ::CreateWindowExW rather than waiting until
        later to show the window. Added an assertion that m_isVisible matches the window's visible
        state. Don't even create our WebPageProxy, or tell it about our window, until we're done
        initializing our window, so that it doesn't get informed about our window's internal state
        changes that happen beneath ::CreateWindowExW.
        (WebKit::WebView::onSizeEvent): Null-check m_page since we can receive this message beneath
        ::CreateWindowExW.
        (WebKit::WebView::onShowWindowEvent): Ditto. Replaced one FIXME with another. Always set
        handled to false so that ::DefWindowProcW can do its thing. (MSDN says this is when it
        actually shows/hides the window, though I couldn't find any consequences of not calling
        ::DefWindowProcW here.)

2011-02-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: follow up on InspectorAgent split -
        removing unnecessary methods from InspectorController.
        https://bugs.webkit.org/show_bug.cgi?id=54093

        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::showConsole):
        (WebKit::WebInspector::stopJavaScriptProfiling):

2011-02-09  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Avoid WebProcessMain compilation, we are used a gtk specific main
        https://bugs.webkit.org/show_bug.cgi?id=54015

        Avoided the compilation of the general WebProcessMain, and added
        soup initialization to WebProcessMainGtk.cpp.

        * GNUmakefile.am:
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        (WebKit::WebProcessMainGtk):

2011-02-08  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Incorrect assertion in WorkQueueGtk, we need to register
        more than one handle
        https://bugs.webkit.org/show_bug.cgi?id=54014

        Fixed assertion condition we need to register more than one
        handler for the same file descriptor.

        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::registerEventSourceHandler):

2011-02-08  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        Fix typo in the include guards name in ChunkedUpdateDrawingAreaProxy.h
        https://bugs.webkit.org/show_bug.cgi?id=54013

        * UIProcess/ChunkedUpdateDrawingAreaProxy.h:

2011-02-08  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Fix after r77874, m_isConnected is initialized before the
        socket is opened
        https://bugs.webkit.org/show_bug.cgi?id=54011

        Fixed connection breakage after r77874, we have to wait until open
        the socket to open the connection.

        * Platform/CoreIPC/gtk/ConnectionGtk.cpp:
        (CoreIPC::Connection::platformInitialize):
        (CoreIPC::Connection::open):

2011-02-08  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [WK2] LayerTreeContext is used outside the ACCELERATED_COMPOSITING
        guards but not defined in DrawingAreaProxy.h
        https://bugs.webkit.org/show_bug.cgi?id=54009

        Removed the guards in the forward declaration, this will fail if
        the class is finally used in the function, but it works for the
        moment.

        * UIProcess/DrawingAreaProxy.h:

2011-02-08  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        WebKit2 GTK Fails to Build #include nested too deeply
        https://bugs.webkit.org/show_bug.cgi?id=52219

        * GNUmakefile.am: Removed the commands to create the directories
        for the forwarding headers, the script already does it for us.
        * config.h: Removed the config.h inclusion and added the
        autotoolsconfig.h directly, also added a condition to share the
        defines with QT.

2011-02-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark Rowe.

        Crash when going back/forward when back/forward list is in a bad state.
        https://bugs.webkit.org/show_bug.cgi?id=54059
        <rdar://problem/8975244>
        
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::goForward): Add a null check.
        (WebKit::WebPageProxy::goBack): ditto

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

        Reviewed by Beth Dakin.

        Assertion failure !isInAcceleratedCompositingMode() in DrawingAreaProxyImpl::incorporateUpdate()
        https://bugs.webkit.org/show_bug.cgi?id=54046
        <rdar://problem/8973960>

        DrawingAreaImpl::setRootCompositingLayer can be called with a new layer even when already
        in accelerated compositing mode. Similarly, it can be called with a null layer even when not
        in accelerated compositing mode. Make the drawing area and layer tree host handle both these cases.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::setRootCompositingLayer):
        Only call enterAcceleratedCompositingMode if there is no layer tree host, otherwise
        just call LayerTreeHost::setRootCompositingLayer.

        (WebKit::DrawingAreaImpl::setSize):
        Add an assert.

        (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode):
        Assert that we don't have a layer tree host.

        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
        Assert that we do have a layer tree host.

        (WebKit::DrawingAreaImpl::display):
        If the call to display caused the page to enter accelerated compositing mode, we don't
        want to send back an Update message.

        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create):
        * WebProcess/WebPage/LayerTreeHost.h:
        Create no longer takes a graphics layer.

        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::create):
        (WebKit::LayerTreeHostMac::LayerTreeHostMac):
        Create no longer takes a graphics layer.
        
        (WebKit::LayerTreeHostMac::setRootCompositingLayer):
        Set the new root compositing layer.

2011-02-08  Adam Roben  <aroben@apple.com>

        Implement WorkQueue::scheduleWorkAfterDelay on Windows

        Each WorkQueue now owns its own timer queue. When scheduleWorkAfterDelay is called, we
        create a timer-queue timer with the given delay. When the timer fires, we schedule the work
        on the queue and clean up the timer.

        Fixes <http://webkit.org/b/54040> <rdar://problem/8974230> Web process sticks around forever
        if it's hung when UI process goes away

        Reviewed by Anders Carlsson.

        * Platform/WorkQueue.h: Added timerCallback and m_timerQueue.

        * Platform/win/WorkQueueWin.cpp:
        (WorkQueue::platformInitialize): Initialize m_timerQueue.
        (WorkQueue::platformInvalidate): Clean up m_timerQueue.
        (TimerContext::TimerContext): Added this helper object to hold the context needed by the
        timer callback.
        (WorkQueue::timerCallback): Added. Schedules the WorkItem on the WorkQueue and cleans up the
        timer.
        (WorkQueue::scheduleWorkAfterDelay): Create a timer-queue timer on our timer queue that will
        fire after the given delay. Pass a new TimerContext object to the timer callback that
        contains the information it needs.

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

        Reviewed by Sam Weinig.

        Rename PluginProcess::initializeConnection to PluginProcess::initialize
        https://bugs.webkit.org/show_bug.cgi?id=54039

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::initialize):
        * PluginProcess/PluginProcess.h:
        * PluginProcess/mac/PluginProcessMainMac.mm:
        (WebKit::PluginProcessMain):
        * WebProcess/WebProcess.h:

2011-02-08  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8972913> and https://bugs.webkit.org/show_bug.cgi?id=54036
        didChangeBackForwardList should include some context about what changed

        Update the implementation of this API to include the new item (if any) and removed items (if any):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::didChangeBackForwardList):
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didChangeBackForwardList):
        * UIProcess/WebPageProxy.h:

        Have WebBackForwardList pass the new items and/or removed items when calling the notifier:
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::addItem):
        (WebKit::WebBackForwardList::goToItem):
        (WebKit::WebBackForwardList::clear):

2011-02-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Sandbox violations visiting MobileMe.
        <rdar://problem/8961330>

        * WebProcess/com.apple.WebProcess.sb:

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

        Reviewed by Sam Weinig.

        Rename PluginProcess::initialize to PluginProcess::initializePluginProcess
        https://bugs.webkit.org/show_bug.cgi?id=54037

        Rename PluginProcess::initialize to PluginProcess::initializePluginProcess to better
        match the WebProcess initialization code, in preparation of sharing more code.

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::initializePluginProcess):
        * PluginProcess/PluginProcess.h:
        * PluginProcess/PluginProcess.messages.in:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didFinishLaunching):

2011-02-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WK2: Add ability to pass context to policy delegate methods
        https://bugs.webkit.org/show_bug.cgi?id=54031

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction):
        (CoreIPC::handleMessageVariadic):
        * Scripts/webkit2/messages.py:
        Add ability to pass variadic messages to sync messages.

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

        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForMIMEType):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebPolicyClient.cpp:
        (WebKit::WebPolicyClient::decidePolicyForNavigationAction):
        (WebKit::WebPolicyClient::decidePolicyForNewWindowAction):
        (WebKit::WebPolicyClient::decidePolicyForMIMEType):
        * UIProcess/WebPolicyClient.h:
        Update policy client for new data.

        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        * WebProcess/InjectedBundle/API/c/WKBundleNavigationAction.cpp: Added.
        (WKBundleNavigationActionGetTypeID):
        (WKBundleNavigationActionGetNavigationType):
        (WKBundleNavigationActionGetEventModifiers):
        (WKBundleNavigationActionGetEventMouseButton):
        (WKBundleNavigationActionCopyHitTestResult):
        (WKBundleNavigationActionCopyFormElement):
        * WebProcess/InjectedBundle/API/c/WKBundleNavigationAction.h: Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetPolicyClient):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp: Added.
        (WebKit::mouseEventForNavigationAction):
        (WebKit::mouseButtonForMouseEvent):
        (WebKit::InjectedBundleNavigationAction::modifiersForNavigationAction):
        (WebKit::InjectedBundleNavigationAction::mouseButtonForNavigationAction):
        (WebKit::InjectedBundleNavigationAction::create):
        (WebKit::InjectedBundleNavigationAction::InjectedBundleNavigationAction):
        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.h: Added.
        (WebKit::InjectedBundleNavigationAction::navigationType):
        (WebKit::InjectedBundleNavigationAction::modifiers):
        (WebKit::InjectedBundleNavigationAction::mouseButton):
        (WebKit::InjectedBundleNavigationAction::hitTestResult):
        (WebKit::InjectedBundleNavigationAction::formElement):
        (WebKit::InjectedBundleNavigationAction::type):
        * WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.cpp: Added.
        (WebKit::InjectedBundlePagePolicyClient::decidePolicyForNavigationAction):
        (WebKit::InjectedBundlePagePolicyClient::decidePolicyForNewWindowAction):
        (WebKit::InjectedBundlePagePolicyClient::decidePolicyForMIMEType):
        * WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.h: Added.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createWindow):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForMIMEType):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::initializeInjectedBundlePolicyClient):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::injectedBundlePolicyClient):
        Pipe the policy client through the bundle to allow setting user data.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:
        Add new files.

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

        Reviewed by Sam Weinig.

        Crash calling -setFrame:andScrollBy: in windowDidResize
        https://bugs.webkit.org/show_bug.cgi?id=54030
        <rdar://problem/8969760>

        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::create):
        Assert that size is not zero here; we never want to try to create shared memory with a zero size.
        
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::setSize):
        Always invalidate the entire visible page when resizing.

2011-02-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove orphan code from old parser
        https://bugs.webkit.org/show_bug.cgi?id=53984

        * WebProcess/WebCoreSupport/WebChromeClient.cpp
        * WebProcess/WebCoreSupport/WebChromeClient.h

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

        Reviewed by Sam Weinig.

        UI process crashes if web process crashes while web inspector is focused
        https://bugs.webkit.org/show_bug.cgi?id=53965
        <rdar://problem/8961633>

        Make sure to close the web inspector web page proxy before calling platformClose, since 
        platformClose can cause the web page proxy to try to send messages (such as SetActive) 
        to the web process while it's in a bad state. 

        The original fix, http://trac.webkit.org/changeset/77866, put the call to m_page->close() in
        WebInspectorProxy::didClose, which was wrong and lead to crashes. The right place to close the page
        is in WebInspectorProxy::invalidate.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::invalidate):

2011-02-08  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        ASSERTION FAILURE: ASSERT_NOT_REACHED() in Connection::writeEventHandler() after the Web
        Process crashes.
        https://bugs.webkit.org/show_bug.cgi?id=54005

        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::writeEventHandler):
        Handle ERROR_BROKEN_PIPE by calling connectionDidClose() and returning early.

2011-02-08  Adam Roben  <aroben@apple.com>

        Handle WM_TIMER messages for stopped timers

        Whenever we stop a timer, we call ::KillTimer to cancel any future firings of the timer. But
        ::KillTimer doesn't do anything about WM_TIMER messages that have already been posted to the
        message queue. We need to handle those, too.

        Fixes <http://webkit.org/b/53999> Occasional assertion failures in
        RunLoop::TimerBase::timerFired

        Reviewed by Darin Adler.

        * Platform/win/RunLoopWin.cpp:
        (RunLoop::TimerBase::timerFired): Just bail if the timer has already been stopped.

2011-02-08  Adam Roben  <aroben@apple.com>

        Don't mark a Connection as connected until open() is called on Windows

        This matches Mac. Even though the Connection's pipe is connected before open() is called,
        the Connection itself isn't really connected to the pipe until then, and we won't actually
        read any data from before that point.

        Fixes <http://webkit.org/b/53998> <rdar://problem/8971207> REGRESSION (r77874): Assertion
        failure on launch in Connection::setDidCloseOnConnectionWorkQueueCallback on Windows

        Reviewed by Darin Adler.

        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::platformInitialize): Moved code to set m_isConnected from here to
        open.
        (CoreIPC::Connection::platformInvalidate): Unset m_isConnected, to match Mac. (This isn't
        part of the bug fix, but seemed worthwhile.)
        (CoreIPC::Connection::open): Set m_isConnected now that we're going to listen on the pipe.

2011-02-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r77866.
        http://trac.webkit.org/changeset/77866
        https://bugs.webkit.org/show_bug.cgi?id=53981

        caused all WebKit2 inspector tests to crash (Requested by
        othermaciej on #webkit).

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::didClose):

2011-02-07  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        Add resource load client for injected bundle and move willSendRequest there
        https://bugs.webkit.org/show_bug.cgi?id=53972

        * GNUmakefile.am:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetPageLoaderClient):
        (WKBundlePageSetResourceLoadClient):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.cpp: Added.
        (WebKit::InjectedBundlePageResourceLoadClient::didInitiateLoadForResource):
        (WebKit::InjectedBundlePageResourceLoadClient::willSendRequestForFrame):
        (WebKit::InjectedBundlePageResourceLoadClient::didReceiveResponseForResource):
        (WebKit::InjectedBundlePageResourceLoadClient::didReceiveContentLengthForResource):
        (WebKit::InjectedBundlePageResourceLoadClient::didFinishLoadForResource):
        (WebKit::InjectedBundlePageResourceLoadClient::didFailLoadForResource):
        * WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.h: Added.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::assignIdentifierToInitialRequest):
        (WebKit::WebFrameLoaderClient::dispatchWillSendRequest):
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveResponse):
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveContentLength):
        (WebKit::WebFrameLoaderClient::dispatchDidFinishLoading):
        (WebKit::WebFrameLoaderClient::dispatchDidFailLoading):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::initializeInjectedBundleResourceLoadClient):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::injectedBundleResourceLoadClient):
        * win/WebKit2.vcproj:

2011-02-07  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit build.

        * UIProcess/cf/WebBackForwardListCF.cpp:
        (WebKit::WebBackForwardList::restoreFromCFDictionaryRepresentation): Add some casts
        to prevent warnings about mixing signed and unsigned comparisons.

2011-02-07  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] enum QWebPage::WebAction doesn't have value QWebPage::CopyImageUrl
        https://bugs.webkit.org/show_bug.cgi?id=52974

        Add ContextMenuItemTagCopyImageUrlToClipboard into standard action but Qt platform specific.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::contextMenuItemTagCopyImageUrlToClipboard):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2011-02-07  Enrica Casucci  <enrica@apple.com>

        Reviewed by Sam Weinig.

        Fixing a build break on Mac caused by http://trac.webkit.org/changeset/77874
        
        Removed unused static function.
        
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:

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

        Reviewed by Sam Weinig.

        <rdar://problem/8969888> 
        The WebProcess should set LSFileQuarantineEnabled to true

        * WebProcess/Info.plist:

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

        Reviewed by Sam Weinig.

        Crash in web process after the connection had been closed
        https://bugs.webkit.org/show_bug.cgi?id=51115
        <rdar://problem/8964255>

        Remove didCloseOnConnectionWorkQueue from Connection::Client and add
        Connection::setDidCloseOnConnectionWorkQueueCallback which takes a static
        function, eliminating the race condition in connectionDidClose where m_client could be
        nulled out in the client thread right before we try to dereference it.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::Connection):
        Initialize m_didCloseOnConnectionWorkQueueCallback.

        (CoreIPC::Connection::setDidCloseOnConnectionWorkQueueCallback):
        Update m_didCloseOnConnectionWorkQueueCallback.

        (CoreIPC::Connection::connectionDidClose):
        Call m_didCloseOnConnectionWorkQueueCallback.

        * Platform/WorkQueue.h:
        Make WorkQueue noncopyable.

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::initializeConnection):
        Call setDidCloseOnConnectionWorkQueueCallback.

        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::didCloseOnConnectionWorkQueue):
        * Shared/ChildProcess.h:
        didCloseOnConnectionWorkQueue is now a static member function.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initialize):
        Call setDidCloseOnConnectionWorkQueueCallback.

2011-02-07  Enrica Casucci  <enrica@apple.com>

        Reviewed Adam Roben and Darin Adler.

        WebKit2: drag and drop support on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=52775
        <rdar://problem/8514409>
        
        This patch contains the remaining work to support
        a WebKit window as drag source on Windows.
        I've added the code to generate the image for dragging a link as
        well as the steps necessary to package the HBITMAP into a SharedMemory
        object and send it over to the UI process where DoDragDrop is performed.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setDragImage):
        (WebKit::WebPageProxy::startDragDrop):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        (WebKit::WebDragClient::startDrag): Made startDrag for
        platforms other than Windows and Mac.
        * WebProcess/WebCoreSupport/WebDragClient.h:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::startDrag):
        * WebProcess/WebCoreSupport/win/WebDragClientWin.cpp: Added.
        (WebKit::draggingSourceOperationMaskToDragCursors):
        (WebKit::WebDragClient::startDrag):
        * WebProcess/WebCoreSupport/win/WebDragSource.cpp: Added.
        This object implements the IDropSource interface.
        (WebDragSource::createInstance):
        (WebDragSource::WebDragSource):
        (WebDragSource::QueryInterface):
        (WebDragSource::AddRef):
        (WebDragSource::Release):
        (WebDragSource::QueryContinueDrag):
        (WebDragSource::GiveFeedback):
        * WebProcess/WebCoreSupport/win/WebDragSource.h: Added.
        * win/WebKit2.vcproj:

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

        Reviewed by Sam Weinig.

        UI process crashes if web process crashes while web inspector is focused
        https://bugs.webkit.org/show_bug.cgi?id=53965
        <rdar://problem/8961633>

        Make sure to close the web inspector web page proxy before calling platformClose, since
        platformClose can cause the web page proxy to try to send messages (such as SetActive)
        to the web process while it's in a bad state.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::didClose):

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

        Reviewed by Darin Adler.

        Find bouncy is missing content on pages with framesets
        https://bugs.webkit.org/show_bug.cgi?id=53958
        <rdar://problem/8904447>

        Fix paint rect computation; FrameView::paint expects the paint rect to be in the
        parent widget's coordinate system.

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

2011-02-07  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/8960434> and https://bugs.webkit.org/show_bug.cgi?id=53957
        Crash after incorrectly restoring bogus session state.

        In some cases we're writing an invalid session state for a back/forward list where the current entry is 0
        but the number of entries is also 0.
        In such cases the current entry should be "NoCurrentEntryIndex."

        When we later read this state in, we set ourselves up to crash later.

        Amusingly an ASSERT caught this, but we should've rejected it before the ASSERT fired.

        * UIProcess/cf/WebBackForwardListCF.cpp:
        (WebKit::WebBackForwardList::restoreFromCFDictionaryRepresentation): Fail the restore if the "current index past the end
          of the list" case occurs, and speculatively bail out of the case where we have no current index but do have a list.
          Also remove the unhelpful ASSERT.

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

        Reviewed by Anders Carlsson.

        Add bundle API to get the background color of a frame
        <rdar://problem/8962670>
        https://bugs.webkit.org/show_bug.cgi?id=53952

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameGetBodyBackgroundColor):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
        Add API function.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::getDocumentBackgroundColor):
        * WebProcess/WebPage/WebFrame.h:
        Call down into the document to get either the body's, or if there is no body,
        the root element's, background color.

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

        Fix typo. vectical -> vertical.

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

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

        Reviewed by Anders Carlsson.

        Inform the UIProcess when main frame scrollbars change
        <rdar://problem/8967496>
        https://bugs.webkit.org/show_bug.cgi?id=53941

        * UIProcess/API/C/WKPage.cpp:
        (WKPageHasHorizontalScrollbar):
        (WKPageHasVerticalScrollbar):
        * UIProcess/API/C/WKPage.h:
        Add API to query whether the main frame has scrollbars.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::processDidCrash):
        (WebKit::WebPageProxy::didChangeScrollbarsForMainFrame):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::hasHorizontalScrollbar):
        (WebKit::WebPageProxy::hasVerticalScrollbar):
        Store/update main frame scrollbar state.

        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::contentsSizeChanged):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebKit::WebChromeClient::WebChromeClient):
        Post message when main frame scrollbar state changes.

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

        Reviewed by Sam Weinig.

        Some content is not covered by Find-on-page overlay
        https://bugs.webkit.org/show_bug.cgi?id=53937
        <rdar://problem/8711353>

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::didInstallPageOverlay):
        Call LayerTreeHost::didInstallPageOverlay.

        (WebKit::DrawingAreaImpl::didUninstallPageOverlay):
        Call LayerTreeHost::didUninstallPageOverlay.

        (WebKit::DrawingAreaImpl::setPageOverlayNeedsDisplay):
        Call LayerTreeHost::setPageOverlayNeedsDisplay.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::drawRect):
        Remove a bogus assertion.

        * WebProcess/WebPage/LayerTreeHost.h:
        Add new pure virtual member functions.

        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::setNeedsDisplay):
        Call DrawingArea::setPageOverlayNeedsDisplay.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::installPageOverlay):
        Make sure to call PageOverlay::setNeedsDisplay after the page overlay has been installed.
    
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::LayerTreeHostMac):
        Create the page overlay layer if needed.

        (WebKit::LayerTreeHostMac::setNonCompositedContentsNeedDisplay):
        Invalidate the page overlay layer as well.

        (WebKit::LayerTreeHostMac::sizeDidChange):
        Resize the page overlay layer.

        (WebKit::LayerTreeHostMac::didInstallPageOverlay):
        Create the page overlay layer.

        (WebKit::LayerTreeHostMac::didUninstallPageOverlay):
        Destroy the page overlay layer.

        (WebKit::LayerTreeHostMac::setPageOverlayNeedsDisplay):
        Call setNeedsDisplay on the page overlay layer.

        (WebKit::LayerTreeHostMac::paintContents):
        Handle painting the page overlay layer.

        (WebKit::LayerTreeHostMac::flushPendingLayerChanges):
        Flush the page overlay layer changes as well.

        (WebKit::LayerTreeHostMac::createPageOverlayLayer):
        Create a layer and add it as a sublayer of the root layer.

        (WebKit::LayerTreeHostMac::destroyPageOverlayLayer):
        Destroy the page overlay layer.

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

        Make it possible to use DrawingAreaProxyImpl on Windows

        It can be optionally turned on by setting the WEBKIT2_USE_NEW_DRAWING_AREA environment
        variable. Turning it on by default is covered by <http://webkit.org/b/53805>.

        Fixes <http://webkit.org/b/53879>.

        Reviewed by Anders Carlsson.

        * UIProcess/BackingStore.h: Add an m_bitmap member on Windows.

        * UIProcess/win/BackingStoreWin.cpp:
        (WebKit::BitmapDC::operator HDC):
        (WebKit::BitmapDC::BitmapDC):
        (WebKit::BitmapDC::~BitmapDC):
        Added this helper class, which uses RAII to select a bitmap into a new memory DC.
        (WebKit::BackingStore::paint): Wrap our bitmap in a BitmapDC and use ::BitBlt to copy the
        specified rect into the destination DC.
        (WebKit::createBitmap): New helper function, just creates a DIB section with the specified
        size.
        (WebKit::BackingStore::incorporateUpdate): Ported from BackingStoreMac.mm. It seems like
        this code could be shared at some point.
        (WebKit::BackingStore::scroll): Wrap our bitmap in a BitmapDC and use ::ScrollDC to scroll
        the specified rect.

        * UIProcess/win/WebView.cpp:
        (WebKit::useNewDrawingArea): Added. Returns true if the WEBKIT2_USE_NEW_DRAWING_AREA
        environment variable is set.
        (WebKit::drawPageBackground): New helper function. Code came from onPaintEvent.
        (WebKit::WebView::onPaintEvent): Ported from -[WKView drawRect:].
        (WebKit::WebView::createDrawingAreaProxy): Create a DrawingAreaProxyImpl if we're using the
        new drawing area.

        (WebKit::WebView::enterAcceleratedCompositingMode):
        (WebKit::WebView::exitAcceleratedCompositingMode):
        (WebKit::WebView::pageDidEnterAcceleratedCompositing):
        (WebKit::WebView::pageDidLeaveAcceleratedCompositing):
        Added some assertions to make sure these are only called when expected. We don't expect
        enter/exitAcceleratedCompositingMode to be called at all right now, because accelerated
        compositing is turned off in WebKit2 on Windows.

        (WebKit::WebView::switchToDrawingAreaTypeIfNecessary): Ditto, and added a case for the
        DrawingAreaInfo::Impl constant.

2011-02-07  Adam Roben  <aroben@apple.com>

        Start compiling DrawingArea[Proxy]Impl and dependencies on Windows

        Fixes <http://webkit.org/b/53875> WebKit2 on Windows should build DrawingArea[Proxy]Impl

        Reviewed by Sam Weinig and Darin Adler.

        * Platform/Region.cpp:
        (WebKit::Region::Shape::shapeOperation): Initialize variable to avoid a bogus "potentially
        uninitialized variable" warning.

        * UIProcess/BackingStore.cpp: Removed #error for non-Mac platforms.

        * UIProcess/BackingStore.h: Added a PlatformGraphicsContext typedef for Windows.

        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        Allow Windows to compile the new drawing area code.

        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create): Allow creating a DrawingAreaImpl on Windows, too.

        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        * WebProcess/WebPage/LayerTreeHost.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveMessage):
        Allow Windows to compile the new drawing area code.

        * Shared/win/LayerTreeContextWin.cpp: Added.
        * UIProcess/win/BackingStoreWin.cpp: Added.
        Stubbed out these files.

        * win/WebKit2.vcproj: Added new files.

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

        Reviewed by Dan Bernstein.

        Rename some drawing area related member functions
        https://bugs.webkit.org/show_bug.cgi?id=53935

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::setPageOverlayNeedsDisplay):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::setNeedsDisplay):
        (WebKit::DrawingAreaImpl::setPageOverlayNeedsDisplay):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/LayerTreeHost.h:
        * WebProcess/WebPage/mac/LayerTreeHostMac.h:
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::setNonCompositedContentsNeedDisplay):
        (WebKit::LayerTreeHostMac::scrollNonCompositedContents):

2011-02-07  Adam Roben  <aroben@apple.com>

        Use the right calling convention when calling WebKitMain

        Fixes <http://webkit.org/b/53923> REGRESSION (r77678): Crash on quit in web process in
        wWinMain

        Reviewed by Steve Falkenburg.

        * win/MainWin.cpp:
        (wWinMain): Use __cdecl instead of WINAPI (__stdcall) when calling WebKitMain, since that is
        how that function is declared.

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

        Reviewed by Dan Bernstein.

        The drawing area should be in charge of drawing the page overlay
        https://bugs.webkit.org/show_bug.cgi?id=53927

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::didInstallPageOverlay):
        (WebKit::DrawingArea::didUninstallPageOverlay):
        (WebKit::DrawingArea::setOverlayNeedsDisplay):
        Add empty stubs.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::didInstallPageOverlay):
        Add empty function. This will eventually ask the layer tree host to
        create a GraphicsLayer for the page overlay.

        (WebKit::DrawingAreaImpl::didUninstallPageOverlay):
        Tell the page that it needs to be repainted.

        (WebKit::DrawingAreaImpl::setOverlayNeedsDisplay):
        Just call setNeedsDisplay for now.

        (WebKit::DrawingAreaImpl::display):
        Paint the page overlay too.

        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::drawRect):
        Only call drawPageOverlay if we have an old drawing area.

        (WebKit::WebPage::drawPageOverlay):
        Draw the page overlay. Code moved here from WebPage::drawRect.

        (WebKit::WebPage::installPageOverlay):
        Call DrawingArea::installPageOverlay.

        (WebKit::WebPage::uninstallPageOverlay):
        Call DrawingArea::uninstallPageOverlay.

        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::hasPageOverlay):
        Add getter.

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

        Reviewed by Sam Weinig.

        Add WebPage::bounds and use it
        https://bugs.webkit.org/show_bug.cgi?id=53926

        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
        (WebKit::ChunkedUpdateDrawingArea::resumePainting):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::resumePainting):
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::bounds):

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

        Reviewed by Maciej Stachowiak.

        Don't exclude overlay scrollers from the page overlay bounds
        https://bugs.webkit.org/show_bug.cgi?id=53924

        Don't subtract the scrollbars from the page overlay bounds if
        overlay scrollers are enabled.

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

2011-02-07  Adam Roben  <aroben@apple.com>

        Windows build fix after r77794

        * win/WebKit2.def: Export WebCore symbols used by WebKitTestRunner.

2011-02-07  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Antti Koivisto.

        Add WKURLRequestCopyURL API (needed for tests and also generally useful)
        https://bugs.webkit.org/show_bug.cgi?id=53909

        * Shared/API/c/WKURLRequest.cpp:
        (WKURLRequestCopyURL):
        * Shared/API/c/WKURLRequest.h:
        * Shared/WebURLRequest.h:
        (WebKit::WebURLRequest::url):

2011-02-06  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed; speculative Qt build fix.

        * WebKit2.pro:

2011-02-06  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        OwnArraryPtr.h uses deleteOwnedPtr but doesn’t include OwnPtrCommon.h
        https://bugs.webkit.org/show_bug.cgi?id=52867

        * Shared/Plugins/Netscape/win/NetscapePluginModuleWin.cpp:
        (WebKit::NetscapePluginModule::getPluginInfo): Calls adoptArrayPtr.

2011-02-06  Benjamin Poulain  <ikipou@gmail.com>

        Reviewed by Andreas Kling.

        [Qt] WebKit does not build on Mac with WebKit 2
        https://bugs.webkit.org/show_bug.cgi?id=53380

        * Platform/CoreIPC/qt/ConnectionQt.cpp: Use fcntl() to set close on exec so
        we do not rely on recent kernel.
        (CoreIPC::Connection::readyReadHandler):
        * Platform/qt/SharedMemoryQt.cpp: ditto
        (WebKit::SharedMemory::create):
        (WebKit::SharedMemory::createHandle):
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp: Guard prctl() since it is
        a Linux specific function.
        (WebKit::QtWebProcess::setupChildProcess):
        * UIProcess/DrawingAreaProxy.h: Differentiate between building on Mac
        and the Mac port.
        * UIProcess/DrawingAreaProxyImpl.cpp: ditto
        * UIProcess/WebPageProxy.cpp: ditto
        (WebKit::WebPageProxy::didReceiveMessage):
        * WebProcess/WebPage/DrawingArea.cpp: ditto
        (WebKit::DrawingArea::create):
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp: ditto
        * WebProcess/WebPage/WebPage.cpp: ditto
        (WebKit::WebPage::didReceiveMessage):

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

        Reviewed by Dan Bernstein.

        REGRESSION: New drawing area is causing some WebProcess crashes in layout tests
        https://bugs.webkit.org/show_bug.cgi?id=53865
        <rdar://problem/8963148>
        
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode): Handle the case
        where this is called repeatedly without exiting accelerated composting mode
        first.
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode): Handle the case
        of being called more than once.

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

        Reviewed by Darin Adler.

        Need a way to resize and scroll the page at the same time
        https://bugs.webkit.org/show_bug.cgi?id=53814
        <rdar://problem/8498008>

        Add -[WKView setFrame:andScrollBy:].

        * UIProcess/API/mac/WKView.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView setFrame:andScrollBy:]):
        Stash away the scroll offset and call setFrame:.

        (-[WKView _switchToDrawingAreaTypeIfNecessary:DrawingAreaInfo::]):
        (-[WKView _setDrawingAreaSize:]):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::setViewportSize):
        DrawingAreaProxy::setSize now takes a scroll offset.

        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::setSize):
        This now takes a scroll offset and stores it in m_scrollOffset.

        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::sendSetSize):
        Send along the scroll offset and set it back to zero.

        * UIProcess/LayerBackedDrawingAreaProxy.cpp:
        (WebKit::LayerBackedDrawingAreaProxy::didSetSize):
        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::didSetSize):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::onSizeEvent):
        (WebKit::WebView::switchToDrawingAreaTypeIfNecessary):
        DrawingAreaProxy::setSize now takes a scroll offset.
        
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::setSize):
        Add a scrollOffset parameter.

        * WebProcess/WebPage/DrawingArea.messages.in:
        Add a scroll offset parameter to the SetSize message.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::setSize):
        Call WebPage::scrollMainFrameIfNotAtMaxScrollPosition.

        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scrollMainFrameIfNotAtMaxScrollPosition):
        Compute a scroll offset and call setScrollPosition on the main frame view.

2011-02-04  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKit2: Crash when InjectedBundlePageLoaderClient::willSendRequestForFrame returns a null WKURLRequestRef
        https://bugs.webkit.org/show_bug.cgi?id=53829
        
        Store the result of m_client.willSendRequestForFrame in a RefPtr, and null check it before
        calling resourceRequest() on it.

        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::willSendRequestForFrame):

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

        Fix build.

        * WebProcess/mac/WebProcessMac.mm:

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

        Reviewed by Mark Rowe.

        Link opened in background tab fails to paint when activated if it completes loading before tab is selected
        https://bugs.webkit.org/show_bug.cgi?id=53827
        <rdar://problem/8962355>

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::resumePainting):
        Invalidate the entire page.

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

        Reviewed by Sam Weinig.

        Fix <rdar://problem/8961227> WebKit2 does not work with symlinked home directories.

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformSetCacheModel):
        Don't adopt an autoreleased pointer, this would lead to a crash.

        (WebKit::appendSandboxParameterPath):
        (WebKit::appendSandboxParameterConfPath):
        (WebKit::initializeSandbox):
        Clean up the sandbox parameter code and make sure that realpath is called for all parameters.

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

        Reviewed by Mark Rowe.

        Sandbox violations when visiting a site using HTTP authentication
        <rdar://problem/8951079> 

        * WebProcess/com.apple.WebProcess.sb:

2011-02-04  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=53823
        Print layout sometimes seen on screen

        <rdar://problem/8948742> REGRESSION (WebKit2) - When I print a page, I visually see it re-layout
        <rdar://problem/8899389> REGRESSION(WebKit2): Wrong content can appear when print dialog is up

        * UIProcess/API/mac/PageClientImpl.mm: (WebKit::PageClientImpl::setAutodisplay): Removed a
        branch that didn't do anything useful.

        * UIProcess/API/mac/WKPrintingView.h:
        * UIProcess/API/mac/WKPrintingView.mm:
        (-[WKPrintingView _suspendAutodisplay]):
        (-[WKPrintingView _delayedResumeAutodisplayTimerFired]):
        (-[WKPrintingView _delayedResumeAutodisplay]):
        (-[WKPrintingView knowsPageRange:]):
        (-[WKPrintingView beginDocument]):
        (-[WKPrintingView endDocument]):
        When page setup changes, or when going from print preview to actual printing, AppKit calls
        -endDocument just to begin it again. Delay resuming autodisplay until the next run loop
        iteration.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::invalidateContentsAndWindow):
        (WebKit::WebChromeClient::invalidateContentsForSlowScroll):
        Tightened it up from other side - we should never send pixels to UI process while in
        printing mode. This is not 100% reliable, because relayout doesn't happen immediately,
        and we can still have print layout in screen mode - but it helps.

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

        Reviewed by Mark Rowe.

        Fix for <rdar://problem/8961580>.
        Work around for <rdar://problem/8957845>.

        * WebProcess/com.apple.WebProcess.sb:

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

        Reviewed by Dan Bernstein.

        WebKit2 doesn't hide mouse pointer on keypress
        https://bugs.webkit.org/show_bug.cgi?id=53821
        rdar://problem/8630895

        * UIProcess/PageClient.h: Renamed didNotHandleKeyEvent to
        doneWithKeyEvent and added a bool wasEventHandled argument.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveEvent): Changed code to call
        doneWithKeyEvent and call even if event was handled.

        * UIProcess/API/mac/PageClientImpl.h: Updated for above change.
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::doneWithKeyEvent): Ditto. But also
        call [NSCursor setHiddenUntilMouseMoves:YES] when a key down
        event was handled. This matches what -[WebHTMLView keyDown:] does.
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::doneWithKeyEvent): Ditto.
        * UIProcess/API/qt/qwkpage_p.h: Ditto.
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::doneWithKeyEvent): Ditto.
        * UIProcess/win/WebView.h: Ditto.

2011-02-04  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WebKit2 clients fail to launch on Windows if client exe is in a different directory from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=53810
        <rdar://problem/8946085>
        
        If WebKit2WebProcess.exe is in a different directory from the client process, and that
        client process uses CreateProcess to launch WebKit2WebProcess, the DLL search path may
        end up excluding the directory containing WebKit. To address this, we use SetDllDirectory
        to explicitly include the WebKit directory in the DLL search path.

        * win/MainWin.cpp:
        (wWinMain): Use SetDllDirectory and LoadLibrary to load WebKit.dll from WebKit2WebProcess.exe
        * win/WebKit2WebProcessCommon.vsprops: Don't link directly to WebKit. Link against shlwapi.

2011-02-04  Adam Roben  <aroben@apple.com>

        Allow passing a null filter callback to WKPageCopySessionState

        WebKit2 part of <http://webkit.org/b/53616> <rdar://problem/8949883>.

        Reviewed by Sam Weinig.

        * UIProcess/cf/WebBackForwardListCF.cpp:
        (WebKit::WebBackForwardList::createCFDictionaryRepresentation): Check if the filter is null
        before calling it.

2011-02-04  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by John Sullivan.

        WebKit2: DidInitiateLoadForResource needs to know if the resource is being loaded by a committed or provisional frame
        https://bugs.webkit.org/show_bug.cgi?id=53794
        
        When we navigate from one page to another, there can be multiple subresource requests between when
        the new page has started its provisional load and when it has committed the load.
        
        There can be:
        
        - The main resource load of the provisional page
        - Synchronous XHR from the unload event of the loaded page.
        
        WebKit clients need to be able to differentiate between these loads.

        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didInitiateLoadForResource): Pass whether or not the page is provisionally loading
            to the client.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in: Add a new parameter to DidInitiateLoadForResource.
        * UIProcess/WebResourceLoadClient.cpp:
        (WebKit::WebResourceLoadClient::didInitiateLoadForResource):  a new parameter to didInitiateLoadForResource.
        * UIProcess/WebResourceLoadClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::assignIdentifierToInitialRequest): Pass whether or not the page is currently
            in a provisional load (checked by seeing if the DocumentLoader matches the FrameLoader's provisionalDocumentLoader)
            to the UI Process.

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

        Reviewed by Mark Rowe.

        Mac WebKit2 should use the new drawing area
        https://bugs.webkit.org/show_bug.cgi?id=53802
        <rdar://problem/7881419>
        <rdar://problem/7881447>
        <rdar://problem/8252632>
        <rdar://problem/8479422>
        <rdar://problem/8633813>
        <rdar://problem/8734512>
        <rdar://problem/8787660>

        * UIProcess/API/mac/WKView.mm:
        (useNewDrawingArea):
        Return true. Eventually this function should be removed, but let's keep it for now so
        we can go back to the old drawing area if necessary.

2011-02-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders Carlsson.

        WebKit2: Crash in WebPageProxy::setPendingAPIRequestURL after web process crashed
        https://bugs.webkit.org/show_bug.cgi?id=53799
        <rdar://problem/8943956>

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

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

        Reviewed by Maciej Stachowiak.

        Fix a shared memory leak
        https://bugs.webkit.org/show_bug.cgi?id=53800

        Move the send right representing the shared memory.

        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::Handle::encode):

2011-02-04  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/8636239> and https://bugs.webkit.org/show_bug.cgi?id=53785
        WebKit2: Pages with dynamically inserted iframes can add extraneous back/forward items.

        WebCore doesn't gracefully handle the case where the decidePolicyForNavigationAction callback
        does not occur synchronously. Let's make it synchronous.

        Change WebPageProxy to handle this message reply synchronously:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in: Make the navigation policy action message be synchronous.

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction): Add a 6-argument varient 

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): Send the message synchronously.

2011-02-04  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.
        Correct prebuild build-stopping rule to allow project only rebuilds.

        * win/WebKit2WebProcessPreBuild.cmd:

2011-02-04  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Assertion failure in WebInspectorProxy::platformClose closing main window when inspecting a popup 
        window, or when running regression tests.
        https://bugs.webkit.org/show_bug.cgi?id=53798
        <rdar://problem/8814364>
        
        Only assert about the state of m_inspectorWindow and m_inspectorView if the inspector is visible.
        Also, only call ::DestroyWindow if the HWND is non-null, just to be safe.

        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformClose):

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

        Reviewed by Dan Bernstein.

        Go out of accelerated compositing mode when the drawing area is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=53788

        This fixes a crash in the UI process if a web process crashes while in accelerated compositing mode.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::~DrawingAreaProxyImpl):

2011-02-03  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove settings related methods from InspectorClient
        https://bugs.webkit.org/show_bug.cgi?id=53686

        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        (WebKit::WebInspectorFrontendClient::WebInspectorFrontendClient):

2011-02-03  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        WebKit2: Need WebKit2 equivalent of WebResourceLoadDelegate::willSendRequest in the Bundle
        https://bugs.webkit.org/show_bug.cgi?id=52897
        <rdar://problem/8898294>

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::willSendRequestForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchWillSendRequest):

2011-02-03  Ivan Krstić  <ike@apple.com>

        Reviewed by Maciej Stachowiak.

        Make WebProcess pass explicit homedir parameter to the sandbox
        <rdar://problem/8405760>
        <https://webkit.org/b/53558>

        * WebProcess/com.apple.WebProcess.sb:
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::initializeSandbox):

2011-02-03  James Kozianski  <koz@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add navigator.registerProtocolHandler behind a flag.
        https://bugs.webkit.org/show_bug.cgi?id=52609

        * Configurations/FeatureDefines.xcconfig:

2011-02-03  Adam Langley  <agl@chromium.org>

        Reviewed by Adam Barth.

        Plumb mixed script URL to FrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=52384

        Regressions covered by http/tests/security/mixedContent/*

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

2011-02-03  Jon Honeycutt  <jhoneycutt@apple.com>

        Download bundles should be moved to their final destination when they
        finish.

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

        Reviewed by Adam Roben.

        * WebProcess/Downloads/Download.cpp:
        (WebKit::Download::Download):
        Initialize m_allowOverwrite.
        (WebKit::Download::retrieveDestinationWithSuggestedFilename):
        Return the result of requesting the destination filename from the UI
        process.
        (WebKit::Download::decideDestinationWithSuggestedFilename):
        Call retrieveDestinationWithSuggestedFilename().
        (WebKit::Download::didFinish):
        Call platformDidFinish().

        * WebProcess/Downloads/Download.h:
        Declare retrieveDestinationWithSuggestedFilename() and
        platformDidFinish(). Add a member variable to store whether the UI
        process would like us to overwrite existing files.

        * WebProcess/Downloads/cf/DownloadCFNet.cpp:
        (WebKit::willResumeWithResponseCallback):
        Remove some trailing whitespace.

        * WebProcess/Downloads/curl/DownloadCurl.cpp:
        (WebKit::Download::platformDidFinish):
        Stubbed.

        * WebProcess/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::platformDidFinish):
        Stubbed.

        * WebProcess/Downloads/qt/DownloadQt.cpp:
        (WebKit::Download::platformDidFinish):
        Stubbed.

        * WebProcess/Downloads/cf/win/DownloadCFNetWin.cpp:
        (WebKit::Download::didDecideDestination):
        Store whether the UI process would like us to overwrite existing files.
        (WebKit::Download::platformDidFinish):
        Try to move the bundle to the final destination. If that fails, ask the
        UI process for a new destination. If we receive one, try again to move
        the bundle. Call didCreateDestination() to report the updated path of
        file whether it's the bundle that we failed to move, or the new final
        destination.

        This is similar to what is done by WebKit 1's CFNetwork port.

        * win/WebKit2.vcproj:
        Add DownloadWin.cpp.

2011-02-01  Jon Honeycutt  <jhoneycutt@apple.com>

        Small clean-up in DownloadCFNet.cpp.

        Rubber-stamped by Mark Rowe.

        * WebProcess/Downloads/cf/DownloadCFNet.cpp:
        (WebKit::Download::didDecideDestination):
        Moved out of the section labeled "CFURLDownload callbacks" and up near
        the other member functions.

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

        Reviewed by Sam Weinig.

        Paint non-composited contents in a layer
        https://bugs.webkit.org/show_bug.cgi?id=53742

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::setNeedsDisplay):
        Call LayerTreeHost::setNonCompositedContentsNeedDisplayInRect.

        (WebKit::DrawingAreaImpl::scroll):
        Call LayerTreeHost::scrollNonCompositedContents.

        (WebKit::DrawingAreaImpl::setSize):
        Call LayerTreeHost::sizeDidChange.

        * WebProcess/WebPage/LayerTreeHost.h:
        Add new pure virtual member functions.

        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::LayerTreeHostMac):
        Create the non-composited content layer.

        (WebKit::LayerTreeHostMac::setNonCompositedContentsNeedDisplayInRect):
        Call setNeedsDisplay on the GraphicsLayer.

        (WebKit::LayerTreeHostMac::scrollNonCompositedContents):
        Just call setNonCompositedContentsNeedDisplayInRect.

        (WebKit::LayerTreeHostMac::sizeDidChange):
        Resize the layers and flush any changes.
        
        (WebKit::LayerTreeHostMac::paintContents):
        Call WebPage::drawRect.

        (WebKit::LayerTreeHostMac::flushPendingLayerChangesRunLoopObserverCallback):
        Lay out the web page.

        (WebKit::LayerTreeHostMac::flushPendingLayerChanges):
        Call syncCompositingStateForThisLayerOnly on the non-composited content layer.

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

        Reviewed by Sam Weinig.

        When in accelerated compositing mode, wait for DidSetSize messages
        https://bugs.webkit.org/show_bug.cgi?id=53736

        Normally we wait for DidSetSize messages from ::paint, but that's never called in 
        accelerated compositing mode so we just do it right after sending the SetSize message.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::paint):
        Call waitForAndDispatchDidSetSize.

        (WebKit::DrawingAreaProxyImpl::sendSetSize):
        Call waitForAndDispatchDidSetSize when in accelerated compositing mode.

        (WebKit::DrawingAreaProxyImpl::waitForAndDispatchDidSetSize):
        New utility function which waits for and dispatches a DidSetSize message.

        * UIProcess/DrawingAreaProxyImpl.h:

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

        Reviewed by Dan Bernstein.

        Pass along an UpdateInfo object to the ExitAcceleratedCompositingMode message
        https://bugs.webkit.org/show_bug.cgi?id=53734

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::exitAcceleratedCompositingMode):
        Add an UpdateInfo parameter.

        * UIProcess/DrawingAreaProxy.messages.in:
        Add an UpdateInfo parameter to the ExitAcceleratedCompositingMode message.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode):
        Incorporate the passed in update.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
        Create a new UpdateInfo object, paint into it and pass it along as a parameter
        to the ExitAcceleratedCompositingMode message.

2011-02-03  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for <rdar://problem/8944544> Ability to animate track
        for WKPainter scrollers

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

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

        Reviewed by Dan Bernstein.

        Change DidSetSize to take a LayerTreeContext parameter
        https://bugs.webkit.org/show_bug.cgi?id=53724

        Since SetSize can cause layout to happen, we need to pass along a layer tree context to 
        the DidSetSize message so the UI process can enter/exit accelerated compositing mode appropriately.
        
        * Shared/LayerTreeContext.h:
        * Shared/mac/LayerTreeContextMac.mm:
        Add equality operators to LayerTreeContext.

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::didSetSize):
        This now takes a LayerTreeContext parameter.
        
        * UIProcess/DrawingAreaProxy.messages.in:
        Add LayerTreeContext parameter.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        Get rid of m_isInAcceleratedCompositingMode and use the current layer context instead.

        (WebKit::DrawingAreaProxyImpl::paint):
        Bail if the call to DidSetSize ended up entering accelerated compositing mode.

        (WebKit::DrawingAreaProxyImpl::didSetSize):
        If the new layer tree context is different, enter/exit accelerated compositing mode accordingly.

        (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode):
        Update the layer tree context.

        * UIProcess/DrawingAreaProxyImpl.h:
        (WebKit::DrawingAreaProxyImpl::isInAcceleratedCompositingMode):
        Add simple getter.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::setSize):
        Pass along the layer tree context.

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

        Reviewed by Dan Bernstein.

        Get rid of LayerTreeContext::seed on Mac.
        Add sequence checks to enterAcceleratedCompositingMode and exitAcceleratedCompositingMode and
        have them call newly added overloads that don't have the checks.

        * Shared/LayerTreeContext.h:
        * Shared/mac/LayerTreeContextMac.mm:
        (WebKit::LayerTreeContext::LayerTreeContext):
        (WebKit::LayerTreeContext::encode):
        (WebKit::LayerTreeContext::decode):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode):
        * UIProcess/DrawingAreaProxyImpl.h:
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::LayerTreeHostMac):

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

        Reviewed by Dan Bernstein.

        Get rid of timestamps in UpdateInfo
        https://bugs.webkit.org/show_bug.cgi?id=53713

        Add a 64-bit sequence number to all DrawingAreaProxy messages, and use it to
        check whether Update messages should be handled or not.

        * Shared/UpdateInfo.cpp:
        (WebKit::UpdateInfo::encode):
        (WebKit::UpdateInfo::decode):
        * Shared/UpdateInfo.h:
        (WebKit::UpdateInfo::UpdateInfo):
        * UIProcess/BackingStore.cpp:
        (WebKit::BackingStore::BackingStore):
        (WebKit::BackingStore::incorporateUpdate):
        * UIProcess/BackingStore.h:
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::update):
        (WebKit::DrawingAreaProxy::didSetSize):
        (WebKit::DrawingAreaProxy::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxy::exitAcceleratedCompositingMode):
        * UIProcess/DrawingAreaProxy.messages.in:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl):
        (WebKit::DrawingAreaProxyImpl::update):
        (WebKit::DrawingAreaProxyImpl::didSetSize):
        (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode):
        * UIProcess/DrawingAreaProxyImpl.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::generateSequenceNumber):
        (WebKit::DrawingAreaImpl::setSize):
        (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
        (WebKit::DrawingAreaImpl::display):

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

        Reviewed by Darin Adler.

        Don't send enter/exit accelerated compositing mode messages when handling setSize
        https://bugs.webkit.org/show_bug.cgi?id=53706

        Don't send EnterAcceleratedCompositingMode/ExitAcceleratedCompositing mode when
        the mode changes happen as a result of relayout in setSize, since an updated state
        is going to be sent back in the DidSetSize message.
        
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::didSetSize):
        Add an assert.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        Initialize m_inSetSize.

        (WebKit::DrawingAreaImpl::setRootCompositingLayer):
        Factor out code into enterAcceleratedCompositingMode and exitAcceleratedCompositingMode.

        (WebKit::DrawingAreaImpl::setSize):
        Set m_inSetSize to true while handling setSize.

        (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
        Take over the message sending responsibility from LayerTreeHostMac, and don't send messages
        if we're currently handling a SetSize message.

        * WebProcess/WebPage/DrawingAreaImpl.h:
        Add m_inSetSize.

        * WebProcess/WebPage/LayerTreeHost.h:
        Add layerTreeHost getter.

        * WebProcess/WebPage/mac/LayerTreeHostMac.h:
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::LayerTreeHostMac):
        Don't send EnterAcceleratedCompositingMode messages.

        (WebKit::LayerTreeHostMac::layerTreeContext):
        Add getter for the current layer tree context.

        (WebKit::LayerTreeHostMac::invalidate):
        Don't send ExitAcceleratedCompositingMode messages.

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

        Reviewed by Sam Weinig.

        Make the layer tree host keep track of the layer tree context
        https://bugs.webkit.org/show_bug.cgi?id=53698

        Add a LayerTreeContext member variable to the LayerTreeHost object,
        and also add a seed count to the LayerTreeContext so we can keep track of 
        how layer tree contexts relate to each other.

        * Shared/LayerTreeContext.h:
        * Shared/mac/LayerTreeContextMac.mm:
        (WebKit::LayerTreeContext::LayerTreeContext):
        (WebKit::LayerTreeContext::makeWithSeed):
        (WebKit::LayerTreeContext::encode):
        (WebKit::LayerTreeContext::decode):

        * WebProcess/WebPage/mac/LayerTreeHostMac.h:
        Add the layer tree context as a member variable.

        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::LayerTreeHostMac):
        Initialize the layer tree context.

2011-02-03  Sam Weinig  <sam@webkit.org>

        Fix Qt build.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage):

2011-02-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add notification of the end of a rubber band.
        <rdar://problem/8940648>

        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::drawHeader):
        (WebKit::WebPageProxy::drawFooter):
        (WebKit::WebPageProxy::didCompleteRubberBandForMainFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::didCompleteRubberBandForMainFrame):
        * UIProcess/WebUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::didCompleteRubberBandForMainFrame):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        Pipe the notification up to the WKUIClient.

2011-02-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r77449.
        http://trac.webkit.org/changeset/77449
        https://bugs.webkit.org/show_bug.cgi?id=53663

        causes many WebKit2 tests to crash (Requested by othermaciej
        on #webkit).

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        (WebKit::toCopiedAPI):
        (WebKit::toURLRef):
        (WebKit::toCopiedURLAPI):
        * Shared/WebString.h:
        (WebKit::WebString::isNull):
        (WebKit::WebString::WebString):

2011-02-02  Sam Weinig  <sam@webkit.org>

        Fix license block issues pointed out by Daniel Bates.

        * Shared/API/c/WKGraphicsContext.cpp:
        * Shared/API/c/WKGraphicsContext.h:
        * Shared/API/c/cg/WKGraphicsContextCG.cpp:
        * Shared/API/c/cg/WKGraphicsContextCG.h:
        * Shared/WebGraphicsContext.cpp:

2011-02-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Add WKBundleFrameGetVisibleContentBoundsExcludingScrollbars API for WebKit2.

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameGetContentBounds):
        (WKBundleFrameGetVisibleContentBounds):
        (WKBundleFrameGetVisibleContentBoundsExcludingScrollbars):
        (WKBundleFrameGetScrollOffset):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::contentBounds):
        (WebKit::WebFrame::visibleContentBounds):
        (WebKit::WebFrame::visibleContentBoundsExcludingScrollbars):
        (WebKit::WebFrame::scrollOffset):
        * WebProcess/WebPage/WebFrame.h:
        Move implementation of frame geometry to the implementation file
        instead of keeping it in the API file.

2011-02-02  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=53361
        <rdar://problem/8921729> REGRESSION: Membuster accumulates 1GB+ memory due to autorelease 
        pools not being drained.
        Call into AppKit to add observers that push and pop autorelease pools on entry 
        and exit from the CFRunLoop.  This will prevent memory from accumulating.

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

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

        Reviewed by Sam Weinig.

        Make null WTF::String objects turn into 0 pointers for WKStringRef and WKURLRef.
        rdar://problem/8948688

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI): Return 0 if the passed in string is 0.
        (WebKit::toCopiedAPI): Ditto.
        (WebKit::toURLRef): Ditto. Old code was trying to do this but was missing a return.
        (WebKit::toCopiedURLAPI): Ditto. Old code was trying to do this but had incorrect
        nll check.

        * Shared/WebString.h: Removed isNull function. It can never return true.
        Removed constructor code that turns the null string into the empty string.
        Instead assert that the passed in string is not null.

2011-02-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/8928367> Crash when loading canvas pages inside HTMLCanvasElement::createImageBuffer().

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Add some missing initializers.

2011-02-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        Add ChromeClient function to paint custom overhang areas.
        https://bugs.webkit.org/show_bug.cgi?id=53639

        * Shared/API/c/WKBase.h:
        * Shared/API/c/WKGraphicsContext.cpp: Added.
        (WKGraphicsContextGetTypeID):
        * Shared/API/c/WKGraphicsContext.h: Added.
        * Shared/API/c/WKSharedAPICast.h:
        * Shared/API/c/cg/WKGraphicsContextCG.cpp: Added.
        (WKGraphicsContextGetCGContext):
        * Shared/API/c/cg/WKGraphicsContextCG.h: Added.
        * Shared/APIObject.h:
        * Shared/WebGraphicsContext.cpp: Added.
        (WebKit::WebGraphicsContext::WebGraphicsContext):
        * Shared/WebGraphicsContext.h: Added.
        (WebKit::WebGraphicsContext::create):
        (WebKit::WebGraphicsContext::platformContext):
        (WebKit::WebGraphicsContext::type):
        Add WebGraphicsContext API type.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::pageDidScroll):
        (WebKit::InjectedBundlePageUIClient::shouldPaintCustomOverhangArea):
        (WebKit::InjectedBundlePageUIClient::paintCustomOverhangArea):
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::paintCustomOverhangArea):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        Pipe paintCustomOverhangArea to the InjectedBundlePageUIClient.

        * UIProcess/API/C/WebKit2.h:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:
        Add new files.

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

        Reviewed by Dan Bernstein.

        Work towards making the layer tree host be in charge of all painting
        https://bugs.webkit.org/show_bug.cgi?id=53636

        Make sure that DrawingAreaImpl::display is never called when in accelerated compositing mode,
        since the layer tree host is supposed to handle all drawing in that case.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::scroll):
        (WebKit::DrawingAreaImpl::setRootCompositingLayer):
        (WebKit::DrawingAreaImpl::setSize):
        (WebKit::DrawingAreaImpl::didUpdate):

2011-02-02  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit build.

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

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

        Reviewed by Sam Weinig.

        Make sure that we don't try to call display() when in accelerated compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=53629

        When in accelerated compositing mode, the layer tree host should handle all painting, so make sure that display() is never called.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::setNeedsDisplay):
        (WebKit::DrawingAreaImpl::setRootCompositingLayer):
        (WebKit::DrawingAreaImpl::display):

2011-02-02  Adam Roben  <aroben@apple.com>

        Assert WebBackForwardList's current index is valid to help catch errors

        Hopefully this will help catch a crash I saw once but haven't yet been able to reproduce.

        Fixes <http://webkit.org/b/53622>.

        Reviewed by Brady Eidson.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::WebBackForwardList):
        (WebKit::WebBackForwardList::addItem):
        (WebKit::WebBackForwardList::goToItem):
        (WebKit::WebBackForwardList::currentItem):
        (WebKit::WebBackForwardList::backItem):
        (WebKit::WebBackForwardList::forwardItem):
        (WebKit::WebBackForwardList::itemAtIndex):
        (WebKit::WebBackForwardList::backListCount):
        (WebKit::WebBackForwardList::forwardListCount):
        (WebKit::WebBackForwardList::backListAsImmutableArrayWithLimit):
        (WebKit::WebBackForwardList::forwardListAsImmutableArrayWithLimit):
        (WebKit::WebBackForwardList::clear):
        * UIProcess/cf/WebBackForwardListCF.cpp:
        (WebKit::WebBackForwardList::createCFDictionaryRepresentation):
        (WebKit::WebBackForwardList::restoreFromCFDictionaryRepresentation):
        Assert that m_current is valid.

        * UIProcess/WebBackForwardList.h: Moved the NoCurrentItemIndex to a static data member so
        that it can be used from WebBackForwardListCF.cpp.

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

        Reviewed by Sam Weinig.

        The drawing area proxy should keep track of the accelerated compositing state
        https://bugs.webkit.org/show_bug.cgi?id=53624

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl):
        Initialize m_isInAcceleratedCompositingMode to false.

        (WebKit::DrawingAreaProxyImpl::paint):
        Don't try to paint if we're in accelerated compositing mode.

        (WebKit::DrawingAreaProxyImpl::didSetSize):
        Bail if we're in accelerated compositing mode.

        (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
        Set m_isInAcceleratedCompositingMode to true, null out the backing store.

        (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode):
        Set m_isInAcceleratedCompositingMode back to false.

        (WebKit::DrawingAreaProxyImpl::incorporateUpdate):
        Assert that we're not in accelerated compositing mode.

        * UIProcess/DrawingAreaProxyImpl.h:

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

        Give the Web Process access to the Safari RSS preferences.

        <rdar://problem/8916870> Sandbox violation related to RSS during initial
        page load with WebKit2 (prevents RSS from working)

        Reviewed by Darin Adler.

        * WebProcess/com.apple.WebProcess.sb:

2011-02-02  Steve Lacey  <sjl@chromium.org>

        Reviewed by Eric Carlson.

        Implement basic media statistics on media elements.
        https://bugs.webkit.org/show_bug.cgi?id=53322

        * Configurations/FeatureDefines.xcconfig:

2011-02-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=53561
        <rdar://problem/8900228> Stepping through print previews in WebKit2 mode steps in and out of
        printing mode a lot

        Disable NSView autodisplay, so that -[WKView drawRect:] isn't called (other than when
        resizing the window), so that we don't have to switch modes all the time.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setAutodisplay):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setAutodisplay):
        * UIProcess/WebPageProxy.h:
        Pipe the call from WKPrintingView down to WKView.

        * UIProcess/API/mac/WKPrintingView.mm:
        (-[WKPrintingView beginDocument]): Added. We don't want to autodisplay WKView while printing,
        because layout is changed to print at the time, and drawing to screen requires relayout.
        
        (-[WKPrintingView endDocument]): When not printing, turn autodisplay back on. Also, call
        -[super endDocument] for unknown but definitive good (oops!).

2011-02-02  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        Conversion of right()/bottom() to maxX()/maxY() as part of the removal of those accessors.

        * UIProcess/win/WebPopupMenuProxyWin.cpp:
        (WebKit::WebPopupMenuProxyWin::calculatePositionAndSize):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::prepareCandidateWindow):
        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::NetscapePlugin::platformGeometryDidChange):

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

        Reviewed by Anders Carlsson.

        Overflow in WebKit2 argument decoder buffer checking
        https://bugs.webkit.org/show_bug.cgi?id=53536

        * Platform/CoreIPC/ArgumentDecoder.cpp:
        (CoreIPC::roundUpToAlignment): Tweak code a bit for clarity and to replace
        C casts with C++ casts.
        (CoreIPC::ArgumentDecoder::alignBufferPosition): Rearrange buffer calculation
        so we don't do any math with the passed-in size, because that could overflow.
        (CoreIPC::ArgumentDecoder::bufferIsLargeEnoughToContain): Ditto.

2011-02-01  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed.

        Fix Qt build after r77339.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::enterAcceleratedCompositingMode):
        (QWKPagePrivate::exitAcceleratedCompositingMode):
        * UIProcess/API/qt/qwkpage_p.h:

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

        Reviewed by Dan Bernstein.

        Attach the layer tree in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=53560

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _enterAcceleratedCompositingMode:]):
        Make a render layer and add it as a sublayer of our root layer.

        * WebProcess/WebPage/mac/LayerTreeHostMac.h:
        Make LayerTreeHostMac a GraphicsLayerClient.

        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::LayerTreeHostMac):
        Create a root layer, add the layer subtree as a child of the root layer.

        (WebKit::LayerTreeHostMac::~LayerTreeHostMac):
        Assert that m_rootLayer is null.

        (WebKit::LayerTreeHostMac::invalidate):
        Null out m_rootLayer.

        (WebKit::LayerTreeHostMac::notifyAnimationStarted):
        (WebKit::LayerTreeHostMac::notifySyncRequired):
        (WebKit::LayerTreeHostMac::paintContents):
        Add stubs.

        (WebKit::LayerTreeHostMac::showDebugBorders):
        (WebKit::LayerTreeHostMac::showRepaintCounter):
        Return the correct settings.

        (WebKit::LayerTreeHostMac::flushPendingLayerChanges):
        Flush the root layer changes.

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

        Fix Windows build.

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

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

        Reviewed by Dan Bernstein.

        Add a layer backed NSView for accelerated content
        https://bugs.webkit.org/show_bug.cgi?id=53555

        Rename the current _layerHostingView to _oldLayerHostingView and
        add a new _layerHostingView to be used with the new drawing area.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView hitTest:]):
        (-[WKView _startAcceleratedCompositing:]):
        (-[WKView _stopAcceleratedCompositing]):
        (-[WKView _enterAcceleratedCompositingMode:]):
        (-[WKView _exitAcceleratedCompositingMode]):

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

        Reviewed by Dan Bernstein.

        Pass enter/exit accelerated compositing mode to the WKView
        https://bugs.webkit.org/show_bug.cgi?id=53552

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::enterAcceleratedCompositingMode):
        (WebKit::PageClientImpl::exitAcceleratedCompositingMode):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _enterAcceleratedCompositingMode:]):
        (-[WKView _exitAcceleratedCompositingMode]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::enterAcceleratedCompositingMode):
        (WebKit::WebPageProxy::exitAcceleratedCompositingMode):
        * UIProcess/WebPageProxy.h:

2011-02-01  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed Qt buildfix after r77286.

        https://bugs.webkit.org/show_bug.cgi?id=53520 
        Remove the physical terminology from IntRect and FloatRect.

        * UIProcess/qt/ChunkedUpdateDrawingAreaProxyQt.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::drawUpdateChunkIntoBackingStore):

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

        Reviewed by Adam Roben.

        Send messages when entering/exiting accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=53534

        * Shared/LayerTreeContext.h: Added.
        * Shared/mac/LayerTreeContextMac.mm: Added.
        Add new LayerTreeContext which holds all information needed to enter
        accelerated compositing mode.

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxy::exitAcceleratedCompositingMode):
        Add empty stubs.

        * UIProcess/DrawingAreaProxy.messages.in:
        Add new messgaes.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode):
        * UIProcess/DrawingAreaProxyImpl.h:
        Add empty stubs.

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

        * WebProcess/WebPage/mac/LayerTreeHostMac.h:
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::LayerTreeHostMac):
        (WebKit::LayerTreeHostMac::invalidate):
        Send messages.

2011-02-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein and Darin Adler.

        <rdar://problem/8830594> Printed page is sometimes shifted down, making footer invisible

        * UIProcess/API/mac/WKPrintingView.mm: (-[WKPrintingView locationOfPrintRect:]): Instead of
        letting AppKit compute content position on page, make the view provide it. We can do this
        because WK(Printing)Views are always printed on their own, not as part of other views.

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

        Reviewed by Adam Roben.

        Make LayerTreeHost ref counted
        https://bugs.webkit.org/show_bug.cgi?id=53530

        LayerTreeHostMac will soon be able to trigger layout, which could cause
        the page to leave accelerated compositing mode and free the LayerTreeHostMac object.

        Making LayerTreeHost ref counted will let LayerTreeHostMac protect itself while triggering layout.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::setRootCompositingLayer):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create):
        * WebProcess/WebPage/LayerTreeHost.h:
        * WebProcess/WebPage/mac/LayerTreeHostMac.h:
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::create):
        (WebKit::LayerTreeHostMac::LayerTreeHostMac):
        (WebKit::LayerTreeHostMac::~LayerTreeHostMac):
        (WebKit::LayerTreeHostMac::invalidate):

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

        Reviewed by Beth Dakin.

        Part 2 for <rdar://problem/8492788>
        Adopt WKScrollbarPainterController

        Use header detection to define scrollbar painting controller #define.

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

2011-02-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=53520
        
        Remove the physical terminology from IntRect and FloatRect.
        
        Now that we have flipped RenderBlocks for vertical-rl and horizontal-bt writing modes,
        we need to update our terminology to be more accurate.

        I'm borrowing a page from AppKit here (which also supports flipped NSViews) and
        renaming right() and bottom() to maxX() and maxY().  These terms remain accurate
        even for flipped rectangles.

        * Platform/Region.cpp:
        (WebKit::Region::Shape::Shape):
        * UIProcess/API/mac/WKPrintingView.mm:
        (pageDidComputePageRects):
        * UIProcess/FindIndicator.cpp:
        (WebKit::FindIndicator::draw):
        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::invalidate):
        (WebKit::TiledDrawingAreaProxy::paint):
        (WebKit::TiledDrawingAreaProxy::createTiles):
        * UIProcess/mac/ChunkedUpdateDrawingAreaProxyMac.mm:
        (WebKit::ChunkedUpdateDrawingAreaProxy::drawUpdateChunkIntoBackingStore):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::callSetWindow):

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

        Reviewed by Adam Roben.

        Move flushPendingLayerChanges to LayerTreeHostMac
        https://bugs.webkit.org/show_bug.cgi?id=53525

        In preparation for adding more Mac specific code to flushPendingLayerChanges.

        * WebProcess/WebPage/LayerTreeHost.cpp:
        * WebProcess/WebPage/LayerTreeHost.h:
        * WebProcess/WebPage/mac/LayerTreeHostMac.h:
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::flushPendingLayerChanges):

2011-02-01  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for <rdar://problem/8492788> Adopt WKScrollbarPainterController

        Implement NSView's viewWillStartLiveResize and
        viewDidEndLiveResize and propagate the messages down
        to WebCore.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewWillStartLiveResize]):
        (-[WKView viewDidEndLiveResize]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewWillStartLiveResize):
        (WebKit::WebPageProxy::viewWillEndLiveResize):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::viewWillStartLiveResize):
        (WebKit::WebPage::viewWillEndLiveResize):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

        A bunch of new WebKitSystemInterface functions.
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-02-01  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=46422, make printing and pagination work
        with vertical text.

        Change printing functions to check writing-mode and properly swap width and height
        as needed.

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

2011-01-31  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=53466
        Move WebKit2 to printing via API methods

        Also fixes <rdar://problem/8933724> REGRESSION: Wrong pages are printed when not printing from page 1

        Also fixes horizontal tiling (no bug filed).

        The main idea here is that we don't force AppKit to use a different scaling factor when
        a Web view can't be resized to exact page size, and scale when drawing instead.

        * UIProcess/API/mac/WKPrintingView.mm:
        (-[WKPrintingView _firstPrintedPageNumber]): Factored out into a separate method.
        (-[WKPrintingView _lastPrintedPageNumber]): Ditto.
        (pageDidDrawToPDF): Avoid crashing if data is null.
        (-[WKPrintingView _preparePDFDataForPrintingOnSecondaryThread]): Use -_firstPrintedPageNumber
        and -_lastPrintedPageNumber.
        (pageDidComputePageRects): Set frame size to what it would have been for a normal NSView
        that's been asked to resize.
        (-[WKPrintingView _pageForRect:]): Check x(), because several pages can be at the same y()
        when tiling horizontally.
        (-[WKPrintingView _drawPDFDocument:page:atPoint:]): Point to draw at and frame size are
        now using different units, translate as appropriate.
        (-[WKPrintingView _drawPreview:]): Scale the rect to WebCore units.
        (-[WKPrintingView drawRect:]): Correctly calculate page number when the first page to print
        isn't page 1.
        (-[WKPrintingView rectForPage:]): Scale the rect to AppKit units.

2011-01-31  Darin Adler  <darin@apple.com>

        Reviewed by Adele Peterson.

        WKView should support scrollPageDown:, scrollPageUp:, scrollToBeg and other similar selectors
        https://bugs.webkit.org/show_bug.cgi?id=53460

        * UIProcess/API/mac/WKView.mm: Added WEBCORE_COMMAND macro for lots of editor commands that
        are implemented in WebCore so they will get forwarded. Many of these will probably work without
        any further changes required. Added comments about the methods that we do not yet forward.
        (createSelectorExceptionMap): Map scrollPageDown: to ScrollPageForward and
        scrollPageUp: to ScrollPageBackward because we want the page up and page down
        keys to follow the document logical order, not physical order. This is equivalent
        to what we do in WebPage::performDefaultBehaviorForKeyEvent.

2011-01-31  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Steve Falkenburg.

        WebKit2: the cookies used by the WebKit2 Web Process should not go in a top-level
        directory.
        https://bugs.webkit.org/show_bug.cgi?id=53278

        Use the name WebKit2WebProcess since the default location for the cookies is determined
        based on the process name (which is WebKit2WebProcess.exe on Windows).

        * win/WebKit2.make:
        Copy the WebKit2WebProcess.resources directory into the AppleInternal bin.

        * win/WebKit2WebProcess.resources: Added.
        * win/WebKit2WebProcess.resources/Info.plist: Added.
        Copied from the WebKit version of Info.plist.

        * win/WebKit2WebProcessPostBuild.cmd:
        Copy the WebKit2WebProcess.resources directory into the WebKitOutPutDir's bin.

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

        Reviewed by Adam Roben.

        Make LayerTreeHost an abstract base class and make LayerTreeHostMac inherit from it
        https://bugs.webkit.org/show_bug.cgi?id=53432

        * WebKit2.xcodeproj/project.pbxproj:
        Add LayerTreeHostMac.h.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        * WebProcess/WebPage/DrawingAreaImpl.h:
        Make m_layerTreeHost an OwnPtr and initialize/destroy it appropriately.

        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create):
        On Mac, create a LayerTreeHostMac instance.

        (WebKit::LayerTreeHost::~LayerTreeHost):
        No need to call platformInvalidate anymore.

        * WebProcess/WebPage/LayerTreeHost.h:
        * WebProcess/WebPage/mac/LayerTreeHostMac.h: Added.
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::~LayerTreeHostMac):
        Invalidate the run loop observer here instead of in platformInvalidate.

        (WebKit::LayerTreeHostMac::scheduleLayerFlush):
        (WebKit::LayerTreeHostMac::flushPendingLayerChangesRunLoopObserverCallback):
        These are now members of LayerTreeHostMac.

2011-01-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        [Take 2!]
        Fixed crash on window close (maybe crash on launch?) due to missing frame null checks
        https://bugs.webkit.org/show_bug.cgi?id=53408

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::didNavigateWithNavigationData):
        (WebKit::WebContext::didPerformClientRedirect):
        (WebKit::WebContext::didPerformServerRedirect):
        (WebKit::WebContext::didUpdateHistoryTitle): Use MESSAGE_CHECK because
        we don't think we should be able to reach this state under normal conditions.

2011-01-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Fixed crash on window close (maybe crash on launch?) due to missing
        frame null checks
        https://bugs.webkit.org/show_bug.cgi?id=53408

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::didNavigateWithNavigationData):
        (WebKit::WebContext::didPerformClientRedirect):
        (WebKit::WebContext::didPerformServerRedirect):
        (WebKit::WebContext::didUpdateHistoryTitle): Check for NULL, since we're
        calling a function that can return it.

2011-01-30  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt][WK2]REGRESSION (r76991): Fix build errors
        https://bugs.webkit.org/show_bug.cgi?id=53400

        Revert the temporary build fix (http://trac.webkit.org/changeset/77088)
        and remove WebKit2Prefix.h from the build.
        * UIProcess/API/qt/qwkhistory.h:
        * UIProcess/API/qt/qwkpage.h:
        * WebKit2.pro:

2011-01-30  Jeff Miller  <jeffm@apple.com>

        Reviewed by Dan Bernstein.

        FindController::updateFindIndicator() crashes if selection isn't visible
        https://bugs.webkit.org/show_bug.cgi?id=53399

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindIndicator): Return false if ShareableBitmap::createShareable() returns null (typically because the selection rect is empty).

2011-01-30  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed.

        [Qt][WK2] Buildfix.

        * UIProcess/API/qt/qwkhistory.h:
        * UIProcess/API/qt/qwkpage.h:

2011-01-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoffrey Garen.

        Add WKPageCopyPendingAPIRequestURL API
        https://bugs.webkit.org/show_bug.cgi?id=53383

        This API returns the last URL requested for load via API, if neither that load nor any
        other load subsequently reaches the provisional state.
        
        This is useful to be able to track loads initiated via the API
        
        * UIProcess/API/C/WKPage.cpp:
        (WKPageCopyPendingAPIRequestURL): Retrieve the pending URL.
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadURL): Set pending URL.
        (WebKit::WebPageProxy::loadURLRequest): ditto
        (WebKit::WebPageProxy::reload): ditto
        (WebKit::WebPageProxy::goForward): ditto
        (WebKit::WebPageProxy::goBack): ditto
        (WebKit::WebPageProxy::estimatedProgress): Assume the initial
        progress value when there is a pending URL.
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame): Clear
        pending URL; clients should look at the provisional URL now.
        (WebKit::WebPageProxy::decidePolicyForNavigationAction): Clear
        pending URL if it doesn't match the policy URL; this means we
        were interrupted by another load.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::pendingAPIRequestURL): Helper function.
        (WebKit::WebPageProxy::clearPendingAPIRequestURL): ditto
        (WebKit::WebPageProxy::setPendingAPIRequestURL): ditto

2011-01-28  Jon Honeycutt  <jhoneycutt@apple.com>

        Downloads in WK2 on Windows should write resume data to bundle
        https://bugs.webkit.org/show_bug.cgi?id=53282
        <rdar://problem/8753077>

        Reviewed by Alice Liu.

        * WebProcess/Downloads/Download.cpp:
        (WebKit::Download::decideDestinationWithSuggestedFilename):
        Call didDecideDestination(), now that the destination is decided.

        * WebProcess/Downloads/Download.h:
        Declare didDecideDestination(). Added member variables to hold the
        destination file path and the download bundle path.
        (WebKit::Download::destination):
        Return the path to the final destination for this download.

        * WebProcess/Downloads/cf/DownloadCFNet.cpp:
        (WebKit::Download::start):
        Remove the name of an unused param.
        (WebKit::Download::startWithHandle):
        Ditto.
        (WebKit::Download::cancel):
        Tell CFNetwork not to delete the file upon failure, and tell it to
        cancel the download. Copy the resume data for the download, and append
        it to the download bundle. Call didCancel() with an empty
        DataReference, since we have written our own resume data.
        (WebKit::decideDestinationWithSuggestedObjectNameCallback):
        Remove some unused param names. Removed the call to
        CFURLDownloadSetDestination() - this is now handled in
        Download::didDecideDestination().
        (WebKit::didCreateDestinationCallback):
        Report that the final destination was created, rather than the download
        bundle, matching old WebKit.
        (WebKit::Download::didDecideDestination):
        Store the final destination and the download bundle paths, and call
        CFURLDownloadSetDestination(), passing the path to the download bundle.

        * WebProcess/Downloads/curl/DownloadCurl.cpp:
        (WebKit::Download::didDecideDestination):
        Stubbed.

        * WebProcess/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::didDecideDestination):
        Stubbed - unneeded on the Mac.

        * WebProcess/Downloads/qt/DownloadQt.cpp:
        (WebKit::Download::didDecideDestination):
        Stubbed.

2011-01-29  Jeff Miller  <jeffm@apple.com>

        Reviewed by Anders Carlsson.

        Support find bouncy in WebKit2 on Windows
        https://bugs.webkit.org/show_bug.cgi?id=53329
        <rdar://problem/8565843>
        The Mac implements the find bouncy inside of WebKit in the UI process for WebKit2, but we need to do this inside Safari for WebKit2 on Windows.
        Add infrastructure to call back into the app when the find indicator changes.

        * UIProcess/API/C/win/WKView.cpp: Cleanup some code style violations.
        (WKViewSetFindIndicatorCallback): Added.
        (WKViewGetFindIndicatorCallback): Added.
        * UIProcess/API/C/win/WKView.h: Cleanup some code style violations.
        * UIProcess/FindIndicator.cpp:
        (WebKit::FindIndicator::create):
        (WebKit::FindIndicator::FindIndicator):
        (WebKit::FindIndicator::frameRect):
        (WebKit::FindIndicator::draw):
        Rename m_selectionRect to m_selectionRectInWindowCoordinates and m_textRects to m_textRectsInSelectionRectCoordinates (along with similarly named local variables) to be more explict about the coordinate system.
        * UIProcess/FindIndicator.h:
        (WebKit::FindIndicator::selectionRectInWindowCoordinates): Added.
        (WebKit::FindIndicator::textRects): Rename m_textRects to m_textRectsInSelectionRectCoordinates.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setFindIndicator): Rename selectionRect to selectionRectInWindowCoordinates and textRects to textRectsInSelectionRectCoordinates to be more explict about the coordinate system.
        * UIProcess/WebPageProxy.h: Ditto.
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView):
        (WebKit::WebView::setFindIndicator): Added.
        (WebKit::WebView::setFindIndicatorCallback): Added.
        (WebKit::WebView::getFindIndicatorCallback): Added.
        * UIProcess/win/WebView.h:

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

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=53367
        <rdar://problem/8926460> Remove dysfunctional code from -[WKPrintingView _isPrintingPreview].

        * UIProcess/API/mac/WKPrintingView.mm: (-[WKPrintingView _isPrintingPreview]): The common
        branch works fine for now, no need to make platforms different.

2011-01-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        WKPageGetEstimatedProgress returns wrong value after a mainframe provisional load has started
        https://bugs.webkit.org/show_bug.cgi?id=53358

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didStartProgress): Start progress at the magic initial value, not 0.

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

        Yet another build fix (What was I thinking?)

        * WebProcess/Downloads/Download.h:
        * WebProcess/Plugins/PluginProxy.h:

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

        Fix Windows build.

        * Shared/PrintInfo.h:

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

        Fix tyop.

        * Shared/mac/CoreAnimationRenderer.mm:

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

        Reviewed by Sam Weinig.

        Add CoreAnimationRenderer class
        https://bugs.webkit.org/show_bug.cgi?id=53343

        * Shared/mac/CoreAnimationRenderer.h: Added.
        * Shared/mac/CoreAnimationRenderer.mm: Added.

        (WebKit::CoreAnimationRenderer::CoreAnimationRenderer):
        Initialize the underlying CARenderer object and hook up a notification observer.

        (WebKit::CoreAnimationRenderer::~CoreAnimationRenderer):
        Assert that the client is null. It has been set to null by the call to invalidate().

        (WebKit::CoreAnimationRenderer::setBounds):
        Update the bounds on the CARenderer and the root layer.

        (WebKit::CoreAnimationRenderer::render):
        Ask the renderer to render and return the next frame time.

        (WebKit::CoreAnimationRenderer::invalidate):
        Remove the change observer and reset the client.

        (WebKit::CoreAnimationRenderer::rendererDidChange):
        Call the client member function.

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

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

        Reviewed by Sam Weinig.

        Add an OBJC_CLASS macro for forward declaring an Objective-C class
        https://bugs.webkit.org/show_bug.cgi?id=53337

        * Shared/NativeWebKeyboardEvent.h:
        * Shared/PrintInfo.h:
        * UIProcess/ChunkedUpdateDrawingAreaProxy.h:
        * UIProcess/LayerBackedDrawingAreaProxy.h:
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebPopupMenuProxyMac.h:
        * WebProcess/Downloads/Download.h:
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/WebPage/LayerBackedDrawingArea.h:
        * WebProcess/WebPage/WebPage.h:
        * config.h:

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

        Reviewed by Sam Weinig.

        Don't put config.h in the message headers.

        * Scripts/webkit2/messages.py:
        * Scripts/webkit2/messages_unittest.py:

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

        Fix build.

        * Shared/mac/ShareableSurface.cpp:

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

        Try to unbreak the Windows build.

        * UIProcess/cf/WebPageProxyCF.cpp:

2011-01-28  Brady Eidson  <beidson@apple.com>

        Reviewed by John Sullivan.

        https://bugs.webkit.org/show_bug.cgi?id=53330
        Need InjectedBundle API to get the response MIMEType for a URL

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

        Get the MIMEType from the in-memory cache, or cachedResponseMIMETypeForURL() if not available:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::mimeTypeForResourceWithURL):
        * WebProcess/WebPage/WebFrame.h:

        Get the MIMEType from the platform's disk cache if available:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::cachedResponseMIMETypeForURL):
        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (WebKit::WebPage::cachedResponseMIMETypeForURL):
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::cachedResponseMIMETypeForURL):

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

        Reviewed by Sam Weinig.

        Clean up the mess introduced when config.h was added to the project:

        - Remove the contents of WebKit2Prefix.h that is now in config.h, to avoid including everything
          twice in each file, probably slowing down compile time.

        - Add config.h to all the files that were forgotten in order to keep the build from breaking.

        - Added trap to ensure that config.h is included at the top of every implementation file. If this
          had been added it would have caught the previous issue.

2011-01-28  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Geoff Garen.

        <rdar://problem/8857651> Implement unregisterWorld for WebKit2
        Rename unregisterWorld to clearWrappers.  Clearing the wrappers reduces the 
        memory use of isolated worlds.

        * WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.cpp:
        (WKBundleScriptWorldClearWrappers):
        * WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.h:
        * WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp:
        (WebKit::InjectedBundleScriptWorld::clearWrappers):
        * WebProcess/InjectedBundle/InjectedBundleScriptWorld.h:

2011-01-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        <select> can't display right-to-left (rtl) languages
        https://bugs.webkit.org/show_bug.cgi?id=19785

        * Shared/WebPopupItem.cpp:
        (WebKit::WebPopupItem::WebPopupItem): Added initializers for m_textDirection and m_hasTextDirectionOverride.
        (WebKit::WebPopupItem::encode): Encode the item's writing direction and direction override values.
        (WebKit::WebPopupItem::decode): Decode the item's writing direction and direction override values.
        * Shared/WebPopupItem.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showPopupMenu): Added a parameter for the menu's text direction.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in: Ditto.
        * UIProcess/WebPopupMenuProxy.h:
        * UIProcess/mac/WebPopupMenuProxyMac.h:
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::populate): Added a parameter for the menu's text direction.
        Set items' text alignment to match the menu's writing direction. Set items' writing direction
        and direction override according to their styles.
        (WebKit::WebPopupMenuProxyMac::showPopupMenu): Set the pop-up's layout direction.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::selectItemWritingDirectionIsNatural): Changed to return false.
        (WebKit::WebChromeClient::selectItemAlignmentFollowsMenuWritingDirection): Added.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
        (WebKit::WebPopupMenu::populateItems): Initialize items' writing direction and direction override
        values.
        (WebKit::WebPopupMenu::show): Pass the menu's writing direction.

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

        Reviewed by Adam Roben.

        Add ShareableSurface class
        https://bugs.webkit.org/show_bug.cgi?id=53313

        * Shared/mac/ShareableSurface.cpp: Added.
        (WebKit::ShareableSurface::Handle::Handle):
        Initialize the mach port.

        (WebKit::ShareableSurface::Handle::~Handle):
        Deallocate our send right if needed.

        (WebKit::ShareableSurface::Handle::encode):
        Encode the send right, and then null it out.

        (WebKit::ShareableSurface::Handle::decode):
        Decode the send right.
        
        (WebKit::createIOSurface):
        Create an IOSurface with the given size.

        (WebKit::ShareableSurface::create):
        Create an IOSurface, either from a size or from a handle.

        (WebKit::ShareableSurface::~ShareableSurface):
        Delete the texture and framebuffer.

        (WebKit::ShareableSurface::createHandle):
        Create a mach port from the surface.

        (WebKit::ShareableSurface::attach):
        Create an FBO if needed and bind it.

        (WebKit::ShareableSurface::detach):
        Unbind the FBO.

        (WebKit::ShareableSurface::textureID):
        Generate a new texture and bind it to the IOSurface.

        * Shared/mac/ShareableSurface.h: Added.

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

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

        Change BinarySemaphore to wrap an auto-reset Win32 event on Windows

        Fixes <http://webkit.org/b/53208> <rdar://problem/8922490>.

        Reviewed by Dave Hyatt.

        * Platform/CoreIPC/BinarySemaphore.cpp: Wrap this implementation in #if !PLATFORM(WIN).

        * Platform/CoreIPC/BinarySemaphore.h: Make the Windows implementation have a single HANDLE
        member that holds the event.

        * Platform/CoreIPC/win/BinarySemaphoreWin.cpp: Copied from Source/WebKit2/Platform/CoreIPC/BinarySemaphore.cpp.
        (CoreIPC::BinarySemaphore::BinarySemaphore): Create our event.
        (CoreIPC::BinarySemaphore::~BinarySemaphore): Destory our event.
        (CoreIPC::BinarySemaphore::signal): Signal the event.
        (CoreIPC::BinarySemaphore::wait): Convert the absolute time to a wait interval, then wait
        for the event to be signaled or for the interval to elapse.

        * win/WebKit2.vcproj: Added BinarySemaphoreWin.cpp. Also let VS have its way with the file.

2011-01-27  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Anders Carlsson.

        WebKit2: Page flashes just before accelerated compositing animation
        https://bugs.webkit.org/show_bug.cgi?id=53274

        When switching out of compositing mode, the new ChunkedUpdateDrawingAreaProxy
        is getting created with the current page size. When the setSize() call is
        subsequently made, the sizeDidChange() call is not made (which does the initial
        render of the page) because the old size and new size are the same. The solution
        is to skip the setting of the size in the ctor and let it go through a size
        change sequence.

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

2011-01-28  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fix dist compilation for the release
        https://bugs.webkit.org/show_bug.cgi?id=53290

        * GNUmakefile.am: Remove a file that is not in the repository
        anymore.


2011-01-28  Andreas Kling  <kling@webkit.org>

        Rubber-stamped by Simon Hausmann.

        [Qt][WK2] Combine QWKPage::engine{Connected,Disconnected} into one signal.

        Having two signals for this is redundant, combine them into
        QWKPage::engineConnectionChanged(bool connected).

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::didRelaunchProcess):
        (QWKPagePrivate::processDidCrash):
        * UIProcess/API/qt/qwkpage.h:

2011-01-27  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Maciej Stachowiak.

        Build fix for Mac Intel Debug after r76916
        https://bugs.webkit.org/show_bug.cgi?id=53284

        Fix macro redefinition by guarding the redefined macros.

        * config.h:

2011-01-27  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed build fix for Mac Intel Debug after r76916.

        Fix macro redefinition by guarding the redefined macros.

        Check if the macro is already defined before defininig it.
        c++config.h has the same macros with the same values.

        * config.h:

2011-01-27  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Adam Barth.

        Update the expected results for test-webkitpy after r76916.

        Include "config.h" in the expected results as well.

        * Scripts/webkit2/messages_unittest.py:

2011-01-27  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed buildfix for SnowLeopard Intel Debug.

        Fix macro redefinition by not including config.h.

        Revert previous change in WebPageProxyCF.cpp.

        * UIProcess/cf/WebPageProxyCF.cpp:

2011-01-27  Greg Coletta  <greg.coletta@nokia.com>

        Reviewed by Laszlo Gombos.

        Get rid of prefix header dependency for WebKit2 build system.
        https://bugs.webkit.org/show_bug.cgi?id=50174

        Add config.h include explicitelly.

        * Platform/CoreIPC/ArgumentDecoder.cpp:
        * Platform/CoreIPC/ArgumentEncoder.cpp:
        * Platform/CoreIPC/Attachment.cpp:
        * Platform/CoreIPC/BinarySemaphore.cpp:
        * Platform/CoreIPC/Connection.cpp:
        * Platform/CoreIPC/DataReference.cpp:
        * Platform/CoreIPC/gtk/ConnectionGtk.cpp:
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        * Platform/CoreIPC/qt/ConnectionQt.cpp:
        * Platform/CoreIPC/win/ConnectionWin.cpp:
        * Platform/Logging.cpp:
        * Platform/Module.cpp:
        * Platform/Region.cpp:
        * Platform/RunLoop.cpp:
        * Platform/WorkQueue.cpp:
        * Platform/cg/CGUtilities.cpp:
        * Platform/gtk/RunLoopGtk.cpp:
        * Platform/gtk/SharedMemoryGtk.cpp:
        * Platform/gtk/WorkQueueGtk.cpp:
        * Platform/mac/MachUtilities.cpp:
        * Platform/mac/SharedMemoryMac.cpp:
        * Platform/mac/WorkQueueMac.cpp:
        * Platform/qt/MappedMemoryPool.cpp:
        * Platform/qt/ModuleQt.cpp:
        * Platform/qt/RunLoopQt.cpp:
        * Platform/qt/WorkQueueQt.cpp:
        * Platform/win/ModuleWin.cpp:
        * Platform/win/RunLoopWin.cpp:
        * Platform/win/SharedMemoryWin.cpp:
        * Platform/win/WorkQueueWin.cpp:
        * PluginProcess/PluginControllerProxy.cpp:
        * PluginProcess/PluginProcess.cpp:
        * PluginProcess/WebProcessConnection.cpp:
        * Scripts/webkit2/messages.py:
        * Shared/API/c/WKArray.cpp:
        * Shared/API/c/WKCertificateInfo.cpp:
        * Shared/API/c/WKContextMenuItem.cpp:
        * Shared/API/c/WKData.cpp:
        * Shared/API/c/WKDictionary.cpp:
        * Shared/API/c/WKError.cpp:
        * Shared/API/c/WKImage.cpp:
        * Shared/API/c/WKMutableArray.cpp:
        * Shared/API/c/WKMutableDictionary.cpp:
        * Shared/API/c/WKNumber.cpp:
        * Shared/API/c/WKSecurityOrigin.cpp:
        * Shared/API/c/WKSerializedScriptValue.cpp:
        * Shared/API/c/WKString.cpp:
        * Shared/API/c/WKType.cpp:
        * Shared/API/c/WKURL.cpp:
        * Shared/API/c/WKURLRequest.cpp:
        * Shared/API/c/WKURLResponse.cpp:
        * Shared/API/c/WKUserContentURLPattern.cpp:
        * Shared/API/c/cf/WKStringCF.cpp:
        * Shared/API/c/cf/WKURLCF.cpp:
        * Shared/API/c/cf/WKURLRequestCF.cpp:
        * Shared/API/c/cf/WKURLResponseCF.cpp:
        * Shared/API/c/cg/WKImageCG.cpp:
        * Shared/API/c/win/WKCertificateInfoWin.cpp:
        * Shared/ChildProcess.cpp:
        * Shared/ImmutableArray.cpp:
        * Shared/ImmutableDictionary.cpp:
        * Shared/MutableArray.cpp:
        * Shared/MutableDictionary.cpp:
        * Shared/OriginAndDatabases.cpp:
        * Shared/PlatformPopupMenuData.cpp:
        * Shared/Plugins/NPIdentifierData.cpp:
        * Shared/Plugins/NPObjectMessageReceiver.cpp:
        * Shared/Plugins/NPObjectProxy.cpp:
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        * Shared/Plugins/NPVariantData.cpp:
        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        * Shared/Plugins/Netscape/win/NetscapePluginModuleWin.cpp:
        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        * Shared/Plugins/PluginProcessCreationParameters.cpp:
        * Shared/PrintInfo.cpp:
        * Shared/SessionState.cpp:
        * Shared/ShareableBitmap.cpp:
        * Shared/UpdateInfo.cpp:
        * Shared/VisitedLinkTable.cpp:
        * Shared/WebBackForwardListItem.cpp:
        * Shared/WebContextMenuItem.cpp:
        * Shared/WebContextMenuItemData.cpp:
        * Shared/WebError.cpp:
        * Shared/WebEvent.cpp:
        * Shared/WebEventConversion.cpp:
        * Shared/WebGeolocationPosition.cpp:
        * Shared/WebImage.cpp:
        * Shared/WebKeyboardEvent.cpp:
        * Shared/WebMemorySampler.cpp:
        * Shared/WebMouseEvent.cpp:
        * Shared/WebOpenPanelParameters.cpp:
        * Shared/WebPageCreationParameters.cpp:
        * Shared/WebPageGroupData.cpp:
        * Shared/WebPlatformTouchPoint.cpp:
        * Shared/WebPopupItem.cpp:
        * Shared/WebPreferencesStore.cpp:
        * Shared/WebProcessCreationParameters.cpp:
        * Shared/WebTouchEvent.cpp:
        * Shared/WebURLRequest.cpp:
        * Shared/WebURLResponse.cpp:
        * Shared/WebWheelEvent.cpp:
        * Shared/cairo/ShareableBitmapCairo.cpp:
        * Shared/cf/ArgumentCodersCF.cpp:
        * Shared/cg/ShareableBitmapCG.cpp:
        * Shared/gtk/ShareableBitmapGtk.cpp:
        * Shared/gtk/WebCoreArgumentCodersGtk.cpp:
        * Shared/mac/CommandLineMac.cpp:
        * Shared/mac/UpdateChunk.cpp:
        * Shared/qt/CleanupHandler.cpp:
        * Shared/qt/NativeWebKeyboardEventQt.cpp:
        * Shared/qt/ShareableBitmapQt.cpp:
        * Shared/qt/UpdateChunk.cpp:
        * Shared/qt/WebCoreArgumentCodersQt.cpp:
        * Shared/qt/WebEventFactoryQt.cpp:
        * Shared/qt/WebURLRequestQt.cpp:
        * Shared/qt/WebURLResponseQt.cpp:
        * Shared/win/CommandLineWin.cpp:
        * Shared/win/NativeWebKeyboardEventWin.cpp:
        * Shared/win/PlatformCertificateInfo.cpp:
        * Shared/win/UpdateChunk.cpp:
        * Shared/win/WebCoreArgumentCodersWin.cpp:
        * Shared/win/WebEventFactory.cpp:
        * Shared/win/WebURLRequestWin.cpp:
        * Shared/win/WebURLResponseWin.cpp:
        * UIProcess/API/C/WKAuthenticationChallenge.cpp:
        * UIProcess/API/C/WKAuthenticationDecisionListener.cpp:
        * UIProcess/API/C/WKBackForwardList.cpp:
        * UIProcess/API/C/WKBackForwardListItem.cpp:
        * UIProcess/API/C/WKContext.cpp:
        * UIProcess/API/C/WKCredential.cpp:
        * UIProcess/API/C/WKDatabaseManager.cpp:
        * UIProcess/API/C/WKDownload.cpp:
        * UIProcess/API/C/WKFormSubmissionListener.cpp:
        * UIProcess/API/C/WKFrame.cpp:
        * UIProcess/API/C/WKFramePolicyListener.cpp:
        * UIProcess/API/C/WKGeolocationManager.cpp:
        * UIProcess/API/C/WKGeolocationPermissionRequest.cpp:
        * UIProcess/API/C/WKGeolocationPosition.cpp:
        * UIProcess/API/C/WKInspector.cpp:
        * UIProcess/API/C/WKNavigationData.cpp:
        * UIProcess/API/C/WKOpenPanelParameters.cpp:
        * UIProcess/API/C/WKOpenPanelResultListener.cpp:
        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/C/WKPageGroup.cpp:
        * UIProcess/API/C/WKPreferences.cpp:
        * UIProcess/API/C/WKProtectionSpace.cpp:
        * UIProcess/API/C/win/WKContextWin.cpp:
        * UIProcess/API/C/win/WKView.cpp:
        * UIProcess/API/C/win/WKViewPrivate.cpp:
        * UIProcess/API/cpp/qt/WKStringQt.cpp:
        * UIProcess/API/cpp/qt/WKURLQt.cpp:
        * UIProcess/API/qt/ClientImpl.cpp:
        * UIProcess/API/qt/qgraphicswkview.cpp:
        * UIProcess/API/qt/qwkcontext.cpp:
        * UIProcess/API/qt/qwkpage.cpp:
        * UIProcess/API/qt/qwkpreferences.cpp:
        * UIProcess/Authentication/AuthenticationChallengeProxy.cpp:
        * UIProcess/Authentication/AuthenticationDecisionListener.cpp:
        * UIProcess/Authentication/WebCredential.cpp:
        * UIProcess/Authentication/WebProtectionSpace.cpp:
        * UIProcess/BackingStore.cpp:
        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        * UIProcess/Downloads/DownloadProxy.cpp:
        * UIProcess/DrawingAreaProxy.cpp:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        * UIProcess/FindIndicator.cpp:
        * UIProcess/GeolocationPermissionRequestManagerProxy.cpp:
        * UIProcess/GeolocationPermissionRequestProxy.cpp:
        * UIProcess/Launcher/ProcessLauncher.cpp:
        * UIProcess/Launcher/ThreadLauncher.cpp:
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        * UIProcess/Launcher/gtk/ThreadLauncherGtk.cpp:
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        * UIProcess/Launcher/qt/ThreadLauncherQt.cpp:
        * UIProcess/Launcher/win/ProcessLauncherWin.cpp:
        * UIProcess/Launcher/win/ThreadLauncherWin.cpp:
        * UIProcess/LayerBackedDrawingAreaProxy.cpp:
        * UIProcess/Plugins/PluginInfoStore.cpp:
        * UIProcess/Plugins/PluginProcessManager.cpp:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        * UIProcess/Plugins/gtk/PluginInfoStoreGtk.cpp:
        * UIProcess/Plugins/qt/PluginInfoStoreQt.cpp:
        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        * UIProcess/ResponsivenessTimer.cpp:
        * UIProcess/TiledDrawingAreaProxy.cpp:
        * UIProcess/VisitedLinkProvider.cpp:
        * UIProcess/WebBackForwardList.cpp:
        * UIProcess/WebContext.cpp:
        * UIProcess/WebContextInjectedBundleClient.cpp:
        * UIProcess/WebContextMenuProxy.cpp:
        * UIProcess/WebDatabaseManagerProxy.cpp:
        * UIProcess/WebDatabaseManagerProxyClient.cpp:
        * UIProcess/WebDownloadClient.cpp:
        * UIProcess/WebEditCommandProxy.cpp:
        * UIProcess/WebFindClient.cpp:
        * UIProcess/WebFormClient.cpp:
        * UIProcess/WebFormSubmissionListenerProxy.cpp:
        * UIProcess/WebFrameListenerProxy.cpp:
        * UIProcess/WebFramePolicyListenerProxy.cpp:
        * UIProcess/WebFrameProxy.cpp:
        * UIProcess/WebGeolocationManagerProxy.cpp:
        * UIProcess/WebGeolocationProvider.cpp:
        * UIProcess/WebHistoryClient.cpp:
        * UIProcess/WebInspectorProxy.cpp:
        * UIProcess/WebLoaderClient.cpp:
        * UIProcess/WebNavigationData.cpp:
        * UIProcess/WebOpenPanelResultListenerProxy.cpp:
        * UIProcess/WebPageContextMenuClient.cpp:
        * UIProcess/WebPageGroup.cpp:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPolicyClient.cpp:
        * UIProcess/WebPreferences.cpp:
        * UIProcess/WebProcessManager.cpp:
        * UIProcess/WebProcessProxy.cpp:
        * UIProcess/WebResourceLoadClient.cpp:
        * UIProcess/WebUIClient.cpp:
        * UIProcess/cf/WebBackForwardListCF.cpp:
        * UIProcess/cf/WebPageProxyCF.cpp:
        * UIProcess/cf/WebPreferencesCF.cpp:
        * UIProcess/gtk/TextCheckerGtk.cpp:
        * UIProcess/gtk/WebInspectorGtk.cpp:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        * UIProcess/gtk/WebPreferencesGtk.cpp:
        * UIProcess/qt/ChunkedUpdateDrawingAreaProxyQt.cpp:
        * UIProcess/qt/TextCheckerQt.cpp:
        * UIProcess/qt/TiledDrawingAreaProxyQt.cpp:
        * UIProcess/qt/TiledDrawingAreaTileQt.cpp:
        * UIProcess/qt/WebContextMenuProxyQt.cpp:
        * UIProcess/qt/WebContextQt.cpp:
        * UIProcess/qt/WebInspectorProxyQt.cpp:
        * UIProcess/qt/WebPageProxyQt.cpp:
        * UIProcess/qt/WebPopupMenuProxyQt.cpp:
        * UIProcess/qt/WebPreferencesQt.cpp:
        * UIProcess/win/ChunkedUpdateDrawingAreaProxyWin.cpp:
        * UIProcess/win/LayerBackedDrawingAreaProxyWin.cpp:
        * UIProcess/win/TextCheckerWin.cpp:
        * UIProcess/win/WebContextMenuProxyWin.cpp:
        * UIProcess/win/WebContextWin.cpp:
        * UIProcess/win/WebInspectorProxyWin.cpp:
        * UIProcess/win/WebPageProxyWin.cpp:
        * UIProcess/win/WebPopupMenuProxyWin.cpp:
        * UIProcess/win/WebView.cpp:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Authentication/AuthenticationManager.cpp:
        * WebProcess/Downloads/Download.cpp:
        * WebProcess/Downloads/DownloadManager.cpp:
        * WebProcess/Downloads/cf/DownloadCFNet.cpp:
        * WebProcess/Downloads/curl/DownloadCurl.cpp:
        * WebProcess/Downloads/qt/DownloadQt.cpp:
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        * WebProcess/Geolocation/WebGeolocationManager.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleBackForwardList.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleBackForwardListItem.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePageGroup.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleRangeHandle.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.cpp:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/InjectedBundle/InjectedBundleBackForwardList.cpp:
        * WebProcess/InjectedBundle/InjectedBundleBackForwardListItem.cpp:
        * WebProcess/InjectedBundle/InjectedBundleClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp:
        * WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp:
        * WebProcess/InjectedBundle/qt/InjectedBundleQt.cpp:
        * WebProcess/InjectedBundle/win/InjectedBundleWin.cpp:
        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        * WebProcess/Plugins/Netscape/NPRuntimeUtilities.cpp:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        * WebProcess/Plugins/Netscape/gtk/NetscapePluginGtk.cpp:
        * WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp:
        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        * WebProcess/Plugins/Plugin.cpp:
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        * WebProcess/Plugins/PluginProxy.cpp:
        * WebProcess/Plugins/PluginView.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/WebGeolocationClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp:
        * WebProcess/WebCoreSupport/gtk/WebContextMenuClientGtk.cpp:
        * WebProcess/WebCoreSupport/gtk/WebPopupMenuGtk.cpp:
        * WebProcess/WebCoreSupport/qt/WebContextMenuClientQt.cpp:
        * WebProcess/WebCoreSupport/qt/WebErrorsQt.cpp:
        * WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.cpp:
        * WebProcess/WebCoreSupport/qt/WebPopupMenuQt.cpp:
        * WebProcess/WebCoreSupport/win/WebContextMenuClientWin.cpp:
        * WebProcess/WebCoreSupport/win/WebErrorsWin.cpp:
        * WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp:
        * WebProcess/WebKitMain.cpp:
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
        * WebProcess/WebPage/DecoderAdapter.cpp:
        * WebProcess/WebPage/DrawingArea.cpp:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        * WebProcess/WebPage/EncoderAdapter.cpp:
        * WebProcess/WebPage/FindController.cpp:
        * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
        * WebProcess/WebPage/PageOverlay.cpp:
        * WebProcess/WebPage/TiledDrawingArea.cpp:
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        * WebProcess/WebPage/WebContextMenu.cpp:
        * WebProcess/WebPage/WebEditCommand.cpp:
        * WebProcess/WebPage/WebFrame.cpp:
        * WebProcess/WebPage/WebInspector.cpp:
        * WebProcess/WebPage/WebOpenPanelResultListener.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        * WebProcess/WebPage/gtk/WebInspectorGtk.cpp:
        * WebProcess/WebPage/mac/ChunkedUpdateDrawingAreaMac.cpp:
        * WebProcess/WebPage/qt/ChunkedUpdateDrawingAreaQt.cpp:
        * WebProcess/WebPage/qt/TiledDrawingAreaQt.cpp:
        * WebProcess/WebPage/qt/WebInspectorQt.cpp:
        * WebProcess/WebPage/qt/WebPageQt.cpp:
        * WebProcess/WebPage/win/ChunkedUpdateDrawingAreaWin.cpp:
        * WebProcess/WebPage/win/LayerBackedDrawingAreaWin.cpp:
        * WebProcess/WebPage/win/WebInspectorWin.cpp:
        * WebProcess/WebPage/win/WebPageWin.cpp:
        * WebProcess/WebProcess.cpp:
        * WebProcess/gtk/WebProcessGtk.cpp:
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        * WebProcess/qt/WebProcessMainQt.cpp:
        * WebProcess/qt/WebProcessQt.cpp:
        * WebProcess/win/WebProcessMainWin.cpp:
        * WebProcess/win/WebProcessWin.cpp:
        * config.h: Copied from Source/WebKit2/WebKit2Prefix.h.
        * win/WebKit2Common.vsprops:

2011-01-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        execCommand("Paste") doesn't work in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=52785
        
        Thread through the new JavaScriptCanAccessClipboard setting.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetJavaScriptCanAccessClipboard):
        (WKPreferencesGetJavaScriptCanAccessClipboard):
        * UIProcess/API/C/WKPreferences.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2011-01-27  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Use Document::url() instead of FrameLoader::url().
        https://bugs.webkit.org/show_bug.cgi?id=41165

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidChangeLocationWithinPage):
        (WebKit::WebFrameLoaderClient::dispatchDidPushStateWithinPage):
        (WebKit::WebFrameLoaderClient::dispatchDidReplaceStateWithinPage):
        (WebKit::WebFrameLoaderClient::dispatchDidPopStateWithinPage):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::url):

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

        Reviewed by Anders Carlsson.

        Encode/Decode hasPreciseScrollingDeltas bit in WebWheelEvent
        https://bugs.webkit.org/show_bug.cgi?id=53254

        * Shared/WebWheelEvent.cpp:
        (WebKit::WebWheelEvent::WebWheelEvent):
        Initialize m_phase and m_hasPreciseScrollingDeltas.

        (WebKit::WebWheelEvent::encode):
        (WebKit::WebWheelEvent::decode):
        Add missing coding for m_hasPreciseScrollingDeltas.

2011-01-26  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler and Adam Roben.

        WebKit2: add support for drag and drop on Windows
        https://bugs.webkit.org/show_bug.cgi?id=52775
        <rdar://problem/8514409>

        On Windows the access to the content being dragged is
        provided via the IDataObject interface that is made available
        to the window that registers itself as drop target.
        Since this interface cannot be accessed from the WebProcess,
        in every call to one of the methods of the IDropTarget interface
        we serialize the content of the drag clipboard and send it over to
        the WebProcess. The implementation uses the same messages as the
        Mac one, with slightly different parameters to pass the serialized
        clipboard.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::performDragControllerAction): Added Windows
        specific implementation.
        * UIProcess/WebPageProxy.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView): Added dropTargetHelper object creation.
        (WebKit::WebView::initialize): Added to register for drag/drop with out
        refcount issues.
        (WebKit::WebView::close):
        (WebKit::WebView::windowReceivedMessage):
        (WebKit::WebView::QueryInterface):
        (WebKit::WebView::AddRef):
        (WebKit::WebView::Release):
        (WebKit::dragOperationToDragCursor):
        (WebKit::WebView::keyStateToDragOperation):
        (WebKit::WebView::DragEnter):
        (WebKit::WebView::DragOver):
        (WebKit::WebView::DragLeave):
        (WebKit::WebView::Drop):
        * UIProcess/win/WebView.h:
        (WebKit::WebView::create):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performDragControllerAction):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2011-01-26  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=53197
        <rdar://problem/8895682> Make WebKit2 printing asynchronous

        <rdar://problem/8899988> REGRESSION(WebKit2): Attempting to print WHATWG HTML spec shows
        1-page blank preview

        <rdar://problem/8900078> WebKit2 printing has a separate message exchange per page when
        printing instead of printing all at once

        * UIProcess/API/mac/WKPrintingView.h: Store a lot more cached information.

        * UIProcess/API/mac/WKPrintingView.mm:
        (-[WKPrintingView _adjustPrintingMarginsForHeaderAndFooter]): Use PrintOperation stored in
        class. We generally want that now, because current operation will not be set up on other threads.
        (-[WKPrintingView _isPrintingPreview]): Added. Preview is different, because it can draw
        a placeholder - but actual printing need to wait until UI process has data.
        (-[WKPrintingView _updatePreview]): Force AppKit to update print preview when we have real
        data to replace placeholder with.
        (-[WKPrintingView _hasPageRects]): Return if page rects have already been computed.
        (-[WKPrintingView _expectedPreviewCallbackForRect:]): Find an existing request for this rect,
        if any.
        (pageDidDrawToPDF): Update preview - or if actually printing, release control to printing thread.
        (-[WKPrintingView _preparePDFDataForPrintingOnSecondaryThread]): Ask for a PDF document with
        pages the user asked to print.
        (pageDidComputePageRects): When web process returns page geometry data, we update preview to display
        a page count (which indirectly triggers a request for a preview). When actually printing,
        request a PDF right away, we'll need it later.
        (-[WKPrintingView _askPageToComputePageRects]): Ask web process for page geometry.
        (prepareDataForPrintingOnSecondaryThread): This function starts preparing all data necessary
        for actual printing on main thread.
        (-[WKPrintingView knowsPageRange:]): Changed to be async for preview, and to call main
        thread for actual printing.
        (-[WKPrintingView _pageForRect:]): Find page number for a given range, assuming that AppKit
        always asks for full pages.
        (-[WKPrintingView _drawPDFDocument:page:atPoint:]): A helper function to draw a PDF document.
        (-[WKPrintingView _drawPreview:]): Draw the whole page for preview.
        (-[WKPrintingView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]):
        Draw the whole page for actual printing.
        (-[WKPrintingView _drawPageBorderWithSizeOnMainThread:]): Call drawPageBorderWithSize: with
        correct graphics context and print operation.
        (-[WKPrintingView drawPageBorderWithSize:]): Delegate work to main thread when called from a
        secondary one.
        (-[WKPrintingView _provideTotalScaleFactorForPrintOperation:]): Added an assertion that
        our stored NSPrintOperation isn't out of sync with reality.
        (-[WKPrintingView rectForPage:]): Handle the case where we don't have the data yet, drawing
        a placeholder.
        (-[WKPrintingView endDocument]): When page setup changes, we must reset all state.

        * UIProcess/API/mac/WKView.mm: (-[WKView printOperationWithPrintInfo:forFrame:]): Tell
        NSPrintingView which operation it's serving, so that it knows it even when current operation
        isn't set.

        * UIProcess/GenericCallback.h:
        (WebKit::ComputedPagesCallback::create):
        (WebKit::ComputedPagesCallback::~ComputedPagesCallback):
        (WebKit::ComputedPagesCallback::performCallbackWithReturnValue):
        (WebKit::ComputedPagesCallback::invalidate):
        (WebKit::ComputedPagesCallback::callbackID):
        (WebKit::ComputedPagesCallback::generateCallbackID):
        (WebKit::ComputedPagesCallback::ComputedPagesCallback):
        Added ComputedPagesCallback, which returns a vector of IntRects and a double. Hopefully,
        it will become a specialization of GenericCallback one day.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close): Added m_voidCallbacks - it looks like they were omitted
        by accident.
        (WebKit::WebPageProxy::computedPagesCallback): Added.
        (WebKit::WebPageProxy::processDidCrash): Added m_computedPagesCallbacks.
        (WebKit::WebPageProxy::computePagesForPrinting): Async now!
        (WebKit::WebPageProxy::drawRectToPDF): Ditto.
        (WebKit::WebPageProxy::drawPagesToPDF): Added.
        * UIProcess/WebPageProxy.h:

        * UIProcess/WebPageProxy.messages.in: Added ComputedPagesCallback.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::beginPriting): Compute page rects right away - we'll need them in
        drawPagesToPDF(), which doesn't have a PrintInfo.
        (WebKit::WebPage::computePagesForPrinting): Send async response.
        (WebKit::WebPage::drawRectToPDF): This function used to draw into original
        location at frame coordinates, and now it draws at (0, 0).
        (WebKit::WebPage::drawPagesToPDF): Added - make a multi-page PDF.
        * WebProcess/WebPage/WebPage.h:

        * WebProcess/WebPage/WebPage.messages.in: Added DrawPagesToPDF.

2011-01-27  Alejandro G. Castro  <alex@igalia.com>

        Unreviewed GTK build fix after r76797.

        * Shared/WebPreferencesStore.h: Use Qt fonts preference for the moment.

2011-01-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Allow pop-up menus to contain multiple items that have the same title.

        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::populate): Set the item’s title after adding it rather than
        when adding it, so that it will not replace any existing item with the same title.

2011-01-27  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Add QWKPage APIs regarding engine process availability
        https://bugs.webkit.org/show_bug.cgi?id=53237

        QWKPage will now emit engineConnected() and engineDisconnected()
        when the web process crashes and is relaunched respectively.

        Also added QWKPage::isConnectedToEngine() for convenience.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::QWKPagePrivate):
        (QWKPagePrivate::didRelaunchProcess):
        (QWKPagePrivate::processDidCrash):
        (QWKPage::isConnectedToEngine):
        * UIProcess/API/qt/qwkpage.h:
        * UIProcess/API/qt/qwkpage_p.h:

2011-01-27  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] Lots of layout test failures due to wrong font type
        https://bugs.webkit.org/show_bug.cgi?id=53233

        * Shared/WebPreferencesStore.h:
        Specialize default font families for Qt.

2011-01-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        WebKitTestRunner needs to support layoutTestController.evaluateInWebInspector
        https://bugs.webkit.org/show_bug.cgi?id=42319

        Add WKBundleInspector and APIs needed to implement WebKitTestRunner APIs.
        
        * GNUmakefile.am:
        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        * WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp: Added.
        (WKBundleInspectorGetTypeID):
        (WKBundleInspectorShow):
        (WKBundleInspectorClose):
        (WKBundleInspectorEvaluateScriptForTest):
        (WKBundleInspectorSetPageProfilingEnabled):
        * WebProcess/InjectedBundle/API/c/WKBundleInspector.h: Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageGetInspector):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::create):
        (WebKit::WebInspector::evaluateScriptForTest):
        * WebProcess/WebPage/WebInspector.h:
        (WebKit::WebInspector::type):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::inspector):
        * WebProcess/WebPage/WebPage.h:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:

2011-01-26  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/53192> Add experimental support for HTTP pipelining in CFNetwork
        <rdar://problem/8821760>

        Reviewed by Antti Koivisto.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Added initialization for
        GetHTTPPipeliningPriority and SetHTTPPipeliningPriority.

2011-01-26  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/8895140> Adopt WKScrollbar metrics 
        when using WKScrollbars.

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

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

        Reviewed by Maciej Stachowiak.

        Add events to represent the start/end of a gesture scroll
        https://bugs.webkit.org/show_bug.cgi?id=53215

        * Scripts/webkit2/messages.py:
        * Shared/WebEvent.h:
        (WebKit::WebGestureEvent::WebGestureEvent):
        (WebKit::WebGestureEvent::position):
        (WebKit::WebGestureEvent::globalPosition):
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformGestureEvent::WebKit2PlatformGestureEvent):
        (WebKit::platform):
        * Shared/WebEventConversion.h:
        * Shared/WebGestureEvent.cpp: Added.
        (WebKit::WebGestureEvent::WebGestureEvent):
        (WebKit::WebGestureEvent::encode):
        (WebKit::WebGestureEvent::decode):
        (WebKit::WebGestureEvent::isGestureEventType):
        * Shared/mac/WebEventFactory.h:
        * Shared/mac/WebEventFactory.mm:
        (WebKit::gestureEventTypeForEvent):
        (WebKit::WebEventFactory::createWebGestureEvent):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView shortCircuitedEndGestureWithEvent:]):
        (-[WKView beginGestureWithEvent:]):
        (-[WKView viewDidMoveToWindow]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleGestureEvent):
        (WebKit::WebPageProxy::didReceiveEvent):
        * UIProcess/WebPageProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::handleGestureEvent):
        (WebKit::WebPage::gestureEvent):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Pipe gesture events down to WebCore.

2011-01-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/8446709> Allow inter-ideograph justification for CJK
        https://bugs.webkit.org/show_bug.cgi?id=53184

        * WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp:
        (WebKit::WebPopupMenu::setUpPlatformData): Added a TrailingExpansionBehavior parameter to the
        RenderText constructor.

2011-01-26  Jing Jin  <jjin@apple.com>

        Reviewed by Darin Adler.

        Methods to temporarily disable size updates to the page drawing area in WKView.
        https://bugs.webkit.org/show_bug.cgi?id=53206
        Part of <rdar://problem/8818585>

        * UIProcess/API/mac/WKView.h: Added _frameSizeUpdateDisabledCount.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView setFrameSize:]): Only update page size if frame size updates are enabled.
        (-[WKView _setDrawingAreaSize:]): Helper method to set the page's drawing area's size.
        (-[WKView disableFrameSizeUpdates]): Increment _frameSizeUpdateDisabledCount
        (-[WKView enableFrameSizeUpdates]): Decrement _frameSizeUpdateDisabledCount, and if the count is 0, meaning
        that no one is disabling frame size updates anymore, update the drawing area's size to match the current frame.
        (-[WKView frameSizeUpdatesDisabled]): Returns YES if at least one caller is disabling frame size updates.
        * UIProcess/API/mac/WKViewInternal.h: Declared -disableFrameSizeUpdates, -enableFrameSizeUpdates, and -frameSizeUpdatesDisabled.
        * UIProcess/API/mac/WKViewPrivate.h: Added.
        * WebKit2.xcodeproj/project.pbxproj: Added WKViewPrivate.h

2011-01-26  Jing Jin  <jjin@apple.com>

        Rubber-stamped by Dan Bernstein.
        
        Several WKView Internal category methods are implemented in the main category.
        https://bugs.webkit.org/show_bug.cgi?id=53195

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setEventBeingResent:]): Moved into implementation of WKView (Internal).
        (-[WKView _interceptKeyEvent:]): Moved into implementation of WKView (Internal).
        (-[WKView _getTextInputState:selectionEnd:underlines:WebCore::]): Moved into implementation of WKView (Internal).
        (-[WKView _setAccessibilityChildToken:]): Moved into implementation of WKView (Internal).

2011-01-26  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by John Sullivan.

        WebKit2: Need API to get the frame load state of a BundleFrame
        https://bugs.webkit.org/show_bug.cgi?id=53193

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameGetFrameLoadState): Call through to the FrameLoader to get the frame load state.
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:

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

        Reviewed by Antti Koivisto.

        Crashes loading pages when cancelling subresource loads through WebKit
        https://bugs.webkit.org/show_bug.cgi?id=53123
        <rdar://problem/8914361>

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForMIMEType): If our URL is null, return early instead of dispatching
            a message.

2011-01-25  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        WK2 leaks when a page is closed
        https://bugs.webkit.org/show_bug.cgi?id=53100

        Allow the WKView a chance to clean up on a page close. In this case,
        cleaning up means removing the references the accessibility token has
        to the window.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::pageClosed):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setRemoteAccessibilityWindow:]):
        (-[WKView _setAccessibilityChildToken:]):
        (-[WKView _processDidCrash]):
        (-[WKView _pageClosed]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/API/qt/qwkpage_p.h:
        (QWKPagePrivate::pageClosed):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::pageClosed):
        * UIProcess/win/WebView.h:

2011-01-25  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Adam Roben.

        Expose WebGL flag set/get in WK2
        https://bugs.webkit.org/show_bug.cgi?id=53096

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetWebGLEnabled):
        (WKPreferencesGetWebGLEnabled):
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2011-01-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Add and implement LayerTreeHost::scheduleLayerFlush
        https://bugs.webkit.org/show_bug.cgi?id=53135

        * WebKit2.xcodeproj/project.pbxproj:
        Add LayerTreeHostMac.mm.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::scheduleCompositingLayerSync):
        Call LayerTreeHost::scheduleLayerFlush.

        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::~LayerTreeHost):
        Call platformInvalidate().

        (WebKit::LayerTreeHost::flushPendingLayerChanges):
        Rename from syncCompositingLayers.

        * WebProcess/WebPage/mac/LayerTreeHostMac.mm: Added.
        (WebKit::LayerTreeHost::scheduleLayerFlush):
        Create a run loop observer if needed. This code is copied from LayerBackedDrawingAreaMac.mm

        (WebKit::LayerTreeHost::platformInvalidate):
        Invalidate the run loop observer.

        (WebKit::LayerTreeHost::flushPendingLayerChangesRunLoopObserverCallback):
        Call flushPendingChanges() and remove the run loop observer if it succeeded.

2011-01-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Simon Fraser.

        Add LayerTreeHost class
        https://bugs.webkit.org/show_bug.cgi?id=53132

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

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        Initialize m_layerTreeHost.

        (WebKit::DrawingAreaImpl::setRootCompositingLayer):
        Call the m_layerTreeHost.

        * WebProcess/WebPage/LayerTreeHost.cpp: Added.
        (WebKit::LayerTreeHost::attachRootCompositingLayer):
        (WebKit::LayerTreeHost::detachRootCompositingLayer):
        Add stubbed out functions.

        (WebKit::LayerTreeHost::syncCompositingLayers):
        Sync the compositing layers in the main frame.

        * WebProcess/WebPage/LayerTreeHost.h: Added.

2011-01-25  Steve Falkenburg  <sfalken@apple.com>

        Rubber-stamped by Adam Roben.

        Windows production build fix.
        Use correct environment variable escaping

        * win/WebKit2.make:
        * win/WebKit2Generated.make:

2011-01-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Don't inform the UI process about compositing changes when using the new drawing area
        https://bugs.webkit.org/show_bug.cgi?id=53120

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::changeAcceleratedCompositingMode):
        Return early if we're using the new drawing area.

        (WebKit::WebPage::exitAcceleratedCompositingMode):
        Call setRootCompositingLayer(0) so the drawing area knows when we leave accelerated compositing.

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

        Reviewed by Anders Carlsson.

        Pipe a timestamp down into the PlatformWheelEvent for the Mac.
        https://bugs.webkit.org/show_bug.cgi?id=53111

        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformWheelEvent::WebKit2PlatformWheelEvent):
        Assign the timestamp.

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

        Reviewed by Anders Carlsson.

        Add hasPreciseScrollingDeltas bit to PlatformWheelEvent on the Mac.
        https://bugs.webkit.org/show_bug.cgi?id=53107

        * Shared/WebEvent.h:
        (WebKit::WebWheelEvent::hasPreciseScrollingDeltas):
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformWheelEvent::WebKit2PlatformWheelEvent):
        * Shared/WebWheelEvent.cpp:
        (WebKit::WebWheelEvent::WebWheelEvent):
        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::createWebWheelEvent):

2011-01-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        need a way to request the host CALayer render server port
        https://bugs.webkit.org/show_bug.cgi?id=53101
        <rdar://problem/8913620>

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::compositingRenderServerPort):
        Get the render server port from the plug-in process.

        * PluginProcess/PluginControllerProxy.h:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue):
        Call NetscapePlugin::compositingRenderServerPort.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::compositingRenderServerPort):
        Call PluginController::compositingRenderServerPort.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::compositingRenderServerPort):
        Get the render server port from the web process.

        * WebProcess/Plugins/PluginView.h:
        Add compositingRenderServerPort.

2011-01-25  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Dan Bernstein.

        Change some floating point constants from 1.0 to 1.

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

2011-01-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders Carlsson.

        Improve scale factor resetting
        https://bugs.webkit.org/show_bug.cgi?id=53093
        
        Two key changes:
        - Don't set the scale factor to what it already is, as this causes an
        uneeded force layout and scroll
        - Don't ever set the scale factor based on a non-main frame committing
        
        This fixes two WebKit2 layout tests.

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

2011-01-24  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Eric Seidel.

        Change ENABLE_3D_CANVAS to ENABLE_WEBGL
        https://bugs.webkit.org/show_bug.cgi?id=53041

        * Configurations/FeatureDefines.xcconfig:

2011-01-25  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Add QWKPage::processCrashed() signal
        https://bugs.webkit.org/show_bug.cgi?id=53076

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::processDidCrash):
        * UIProcess/API/qt/qwkpage.h:
        * UIProcess/API/qt/qwkpage_p.h:

2011-01-24  Anders Carlsson  <andersca@apple.com>

        Fix build.
        
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::initializeSandbox):

2011-01-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Reset the page scale factor on standard frame loads
        https://bugs.webkit.org/show_bug.cgi?id=53058
        <rdar://problem/8908844>

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::scaleWebView):
        Don't set m_viewScaleFactor here. It will be set in viewScaleFactorDidChange.

        (WebKit::WebPageProxy::viewScaleFactorDidChange):
        Update m_viewScaleFactor.

        * UIProcess/WebPageProxy.h:
        Add viewScaleFactorDidChange.

        * UIProcess/WebPageProxy.messages.in:
        Add ViewScaleFactorDidChange message.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
        Set the scale factor.

        (WebKit::WebFrameLoaderClient::restoreViewState):
        Inform the UI process about the new view scale factor.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scaleWebView):
        Send a ViewScaleFactorDidChange message.

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

        Reviewed by Anders Carlsson.

        Use designated temp directory for the database for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=53052
        
        Add the API necessary to support this. Database path is now
        determined on the UI process side and passed to the Web process.
        Reviewed by Anders Carlsson.

        * GNUmakefile.am:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetDatabaseDirectory):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureWebProcess):
        (WebKit::WebContext::databaseDirectory):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::setDatabaseDirectory):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformDefaultDatabaseDirectory):
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::platformDefaultDatabaseDirectory):
        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformDefaultDatabaseDirectory):
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        (WebKit::WebDatabaseManager::initialize):
        (WebKit::WebDatabaseManager::WebDatabaseManager):
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:
        * WebProcess/WebCoreSupport/gtk/WebDatabaseManagerGtk.cpp: Removed.
        * WebProcess/WebCoreSupport/mac/WebDatabaseManagerMac.mm: Removed.
        * WebProcess/WebCoreSupport/qt/WebDatabaseManagerQt.cpp: Removed.
        * WebProcess/WebCoreSupport/win/WebDatabaseManagerWin.cpp: Removed.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/com.apple.WebProcess.sb:
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::initializeSandbox):
        * win/WebKit2.vcproj:

2011-01-24  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix.

        * win/WebKit2.vcproj: Don't build the CG Utilities when building
        without CG support.

2011-01-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Don't use the timeout checker for non-user-interaction messages
        https://bugs.webkit.org/show_bug.cgi?id=53046

        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::didSetSize):
        (WebKit::ChunkedUpdateDrawingAreaProxy::sendSetSize):
        * UIProcess/LayerBackedDrawingAreaProxy.cpp:
        (WebKit::LayerBackedDrawingAreaProxy::sizeDidChange):
        (WebKit::LayerBackedDrawingAreaProxy::didSetSize):

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

        Windows Production build fix

        * win/WebKit2.make: Update for move of WebKit2 into Source.

2011-01-24  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        WebKit2: LayoutTests: The UNIMPLEMENTED warnings in TextCheckerWin should be disabled
        https://bugs.webkit.org/show_bug.cgi?id=53029

        * UIProcess/win/TextCheckerWin.cpp:
        Disable the warnings for this file.

2011-01-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Wait for half a second if we're asked to paint when receiving a DidSetSize message
        https://bugs.webkit.org/show_bug.cgi?id=53028

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::paint):

2011-01-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement forceRedisplay in the new drawing area
        https://bugs.webkit.org/show_bug.cgi?id=53026

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

2011-01-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Fill unpainted rects with the background color.
        https://bugs.webkit.org/show_bug.cgi?id=53025

        * UIProcess/API/mac/WKView.mm:
        (drawPageBackground):
        Add new helper function.

        (-[WKView drawRect:]):
        Iterate over the unpainted rects and fill them with the background color.

2011-01-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        WebKit2 version of <rdar://problem/6097826> Mail's cursor does not become a resize cursor when moving mouse from scrolled email to the horizontal splitter

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setCursor): If the current cursor comes from a cursor rect, do not override it.

2011-01-24  Balazs Kelemen  <kbalazs@webkit.org>

        Rubber-stamped by Csaba Osztrogonác.

        Typo fix.

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::ProcessLauncher::launchProcess): Move the bracket to the right place.

2011-01-24  Kimmo Kinnunen  <kimmo.t.kinnunen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove CleanupHandler by passing file descriptors.

        Deleting files in signal handler of UI process is not a good idea,
        because the memory where filenames are stored might not be valid
        after a crash.

        To avoid the need of using signal handlers for cleanup,
        change following:
          1) Avoid passing filenames between processes, pass fds
          2) When mmap'ing files, delete them immediately after
             opening and mmap'ing them.
          3) Pass sockets with fds during fork+exec instead of
             passing them via the filesystem.
          4) Use mmap'ed files for implementation of SharedMemory.
             QSharedMemory does not support cleanup correctly.

        Consquences:
          - Move MappedMemory to SharedMemory, make UpdateChunk use this.
          - Implement CoreIPC::Attachment using mmaped files.
          - Send messages using datagram socket. This solution works
            similiarly to Mach ports on Mac.
          - Send big messages out-of-line and thus avoid increasing
            the receive buffer.
          - Remove MemoryMappedPool and rely on libc/kernel caching
            of mmapped areas.
          - Unmap memory areas after use.
          - When UI process crashes, kill the web process using SIGKILL.
            This is possible again because cleanup handler is not needed.

        [WK2][Qt] Multiple problems with MemoryMappedPool
        https://bugs.webkit.org/show_bug.cgi?id=51984

        * Platform/CoreIPC/Attachment.cpp:
        (CoreIPC::Attachment::Attachment):
        * Platform/CoreIPC/Attachment.h:
        (CoreIPC::Attachment::size):
        (CoreIPC::Attachment::releaseFileDescriptor):
        (CoreIPC::Attachment::fileDescriptor):
        * Platform/CoreIPC/Connection.h:
        * Platform/CoreIPC/qt/ConnectionQt.cpp:
        (CoreIPC::MessageInfo::MessageInfo):
        (CoreIPC::MessageInfo::setMessageBodyOOL):
        (CoreIPC::MessageInfo::isMessageBodyOOL):
        (CoreIPC::MessageInfo::bodySize):
        (CoreIPC::MessageInfo::messageID):
        (CoreIPC::MessageInfo::attachmentCount):
        (CoreIPC::Connection::platformInitialize):
        (CoreIPC::Connection::platformInvalidate):
        (CoreIPC::SocketNotifierDisableGuard::SocketNotifierDisableGuard):
        (CoreIPC::SocketNotifierDisableGuard::~SocketNotifierDisableGuard):
        (CoreIPC::Connection::readyReadHandler):
        (CoreIPC::Connection::open):
        (CoreIPC::Connection::platformCanSendOutgoingMessages):
        (CoreIPC::Connection::sendOutgoingMessage):
        * Platform/SharedMemory.h:
        * Platform/WorkQueue.h:
        * Platform/qt/MappedMemoryPool.cpp: Removed.
        * Platform/qt/MappedMemoryPool.h: Removed.
        * Platform/qt/SharedMemoryQt.cpp:
        (WebKit::SharedMemory::Handle::Handle):
        (WebKit::SharedMemory::Handle::~Handle):
        (WebKit::SharedMemory::Handle::isNull):
        (WebKit::SharedMemory::Handle::encode):
        (WebKit::SharedMemory::Handle::decode):
        (WebKit::SharedMemory::Handle::releaseToAttachment):
        (WebKit::SharedMemory::Handle::adoptFromAttachment):
        (WebKit::SharedMemory::create):
        (WebKit::accessModeMMap):
        (WebKit::SharedMemory::~SharedMemory):
        (WebKit::accessModeFile):
        (WebKit::SharedMemory::createHandle):
        * Platform/qt/WorkQueueQt.cpp:
        (WorkQueue::registerSocketEventHandler):
        * Shared/qt/UpdateChunk.cpp:
        (WebKit::UpdateChunk::UpdateChunk):
        (WebKit::UpdateChunk::~UpdateChunk):
        (WebKit::UpdateChunk::encode):
        (WebKit::UpdateChunk::decode):
        (WebKit::UpdateChunk::createImage):
        * Shared/qt/UpdateChunk.h:
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::QtWebProcess::QtWebProcess):
        (WebKit::QtWebProcess::setupChildProcess):
        (WebKit::ProcessLauncher::launchProcess):
        (WebKit::ProcessLauncher::platformInvalidate):
        * UIProcess/Launcher/qt/ThreadLauncherQt.cpp:
        (WebKit::webThreadBody):
        (WebKit::ThreadLauncher::createWebThread):
        * WebKit2.pro:
        * WebProcess/qt/WebProcessMainQt.cpp:
        (WebKit::WebProcessMainQt):

2011-01-24  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Move project files into Source
        https://bugs.webkit.org/show_bug.cgi?id=52891

        * DerivedSources.pro:
        * WebKit2.pro:
        * WebProcess.pro:

2011-01-23  Damian Kaleta  <dkaleta@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/8905171>
        https://bugs.webkit.org/show_bug.cgi?id=52985 

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::scaleWebView): Eliminated early return inside WebPageProxy::scaleWebView, making it 
        consistent with WebKit1.

2011-01-23  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=52968
        Use a separate NSView for printing

        Also addresses <rdar://problem/8900148> Improper check for 
        -[NSGraphicsContext currentContextDrawingToScreen]

        * UIProcess/API/mac/WKPrintingView.h: Added.
        * UIProcess/API/mac/WKPrintingView.mm: Added.
        (-[WKPrintingView initWithFrameProxy:]):
        (-[WKPrintingView isFlipped]):
        (-[WKPrintingView _adjustPrintingMarginsForHeaderAndFooter]):
        (-[WKPrintingView knowsPageRange:]):
        (-[WKPrintingView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]):
        (-[WKPrintingView drawPageBorderWithSize:]):
        (-[WKPrintingView _provideTotalScaleFactorForPrintOperation:]):
        (-[WKPrintingView rectForPage:]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView drawRect:]):
        (-[WKView canChangeFrameLayout:]):
        (-[WKView printOperationWithPrintInfo:forFrame:]):
        * WebKit2.xcodeproj/project.pbxproj:
        Moved printing code to a separate view, simplifying as appropriate. The view is currently not
        referenced by anything in WebKit2 directly, being owned by NSPrintOperation.

2011-01-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Transparent windows with compositing WebKit2 content show garbage
        https://bugs.webkit.org/show_bug.cgi?id=52966
        <rdar://problem/8765051>

        * UIProcess/mac/LayerBackedDrawingAreaProxyMac.mm:
        (WebKit::LayerBackedDrawingAreaProxy::paint):
        If the WKView should draw transparent background, do so.

2011-01-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add an asynchronous WKPageForceRepaint
        https://bugs.webkit.org/show_bug.cgi?id=52964
        <rdar://problem/8898527>

        * UIProcess/API/C/WKPage.cpp:
        (WKPageForceRepaint):
        Call WebPageProxy::forceRepaint.

        * UIProcess/API/C/WKPage.h:
        Add WKPageForceRepaint.

        * UIProcess/GenericCallback.h:
        Add a "generic" VoidCallback class.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::forceRepaint):
        Insert the callback in the m_voidCallbacks map and send a forceRepaint message.

        (WebKit::WebPageProxy::voidCallback):
        Call the right void callback.

        (WebKit::WebPageProxy::processDidCrash):
        Invalidate m_voidCallbacks.

        * UIProcess/WebPageProxy.messages.in:
        Add a VoidCallback message.

        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
        (WebKit::ChunkedUpdateDrawingArea::forceRepaint):
        Force a repaint.

        * WebProcess/WebPage/ChunkedUpdateDrawingArea.h:
        Add forceRepaint.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::forceRepaint):
        Call forceRepaint on the drawing area.

        * WebProcess/WebPage/WebPage.messages.in:
        Add a ForceRepaint message.

2011-01-21  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Introduce FontMetrics abstraction
        https://bugs.webkit.org/show_bug.cgi?id=51456

        * WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp: Use FontMetrics instead of Font to access the metrics.
        (WebKit::WebPopupMenu::setUpPlatformData):

2011-01-22  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=52950
        Leak in WebPage::drawRectToPDF

        * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::drawRectToPDF): Use RetainPtr here, too.

2011-01-22  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=52951
        WebKit2 generates a bad PDF for cross process messaging

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]):
        Use a correct offset when flipping.

2011-01-21  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=52943
        Objective-C files should use #import, not #include

        * UIProcess/API/C/WebKit2.h: This is an interesting one, because it's cross-platform, and
        there is more than one WKView.h.

        * Platform/mac/ModuleMac.mm:
        * Platform/mac/RunLoopMac.mm:
        * PluginProcess/mac/PluginControllerProxyMac.mm:
        * PluginProcess/mac/PluginProcessMac.mm:
        * PluginProcess/mac/PluginProcessMainMac.mm:
        * Shared/API/c/mac/WKCertificateInfoMac.mm:
        * Shared/API/c/mac/WKURLRequestNS.mm:
        * Shared/API/c/mac/WKURLResponseNS.mm:
        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        * Shared/mac/PlatformCertificateInfo.mm:
        * Shared/mac/SandboxExtensionMac.mm:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        * Shared/mac/WebMemorySampler.mac.mm:
        * Shared/mac/WebURLRequestMac.mm:
        * Shared/mac/WebURLResponseMac.mm:
        * UIProcess/API/mac/FindIndicatorWindow.mm:
        * UIProcess/API/mac/WKTextInputWindowController.mm:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        * UIProcess/Launcher/mac/ThreadLauncherMac.mm:
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        * UIProcess/mac/BackingStoreMac.mm:
        * UIProcess/mac/ChunkedUpdateDrawingAreaProxyMac.mm:
        * UIProcess/mac/LayerBackedDrawingAreaProxyMac.mm:
        * UIProcess/mac/TextCheckerMac.mm:
        * UIProcess/mac/WebContextMac.mm:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        * UIProcess/mac/WebPageProxyMac.mm:
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        * UIProcess/mac/WebPreferencesMac.mm:
        * WebProcess/Downloads/mac/DownloadMac.mm:
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        * WebProcess/Plugins/Netscape/mac/PluginProxyMac.mm:
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        * WebProcess/WebCoreSupport/mac/WebDatabaseManagerMac.mm:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        * WebProcess/WebCoreSupport/mac/WebErrorsMac.mm:
        * WebProcess/WebCoreSupport/mac/WebPopupMenuMac.mm:
        * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        * WebProcess/mac/WebProcessMac.mm:

2011-01-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Fix the WebKit2 build with clang.

        * Scripts/webkit2/messages.py: Add some more structs to the list.
        * UIProcess/DrawingAreaProxy.h: Forward-declare UpdateInfo as a class.
        * UIProcess/TextChecker.h: Forward-declare TextCheckerState as a struct.
        * UIProcess/WebPageProxy.h: Forward-declare ContextMenuState as a struct.
        * UIProcess/mac/TextCheckerMac.mm: Fix the type of the string constants so that they can be passed to
        functions expecting NSString* without generating warnings.
        * WebProcess/WebPage/DrawingArea.h: Forward-declare WebPageCreationParameters as a struct.
        * WebProcess/WebPage/DrawingAreaImpl.h: Forward-declare UpdateInfo as a class.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::getResourceDataFromFrame): Add parens around the assignment in the condition of
        the if statement to suppress a warning.

2011-01-21  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Need API to stop loading a WKFrame
        https://bugs.webkit.org/show_bug.cgi?id=52925

        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameStopLoading): Call through to WebFrameProxy::stopLoading.
        * UIProcess/API/C/WKFrame.h:
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::stopLoading): Send a message to the WebProcess to stop loading the frame
            with the passed in ID.
        * UIProcess/WebFrameProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::stopLoadingFrame): Call stopForUserCancel on the passed-in frame.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Add StopLoadingFrame.

2011-01-21  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam Roben.

        <rdar://problem/8894125> and https://bugs.webkit.org/show_bug.cgi?id=52916
        Expose "suggested filename" for a resource based on its resource response.

        API pieces:
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameCopySuggestedFilenameForResourceURL):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
        
        Implementation:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::suggestedFilenameForResourceURL): See if the DocumentLoader has
          a resource for this URL and, if so, return the response's suggested filename.
        * WebProcess/WebPage/WebFrame.h:

2011-01-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        DrawingAreaProxyImpl::paint should return the unpainted region
        https://bugs.webkit.org/show_bug.cgi?id=52918

        * UIProcess/API/mac/WKView.mm:
        (-[WKView drawRect:]):
        Add unpaintedRegion parameter.

        * UIProcess/BackingStore.h:
        (WebKit::BackingStore::size):
        Add a size getter.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::paint):
        Initialize the unpainted region to the dirty region, then subtract the painted region.

2011-01-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein and Maciej Stachowiak.

        Fix for <rdar://problem/8896057>

        Give the Web Process access to the PubSub agent.

        * WebProcess/com.apple.WebProcess.sb:

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

        Reviewed by Anders Carlsson.

        Part 2 of "Cleanup Scrollbar/ScrollbarClient relationship"
        https://bugs.webkit.org/show_bug.cgi?id=52779

        Rename ScrollbarClient -> ScrollableArea.

        * UIProcess/win/WebPopupMenuProxyWin.cpp:
        (WebKit::WebPopupMenuProxyWin::onMouseWheel):
        (WebKit::WebPopupMenuProxyWin::scrollToRevealSelection):
        * UIProcess/win/WebPopupMenuProxyWin.h:

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

        Update for WKCACFLayerRenderer -> CACFLayerView rename

        Fixes <http://webkit.org/b/52898> WKCACFLayerRenderer sounds like a render object, but isn't

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/win/LayerBackedDrawingAreaWin.cpp: Just removed all the unnecessary
        #includes.

2011-01-20  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        WebKit2: Implement showModalDialog
        https://bugs.webkit.org/show_bug.cgi?id=52855

        * Shared/WebPageCreationParameters.h: Added canRunModal.

        * UIProcess/API/C/WKPage.h: Added a runModal function pointer to
        WKPageUIClient. Also removed a lot of redundant typedefs and added
        a new one, WKPageCallback, for callbacks without arguments or return
        values.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage): Added a runModal function pointer of 0.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters): Set canRunModal
        based on return value of WebUIClient::canRunModal.

        * UIProcess/WebPageProxy.h: Added runModal.
        Calls WebUIClient::runModal.

        * UIProcess/WebPageProxy.messages.in: Added RunModal message.
        Also removed the periods from the phrases in the comments
        as Maciej requested a while back.

        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::canRunModal): Added. Returns true or false
        based on whether a runModal function was supplied in the
        WKPageUIClient structure.
        (WebKit::WebUIClient::runModal): Added. Calls the runModal
        function from the WKPageUIClient structure.
        * UIProcess/WebUIClient.h: Declared the above functions.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::canRunModal): Call through to WebPage.
        (WebKit::WebChromeClient::runModal): Ditto.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Initialize m_canRunModal based on the
        creation parameters. Initialize m_isRunningModal to false.
        (WebKit::WebPage::close): Stop the nested run loop if we are running modal.
        (WebKit::WebPage::runModal): Send a message to ask the UI process to run
        modal and then start a nested run loop. It gets stopped when the page is closed.
        * WebProcess/WebPage/WebPage.h: Defined the canRunModal function
        and declared the runModal function.

2011-01-20  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=52849
        Make window.print work with WebKit2

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::printFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::printFrame):
        * UIProcess/WebUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::print):
        Just pass through deelagte call to a WebKit2 client.

        * UIProcess/API/C/WKPage.h: Also added "Callback" suffix to other printing related function
        types.

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

        Reviewed by Darin Adler.

        Keep track of the latest update timestamp in the backing store
        https://bugs.webkit.org/show_bug.cgi?id=52848

        * Shared/UpdateInfo.h:
        (WebKit::UpdateInfo::UpdateInfo):
        Initialize timestamp to 0.

        * UIProcess/BackingStore.cpp:
        (WebKit::BackingStore::BackingStore):
        Initialize m_latestUpdateTimestamp to 0.

        (WebKit::BackingStore::incorporateUpdate):
        If the update is too old, discard it. Otherwise, create a bitmap
        and pass it to platformIncorporateUpdate. Finally update the timestamp.

        * UIProcess/BackingStore.h:
        Add m_latestUpdateTimestamp.

        * UIProcess/mac/BackingStoreMac.mm:
        (WebKit::BackingStore::platformIncorporateUpdate):
        Update now that we are already given the shareable bitmap.

2011-01-20  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoffrey Garen.

        Fix for <rdar://problem/8890255>

        Allow WebKitSystemInterface to draw scrollbars 
        when appropriate.
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

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

        Reviewed by Dave Hyatt.

        Cleanup Scrollbar/ScrollbarClient relationship
        https://bugs.webkit.org/show_bug.cgi?id=52779

        * UIProcess/win/WebPopupMenuProxyWin.cpp:
        (WebKit::WebPopupMenuProxyWin::scrollPosition):
        (WebKit::WebPopupMenuProxyWin::setScrollOffset):
        (WebKit::WebPopupMenuProxyWin::scrollTo):
        (WebKit::WebPopupMenuProxyWin::onMouseWheel):
        (WebKit::WebPopupMenuProxyWin::scrollToRevealSelection):
        * UIProcess/win/WebPopupMenuProxyWin.h:
        (WebKit::WebPopupMenuProxyWin::verticalScrollbar):

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

        Reviewed by Adam Roben.

        Add a timestamp to UpdateInfo
        https://bugs.webkit.org/show_bug.cgi?id=52844

        * Shared/UpdateInfo.cpp:
        (WebKit::UpdateInfo::encode):
        (WebKit::UpdateInfo::decode):
        * Shared/UpdateInfo.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::setSize):
        (WebKit::DrawingAreaImpl::display):

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

        Reviewed by Beth Dakin.

        Add Connection::waitForAndDispatchImmediately
        https://bugs.webkit.org/show_bug.cgi?id=52841

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::waitForAndDispatchImmediately):

2011-01-20  Kevin Decker  <kdecker@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/8880689> need a way to obtain the rendered rectangle for box elements
        https://bugs.webkit.org/show_bug.cgi?id=52823
        
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleGetRenderRect): Added new method that will return a rendered rectangle for box elements
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h: Ditto.
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp: Ditto.
        (WebKit::InjectedBundleNodeHandle::renderRect): Ditto.
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h: Ditto.

2011-01-20  Kimmo Kinnunen  <kimmo.t.kinnunen@nokia.com>

        Reviewed by Andreas Kling.

        Remove null ptr deref that happens when reattaching to
        a new web process.

        Implement didRelaunchProcess that sets the drawing area size
        after the drawing area is re-instantiated.

        [Qt][WK2] Null ptr deref in UI process after web process has crashed
        https://bugs.webkit.org/show_bug.cgi?id=52796

        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::QGraphicsWKView):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::QWKPagePrivate):
        (QWKPagePrivate::init):
        (QWKPagePrivate::createDrawingAreaProxy):
        (QWKPagePrivate::didRelaunchProcess): Reset drawing area size after crash.
        * UIProcess/API/qt/qwkpage_p.h:

2011-01-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Roben.

        WebKitTestRunner needs to support layoutTestController.evaluateScriptInIsolatedWorld
        https://bugs.webkit.org/show_bug.cgi?id=42327
        
        Added a new API call, WKBundleFrameForJavaScriptContext, that gets the WKBundleFrameRef
        that corresponds to a JSContextRef (or null if none).

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameForJavaScriptContext): Simple wrapper, defers to a WebFrame
        static method.
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::frameForContext): Follow the maze of twisty pointers.
        * WebProcess/WebPage/WebFrame.h:

2011-01-20  Alejandro G. Castro  <alex@igalia.com>

        Fix compilation error in GTK WebKit2.

        * Platform/CoreIPC/gtk/ConnectionGtk.cpp:
        (CoreIPC::readBytesFromSocket):
        (CoreIPC::writeBytesToSocket):

2011-01-20  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Refactoring of the custom allocation framework
        https://bugs.webkit.org/show_bug.cgi?id=49897

        Inheriting from FastAllocBase can result in objects getting larger (bug #33896, #46589).
        The modification replaces Noncopyable and FastAllocBase classes and these inherits with their
        equivalent macro implementation at the necessary places.

2011-01-19  Simon Fraser  <simon.fraser@apple.com>

        Fix the WebKit2 build.

        * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm:
        (WebKit::LayerBackedDrawingArea::syncCompositingLayers):

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

        Reviewed by Darin Adler.

        WebKit2: Need API to get the parent frame of a frame
        https://bugs.webkit.org/show_bug.cgi?id=52774
        
        Add the API to get the parent frame of a frame.

        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameGetParentFrame):
        * UIProcess/API/C/WKFrame.h:

2011-01-19  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        WebKit2: add support for drag and drop
        https://bugs.webkit.org/show_bug.cgi?id=52343
        <rdar://problem/7660558>
        
        This patch contains the remaining work to support drag and drop on Mac.
        I've added a PasteboardTypes class to encapsulate all the pasteboard formats
        supported for drag and drop.
        In this implementation we don't support the promised types, since I could not
        find an efficient way to do this across processes.
        The bulk of the patch consists in creating a shareable bitmap for the drag image,
        pass its handle to the UI process and create a new NSImage from it to be given to
        AppKit for dragging.
        I've added the missing implementation of the methods in the drag client to hook
        up the placement of the data in the pasteboard.
        
        * Shared/mac/PasteboardTypes.h: Added.
        * Shared/mac/PasteboardTypes.mm: Added.
        (WebKit::PasteboardTypes::forEditing):
        (WebKit::PasteboardTypes::forURL):
        (WebKit::PasteboardTypes::forImages):
        (WebKit::PasteboardTypes::forImagesWithArchive):
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setDragImage): Added.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _registerDraggedTypes]): Refactored to use the new PasteboardTypes class.
        (-[WKView initWithFrame:contextRef:pageGroupRef:]):
        (-[WKView _setMouseDownEvent:]):
        (-[WKView _mouseHandler:]):
        (-[WKView mouseDown:]):
        (-[WKView mouseUp:]):
        (-[WKView mouseDragged:]):
        (-[WKView draggedImage:endedAt:operation:]):
        (-[WKView draggingEntered:]):
        (-[WKView _setDragImage:at:linkDrag:]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setDragImage):
        (WebKit::WebPageProxy::dragEnded):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        * WebProcess/WebCoreSupport/WebDragClient.h:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm: Added.
        (WebKit::fontFromNSFont):
        (WebKit::WebDragClient::startDrag): Added implementation.
        (WebKit::WebDragClient::createDragImageForLink): Ditto.
        (WebKit::writeURL): Helper function.
        (WebKit::writeImage): Helper function.
        (WebKit::WebDragClient::declareAndWriteDragImage): Added implementation.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::dragEnded):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

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

        Reviewed by Dan Bernstein.

        Put the deprecated Connection member functions next to eachother
        https://bugs.webkit.org/show_bug.cgi?id=52767

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::sendSync):
        (CoreIPC::Connection::send):

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

        Reviewed by Sam Weinig.

        When resizing, the web process should repaint the page
        https://bugs.webkit.org/show_bug.cgi?id=52764

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::didSetSize):
        Incorporate the update.

        (WebKit::DrawingAreaProxyImpl::incorporateUpdate):
        Return early if the update bounds rect is empty. This can happen if painting is
        disabled and we get a DidSetSize message.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::setSize):
        If painting is disabled, just send back an empty UpdateInfo struct. Otherwise,
        paint and fill in the UpdateInfo struct.

        (WebKit::DrawingAreaImpl::display):
        Assert that painting is not disabled.

2011-01-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=52739
        Make it possible for a WebKit2 client to print headers and footers

        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::headerHeight):
        (WebKit::WebPageProxy::footerHeight):
        (WebKit::WebPageProxy::drawHeader):
        (WebKit::WebPageProxy::drawFooter):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::headerHeight):
        (WebKit::WebUIClient::footerHeight):
        (WebKit::WebUIClient::drawHeader):
        (WebKit::WebUIClient::drawFooter):
        * UIProcess/WebUIClient.h:
        Pass UIClient calls through.

        * UIProcess/API/mac/WKView.mm:
        (currentPrintOperationScale): A helper to extract scale factor from the current NSPrintOperation.
        (-[WKView _adjustPrintingMarginsForHeaderAndFooter]): Copied from WebKit1. Change current
        print info to account for header and footer height as provided by the client.
        (-[WKView knowsPageRange:]): Call -[self _adjustPrintingMarginsForHeaderAndFooter].
        (-[WKView drawPageBorderWithSize:]): When AppKit asks to print page border, call the client
        to do that. Code adapted form WebKit1.

        * UIProcess/API/qt/qwkpage:
        (QWKPage::QWKPage): Added zeroes for new WKPageUIClient members to avoid breaking the build.

2011-01-19  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Darin Adler.

        Crash in WebDatabaseManagerProxy::getDatabaseOrigins when called after the WebProcess has
        died at least once
        https://bugs.webkit.org/show_bug.cgi?id=52730

        WebDatabaseManagerProxy::invalidate was setting m_webContext to 0, and invalidate gets
        called in WebContext::processDidClose. However, m_webContext is only set in the
        constructor, which is only called from the constructor of WebContext, so attempting to send
        a message to any new WebProcess after the first one died was causing a null deref.

        This patch moves setting m_webcontext into clearContext and clearContext is only called in
        the WebContext destructor.

        This patch also adds checks for a valid WebProcessProxy before attempting to send messages to
        the WebProcessProxy so that if the WebProcess has died and has not been revived, it does not
        attempt to dereference a null WebProcessProxy.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::~WebContext):
        Call WebDatabaseManagerProxy::clearContext.
        * UIProcess/WebContext.h:
        (WebKit::WebContext::hasValidProcess):
        Make this method public so that it can be called from WebDatabaseManagerProxy.

        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::getDatabasesByOrigin):
        If there isn't a valid process, invalidate the callback and return early.
        (WebKit::WebDatabaseManagerProxy::getDatabaseOrigins):
        Ditto.
        (WebKit::WebDatabaseManagerProxy::deleteDatabaseWithNameForOrigin):
        If tehre isn't a valid process return early.
        (WebKit::WebDatabaseManagerProxy::deleteDatabasesForOrigin):
        Ditto.
        (WebKit::WebDatabaseManagerProxy::deleteAllDatabases):
        Ditto.
        (WebKit::WebDatabaseManagerProxy::setQuotaForOrigin):
        Ditto.
        (WebKit::WebDatabaseManagerProxy::invalidate):
        Move setting m_webContext to 0 from here ...
        * UIProcess/WebDatabaseManagerProxy.h:
        (WebKit::WebDatabaseManagerProxy::clearContext):
        ... to here.

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

        Reviewed by Sam Weinig.

        Suspend/resume painting as the WKView visibility changes
        https://bugs.webkit.org/show_bug.cgi?id=52738

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::visibilityDidChange):
        Add new member function. It should really be pure virtual once setPageIsVisible
        is removed.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::visibilityDidChange):
        Send SuspendPainting/ResumePainting messages based on whether the view is visible or not.

        (WebKit::DrawingAreaProxyImpl::setPageIsVisible):
        Make this a stub; it should really be removed.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewStateDidChange):
        Call visibilityDidChange.

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isViewVisible):
        Add new getter.

        * WebProcess/WebPage/DrawingArea.messages.in:
        Add SuspendPainting and ResumePainting messages.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        Initialize m_isPaintingSuspended.

        (WebKit::DrawingAreaImpl::suspendPainting):
        Set m_isPaintingSuspended to true and stop the display timer.

        (WebKit::DrawingAreaImpl::resumePainting):
        Set m_isPaintingSuspended to false.

        (WebKit::DrawingAreaImpl::scheduleDisplay):
        (WebKit::DrawingAreaImpl::display):
        Bail if m_isPaintingSuspended is true.

2011-01-19  Andreas Kling  <kling@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt][WK2] Implement formatLocalizedString() for Qt.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::formatLocalizedString):

2011-01-19  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        WK2 - Multiple crashes in PlatformCALayer::replaceSublayer
        https://bugs.webkit.org/show_bug.cgi?id=52695

        Added a hostingLayer as the parent of the existing drawingLayer.
        The hostingLayer is now the root which is passed to the 
        remote context. It never changes except to track the size
        of the window. The backingLayer is now a child of the 
        hostingLayer, which allow it to switch between tiled and
        non-tiled.

        I also now give back accurate settings for debug borders and
        repaint counters.

        * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
        (WebKit::LayerBackedDrawingArea::LayerBackedDrawingArea):
        (WebKit::LayerBackedDrawingArea::setSize):
        (WebKit::LayerBackedDrawingArea::showDebugBorders):
        (WebKit::LayerBackedDrawingArea::showRepaintCounter):
        * WebProcess/WebPage/LayerBackedDrawingArea.h:
        * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm:
        (WebKit::LayerBackedDrawingArea::platformInit):
        (WebKit::LayerBackedDrawingArea::attachCompositingContext):
        (WebKit::LayerBackedDrawingArea::syncCompositingLayers):

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

        Reviewed by Sam Weinig.

        Send a new SetSize message if the size differs from the current size
        https://bugs.webkit.org/show_bug.cgi?id=52728

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::didSetSize):
        Add UpdateInfo parameter.

        * UIProcess/DrawingAreaProxy.messages.in:
        Add UpdateInfo parameter to the DidSetSize message.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::didSetSize):
        If the view size differs from the current size send another SetSize message.

        * UIProcess/DrawingAreaProxyImpl.h:
        Add UpdateInfo parameter to didSetSize.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::setSize):
        The DidSetSize message now takes an UpdateInfo parameter.

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

        Reviewed by Darin Adler.

        Throttle sending of SetSize messages
        https://bugs.webkit.org/show_bug.cgi?id=52727

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl):
        Initialize m_isWaitingForDidSetSize to false.

        (WebKit::DrawingAreaProxyImpl::didSetSize):
        Null out the backing store.

        (WebKit::DrawingAreaProxyImpl::sendSetSize):
        If m_isWaitingForDidSetSize is true, do nothing. Otherwise, set m_isWaitingForDidSetSize
        to true and send a SetSize message.

        * UIProcess/DrawingAreaProxyImpl.h:
        Add m_isWaitingForDidSetSize.

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

        Reviewed by Darin Adler.

        Pass WebPageCreationParameters to DrawingArea::create
        https://bugs.webkit.org/show_bug.cgi?id=52726

        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::create):
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::changeAcceleratedCompositingMode):

2011-01-19  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Laszlo Gombos and Tor Arne Vestbø.

        [Qt] Remove unnecessary "../Source" from paths
        after moving source files into Source is finished.

        * DerivedSources.pro:
        * WebKit2.pro:

2011-01-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner should track loading more like DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=52692
        
        Relax the message check in didSaveFrameToPageCache a bit more, since
        layout tests were still hitting the old one.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::isDisconnectedFrame):
        (WebKit::WebPageProxy::didSaveFrameToPageCache):

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

        Reviewed by Darin Adler.

        <rdar://problem/8860833> and https://bugs.webkit.org/show_bug.cgi?id=52599
        UIProcess crash in WebPageProxy::reattachToWebProcess when web process crashes with a new tab/window.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcessWithItem): Null check item *both* places it is used.

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

        Reviewed by Maciej Stachowiak. 

        <rdar://problem/8752200> and https://bugs.webkit.org/show_bug.cgi?id=52664
        Need WebKit2 API to asynchronously get the resource data for a URL

        Rename WKFrameGetMainResourceDataFunction to WKFrameGetResourceDataFunction, and add
        new API to get a resource by URL:
        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameGetMainResourceData):
        (WKFrameGetResourceData):
        (callGetResourceDataBlockAndDispose):
        (WKFrameGetMainResourceData_b):
        (WKFrameGetResourceData_b):
        * UIProcess/API/C/WKFrame.h:

        Implement the new API in the UIProcess side:
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::getResourceData):
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::getResourceDataFromFrame):
        * UIProcess/WebPageProxy.h:

        Have the WebProcess get the data and call back to the UIProcess:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::getResourceDataFromFrame):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2011-01-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Make PageClientImpl::scrollView do hardware blitting
        https://bugs.webkit.org/show_bug.cgi?id=52689

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::scrollView):
        Clip the scroll rect and scroll the view.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::incorporateUpdate):
        Scroll before painting.

2011-01-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Artifacts when scrolling with new drawing area
        https://bugs.webkit.org/show_bug.cgi?id=52682

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::scroll):
        When scrolling, we want the intersection of the scroll rect and clip rect.

2011-01-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Use a CGLayer for the backing store when possible
        https://bugs.webkit.org/show_bug.cgi?id=52679

        * UIProcess/mac/BackingStoreMac.mm:
        (WebKit::BackingStore::paint):
        If there is a layer, paint it into the given context.

        (WebKit::BackingStore::backingStoreContext):
        If we can get the containing window graphics context, use it to create a 
        CGLayer that we'll use for the backing store.

        (WebKit::BackingStore::scroll):
        Paint the layer into itself.

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::containingWindowGraphicsContext):
        Call the page client.

2011-01-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Pass the web page proxy to BackingStore::create
        https://bugs.webkit.org/show_bug.cgi?id=52673

        * UIProcess/BackingStore.cpp:
        (WebKit::BackingStore::create):
        Add WebPageProxy parameter.
    
        (WebKit::BackingStore::BackingStore):
        Add WebPageProxy parameter.

        * UIProcess/BackingStore.h:
        Add WebPageProxy member variable.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::incorporateUpdate):
        Pass the web page proxy when creating the backing store.

        * UIProcess/mac/BackingStoreMac.mm:
        (WebKit::BackingStore::backingStoreContext):
        Set the default blend mode.

2011-01-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Factor code to create the backing store bitmap context out into a new function
        https://bugs.webkit.org/show_bug.cgi?id=52670

        * UIProcess/BackingStore.h:
        * UIProcess/mac/BackingStoreMac.mm:
        (WebKit::BackingStore::backingStoreContext):
        Create the backing store context.

        (WebKit::BackingStore::incorporateUpdate):
        Call backingStoreContext.

        (WebKit::BackingStore::scroll):
        Assert that the context is not null.

2011-01-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Add PageClientImpl::containingWindowGraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=52666

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::containingWindowGraphicsContext):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:

2011-01-18  Damian Kaleta  <dkaleta@apple.com>

        Reviewed by Sam Weinig.

        WK2 methods WKPageScaleWebView and WKPageGetViewScaleFactor need to have consistent names
        https://bugs.webkit.org/show_bug.cgi?id=52647

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetScaleFactor):
        (WKPageGetScaleFactor):
        * UIProcess/API/C/WKPage.h:

2011-01-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Ask the web page proxy to scroll the view when needed
        https://bugs.webkit.org/show_bug.cgi?id=52665

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::incorporateUpdate):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::scrollView):
        * UIProcess/WebPageProxy.h:

2011-01-18  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::scrollView):

2011-01-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add PageClient::scrollView
        https://bugs.webkit.org/show_bug.cgi?id=52663

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::scrollView):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::scrollView):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::PageClientImpl::scrollView):
        * UIProcess/win/WebView.h:

2011-01-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Rename scrollDelta to scrollOffset everywhere.

        * Shared/UpdateInfo.cpp:
        (WebKit::UpdateInfo::encode):
        (WebKit::UpdateInfo::decode):
        * Shared/UpdateInfo.h:
        * UIProcess/BackingStore.h:
        * UIProcess/mac/BackingStoreMac.mm:
        (WebKit::BackingStore::incorporateUpdate):
        (WebKit::BackingStore::scroll):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::scroll):
        (WebKit::WebChromeClient::delegatedScrollRequested):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
        (WebKit::ChunkedUpdateDrawingArea::scroll):
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.h:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::scroll):
        (WebKit::DrawingAreaImpl::display):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
        (WebKit::LayerBackedDrawingArea::scroll):
        * WebProcess/WebPage/LayerBackedDrawingArea.h:

2011-01-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Get and paint each individual rect in -[WKView drawRect:]
        https://bugs.webkit.org/show_bug.cgi?id=52660

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

2011-01-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Assertion when loading two URLs in quick succession
        https://bugs.webkit.org/show_bug.cgi?id=52649
        <rdar://problem/8764645>

        If beginLoad is called twice without didStartProvisionalLoad being called in between,
        m_pendingProvisionalSandboxExtension would be non-null and an assert would fire.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::SandboxExtensionTracker::beginLoad):
        Instead of asserting that m_pendingProvisionalSandboxExtension is null, invalidate it
        if it is not null, since that's valid.

2011-01-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement NPN_PopUpContextMenu
        https://bugs.webkit.org/show_bug.cgi?id=52646
        <rdar://problem/8735616>

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_PopUpContextMenu):
        Call NetscapePlugin::popUpContextMenu.

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

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

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::popUpContextMenu):
        Convert the coordinates from the current mouse event to screen coordinates and call
        WKPopupContextMenu.

        (WebKit::NetscapePlugin::platformHandleMouseEvent):
        Update m_currentMouseEvent.

2011-01-18  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Do not assert that the provisional and committed URLs cannot be empty/null
        https://bugs.webkit.org/show_bug.cgi?id=52641

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didStartProvisionalLoad):
        (WebKit::WebFrameProxy::didCommitLoad):
        (WebKit::WebFrameProxy::didFinishLoad):

2011-01-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        ASSERT in plug-in code when going to youtube
        https://bugs.webkit.org/show_bug.cgi?id=52638

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::paintEntirePlugin):
        Don't try to paint the plug-in if the plug-in frame is empty.

2011-01-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Plug-in hosting WebProcess instances appear in Activity Monitor as WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=52635
        <rdar://problem/8731337>

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::initialize):
        Call platformInitialize.

        * PluginProcess/PluginProcess.h:
        Add platformInitialize.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitialize):
        Set the compositing render server port and the visible application name.

        * Shared/Plugins/PluginProcessCreationParameters.cpp:
        (WebKit::PluginProcessCreationParameters::encode):
        (WebKit::PluginProcessCreationParameters::decode):
        Encode/decode the parent process name.

        * Shared/Plugins/PluginProcessCreationParameters.h:
        Add parentProcessName.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        Encode/decode the parent process name.

        * Shared/WebProcessCreationParameters.h:
        Add parentProcessName.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        Don't pass the parent process name here.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::platformInitializePluginProcess):
        Set the visible name.

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        Pass along the parent process name.

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        Set the visible name.

        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain):
        Don't set the visible name here. It's done in platformInitializeWebProcess.

2011-01-18  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt][WK2] Not implemented warnings should not break layout tests
        https://bugs.webkit.org/show_bug.cgi?id=52616

        * WebKit2Prefix.h: Define DISABLE_NOT_IMPLEMENTED_WARNINGS on Qt.

2011-01-17  Jon Honeycutt  <jhoneycutt@apple.com>

        Windows build fix. Unreviewed.

        * Shared/PrintInfo.cpp:
        Use #include, not #import.

2011-01-17  Alexey Proskuryakov  <ap@apple.com>

        Actually wrote a FIXME promised for a review comment.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]):

2011-01-17  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson and Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=52595
        Make basic printing work in WebKit2

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetShouldPrintBackgrounds):
        (WKPreferencesGetShouldPrintBackgrounds):
        * UIProcess/API/C/WKPreferences.h:
        Implement a preference for printing backgrounds.

        * Shared/PrintInfo.cpp: Added.
        (WebKit::PrintInfo::encode):
        (WebKit::PrintInfo::decode):
        * Shared/PrintInfo.h: Added.
        * Shared/mac/PrintInfoMac.mm: Added.
        (WebKit::PrintInfo::PrintInfo):
        A new class for passing page setup information down to the web process.

        * WebKit2.xcodeproj/project.pbxproj:
        * GNUmakefile.am:
        * WebKit2.pro:
        * win/WebKit2.vcproj:
        Added PrintInfo.

        * Scripts/webkit2/messages.py: Added PrintInfo.h to a list of structs.

        * UIProcess/API/mac/WKView.mm:
        (WKViewData): Cache page count and geometry.
        (WebFrameWrapper): Added a wrapper class for adding a WebFrameProxy to an NSDictionary.
        (-[WKView drawRect:]): Added logging.
        (setFrameBeingPrinted): Store a frame into NSPrintOperation's NSPrintInfo, so that all 
        methods invoked for this operation would know what's being printed.
        (frameBeingPrinted): Retrieve this data.
        (-[WKView printOperationWithPrintInfo:forFrame:]): Create a print operation that's appropriate
        for the frame.
        (-[WKView knowsPageRange:]): Ask the web process.
        (-[WKView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]):
        Take over printing, because I couldn't make drawRect: work correctly with WebKit custom fit
        to page implementation.
        (-[WKView _provideTotalScaleFactorForPrintOperation:]): Help AppKit clip correctly.
        (-[WKView rectForPage:]): Return a pre-calculated rect.

        * UIProcess/WebPageProxy.h: Added m_isInPrintingMode to track whether the web page is in
        printing mode. The UI process controls that.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Initialize m_isInPrintingMode.
        (WebKit::WebPageProxy::beginPrinting): Change printing mode in web process if the value changes.
        (WebKit::WebPageProxy::endPrinting): Ditto.
        (WebKit::WebPageProxy::computePagesForPrinting): Ask the web process about output page geometry.
        (WebKit::WebPageProxy::drawRectToPDF): Ask the web process about printed page data.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close): Delete m_printContext while there is still a Frame pointer.
        (WebKit::WebPage::updatePreferences): Pass through ShouldPrintBackgrounds.
        (WebKit::WebPage::beginPrinting): Switch into printing mode (or update parameters if we're
        already in printing mode).
        (WebKit::WebPage::endPrinting): Delete m_printContext, implicitly calling end().
        (WebKit::WebPage::computePagesForPrinting): Make sure that we're in printing mode, and
        copmute page rects.
        (WebKit::WebPage::drawRectToPDF): Added a CG specific function to create a PDF document out
        of a page rect. It should really work for onscreen content, but we only need it for printing.

        * WebProcess/WebPage/WebPage.h:

        * WebProcess/WebPage/WebPage.messages.in: Added BeginPrinting, EndPrinting,
        ComputePagesForPrinting and DrawRectToPDF.

2011-01-17  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Fix some headers with missing or misspelled #ifndef guards
        https://bugs.webkit.org/show_bug.cgi?id=52545

        * Shared/UserMessageCoders.h:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:
        * WebProcess/InjectedBundle/InjectedBundleUserMessageCoders.h:
        * WebProcess/WebProcessMain.h:

2011-01-17  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * Platform/Logging.cpp:

2011-01-17  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=52592
        Add a logging channel for WKView

        * Platform/Logging.cpp:
        * Platform/Logging.h:

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

        Reviewed by Sam Weinig.

        Factor bitmap context drawing code out into a shared function
        https://bugs.webkit.org/show_bug.cgi?id=52589

        * Platform/cg/CGUtilities.h: Added.
        * Platform/cg/CGUtilities.cpp: Added.
        (WebKit::paintBitmapContext):
        New function that will paint a bitmap context into a CGContext.

        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::paint):
        Use paintBitmapContext.

        * UIProcess/mac/BackingStoreMac.mm:
        (WebKit::BackingStore::paint):
        (WebKit::BackingStore::scroll):
        Use paintBitmapContext.

        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Common.vsprops:
        Add CGUtilities.{cpp|h}.

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

        Rubber-stamped by Mark Rowe.

        Update xcodeproj svn:ignore to include xcuserdata.

        * WebKit2.xcodeproj: Modified property svn:ignore.

2011-01-17  Alexey Proskuryakov  <ap@apple.com>

        Fixing a typo from a bad merge.

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

2011-01-17  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by John Sullivan.

        https://bugs.webkit.org/show_bug.cgi?id=52590
        Should pass a frame into -[WKView canPrintHeadersAndFooters]

        * UIProcess/API/mac/WKView.h:
        * UIProcess/API/mac/WKView.mm: (-[WKView canChangeFrameLayout:]): Also, renamed the method
        to canChangeFrameLayout.

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

        Reviewed by Sam Weinig.

        Implement scrolling support
        https://bugs.webkit.org/show_bug.cgi?id=52502

        * Shared/UpdateInfo.cpp:
        (WebKit::UpdateInfo::encode):
        (WebKit::UpdateInfo::decode):
        * Shared/UpdateInfo.h:
        Add scrollRect and scrollDelta member variables.

        * UIProcess/BackingStore.h:
        Add scroll member function.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::incorporateUpdate):
        Repaint the scroll rect. Force a display of the view when the update info contains a scroll rect.

        * UIProcess/mac/BackingStoreMac.mm:
        (WebKit::BackingStore::incorporateUpdate):
        Call scroll.

        (WebKit::BackingStore::scroll):
        Paint the backing store into itself.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::display):
        Pass the scroll information in the update info.

2011-01-17  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed. Fixed malformed reference to WebKitVSPropsRedirectionDir that broke win build.

        * win/WebKit2.vcproj:
        * win/WebKit2GeneratedCommon.vsprops:
        * win/WebKit2WebProcess.vcproj:

2011-01-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: simplify debugger enabling routine.
        https://bugs.webkit.org/show_bug.cgi?id=52472

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

2011-01-17  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] Crash due to double destruction of QSharedMemory
        https://bugs.webkit.org/show_bug.cgi?id=52569

        Avoid deleting the QSharedMemory twice.
        * Platform/qt/SharedMemoryQt.cpp:
        (WebKit::SharedMemory::~SharedMemory):
        * Shared/qt/CleanupHandler.cpp:
        Renamed m_inDeleteObjects to m_hasStartedDeleting and
        added a getter for it.
        (WebKit::CleanupHandler::CleanupHandler):
        (WebKit::CleanupHandler::deleteObjects):
        * Shared/qt/CleanupHandler.h:
        (WebKit::CleanupHandler::unmark):
        (WebKit::CleanupHandler::hasStartedDeleting):

2011-01-15  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Move WebKit2 into Source
        https://bugs.webkit.org/show_bug.cgi?id=52438

        * DerivedSources.pro:
        * GNUmakefile.am:
        * WebKit2.pro:
        * WebProcess.pro:
        * win/WebKit2.vcproj:
        * win/WebKit2WebProcess.vcproj:

2011-01-14  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Antti Koivisto.

        Rename cache() to memoryCache()
        https://bugs.webkit.org/show_bug.cgi?id=52433

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::shutdownIfPossible):
        (WebKit::WebProcess::didClose):
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformSetCacheModel):
        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformSetCacheModel):

2011-01-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Split out a MarkedSpace strategy object from Heap.
        https://bugs.webkit.org/show_bug.cgi?id=52421

        * Shared/mac/WebMemorySampler.mac.mm:
        (WebKit::WebMemorySampler::sampleWebKit): Updated for class move.

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

        Reviewed by Dan Bernstein.

        Add a new PageClient::displayView function and expose it on WebPageProxy
        https://bugs.webkit.org/show_bug.cgi?id=52500

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::displayView):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::displayView):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::displayView):
        * UIProcess/WebPageProxy.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::displayView):
        * UIProcess/win/WebView.h:

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

        Reviewed by Sam Weinig.

        Implement the "should paint bounds instead of indiviual rects" algorithm from WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=52499

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::shouldPaintBoundsRect):
        Port code from -[WebView _mustDrawUnionedRect:singleRects:count:].

        (WebKit::DrawingAreaImpl::display):
        If shouldPaintBoundsRect returns true, clear the rects vector and append the bounds rect.

2011-01-14  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Geoff Garen.

        ShouldLoadResourceForFrame should use strings, not URLs.
        https://bugs.webkit.org/show_bug.cgi?id=52476

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::shouldLoadResourceForFrame): Pass resourceURL as a string instead of
            a URL, and rename from subresourceURL to resourceURL.

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

        Reviewed by Sam Weinig.

        Fix for <rdar://problem/8711576> The web process should be able to read resources from the UI process.

        Based on a patch by Ivan Krstić. This also makes the NSURLCache path a sandbox parameter.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        Encode and decode the uiProcessBundleResourcePath member variable.

        * Shared/WebProcessCreationParameters.h:
        Add uiProcessBundleResourcePath member variable.

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        Set the uiProcessBundleResourcePath member variable.

        * WebProcess/com.apple.WebProcess.sb:
        Allow read-only access to UI_PROCESS_BUNDLE_RESOURCE_DIR and all subdirectories.

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::initializeSandbox):
        When initializing the sandbox, pass UI_PROCESS_BUNDLE_RESOURCE_DIR.

        (WebKit::WebProcess::platformInitializeWebProcess):
        Remove the code that would consume a sandbox extension for the url cache path.

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

        Reviewed by Sam Weinig.

        Delay initializing the sandbox until we get the InitializeWebProcess message.

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::initializeSandbox):
        (WebKit::WebProcess::platformInitializeWebProcess):
        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain):

2011-01-14  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Align import/export directives
        https://bugs.webkit.org/show_bug.cgi?id=52208

        * Shared/API/c/WKBase.h: Align import/export directives with
        JavaScriptCore/API/JSBase.h.

2011-01-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: extract InspectorSettings from InspectorState, 
        simplify it.
        https://bugs.webkit.org/show_bug.cgi?id=52429

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:

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

        Reviewed by Darin Adler.

        WebKit2: Add support for drag and drop
        https://bugs.webkit.org/show_bug.cgi?id=52343
        <rdar://problem/7660558>
               
        This patch contains the changes required to support dropping content
        in WebKit on the Mac. The DragData class has been extended to provide
        additional context from the application (keyboard state, modal windows, etc.)
        as well as information of the drag pasteboard being used.
        The support for WebKit as drag source will be added with a separate patch.

        * Shared/DragControllerAction.h: Added.
        * UIProcess/API/mac/WKView.mm:
        Added implemention of the methods required to add suport for a drop target.
        To maintain asynchronous communication with the WebProcess, we always return
        the previous calculated value for the drag operation.
        (-[WKView _registerDraggedTypes]):
        (-[WKView initWithFrame:contextRef:pageGroupRef:]):
        (-[WKView applicationFlags:]):
        (-[WKView draggingEntered:]):
        (-[WKView draggingUpdated:]):
        (-[WKView draggingExited:]):
        (-[WKView prepareForDragOperation:]):
        (-[WKView performDragOperation:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::performDragControllerAction):
        (WebKit::WebPageProxy::didPerformDragControllerAction):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::dragOperation):
        (WebKit::WebPageProxy::resetDragOperation):
        * UIProcess/WebPageProxy.messages.in:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        (WebKit::WebDragClient::willPerformDragDestinationAction):
        (WebKit::WebDragClient::willPerformDragSourceAction):
        (WebKit::WebDragClient::actionMaskForDrag):
        (WebKit::WebDragClient::dragSourceActionMaskForPoint):
        (WebKit::WebDragClient::startDrag):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performDragControllerAction):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2011-01-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        Incorrect assertion in DrawingAreaImpl::scroll()
        https://bugs.webkit.org/show_bug.cgi?id=52376

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::scroll): Changed to take the fast path if the rects have the same area.
        This made the assertion valid, but I removed it anyway.

2011-01-12  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed.

        Getting rid of the unused 'viewportSize' argument in QWKPagePrivate:init.
        The argument is unused since http://trac.webkit.org/changeset/75468.

        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::QGraphicsWKView):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::init):
        * UIProcess/API/qt/qwkpage_p.h:

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

        Reviewed by Sam Weinig.

        Implement DrawingAreaImpl::scroll
        https://bugs.webkit.org/show_bug.cgi?id=52346

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::scroll):
        If there is already an active scroll, compute the area of both scroll rects and
        invalidate the smallest one. Compute a new dirty region if necessary and also
        add the scroll repaint region to the dirty region.

        (WebKit::DrawingAreaImpl::display):
        Reset the scroll area and scroll delta.

        * WebProcess/WebPage/DrawingAreaImpl.h:
        Add scroll area and scroll delta member variables.

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

        Reviewed by Dan Bernstein.

        Region improvements
        https://bugs.webkit.org/show_bug.cgi?id=52344

        * Platform/Region.cpp:
        (WebKit::Region::Shape::move):
        (WebKit::Region::move):
        Change Region::move to take an IntSize.

        * Platform/Region.h:
        (WebKit::intersect):
        (WebKit::subtract):
        (WebKit::move):
        Add convenience functions.

2011-01-12  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed Qt build fix for r75661

        * Shared/WebEvent.h: Don't declare phase() on non-Mac platforms.

2011-01-12  Beth Dakin  <bdakin@apple.com>

        Reviewed by Anders Carlsson.

        Add-on for https://bugs.webkit.org/show_bug.cgi?id=52309 
        Expose fixed layout through WebKit SPI
        -and corresponding-
        <rdar://problem/8844464>

        And now with getters!
        * UIProcess/API/C/WKPage.cpp:
        (WKPageUseFixedLayout):
        (WKPageFixedLayoutSize):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::useFixedLayout):
        (WebKit::WebPageProxy::fixedLayoutSize):

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

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=52337
        PlatformWheelEvent should know about the scroll phase on the Mac

        Add a phase parameter on Mac WebWheelEvent and pipe it down to PlatformWheelEvent.

        * Shared/WebEvent.h:
        (WebKit::WebWheelEvent::phase):
        * 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::WebEventFactory::createWebWheelEvent):

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

        Reviewed by Sam Weinig.

        Get rid of an unneeded parameter from DrawingArea::scroll
        https://bugs.webkit.org/show_bug.cgi?id=52336

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::scroll):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
        (WebKit::ChunkedUpdateDrawingArea::scroll):
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.h:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::scroll):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
        (WebKit::LayerBackedDrawingArea::scroll):
        * WebProcess/WebPage/LayerBackedDrawingArea.h:
        * WebProcess/WebPage/TiledDrawingArea.cpp:
        (WebKit::TiledDrawingArea::scroll):
        * WebProcess/WebPage/TiledDrawingArea.h:

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

        Reviewed by Sam Weinig.

        Get the new drawing area painting to the screen
        https://bugs.webkit.org/show_bug.cgi?id=52331

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::incorporateUpdate):
        Call setViewNeedsDisplay on all the update rects.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setViewNeedsDisplay):
        Call through to the page client.

        (WebKit::WebPageProxy::processDidCrash):
        Null out the drawing area proxy.
        
        * UIProcess/mac/BackingStoreMac.mm:
        (WebKit::BackingStore::paint):
        Paint.

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

        Reviewed by Sam Weinig.

        More work on getting the drawing area proxy to paint
        https://bugs.webkit.org/show_bug.cgi?id=52328

        * UIProcess/API/mac/WKView.mm:
        (-[WKView drawRect:]):
        Handle the new drawing area.

        * UIProcess/BackingStore.cpp:
        (WebKit::BackingStore::BackingStore):
        Assert that the size isn't empty.
        
        * UIProcess/BackingStore.h:
        * UIProcess/mac/BackingStoreMac.mm:
        (WebKit::BackingStore::incorporateUpdate):
        Paint all update rects into the bitmap context.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::display):
        Create a handle so the shareable bitmap will actually be transferred over.

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

        Fix build.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::incorporateUpdate):

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

        Reviewed by Sam Weinig.

        Begin stubbing out some more BackingStore member functions
        https://bugs.webkit.org/show_bug.cgi?id=52323

        * UIProcess/BackingStore.cpp:
        (WebKit::BackingStore::~BackingStore):
        This was accidentally made into a constructor; it should be a destructor.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::paint):
        Call the backing store.

        (WebKit::DrawingAreaProxyImpl::update):
        Incorporate the update.

        (WebKit::DrawingAreaProxyImpl::incorporateUpdate):
        Create the backing store if needed and incorporate the update.

        * UIProcess/mac/BackingStoreMac.mm: Added.
        (WebKit::BackingStore::platformInitialize):
        Create a bitmap context.

        (WebKit::BackingStore::paint):
        (WebKit::BackingStore::incorporateUpdate):
        Add stubs.

        * WebKit2.xcodeproj/project.pbxproj:
        Add BackingStoreMac.mm

2011-01-12  Beth Dakin  <bdakin@apple.com>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=52309 Expose
        fixed layout through WebKit SPI
        -and corresponding-
        <rdar://problem/8844464>

        Store useFixedLayout and fixedLayoutSize in the 
        WebPageCreationParameters and the WebPageProxy.
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetUseFixedLayout):
        (WKPageSetFixedLayoutSize):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setUseFixedLayout):
        (WebKit::WebPageProxy::setFixedLayoutSize):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setUseFixedLayout):
        (WebKit::WebPage::setFixedLayoutSize):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

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

        Reviewed by Beth Dakin.

        Add BackingStore class
        https://bugs.webkit.org/show_bug.cgi?id=52318

        * UIProcess/BackingStore.cpp: Added.
        (WebKit::BackingStore::create):
        (WebKit::BackingStore::BackingStore):
        * UIProcess/BackingStore.h: Added.
        * WebKit2.xcodeproj/project.pbxproj:

2011-01-12  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8837307>, <rdar://problem/8637038>, and https://bugs.webkit.org/show_bug.cgi?id=52248
        Back/forward list recovery after a WebProcess crash is crashy itself.

        Add an isEmpty() accessor so the WebProcess knows if it is actually restoring a session:
        * Shared/SessionState.cpp:
        (WebKit::SessionState::isEmpty):
        * Shared/SessionState.h:

        Keep track of the highest used itemID so a relaunched WebProcess can later be informed:
        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::WebBackForwardListItem):
        (WebKit::WebBackForwardListItem::highedUsedItemID):
        * Shared/WebBackForwardListItem.h:
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::generateHistoryItemID):
        (WebKit::WebBackForwardListProxy::setHighestItemIDFromUIProcess):
        (WebKit::WebBackForwardListProxy::addItemFromUIProcess): Remove a now-invalid ASSERT, as the UIProcess
          now tells the WebProcess that a previous WebProcess created.
        * WebProcess/WebPage/WebBackForwardListProxy.h:

        Encode/decode data relevant to restoring a session on WebPage creation:
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:

        If the WebProcess has crashed since the last load, change reload and the various back/forward APIs to 
        update the current back/forward item (if necessary) then relaunch the process:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcessWithItem):
        (WebKit::WebPageProxy::reattachToWebProcess): Renamed from "relaunch()" and made private.
        (WebKit::WebPageProxy::initializeWebPage):
        (WebKit::WebPageProxy::loadURL):
        (WebKit::WebPageProxy::loadURLRequest):
        (WebKit::WebPageProxy::reload):
        (WebKit::WebPageProxy::goForward):
        (WebKit::WebPageProxy::goBack):
        (WebKit::WebPageProxy::goToBackForwardItem):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:

        Rename "RestoreSession" to "RestoreSessionAndNavigateToCurrentItem"
        * WebProcess/WebPage/WebPage.messages.in:
        * UIProcess/cf/WebPageProxyCF.cpp:
        (WebKit::WebPageProxy::restoreFromSessionStateData):

        Restore a session on page creation if the parameters include it:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Call restoreSession if session state exists.
        (WebKit::WebPage::restoreSessionAndNavigateToCurrentItem):
        (WebKit::WebPage::restoreSession):
        * WebProcess/WebPage/WebPage.h:

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

        Reviewed by Sam Weinig.

        Send Update and DidUpdate messages
        https://bugs.webkit.org/show_bug.cgi?id=52316

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::update):
        Add empty stub.

        * UIProcess/DrawingAreaProxy.messages.in:
        Add Update message.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::update):
        Just send back a DidUpdate message.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::didUpdate):
        Add empty stub.

        * WebProcess/WebPage/DrawingArea.messages.in:
        Add DidUpdate message.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::didUpdate):
        Call display().

        (WebKit::DrawingAreaImpl::display):
        Send an Update message.

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

        Reviewed by Sam Weinig.

        Make the new drawing area actually draw something
        https://bugs.webkit.org/show_bug.cgi?id=52314

        * Shared/UpdateInfo.cpp:
        (WebKit::UpdateInfo::encode):
        (WebKit::UpdateInfo::decode):
        Encode and decode newly added fields.

        * Shared/UpdateInfo.h:
        Add a vector of update rects and a handle for the sharable bitmap.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::display):
        Get the individual rects from the region and paint them into the shareable bitmap.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mainFrameHasCustomRepresentation):
        * WebProcess/WebPage/WebPage.h:
        Add helper function.

        * WebProcess/WebPage/mac/ChunkedUpdateDrawingAreaMac.cpp:
        (WebKit::ChunkedUpdateDrawingArea::paintIntoUpdateChunk):
        Use helper function.

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

        Reviewed by Sam Weinig.

        Add UpdateInfo class
        https://bugs.webkit.org/show_bug.cgi?id=52306

        * Shared/UpdateInfo.cpp: Added.
        (WebKit::UpdateInfo::encode):
        (WebKit::UpdateInfo::decode):
        * Shared/UpdateInfo.h: Added.
        (WebKit::UpdateInfo::UpdateInfo):
        * WebKit2.xcodeproj/project.pbxproj:

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

        Reviewed by Sam Weinig.

        More work on the new drawing area implementation
        https://bugs.webkit.org/show_bug.cgi?id=52302

        * Platform/Region.cpp:
        (WebKit::Region::Shape::segments_end):
        segments_end could end up returning an iterator that is one element past the Vector data, so
        we can't use operator[] since that will assert.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        Initialize the timer.

        (WebKit::DrawingAreaImpl::setNeedsDisplay):
        Unite the rect with the dirty region and schedule a display.

        (WebKit::DrawingAreaImpl::setSize):
        Tell the web page to resize.

        (WebKit::DrawingAreaImpl::scheduleDisplay):
        Start a display timer if needed.

        (WebKit::DrawingAreaImpl::display):
        Add a stub.

2011-01-12  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix after r75527.  Rename 'BackingStoreCairo.cpp'
        to 'ShareableBitmapCairo.cpp' to match VS project changes.

        * Shared/cairo/BackingStoreCairo.cpp: Removed.
        * Shared/cairo/ShareableBitmapCairo.cpp: Copied from Shared/cairo/BackingStoreCairo.cpp.

2011-01-11  Jeff Miller  <jeffm@apple.com>

        Reviewed by John Sullivan.

        WebKit2: "Webpages not responding" dialog appears when <select> popup menu is showing
        https://bugs.webkit.org/show_bug.cgi?id=52242

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showPopupMenu):
        On Windows, stop the responsiveness timer before calling showPopupMenu().

2011-01-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders Carlsson.

        UIProcess kills the WebProcess sometimes when detached frames exist
        https://bugs.webkit.org/show_bug.cgi?id=52227

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didSaveFrameToPageCache): Don't consider the message invalid
        if it came in for a detached frame.

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

        Build fix.

        * WebKit2.xcodeproj/project.pbxproj:

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

        Reviewed by Sam Weinig.

        Add a Region class which represents a graphical region
        https://bugs.webkit.org/show_bug.cgi?id=52255

        * Platform/Region.cpp: Added.
        (WebKit::Region::Region):
        (WebKit::Region::rects):
        (WebKit::Region::Shape::Shape):
        (WebKit::Region::Shape::appendSpan):
        (WebKit::Region::Shape::canCoalesce):
        (WebKit::Region::Shape::appendSpans):
        (WebKit::Region::Shape::appendSegment):
        (WebKit::Region::Shape::spans_begin):
        (WebKit::Region::Shape::spans_end):
        (WebKit::Region::Shape::segments_begin):
        (WebKit::Region::Shape::segments_end):
        (WebKit::Region::Shape::dump):
        (WebKit::Region::Shape::bounds):
        (WebKit::Region::Shape::move):
        (WebKit::Region::Shape::swap):
        (WebKit::Region::Shape::shapeOperation):
        (WebKit::Region::Shape::UnionOperation::trySimpleOperation):
        (WebKit::Region::Shape::unionShapes):
        (WebKit::Region::Shape::IntersectOperation::trySimpleOperation):
        (WebKit::Region::Shape::intersectShapes):
        (WebKit::Region::Shape::SubtractOperation::trySimpleOperation):
        (WebKit::Region::Shape::subtractShapes):
        (WebKit::Region::dump):
        (WebKit::Region::intersect):
        (WebKit::Region::unite):
        (WebKit::Region::subtract):
        (WebKit::Region::move):
        * Platform/Region.h: Added.
        (WebKit::Region::bounds):
        (WebKit::Region::isEmpty):
        (WebKit::Region::Span::Span):
        (WebKit::Region::Shape::isEmpty):
        * WebKit2.xcodeproj/project.pbxproj:

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

        Reviewed by Darin Adler.

        Add DidSetSize message
        https://bugs.webkit.org/show_bug.cgi?id=52254

        * DerivedSources.make:
        Add DrawingAReaProxy.messages.in.

        * Platform/CoreIPC/MessageID.h:
        Add DrawingAreaProxy message class.

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::didSetSize):
        Add CoreIPC message handler function.

        * UIProcess/DrawingAreaProxy.messages.in: Added.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::didSetSize):
        Add stub.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        Handle DrawingAreaProxy messages.

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

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::setSize):
        Send a DidSetSize message for now.

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

        Reviewed by Anders Carlsson.

        Fix spelling mistake. Sharable -> Shareable.

        * Shared/API/c/WKImage.h:
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toImageOptions):
        * Shared/ImageOptions.h:
        * Shared/WebImage.cpp:
        (WebKit::WebImage::create):

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

        Reviewed by Sam Weinig.

        Add SetSize message
        https://bugs.webkit.org/show_bug.cgi?id=52247

        * DerivedSources.make:
        Add DrawingArea.messages.in

        * Platform/CoreIPC/MessageID.h:
        Add DrawingArea message class.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::sizeDidChange):
        Call sendSetSize.

        (WebKit::DrawingAreaProxyImpl::sendSetSize):
        Send a SetSize message.

        * UIProcess/DrawingAreaProxyImpl.h:
        Add setSize override.

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

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::setSize):
        Add setSize member function.

        * WebProcess/WebPage/DrawingArea.messages.in: Added.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        * WebProcess/WebPage/DrawingAreaImpl.h:
        Add setSize.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveMessage):
        Handle drawing area messages.

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

        Reviewed by Sam Weinig.

        Replace ASSERTs with FIXMEs.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::sizeDidChange):
        (WebKit::DrawingAreaProxyImpl::setPageIsVisible):

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

        Reviewed by Sam Weinig.

        Add DrawingAreaImpl skeleton class
        https://bugs.webkit.org/show_bug.cgi?id=52246

        * UIProcess/API/mac/WKView.mm:
        (useNewDrawingArea):
        New function which controls which drawing area to use, through an environment variable.

        (-[WKView drawRect:]):
        Bail if we're using the new drawing area (for now).

        (-[WKView WebKit::]):
        Create a DrawingAreaProxyImpl when asked to.

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

        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        Create a DrawingAreaImpl when asked to.

        * WebProcess/WebPage/DrawingAreaImpl.cpp: Added.
        * WebProcess/WebPage/DrawingAreaImpl.h: Added.
        Add DrawingAreaImpl class.

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

        Reviewed by Sam Weinig.

        Add Mac-only DrawingAreaProxyImpl class skeleton
        https://bugs.webkit.org/show_bug.cgi?id=52243

        This is the proxy side of a new drawing area implementation. This is Mac only for now
        while the design is being fleshed out.

        * Shared/DrawingAreaInfo.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _switchToDrawingAreaTypeIfNecessary:DrawingAreaInfo::]):
        * UIProcess/DrawingAreaProxyImpl.cpp: Added.
        (WebKit::DrawingAreaProxyImpl::create):
        (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl):
        (WebKit::DrawingAreaProxyImpl::~DrawingAreaProxyImpl):
        (WebKit::DrawingAreaProxyImpl::didReceiveMessage):
        (WebKit::DrawingAreaProxyImpl::didReceiveSyncMessage):
        (WebKit::DrawingAreaProxyImpl::paint):
        (WebKit::DrawingAreaProxyImpl::sizeDidChange):
        (WebKit::DrawingAreaProxyImpl::setPageIsVisible):
        (WebKit::DrawingAreaProxyImpl::attachCompositingContext):
        (WebKit::DrawingAreaProxyImpl::detachCompositingContext):
        * UIProcess/DrawingAreaProxyImpl.h: Added.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):

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

        Fix Windows build.

        * WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp:
        (WebKit::WebPopupMenu::setUpPlatformData):

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

        Reviewed by Sam Weinig.

        Rename ShareableBitmap::createSharable to createShareable
        https://bugs.webkit.org/show_bug.cgi?id=52234

        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::createShareable):
        * Shared/ShareableBitmap.h:
        * Shared/WebImage.cpp:
        (WebKit::WebImage::create):
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::geometryDidChange):
        * WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp:
        (WebKit::WebPopupMenu::setUpPlatformData):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindIndicator):

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

        Reviewed by Sam Weinig.

        Rename BackingStore to ShareableBitmap
        https://bugs.webkit.org/show_bug.cgi?id=52228

        * GNUmakefile.am:
        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::geometryDidChange):
        * PluginProcess/PluginControllerProxy.h:
        * Shared/API/c/cg/WKImageCG.cpp:
        (WKImageCreateCGImage):
        * Shared/BackingStore.cpp: Removed.
        * Shared/BackingStore.h: Removed.
        * Shared/PlatformPopupMenuData.cpp:
        (WebKit::PlatformPopupMenuData::decode):
        * Shared/PlatformPopupMenuData.h:
        * Shared/ShareableBitmap.cpp: Copied from WebKit2/Shared/BackingStore.cpp.
        (WebKit::ShareableBitmap::create):
        (WebKit::ShareableBitmap::createSharable):
        (WebKit::ShareableBitmap::createHandle):
        (WebKit::ShareableBitmap::ShareableBitmap):
        (WebKit::ShareableBitmap::~ShareableBitmap):
        (WebKit::ShareableBitmap::resize):
        (WebKit::ShareableBitmap::data):
        * Shared/ShareableBitmap.h: Copied from WebKit2/Shared/BackingStore.h.
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        (WebKit::UserMessageDecoder::baseDecode):
        * Shared/WebImage.cpp:
        (WebKit::WebImage::create):
        (WebKit::WebImage::WebImage):
        (WebKit::WebImage::~WebImage):
        (WebKit::WebImage::size):
        * Shared/WebImage.h:
        (WebKit::WebImage::bitmap):
        * Shared/cairo/BackingStoreCairo.cpp:
        (WebKit::ShareableBitmap::createGraphicsContext):
        (WebKit::ShareableBitmap::paint):
        * Shared/cg/BackingStoreCG.cpp: Removed.
        * Shared/cg/ShareableBitmapCG.cpp: Copied from WebKit2/Shared/cg/BackingStoreCG.cpp.
        (WebKit::ShareableBitmap::createGraphicsContext):
        (WebKit::ShareableBitmap::paint):
        * Shared/gtk/BackingStoreGtk.cpp: Removed.
        * Shared/gtk/ShareableBitmapGtk.cpp: Copied from WebKit2/Shared/gtk/BackingStoreGtk.cpp.
        (WebKit::ShareableBitmap::createGraphicsContext):
        (WebKit::ShareableBitmap::paint):
        * Shared/qt/BackingStoreQt.cpp: Removed.
        * Shared/qt/ShareableBitmapQt.cpp: Copied from WebKit2/Shared/qt/BackingStoreQt.cpp.
        (WebKit::ShareableBitmap::createGraphicsContext):
        (WebKit::ShareableBitmap::paint):
        * UIProcess/FindIndicator.cpp:
        (WebKit::FindIndicator::create):
        (WebKit::FindIndicator::FindIndicator):
        * UIProcess/FindIndicator.h:
        (WebKit::FindIndicator::contentImage):
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::geometryDidChange):
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindIndicator):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::snapshotInViewCoordinates):
        (WebKit::WebPage::snapshotInDocumentCoordinates):
        * win/WebKit2.vcproj:

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

        Reviewed by Anders Carlsson.

        [WKView setFrameSize:] derefs _page->drawingArea() without null check
        <https://bugs.webkit.org/show_bug.cgi?id=52231>

        * UIProcess/API/mac/WKView.mm:
        (-[WKView setFrameSize:]):
        Null check drawingArea(). This is OK because if it doesn't exist then it will be
        created later with the correct initial size.

2011-01-07  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        Paste and drag and drop use different code paths to interact with the pasteboard.
        https://bugs.webkit.org/show_bug.cgi?id=52093
        The change consists in a refactoring of the code to have only one class that
        deals with the pasteboard on Mac.

        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: Added two methods to provide to WebCore functionality
        exposed by NSURLExtras.
        (WebKit::WebEditorClient::canonicalizeURL):
        (WebKit::WebEditorClient::canonicalizeURLString):

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

        Reviewed by Anders Carlsson and Sam Weinig.

        Fix crash on launch on Windows.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::onSizeEvent):
        The drawing area is no longer initialized before the WebView is created and the first
        onSize is receieved.

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

        Reviewed by Dan Bernstein.

        Automatically reinitialize the web page on relaunch
        https://bugs.webkit.org/show_bug.cgi?id=52224
        <rdar://problem/8765695>

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _didRelaunchProcess]):
        Remove call to reinitializeWebPage.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::relaunch):
        Call initializeWebPage().

        (WebKit::WebPageProxy::initializeWebPage):
        Assert that the web page is valid here.

        * UIProcess/WebPageProxy.h:
        Remove reinitializeWebPage.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::didRelaunchProcess):
        Remove call to reinitializeWebPage.

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

        Reviewed by Sam Weinig.

        Pass the view size to the DrawingAreaProxy constructor
        https://bugs.webkit.org/show_bug.cgi?id=52189

        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::DrawingAreaProxy):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewSize):
        * UIProcess/WebPageProxy.h:

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

        Roll r75460 back in with build fix.

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

        Reviewed by Andreas Kling.

        Work towards having the WebPageProxy decide when to create the DrawingAreaProxy
        https://bugs.webkit.org/show_bug.cgi?id=52184

        Qt part made my Balazs Kelemen.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        Call -[WKView _createDrawingAreaProxy].

        (WebKit::PageClientImpl::setViewNeedsDisplay):
        Call setNeedsDisplayInRect on the WKView.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:contextRef:pageGroupRef:]):
        No need to set the drawing area proxy anymore.

        (-[WKView _createDrawingAreaProxy]):
        Create a chunked update drawing area proxy for now.

        * UIProcess/API/qt/qgraphicswkview.cpp:
        Added a QGraphicsItem* member that is initialized in init to the accociated view.
        Implement the new functions. This is a temporary solution, in the long term the view
        and the page should be decoupled.
        (QGraphicsWKView::QGraphicsWKView):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::QWKPagePrivate):
        (QWKPagePrivate::init):
        (QWKPagePrivate::createDrawingAreaProxy):
        (QWKPagePrivate::setViewNeedsDisplay):
        * UIProcess/API/qt/qwkpage.h:
        * UIProcess/API/qt/qwkpage_p.h:
        
        * UIProcess/PageClient.h:
        Add new pure virtual member functions.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeWebPage):
        (WebKit::WebPageProxy::reinitializeWebPage):
        Set the new drawing area proxy.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView):
        No need to set the drawing area proxy anymore.

        (WebKit::WebView::createDrawingAreaProxy):
        Create a chunked update drawing area proxy for now.

        (WebKit::WebView::setViewNeedsDisplay):
        Invalidate the window.

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

        Fix a typo in a comment

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:

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

        Unreviewed, rolling out r75460.
        http://trac.webkit.org/changeset/75460
        https://bugs.webkit.org/show_bug.cgi?id=52191

        It broke Qt-WK2 build (Requested by Ossy on #webkit).

        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKGeolocationPermissionRequest.cpp: Removed.
        * UIProcess/API/C/WKGeolocationPermissionRequest.h: Removed.
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/C/WebKit2.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage):
        * UIProcess/GeolocationPermissionRequestManagerProxy.cpp: Removed.
        * UIProcess/GeolocationPermissionRequestManagerProxy.h: Removed.
        * UIProcess/GeolocationPermissionRequestProxy.cpp: Removed.
        * UIProcess/GeolocationPermissionRequestProxy.h: Removed.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::processDidCrash):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebUIClient.cpp:
        * UIProcess/WebUIClient.h:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp: Removed.
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.h: Removed.
        * WebProcess/Geolocation/WebGeolocationManager.cpp:
        * WebProcess/Geolocation/WebGeolocationManager.h:
        * WebProcess/WebCoreSupport/WebGeolocationClient.cpp:
        (WebKit::WebGeolocationClient::requestPermission):
        (WebKit::WebGeolocationClient::cancelPermissionRequest):
        * WebProcess/WebCoreSupport/WebGeolocationClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:

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

        Unreviewed, rolling out r75459
        http://trac.webkit.org/changeset/75459

        Work towards having the WebPageProxy decide when to create the DrawingAreaProxy
        https://bugs.webkit.org/show_bug.cgi?id=52184

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/API/qt/qwkpage.cpp:
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeWebPage):
        (WebKit::WebPageProxy::reinitializeWebPage):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView):
        * UIProcess/win/WebView.h:

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

        Reviewed by Sam Weinig.

        Remove size parameter to WebPageProxy::initializeWebPage
        https://bugs.webkit.org/show_bug.cgi?id=52188

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:contextRef:pageGroupRef:]):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::init):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeWebPage):
        * UIProcess/WebPageProxy.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView):

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

        Didn't mean to land this.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeWebPage):
        * UIProcess/WebPageProxy.h:

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

        Reviewed by Sam Weinig.

        WebPageProxy::creationParameters no longer needs to take a size
        https://bugs.webkit.org/show_bug.cgi?id=52187

        WebPageProxy::creationParameters can just ask the page client for the view size now.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::createInspectorPage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeWebPage):
        (WebKit::WebPageProxy::reinitializeWebPage):
        (WebKit::WebPageProxy::createNewPage):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:

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

        Reviewed by Sam Weinig.

        Pass information about the view in the WebPageCreationParameters
        https://bugs.webkit.org/show_bug.cgi?id=52186

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        Encode and decode the state flags.

        * Shared/WebPageCreationParameters.h:
        Add new state flags.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        Initialize the state flags.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        Update the page state from the state flags.

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

        Reviewed by Anders Carlsson.

        Make Geolocation features work in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=52078

        Step 2 - Add support for requesting and granting permission for geolocation.

        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        * UIProcess/API/C/WebKit2.h:
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKGeolocationPermissionRequest.cpp: Added.
        * UIProcess/API/C/WKGeolocationPermissionRequest.h: Added.
        Add new API type, WKGeolocationPermissionRequestRef.

        * UIProcess/API/C/WKPage.h:
        Add new UIClient function for requesting permission.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage): 
        Stub out the UIClient.

        * UIProcess/GeolocationPermissionRequestManagerProxy.cpp: Added.
        * UIProcess/GeolocationPermissionRequestManagerProxy.h: Added.
        * UIProcess/GeolocationPermissionRequestProxy.cpp: Added.
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebUIClient.cpp:
        * UIProcess/WebUIClient.h:
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp: Added.
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.h: Added.
        * WebProcess/Geolocation/WebGeolocationManager.cpp:
        * WebProcess/Geolocation/WebGeolocationManager.h:
        * WebProcess/WebCoreSupport/WebGeolocationClient.cpp:
        * WebProcess/WebCoreSupport/WebGeolocationClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::didReceiveGeolocationPermissionDecision):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::geolocationPermissionRequestManager):
        * WebProcess/WebPage/WebPage.messages.in:
        Track the permission request through both sides of the process divide.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:
        Add new files.

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

        Reviewed by Sam Weinig.

        Work towards having the WebPageProxy decide when to create the DrawingAreaProxy
        https://bugs.webkit.org/show_bug.cgi?id=52184

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        Call -[WKView _createDrawingAreaProxy].

        (WebKit::PageClientImpl::setViewNeedsDisplay):
        Call setNeedsDisplayInRect on the WKView.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:contextRef:pageGroupRef:]):
        No need to set the drawing area proxy anymore.

        (-[WKView _createDrawingAreaProxy]):
        Create a chunked update drawing area proxy for now.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::createDrawingAreaProxy):
        (QWKPagePrivate::setViewNeedsDisplay):
        Add stubs.
    
        * UIProcess/PageClient.h:
        Add new pure virtual member functions.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeWebPage):
        (WebKit::WebPageProxy::reinitializeWebPage):
        Set the new drawing area proxy.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView):
        No need to set the drawing area proxy anymore.

        (WebKit::WebView::createDrawingAreaProxy):
        Create a chunked update drawing area proxy for now.

        (WebKit::WebView::setViewNeedsDisplay):
        Invalidate the window.

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

        Fix Windows build again.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::isViewWindowActive):

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

        Fix Windows build.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::onShowWindowEvent):

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

        Reviewed by Sam Weinig.

        Use a pull model for view state changes
        https://bugs.webkit.org/show_bug.cgi?id=52175

        Instead of having the WKView call setFocused, setActive etc on the WebPageProxy, the
        WKView now simply informs the WebPageProxy what has changed, using the WebPageProxy::viewStateDidChange
        function. The WebPageProxy can then fetch the relevant information using newly added PageClient functions.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::viewSize):
        (WebKit::PageClientImpl::isViewWindowActive):
        (WebKit::PageClientImpl::isViewFocused):
        (WebKit::PageClientImpl::isViewVisible):
        (WebKit::PageClientImpl::isViewInWindow):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:contextRef:pageGroupRef:]):
        (-[WKView becomeFirstResponder]):
        (-[WKView resignFirstResponder]):
        (-[WKView viewDidMoveToWindow]):
        (-[WKView _windowDidBecomeKey:]):
        (-[WKView _windowDidResignKey:]):
        (-[WKView viewDidHide]):
        (-[WKView viewDidUnhide]):
        (-[WKView _isFocused]):
        (-[WKView _didRelaunchProcess]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::focusInEvent):
        (QGraphicsWKView::focusOutEvent):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::QWKPagePrivate):
        (QWKPagePrivate::viewSize):
        (QWKPagePrivate::isViewWindowActive):
        (QWKPagePrivate::isViewFocused):
        (QWKPagePrivate::isViewVisible):
        (QWKPagePrivate::isViewInWindow):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createWebPage):
        * UIProcess/WebContext.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::create):
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::viewStateDidChange):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::createWebPage):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView):
        (WebKit::WebView::onSetFocusEvent):
        (WebKit::WebView::onKillFocusEvent):
        (WebKit::WebView::onShowWindowEvent):
        (WebKit::WebView::updateActiveState):
        (WebKit::WebView::viewSize):
        (WebKit::WebView::isViewWindowActive):
        (WebKit::WebView::isViewFocused):
        (WebKit::WebView::isViewVisible):
        (WebKit::WebView::isViewInWindow):
        (WebKit::WebView::didRelaunchProcess):
        (WebKit::WebView::setIsInWindow):
        * UIProcess/win/WebView.h:

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

        Don't pass a reference type to va_start

        C++ says this results in undefined behavior:

            The restrictions that ISO C places on the second parameter to the
            va_start() macro in header <stdarg.h> are different in this
            International Standard. The parameter parmN is the identifier of
            the rightmost parameter in the variable parameter list of the
            function definition (the one just before the ...).221) If the
            parameter parmN is declared with a function, array, or reference
            type, or with a type that is not compatible with the type that
            results when passing an argument for which there is no parameter,
            the behavior is undefined.

        Fixes <http://webkit.org/b/52168> Title of standalone image document
        includes bogus image dimensions

        Rubber-stamped by Eric Seidel.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::formatLocalizedString): Don't use a reference type for
        |format|.

2011-01-10  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Eric Seidel.

        Support for ARM's RVCT(ARMCC) compiler in import/export directives
        https://bugs.webkit.org/show_bug.cgi?id=52146 

        * Shared/API/c/WKBase.h:

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

        Fix the build.

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

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

        Reviewed by Anders Carlsson.

        Make Geolocation features work in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=52078

        Step 1 - Add enough support to get position data from a provider.
        This does not include permission support.

        * Platform/CoreIPC/HandleMessage.h:
        Add #include of Arguments.h for CoreIPC::In and Out definitions.

        * Platform/CoreIPC/MessageID.h:
        Add new message types.

        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        Add new API types.

        * Shared/WebGeolocationPosition.cpp: Added.
        * Shared/WebGeolocationPosition.h: Added.
        Internal position representation.

        * UIProcess/API/C/WKAPICast.h:
        Add casts for new API types.

        * UIProcess/API/C/WKContext.cpp:
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/WKGeolocationManager.cpp: Added.
        * UIProcess/API/C/WKGeolocationManager.h: Added.
        * UIProcess/API/C/WKGeolocationPosition.cpp: Added.
        * UIProcess/API/C/WKGeolocationPosition.h: Added.
        * UIProcess/API/C/WebKit2.h:
        Add API to provide and control geolocation data.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::processDidClose):
        (WebKit::WebContext::didReceiveMessage):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::geolocationManagerProxy):
        * UIProcess/WebGeolocationManagerProxy.cpp: Added.
        (WebKit::WebGeolocationManagerProxy::create):
        (WebKit::WebGeolocationManagerProxy::WebGeolocationManagerProxy):
        (WebKit::WebGeolocationManagerProxy::~WebGeolocationManagerProxy):
        (WebKit::WebGeolocationManagerProxy::invalidate):
        (WebKit::WebGeolocationManagerProxy::initializeProvider):
        (WebKit::WebGeolocationManagerProxy::providerDidChangePosition):
        (WebKit::WebGeolocationManagerProxy::providerDidFailToDeterminePosition):
        (WebKit::WebGeolocationManagerProxy::didReceiveMessage):
        (WebKit::WebGeolocationManagerProxy::startUpdating):
        (WebKit::WebGeolocationManagerProxy::stopUpdating):
        * UIProcess/WebGeolocationManagerProxy.h: Added.
        (WebKit::WebGeolocationManagerProxy::clearContext):
        (WebKit::WebGeolocationManagerProxy::type):
        * UIProcess/WebGeolocationManagerProxy.messages.in: Added.
        * UIProcess/WebGeolocationProvider.cpp: Added.
        (WebKit::WebGeolocationProvider::startUpdating):
        (WebKit::WebGeolocationProvider::stopUpdating):
        * UIProcess/WebGeolocationProvider.h: Added.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        * WebProcess/Geolocation: Added.
        * WebProcess/Geolocation/WebGeolocationManager.cpp: Added.
        (WebKit::WebGeolocationManager::WebGeolocationManager):
        (WebKit::WebGeolocationManager::~WebGeolocationManager):
        (WebKit::WebGeolocationManager::didReceiveMessage):
        (WebKit::WebGeolocationManager::registerWebPage):
        (WebKit::WebGeolocationManager::unregisterWebPage):
        (WebKit::WebGeolocationManager::didChangePosition):
        (WebKit::WebGeolocationManager::didFailToDeterminePosition):
        * WebProcess/Geolocation/WebGeolocationManager.h: Added.
        * WebProcess/Geolocation/WebGeolocationManager.messages.in: Added.
        * WebProcess/WebCoreSupport/WebGeolocationClient.cpp: Added.
        (WebKit::WebGeolocationClient::geolocationDestroyed):
        (WebKit::WebGeolocationClient::startUpdating):
        (WebKit::WebGeolocationClient::stopUpdating):
        (WebKit::WebGeolocationClient::setEnableHighAccuracy):
        (WebKit::WebGeolocationClient::lastPosition):
        (WebKit::WebGeolocationClient::requestPermission):
        (WebKit::WebGeolocationClient::cancelPermissionRequest):
        * WebProcess/WebCoreSupport/WebGeolocationClient.h: Added.
        (WebKit::WebGeolocationClient::WebGeolocationClient):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::geolocationManager):
        Pipe geolocation positions/errors from the UIProcess to the WebProcess.

        * DerivedSources.make:
        * DerivedSources.pro:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Common.vsprops:
         * win/WebKit2Generated.make:
        Add new files.

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

        GTK+ build fix. Continue to fix 'make dist.'

        * GNUmakefile.am: Remove more non-existent files from the WebKit2 build.

2011-01-10  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Remove webkit2 files that are still not added to the
        repository from the makefile
        https://bugs.webkit.org/show_bug.cgi?id=52145

        This change is required for the release, we can add the lines
        again to the makefiles with the patches adding the files.

        * GNUmakefile.am:

2011-01-10  Andreas Kling  <kling@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] [WK2] MiniBrowser does not load pages opened in new windows
        https://bugs.webkit.org/show_bug.cgi?id=52111

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::context): Implement this method.

2011-01-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/8839498> Assertion failure in KURL::KURL when calling WKURLRequestCreateWithWKURL with a non-parsed URL
        https://bugs.webkit.org/show_bug.cgi?id=52132

        * Shared/API/c/WKURLRequest.cpp:
        (WKURLRequestCreateWithWKURL): Parse the URL.
        * Shared/WebString.h: Fixed a comment.
        * Shared/WebURL.h: Ditto.

2011-01-09  Amruth Raj  <amruthraj@motorola.com> and Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com>

        Reviewed by Martin Robinson.

        Changes to add Process Launcher and Thread Launcher implementation to the WebKit2 GTK port.
        The main() implementation for WebKitWebProcess binary to launch Web process from UI process.
        https://bugs.webkit.org/show_bug.cgi?id=48511

        * UIProcess/Launcher/gtk: Added.
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp: Added. GTK (UNIX_X11 specific) implementation
        (WebKit::ProcessLauncher::launchProcess):
        (WebKit::ProcessLauncher::terminateProcess):
        (WebKit::ProcessLauncher::platformInvalidate):
        * UIProcess/Launcher/gtk/ThreadLauncherGtk.cpp: Added. Stubbed implementation for GTK port. Yet to implement.
        (WebKit::ThreadLauncher::createWebThread):
        * WebProcess/gtk: Added.
        * WebProcess/gtk/WebProcessGtk.cpp: Added. The stubbed implementations of virtual functions of WebProcess.h for GTK port.
        (WebKit::WebProcess::platformSetCacheModel):
        (WebKit::WebProcess::platformClearResourceCaches):
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::platformShutdown):
        * WebProcess/gtk/WebProcessMainGtk.cpp: Added. The WebProcessMain call which initiates the Web Process for GTK port.
        (WebKit::WebProcessMainGtk):
        * WebProcess/gtk/WebProcessMainGtk.h: Added. The WebProcessMain declaration for Web Process for GTK port.
        * gtk/MainGtk.cpp: Added. The main function implementation for binary WebKitWebProcess.
        (main):

2011-01-07 Amruth Raj  <amruthraj@motorola.com> and Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com>

        Reviewed by Martin Robinson.

        [GTK] WebKit2 GNUmakefile is out of date from trunk
        https://bugs.webkit.org/show_bug.cgi?id=51883

        * GNUmakefile.am: Updated sources list as per latest revision
        * Platform/gtk/RunLoopGtk.cpp:
        (RunLoop::TimerBase::start):
        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::scheduleWorkAfterDelay):
        * Shared/gtk/BackingStoreGtk.cpp:
        (WebKit::BackingStore::paint):
        * WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        (WebKit::InjectedBundle::load):
        * WebProcess/Plugins/Netscape/gtk/NetscapePluginGtk.cpp:
        (WebKit::NetscapePlugin::platformInvalidate):

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

        Reviewed by Sam Weinig.

        <rdar://problem/8812759> In WebKit2, PDF view settings (mode and scale) do not stick
        https://bugs.webkit.org/show_bug.cgi?id=52118

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::encode): Encode the double values map.
        (WebKit::WebPreferencesStore::decode): Decode the double values map.
        (WebKit::defaultValueForKey): Added double instance.
        (WebKit::WebPreferencesStore::setDoubleValueForKey): Added.
        (WebKit::WebPreferencesStore::getDoubleValueForKey): Added.
        * Shared/WebPreferencesStore.h: Added PDFScaleFactor and PDFDisplayMode preferences.
        * UIProcess/API/mac/PDFViewController.mm:
        (-[WKPDFView initWithFrame:PDFViewController:WebKit::]): Initialize the _pdfViewController ivar.
        (-[WKPDFView invalidate]): Changed 'nil' to '0' in assignment to a non-Objective-C pointer.
        (-[WKPDFView setDocument:]): Added.
        (-[WKPDFView _applyPDFPreferences]): Added.
        (-[WKPDFView _updatePreferences:]): Added.
        (-[WKPDFView _updatePreferencesSoon]): Added.
        (-[WKPDFView _scaleOrDisplayModeOrPageChanged:]): Added.
        (-[WKPDFView viewDidMoveToWindow]): Added. Starts observing the PDF view for changes to scale
        and display mode.
        (-[WKPDFView viewWillMoveToWindow:]): Added. Stops observing for changes.
        (WebKit::PDFViewController::setPDFDocumentData): Changed to call throguh -[WKPDFView setDocument:].
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::updateDoubleValueForKey): Added.
        * UIProcess/WebPreferences.h:
        * UIProcess/cf/WebPreferencesCF.cpp:
        (WebKit::WebPreferences::platformUpdateDoubleValueForKey): Added empty implementation.
        * UIProcess/gtk/WebPreferencesGtk.cpp:
        (WebKit::WebPreferences::platformUpdateDoubleValueForKey): Added stub.
        * UIProcess/mac/WebPreferencesMac.mm:
        (WebKit::setDoubleValueIfInUserDefaults): Added.
        (WebKit::WebPreferences::platformUpdateDoubleValueForKey): Added.
        * UIProcess/qt/WebPreferencesQt.cpp:
        (WebKit::WebPreferences::platformUpdateDoubleValueForKey): Added.

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

        Reviewed by Maciej Stachowiak.

        In WebKit2, page zooming does not work with PDF
        https://bugs.webkit.org/show_bug.cgi?id=52113

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSupportsTextZoom): Added. Returns whether the page currently supports text-only zoom.
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/mac/PDFViewController.h: Made pdfDocumentClass() private and declared new
        member functions.
        * UIProcess/API/mac/PDFViewController.mm:
        (WebKit::PDFViewController::zoomFactor): Added.
        (WebKit::PDFViewController::setZoomFactor): Added.
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::customRepresentationZoomFactor): Added. Calls through to the WKView.
        (WebKit::PageClientImpl::setCustomRepresentationZoomFactor): Ditto.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _customRepresentationZoomFactor]): Added. Calls through to the PDFViewController.
        (-[WKView _setCustomRepresentationZoomFactor:]): Ditto.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/API/qt/qwkpage_p.h:
        (QWKPagePrivate::customRepresentationZoomFactor): Added.
        (QWKPagePrivate::setCustomRepresentationZoomFactor): Added.
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Coding style fix.
        (WebKit::WebPageProxy::supportsTextZoom): Added. Returns false if the main frame has a custom
        representation or is a standalone image, true otherwise.
        (WebKit::WebPageProxy::setTextZoomFactor): Bail out if the main frame has a custom representation.
        (WebKit::WebPageProxy::pageZoomFactor): If the main frame has a custom representation, get the
        zoom factor from the page client.
        (WebKit::WebPageProxy::setPageZoomFactor): If the main frame has a custom representation, have
        the client set the zoom factor.
        (WebKit::WebPageProxy::setPageAndTextZoomFactors): Ditto.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::textZoomFactor): Changed to return 1 if the main frame has a custom
        representation.
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::customRepresentationZoomFactor): Added.
        (WebKit::WebView::setCustomRepresentationZoomFactor): Added.
        * UIProcess/win/WebView.h:

2011-01-08  Jeff Miller  <jeffm@apple.com>

        Reviewed by Jon Honeycutt.

        Add WKBundleFrameGetVisibleContentBounds().
        https://bugs.webkit.org/show_bug.cgi?id=52089

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

2011-01-08  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] QWKView does not propagate show and hide events to the drawing area
        https://bugs.webkit.org/show_bug.cgi?id=52108

        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::event): Call setPageIsVisible on the drawing area
        if the event is Show or Hide.

2011-01-08  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][Symbian] Make sure WebKit headers are included before platform headers on Symbian
        https://bugs.webkit.org/show_bug.cgi?id=31273

        On Symbian PREPEND_INCLUDEPATH is the best way to make sure that WebKit headers
        are included before platform headers. On all other platforms continue to use
        INCLUDEPATH (as before).

        * WebKit2.pro:

2011-01-08  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][WK2] Unreviewed buildfix after r75313.

        * Scripts/generate-forwarding-headers.pl:

2011-01-08  Adam Barth  <abarth@webkit.org>

        Moving WebCore changes the layout of the Qt build directory as well,
        which means we need to change where we look for these generated files.

        * DerivedSources.pro:

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

        Rubber-stamped by Eric Seidel.

        Move WebCore to Source
        https://bugs.webkit.org/show_bug.cgi?id=52050

        * WebKit2.pro:

2011-01-07  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Geoff Garen.

        <rdar://problem/8649617> Migrate memory tracking from Safari to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=50799 Add Memory Sampler to WebKit
        
        Add a sampler for printing off process memory statistics.
        This tool can track:
                
                WebCore
                   - FastMalloc allocations bytes              (in use or committed)
                JavaScriptCore
                   - Garbage collector heap bytes              (in use or committed)
                   - Stack bytes                               (committed only!)
                   - JIT Code bytes                            (committed only!)
                Malloc zones
                   - In use bytes for the following zones:
                       * Default zone                          (in use or committed)
                       * DispCon zone                          (in use or committed)
                       * Purgable zone                         (in use or committed)
                Task Info
                   - Resident size memory (RSIZE)
        
                Data collected is dumped to a temporary file.
        
        Create a sandbox for a temporary file.
        * Shared/SandboxExtension.h:
        (WebKit::SandboxExtension::createHandleForTemporaryFile):
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::createHandleForTemporaryFile):
        
        Memory Sampler files
        
        * Shared/WebMemorySampler.cpp: Added.
        (WebKit::WebMemorySampler::shared):
        (WebKit::WebMemorySampler::WebMemorySampler):
        (WebKit::WebMemorySampler::start):
        (WebKit::WebMemorySampler::initializeTimers):
        (WebKit::WebMemorySampler::stop):
        (WebKit::WebMemorySampler::isRunning):
        (WebKit::WebMemorySampler::initializeTempLogFile):
        (WebKit::WebMemorySampler::initializeSandboxedLogFile):
        (WebKit::WebMemorySampler::writeHeaders):
        (WebKit::WebMemorySampler::sampleTimerFired):
        (WebKit::WebMemorySampler::stopTimerFired):
        (WebKit::WebMemorySampler::appendCurrentMemoryUsageToFile):
        * Shared/WebMemorySampler.h: Added.
        * Shared/mac/WebMemorySampler.mac.mm: Added.
        (WebKit::WebMemorySampler::sampleSystemMalloc):
        (WebKit::WebMemorySampler::sampleProcessCommittedBytes):
        (WebKit::WebMemorySampler::processName):
        (WebKit::WebMemorySampler::sampleWebKit):
        
        API to start and stop UIProcess and WebProcess sampling.
        
        * UIProcess/API/C/WKContext.cpp:
        (WKContextStartMemorySampler):
        (WKContextStopMemorySampler):
        * UIProcess/API/C/WKContext.h:
        
        Send messages to WebProcess to start and stop memory sampling.
        
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::processDidFinishLaunching):
        (WebKit::WebContext::startMemorySampler):
        (WebKit::WebContext::stopMemorySampler):
        * UIProcess/WebContext.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::startMemorySampler):
        (WebKit::WebProcess::stopMemorySampler):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2011-01-07  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Dan Bernstein.

        WebKit2: Need WKBundleFrameCopyProvisionalURL
        https://bugs.webkit.org/show_bug.cgi?id=52083

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameCopyProvisionalURL):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::provisionalURL):
        Grab the URL from the provisional document loader.
        * WebProcess/WebPage/WebFrame.h:

2011-01-07  James Robinson  <jamesr@chromium.org>

        Revert "Implement mozilla's animationTime property"
        https://bugs.webkit.org/show_bug.cgi?id=51952

        This approach isn't quite right.

        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
        (WebKit::ChunkedUpdateDrawingArea::display):
        (WebKit::ChunkedUpdateDrawingArea::setSize):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::drawRect):
        * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm:
        (WebKit::LayerBackedDrawingArea::syncCompositingLayers):

2011-01-07 Amruth Raj  <amruthraj@motorola.com> and Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com>

        Reviewed by Martin Robinson.

        [GTK] WebKit2 GNUmakefile is out of date from trunk
        Adding new stub files for compiling on latest revision
        https://bugs.webkit.org/show_bug.cgi?id=51883

        * UIProcess/gtk: Added.
        * UIProcess/gtk/TextCheckerGtk.cpp: Added.
        (WebKit::TextChecker::state):
        (WebKit::TextChecker::isContinuousSpellCheckingAllowed):
        (WebKit::TextChecker::setContinuousSpellCheckingEnabled):
        (WebKit::TextChecker::setGrammarCheckingEnabled):
        (WebKit::TextChecker::uniqueSpellDocumentTag):
        (WebKit::TextChecker::closeSpellDocumentWithTag):
        (WebKit::TextChecker::checkTextOfParagraph):
        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
        (WebKit::TextChecker::getGuessesForWord):
        (WebKit::TextChecker::learnWord):
        (WebKit::TextChecker::ignoreWord):
        * UIProcess/gtk/WebInspectorGtk.cpp: Added.
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        (WebKit::WebInspectorProxy::platformOpen):
        (WebKit::WebInspectorProxy::platformClose):
        (WebKit::WebInspectorProxy::inspectorPageURL):
        * UIProcess/gtk/WebPageProxyGtk.cpp: Added.
        (WebKit::WebPageProxy::standardUserAgent):
        * UIProcess/gtk/WebPreferencesGtk.cpp: Added.
        (WebKit::WebPreferences::platformInitializeStore):
        (WebKit::WebPreferences::platformUpdateStringValueForKey):
        (WebKit::WebPreferences::platformUpdateBoolValueForKey):
        (WebKit::WebPreferences::platformUpdateUInt32ValueForKey):
        * WebProcess/WebCoreSupport/gtk/WebContextMenuClientGtk.cpp: Added.
        (WebKit::WebContextMenuClient::lookUpInDictionary):
        (WebKit::WebContextMenuClient::isSpeaking):
        (WebKit::WebContextMenuClient::speak):
        (WebKit::WebContextMenuClient::stopSpeaking):
        * WebProcess/WebCoreSupport/gtk/WebDatabaseManagerGtk.cpp: Added.
        (WebKit::WebDatabaseManager::databaseDirectory):
        * WebProcess/WebCoreSupport/gtk/WebPopupMenuGtk.cpp: Added.
        (WebKit::WebPopupMenu::setUpPlatformData):
        * WebProcess/WebPage/gtk: Added.
        * WebProcess/WebPage/gtk/WebInspectorGtk.cpp: Added.
        (WebKit::WebInspector::localizedStringsURL):

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

        Don't ever call ::SetCursor(0)

        Doing so makes the cursor disappear from the screen.

        Fixes <http://webkit.org/b/52024> Mouse cursor flashes when moving it
        around a WKView before the web process has finished launching

        Reviewed by Jon Honeycutt.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::onSetCursor): If we don't have a cursor to set, just
        let Windows do its default thing (which is to set the cursor to the
        window class's cursor, which in our case is the arrow cursor).
        (WebKit::WebView::cursorToShow): Just return 0 when the page has
        crashed so that we'll show the default cursor (which is the arrow
        cursor). This change has no visible effect, but seems slightly better
        conceptually.
        (WebKit::WebView::updateNativeCursor): Don't do anything if we don't
        have a cursor to set.

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

        Fill the WKView with white when the web process hasn't drawn anything
        yet

        Fixes <http://webkit.org/b/52023> WKView accumulates pixel garbage
        before web process has had a chance to draw anything (if Aero is
        disabled)

        Reviewed by Jon Honeycutt.

        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::paint):
        * UIProcess/ChunkedUpdateDrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/LayerBackedDrawingAreaProxy.cpp:
        (WebKit::LayerBackedDrawingAreaProxy::paint):
        * UIProcess/LayerBackedDrawingAreaProxy.h:
        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::paint):
        * UIProcess/TiledDrawingAreaProxy.h:
        * UIProcess/mac/ChunkedUpdateDrawingAreaProxyMac.mm:
        (WebKit::ChunkedUpdateDrawingAreaProxy::platformPaint):
        * UIProcess/qt/ChunkedUpdateDrawingAreaProxyQt.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::platformPaint):
        * UIProcess/win/ChunkedUpdateDrawingAreaProxyWin.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::platformPaint):
        * UIProcess/win/LayerBackedDrawingAreaProxyWin.cpp:
        (WebKit::LayerBackedDrawingAreaProxy::paint):
        Changed these functions to return a boolean indicating whether we
        actually painted anything.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::onPaintEvent): Fill with white (and don't call
        didDraw) when the DrawingAreaProxy isn't able to paint.

2011-01-06  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Jon Honeycutt.

        WebKit2: Need WKBundlePagePrivate equivalent of WebKit1's WebViewPrivate's setDefersCallbacks
        https://bugs.webkit.org/show_bug.cgi?id=52038

        The implementation of WebKit1's WebViewPrivate's setDefersCallbacks on both Windows and Mac
        calls WebCore::Page::setDefersLoading.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetDefersLoading):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setDefersLoading):
        * WebProcess/WebPage/WebPage.h:

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

        Reviewed by Darin Adler.

        <rdar://problem/8261624> and https://bugs.webkit.org/show_bug.cgi?id=47355
        Change WebKit2 session restoring to restore the full back/forward list.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::registerNewWebBackForwardListItem): Let the UIProcess register its own
          WebBackForwardListItems in its ID map upon creation.
        * UIProcess/WebProcessProxy.h:

        * UIProcess/cf/WebPageProxyCF.cpp:
        (WebKit::WebPageProxy::restoreFromSessionStateData): Register each new list entry in the
          UIProcess ID map.

        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::addItemFromUIProcess): Add this method to register UIProcess
          created items without doing any of the other work normally associated with adding a new back/forward item
          (such as notifying the UIProcess).
        * WebProcess/WebPage/WebBackForwardListProxy.h:

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::restoreSession): Map all of the back/forward list entries from the UIProcess then
          cause a load of the current entry.

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

        Always show the arrow cursor when the web process has crashed

        Fixes <http://webkit.org/b/52006> WKView shows a stale cursor when the
        web process crashes

        Reviewed by Ada Chan.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::processDidCrash):
        (WebKit::WebView::didRelaunchProcess):
        Update the cursor to reflect the new state.

        (WebKit::WebView::cursorToShow): Always show the arrow cursor when the
        web process has crashed.

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

        Reduce code duplication in WebView::updateNativeCursor

        Fixes <http://webkit.org/b/52005> It's not easy to add new behavior to
        WebView::updateNativeCursor

        Reviewed by Ada Chan.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::cursorToShow): Moved code to choose a cursor here...
        (WebKit::WebView::updateNativeCursor): ...from here.

        * UIProcess/win/WebView.h: Added cursorToShow.

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

        Make WKView fill with white when the web process has crashed

        Previously we would just draw whatever we had last drawn into the
        WKView (i.e., a stale picture of the web page), which was confusing
        (because the web page would mysteriously not respond to input) and ugly
        (because it wouldn't behave properly if the window was resized).

        Fixes <http://webkit.org/b/52004> WKView keeps painting a stale
        picture of the web page when the web process crashes

        Reviewed by Ada Chan.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::onPaintEvent): Ported code from -[WKView drawRect:]
        to fill with white if the page is invalid or has no DrawingArea. As a
        bonus, also ported the call to WebPageProxy::didDraw from that method.

        (WebKit::WebView::processDidCrash):
        (WebKit::WebView::didRelaunchProcess):
        Invalidate our window so that we'll redraw with white or the new page.

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

        Make WKViews work on Windows after a crashed web process gets relaunched

        Fixes <http://webkit.org/b/52001> Relaunching the web process fails to
        revivify WKViews on Windows

        Reviewed by Ada Chan.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::didRelaunchProcess): Implemented by porting code from
        -[WKView _didRelaunchProcess].

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

        Remove WebView::m_rect

        It was only used in the constructor, and wasn't even kept up-to-date as
        the WebView's size changed.

        Fixes <http://webkit.org/b/52000> WebView::m_rect is unnecessary

        Reviewed by Ada Chan.

        * UIProcess/win/WebView.cpp:
        * UIProcess/win/WebView.h:

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

        Reviewed by Ada Chan.

        WebKit2: Should be able to call into injected bundle to ask if we should allow resource loads
        https://bugs.webkit.org/show_bug.cgi?id=51969
        
        Add the ability to call into the injected bundle to ask if we should allow resource loads.
        If the injected bundle says we should cancel, we clear out the ResourceRequest that was
        passed into willSendRequest, which cancels the resource load.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h: Add the new callback for allowing/cancelling
            resource loads.
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::shouldLoadResourceForFrame): Calls through to the client.
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchWillSendRequest): Ask the InjectedBundlePageLoaderClient if we
            should load the resource or not.

2011-01-06  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Add APIs to WKBundleFrame to get content bounds and scroll offset
        https://bugs.webkit.org/show_bug.cgi?id=51968

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameGetContentBounds):
        (WKBundleFrameGetScrollOffset):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
        Add WKBundleFrameGetContentBounds() and WKBundleFrameGetScrollOffset().

2011-01-06  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        Implement mozilla's animationTime property
        https://bugs.webkit.org/show_bug.cgi?id=51952

        Tells the page to clear the current animation time after producing a frame.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::drawRect):
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
        (WebKit::ChunkedUpdateDrawingArea::display):
        (WebKit::ChunkedUpdateDrawingArea::setSize):
        * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm:
        (WebKit::LayerBackedDrawingArea::syncCompositingLayers):

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

        Redo the half-done rename from the last check-in.
        Sorry for the broken build last night.

        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::removeItem): Renamed.
        * WebProcess/WebPage/WebBackForwardListProxy.h: Updated
        for new name.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didRemoveBackForwardItem): Updated to
        use the new name.

2011-01-06  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Dan Bernstein.

        Fix build for Darin's previous change w/ the obvious renaming.

        * WebProcess/WebPage/WebBackForwardListProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didRemoveBackForwardItem):

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

        Reviewed by Geoff Garen.

        Back/Forward entries in WebKit2 leak
        https://bugs.webkit.org/show_bug.cgi?id=51983

        Besides fixing the leak, this also fixes a problem where
        all history items were sent over to the UI process, but
        we wanted to send only back/forward items.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::pageClosed): Added.
        Tells the web process about all the back/forward
        items being removed.
        (WebKit::WebBackForwardList::addItem): Ditto.
        Also removed a redundant call to didChangeBackForwardList.
        (WebKit::WebBackForwardList::clear): Ditto.

        * UIProcess/WebBackForwardList.h: Added pageClosed.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close): Added a call to pageClosed.
        (WebKit::WebPageProxy::backForwardRemovedItem): Added.
        Sends a message to the web page in the web process.

        * UIProcess/WebPageProxy.h: Added backForwardRemovedItem.

        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::updateBackForwardItem): Added an itemID argument,
        since callers will now be getting it and we don't want to
        get it twice. Removed the code to generate an ID. Also
        removed some local variables to make the code a little
        tighter and clearer.
        (WebKit::WK2NotifyHistoryItemChanged): Only call
        updateBackForwardItem for items that already have IDs.
        We don't want to send cross-process messages for every
        history item; just the ones that are top level back/forward
        items.
        (WebKit::WebBackForwardListProxy::removeItem):
        Added. For use when the UI process tells us to remove it.
        (WebKit::WebBackForwardListProxy::addItem): Added code to
        assign an ID and put this item into the maps. This is called
        exactly once on each back/forward item.

        * WebProcess/WebPage/WebBackForwardListProxy.h: Added
        removeItem.

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

        * WebProcess/WebPage/WebPage.h: Added didRemoveBackForwardItem.

        * WebProcess/WebPage/WebPage.messages.in: Added
        DidRemoveBackForwardItem message.

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

        Reviewed by Darin Adler.

        Debug and Release builds on Windows clobber each other
        https://bugs.webkit.org/show_bug.cgi?id=49185

        Changes the structure of WebKitBuild build products directory so we
        completely separate each build configuration into independent directories.
        
        Although we previously had per-configuration directories for obj, this change adds
        per-configuration directories for bin, lib, obj, and include. Each configuration's
        build products are stored within a directory inside of WebKitBuild.
        
        Most use of $(WebKitOutputDir) in the build files has been replaced by $(ConfigurationBuildDir),
        defined in common.vsprops to be $(WebKitOutputDir)\$(ConfigurationName).

        * win/WebKit2.make:
        * win/WebKit2.vcproj:
        * win/WebKit2Common.vsprops:
        * win/WebKit2Generated.make:
        * win/WebKit2GeneratedCommon.vsprops:
        * win/WebKit2WebProcessPostBuild.cmd:
        * win/WebKit2WebProcessPreBuild.cmd:
        * win/WebKitPostBuild.cmd:
        * win/WebKitPreBuild.cmd:

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

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=51973
        Make main frame PDF printing work

        * UIProcess/API/mac/PDFViewController.h:
        * UIProcess/API/mac/PDFViewController.mm: (WebKit::PDFViewController::makePrintOperation):
        Ask PDFDocument to create an NSPrintOperation.

        * UIProcess/API/mac/WKView.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView printOperationWithPrintInfo:forFrame:]): Create a new NSPrintOperation, either
        from scratch or from a PDF view.
        (-[WKView canPrintHeadersAndFooters]): Report if the view can be re-paginated to add headers
        and footers.

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

        Reviewed by Sam Weinig.

        <rdar://problem/8750248>
        Need a way to create a new DownloadProxy from an arbitrary resource request

        <rdar://problem/8750465>
        Need a way to start a download in WKDownload
        
        <rdar://problem/8752204>
        WK2 Context Menus - "Save linked file" support

        * Shared/ContextMenuState.h: Added.
        Add a ContextMenuState struct which contains state for context menus.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextDownloadURLRequest):
        Call WebContext::download.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::download):
        Send a DownloadRequest message to the web process.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showContextMenu):
        Set the active context menu state.

        (WebKit::WebPageProxy::contextMenuItemSelected):
        Handle ContextMenuItemTagDownloadImageToDisk and ContextMenuItemTagDownloadLinkToDisk by calling
        WebContext::Download, passing the respective URLs.

        * UIProcess/WebPageProxy.messages.in:
        ShowContextMenu now takes state as well.

        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::downloadURL):
        Assert that this is never reached; downloads are handled in the UI process.

        * WebProcess/WebPage/WebContextMenu.cpp:
        (WebKit::WebContextMenu::show):
        Pass the context menu state along when sending the ShowContextMenu message.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::downloadRequest):
        Call the shared DownloadManager.

        * WebProcess/WebProcess.messages.in:
        Add DownloadRequest message.

        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Add ContextMenuState.h.

2011-01-05  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed build fix.

        [Qt] [Symbian] Fix building NPAPI support

        NPEvent is mapped to QAction on Symbian. QAction has no
        default constructor, so toNP() fails to build. Add a case for
        Symbian behind the OS(SYMBIAN) guard.

        * WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp:
        (WebKit::toNP):

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

        Reviewed by Dan Bernstein.

        Copy WKImageCG.h to include\WebKit2 in build output
        https://bugs.webkit.org/show_bug.cgi?id=51944

        * win/WebKit2Generated.make:
        Add xcopy command to copy WKImageCG.h.

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

        Reviewed by Sam Weinig.

        Part of <rdar://problem/8261624> and https://bugs.webkit.org/show_bug.cgi?id=47355
        Change WebKit2 session restoring to restore the full back/forward list

        Add a new message to tell the WebProcess to restore a session state:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::restoreSession):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Add the new message, AND fix the intentional misspellings.
        
        Also, Sam sucks.

        Change WebProcess back/forward list item ids to be odd (UIProcess's will be even):
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::generateHistoryItemID):

        Provide accessors to the entries in the list to pass to the WebProcess:
        * UIProcess/WebBackForwardList.h:
        (WebKit::WebBackForwardList::entries):
        (WebKit::WebBackForwardList::currentIndex):

        Add decoding of the saved back/forward list itmes (we already encode them):
        * UIProcess/cf/WebBackForwardListCF.cpp:
        (WebKit::generateWebBackForwardItemID):
        (WebKit::WebBackForwardList::restoreFromCFDictionaryRepresentation):

        Instead of loading the current URL, pass the entire last back to the WebProcess:
        * UIProcess/cf/WebPageProxyCF.cpp:
        (WebKit::WebPageProxy::restoreFromSessionStateData):

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=51953
        Add a "SessionState" object for IPC messaging.

        This object includes all data necessary to restore a session state;
        For now, this is just the back/forward list to restore.

        * Shared/SessionState.cpp: Added.
        (WebKit::SessionState::SessionState):
        (WebKit::SessionState::encode):
        (WebKit::SessionState::decode):
        * Shared/SessionState.h: Added.
        (WebKit::SessionState::list):
        (WebKit::SessionState::currentIndex):

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2011-01-05  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed build fix.

        Include unistd.h for _exit() for non-Windows builds.

        Build break noticed on QtWebkit Symbian builds.

        * Shared/ChildProcess.cpp:

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=51949
        Make WebBackForwardListItem shared, and add encoders and decoders

        * Shared/WebBackForwardListItem.cpp: Copied from UIProcess/WebBackForwardListItem.cpp.
        (WebKit::WebBackForwardListItem::encode):
        (WebKit::WebBackForwardListItem::decode):
        * Shared/WebBackForwardListItem.h: Copied from UIProcess/WebBackForwardListItem.h.
        * UIProcess/WebBackForwardListItem.cpp: Removed.
        * UIProcess/WebBackForwardListItem.h: Removed.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

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

        Reviewed by Sam Weinig.

        Handle smart insert/delete
        https://bugs.webkit.org/show_bug.cgi?id=51946

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        Add isSmartInsertDelete enabled.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView validateUserInterfaceItem:]):
        Handle toggleSmartInsertDelete:.

        (-[WKView toggleSmartInsertDelete:]):
        Toggle the smart insert/delete state.

        * UIProcess/TextChecker.h:
        Add isSmartInsertDeleteEnabled and setSmartInsertDeleteEnabled.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        Initialize m_isSmartInsertDeleteEnabled.

        (WebKit::WebPageProxy::contextMenuItemSelected):
        Handle ContextMenuItemTagSmartCopyPaste.

        (WebKit::WebPageProxy::setSmartInsertDeleteEnabled):
        Update the state and send a SetSmartInsertDeleteEnabled message.

        (WebKit::WebPageProxy::creationParameters):
        Initialize isSmartInsertDeleteEnabled.

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isSmartInsertDeleteEnabled):
        Return m_isSmartInsertDeleteEnabled.

        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::isSmartInsertDeleteEnabled):
        (WebKit::TextChecker::setSmartInsertDeleteEnabled):
        Store and fetch the smart insert delete state.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::smartInsertDeleteEnabled):
        Call WebPage::isSmartInsertDeleteEnabled.

        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::toggleSmartInsertDelete):
        Assert that this is never called.

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

        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::isSmartInsertDeleteEnabled):
        (WebKit::WebPage::setSmartInsertDeleteEnabled):
        Add getter and setter.

        * WebProcess/WebPage/WebPage.messages.in:
        Add SetSmartInsertDeleteEnabled message.

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

        Fix Windows build.
        
        * WebProcess/WebPage/WebPage.cpp:

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

        Reviewed by Adele Peterson.

        Implement word transformation
        https://bugs.webkit.org/show_bug.cgi?id=51943

        * UIProcess/API/mac/WKView.mm:
        (-[WKView validateUserInterfaceItem:]):
        Handle the word transformation selectors.

        (-[WKView uppercaseWord:]):
        (-[WKView lowercaseWord:]):
        (-[WKView capitalizeWord:]):
        Call down to the WebPageProxy.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::uppercaseWord):
        (WebKit::WebPageProxy::lowercaseWord):
        (WebKit::WebPageProxy::capitalizeWord):
        Send messages to the WebPage.

        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::changeWordCase):
        Add helper function.

        (WebKit::WebEditorClient::uppercaseWord):
        (WebKit::WebEditorClient::lowercaseWord):
        (WebKit::WebEditorClient::capitalizeWord):
        Call helper function.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::changeSpellingToWord):
        Call replaceSelectionWithText.

        (WebKit::WebPage::uppercaseWord):
        (WebKit::WebPage::lowercaseWord):
        (WebKit::WebPage::capitalizeWord):
        Call the editor functions.

        (WebKit::WebPage::replaceSelectionWithText):
        New helper function that replaces the selected string with another string.

        * WebProcess/WebPage/WebPage.messages.in:
        Add new messages.

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

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=51935
        Add WebKit2 API for largest frame

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetFrameSetLargestFrame):
        * UIProcess/API/C/WKPage.h:

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

        Reviewed by Sam Weinig.

        More work on spelling
        https://bugs.webkit.org/show_bug.cgi?id=51939

        * UIProcess/API/mac/WKView.mm:
        (-[WKView validateUserInterfaceItem:]):
        Handle changeSpelling: as well.

        (-[WKView showGuessPanel:]):
        Show or hide the guess panel.

        (-[WKView checkSpelling:]):
        Pass false to advanceToNextMisspelling.

        (-[WKView changeSpelling:]):
        Call changeSpellingToWord.

        * UIProcess/TextChecker.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        Initialize m_pendingLearnOrIgnoreWordMessageCount.

        (WebKit::WebPageProxy::contextMenuItemSelected):
        Handle smart toggles directly in the UI process, keep track of whether
        we're asked to learn or ignore a word.

        (WebKit::WebPageProxy::advanceToNextMisspelling):
        Pass the boolean through.

        (WebKit::WebPageProxy::changeSpellingToWord):
        Send a ChangeSpellingToWord message.

        (WebKit::WebPageProxy::learnWord):
        (WebKit::WebPageProxy::ignoreWord):
        Check that we do have a pending learn or ignore word message. Call through to
        the text checker.

        (WebKit::WebPageProxy::processDidCrash):
        Reset the m_pendingLearnOrIgnoreWordMessageCount variable.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        Add new messages.

        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::learnWord):
        (WebKit::TextChecker::ignoreWord):
        Implement in terms of NSSpellChecker.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::ignoreWordInSpellDocument):
        (WebKit::WebEditorClient::learnWord):
        Send IgnoreWord and LearnWord messages.

        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::toggleAutomaticQuoteSubstitution):
        (WebKit::WebEditorClient::toggleAutomaticLinkDetection):
        (WebKit::WebEditorClient::toggleAutomaticDashSubstitution):
        (WebKit::WebEditorClient::toggleAutomaticTextReplacement):
        Add assertions.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::advanceToNextMisspelling):
        Pass the bool along to the Editor.

        (WebKit::WebPage::changeSpellingToWord):
        Replace the selected text.

        * WebProcess/WebPage/WebPage.messages.in:
        Add new ChangeSpellingToWord message and add a boolean to AdvanceToNextMisspelling.

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

        Reviewed by Dan Bernstein.

        Keep track of active text substitution preferences
        https://bugs.webkit.org/show_bug.cgi?id=51931

        * Shared/TextCheckerState.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView validateUserInterfaceItem:]):
        Handle new selectors, mostly copied from WebKit1 code.

        (-[WKView orderFrontSubstitutionsPanel:]):
        Open the substitution panel.

        (-[WKView isAutomaticQuoteSubstitutionEnabled]):
        (-[WKView setAutomaticQuoteSubstitutionEnabled:]):
        (-[WKView toggleAutomaticQuoteSubstitution:]):
        (-[WKView isAutomaticDashSubstitutionEnabled]):
        (-[WKView setAutomaticDashSubstitutionEnabled:]):
        (-[WKView toggleAutomaticDashSubstitution:]):
        (-[WKView isAutomaticLinkDetectionEnabled]):
        (-[WKView setAutomaticLinkDetectionEnabled:]):
        (-[WKView toggleAutomaticLinkDetection:]):
        (-[WKView isAutomaticTextReplacementEnabled]):
        (-[WKView setAutomaticTextReplacementEnabled:]):
        (-[WKView toggleAutomaticTextReplacement:]):
        Call the text checker, and update the state in the web process if needed.

        * UIProcess/TextChecker.h:
        Add new flags.

        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::initializeState):
        Initialize flags from user defaults.

        (WebKit::TextChecker::setAutomaticQuoteSubstitutionEnabled):
        (WebKit::TextChecker::setAutomaticDashSubstitutionEnabled):
        (WebKit::TextChecker::setAutomaticLinkDetectionEnabled):
        (WebKit::TextChecker::setAutomaticTextReplacementEnabled):
        Update and save the flags.

        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::isAutomaticQuoteSubstitutionEnabled):
        (WebKit::WebEditorClient::isAutomaticLinkDetectionEnabled):
        (WebKit::WebEditorClient::isAutomaticDashSubstitutionEnabled):
        (WebKit::WebEditorClient::isAutomaticTextReplacementEnabled):
        Get the text checker state.

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

        Rubber-stamped by Darin Adler.

        Cleaned up com.apple.WebProcess.sb

        * WebProcess/com.apple.WebProcess.sb: Moved the closing parentheses of multi-line blocks to
        their own lines. Changed to use WebKit-standard 4-space indentation.

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

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=51903
        Tell UI process which subframe is largest

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::frameSetLargestFrame):
        Remember largest frame in frameset pages.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::frameDidBecomeFrameSet): Reset stored largest frame if main frame
        changes to a frameset or back.
        (WebKit::WebPageProxy::frameSetLargestFrameChanged): Store a new largest frame when notified
        of a change.

        * UIProcess/WebPageProxy.messages.in: Added FrameSetLargestFrameChanged.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::area): Calculate area of a frame.
        (WebKit::findLargestFrameInFrameSet): Find largest first-level subframe in a frameset page.
        (WebKit::WebChromeClient::contentsSizeChanged): Recalculate largest frame, and notify UI
        process if it changed.

        * WebProcess/WebCoreSupport/WebChromeClient.h: Store the latest largest frame.

        * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::size):
        * WebProcess/WebPage/WebFrame.h:
        Expose frame size.

2011-01-04  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] [WK2] Add support for non-trivial context menu action
        https://bugs.webkit.org/show_bug.cgi?id=51902

        Implement a call back from the QAction triggered in the UIProcess to the
        action in WebProcess.

        A few basic actions have been implemented based on this feature.

        * UIProcess/API/qt/qwkpage.cpp:
        (contextMenuActionForWebAction):
        (QWKPage::triggerAction):
        (QWKPage::action):
        * UIProcess/API/qt/qwkpage.h:
        * UIProcess/qt/WebContextMenuProxyQt.cpp:
        (WebKit::webActionForContextMenuAction):

2011-01-04  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        Include unistd.h for sleep() for non-Windows builds.

        * WebProcess/WebProcess.cpp:
        * WebProcess/qt/WebProcessMainQt.cpp:

2011-01-04  Brian Weinstein  <bweinstein@apple.com>

        Windows build fix. Change the inline type of consumePermanently.

        * Shared/SandboxExtension.h:
        (WebKit::SandboxExtension::consumePermanently):

2011-01-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/8821203> Sandbox violations trying to access the Safari cache

        * Shared/SandboxExtension.h:
        (WebKit::SandboxExtension::consumePermanently):
        New function which consumes a sandbox extension and destroys it, making it impossible
        to later revoke it.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        Encode and decode the path extension handle.

        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::createHandle):
        Standardize the path before creating the handle.

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        Create a sandbox extension for the cache path.

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        Consume the sandbox extension.

2011-01-04  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::getGuessesForWord):

2011-01-04  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Mouse events in WebKit2 on Windows need to know whether the click activated the WebView to match WebKit1 behavior.
        https://bugs.webkit.org/show_bug.cgi?id=51228

        * Shared/WebEvent.h:
        (WebKit::WebMouseEvent::didActivateWebView):
        Add m_didActivateWebView to WebMouseEvent on Windows.

        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformMouseEvent::WebKit2PlatformMouseEvent):
        Propagate whether the click activated the WebView when converting to a PlatformMouseEvent.

        * Shared/WebMouseEvent.cpp:
        (WebKit::WebMouseEvent::WebMouseEvent):
        Add m_didActivateWebView to WebMouseEvent on Windows.

        (WebKit::WebMouseEvent::encode):
        (WebKit::WebMouseEvent::decode):
        Encode and decode new m_didActivateWebView member variable.

        * Shared/win/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebMouseEvent):
        * Shared/win/WebEventFactory.h:
        Add didActivateWebView parameter to createWebMouseEvent().

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::wndProc):
        (WebKit::WebView::WebView):
        (WebKit::WebView::onMouseEvent):
        * UIProcess/win/WebView.h:
        (WebKit::WebView::setWasActivatedByMouseEvent):
        Keep track of whether the click activated the WebView.

2011-01-04  Ivan Krstić  <ike@apple.com>

        Reviewed and landed by Anders Carlsson.

        <rdar://problem/8602585>
        <rdar://problem/8711641>

        * WebProcess/com.apple.WebProcess.sb:
        Fix a misplaced right parenthesis and add a new system path regex.

2011-01-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        More work on spelling and grammar
        https://bugs.webkit.org/show_bug.cgi?id=51910

        * Scripts/webkit2/messages.py:
        Add special case for WebCore::TextCheckingResult.

        * Shared/NotImplemented.h:
        Fix macro so that defining DISABLE_NOT_IMPLEMENTED_WARNINGS to 0 will enable the warnings.
        
        * Shared/WebCoreArgumentCoders.h:
        Add argument coders for WebCore::GrammarDetail and WebCore::TextCheckingResult.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView checkSpelling:]):
        Call advanceToNextMisspelling.

        * UIProcess/TextChecker.h:
        Add new NSSpellChecker wrappers.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        Initialize the new member variables.

        (WebKit::WebPageProxy::~WebPageProxy):
        Call TextChecker::closeSpellDocumentWithTag.

        (WebKit::WebPageProxy::advanceToNextMisspelling):
        Send the AdvanceToNextMisspelling message.

        (WebKit::WebPageProxy::spellDocumentTag):
        Create a spell document tag if necessary.

        (WebKit::WebPageProxy::checkTextOfParagraph):
        (WebKit::WebPageProxy::updateSpellingUIWithMisspelledWord):
        (WebKit::WebPageProxy::getGuessesForWord):
        Call the TextChecker.
        
        * UIProcess/WebPageProxy.messages.in:
        Add new messages.

        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::uniqueSpellDocumentTag):
        (WebKit::TextChecker::closeSpellDocumentWithTag):
        (WebKit::TextChecker::checkTextOfParagraph):
        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
        (WebKit::TextChecker::getGuessesForWord):
        Add NSSpellChecker wrappers.

        * UIProcess/qt/TextCheckerQt.cpp:
        * UIProcess/win/TextCheckerWin.cpp:
        Add stubs.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::isContinuousSpellCheckingEnabled):
        (WebKit::WebEditorClient::isGrammarCheckingEnabled):
        Get the text checking state from the web process.

        (WebKit::WebEditorClient::updateSpellingUIWithMisspelledWord):
        (WebKit::WebEditorClient::getGuessesForWord):
        Proxy calls to the UI process.

        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::isAutomaticSpellingCorrectionEnabled):
        
        (WebKit::WebEditorClient::checkTextOfParagraph):
        Proxy calls to the UI process.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::advanceToNextMisspelling):
        Call the frame.

        * WebProcess/WebPage/WebPage.messages.in:
        Add AdvanceToNextMisspelling message.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        Set the text checker state.

2011-01-04  Chris Fleizach  <cfleizach@apple.com>

        Unreviewed. Build fix.

        WK2: Support Accessibility
        https://bugs.webkit.org/show_bug.cgi?id=51859

        * WebProcess/WebPage/mac/AccessibilityWebPageObject.mm:

2011-01-04  Chris Fleizach  <cfleizach@apple.com>

        Unreviewed. Build fix.

        WK2: Support Accessibility
        https://bugs.webkit.org/show_bug.cgi?id=51859

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

2011-01-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Sam Weinig.

        WK2: Support Accessibility
        https://bugs.webkit.org/show_bug.cgi?id=51859

        Implement remote accessibility API to support cross process accessibility
        on the Mac platform.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::accessibilityChildTokenReceived):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:contextRef:pageGroupRef:]):
        (-[WKView _updateWindowAndViewFrames]):
        (-[WKView _setAccessibilityChildToken:]):
        (-[WKView accessibilityIsIgnored]):
        (-[WKView accessibilityHitTest:]):
        (-[WKView accessibilityAttributeValue:]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureWebProcess):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::windowAndViewFramesChanged):
        (WebKit::WebPageProxy::didReceiveAccessibilityPageToken):
        (WebKit::WebPageProxy::sendAccessibilityPresenterToken):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::accessibilityRemoteObject):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::windowAndViewFramesChanged):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::accessibilityPosition):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/AccessibilityWebPageObject.h: Added.
        * WebProcess/WebPage/mac/AccessibilityWebPageObject.mm: Added.
        (-[AccessibilityWebPageObject setWebPage:]):
        (-[AccessibilityWebPageObject setRemoteParent:]):
        (-[AccessibilityWebPageObject dealloc]):
        (-[AccessibilityWebPageObject accessibilityIsIgnored]):
        (-[AccessibilityWebPageObject accessibilityAttributeNames]):
        (-[AccessibilityWebPageObject accessibilityIsAttributeSettable:]):
        (-[AccessibilityWebPageObject accessibilitySetValue:forAttribute:]):
        (-[AccessibilityWebPageObject accessibilityActionNames]):
        (-[AccessibilityWebPageObject accessibilityChildren]):
        (-[AccessibilityWebPageObject accessibilityAttributeValue:]):
        (-[AccessibilityWebPageObject accessibilityShouldUseUniqueId]):
        (-[AccessibilityWebPageObject accessibilityHitTest:]):
        (-[AccessibilityWebPageObject accessibilityFocusedUIElement]):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformInitialize):
        (WebKit::WebPage::sendAccessibilityPresenterToken):
        (WebKit::WebPage::accessibilityRemoteObject):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::presenterApplicationPid):
        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain):

2011-01-04  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Get rid of an extra copy in the back/forward item IPC message by using a DataReference.

        * UIProcess/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::WebBackForwardListItem):
        (WebKit::WebBackForwardListItem::setBackForwardData):
        * UIProcess/WebBackForwardListItem.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::dataCallback): Get rid of no-longer-needed check for size 0.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::addBackForwardItem):
        * UIProcess/WebProcessProxy.h:

        * UIProcess/WebProcessProxy.messages.in:

        * WebProcess/WebPage/EncoderAdapter.cpp:
        (WebKit::EncoderAdapter::data):
        * WebProcess/WebPage/EncoderAdapter.h:

        * WebProcess/WebPage/WebBackForwardListProxy.cpp:

2011-01-04  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Store more data per history entry in the session state blob.

        * UIProcess/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::WebBackForwardListItem):
        * UIProcess/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::create):

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::addBackForwardItem):

        * UIProcess/cf/WebBackForwardListCF.cpp:
        (WebKit::WebBackForwardList::createCFDictionaryRepresentation):

        * UIProcess/cf/WebPageProxyCF.cpp:

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

        Reviewed by Brady Eidson.

        Add back/forward encoding and decoding to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=51901

        * GNUmakefile.am: Added new source files.
        * WebKit2.pro: Ditto.
        * WebKit2.xcodeproj/project.pbxproj: Ditto.
        * win/WebKit2.vcproj: Ditto.

        * WebProcess/WebPage/DecoderAdapter.cpp: Added.
        * WebProcess/WebPage/DecoderAdapter.h: Added.
        * WebProcess/WebPage/EncoderAdapter.cpp: Added.
        * WebProcess/WebPage/EncoderAdapter.h: Added.

        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::updateBackForwardItem): Added code to encode the back/forward
        tree and send it along. The code to decode needs to wait on Brady's
        current project.

2011-01-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8766999> WebKit2: Sandboxing causes certificate error on access to any HTTPS URL

        Allow read access to /Library/Preferences/com.apple.security.plist.

        * WebProcess/com.apple.WebProcess.sb:

2011-01-04  Anders Carlsson  <andersca@apple.com>

        Build fixes.

        * UIProcess/qt/TextCheckerQt.cpp:
        * UIProcess/win/TextCheckerWin.cpp:

2011-01-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Don't use macros for the key names.

        * UIProcess/mac/TextCheckerMac.mm:

2011-01-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Send over text checker state to the web process
        https://bugs.webkit.org/show_bug.cgi?id=51896

        * Platform/CoreIPC/Arguments.h:
        Remove 'const' from the argument, this matches all the other Arguments classes.

        * Shared/TextCheckerState.h: Added.
        New class with text checker state.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        Add textCheckerState.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView validateUserInterfaceItem:]):        
        (-[WKView toggleContinuousSpellChecking:]):
        (-[WKView toggleGrammarChecking:]):
        (-[WKView toggleAutomaticSpellingCorrection:]):
        Get the needed flags from the text checker state.

        * UIProcess/TextChecker.h:
        Add state() function, remove getters.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureWebProcess):
        Initialize the text checker state.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::updateTextCheckerState):
        Send the SetTextCheckerState message to the web process.

        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::initializeState):
        Initialize the state from the user defaults.

        (WebKit::TextChecker::state):
        Return the state.

        (WebKit::TextChecker::setContinuousSpellCheckingEnabled):
        (WebKit::TextChecker::setGrammarCheckingEnabled):
        (WebKit::TextChecker::setAutomaticSpellingCorrectionEnabled):
        Make sure to write the new state.
        
        * UIProcess/qt/TextCheckerQt.cpp:
        (WebKit::TextChecker::state):
        * UIProcess/win/TextCheckerWin.cpp:
        (WebKit::TextChecker::state):
        Add stubs.

        * WebKit2.xcodeproj/project.pbxproj:
        Add TextCheckerState.h.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        Initialize m_textCheckerState.

        (WebKit::WebProcess::setTextCheckerState):
        Update.

        * WebProcess/WebProcess.messages.in:
        Add SetTextCheckerState message.

        * win/WebKit2.vcproj:
        Add TextCheckerState.h.

2011-01-04  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Anders Carlsson.

        Attach a radar # to this FIXME:
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:

2011-01-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Add more spelling/grammar related methods
        https://bugs.webkit.org/show_bug.cgi?id=51886

        * UIProcess/API/mac/WKView.mm:
        (-[WKView validateUserInterfaceItem:]):
        Handle more selectors.

        (-[WKView showGuessPanel:]):
        Add stub.

        (-[WKView checkSpelling:]):
        Ditto.

        (-[WKView toggleAutomaticSpellingCorrection:]):
        Toggle automatic spelling correction.

        * UIProcess/TextChecker.h:
        Add setAutomaticSpellingCorrectionEnabled and isAutomaticSpellingCorrectionEnabled.

        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::setAutomaticSpellingCorrectionEnabled):
        (WebKit::TextChecker::isAutomaticSpellingCorrectionEnabled):
        Update the toggle.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/mac/WebErrorsMac.mm:
        Add a Radar URL for the localization FIXMEs.

2011-01-04  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix.

        * win/WebKit2.vcproj: Correct the missing $(WebKitVSPropsRedirectionDir)
        variables that Visual Studio helpfully removes when making changes.

2011-01-04  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix.

        * win/WebKit2.vcproj: Disable CG-specific WKImageCG.cpp from
        Debug_Cairo_CFLite/Release_Cario_CFLite builds.

2011-01-04  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=51856
        Pass encoded back/forward tree data from the WebProcess to the UIProcess

        Remove the WKBackForwardListItemCopyOriginalURL API as it's not needed:
        * UIProcess/API/C/WKBackForwardListItem.cpp:
        * UIProcess/API/C/WKBackForwardListItem.h:
        * UIProcess/API/qt/qwkhistory.cpp:
        * UIProcess/API/qt/qwkhistory.h:
        
        * UIProcess/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::WebBackForwardListItem):
        * UIProcess/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::create):
        (WebKit::WebBackForwardListItem::setBackForwardData):
        (WebKit::WebBackForwardListItem::backForwardData):
        
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::addBackForwardItem):
        * UIProcess/WebProcessProxy.h:
        
        * UIProcess/WebProcessProxy.messages.in:
        
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::updateBackForwardItem):

2011-01-04  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Incomplete clean up on termination
        https://bugs.webkit.org/show_bug.cgi?id=51474

        Do not kill the web process to force it's termination.
        Fix object destruction and cleanup logic and make the cleanup more reliable.
        Do not try to cleanup on crash because it is not reliable.

        * Platform/CoreIPC/qt/ConnectionQt.cpp:
        (CoreIPC::Connection::platformInvalidate): Do not delete the socket if we
        do not own it. This is the case with a server connection.
        * Platform/qt/MappedMemoryPool.cpp:
        Turn MappedMemoryPool into a QObject so the CleanupHandler can destruct it
        in the same way as the other objects.
        (WebKit::MappedMemoryPool::instance):
        (WebKit::MappedMemoryPool::~MappedMemoryPool):
        * Platform/qt/MappedMemoryPool.h:
        (WebKit::MappedMemoryPool::MappedMemoryPool):
        * Platform/qt/SharedMemoryQt.cpp:
        (WebKit::SharedMemory::create): No need to care about QCoreApplication::aboutToQuit.
        It is handled by the CleanupHandler.
        (WebKit::SharedMemory::~SharedMemory): Ditto.
        * Shared/qt/CleanupHandler.cpp: Renamed from WebKit2/Shared/qt/CrashHandler.cpp.
        No longer try to handle crash but just normal termination.
        (WebKit::CleanupHandler::CleanupHandler): Connect deleteObjects with QCoreApplication::aboutToQuit.
        Ensure appropriate thread affinity.
        (WebKit::CleanupHandler::sigTermHandler): Stop the main event loop.
        (WebKit::CleanupHandler::deleteObjects): Use deleteLater instead of delete since it is more reliable.
        * Shared/qt/CleanupHandler.h: Renamed from WebKit2/Shared/qt/CrashHandler.h.
        (WebKit::CleanupHandler::instance):
        (WebKit::CleanupHandler::markForCleanup):
        (WebKit::CleanupHandler::unmark):
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        Do not kill the web process immidiately but give it a chance to cleanup.
        Use QLocalServer::removeServer for assuring that the socket file will be removed.
        (WebKit::ProcessLauncherHelper::serverName):
        (WebKit::cleanupAtExit): Renamed from cleanupProcesses. Only kill the web process when it times
        out terminating. Fixed the bug of changing the list while iterating it over by disconnecting
        from the processStateChanged slot.
        (WebKit::QtWebProcess::QtWebProcess): Added missing meta type registration of QProcess::ProcessState.
        (WebKit::ProcessLauncherHelper::~ProcessLauncherHelper):
        (WebKit::ProcessLauncherHelper::ProcessLauncherHelper): No need to add the the instance to the
        CleanupHandler because we will remove the socket file in cleanupAtExit.
        (WebKit::ProcessLauncherHelper::instance):
        (WebKit::ProcessLauncher::terminateProcess):
        * WebKit2.pro:

2011-01-04  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] [WK2] create an initial implementation of the context menu handling for WebKit 2
        https://bugs.webkit.org/show_bug.cgi?id=51825

        Implement the necessary methods to get a basic context menu working for Qt.

        Only 4 basic WebAction have been added on the UIProcess side: back, forward, stop and reload.

        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::QGraphicsWKView):
        (QGraphicsWKView::showContextMenu):
        (QGraphicsWKViewPrivate::QGraphicsWKViewPrivate):
        * UIProcess/API/qt/qgraphicswkview.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::createContextMenuProxy):
        * UIProcess/API/qt/qwkpage.h:
        * UIProcess/qt/WebContextMenuProxyQt.cpp:
        (WebKit::webActionForContextMenuAction):
        (WebKit::WebContextMenuProxyQt::WebContextMenuProxyQt):
        (WebKit::WebContextMenuProxyQt::create):
        (WebKit::WebContextMenuProxyQt::showContextMenu):
        (WebKit::WebContextMenuProxyQt::hideContextMenu):
        (WebKit::WebContextMenuProxyQt::createContextMenu):
        * UIProcess/qt/WebContextMenuProxyQt.h:

2011-01-03  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Adam Barth.

        [Qt] Add SelectAll option to the context menu for the editor
        https://bugs.webkit.org/show_bug.cgi?id=50049

        Add WebPlatformStrategies::contextMenuItemTagSelectAll for Qt.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::contextMenuItemTagSelectAll):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

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

        Reviewed by Anders Carlsson.

        Ensure that the correct initial focusable area is focused when tabbing
        and shift-tabbing into the WKView.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView becomeFirstResponder]): Use the keyViewSelectionDirection to set
        the initial focus.

2011-01-02  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Simon Fraser.

        <rdar://problem/8812159> Update copyright strings

        * Info.plist:
        * WebProcess/Info.plist:

2011-01-02  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Csaba Osztrogonác.

        WebKit 2 does not build on 64bits with a recent GCC
        https://bugs.webkit.org/show_bug.cgi?id=51754

        Change the argument coding for DatabaseDetails to use explicitly the 64 bits type.

        * Shared/OriginAndDatabases.h:
        * Shared/WebCoreArgumentCoders.h:

2011-01-02  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Adam Barth.

        Move JavaScriptCore to Source
        https://bugs.webkit.org/show_bug.cgi?id=51604

        Workaround until moving all sources to Source directory is finished.

        * Scripts/generate-forwarding-headers.pl: Add Sources to searching path for JavaScriptCore.

2011-01-01  Adam Barth  <abarth@webkit.org>

        Speculative build fix for Qt.  Add some more include paths.

        * WebKit2.pro:

2011-01-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move JavaScriptCore to Source
        https://bugs.webkit.org/show_bug.cgi?id=51604

        * WebKit2.pro:
          - Point to JavaScriptCore in its new location.

2010-12-15  Amruth Raj  <amruthraj@motorola.com> and Ravi Kasibhatla  <ravi.kasibhatla@motorola.com>

        Reviewed by Martin Robinson.

        [GTK] Enable building whatever already exists of WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=37369

        * GNUmakefile.am: Added. 
        * WebKit2Prefix.h: Included WebCore/config.h for GTK port as the first header
        file for WebKit2 sources files.
        * gtk: Added.
        * gtk/webkit2.pc.in: Added.

2010-12-29  Juha Savolainen  <juha.savolainen@weego.fi>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] [WK2] Added more webattributes to the qwkpreferences
        https://bugs.webkit.org/show_bug.cgi?id=51697

        Added PrivateBrowsingEnabled, DeveloperExtrasEnabled, DnsPrefetchEnabled attributes

        * UIProcess/API/qt/qwkpreferences.cpp:
        (QWKPreferences::testAttribute): 
        (QWKPreferences::setAttribute): 
        * UIProcess/API/qt/qwkpreferences.h:

2010-12-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2 snapshots should contain accelerated content
        <rdar://problem/8807393>
        https://bugs.webkit.org/show_bug.cgi?id=51660

        When creating a snapshot, flatten the layer tree for painting so that
        accelerated content is included in the snapshot.

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

2010-12-27  Daniel Bates  <dbates@rim.com>

        Attempt to fix the WebKit2 Windows build after changeset 74698
        <http://trac.webkit.org/changeset/74698> (bug #51656).

        Add "..\Shared\API\c\WKImage.h" to WebKit2Generated.make.

        * win/WebKit2Generated.make:

2010-12-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2: Add API for getting snapshots
        https://bugs.webkit.org/show_bug.cgi?id=51656

        * Shared/API/c/WKBase.h:
        * Shared/API/c/WKImage.cpp: Added.
        (WKImageGetTypeID):
        (WKImageCreate):
        (WKImageGetSize):
        * Shared/API/c/WKImage.h: Added.
        * Shared/WebImage.cpp: Added.
        (WebKit::WebImage::create):
        (WebKit::WebImage::size):
        * Shared/WebImage.h: Added.
        (WebKit::WebImage::backingStore):
        (WebKit::WebImage::WebImage):
        (WebKit::WebImage::type):
        Add a general purpose API image class.

        * Shared/API/c/cg: Added.
        * Shared/API/c/cg/WKImageCG.cpp: Added.
        (WKImageCreateCGImage):
        * Shared/API/c/cg/WKImageCG.h: Added.
        Add function to convert a WKImageRef to a CGImageRef for platforms that use CG.

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toFloatRect):
        (WebKit::toIntSize):
        (WebKit::toIntPoint):
        (WebKit::toIntRect):
        (WebKit::toImageOptions):
        Make conversion functions that are ambiguous more explicit.

        * Shared/APIObject.h:
        * Shared/BackingStore.h:
        (WebKit::BackingStore::isBackedBySharedMemory):
        * Shared/ImageOptions.h: Added.
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        (WebKit::UserMessageDecoder::baseDecode):
        Allow a WKImageRef to be passed in user messages.  Right now, it only
        works if the image is sharable.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageScaleWebView):
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::windowFrame):
        Use the more explicit conversion function name.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCreateSnapshotInViewCoordinates):
        (WKBundlePageCreateSnapshotInDocumentCoordinates):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        (WKBundlePageOverlaySetNeedsDisplay):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::snapshotInViewCoordinates):
        (WebKit::WebPage::snapshotInDocumentCoordinates):
        Add function to take the snapshot.

        * WebProcess/WebPage/WebPage.h:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Add new files.

2010-12-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2: Add additional API for managing databases
        https://bugs.webkit.org/show_bug.cgi?id=51629

        - Adds client for the database manager to get notifications
          of changes to databases.

        * UIProcess/API/C/WKDatabaseManager.cpp:
        (WKDatabaseManagerSetClient):
        * UIProcess/API/C/WKDatabaseManager.h:
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::initializeClient):
        (WebKit::WebDatabaseManagerProxy::didModifyOrigin):
        (WebKit::WebDatabaseManagerProxy::didModifyDatabase):
        * UIProcess/WebDatabaseManagerProxy.h:
        * UIProcess/WebDatabaseManagerProxy.messages.in:
        * UIProcess/WebDatabaseManagerProxyClient.cpp: Added.
        (WebKit::WebDatabaseManagerProxyClient::didModifyOrigin):
        (WebKit::WebDatabaseManagerProxyClient::didModifyDatabase):
        * UIProcess/WebDatabaseManagerProxyClient.h: Added.
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        (WebKit::WebDatabaseManager::WebDatabaseManager):
        (WebKit::WebDatabaseManager::~WebDatabaseManager):
        (WebKit::WebDatabaseManager::dispatchDidModifyOrigin):
        (WebKit::WebDatabaseManager::dispatchDidModifyDatabase):
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:
        * win/WebKit2.vcproj:

2010-12-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2: Add additional API for managing databases
        https://bugs.webkit.org/show_bug.cgi?id=51629

        - Adds WKDatabaseManagerGetDatabasesByOrigin, which asynchronously returns
          an array of dictionaries containing details about each origin using 
          databases and details about each database. Keys were added for accessing
          the data in the dictionaries.
        - Adds WKDatabaseManagerDeleteDatabasesWithNameForOrigin to delete a database
          with a specific identifier.
        - Adds WKDatabaseManagerSetQuotaForOrigin to set the quota for an origin.

        * Shared/OriginAndDatabases.cpp: Added.
        (WebKit::OriginAndDatabases::encode):
        (WebKit::OriginAndDatabases::decode):
        * Shared/OriginAndDatabases.h: Added.
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/API/C/WKDatabaseManager.cpp:
        (WKDatabaseManagerGetOriginKey):
        (WKDatabaseManagerGetOriginQuotaKey):
        (WKDatabaseManagerGetOriginUsageKey):
        (WKDatabaseManagerGetDatabaseDetailsKey):
        (WKDatabaseManagerGetDatabaseDetailsNameKey):
        (WKDatabaseManagerGetDatabaseDetailsDisplayNameKey):
        (WKDatabaseManagerGetDatabaseDetailsExpectedUsageKey):
        (WKDatabaseManagerGetDatabaseDetailsCurrentUsageKey):
        (WKDatabaseManagerGetDatabasesByOrigin):
        (callGetDatabasesByOriginBlockAndDispose):
        (WKDatabaseManagerGetDatabasesByOrigin_b):
        (WKDatabaseManagerGetDatabaseOrigins):
        (callGetDatabaseOriginsBlockBlockAndDispose):
        (WKDatabaseManagerGetDatabaseOrigins_b):
        (WKDatabaseManagerDeleteDatabasesWithNameForOrigin):
        (WKDatabaseManagerDeleteDatabasesForOrigin):
        (WKDatabaseManagerDeleteAllDatabases):
        (WKDatabaseManagerSetQuotaForOrigin):
        * UIProcess/API/C/WKDatabaseManager.h:
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::originKey):
        (WebKit::WebDatabaseManagerProxy::originQuotaKey):
        (WebKit::WebDatabaseManagerProxy::originUsageKey):
        (WebKit::WebDatabaseManagerProxy::databaseDetailsKey):
        (WebKit::WebDatabaseManagerProxy::databaseDetailsNameKey):
        (WebKit::WebDatabaseManagerProxy::databaseDetailsDisplayNameKey):
        (WebKit::WebDatabaseManagerProxy::databaseDetailsExpectedUsageKey):
        (WebKit::WebDatabaseManagerProxy::databaseDetailsCurrentUsageKey):
        (WebKit::WebDatabaseManagerProxy::invalidate):
        (WebKit::WebDatabaseManagerProxy::getDatabasesByOrigin):
        (WebKit::WebDatabaseManagerProxy::didGetDatabasesByOrigin):
        (WebKit::WebDatabaseManagerProxy::getDatabaseOrigins):
        (WebKit::WebDatabaseManagerProxy::didGetDatabaseOrigins):
        (WebKit::WebDatabaseManagerProxy::deleteDatabaseWithNameForOrigin):
        (WebKit::WebDatabaseManagerProxy::deleteDatabasesForOrigin):
        (WebKit::WebDatabaseManagerProxy::setQuotaForOrigin):
        * UIProcess/WebDatabaseManagerProxy.h:
        * UIProcess/WebDatabaseManagerProxy.messages.in:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        (WebKit::WebDatabaseManager::getDatabasesByOrigin):
        (WebKit::WebDatabaseManager::deleteDatabaseWithNameForOrigin):
        (WebKit::WebDatabaseManager::setQuotaForOrigin):
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:
        * WebProcess/WebCoreSupport/WebDatabaseManager.messages.in:
        * win/WebKit2.vcproj:

2010-12-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Rename DrawingAreaMessage and DrawingAreaLegacyMessage and
        DrawingAreaProxyMessage to DrawingAreaProxyLegacyMessage.

        * Platform/CoreIPC/MessageID.h:
        * Shared/CoreIPCSupport/DrawingAreaMessageKinds.h:
        * Shared/CoreIPCSupport/DrawingAreaProxyMessageKinds.h:
        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::paint):
        (WebKit::ChunkedUpdateDrawingAreaProxy::setPageIsVisible):
        (WebKit::ChunkedUpdateDrawingAreaProxy::update):
        (WebKit::ChunkedUpdateDrawingAreaProxy::sendSetSize):
        (WebKit::ChunkedUpdateDrawingAreaProxy::didReceiveMessage):
        * UIProcess/LayerBackedDrawingAreaProxy.cpp:
        (WebKit::LayerBackedDrawingAreaProxy::sizeDidChange):
        (WebKit::LayerBackedDrawingAreaProxy::setPageIsVisible):
        (WebKit::LayerBackedDrawingAreaProxy::update):
        (WebKit::LayerBackedDrawingAreaProxy::didReceiveMessage):
        (WebKit::LayerBackedDrawingAreaProxy::didReceiveSyncMessage):
        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::sizeDidChange):
        (WebKit::TiledDrawingAreaProxy::setPageIsVisible):
        (WebKit::TiledDrawingAreaProxy::didReceiveMessage):
        (WebKit::TiledDrawingAreaProxy::requestTileUpdate):
        (WebKit::TiledDrawingAreaProxy::waitUntilUpdatesComplete):
        (WebKit::TiledDrawingAreaProxy::takeSnapshot):
        (WebKit::TiledDrawingAreaProxy::removeTile):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::didReceiveSyncMessage):
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
        (WebKit::ChunkedUpdateDrawingArea::display):
        (WebKit::ChunkedUpdateDrawingArea::setSize):
        (WebKit::ChunkedUpdateDrawingArea::didReceiveMessage):
        * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
        (WebKit::LayerBackedDrawingArea::setSize):
        (WebKit::LayerBackedDrawingArea::didReceiveMessage):
        * WebProcess/WebPage/TiledDrawingArea.cpp:
        (WebKit::TiledDrawingArea::display):
        (WebKit::TiledDrawingArea::setSize):
        (WebKit::TiledDrawingArea::updateTile):
        (WebKit::TiledDrawingArea::tileUpdateTimerFired):
        (WebKit::TiledDrawingArea::didReceiveMessage):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm:
        (WebKit::LayerBackedDrawingArea::attachCompositingContext):

2010-12-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Drawing area cleanup. Remove a bunch of redundant functions that just ended
        up calling setNeedsDisplay.

        * UIProcess/DrawingAreaProxy.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::invalidateWindow):
        (WebKit::WebChromeClient::invalidateContentsAndWindow):
        (WebKit::WebChromeClient::invalidateContentsForSlowScroll):
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.h:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
        * WebProcess/WebPage/LayerBackedDrawingArea.h:
        * WebProcess/WebPage/TiledDrawingArea.cpp:
        * WebProcess/WebPage/TiledDrawingArea.h:

2010-12-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fill in some more preferences for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=51610

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetAuthorAndUserStylesEnabled):
        (WKPreferencesGetAuthorAndUserStylesEnabled):
        (WKPreferencesSetWebArchiveDebugModeEnabled):
        (WKPreferencesGetWebArchiveDebugModeEnabled):
        (WKPreferencesSetLocalFileContentSniffingEnabled):
        (WKPreferencesGetLocalFileContentSniffingEnabled):
        (WKPreferencesSetPageCacheEnabled):
        (WKPreferencesGetPageCacheEnabled):
        (WKPreferencesSetPaginateDuringLayoutEnabled):
        (WKPreferencesGetPaginateDuringLayoutEnabled):
        (WKPreferencesSetDOMPasteAllowedEnabled):
        (WKPreferencesGetDOMPasteAllowedEnabled):
        * UIProcess/API/C/WKPreferences.h:
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        Pipe through some more preferences.

2010-12-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Alexey Proskuryakov.

        REGRESSION (r74648): XHR layout test failures
        https://bugs.webkit.org/show_bug.cgi?id=51603

        Reverted r74648.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveAuthenticationChallenge):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::shouldUseCredentialStorage):
        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain):

2010-12-24  Simon Fraser  <simon.fraser@apple.com>

        Fix the Qt build after r74650.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:

2010-12-24  Benjamin Poulain  <ikipou@gmail.com>

        Reviewed by Darin Adler.

        [Qt] [WK2] WebKit 2 does not build on mac, missing reference to RetainPtr
        https://bugs.webkit.org/show_bug.cgi?id=51598

        Fix the build, add the missing header.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:

2010-12-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/8758386> The web process uses its own credential storage
        https://bugs.webkit.org/show_bug.cgi?id=51599

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveAuthenticationChallenge): Try to answer the challenge using
        the UI process’s credential storage first.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::shouldUseCredentialStorage): Prevent the web process from using
        its own credential storage.
        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain): Ditto.

2010-12-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Make dragging work again after r74591.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveEvent): Fixed a typo.

2010-12-23  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        Need WebKit2 API to create a SecurityOrigin from protocol, host, and port
        https://bugs.webkit.org/show_bug.cgi?id=51563

        Add WKSecurityOriginCreate(WKStringRef protocol, WKStringRef host, int port).

        * Shared/API/c/WKSecurityOrigin.cpp:
        (WKSecurityOriginCreateFromIdentifier):
        Renamed so as not to clash with the new WKSecurityOriginCreate.
        (WKSecurityOriginCreate):
        * Shared/API/c/WKSecurityOrigin.h:
        * Shared/WebSecurityOrigin.h:
        (WebKit::WebSecurityOrigin::create):

2010-12-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Simon Fraser.

        Ensure that we are not getting too many mouse move events
        https://bugs.webkit.org/show_bug.cgi?id=51568
        <rdar://problem/7881470>
        <rdar://problem/8735512>

        Implement throttling of mouse move events.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        Initialize m_processingMouseMoveEvent to false.

        (WebKit::WebPageProxy::handleMouseEvent):
        If we're already processing a mouse move events, just update 
        m_nextMouseMoveEvent and return.
 
        (WebKit::WebPageProxy::didReceiveEvent):
        If we received a mouse move event, send the next mouse move event if there is one.

2010-12-23  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Anders Carlsson.

        Assertion when loading www.yahoo.com in WebKit2 under decodeResourceRequest
        https://bugs.webkit.org/show_bug.cgi?id=51562
        
        Don't assert that our data reference isn't empty when we try to get the data from it.
        If it is empty, just return 0.
        
        All callers are safe with this function returning 0.

        * Platform/CoreIPC/DataReference.h:
        (CoreIPC::DataReference::data): Change the assert to an early return.
        * Shared/cf/ArgumentCodersCF.cpp:
        (CoreIPC::decode): Add an assert, and remove a ternarny operator because the function now does
            this for us (if the data is empty, return 0).

2010-12-23  Sam Weinig  <sam@webkit.org>

        Fix incorrect assertion causing all pages with subframes to crash.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::appendChild):

2010-12-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Clean up the selection handling code
        https://bugs.webkit.org/show_bug.cgi?id=51550

        * Shared/SelectionState.h: Added.
        Add SelectionState class which hold information about the current selection.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        Remove selectionChanged function.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:contextRef:pageGroupRef:]):
        Remove all the selection related state; it lives in the WebPageProxy object now.
        
        (-[WKView insertText:]):
        (-[WKView selectedRange]):
        (-[WKView hasMarkedText]):
        Get the selection information from the WebPageProxy.

        * UIProcess/API/mac/WKViewInternal.h:
        Remove _selectionChanged declaration.

        * UIProcess/PageClient.h:
        Remove selectionChanged functions.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::selectionStateChanged):
        Update the selection state.

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::selectionState):
        Return the selection state.

        * UIProcess/WebPageProxy.messages.in:
        Add SelectionStateChanged message.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView):
        Remove all the selection related state; it lives in the WebPageProxy object now.

        (WebKit::WebView::compositionSelectionChanged):
        (WebKit::WebView::onIMEComposition):
        (WebKit::WebView::onIMEEndComposition):
        (WebKit::WebView::onIMERequestCharPosition):
        (WebKit::WebView::onIMERequest):
        Get the selection information from the WebPageProxy.
        
        * WebKit2.xcodeproj/project.pbxproj:
        Add SelectionState.h

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::respondToChangedSelection):
        Send a SelectionStateChanged message with the updated state.

        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        Remove mac specific code.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::getLocationAndLengthFromRange):
        Rename this function from convertRangeToPlatformRange and move it out of WebPageMac.mm

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::getMarkedRange):
        (WebKit::WebPage::characterIndexForPoint):
        Call getLocationAndLengthFromRange.

        * win/WebKit2.vcproj:
        Add SelectionState.h

2010-12-23  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WKView should not try to do asynchronous validation for selectors that are not editor commands
        https://bugs.webkit.org/show_bug.cgi?id=51555

        * UIProcess/API/mac/WKView.mm:
        (-[WKView validateUserInterfaceItem:]): Removed the special case for startSpeaking.
        Added call to commandIsSupportedFromMenuOrKeyBinding so we only try to do validation
        for commands that are supported. Tweaked comments and added some bug numbers.
        (-[WKView _setUserInterfaceItemState:enabled:state:]): Tweaked comment and added
        bug number.

2010-12-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        <rdar://problem/8799032>
        REGRESSION(r74436) Crash opening many pages with WebKit2

        * Shared/cf/ArgumentCodersCF.cpp:
        (CoreIPC::decode):
        Fix paste-o. Decode into a CFDataRef not a CFDictionaryRef
        when decoding CFDataRefs.

2010-12-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        WebKit2 needs to mirror the frame tree in the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=51546

        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameCopyChildFrames):
        * UIProcess/API/C/WKFrame.h:
        Add API to get the child frames of a frame.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::WebFrameProxy):
        (WebKit::WebFrameProxy::disconnect):
        (WebKit::WebFrameProxy::appendChild):
        (WebKit::WebFrameProxy::removeChild):
        (WebKit::WebFrameProxy::isDescendantOf):
        (WebKit::WebFrameProxy::dumpFrameTree):
        (WebKit::WebFrameProxy::didRemoveFromHierarchy):
        (WebKit::WebFrameProxy::childFrames):
        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::parentFrame): Add getter.
        (WebKit::WebFrameProxy::nextSibling): Add getter.
        (WebKit::WebFrameProxy::previousSibling): Add getter.
        (WebKit::WebFrameProxy::firstChild): Add getter.
        (WebKit::WebFrameProxy::lastChild): Add getter.
        Make frames keep track of their subframes.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCreateSubframe):
        Use the now passed parentID to insert the frame into the hierarchy

        (WebKit::WebPageProxy::didSaveFrameToPageCache):
        When a frame is added to the page cache, remove it from the hierarchy.

        (WebKit::WebPageProxy::didRestoreFrameFromPageCache):
        When a frame is restored from the page cache, add it back to the hierarchy.

        (WebKit::WebPageProxy::didRemoveFrameFromHierarchy):
        Detached frames should also be removed from the hierarchy.

        * UIProcess/WebPageProxy.h:
        Add new declarations for didSaveFrameToPageCache and didRestoreFrameFromPageCache.

        * UIProcess/WebPageProxy.messages.in:
        Add messages for DidSaveFrameToPageCache and DidRestoreFrameFromPageCache.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::savePlatformDataToCachedFrame): 
        (WebKit::WebFrameLoaderClient::transitionToCommittedFromCachedFrame):
        Remove notImplemented, there is no work we need to do here.

        (WebKit::WebFrameLoaderClient::didSaveToPageCache): 
        (WebKit::WebFrameLoaderClient::didRestoreFromPageCache):
        Send message to UIProcess to indicate this happened.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createSubframe):
        Send parent frameID in addition to our own in the message to UIProcess.

2010-12-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        New popup windows open disproportionately big
        https://bugs.webkit.org/show_bug.cgi?id=51547
        <rdar://problem/8637029>

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::createNewPage):
        Pass the correct size back to the UI process.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::pageRect):
        Implement this and return the size of the page.

2010-12-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Nothing happens clicking "launch live player" on live.cnn.com
        https://bugs.webkit.org/show_bug.cgi?id=51540
        <rdar://problem/8791086>

        Implement NPN_PushPopupsEnabledState/NPN_PopPopupsEnabledState.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_PushPopupsEnabledState):
        Call NetscapePlugin::pushPopupsEnabledState.

        (WebKit::NPN_PopPopupsEnabledState):
        Call NetscapePlugin::popPopupsEnabledState.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::pushPopupsEnabledState):
        Append the boolean to the vector.

        (WebKit::NetscapePlugin::popPopupsEnabledState):
        Remove the last boolean from the vector.

        (WebKit::NetscapePlugin::allowPopups):
        Return the last boolean from the vector.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performJavaScriptURLRequest):
        Update the "allowPopupsFromPlugin" state.

2010-12-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Webkit2: WebProcess crashes when Private browsing is turned on on yahoo.com
        https://bugs.webkit.org/show_bug.cgi?id=51516
        <rdar://problem/8766995>

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NPP_SetValue):
        Add a null check for NPP_SetValue.

2010-12-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION (WK2): Plugins swallow CMD-W, CMD-Q, and probably other shortcuts
        https://bugs.webkit.org/show_bug.cgi?id=51515
        <rdar://problem/8740926>

        Always return false for keyboard events where the command key is down.

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

2010-12-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        WebProcess should be terminated if invalid frameIDs are
        passed to the UIProcess.
        https://bugs.webkit.org/show_bug.cgi?id=51508

        - Introduce a mechanism to mark a messages as invalid due to
          reasons other than in ability to decode the message, eg. an
          invalid frameID is passed in a message.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::Connection):
        (CoreIPC::Connection::markCurrentlyDispatchedMessageAsInvalid): Sets
        the m_didReceiveInvalidMessage bit so that it can be picked up in 
        (CoreIPC::Connection::dispatchMessages): Check for m_didReceiveInvalidMessage in
        addition to tainted arguments.
        * Platform/CoreIPC/Connection.h:
        Add base macro for others to extend, that calls markCurrentlyDispatchedMessageAsInvalid()
        ASSERTs, and returns.

        * UIProcess/WebPageProxy.cpp:
        Add Message checks for all WebFrameProxy's gotten from frameIDs passed
        over the wire.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::isGoodMapKey):
        Checks that the key can be inserted safely into a map (eg. not the empty or deleted value).

        (WebKit::WebProcessProxy::webFrame):
        Return null for bad keys (eg. 0 or -1).

        (WebKit::WebProcessProxy::canCreateFrame):
        Added. Checks that the ID is good and not in the map yet. Used
        as a consistency check before creating frames.

        (WebKit::WebProcessProxy::frameCreated): 
        ASSERT that the key is good, in addition to not in the map yet.

        (WebKit::WebProcessProxy::didDestroyFrame):
        ASSERT that the key is good.

        * UIProcess/WebProcessProxy.h:
        Move WebFrameProxy HashMap type into a typedef.

2010-12-22  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        WebKit2 needs a way to return the main resource data
        https://bugs.webkit.org/show_bug.cgi?id=51510

        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameGetMainResourceData): Added.
        (callGetMainResourceDataBlockAndDispose): Added.
        (WKFrameGetMainResourceData_b): Added.
        * UIProcess/API/C/WKFrame.h: Added WKFrameGetMainResourceData.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::getMainResourceData): Added.
        * UIProcess/WebFrameProxy.h: Ditto.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::getMainResourceDataOfFrame): Added.
        (WebKit::WebPageProxy::dataCallback): Replaced the individual callbacks
        with just these two.
        (WebKit::WebPageProxy::stringCallback): Ditto.
        * UIProcess/WebPageProxy.h: Ditto.
        * UIProcess/WebPageProxy.messages.in: Ditto.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInMainFrame): Send the string callback
        message instead of a specific one.
        (WebKit::WebPage::getContentsAsString): Ditto.
        (WebKit::WebPage::getRenderTreeExternalRepresentation): Ditto.
        (WebKit::WebPage::getSelectionOrContentsAsString): Ditto.
        (WebKit::WebPage::getSourceForFrame): Ditto.
        (WebKit::WebPage::getMainResourceDataOfFrame): Added.
        (WebKit::WebPage::getWebArchiveOfFrame): Send the data callback message
        instead of a specific one.
        * WebProcess/WebPage/WebPage.h: Added getMainResourceDataOfFrame.
        * WebProcess/WebPage/WebPage.messages.in: Ditto.

2010-12-22  Darin Adler  <darin@apple.com>

        * WebProcess/WebPage/WebPage.cpp: Add #if to try to fix non-Mac builds.

2010-12-22  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        Make Speech menu items work in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=51504

        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameGetWebArchive): Updated to use new-named typedef.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageRunJavaScriptInMainFrame): Ditto.
        (WKPageRenderTreeExternalRepresentation): Ditto.
        (WKPageGetSourceForFrame): Ditto.
        (WKPageGetContentsAsString): Ditto.

        * UIProcess/API/mac/WKView.mm:
        (menuItem): Added. Helper function to make it easy to call menu item
        functions on arbitrary user interface items.
        (toolbarItem): Ditto.
        (-[WKView validateUserInterfaceItem:]): Added validation for startSpeaking
        and stopSpeaking commands. Reworked the code to fix a bug where
        toggleContinuousSpellChecking would always be enabled even when it should
        be disabled. Reworked the asynchronous validation code so it works for
        items other than menu items and can also handle more than one item for the
        same command. Added some comments.
        (speakString): Added. Helper function to be used as a callback when we
        get the selection or contents to speak.
        (-[WKView startSpeaking:]): Added. Uses getSelectionOrContentsAsString.
        (-[WKView stopSpeaking:]): Added.
        (-[WKView _setUserInterfaceItemState:enabled:state:]): Reworked to work
        with the changes to validateUserInterfaceItem above.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::isDisplayingMarkupDocument): Added a FIXME about
        a problem I noticed.
        (WebKit::WebFrameProxy::didCommitLoad): Tweaked argument name.
        (WebKit::WebFrameProxy::getWebArchive): Changed to use new-named typedef.
        * UIProcess/WebFrameProxy.h: Changed WebArchiveCallback to DataCallaback.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close): Invalidate the two callback maps since
        we only have two now.
        (WebKit::WebPageProxy::runJavaScriptInMainFrame): Changed to use merged
        maps and typedefs so we don't need a separate callback map for each function.
        (WebKit::WebPageProxy::getRenderTreeExternalRepresentation): Ditto.
        (WebKit::WebPageProxy::getSourceForFrame): Ditto.
        (WebKit::WebPageProxy::getContentsAsString): Ditto.
        (WebKit::WebPageProxy::getSelectionOrContentsAsString): Added.
        (WebKit::WebPageProxy::getWebArchiveOfFrame): Ditto.
        (WebKit::WebPageProxy::didGetContentsAsString): Ditto.
        (WebKit::WebPageProxy::didGetSelectionOrContentsAsString): Ditto.
        (WebKit::WebPageProxy::didRunJavaScriptInMainFrame): Ditto.
        (WebKit::WebPageProxy::didGetRenderTreeExternalRepresentation): Ditto.
        (WebKit::WebPageProxy::didGetSourceForFrame): Ditto.
        (WebKit::WebPageProxy::didGetWebArchiveOfFrame): Ditto.
        (WebKit::WebPageProxy::processDidCrash): Ditto.

        * UIProcess/WebPageProxy.h: Updated for changes above.

        * UIProcess/WebPageProxy.messages.in: Added DidGetSelectionOrContentsAsString,
        GetIsSpeaking, Speak, and StopSpeaking.

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::getIsSpeaking): Added.
        (WebKit::WebPageProxy::speak): Added.
        (WebKit::WebPageProxy::stopSpeaking): Added.

        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        (WebKit::WebContextMenuClient::isSpeaking): Call WebPage instead of doing
        the work directly, so it can run in the UI process.
        (WebKit::WebContextMenuClient::speak): Ditto.
        (WebKit::WebContextMenuClient::stopSpeaking): Ditto.
        (WebKit::WebContextMenuClient::searchWithSpotlight): Added FIXME comment and
        changed code to avoid a C-style cast.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::selectionAsString): Added.
        * WebProcess/WebPage/WebFrame.h: Ditto.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::changeAcceleratedCompositingMode): Use sendSync in the
        modern way instead of explicitly calling WebProcess.
        (WebKit::WebPage::getSelectionOrContentsAsString): Added.
        (WebKit::WebPage::isSpeaking): Added.
        (WebKit::WebPage::speak): Added.
        (WebKit::WebPage::stopSpeaking): Added.
        * WebProcess/WebPage/WebPage.h: Added functions.

        * WebProcess/WebPage/WebPage.messages.in: Added GetSelectionOrContentsAsString.

2010-12-22  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * Platform/mac/MachUtilities.cpp:

2010-12-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Detect WebProcess crashes sooner, without waiting for ReportCrash to finish
        https://bugs.webkit.org/show_bug.cgi?id=51505

        * Platform/CoreIPC/CoreIPCMessageKinds.h:
        Add SetExceptionPort.

        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::platformInvalidate):
        If we have an exception port, unregister it.

        (CoreIPC::Connection::platformInitialize):
        Set m_exceptionPort to null.

        (CoreIPC::Connection::open):
        If we have an exception port, register an event handler for it and send it over
        to the other side.

        (CoreIPC::Connection::receiveSourceEventHandler):
        Handle the SetExceptionPort message.

        (CoreIPC::Connection::exceptionSourceEventHandler):
        Receive the message, forward it to the real exception handler and call connectionDidClose.

        (CoreIPC::Connection::setShouldCloseConnectionOnMachExceptions):
        Create an exception port.

        * Platform/mac/MachUtilities.cpp:
        (machExceptionPort):
        (setMachExceptionPort):
        * Platform/mac/MachUtilities.h:
        Add helper functions for getting and setting the mach exception port.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didFinishLaunching):
        Call setShouldCloseConnectionOnMachExceptions on Mac.

2010-12-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Move Mach message receiving code out into a new function
        https://bugs.webkit.org/show_bug.cgi?id=51502

        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::readFromMachPort):
        (CoreIPC::Connection::receiveSourceEventHandler):

2010-12-22  Jeff Miller  <jeffm@apple.com>

        Reviewed by Sam Weinig.

        InjectedBundle methods should  use the relative URL constructor for KURL instead of the ParsedURLStringTag version
        https://bugs.webkit.org/show_bug.cgi?id=51491
        
        The url passed to various InjectedBundle methods is not from KURL::string(), i.e. it has not already been parsed by KURL,
        so we have to use the relative URL constructor for KURL instead of the ParsedURLStringTag version.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::addUserScript):
        (WebKit::InjectedBundle::addUserStyleSheet):
        (WebKit::InjectedBundle::removeUserScript):
        (WebKit::InjectedBundle::removeUserStyleSheet):

2010-12-22  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Move more of WebPageProxy::didCommitLoadForFrame into WebFrameProxy::didCommitLoad.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didCommitLoad): Added type and certificate info arguments,
        and set m_MIMEType, m_isFrameSet, and m_certificateInfo.
        * UIProcess/WebFrameProxy.h: Removed setMIMEType and setCertificateInfo and added
        arguments to didCommitLoad.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame): Removed code that is now inside the
        WebFrameProxy::didCommitLoad function.

2010-12-21  Darin Adler  <darin@apple.com>

        Reviewed by Brady Eidson and Sam Weinig.

        Add a way to get a web archive in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=51437

        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameGetWebArchive): Added.
        (callGetWebArchiveBlockAndDispose): Added.
        (WKFrameGetWebArchive_b): Added.
        * UIProcess/API/C/WKFrame.h: Added functions above.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close): Clear out m_webArchiveCallbacks.
        (WebKit::WebPageProxy::getWebArchiveOfFrame): Added.
        (WebKit::WebPageProxy::didGetWebArchiveOfFrame): Added.
        (WebKit::WebPageProxy::processDidCrash): Clear out m_webArchiveCallbacks.
        * UIProcess/WebPageProxy.h: Added functions above.
        * UIProcess/WebPageProxy.messages.in: Added DidGetWebArchiveOfFrame.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::getWebArchiveOfFrame): Added.
        * WebProcess/WebPage/WebPage.h: Added function above.
        * WebProcess/WebPage/WebPage.messages.in: Added GetWebArchiveOfFrame.

2010-12-21  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] [WK2] Guard gcc-specific syntax

        * WebKit2.pro: Non-gcc based compliers choke on the "-include" 
        syntax for preinclude, make sure it has guard around it.

2010-12-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Can't stop QT music on santastreefarm.com
        https://bugs.webkit.org/show_bug.cgi?id=51438
        <rdar://problem/8741152>

        Implement NPN_ConvertPoint.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_ConvertPoint):
        Call NetscapePlugin::convertPoint.

        (WebKit::initializeBrowserFuncs):
        Only initialize NPN_ConvertPoint and NPN_PopUpContextMenu on Mac.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::convertPoint):
        Implement conversion routines.

        (WebKit::NetscapePlugin::windowAndViewFramesChanged):
        Keep track of the window and view frames, they are needed to do coordinate conversion.

2010-12-21  Sam Weinig  <weinig@apple.com>

        Reviewed by Anders Carlsson.

        Implement encoding/decoding of ResourceRequest and 
        ResourceResponse for Windows/CFNetwork.

        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::encodeResourceRequest):
        (CoreIPC::decodeResourceRequest):
        (CoreIPC::encodeResourceResponse):
        (CoreIPC::decodeResourceResponse):
        * win/WebKit2.vcproj:
        * win/WebKit2Common.vsprops:

2010-12-21  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Mac WebKit delivers an extra didCommit when loading web archives
        https://bugs.webkit.org/show_bug.cgi?id=51419

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didStartProvisionalLoad): Added assertions so we catch
        inconsistencies here instead of at the application level. Later, we will have
        to decide what to do in cases these assertions fail. The right policy is probably
        to consider it a web process failure and do whatever we do for those.
        (WebKit::WebFrameProxy::didReceiveServerRedirectForProvisionalLoad): Ditto.
        (WebKit::WebFrameProxy::didFailProvisionalLoad): Ditto.
        (WebKit::WebFrameProxy::didCommitLoad): Ditto.
        (WebKit::WebFrameProxy::didFinishLoad): Ditto.
        (WebKit::WebFrameProxy::didFailLoad): Ditto.

2010-12-21  Anders Carlsson  <andersca@apple.com>

        Fix Snow Leopard build.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue):

2010-12-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Fix crash when a Carbon plug-in fails to initialize correctly
        https://bugs.webkit.org/show_bug.cgi?id=51415

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue):
        Don't claim to support the QuickDraw event model.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformDestroy):
        Only try to remove the window from the map if it's not null.

2010-12-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Add ArgumentCoder support for CFDataRef
        https://bugs.webkit.org/show_bug.cgi?id=51412

        * Shared/cf/ArgumentCodersCF.cpp:
        (CoreIPC::typeFromCFTypeRef):
        (CoreIPC::encode):
        (CoreIPC::decode):
        * Shared/cf/ArgumentCodersCF.h:

2010-12-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Clicking missing plug-in text does not show a sheet
        https://bugs.webkit.org/show_bug.cgi?id=51403

        * UIProcess/API/C/WKPage.h:
        Add missingPluginButtonClicked to WKPageUIClient.

        * UIProcess/WebPageProxy.cpp:        
        (WebKit::WebPageProxy::missingPluginButtonClicked):
        Call the WebUIClient member function.

        * UIProcess/WebPageProxy.messages.in:
        Add MissingPluginButtonClicked message.

        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::missingPluginButtonClicked):
        Call the WKPageUIClient callback.

        * UIProcess/WebUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::shouldMissingPluginMessageBeButton):
        Always return true for now.

        (WebKit::WebChromeClient::missingPluginButtonClicked):
        Send a MissingPluginButtonClicked message.

2010-12-21  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Set BUILDING_QT__ consistently
        https://bugs.webkit.org/show_bug.cgi?id=51341

        * WebKit2.pro: Remove the definition of BUILDING_QT__ as it
        is already defined in WebKit.pri.

2010-12-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2: Add resource load client API
        https://bugs.webkit.org/show_bug.cgi?id=51370

        This just pipes through the basic resource load client data.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageResourceLoadClient):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeResourceLoadClient):
        (WebKit::WebPageProxy::didInitiateLoadForResource):
        (WebKit::WebPageProxy::didSendRequestForResource):
        (WebKit::WebPageProxy::didReceiveResponseForResource):
        (WebKit::WebPageProxy::didReceiveContentLengthForResource):
        (WebKit::WebPageProxy::didFinishLoadForResource):
        (WebKit::WebPageProxy::didFailLoadForResource):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebResourceLoadClient.cpp: Added.
        (WebKit::WebResourceLoadClient::didInitiateLoadForResource):
        (WebKit::WebResourceLoadClient::didSendRequestForResource):
        (WebKit::WebResourceLoadClient::didReceiveResponseForResource):
        (WebKit::WebResourceLoadClient::didReceiveContentLengthForResource):
        (WebKit::WebResourceLoadClient::didFinishLoadForResource):
        (WebKit::WebResourceLoadClient::didFailLoadForResource):
        * UIProcess/WebResourceLoadClient.h: Added.
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::assignIdentifierToInitialRequest):
        (WebKit::WebFrameLoaderClient::dispatchWillSendRequest):
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveResponse):
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveContentLength):
        (WebKit::WebFrameLoaderClient::dispatchDidFinishLoading):
        (WebKit::WebFrameLoaderClient::dispatchDidFailLoading):
        * win/WebKit2.vcproj:

2010-12-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add a TextChecker class, hook up spelling and grammar toggling
        https://bugs.webkit.org/show_bug.cgi?id=51363

        * UIProcess/API/mac/WKView.mm:
        (-[WKView validateUserInterfaceItem:]):
        (-[WKView toggleContinuousSpellChecking:]):
        (-[WKView toggleGrammarChecking:]):
        * UIProcess/TextChecker.h: Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::unmarkAllMisspellings):
        (WebKit::WebPageProxy::unmarkAllBadGrammar):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/TextCheckerMac.mm: Added.
        (WebKit::TextChecker::isContinuousSpellCheckingAllowed):
        (WebKit::TextChecker::isContinuousSpellCheckingEnabled):
        (WebKit::TextChecker::setContinuousSpellCheckingEnabled):
        (WebKit::TextChecker::isGrammarCheckingEnabled):
        (WebKit::TextChecker::setGrammarCheckingEnabled):
        * UIProcess/qt/TextCheckerQt.cpp: Added.
        (WebKit::TextChecker::isContinuousSpellCheckingAllowed):
        (WebKit::TextChecker::isContinuousSpellCheckingEnabled):
        (WebKit::TextChecker::setContinuousSpellCheckingEnabled):
        (WebKit::TextChecker::isGrammarCheckingEnabled):
        (WebKit::TextChecker::setGrammarCheckingEnabled):
        * UIProcess/win/TextCheckerWin.cpp: Added.
        (WebKit::TextChecker::isContinuousSpellCheckingAllowed):
        (WebKit::TextChecker::isContinuousSpellCheckingEnabled):
        (WebKit::TextChecker::setContinuousSpellCheckingEnabled):
        (WebKit::TextChecker::isGrammarCheckingEnabled):
        (WebKit::TextChecker::setGrammarCheckingEnabled):
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::unmarkAllMisspellings):
        (WebKit::WebPage::unmarkAllBadGrammar):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * win/WebKit2.vcproj:

2010-12-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Flash plug-in does not work on YouTube video page when accelerated compositing is disabled
        https://bugs.webkit.org/show_bug.cgi?id=51348
        <rdar://problem/8787667>

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction):
        Add new overload.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::create):
        (WebKit::PluginControllerProxy::PluginControllerProxy):
        These now take an additional isAcceleratedCompositingEnabled parameter.

        (WebKit::PluginControllerProxy::isAcceleratedCompositingEnabled):
        Return m_isAcceleratedCompositingEnabled.

        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::createPlugin):
        This now takes an additional isAcceleratedCompositingEnabled parameter.

        * PluginProcess/WebProcessConnection.messages.in:
        Add isAcceleratedCompositingEnabled parameter to the CreatePlugin message.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::initialize):
        Pass isAcceleratedCompositingEnabled when sending the CreatePlugin message.

2010-12-20  Anders Carlsson  <andersca@apple.com>

        Unreviewed, rolling out r74345.
        http://trac.webkit.org/changeset/74345
        https://bugs.webkit.org/show_bug.cgi?id=51115

        Not the correct fix.

        * Platform/CoreIPC/Connection.h:
        * Platform/CoreIPC/qt/ConnectionQt.cpp:
        (CoreIPC::Connection::open):

2010-12-20  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Crash in web process after the connection had been closed
        https://bugs.webkit.org/show_bug.cgi?id=51115

        Do not call connectionDidClose with a connection that has been explicitly
        invalidated on the listener thread.
        * Platform/CoreIPC/Connection.h:
        * Platform/CoreIPC/qt/ConnectionQt.cpp:
        (CoreIPC::Connection::disconnectHandler): Added.
        (CoreIPC::Connection::open):

2010-12-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Improve the fix for <rdar://problem/8769525>.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView performKeyEquivalent:]): Do not retain the view. Doing so is necessary in
        -[WebHTMLView performKeyEquivalent:], which this method was based upon, but not here, because
        there is no way for the web process to cause the WKView to be released while it is handling
        the event.

2010-12-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8769525> WKView leak when performing key equivalents
        https://bugs.webkit.org/show_bug.cgi?id=51315

        * UIProcess/API/mac/WKView.mm:
        (-[WKView performKeyEquivalent:]): Use a RetainPtr to ensure that the view is released in the
        early return code path.

2010-12-19  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] [WK2] QWKPagePrivate::paint() does not need to save the graphics context
        https://bugs.webkit.org/show_bug.cgi?id=51300

        Remove the unnecessary save() and restore() on the QPainter.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::paint):

2010-12-19  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] [WK2] Client are expected to render their own background for WebPages
        https://bugs.webkit.org/show_bug.cgi?id=51296

        Remove the rendering of the checkerboard from the tiled DrawingAreaProxy

        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::paint):
        * UIProcess/TiledDrawingAreaTile.h:
        * UIProcess/qt/TiledDrawingAreaTileQt.cpp:

2010-12-19  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] [WK2] Client are expected to render their own background for WebPages
        https://bugs.webkit.org/show_bug.cgi?id=51296

        Do not render a white background before rendering the page with DrawingAreaProxy.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::paint):

2010-12-17  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Window title for image documents shows corrupted characters instead of multiplication sign when using WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=43505

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp: Changed UI_STRING macros to return
        WebCore::String objects instead of C strings.
        (WebKit::formatLocalizedString): Added. Uses the Core Foundation string formatting function for
        reasons explained in the comment.
        (WebKit::WebPlatformStrategies::multipleFileUploadText): Use formatLocalizedString instead of
        String::format.
        (WebKit::WebPlatformStrategies::imageTitle): Ditto.
        (WebKit::WebPlatformStrategies::localizedMediaTimeDescription): Ditto.

2010-12-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Resizing a WKView while loading a page can leave the page at a size that doesn't match the window
        https://bugs.webkit.org/show_bug.cgi?id=51282
        <rdar://problem/8133142>

        Fix a race condition in waitForMessage. If we time out on the wait condition, we would keep the
        m_waitForMessageMutex mutex unlocked for a brief period of time before taking the lock again and
        then removing the messageID/destinationID pair from the hash map. Under some circumstances, the
        connection queue would update the hash map right before we removed it, leading to a lost message.
        
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::waitForMessage):

2010-12-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Simon Fraser.

        Clean up ChunkedUpdateDrawingAreaProxy
        https://bugs.webkit.org/show_bug.cgi?id=51277

        Get rid of m_lastSetViewSize since it was always equal to m_size.

        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::sizeDidChange):
        Call sendSetSize().

        (WebKit::ChunkedUpdateDrawingAreaProxy::didSetSize):
        Call sendSetSize if the size differs.

        (WebKit::ChunkedUpdateDrawingAreaProxy::sendSetSize):
        Move code from sizeDidChange over here.

        * UIProcess/ChunkedUpdateDrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::setSize):
        Add back the early return if the sizes are equal.

2010-12-17  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix.

        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::canHandleRequest): Provide alternative for
        non-CFNetwork implementation.

2010-12-17  Ada Chan  <adachan@apple.com>

        Reviewed by Anders Carlsson.

        Implement WKView::setInitialFocus().
        https://bugs.webkit.org/show_bug.cgi?id=51274

        * UIProcess/API/C/win/WKView.cpp:
        (WKViewSetInitialFocus):
        * UIProcess/API/C/win/WKView.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setInitialFocus): Send message to the Web Process to set
        initial focus.
        * UIProcess/WebPageProxy.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::setInitialFocus):
        * UIProcess/win/WebView.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setInitialFocus): Set the focused node to null initially.  Then
        ask FocusController to set the initial focus based on the focus direction.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Add a new message for SetInitialFocus.

2010-12-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Remove a check that probably uncovered a resizing bug.

        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::setSize):

2010-12-17  Brian Weinstein  <bweinstein@apple.com>

        Qt build fix.

        * UIProcess/qt/WebPopupMenuProxyQt.h:

2010-12-17  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Anders Carlsson.

        Text area does not update when you arrow through a <select> in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=51269
        <rdar://problem/8612853>
        
        Patch by Sam Weinig.
        
        Insteaed of keeping track of the selected index of a <select> just in the UI process, we
        need to pass this information along to the web process so that the web process can draw
        the correct text in the text field at the top of the select, when the selection changes (via
        the arrows or other typing while the select is opened).
        
        When the selected item in a popup changes, the UI process sends a message to the web process, telling
        it about the new selected index. The web process gets this message, and then sets the text that
        is visible in the select element.

        * UIProcess/API/mac/PageClientImpl.h: CreatePopupMenuProxy now takes a WebPageProxy.
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::createPopupMenuProxy): Pass the WebPageProxy to create.
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::createPopupMenuProxy):
        * UIProcess/API/qt/qwkpage_p.h: CreatePopupMenuProxy now takes a WebPageProxy.
        * UIProcess/PageClient.h: CreatePopupMenuProxy now takes a WebPageProxy.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::valueChangedForPopupMenu): Send that the selected index changed to the 
            web process.selected
        (WebKit::WebPageProxy::setTextFromItemForPopupMenu): Send that we should update the text for the
            active popup menu (with the index of the item to show).
        (WebKit::WebPageProxy::showPopupMenu): Pass the WebPageProxy to createPopupMenuProxy.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPopupMenuProxy.h: Add a client who has virtual functions for the state changing of the
            popup menu. ShowPopupMenu doesn't take a new selected index anymore, that is handled by the client,
            and calling down to the web process.
        (WebKit::WebPopupMenuProxy::Client::~Client):
        (WebKit::WebPopupMenuProxy::WebPopupMenuProxy): Initialize the client.
        * UIProcess/mac/WebPopupMenuProxyMac.h:
        (WebKit::WebPopupMenuProxyMac::create): Takes a WebPopupMenuProxy::Client, and passes it to the constructor.
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::WebPopupMenuProxyMac): Update what's initialized by the constructor.
        (WebKit::WebPopupMenuProxyMac::showPopupMenu): Call through to the web process that the value changed.
        * UIProcess/qt/WebPopupMenuProxyQt.cpp:
        (WebKit::WebPopupMenuProxyQt::WebPopupMenuProxyQt): Update what's initialized by the constructor.
        * UIProcess/win/WebPopupMenuProxyWin.cpp:
        (WebKit::WebPopupMenuProxyWin::WebPopupMenuProxyWin): Ditto.
        (WebKit::WebPopupMenuProxyWin::showPopupMenu): Call through to the web process that the value changed.
        (WebKit::WebPopupMenuProxyWin::setFocusedIndex): Resolve a FIXME to set the text of the popup menu.
        * UIProcess/win/WebPopupMenuProxyWin.h:
        (WebKit::WebPopupMenuProxyWin::create): Take in a WebPopupMenuProxy::client, and pass it to the constructor.
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::createPopupMenuProxy): Pass the WebPageProxy to create.
        * UIProcess/win/WebView.h:
        * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
        (WebKit::WebPopupMenu::setTextForIndex): Call through to setTextFromItem to set the select text.
        * WebProcess/WebCoreSupport/WebPopupMenu.h:
        * WebProcess/WebPage/WebPage.cpp: Call through to setTextForIndex on the active popup menu.
        (WebKit::WebPage::setTextForActivePopupMenu):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Add a new message.

2010-12-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        DrawingAreaProxy::setSize shouldn't be a virtual member function
        https://bugs.webkit.org/show_bug.cgi?id=51275

        Add a pure virtual sizeDidChange member function to DrawingAreaProxy, and only
        call it if the size changes.

        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::sizeDidChange):
        * UIProcess/ChunkedUpdateDrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::setSize):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::size):
        * UIProcess/LayerBackedDrawingAreaProxy.cpp:
        (WebKit::LayerBackedDrawingAreaProxy::sizeDidChange):
        * UIProcess/LayerBackedDrawingAreaProxy.h:
        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::sizeDidChange):
        * UIProcess/TiledDrawingAreaProxy.h:

2010-12-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add a WebPageProxy parameter to the DrawingAreaProxy constructor
        https://bugs.webkit.org/show_bug.cgi?id=51271

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:contextRef:pageGroupRef:]):
        (-[WKView _switchToDrawingAreaTypeIfNecessary:DrawingAreaInfo::]):
        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::QGraphicsWKView):
        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::create):
        (WebKit::ChunkedUpdateDrawingAreaProxy::ChunkedUpdateDrawingAreaProxy):
        * UIProcess/ChunkedUpdateDrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::DrawingAreaProxy):
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/LayerBackedDrawingAreaProxy.cpp:
        (WebKit::LayerBackedDrawingAreaProxy::create):
        (WebKit::LayerBackedDrawingAreaProxy::LayerBackedDrawingAreaProxy):
        * UIProcess/LayerBackedDrawingAreaProxy.h:
        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::create):
        (WebKit::TiledDrawingAreaProxy::TiledDrawingAreaProxy):
        * UIProcess/TiledDrawingAreaProxy.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView):
        (WebKit::WebView::switchToDrawingAreaTypeIfNecessary):

2010-12-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Add API for "Always Use the Complex Text Code Path"
        https://bugs.webkit.org/show_bug.cgi?id=51265

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters): Initialize shouldAlwaysUseComplexTextCodePath.
        (WebKit::WebProcessCreationParameters::encode): Encode shouldAlwaysUseComplexTextCodePath.
        (WebKit::WebProcessCreationParameters::decode): Decode shouldAlwaysUseComplexTextCodePath.
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/C/WKContext.cpp: 
        (_WKContextSetAlwaysUsesComplexTextCodePath): Added.
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext): Initialize m_alwaysUsesComplexTextCodePath.
        (WebKit::WebContext::ensureWebProcess): Set shouldAlwaysUseComplexTextCodePath in the creation parameters.
        (WebKit::WebContext::setAlwaysUsesComplexTextCodePath): Added. Sets m_alwaysUsesComplexTextCodePath and
        sends a message to the WebProcess.
        * UIProcess/WebContext.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess): Call setAlwaysUsesComplexTextCodePath() based on the creation
        parameters.
        (WebKit::WebProcess::setAlwaysUsesComplexTextCodePath): Added.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in: Added SetAlwaysUsesComplexTextCodePath.

2010-12-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        WebKit2: Implement a title attribute per frame
        https://bugs.webkit.org/show_bug.cgi?id=51266

        Cache the title of each frame on the WebFrameProxy. Removes
        the WebPageProxy's cache of the main frame title to just
        access the main frame.

        We clear the cached title on new committed loads and on failures
        to load.

        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameCopyTitle):
        * UIProcess/API/C/WKFrame.h:
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didCommitLoad):
        (WebKit::WebFrameProxy::didFailLoad):
        (WebKit::WebFrameProxy::didChangeTitle):
        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::title):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::pageTitle):
        (WebKit::WebPageProxy::didReceiveTitleForFrame):
        (WebKit::WebPageProxy::processDidCrash):
        * UIProcess/WebPageProxy.h:

2010-12-16  Darin Adler  <darin@apple.com>

        Reviewed by Maciej Stachowiak.

        Add text encoding menu API for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=51226

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSupportsTextEncoding): Added.
        (WKPageCopyCustomTextEncodingName): Added.
        (WKPageSetCustomTextEncodingName): Added.
        * UIProcess/API/C/WKPage.h: Added the functions above.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Initialize
        m_mainFrameHasCustomRepresentation to false.
        (WebKit::WebPageProxy::supportsTextEncoding): Added.
        (WebKit::WebPageProxy::setCustomTextEncodingName): Added.
        (WebKit::WebPageProxy::didCommitLoadForFrame): Set
        m_mainFrameHasCustomRepresentation.

        * UIProcess/WebPageProxy.h: Added supportsTextEncoding,
        setCustomTextEncodingName, customTextEncodingName, and
        m_mainFrameHasCustomRepresentation.

        * UIProcess/WebPageProxy.messages.in: Tweaked formatting
        (added a blank line).

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setCustomTextEncodingName): Added.
        * WebProcess/WebPage/WebPage.h: Added setCustomTextEncodingName.

        * WebProcess/WebPage/WebPage.messages.in: Added the
        SetCustomTextEncodingName message. Tweaked formatting of the
        dummy message.

2010-12-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r74201.
        http://trac.webkit.org/changeset/74201
        https://bugs.webkit.org/show_bug.cgi?id=51248

        It broke ~6000 layout tests (Requested by Ossy_ on #webkit).

        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::setGeometry):
        (QGraphicsWKView::itemChange):

2010-12-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Add svn:eol-style native to the message.in files as a favor to Darin Adler.

        * PluginProcess/PluginControllerProxy.messages.in: Added property svn:eol-style.
        * PluginProcess/PluginProcess.messages.in: Added property svn:eol-style.
        * PluginProcess/WebProcessConnection.messages.in: Added property svn:eol-style.
        * Shared/Plugins/NPObjectMessageReceiver.messages.in: Added property svn:eol-style.
        * UIProcess/Downloads/DownloadProxy.messages.in: Added property svn:eol-style.
        * UIProcess/Plugins/PluginProcessProxy.messages.in: Added property svn:eol-style.
        * UIProcess/WebContext.messages.in: Added property svn:eol-style.
        * UIProcess/WebDatabaseManagerProxy.messages.in: Added property svn:eol-style.
        * UIProcess/WebInspectorProxy.messages.in: Added property svn:eol-style.
        * UIProcess/WebPageProxy.messages.in: Added property svn:eol-style.
        * UIProcess/WebProcessProxy.messages.in: Added property svn:eol-style.
        * WebProcess/Authentication/AuthenticationManager.messages.in: Added property svn:eol-style.
        * WebProcess/Plugins/PluginProxy.messages.in: Added property svn:eol-style.
        * WebProcess/WebCoreSupport/WebDatabaseManager.messages.in: Added property svn:eol-style.
        * WebProcess/WebPage/WebInspector.messages.in: Added property svn:eol-style.
        * WebProcess/WebPage/WebPage.messages.in: Added property svn:eol-style.
        * WebProcess/WebProcess.messages.in: Added property svn:eol-style.

2010-12-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Move NSURLCache initialization from the ProcessLauncherMac to the centralized
        WebContext initialize WebProcess mechanism.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain):
        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::setShouldPaintNativeControls):

2010-12-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Defer getting a PluginProcessConnection object until the plug-in is initialized
        https://bugs.webkit.org/show_bug.cgi?id=51207
        <rdar://problem/8731306>

        Before this change, we would pass the PluginProcessConnection to the PluginProxy constructor, but not
        call PluginProcessConnection::addPluginProxy (which associates the plug-in proxy with the connection)
        until the plug-in is initialized.

        This could lead to a PluginProxy holding a reference to a PluginProcessConnection when the PluginProxyConnection
        itself did not know anything about the PluginProxy. This would happen when a page with plug-ins is opened in a background
        tab, with the plug-ins not yet initialized.

        Because of this, we could end up in a weird state, where the PluginProcessConnection would think that there are no
        more plug-ins alive, and invalidate (and null out) the underlying CoreIPC connection, which would lead to crashes
        when trying to send messages to the connection during later initialization.

        The fix is to pass the plug-in path to the PluginProxy constructor, and get the connection from PluginProxy::initialize.
        
        PluginProcessConnection object 
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::create):
        (WebKit::PluginProxy::PluginProxy):
        (WebKit::PluginProxy::initialize):
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):

2010-12-16  Enrica Casucci  <enrica@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKit2: Cannot copy two successive selections using cmd-c
        <rdar://problem/8680309> 
        https://bugs.webkit.org/show_bug.cgi?id=51203
        
        The previous implementation assumed a call sequence from AppKit that
        was not always happening.
        When the user clicks on the pulldown menu, AppKit sends validateUserInterfaceItem
        calls for each element that needs validation and we used to count the number of
        validation requests being sent to the web process.
        All these calls are made before we have the chance to get one reply from the WebProcess.
        We also delayed the menu update until we had received all the replies to the validation requests.
        At that point we called update on the menu to trigger the validation one more time with
        the data retrived from the WebProcess.
        When the user simply presses cmd-c, only one call to vaidateUserInterfaceItem is made
        and the menu update triggered the validation of all the menu entries causing the internal
        state to be out of sync.
        The new implementation is very simple: for each validation request from AppKit we send
        a request to the WebProcess and we cache a reference to the menu item being validated.
        When the WebProcess replies, we retrieve the menu item from our cache and update its state.
        
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:contextRef:pageGroupRef:]): Removed initialization of deleted memebers.
        (-[WKView validateUserInterfaceItem:]): Request validation to the WebProcess and return YES to 
        allow AppKit to do the keyBinding processing.
        (-[WKView _setUserInterfaceItemState:enabled:state:]): Called when the WebProcess replies to the
        validation request to check/uncheck and enable/disable the menu item.

2010-12-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver Hunt.

        Don't try to call plug-in member functions if the plug-in hasn't been initialized
        https://bugs.webkit.org/show_bug.cgi?id=51205
        <rdar://problem/8730204>

        Make sure that all PluginView functions that can be called while a plug-in has not been
        initialized (if the plug-in page is in a background tab for example) have an additional
        check for m_isInitialized.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::setWindowIsFocused):
        (WebKit::PluginView::windowAndViewFramesChanged):
        (WebKit::PluginView::platformLayer):
        (WebKit::PluginView::scriptObject):
        (WebKit::PluginView::privateBrowsingStateChanged):
        (WebKit::PluginView::handleEvent):
        (WebKit::PluginView::viewGeometryDidChange):
        (WebKit::PluginView::setFocus):

2010-12-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Add a bunch of m_isStarted assertions to plug-in code.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::frameDidFinishLoading):
        (WebKit::NetscapePlugin::frameDidFail):
        (WebKit::NetscapePlugin::didEvaluateJavaScript):
        (WebKit::NetscapePlugin::streamDidReceiveResponse):
        (WebKit::NetscapePlugin::streamDidReceiveData):
        (WebKit::NetscapePlugin::streamDidFinishLoading):
        (WebKit::NetscapePlugin::streamDidFail):
        (WebKit::NetscapePlugin::manualStreamDidReceiveResponse):
        (WebKit::NetscapePlugin::manualStreamDidReceiveData):
        (WebKit::NetscapePlugin::manualStreamDidFinishLoading):
        (WebKit::NetscapePlugin::manualStreamDidFail):
        (WebKit::NetscapePlugin::handleMouseEvent):
        (WebKit::NetscapePlugin::handleWheelEvent):
        (WebKit::NetscapePlugin::handleMouseEnterEvent):
        (WebKit::NetscapePlugin::handleMouseLeaveEvent):
        (WebKit::NetscapePlugin::handleKeyboardEvent):
        (WebKit::NetscapePlugin::setFocus):
        (WebKit::NetscapePlugin::pluginScriptableNPObject):
        (WebKit::NetscapePlugin::privateBrowsingStateChanged):

2010-12-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Save the manual plug-in stream data and redeliver it when the plug-in is initialized
        https://bugs.webkit.org/show_bug.cgi?id=51201

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::PluginView):
        Initialize m_manualStreamState.

        (WebKit::PluginView::manualLoadDidReceiveResponse):
        If the plug-in hasn't been initialized, store the response.

        (WebKit::PluginView::manualLoadDidReceiveData):
        If the plug-in hasn't been initialized, store the data.
        
        (WebKit::PluginView::manualLoadDidFinishLoading):
        If the plug-in hasn't been initialized, update the state.

        (WebKit::PluginView::manualLoadDidFail):
        If the plug-in hasn't been initialized, store the error and update the state.
        
        (WebKit::PluginView::initializePlugin):
        Call redeliverManualStream.

        (WebKit::PluginView::redeliverManualStream):
        Redeliver the manual stream to the plug-in.

        * WebProcess/Plugins/PluginView.h:

2010-12-16  Kimmo Kinnunen  <kimmo.t.kinnunen@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Turn off drawing area updates if the item is not visible

        The updates are controlled by the QGraphicsItem::visible property.

        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKViewPrivate::updateViewportSize):
        (QGraphicsWKView::setGeometry):
        (QGraphicsWKView::itemChange):

2010-12-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8731320> WebProcess’s CFNetwork cache is in ~/Library/Caches/com.apple.WebProcess

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess): Get the location, disk capacity and memory capacity
        of the UI process’s NSURLCache and pass them to the WebProcess.
        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain): If an NSURLCache location was passed on the command line, set the
        shared NSURLCache to that path and use the specified capacities as initial values.

2010-12-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam “I blame andersca” Weinig.

        Allow responses to be cached by the NSURLCache.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::willCacheResponse): Changed to return the response instead of 0.

2010-12-14  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adam Roben.

        Add IME support to WebKit2 on Windows
        https://bugs.webkit.org/show_bug.cgi?id=51049
        The implementation is very close to the one in WebKit.
        The main change is the addition of handlers for WM_IME_STARTCOMPOSITION,
        WM_IME_REQUEST, WM_IME_COMPOSITION, WM_IME_ENDCOMPOSITION,
        WM_IME_SELECT, WM_IME_SETCONTEXT and a number of new messages
        between the UI process and the WebProcess to send/retrieve
        the data being handled by the messages listed above.

        * UIProcess/PageClient.h: Added compositionSelectionChanged for Windows platform.
        * UIProcess/WebPageProxy.cpp:
        The following methods send synchronous messages to the WebProcess.
        (WebKit::WebPageProxy::firstRectForCharacterInSelectedRange): Retrieves the rectangle to position
        the cnadidates window.
        (WebKit::WebPageProxy::getSelectedText): Retrieves the currently selected text.
        The following methods send asynchronous messages to the WebProcess.
        (WebKit::WebPageProxy::confirmComposition):
        (WebKit::WebPageProxy::setComposition):
        (WebKit::WebPageProxy::didChangeSelection): Name changed.
        (WebKit::WebPageProxy::didChangeCompositionSelection): Called when there is a change
        in the composition selection.
        * UIProcess/WebPageProxy.messages.in: Added messages corresponding to the methods above.
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::wndProc): Added handling of messages for IME.
        The following are the handlers for the window message being sent during composition.
        (WebKit::WebView::onIMEComposition):
        (WebKit::WebView::onIMEEndComposition):
        (WebKit::WebView::onIMERequestCharPosition):
        (WebKit::WebView::onIMERequestReconvertString):
        (WebKit::WebView::onIMERequest):
        (WebKit::WebView::onIMESelect):
        (WebKit::WebView::onIMESetContext):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::respondToChangedSelection): Added notification
        of composition selection changed for Windows.
        * WebProcess/WebPage/win/WebPageWin.cpp:
        The following are the WebProcess counterparts of the new messages.
        (WebKit::WebPage::confirmComposition):
        (WebKit::WebPage::setComposition):
        (WebKit::WebPage::firstRectForCharacterInSelectedRange):
        (WebKit::WebPage::getSelectedText):

2010-12-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        Loading webkit.org over and over is slower in WebKit2 than WebKit1, looks like page is not cached
        <rdar://problem/8774683>
        https://bugs.webkit.org/show_bug.cgi?id=51143

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::canCachePage): Return true as long as we
        are not a custom representation (eg. a PDF).
        (WebKit::WebFrameLoaderClient::shouldCacheResponse): Always return true.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Enable the page cache.

2010-12-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adele Peterson.

        WebKit2 in compositing mode no longer has font smoothing
        https://bugs.webkit.org/show_bug.cgi?id=50733
        
        Tell the root GraphicsLayer that its contents are opaque
        if the WebPage draws its background, and that background
        is not transparent.
        
        The GraphicsLayer then uses the 'contentsOpaque' setting to
        determine whether to use font smoothing.
        
        Add pageBackgroundTransparencyChanged() to DrawingArea
        so that the WebPage can inform the DrawingArea when the
        background transparency changes.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::pageBackgroundTransparencyChanged):
        (WebKit::DrawingArea::onPageClose):
        * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
        (WebKit::LayerBackedDrawingArea::LayerBackedDrawingArea):
        (WebKit::LayerBackedDrawingArea::pageBackgroundTransparencyChanged):
        * WebProcess/WebPage/LayerBackedDrawingArea.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setDrawsBackground):
        (WebKit::WebPage::setDrawsTransparentBackground):

2010-12-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Fix assertion in plugins/return-error-from-new-stream-callback-in-full-frame-plugin.html test
        https://bugs.webkit.org/show_bug.cgi?id=51136

        Ensure that a plug-in that has explicitly cancelled the manual stream won't get any more callbacks.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::PluginControllerProxy):
        (WebKit::PluginControllerProxy::cancelManualStreamLoad):
        (WebKit::PluginControllerProxy::manualStreamDidReceiveResponse):
        (WebKit::PluginControllerProxy::manualStreamDidReceiveData):
        (WebKit::PluginControllerProxy::manualStreamDidFinishLoading):
        (WebKit::PluginControllerProxy::manualStreamDidFail):
        * PluginProcess/PluginControllerProxy.h:

2010-12-15  Brian Weinstein  <bweinstein@apple.com>

        Windows Build Fix. A .h file was added to the vcproj twice, but not its corresponding cpp file.

        * win/WebKit2.vcproj:

2010-12-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2: Can't add files to an <input type=file>
        https://bugs.webkit.org/show_bug.cgi?id=51087

        * Scripts/webkit2/messages.py:
        Adds new types.

        * Shared/API/c/WKBase.h:
        Adds WKOpenPanelParametersRef and WKOpenPanelResultListenerRef.

        * Shared/APIObject.h:
        Adds TypeOpenPanelParameters and TypeOpenPanelResultListener.

        * Shared/WebOpenPanelParameters.cpp: Added.
        (WebKit::WebOpenPanelParameters::create):
        (WebKit::WebOpenPanelParameters::WebOpenPanelParameters):
        (WebKit::WebOpenPanelParameters::~WebOpenPanelParameters):
        (WebKit::WebOpenPanelParameters::Data::encode):
        (WebKit::WebOpenPanelParameters::Data::decode):
        * Shared/WebOpenPanelParameters.h: Added.
        (WebKit::WebOpenPanelParameters::allowMultipleFiles):
        (WebKit::WebOpenPanelParameters::type):
        Class representing options one can pass to open panel.

        * UIProcess/API/C/WKAPICast.h:
        Add casts for WebOpenPanelParameters and WebOpenPanelResultListenerProxy.

        * UIProcess/API/C/WKOpenPanelParameters.cpp: Added.
        (WKOpenPanelParametersGetTypeID):
        (WKOpenPanelParametersGetAllowsMultipleFiles):
        * UIProcess/API/C/WKOpenPanelParameters.h: Added.
        * UIProcess/API/C/WKOpenPanelResultListener.cpp: Added.
        (WKOpenPanelResultListenerGetTypeID):
        (WKOpenPanelResultListenerChooseFiles):
        (WKOpenPanelResultListenerCancel):
        * UIProcess/API/C/WKOpenPanelResultListener.h: Added.
        Add API wrappers.

        * UIProcess/API/C/WKPage.h:
        Add new UI callback, WKPageRunOpenPanelCallback.

        * UIProcess/API/C/WebKit2.h:
        Add includes for new API headers.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage):
        Stub out the runOpenPanel callback.

        * UIProcess/WebOpenPanelResultListenerProxy.cpp: Added.
        (WebKit::WebOpenPanelResultListenerProxy::WebOpenPanelResultListenerProxy):
        (WebKit::WebOpenPanelResultListenerProxy::~WebOpenPanelResultListenerProxy):
        (WebKit::WebOpenPanelResultListenerProxy::chooseFiles):
        (WebKit::WebOpenPanelResultListenerProxy::cancel):
        (WebKit::WebOpenPanelResultListenerProxy::invalidate):
        * UIProcess/WebOpenPanelResultListenerProxy.h: Added.
        (WebKit::WebOpenPanelResultListenerProxy::create):
        (WebKit::WebOpenPanelResultListenerProxy::type):
        Adds the listener used to choose files for <input type=file>

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runOpenPanel):
        (WebKit::WebPageProxy::didChooseFilesForOpenPanel):
        (WebKit::WebPageProxy::didCancelForOpenPanel):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::runOpenPanel):
        * UIProcess/WebUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::runOpenPanel):
        * WebProcess/WebPage/WebOpenPanelResultListener.cpp: Added.
        (WebKit::WebOpenPanelResultListener::create):
        (WebKit::WebOpenPanelResultListener::WebOpenPanelResultListener):
        (WebKit::WebOpenPanelResultListener::~WebOpenPanelResultListener):
        (WebKit::WebOpenPanelResultListener::didChooseFiles):
        * WebProcess/WebPage/WebOpenPanelResultListener.h: Added.
        (WebKit::WebOpenPanelResultListener::disconnectFromPage):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):
        (WebKit::WebPage::setActiveOpenPanelResultListener):
        (WebKit::WebPage::didChooseFilesForOpenPanel):
        (WebKit::WebPage::didCancelForOpenPanel):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::activeOpenPanelResultListener):
        * WebProcess/WebPage/WebPage.messages.in:
        Pipe through file choosing.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:
        Add new files.

2010-12-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej Stachowiak.

        Semi-reproducible crash in ChunkedUpdateDrawingArea::paintIntoUpdateChunk closing a particular yahoo page
        https://bugs.webkit.org/show_bug.cgi?id=51126
        <rdar://problem/8771219>

        Laying out the web page can cause the drawing area to change so we need to protect against this.

        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
        (WebKit::ChunkedUpdateDrawingArea::display):
        * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
        (WebKit::LayerBackedDrawingArea::display):
        * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm:
        (WebKit::LayerBackedDrawingArea::updateLayoutRunLoopObserverFired):

2010-12-15  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        WebKit2: WebPageWin needs implementations of hasLocalDataForURL and canHandleRequest
        https://bugs.webkit.org/show_bug.cgi?id=51090
        
        Implement these functions for WebKit2 on Windows.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::hasLocalDataForURL): Does the cross-platform part of the check for having local
            data (file URL or subresource), then calls platformHasLocalDataForURL to let the platform do
            their specific checks.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformHasLocalDataForURL): Moved the cross-platform code from here to WebPage::hasLocalDataForURL.
        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (WebKit::WebPage::platformHasLocalDataForURL): Renamed from hasLocalDataForURL.
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::platformHasLocalDataForURL): Renamed from hasLocalDataForURL and implemented with CFNetwork calls. This is the
            CFNetwork equivalent of the code in WebPageMac::platformHasLocalDataForURL.
        (WebKit::WebPage::canHandleRequest): Copied the line of code from WebView::canHandleRequest in WebKit1, with a FIXME saying
            this might not be enough (although it was in WebKit1 on Windows).

2010-12-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r74117.
        http://trac.webkit.org/changeset/74117
        https://bugs.webkit.org/show_bug.cgi?id=51113

        This broke the GTK1 build. (Requested by mrobinson on
        #webkit).

        * GNUmakefile.am: Removed.
        * Scripts/generate-forwarding-headers.pl:
        * WebKit2Prefix.h:
        * gtk/webkit2.pc.in: Removed.

2010-12-15  Amruth Raj  <amruthraj@motorola.com> and Ravi Kasibhatla  <ravi.kasibhatla@motorola.com>

        Reviewed by Martin Robinson.

        Changes to enable building WebKit2 for Gtk port.
        (https://bugs.webkit.org/show_bug.cgi?id=37369)

        * GNUmakefile.am: Added. 
        * Scripts/generate-forwarding-headers.pl: For GTK port, taking 1 extra argument for copying network headers.
        * WebKit2Prefix.h: Included WebCore/config.h for GTK port as the first header file for WebKit2 sources files.
        * gtk: Added.
        * gtk/webkit2.pc.in: Added.

2010-12-15  Jan Erik Hanssen  <jhanssen@sencha.com>

        Reviewed by Andreas Kling.

        [Qt][WK2] webkit2 does not compile on OS X
        https://bugs.webkit.org/show_bug.cgi?id=50128

        prctl(2) is only available on Linux, so use an atexit handler for killing
        all the child processes when the process is exiting.

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::cleanupProcesses):
        (WebKit::QtWebProcess::QtWebProcess):
        (WebKit::QtWebProcess::processStateChanged):
        (WebKit::ProcessLauncherHelper::instance):

2010-12-14  Anders Carlsson  <andersca@apple.com>

        Fix Windows build.

        * win/WebKit2Common.vsprops:

2010-12-14  Anders Carlsson  <andersca@apple.com>

        Fix Qt build.

        * WebKit2.pro:

2010-12-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by TYPO FIX.

        Fix a typo.

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

2010-12-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Cannot type into plugin edit field
        https://bugs.webkit.org/show_bug.cgi?id=51074
        <rdar://problem/8483741>

        Add a PrognameShouldBeWebKitPluginHost quirk, since it turns out Flash Player calls getprogname() and checks
        if the return value is "WebKitPluginHost" in order to determine when to handle NPCocoaEventKeyDown events.

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::netscapePluginModule):
        If the plug-in module has the PrognameShouldBeWebKitPluginHost quirk, call setprogname("WebKitPluginHost").
        
        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::load):
        Call determineQuirks()

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::determineQuirks):
        Add the PrognameShouldBeWebKitPluginHost quirk for Flash.
        
        * Shared/Plugins/Netscape/win/NetscapePluginModuleWin.cpp:
        (WebKit::NetscapePluginModule::determineQuirks):
        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::NetscapePluginModule::determineQuirks):
        Add stubs.

        * Shared/Plugins/PluginQuirks.h:
        Add new PluginQuirks file.

        * WebKit2.xcodeproj/project.pbxproj:
        Add PluginQuirks.h

2010-12-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add a NetscapePluginModuleX11 and move the Qt implementation of PluginInfoStore::getPluginInfo there
        https://bugs.webkit.org/show_bug.cgi?id=51066

        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp: Copied from WebKit2/UIProcess/Plugins/qt/PluginInfoStoreQt.cpp.
        (WebKit::NetscapePluginModule::getPluginInfo):
        * UIProcess/Plugins/qt/PluginInfoStoreQt.cpp:
        (WebKit::PluginInfoStore::getPluginInfo):
        * WebKit2.pro:

2010-12-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Move Windows version of getPluginInfo to NetscapePluginModule
        https://bugs.webkit.org/show_bug.cgi?id=51073

        * Shared/Plugins/Netscape/win/NetscapePluginModuleWin.cpp: Added.
        (WebKit::getVersionInfo):
        (WebKit::fileVersion):
        (WebKit::NetscapePluginModule::getPluginInfo):
        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        (WebKit::PluginInfoStore::getPluginInfo):
        * win/WebKit2.vcproj:

2010-12-14  Alice Liu  <alice.liu@apple.com>

        Fix clang++ build.

        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::sendSync):
        Move the default argument to the declaration.

2010-12-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Move PluginInfoStore::getPluginInfo to NetscapePluginModule
        https://bugs.webkit.org/show_bug.cgi?id=51058

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        Move implementation of PluginInfoStore::getPluginInfo and related
        helper functions here.

        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::getPluginInfo):
        Just call NetscapePluginModule::getPluginInfo here for now.

        * WebKit2.xcodeproj/project.pbxproj:
        Add NetscapePluginModuleMac.mm.

2010-12-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Switch name and description order when fetching Carbon plug-in info
        https://bugs.webkit.org/show_bug.cgi?id=46211

        The plug-in description comes before the name in the Carbon string list resource.

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

2010-12-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Move NetscapePluginModule.{cpp|h} to Shared/Plugins/Netscape
        https://bugs.webkit.org/show_bug.cgi?id=51052

        * Shared/Plugins/Netscape/NetscapePluginModule.cpp: Renamed from WebKit2/WebProcess/Plugins/Netscape/NetscapePluginModule.cpp.
        * Shared/Plugins/Netscape/NetscapePluginModule.h: Renamed from WebKit2/WebProcess/Plugins/Netscape/NetscapePluginModule.h.
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Common.vsprops:

2010-12-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Handle complex text input for plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=51047

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::sendComplexTextInput):
        Pass along the text input to the plug-in.

        * PluginProcess/PluginControllerProxy.messages.in:
        Add SendComplexTextInput message.

        * UIProcess/API/mac/WKTextInputWindowController.h: Added.
        * UIProcess/API/mac/WKTextInputWindowController.mm: Added.
        Add text input window controller, mostly copied from WebKit1.
        
        * UIProcess/API/mac/WKView.mm:
        (-[WKView keyDown:]):
        If needed, pass along the event to the text input window controller.

        (-[WKView inputContext]):
        Return the input context of the text input window controller.

        (-[WKView _setComplexTextInputEnabled:pluginComplexTextInputIdentifier:]):
        Notify the input window controller that the input source changed.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::sendComplexTextInputToPlugin):
        Send the complex text input to the web process.

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

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::convertStringToKeyCodes):
        Convert a string to a vector of key codes in the current encoding.

        (WebKit::NetscapePlugin::sendComplexTextInput):
        In the Cocoa event model, create and dispatch an NPCocoaEventTextInput event.
        In the Carbon event model, convert the string to individual key codes and send them
        as key down events.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::sendComplexTextInput):
        Send the text to the plug-in controller proxy.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::sendComplexTextInput):
        If the plug-in has a matching text input identifier, call Plugin::sendComplexTextInput.

        * WebProcess/WebPage/WebPage.messages.in:
        Add SendComplexTextInputToPlugin message.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::sendComplexTextInputToPlugin):
        Iterate over all known plug-in views and try to find one to send the text input to.

2010-12-13  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=50953
        DNS Prefetch should be an opt-in feature

        Pass the preference through WebKit2.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetDNSPrefetchingEnabled):
        (WKPreferencesGetDNSPrefetchingEnabled):
        * UIProcess/API/C/WKPreferences.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2010-12-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Pass the complex text input status to the WKView
        https://bugs.webkit.org/show_bug.cgi?id=50993

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setComplexTextInputEnabled):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setComplexTextInputEnabled:pluginComplexTextInputIdentifier:]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setComplexTextInputEnabled):

2010-12-14  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        WebKit 2 does not send touch cancel events correctly between processes
        https://bugs.webkit.org/show_bug.cgi?id=50235

        The classes WebKit2PlatformTouchPoint and WebKit2PlatformTouchEvent
        misses the conversion of TouchCancel events and points.

        This patch add the missing enums when converting from a WebTouchEvent
        to a PlatformTouchEvent.

        Testing is already covered by fast/events/touch/send-oncancel-event.html

        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformTouchPoint::WebKit2PlatformTouchPoint):
        (WebKit::WebKit2PlatformTouchEvent::WebKit2PlatformTouchEvent):

2010-12-14  Zalan Bujtas  <zbujtas@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        Add loadFinished() for provisional load error
        This fixes the hanging UI state, when provisional load error occurs due to
        the async nature of policy check.

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

        * UIProcess/API/qt/ClientImpl.cpp:
        (loadFinished):
        (qt_wk_didFailProvisionalLoadWithErrorForFrame):
        (qt_wk_didFinishLoadForFrame):
        (qt_wk_didFailLoadWithErrorForFrame):

2010-12-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2: Need to be able to set the application name for the user agent for a WKPage
        https://bugs.webkit.org/show_bug.cgi?id=51011

        Fixes:
            WebKit2: Need to be able to set the application name for the user agent for a WKPage
            <rdar://problem/8564532>
            WebKit2: Need to be able to get the computed user agent for a WKPage
            <rdar://problem/8637285>

        Moves user agent computation to the UIProcess and just passes it to the WebProcess
        when it has changed.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        Add a user agent to the creation parameters.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageCopyUserAgent):
        (WKPageCopyApplicationNameForUserAgent):
        (WKPageSetApplicationNameForUserAgent):
        (WKPageSetCustomUserAgent):
        * UIProcess/API/C/WKPage.h:
        Add new API to set the application name and access the computed user agent.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::setUserAgent):
        (WebKit::WebPageProxy::setApplicationNameForUserAgent):
        (WebKit::WebPageProxy::setCustomUserAgent):
        (WebKit::WebPageProxy::processDidCrash):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::userAgent):
        (WebKit::WebPageProxy::applicationNameForUserAgent):
        * UIProcess/mac/WebPageProxyMac.mm: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::setUserAgent):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::userAgent):
        * WebProcess/WebPage/WebPage.messages.in:
        Pipe through user agent.

        (WebKit::callGestalt):
        (WebKit::macOSXVersionString):
        (WebKit::userVisibleWebKitVersionString):
        (WebKit::WebPageProxy::standardUserAgent):
        * UIProcess/win/WebPageProxyWin.cpp: Added.
        (WebKit::windowsVersion):
        (WebKit::userVisibleWebKitVersionString):
        (WebKit::WebPageProxy::standardUserAgent):
        Port standardUserAgent computation from WebKit1.

        * UIProcess/qt/WebPageProxyQt.cpp: Added.
        (WebKit::WebPageProxy::standardUserAgent):
        Stub out the user agent so there is no change in behavior.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Add new file.

2010-12-13  Brady Eidson  <beidson@apple.com>

        Reviewed by Jon Honeycutt (and Brian Weinstein in heart).

        <rdar://problem/8752202> and https://bugs.webkit.org/show_bug.cgi?id=50997
        Expose "link title" and "link label" to InjectedBundleHitTestResult API

        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp:
        (WKBundleHitTestResultCopyLinkLabel):
        (WKBundleHitTestResultCopyLinkTitle):
        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.h:

        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
        (WebKit::InjectedBundleHitTestResult::linkLabel):
        (WebKit::InjectedBundleHitTestResult::linkTitle):
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.h:

2010-12-13  Brian Weinstein  <bweinstein@apple.com>

        Windows Build Fix. Add a needed include.

        * UIProcess/win/WebView.cpp:

2010-12-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove associated page concept from WKView constructor
        https://bugs.webkit.org/show_bug.cgi?id=50983

        Step 2: Remove WebPageNamespace.  It no longer does anything.

        * Shared/APIObject.h:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:contextRef:pageGroupRef:]):
        * UIProcess/API/qt/qgraphicswkview.cpp:
        * UIProcess/API/qt/qwkcontext.cpp:
        (QWKContext::QWKContext):
        * UIProcess/API/qt/qwkcontext_p.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::QWKPagePrivate):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::createWebPage):
        * UIProcess/WebContext.h:
        * UIProcess/WebPageNamespace.cpp: Removed.
        * UIProcess/WebPageNamespace.h: Removed.
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::context):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::createWebPage):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView):
        * UIProcess/win/WebView.h:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2010-12-13  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * UIProcess/win/WebView.h:

2010-12-13  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * UIProcess/win/WebView.h:
        (WebKit::WebView::create):

2010-12-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove associated page concept from WKView constructor
        https://bugs.webkit.org/show_bug.cgi?id=50983

        Step 1: Remove associate page constructors from WKView and make
        all views use the shared namespace for the context.

        * UIProcess/API/C/win/WKView.cpp:
        * UIProcess/API/C/win/WKView.h:
        * UIProcess/API/mac/WKView.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:contextRef:pageGroupRef:]):
        * UIProcess/API/qt/qwkcontext.cpp:
        * UIProcess/API/qt/qwkcontext.h:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView):
        * UIProcess/win/WebView.h:
        (WebKit::WebView::create):

2010-12-13  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * UIProcess/WebPageProxy.h:

2010-12-13  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Leaks a WebView when opening/closing Web Inspector on Windows
        https://bugs.webkit.org/show_bug.cgi?id=50975
        <rdar://problem/8763501>
        
        Make m_inspectorView be a RefPtr<WebView>, instead of a WebView*.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::WebInspectorProxy): If we are on Windows, include WebView.h.
        * UIProcess/WebInspectorProxy.h: Change the type of m_inspectorView to a RefPtr<WebView>.
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage): Remove the call to leakRef when creating the WebView.

2010-12-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Pass the complex text input state all the way to the UI process
        https://bugs.webkit.org/show_bug.cgi?id=50980

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::setComplexTextInputEnabled):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setComplexTextInputEnabled):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::pluginComplexTextInputIdentifier):
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::pluginComplexTextInputIdentifier):
        (WebKit::PluginProxy::setComplexTextInputEnabled):
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginProxy.messages.in:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::setComplexTextInputEnabled):

2010-12-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Change the WebKit2 public API so there is no explicit WKPageNamespace object
        https://bugs.webkit.org/show_bug.cgi?id=50898

        * Shared/API/c/WKBase.h: Remove definition of WKPageNamespaceRef.
        * UIProcess/API/C/WKAPICast.h: Remove toAPI/toImpl for WKPageNamespaceRef.

        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/C/WKPage.h:
        Replace WKPageGetPageNamespace with WKPageGetContext.

        * UIProcess/API/C/WKPageNamespace.cpp: Removed.
        * UIProcess/API/C/WKPageNamespace.h: Removed.

        * UIProcess/API/C/WebKit2.h: Remove #include of WKPageNamespace.h.

        * UIProcess/API/C/win/WKView.cpp:
        (WKViewCreate): Changed to take a WKContextRef instead of a WKPageNamespaceRef.
        (WKViewCreateUsingSharedProcess): Added. Similar to WKViewCreate except that
        all callers of it will have their views end up in the same shared process, whereas 
        with WKViewCreate, a new internal page namespace will be created and could place
        the view's WebPage into a new process.
        (WKViewCreateForAssociatedPage): Added. Creates a view that is forced to use the
        same process as the passed in page.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView):
        (WebKit::WebView::initialize):
        * UIProcess/win/WebView.h:
        (WebKit::WebView::create):
        (WebKit::WebView::createUsingSharedProcess):
        (WebKit::WebView::createForAssociatedPage):
        Implementation of the WKView create functions.

        * UIProcess/API/C/win/WKView.h:
        * UIProcess/API/mac/WKView.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:]):
        (-[WKView initWithFrame:contextRef:]):
        (-[WKView initWithFrame:contextRef:pageGroupRef:]):
        (-[WKView initWithFrame:contextRef:usingSharedProcess:]):
        (-[WKView initWithFrame:contextRef:pageGroupRef:usingSharedProcess:]):
        (-[WKView initWithFrame:forAssociatedPageRef:]):
        (-[WKView initWithFrame:forAssociatedPageRef:pageGroupRef:]):
        (-[WKView initWithFrame:pageNamespace:pageGroup:]):
        Add new initializers for the objective-c WKView. It follows the same
        pattern as WKViewRef.

        * UIProcess/API/qt/qwkcontext.cpp:
        (QWKContext::QWKContext):
        * UIProcess/API/qt/qwkcontext.h:
        Remove uses of WKPageNamespaceRef.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::sharedPageNamespace): Returns a shared
        page namespace used by the view's createUsingSharedProcess constructions.
        (WebKit::WebContext::createPageNamespace): Change to return
        a PassRefPtr to make things clearer.
        (WebKit::WebContext::pageNamespaceWasDestroyed): Clear the shared
        namespace if it is cleared.
        * UIProcess/WebContext.h:

        * UIProcess/WebPageNamespace.h: Remove unused "struct WKContextStatistics".

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::context):
        * UIProcess/WebPageProxy.h:
        Add context getter.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        Use forAssociatedPageRef constructor for the WebInspector view.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:
        Remove WKPageNamespace.h/cpp.

2010-12-13  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix.

        * UIProcess/win/WebInspectorProxyWin.cpp: Non-Apple builds
        need to include <wtf/RetainPtr.h>.

2010-12-13  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix after r73807.

        Added stub implementation of Download object.

        * WebProcess/Downloads/curl: Added.
        * WebProcess/Downloads/curl/DownloadCurl.cpp: Added.
        (WebKit::Download::start):
        (WebKit::Download::startWithHandle):
        (WebKit::Download::cancel):
        (WebKit::Download::platformInvalidate):
        * win/WebKit2.vcproj: Exclude DownloadCFNet for Cairo builds,
        added DownloadCurl (excluded for regular Apple builds.)

2010-12-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add the ability for plug-ins to toggle complex text input
        https://bugs.webkit.org/show_bug.cgi?id=50966

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

        (WebKit::PluginControllerProxy::setComplexTextInputEnabled):
        Update m_isComplexTextInputEnabled.

        * PluginProcess/PluginControllerProxy.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin):
        Initialize m_pluginHasFocus and m_windowHasFocus.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        (WebKit::NetscapePlugin::isWindowActive):
        Return m_windowHasFocus.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformSetFocus):
        Update m_pluginHasFocus and call setComplexTextInputEnabled.

        (WebKit::NetscapePlugin::windowFocusChanged):
        Update m_windowHasFocus and call setComplexTextInputEnabled.

        * WebProcess/Plugins/PluginController.h:
        Add setComplexTextInputEnabled.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::setComplexTextInputEnabled):
        * WebProcess/Plugins/PluginView.h:
        Add setComplexTextInputEnabled

2010-12-13  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Remove the space behavior that I added.  It's covered in EventHandler in WebCore
        already for Windows.

        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent):

2010-12-13  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=48545, Home/End, PageUp/PageDwn should respect writing-mode.  Use
        logical scrolling instead of physical scrolling for those keys in WebKit2.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::logicalScroll):
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent):
        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (WebKit::logicalScroll):
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent):
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::logicalScroll):
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent):

2010-12-13  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Focusing Web Inspector window doesn't focus contents on Windows
        https://bugs.webkit.org/show_bug.cgi?id=50947
        <rdar://problem/8762468>
        
        When we get the notification that the inspector window has focused, focus the inner inspector view.

        * UIProcess/WebInspectorProxy.h:
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::onSetFocusEvent): Set the focus of the inspector view, because that is what
            needs to be focused in the inspector window.

2010-12-13  Dan Bernstein  <mitz@apple.com>

        Coding style fix.

        * WebProcess/Downloads/mac/DownloadMac.mm:
        (WebKit::originatingURLFromBackForwardList):

2010-12-13  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed trivial build fix (linux, 64 bit, gcc-4.5.1)

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::exceededDatabaseQuota):
        Don't use unsigned long long as alias for uint64_t.

2010-12-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Crash when clicking a download link that targets a new tab
        https://bugs.webkit.org/show_bug.cgi?id=50935
        <rdar://problem/8760572>

        Check for a null history item.

        * WebProcess/Downloads/mac/DownloadMac.mm:
        (WebKit::originatingURLFromBackForwardList):

2010-12-13  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt][WK2] Fix build if WebKitTools are not available
        https://bugs.webkit.org/show_bug.cgi?id=50242

        * DerivedSources.pro: Remove dependency to WebKitTools.
        * Scripts/generate-forwarding-headers.pl: Moved from WebKitTools/Scripts/generate-forwarding-headers.pl.

2010-12-13  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed.

        * WebKit2.pro: Remove non-existant Shared/DrawingAreaBase.h from build system.

2010-10-28  MORITA Hajime  <morrita@google.com>

        Reviewed by Ojan Vafai.

        spellcheck does not check pasted text
        https://bugs.webkit.org/show_bug.cgi?id=40092

        Added a stub implememntation.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::requestCheckingOfString):
        * WebProcess/WebCoreSupport/WebEditorClient.h:

2010-12-12  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Tim Hatcher.

        WebKit2: Implement WebInspector::localizedStringsURL on Windows
        https://bugs.webkit.org/show_bug.cgi?id=50896
        
        Find the localized strings file using CFBundleCopyResourceURL.

        * WebProcess/WebPage/win/WebInspectorWin.cpp:
        (WebKit::WebInspector::localizedStringsURL):

2010-12-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Give LogTextInput a sensible flag value.

        * Platform/Logging.cpp:

2010-12-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove incorrect assertion that has been firing in the API tester.

        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::~WebDatabaseManagerProxy):

2010-12-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Disable WebKit2 logging by default.
        https://bugs.webkit.org/show_bug.cgi?id=50878

        * Platform/Logging.cpp:
        (initializeLogChannelsIfNecessary):

2010-12-11  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Sam Weinig.

        Web Inspector: Make inspector on Windows show and be usable in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=50877
        
        Hook up the unimplemented methods in WebInspectorProxyWin to get the web inspector
        showing and usable in WebKit2 on Windows.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::WebInspectorProxy): Initialize Windows-specific variables to 0.
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::registerInspectorViewWindowClass): Sets up the inspector view class.
        (WebKit::WebInspectorProxy::InspectorViewWndProc): Calls through to the WebInspectorProxy's non-static
            WndProc.
        (WebKit::WebInspectorProxy::wndProc): Handles WM_SIZE, WM_CLOSE, and WM_GETMINMAXINFO, the rest go to 
            ::DefWindowProc.
        (WebKit::WebInspectorProxy::onSizeEvent): Resize the WKView that has the inspector page to match the
            outer window that was just resized.
        (WebKit::WebInspectorProxy::onMinMaxInfoEvent): Set the minimum size the window can be resized to.
        (WebKit::WebInspectorProxy::onCloseEvent): Hide the window, and call WebInspectorProxy::close.
        (WebKit::WebInspectorProxy::platformCreateInspectorPage): Create a WKView and return its page.
        (WebKit::WebInspectorProxy::platformOpen): Create an HWND for the inspector, put the inspector's WKView
            inside of it, and show the window.
        (WebKit::WebInspectorProxy::platformClose): Destroy the inspector's window (which destroys the child WKView), 
            and 0 out instance variables.
        (WebKit::WebInspectorProxy::inspectorPageURL): Finds inspector/inspector.html in the WebKit bundle.

2010-12-12  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] Crash in WebPage constructor.
        https://bugs.webkit.org/show_bug.cgi?id=50892

        * WebProcess/qt/WebProcessQt.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):
        Disable runtime enabled features that have no WebKit2 implementation yet.

2010-12-10  Jon Honeycutt  <jhoneycutt@apple.com>

        Select menus with short option titles do not paint properly
        https://bugs.webkit.org/show_bug.cgi?id=50860
        <rdar://problem/8660807>

        The backing stores used for painting the popup menu items were only as
        wide as the widest option title, but the popup window that we create is
        at least as wide as the <select> element. This adjusts the backing
        stores to be at least as wide as the <select>, as well.

        Reviewed by Sam Weinig.

        * UIProcess/win/WebPopupMenuProxyWin.cpp:
        (WebKit::WebPopupMenuProxyWin::paint):
        Paint using the width of the backing store.

        * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
        (WebKit::WebPopupMenu::show):
        Pass the page coordinates of the <select> element to
        setUpPlatformData().

        * WebProcess/WebCoreSupport/WebPopupMenu.h:
        Added new parameter to setUpPlatformData().

        * WebProcess/WebCoreSupport/mac/WebPopupMenuMac.mm:
        (WebKit::WebPopupMenu::setUpPlatformData):
        Ditto.

        * WebProcess/WebCoreSupport/qt/WebPopupMenuQt.cpp:
        (WebKit::WebPopupMenu::setUpPlatformData):
        Ditto.

        * WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp:
        (WebKit::WebPopupMenu::setUpPlatformData):
        Fixed a typo in a comment. Adjust the backing store size to be at least
        as wide as the <select> element, and use that width when painting the
        items to the backing store.

2010-12-11  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed Qt buildfix after r73808.

        WebKit2: Need a WebKit2 equivalent of the WebKit1 WebDatabaseManager
        https://bugs.webkit.org/show_bug.cgi?id=50606

        * DerivedSources.pro:

2010-12-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r73834.
        http://trac.webkit.org/changeset/73834
        https://bugs.webkit.org/show_bug.cgi?id=50866

        It broke Qt-WebKit2 build, because of missing WK2_DIR variable
        (Requested by Ossy on #webkit).

        * WebKit2.pro:

2010-12-10  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Eric Seidel.

        [Qt][WK2] Make WebKit2 static library compile on Symbian
        https://bugs.webkit.org/show_bug.cgi?id=50861

        * WebKit2.pro:

2010-12-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Ensure that we are not getting too many wheel events
        <rdar://problem/7881465>

        Add simple coalescing of wheel events being sent to the WebProcess. This 
        adds two models, one which drops interim events and one which merges events
        together. For now, we are using the simpler dropping model.

        * Shared/WebEvent.h:
        (WebKit::WebEvent::modifiers):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::coalesceWheelEvents):
        (WebKit::WebPageProxy::handleWheelEvent):
        (WebKit::WebPageProxy::didReceiveEvent):
        * UIProcess/WebPageProxy.h:

2010-12-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Make WKContextGetStatistics gather global statistics
        https://bugs.webkit.org/show_bug.cgi?id=50850

        Change WKContextGetStatistics to work on all objects in the process, and
        make it more robust by incrementing/decrementing the counts in the constructor
        and destructor respectively. 
        
        Also, rename WKContextGetStatistics to WKContextGetGlobalStatistics to better match
        what it's actually doing.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetStatistics):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:pageNamespaceRef:pageGroupRef:]):
        (-[WKView dealloc]):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::statistics):
        * UIProcess/WebContext.h:
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::WebFrameProxy):
        (WebKit::WebFrameProxy::~WebFrameProxy):
        * UIProcess/WebPageNamespace.cpp:
        * UIProcess/WebPageNamespace.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::~WebPageProxy):
        * UIProcess/WebPageProxy.h:

2010-12-10  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Context menu support on Windows
        <https://bugs.webkit.org/show_bug.cgi?id=50514>
        
        Implment showing of the context menu on Windows for WebKit2, and calling through to
        WebPageProxy::contextMenuItemSelected.

        * UIProcess/win/WebContextMenuProxyWin.cpp:
        (WebKit::WebContextMenuProxyWin::WebContextMenuProxyWin): Initialize the member variables.
        (WebKit::WebContextMenuProxyWin::populateMenu): Iterate over the vector of WebContextMenuItemData
            that was passed in, adding the menu items and recursively calling back into this function to populate
            any submenus that are needed. This function also sets up the map from action identifierss to WebContextMenuItemData,
            to use to find the WebContextMenuItemData from a selected menu item.
        (WebKit::WebContextMenuProxyWin::showContextMenu): Destroy any menu we have already created, populate the menu
            to show, and show the context menu. Once TrackPopupMenuEx returns, it returns identifier of the selected menu item.
            Look up that identifier in the map we created, and tell the WebPageProxy that a context menu item was selected.
        (WebKit::WebContextMenuProxyWin::hideContextMenu): Destroy the HMENU if it is non-null, and clear the identifier map. 
        * UIProcess/win/WebContextMenuProxyWin.h:
        (WebKit::WebContextMenuProxyWin::create): Call through to the constructor, and change the arguments that it takes.
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::createContextMenuProxy): Call with the correct arguments.

2010-12-10  Jessie Berlin  <jberlin@apple.com>

        Qt Build Fix. Unreviewed.

        * WebKit2.pro:
        Add the Messages.h and MessageReceivers.h.

2010-12-10  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben and Sam Weinig.

        WebKit2: Need a WebKit2 equivalent of the WebKit1 WebDatabaseManager
        https://bugs.webkit.org/show_bug.cgi?id=50606

        Add a WebDatabaseManagerProxy owned by the WebContext.

        Expose API (similar to the WebKit1 API) to get a list of origins for which there are
        Databases, delete all the databases for a given origin, and delete all the databases.

        Add WebDatabaseManager and WebDatabaseManagerProxy as messages receivers.
        * DerivedSources.make:
        * Platform/CoreIPC/MessageID.h:

        Add the WebDatabaseManagerProxy as a UIProcess type (DatabaseManager).
        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        * UIProcess/API/C/WKAPICast.h:

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetDatabaseManager):
        Expose API to get the DatabaseManager.
        * UIProcess/API/C/WKContext.h:

        * UIProcess/API/C/WKDatabaseManager.cpp: Added.
        (WKDatabaseManagerGetTypeID):
        (WKDatabaseManagerGetDatabaseOrigins):
        (callGetDatabaseOriginsBlockBlockAndDispose):
        (WKDatabaseManagerGetDatabaseOrigins_b):
        (WKDatabaseManagerDeleteDatabasesForOrigin):
        (WKDatabaseManagerDeleteAllDatabases):
        * UIProcess/API/C/WKDatabaseManager.h: Added.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        Create the WebDatabaseManagerProxy.
        (WebKit::WebContext::processDidClose):
        Invalidate the WebDatabaseManagerProxy.
        (WebKit::WebContext::didReceiveMessage):
        Forward messages to the WebDatabaseManagerProxy.
        * UIProcess/WebContext.h:
        (WebKit::WebContext::databaseManagerProxy):

        * UIProcess/WebDatabaseManagerProxy.cpp: Added.
        (WebKit::WebDatabaseManagerProxy::create):
        (WebKit::WebDatabaseManagerProxy::WebDatabaseManagerProxy):
        (WebKit::WebDatabaseManagerProxy::~WebDatabaseManagerProxy):
        (WebKit::WebDatabaseManagerProxy::invalidate):
        Invalidate the map of callbacks for getDatabaseOrigins.
        (WebKit::WebDatabaseManagerProxy::getDatabaseOrigins):
        Store the callback and send the request for the origins which have databases to the
        WebProcess.
        (WebKit::WebDatabaseManagerProxy::didGetDatabaseOrigins):
        Call the callback function with the SecurityOrigins created from the identifiers received.
        (WebKit::WebDatabaseManagerProxy::deleteDatabasesForOrigin):
        If the origin exists, send the message on to the WebProcess to delete the databases
        associated with that origin.
        (WebKit::WebDatabaseManagerProxy::deleteAllDatabases):
        Send the message to the WebProcess to delete all the databases.
        * UIProcess/WebDatabaseManagerProxy.h: Added.
        (WebKit::WebDatabaseManagerProxy::type):
        * UIProcess/WebDatabaseManagerProxy.messages.in: Added.

        * UIProcess/WebPageProxy.cpp:
        Move invalidateCallbackMap from here ...
        * UIProcess/GenericCallback.h:
        (WebKit::invalidateCallbackMap):
        .. to here so that it can be used elsewhere (e.g. by WebDatabaseManagerProxy).

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        Forward on all messages destined for the WebDatabaseManagerProxy to the WebContext.

        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        (WebKit::WebDatabaseManager::didReceiveMessage):
        (WebKit::WebDatabaseManager::getDatabaseOrigins):
        Send an array of the identifiers for the SecurityOrigins for which there are databases to
        the UIProcess.
        (WebKit::WebDatabaseManager::deleteDatabasesForOrigin):
        If the SecurityOrigin with that identifier exists, tell the DatabaseTracker to delete the
        databases for that origin.
        (WebKit::WebDatabaseManager::deleteAllDatabases):
        Tell the DatabaseTracker to delete the databases for that origin.
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:
        * WebProcess/WebCoreSupport/WebDatabaseManager.messages.in: Added.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage):

        * WebKit2.pro:
        Add WKDatabaseManager.cpp/.h and WebDatabaseManagerProxy.cpp/.h
        * WebKit2.xcodeproj/project.pbxproj:
        Ditto, also add WebDatabaseManagerProxy.messages.in and WebDatabaseManager.messages.in.
        * win/WebKit2.vcproj:
        Ditto.
        * win/WebKit2Generated.make:
        Make sure WKDatabaseManager.h is copied into WebKitBuild on Windows.

2010-12-10  Ada Chan  <adachan@apple.com>

        Reviewed by Anders Carlsson.

        Implement Download::start() and Download::startWithHandle() on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=50844

        * WebProcess/Downloads/Download.h:
        * WebProcess/Downloads/cf/DownloadCFNet.cpp:
        (WebKit::Download::start): Create a CFURLDownloadRef and schedule it.
        (WebKit::Download::startWithHandle): Create a CFURLDownloadRef with the loading connection
        retrieved from the ResourceHandle.
        (WebKit::Download::platformInvalidate):
        (WebKit::downloadFromClientInfo):
        (WebKit::didStartCallback):
        (WebKit::willSendRequestCallback):
        (WebKit::didReceiveAuthenticationChallengeCallback):
        (WebKit::didReceiveResponseCallback):
        (WebKit::willResumeWithResponseCallback):
        (WebKit::didReceiveDataCallback):
        (WebKit::shouldDecodeDataOfMIMETypeCallback):
        (WebKit::decideDestinationWithSuggestedObjectNameCallback):
        (WebKit::didCreateDestinationCallback):
        (WebKit::didFinishCallback):
        (WebKit::didFailCallback):

2010-12-10  Enrica Casucci  <enrica@apple.com>

        Windows build fix. Unreviewed.

        Adding a dummy synchronous message for platforms
        that don't have any.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::dummy):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2010-12-09  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Prep for WebKit2: Context menu support on Windows
        https://bugs.webkit.org/show_bug.cgi?id=50514
        
        Update WebKit2 to call the correct code when CROSS_PLATFORM_CONTEXT_MENUS is set.

        * Shared/WebContextMenuItemData.cpp:
        (WebKit::WebContextMenuItemData::WebContextMenuItemData): Add a branch based on whether or not 
            CROSS_PLATFORM_CONTEXT_MENUS is set.
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::customizeMenu): Define different functions based on
            whether or not CROSS_PLATFORM_CONTEXT_MENUS. Both of these are stubs, so functionality
            doesn't need to be shared.
        * WebProcess/WebCoreSupport/WebContextMenuClient.h: Define different functions based on
            whether or not CROSS_PLATFORM_CONTEXT_MENUS. 
        * WebProcess/WebPage/WebContextMenu.cpp:
        (WebKit::WebContextMenu::show): Add a branch based on whether or not 
            CROSS_PLATFORM_CONTEXT_MENUS is set.

2010-12-09  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        Implement IME support for Mac.
        <rdar://problem/7660589> WebKit2: Implement IME support for Mac.
        https://bugs.webkit.org/show_bug.cgi?id=50788
            
        This patch addes support for input methods in WebKit2.
        In order to support IME, it was necessary to add synchronous calls from the UIProcess
        to the WebProcess. These calls all have a timeout of 1 second.
        The current implementation still uses the NSTextInput protocol, but the plan is to move
        to the NSTextInputClient protocol. This has not been done yet for ease of comparison with
        WebKit. attributedSubstringFromRange is the only method that has not been implemented, because
        I have not yet decided what is the best way to send an NSAttributedString across the process
        boundary.

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction): Added template for member function.
        with four reply arguments.
        * Scripts/webkit2/messages.py: Added CompositionUnderline and relevant header.
        * Shared/WebCoreArgumentCoders.h:
        (CoreIPC::): Added encoder/decoder for CompositionUnderline.
        * UIProcess/API/mac/PageClientImpl.h: Added parameters to interceptKeyEvent and selectionChanged.
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::selectionChanged): Added parameters.
        (WebKit::PageClientImpl::interceptKeyEvent): Added parameters.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:pageNamespaceRef:pageGroupRef:]): Added initialization of new private members.
        (-[WKView insertText:]):
        (-[WKView _selectionChanged:isEditable:isPassword:hasMarkedText:range:]): Added parameters.
        (-[WKView _interceptKeyEvent:hasComposition:start:end:lines:WebCore::]): Added parameters.
        (-[WKView keyDown:]): Modified to reset state on each keyDown.
        (-[WKView selectedRange]): Added.
        (-[WKView hasMarkedText]): Added.
        (-[WKView unmarkText]): Added.
        (-[WKView validAttributesForMarkedText]): Added.
        (extractUnderlines): Added.
        (-[WKView setMarkedText:selectedRange:]): Added.
        (-[WKView markedRange]): Added.
        (-[WKView attributedSubstringFromRange:]): Added.
        (-[WKView characterIndexForPoint:]): Added.
        (-[WKView firstRectForCharacterRange:]): Added.
        (-[WKView conversationIdentifier]): Added.
        * UIProcess/API/mac/WKViewInternal.h: Added parameters to _interceptKeyEvent and _selectionChanged.
        * UIProcess/PageClient.h: Added parameters to interpretKeyEvent and selectionChanged.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::getMarkedRange): Added.
        (WebKit::WebPageProxy::characterIndexForPoint): Added.
        (WebKit::WebPageProxy::firstRectForCharacterRange): Added.
        (WebKit::WebPageProxy::interpretKeyEvent): Additional parameters.
        (WebKit::WebPageProxy::didSelectionChange): Additional parameters for Mac platform.
        * UIProcess/WebPageProxy.h: Added new methods and parameters to didSelectionChange
        and interpretKeyEvent.
        * UIProcess/WebPageProxy.messages.in: Added parameters to interpretKeyEvent and selectionChanged messages.
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::sendSync): Added support for synchronous messages.
        The default timeout is 1 second.
        * WebProcess/WebCoreSupport/WebEditorClient.cpp: respondToChangedSelection is now
        only for non Mac platform.
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::respondToChangedSelection): Added implementation for Mac platform.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveSyncMessage): Added.
        * WebProcess/WebPage/WebPage.h: Added new methods and support for synchronous messages.
        * WebProcess/WebPage/WebPage.messages.in: Added new messages.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::interceptEditingKeyboardEvent): Added parameters.
        (WebKit::WebPage::convertRangeToPlatformRange): Added.
        (WebKit::WebPage::getMarkedRange): Added.
        (WebKit::characterRangeAtPoint): Added.
        (WebKit::WebPage::characterIndexForPoint): Added.
        (WebKit::convertToRange): Added.
        (WebKit::WebPage::firstRectForCharacterRange): Added.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveSyncMessage): Added.
        * WebProcess/WebProcess.h: Added didReceiveSyncMessage.

2010-12-10  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Add the QWKContext API class to wrap the WebContext.
        https://bugs.webkit.org/show_bug.cgi?id=50750

        * UIProcess/API/qt/WKView.h:
        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::QGraphicsWKView):
        Change the WKPageNamespaceRef argument to QWKContext*
        * UIProcess/API/qt/qgraphicswkview.h:
        * UIProcess/API/qt/qwkcontext.cpp: Added.
        * UIProcess/API/qt/qwkcontext.h: Added.
        * UIProcess/API/qt/qwkcontext_p.h: Added.
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::QWKPagePrivate):
        (QWKPage::QWKPage):
        Change the WKPageNamespaceRef argument to QWKContext*
        * UIProcess/API/qt/qwkpage.h:
        * UIProcess/API/qt/qwkpage_p.h:
        * WebKit2.pro:

2010-12-10  Kimmo Kinnunen  <kimmo.t.kinnunen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Flush IPC connection send buffer after each message.

        [Qt] [WK2] IPC messages are not sent until send buffer fills up
        https://bugs.webkit.org/show_bug.cgi?id=50667

        * Platform/CoreIPC/qt/ConnectionQt.cpp:
        (CoreIPC::Connection::sendOutgoingMessage):

2010-12-09  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Use a single QNetworkAccessManager per web process.
        https://bugs.webkit.org/show_bug.cgi?id=50757

        This allows a better management of network resources and the use
        of global cookie jar and disk cache across all frames.

        * WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.cpp:
        (WebCore::WebFrameNetworkingContext::WebFrameNetworkingContext):
        (WebCore::WebFrameNetworkingContext::networkAccessManager):
        * WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::shutdownIfPossible):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::networkAccessManager):
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::platformShutdown):
        * WebProcess/qt/WebProcessQt.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::platformShutdown):
        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::platformShutdown):

2010-12-09  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit build.

        * Shared/cf/ArgumentCodersCF.cpp:
        (CoreIPC::sizeForNumberType):

2010-12-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Brady Eidson.

        WebKit2: Control-click doesn't invoke context menu
        https://bugs.webkit.org/show_bug.cgi?id=50793
        <rdar://problem/8664800>

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::isContextClick): New helper function - on Mac, not only right clicks
        but also control-left-clicks are context clicks.
        (WebKit::handleMouseEvent): Use above.

2010-12-09  Anders Carlsson  <andersca@apple.com>

        Fix clang++ build.

        * Scripts/webkit2/messages.py:
        DrawingAreaInfo is a struct.

        * Shared/WebPreferencesStore.cpp:
        (WebKit::valueForKey):
        Move valueForKey above code that uses it.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (-[WebInspectorProxyObjCAdapter windowWillClose:]):
        Remove trailing semicolon.

2010-12-09  Timothy Hatcher  <timothy@apple.com>

        Add support for transparent WebKit2 WKViews.

        https://webkit.org/b/50785

        Reviewed by Anders Carlsson.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode): Encode drawsBackground and drawsTransparentBackground.
        (WebKit::WebPageCreationParameters::decode): Decode drawsBackground and drawsTransparentBackground.
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/mac/WKView.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView setDrawsBackground:]): Added.
        (-[WKView drawsBackground]): Added.
        (-[WKView setDrawsTransparentBackground:]): Added.
        (-[WKView drawsTransparentBackground]): Added.
        (-[WKView drawRect:]): Only fill the background if the WebProcess isn't valid and drawsBackground.
        Use white or clear based on setDrawsTransparentBackground.
        (-[WKView isOpaque]): Return drawsBackground.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Initialize m_drawsBackground and m_drawsTransparentBackground.
        (WebKit::WebPageProxy::setDrawsBackground): Added. Send a SetDrawsBackground message.
        (WebKit::WebPageProxy::setDrawsTransparentBackground): Added. Send a SetDrawsTransparentBackground message.
        (WebKit::WebPageProxy::creationParameters): Set drawsBackground and drawsTransparentBackground.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::drawsBackground): Added. Return m_drawsBackground.
        (WebKit::WebPageProxy::drawsTransparentBackground): Added. Return m_drawsTransparentBackground.
        * UIProcess/mac/ChunkedUpdateDrawingAreaProxyMac.mm:
        (WebKit::ChunkedUpdateDrawingAreaProxy::platformPaint): Use the copy blend mode when drawing a background.
        (WebKit::ChunkedUpdateDrawingAreaProxy::drawUpdateChunkIntoBackingStore): Use the copy blend mode to replace existing content.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage): Setup the new view's background color and transparent flag.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Initialize m_drawsBackground and m_drawsTransparentBackground.
        (WebKit::WebPage::setDrawsBackground): Added. Propagate the flag to the FrameViews.
        (WebKit::WebPage::setDrawsTransparentBackground): Added. Propagate the background color to the FrameViews.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::drawsBackground): Added. Return m_drawsBackground.
        (WebKit::WebPage::drawsTransparentBackground): Added. Return m_drawsTransparentBackground.
        * WebProcess/WebPage/WebPage.messages.in: Added SetDrawsBackground and SetDrawsTransparentBackground.

2010-12-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Cannot use NSKeyedArchiver in WK2 for ResourceResponses
        https://bugs.webkit.org/show_bug.cgi?id=50792
        <rdar://problem/8741799>

        When encoding, first convert the requests and responses to the serializable dictionary representation
        and use the newly added CF CoreIPC encoders. When decoding, do the opposite.

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (CoreIPC::encodeResourceRequest):
        (CoreIPC::decodeResourceRequest):
        (CoreIPC::encodeResourceResponse):
        (CoreIPC::decodeResourceResponse):

2010-12-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add CoreIPC coders for CF types
        https://bugs.webkit.org/show_bug.cgi?id=50791

        * Platform/CoreIPC/ArgumentDecoder.h:
        (CoreIPC::ArgumentDecoder::decodeEnum):
        * Platform/CoreIPC/ArgumentEncoder.h:
        (CoreIPC::ArgumentEncoder::encodeEnum):
        * Shared/cf/ArgumentCodersCF.cpp: Added.
        (CoreIPC::tokenNullTypeRef):
        (CoreIPC::typeFromCFTypeRef):
        (CoreIPC::encode):
        (CoreIPC::decode):
        (CoreIPC::sizeForNumberType):
        * Shared/cf/ArgumentCodersCF.h: Added.
        * WebKit2.xcodeproj/project.pbxproj:

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

        Reviewed by Sam Weinig.

        <rdar://problem/8749750> and https://bugs.webkit.org/show_bug.cgi?id=50786
        WK2 authentication never consults WebCore session credential storage.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::shouldUseCredentialStorage): Since we don't need to expose this as
          API at this time, always return true.

2010-12-09  Sam Weinig  <weinig@apple.com>

        Reviewed by Alexey Proskuryakov.

        WebKit2: Add support for access keys
        https://bugs.webkit.org/show_bug.cgi?id=49832

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::handleKeyEvent): Match windows WebKit and call
        the event handler's for handleAccessKey function for
        system keys. This will never be hit on the Mac.

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

        Qt build fix.

        * WebProcess/WebCoreSupport/qt/WebContextMenuClientQt.cpp: Include "NotImplemented.h".

2010-12-09  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.
        
        * WebProcess/WebCoreSupport/win/WebContextMenuClientWin.cpp:

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

        Reviewed by Anders Carlsson.

        <rdar://problem/8613779> and https://bugs.webkit.org/show_bug.cgi?id=50777
        WebKit2 ContextMenuClient support

        Implement google search in a cross platform manner, and add a FIXME for download support:
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::downloadURL):
        (WebKit::WebContextMenuClient::searchWithGoogle):

        Mac implementations for speaking and searching:
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm: Added.
        (WebKit::WebContextMenuClient::lookUpInDictionary): Add a FIXME for now.
        (WebKit::WebContextMenuClient::isSpeaking):
        (WebKit::WebContextMenuClient::speak):
        (WebKit::WebContextMenuClient::stopSpeaking):
        (WebKit::WebContextMenuClient::searchWithSpotlight):

        Stubs for Win and Qt:
        * WebProcess/WebCoreSupport/qt/WebContextMenuClientQt.cpp: Added.
        (WebKit::WebContextMenuClient::lookUpInDictionary):
        (WebKit::WebContextMenuClient::isSpeaking):
        (WebKit::WebContextMenuClient::speak):
        (WebKit::WebContextMenuClient::stopSpeaking):
        * WebProcess/WebCoreSupport/win/WebContextMenuClientWin.cpp: Added.
        (WebKit::WebContextMenuClient::lookUpInDictionary):
        (WebKit::WebContextMenuClient::isSpeaking):
        (WebKit::WebContextMenuClient::speak):
        (WebKit::WebContextMenuClient::stopSpeaking):

        Project file stuffs:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2010-12-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Don't leak the PDFDocument
        https://bugs.webkit.org/show_bug.cgi?id=50771

        * UIProcess/API/mac/PDFViewController.mm:
        (WebKit::PDFViewController::setPDFDocumentData):

2010-12-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add a basic implementation of PDF support on Mac
        https://bugs.webkit.org/show_bug.cgi?id=50768

        * UIProcess/API/mac/PDFViewController.h:
        * UIProcess/API/mac/PDFViewController.mm: Added.
        (-[WKPDFView initWithFrame:PDFViewController:WebKit::]):
        Setup the view hierarchy.

        (-[WKPDFView invalidate]):
        Set the controller to null.

        (-[WKPDFView pdfView]):
        Return the PDF view.

        (WebKit::PDFViewController::create):
        (WebKit::PDFViewController::PDFViewController):
        Create a WKPDFView and insert it as a subview of the WKView.

        (WebKit::PDFViewController::~PDFViewController):
        Remove the WKPDFView from the view hierarchy and invalidate it.

        (WebKit::convertPostScriptDataSourceToPDF):
        Convert the data in the data reference to PDF and return it as a CFDataRef.

        (WebKit::PDFViewController::setPDFDocumentData):
        Create a PDFDocument and set it on the PDF view.

        (WebKit::PDFViewController::pdfDocumentClass):
        (WebKit::PDFViewController::pdfPreviewViewClass):
        (WebKit::PDFViewController::pdfKitBundle):
        Add soft-linking helper functions.

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didCommitLoadForMainFrame):
        (WebKit::PageClientImpl::didFinishLoadingDataForCustomRepresentation):
        Call the WKView methods.
        
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setPageHasCustomRepresentation:]):
        Create a PDF view controller if necessary.

        (-[WKView _didFinishLoadingDataForCustomRepresentation:CoreIPC::]):
        Pass the data along to the PDF view controller.

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

2010-12-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add support for custom representation
        https://bugs.webkit.org/show_bug.cgi?id=50767

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        Add mimeTypesWithCustomRepresentation and encode and decode accordingly.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didCommitLoadForMainFrame):
        (WebKit::PageClientImpl::didFinishLoadingDataForCustomRepresentation):
        Add empty stubs for now.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::didCommitLoadForMainFrame):
        (QWKPagePrivate::didFinishLoadingDataForCustomRepresentation):
        * UIProcess/API/qt/qwkpage_p.h:
        Add empty stubs.

        * UIProcess/PageClient.h:
        Add new functions for custom representations.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::canShowMIMEType):
        Check that the mime type is not null.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        This now takes an additional frameHasCustomRepresentation parameter. 
        Call the page client function.

        (WebKit::WebPageProxy::didFinishLoadingDataForCustomRepresentation):
        Call the page client function.

        * UIProcess/WebPageProxy.messages.in:
        Change DidCommitLoadForFrame message, add DidFinishLoadingDataForCustomRepresentation message.

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        We want to use custom representations for PDF and PostScript MIME types.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::didCommitLoadForMainFrame):
        (WebKit::WebView::didFinishLoadingDataForCustomRepresentation):
        * UIProcess/win/WebView.h:
        Add stubs.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::WebFrameLoaderClient):
        Initialize m_frameHasCustomRepresentation.

        (WebKit::WebFrameLoaderClient::hasHTMLView):
        The frame has a HTML view unless it has a custom representation.

        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
        Pass along whether the frame has a custom representation.

        (WebKit::WebFrameLoaderClient::committedLoad):
        Don't send data back to WebCore if the frame has a custom representation.

        (WebKit::WebFrameLoaderClient::finishedLoading):
        Send all the data to the UI process.

        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        Update the m_frameHasCustomRepresentation state based on the MIME type.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        (WebKit::WebFrameLoaderClient::frameHasCustomRepresentation):
        Add getter.

        * WebProcess/WebPage/mac/ChunkedUpdateDrawingAreaMac.cpp:
        (WebKit::ChunkedUpdateDrawingArea::paintIntoUpdateChunk):
        Don't do any painting if the main frame has a custom representation.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        Add all the MIME types with custom representations.

        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::shouldUseCustomRepresentationForMIMEType):
        Add getter.

2010-12-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        Implement "Use Selection for Find" in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=50737
        <rdar://problem/8564881>
        
        * UIProcess/API/mac/WKView.mm: Add support for the takeFindStringFromSelection:
        selector as a command.

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

        Reviewed by Maciej Stachowiak.

        <rdar://problem/7660733> and https://bugs.webkit.org/show_bug.cgi?id=50191
        WebKit2 Authentication Support

        Implement authentication-related coders:
        * Shared/WebCoreArgumentCoders.h:

        Allow the ResourceResponse coders to handle null responses:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (CoreIPC::encodeResourceResponse):
        (CoreIPC::decodeResourceResponse):

        Add new API and Impl casts for ProtectionSpace and Credential enums:
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toAPI):
        (WebKit::toCredentialPersistence):

        Move the DecisionListener to be accessed off the challenge itself, and fill in other
        necessary API:
        * UIProcess/API/C/WKAuthenticationChallenge.cpp:
        (WKAuthenticationChallengeGetDecisionListener):
        (WKAuthenticationChallengeGetProtectionSpace):
        (WKAuthenticationChallengeGetProposedCredential):
        (WKAuthenticationChallengeGetPreviousFailureCount):
        * UIProcess/API/C/WKAuthenticationChallenge.h:
        * UIProcess/Authentication/AuthenticationChallengeProxy.cpp:
        (WebKit::AuthenticationChallengeProxy::~AuthenticationChallengeProxy):
        (WebKit::AuthenticationChallengeProxy::proposedCredential):
        (WebKit::AuthenticationChallengeProxy::protectionSpace):
        * UIProcess/Authentication/AuthenticationChallengeProxy.h:
        (WebKit::AuthenticationChallengeProxy::previousFailureCount):

        Fill in some credential API:
        * UIProcess/API/C/WKCredential.cpp:
        (WKCredentialCreate):
        (WKCredentialCopyUser):
        * UIProcess/API/C/WKCredential.h:
        * UIProcess/API/C/WKCredentialTypes.h: Added.
        * UIProcess/Authentication/WebCredential.cpp:
        (WebKit::WebCredential::WebCredential):
        (WebKit::WebCredential::user):
        * UIProcess/Authentication/WebCredential.h:
        (WebKit::WebCredential::create):

        Fill in some protection space API:
        * UIProcess/API/C/WKProtectionSpace.cpp:
        (WKProtectionSpaceCopyHost):
        (WKProtectionSpaceGetPort):
        (WKProtectionSpaceCopyRealm):
        (WKProtectionSpaceGetIsProxy):
        (WKProtectionSpaceGetServerType):
        (WKProtectionSpaceGetReceivesCredentialSecurely):
        (WKProtectionSpaceGetAuthenticationScheme):
        * UIProcess/API/C/WKProtectionSpace.h:
        * UIProcess/API/C/WKProtectionSpaceTypes.h: Added.
        * UIProcess/Authentication/WebProtectionSpace.cpp:
        (WebKit::WebProtectionSpace::WebProtectionSpace):
        (WebKit::WebProtectionSpace::host):
        (WebKit::WebProtectionSpace::port):
        (WebKit::WebProtectionSpace::realm):
        (WebKit::WebProtectionSpace::isProxy):
        (WebKit::WebProtectionSpace::serverType):
        (WebKit::WebProtectionSpace::receivesCredentialSecurely):
        (WebKit::WebProtectionSpace::authenticationScheme):
        * UIProcess/Authentication/WebProtectionSpace.h:

        Change the authentication challenge callback to reflect the new ownership of
        the DecisionListener:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::didReceiveAuthenticationChallengeInFrame):
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveAuthenticationChallenge):

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:

2010-12-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey "Error" Garen.

        Fix typo: Diplaying -> Displaying

        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameIsDisplayingStandaloneImageDocument):
        (WKFrameIsDisplayingMarkupDocument):
        * UIProcess/API/C/WKFrame.h:
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::canProvideSource):
        (WebKit::WebFrameProxy::isDisplayingStandaloneImageDocument):
        (WebKit::WebFrameProxy::isDisplayingMarkupDocument):
        * UIProcess/WebFrameProxy.h:

2010-12-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Add WebKit2 Preference for TabsToLinks behavior.
        <rdar://problem/8664263>

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetTabsToLinks):
        (WKPreferencesGetTabsToLinks):
        * UIProcess/API/C/WKPreferences.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::tabsToLinks):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::tabsToLinks):

2010-12-08  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        WebTouchEvent::isTouchEventType() does not take into account the type TouchCancel
        https://bugs.webkit.org/show_bug.cgi?id=50680

        Add the missing type check to WebTouchEvent::isTouchEventType().

        * Shared/WebTouchEvent.cpp:
        (WebKit::WebTouchEvent::isTouchEventType):

2010-12-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Need a way to get a WKBundleFrameRef from JS HTMLIFrameElement
        https://bugs.webkit.org/show_bug.cgi?id=50726

        Adds WKBundleNodeHandleCopyDocumentFrame, WKBundleNodeHandleCopyHTMLFrameElementContentFrame
        and WKBundleNodeHandleCopyHTMLIFrameElementContentFrame, to handle the document, <frame>
        and <iframe> cases.

        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleCopyDocumentFrame):
        (WKBundleNodeHandleCopyHTMLFrameElementContentFrame):
        (WKBundleNodeHandleCopyHTMLIFrameElementContentFrame):
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::copyDocumentFrame):
        (WebKit::InjectedBundleNodeHandle::copyHTMLFrameElementContentFrame):
        (WebKit::InjectedBundleNodeHandle::copyHTMLIFrameElementContentFrame):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:

2010-12-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Need a WebKit2 way to test whether a frame is displaying a standalone image
        <rdar://problem/8443059>
        WebKit2: Need a way to test whether a page or frame is showing HTML content
        <rdar://problem/8642563>

        Add WKFrameIsDiplayingStandaloneImageDocument and WKFrameIsDiplayingMarkupDocument.

        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameIsDiplayingStandaloneImageDocument):
        (WKFrameIsDiplayingMarkupDocument):
        * UIProcess/API/C/WKFrame.h:
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::canProvideSource): This now just calls isDiplayingMarkupDocument.
        (WebKit::WebFrameProxy::isDiplayingStandaloneImageDocument):
        (WebKit::WebFrameProxy::isDiplayingMarkupDocument):
        * UIProcess/WebFrameProxy.h:

2010-12-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        WebFrameProxy::canShowMIMEType should return true for PDF MIME types in the main frame
        https://bugs.webkit.org/show_bug.cgi?id=50724

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::pdfAndPostScriptMIMETypes):
        * UIProcess/WebContext.h:
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::canShowMIMEType):

2010-12-08  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Brady Eidson.

        WebMenuTarget implemented in both WebKit and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=50665
        <rdar://problem/8742640>
        
        Rename WebMenuTarget to WKMenuTarget to prevent this warning and stay consistent with
        other WebKit2 namings.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (+[WKMenuTarget sharedMenuTarget]):
        (WebKit::nsMenuItemVector):
        (WebKit::WebContextMenuProxyMac::showContextMenu):

2010-12-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Move canShowMIMEType to Frame
        https://bugs.webkit.org/show_bug.cgi?id=50723

        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameCanShowMIMEType):
        * UIProcess/API/C/WKFrame.h:
        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::canShowMIMEType):
        * UIProcess/WebFrameProxy.h:

2010-12-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Rename WKPreferencesGetFTPDirectoryTemplatePath to WKPreferencesCopyFTPDirectoryTemplatePath
        since it copies the value.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesCopyFTPDirectoryTemplatePath):
        * UIProcess/API/C/WKPreferencesPrivate.h:

2010-12-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        WebKit2: Can't open ftp directory
        <rdar://problem/8489321>

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetForceFTPDirectoryListings):
        (WKPreferencesGetForceFTPDirectoryListings):
        (WKPreferencesSetFTPDirectoryTemplatePath):
        (WKPreferencesGetFTPDirectoryTemplatePath):
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        Pipe through the FTP directory listing preferences.

2010-12-08  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Share code between Mac (CA) and Windows (CACF) GraphicsLayer implementations
        https://bugs.webkit.org/show_bug.cgi?id=49388

        Fixes a build failure because WebChromeClient.cpp uses WebCore::Cursor.
        This patch adds an include of QuartzCore/CATransform3D, which includes
        a file that has a 'Cursor' object defined. So I had to qualify the
        use of Cursor in WebChromeClient.cpp.

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

2010-12-07  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by John Sullivan.

        Layering Violation in ContextMenu - member variable of type HitTestResult
        https://bugs.webkit.org/show_bug.cgi?id=50586
        
        Update users of ContextMenu and ContextMenuController to match where the new functions 
        are located.

        * Shared/WebContextMenuItemData.cpp:
        (WebKit::WebContextMenuItemData::WebContextMenuItemData): Remove the call to checkOrEnableItem, that call will be made when
            the ContextMenuItem is added to the ContextMenu through the ContextMenuController.
        * WebProcess/WebPage/WebContextMenu.cpp:
        (WebKit::WebContextMenu::show):

2010-12-08  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Implement WebChromeClient::exceededDatabaseQuota
        https://bugs.webkit.org/show_bug.cgi?id=50656

        The exceededDatabaseQuota call from the WebProcess to the UIProcess needs to be synchronous
        because the new quota is checked directly after exceededDatabaseQuota returns in order to
        determine if the new Database can be created.

        Pass all of the details from the WebProcess to the UIProcess in order to inform the
        decision in the UIProcess about the new quota. In WebKit1, these details were
        fetched through an additional call to the API detailsForDatabase (which is infeasible in
        WebKit2 since exceededDatabaseQuota is a synchronous call).

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction):
        Add a version that takes 7 parameters.

        * UIProcess/API/C/WKPage.h:

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage):
        Indicate that exceededDatabaseQuota is not implemented.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::exceededDatabaseQuota):
        Call the UIClient's exceededDatabaseQuota
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::exceededDatabaseQuota):
        If the client does not implement exceededDatabaseQuota, return a the current quota.
        * UIProcess/WebUIClient.h:

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::exceededDatabaseQuota):
        Send a synchronous message to the UIProcess to ask for the new quota for the origin for the
        given frame.

2010-12-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        fast/loader/empty-embed-src-attribute.html asserts in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=50643

        Just always ignore attempts to load requests with empty URLs.

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

2010-12-07  Jessie Berlin  <jberlin@apple.com>

        Build fix. Unreviewed.

        * WebKit2.pro:
        Added WebDatabaseManagerQt.cpp.
        * WebProcess/WebCoreSupport/qt/WebDatabaseManagerQt.cpp: Added.
        (WebKit::WebDatabaseManager::databaseDirectory):
        Added a FIXME to implement and return an empty string.

2010-12-07  Darin Adler  <darin@apple.com>

        Get a bit closer to making Qt WebKit2 compile again.

        * WebKit2.pro: Add the WebDatabaseManager source files.
        Still missing: The Qt version of the databaseDirectory function.

2010-12-07  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Need to set the location of the Databases directory when the WebProcess is initialized
        https://bugs.webkit.org/show_bug.cgi?id=50604

        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp: Added.
        (WebKit::WebDatabaseManager::shared):
        (WebKit::WebDatabaseManager::WebDatabaseManager):
        Initialize the DatabaseTracker with the Database directory.
        * WebProcess/WebCoreSupport/WebDatabaseManager.h: Added.
        * WebProcess/WebCoreSupport/mac/WebDatabaseManagerMac.mm: Added.
        (WebKit::WebDatabaseManager::databaseDirectory):
        Copied from WebKitInitializeDatabasesIfNecessary in WebKit/mac/Storage/WebDatabaseManager.mm.
        * WebProcess/WebCoreSupport/win/WebDatabaseManagerWin.cpp: Added.
        (WebKit::WebDatabaseManager::databaseDirectory):
        Copied from WebKitInitializeWebDatabasesIfNecessary in WebKit/win/WebDatabaseManager.cpp.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        Make sure that the Databases directory has been set by calling WebDatabaseManager::shared().

        * WebKit2.xcodeproj/project.pbxproj:
        Add WebDatabaseManager.cpp/.h/Mac.cpp
        * win/WebKit2.vcproj:
        Add WebDatabaseManager.cpp/.h/Win.cpp

2010-12-06  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Pass security origin to make local file decision correctly
        https://bugs.webkit.org/show_bug.cgi?id=48603

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::loadURL): Pass security origin.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchCreatePage): Ditto.

2010-12-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Fix two WebKit2 prefs issues.

        * Shared/WebPreferencesStore.h: Include font-family preferences
        in the FOR_EACH_WEBKIT_STRING_PREFERENCE macro, actually propagating
        font family prefs to WebCore settings.
        
        * UIProcess/WebPageGroup.cpp:
        (WebKit::WebPageGroup::WebPageGroup):
        (WebKit::WebPageGroup::~WebPageGroup): Add and remove the WebPageGroup
        from the preference object it creates. This allows preference changes
        to actually be propagated to the web process.

2010-12-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        The plug-in process crashes if it can't load the plug-in module
        https://bugs.webkit.org/show_bug.cgi?id=50601
        <rdar://problem/8692654>

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::initialize):
        Handle m_plugin being 0.

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::netscapePluginModule):
        Create the plug-in module if it doesn't exist.

        (WebKit::PluginProcess::initialize):
        Store the plug-in path.

        * PluginProcess/PluginProcess.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::create):
        Return null if the plug-in module doesn't exist.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        Simplify code.

2010-12-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        WebProcess crash in NPRemoteObjectMap::invalidate when closing tab
        https://bugs.webkit.org/show_bug.cgi?id=50597
        <rdar://problem/8655584>

        When invalidating the NPRemoteObjectMap, we don't want NPObjectMessageReceiver to
        release all objects NPObjects blindly because NPJSObjects have already been deallocated by the plug-in view.

        This is not an ideal solution; an ideal solution would involve NPJSObjects notifying any NPObjectMessageReceiver objects
        that the NPJSObject is being destroyed. The NPObjectMessageReceiver could then simply null out the NPObject pointer.

        * Shared/Plugins/NPObjectMessageReceiver.cpp:
        (WebKit::NPObjectMessageReceiver::NPObjectMessageReceiver):
        (WebKit::NPObjectMessageReceiver::~NPObjectMessageReceiver):
        * Shared/Plugins/NPObjectMessageReceiver.h:
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::NPRemoteObjectMap):
        (WebKit::NPRemoteObjectMap::invalidate):
        * Shared/Plugins/NPRemoteObjectMap.h:
        (WebKit::NPRemoteObjectMap::isInvalidating):

2010-12-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Generalize didChangeLocationWithinPageForFrame for all same document navigations
        https://bugs.webkit.org/show_bug.cgi?id=50584

          - Rename didChangeLocationWithinPageForFrame callbacks to didSameDocumentNavigationForFrame
          - Add WKSameDocumentNavigationType to didChangeLocationWithinPageForFrame.
          - Call didSameDocumentNavigationForFrame for HTML session state changes.

        * Shared/API/c/WKPageLoadTypes.h: Added.
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        Moved WKFrameNavigationType here from WKPage.h and add WKSameDocumentNavigationType.

        * Shared/SameDocumentNavigationType.h: Added.
        * UIProcess/API/C/WKAPICast.h:
        Moved WKFrameNavigationType conversion from here.

        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage):
        Update comment.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didSameDocumentNavigation):
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::didSameDocumentNavigationForFrame):
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::didSameDocumentNavigationForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        Pipe new name through.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidChangeLocationWithinPage):
        (WebKit::WebFrameLoaderClient::dispatchDidPushStateWithinPage):
        (WebKit::WebFrameLoaderClient::dispatchDidReplaceStateWithinPage):
        (WebKit::WebFrameLoaderClient::dispatchDidPopStateWithinPage):
        Call didChangeLocationWithinPageForFrame for session state changes.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:
        Add new files.

2010-12-06  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Dan Bernstein.

        WebKit2: Expose the preference to enable or disable HTML5 Databases.
        https://bugs.webkit.org/show_bug.cgi?id=50411

        * Shared/WebPreferencesStore.h:
        Make the preference to enable HTML5 Databases default ot true.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetDatabasesEnabled):
        (WKPreferencesGetDatabasesEnabled):
        * UIProcess/API/C/WKPreferences.h:

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        Set AbstractDatabase::isAvailable (mimicking how the preference is set in WebKit1).

2010-12-06  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformHandleKeyboardEvent): Wrap Carbon-specific code in #ifndef NP_NO_CARBON.

2010-12-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Add a shim for GetCurrentEventButtonState
        https://bugs.webkit.org/show_bug.cgi?id=50583

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::getCurrentEventButtonState):
        Get the event button state from the plug-in.

        (WebKit::PluginProcess::initializeShim):
        Add new shim callback.

        * PluginProcess/mac/PluginProcessShim.cpp:
        (WebKit::shimGetCurrentEventButtonState):
        Add shim.

        * PluginProcess/mac/PluginProcessShim.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::buttonState):
        Return the button state.

        (WebKit::NetscapePlugin::platformHandleMouseEvent):
        Update the button state. Also, make sure to actually pass the modifiers to NPP_HandleEvent.
        

2010-12-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Add a shim for IsWindowActive
        https://bugs.webkit.org/show_bug.cgi?id=50582

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::isWindowActive):
        Get the NetscapePlugin from the WindowRef and check if the plug-in's window is active.

        (WebKit::PluginProcess::initializeShim):
        * PluginProcess/mac/PluginProcessShim.cpp        
        (WebKit::shimIsWindowActive):
        Call isWindowActive. If it returns true, return the result value. Otherwise, call the real
        IsWindowActive function.

        * PluginProcess/mac/PluginProcessShim.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin):
        Initialize m_isWindowactive.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        (WebKit::NetscapePlugin::isWindowActive):
        Return whether the window is active.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::windowMap):
        (WebKit::NetscapePlugin::platformPostInitialize):
        (WebKit::NetscapePlugin::platformDestroy):
        (WebKit::NetscapePlugin::netscapePluginFromWindow):
        Add a mapping between windows and the corresponding NetscapePlugin objects.

        (WebKit::NetscapePlugin::windowFocusChanged):
        Update the window focus member variable.

2010-12-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        REGERSSION (r73310?): Contents of <select> popup menus are upside-down on Windows
        https://bugs.webkit.org/show_bug.cgi?id=50544
        <rdar://problem/8732336>

        * Shared/BackingStore.cpp:
        * Shared/BackingStore.h:
        * Shared/cairo/BackingStoreCairo.cpp:
        Remove BackingStore::createFlippedGraphicsContext.

        * WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp:
        (WebKit::WebPopupMenu::setUpPlatformData):
        Don't create a flipped graphics context.

2010-12-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        REGRESSION: Text in Find indicator is vertically flipped
        https://bugs.webkit.org/show_bug.cgi?id=50524
        <rdar://problem/8732978>

        Don't flip the graphics context.

        * UIProcess/FindIndicator.cpp:
        (WebKit::FindIndicator::draw):

2010-12-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Dispatch keyboard events in the Carbon event model
        https://bugs.webkit.org/show_bug.cgi?id=50503

        * Shared/WebEvent.h:
        (WebKit::WebKeyboardEvent::macCharCode):
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::WebKeyboardEvent):
        (WebKit::WebKeyboardEvent::encode):
        (WebKit::WebKeyboardEvent::decode):
        Add macCharCode field.

        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        * Shared/qt/WebEventFactoryQt.cpp:
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        * Shared/win/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        Pass along the Mac char code.
        
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformHandleKeyboardEvent):
        Convert the event to a Carobn event.

2010-12-03  John Sullivan  <sullivan@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=50504
        Expose some more WebCore settings in WebKit2 preferences

        * Shared/WebPreferencesStore.h:
        Changed name of existing FOR_EACH_WEBKIT_STRING_PREFERENCE macro to
        FOR_EACH_WEBKIT_FONT_FAMILY_PREFERENCE since it was all about platform-specific
        font families, and I'm now introducing a non-platform-spacific string, and
        I didn't want to put the new preference in two platform-specific lists. Then
        added a new FOR_EACH_WEBKIT_STRING_PREFERENCE to hold the new preference. Note
        that the other preferences exposed in this patch were already declared here.
        
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetDefaultFontSize):
        New wrapper.
        (WKPreferencesGetDefaultFontSize):
        Ditto.
        (WKPreferencesSetDefaultFixedFontSize):
        Ditto.
        (WKPreferencesGetDefaultFixedFontSize):
        Ditto.
        (WKPreferencesSetDefaultTextEncodingName):
        Ditto.
        (WKPreferencesCopyDefaultTextEncodingName):
        Ditto.
        
        * UIProcess/API/C/WKPreferences.h:
        Declare new wrappers.

2010-12-05  Adam Roben  <aroben@apple.com>

        Windows production build fix

        Put spaces after trailing backslashes when setting
        %WebKitVSPropsRedirectionDir%. According to MSDN
        <http://msdn.microsoft.com/en-us/library/2kzfk8c7(v=VS.80).aspx>:

           A backslash ( \ ) followed by a newline character is interpreted as
           a space in the command; use a backslash at the end of a line to
           continue a command onto the next line. NMAKE interprets the
           backslash literally if any other character, including a space or
           tab, follows the backslash.

        * win/WebKit2.make:

2010-12-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Jon Honeycutt.

        WebKit2: Need client functions to notify app when the url changes due to a fragment navigation
        https://bugs.webkit.org/show_bug.cgi?id=50511

        Pipe didChangeLocationWithinPageForFrame up through the UIProcess to the WKPageLoadClient,
        updating the WebFrameProxy's URL on the way.

        Test: PageLoadDidChangeLocationWithinPageForFrame

        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage):
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didChangeURLWithoutNavigation):
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::didChangeLocationWithinPageForFrame):
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didChangeLocationWithinPageForFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::didChangeLocationWithinPageForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didDisplayInsecureContentForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didRunInsecureContentForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidCancelClientRedirect): Fix typo.
        (WebKit::WebFrameLoaderClient::dispatchDidChangeLocationWithinPage):

2010-12-03  Timothy Hatcher  <timothy@apple.com>

        Make the Web Inspector window show and be usable on Mac.

        https://webkit.org/b/50490

        Reviewed by Sam Weinig.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::invalidate): Call platformClose.
        (WebKit::WebInspectorProxy::didLoadInspectorPage): Call platformOpen.
        (WebKit::WebInspectorProxy::didClose): Call platformClose.
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.messages.in: Added DidClose.
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (-[WebInspectorProxyObjCAdapter initWithWebInspectorProxy:]): Added.
        (-[WebInspectorProxyObjCAdapter windowWillClose:]): Added. Call WebInspectorProxy::close.
        (WebKit::WebInspectorProxy::platformOpen): Added.
        (WebKit::WebInspectorProxy::platformClose): Added.
        * UIProcess/qt/WebInspectorProxyQt.cpp:
        (WebKit::WebInspectorProxy::platformOpen): Added stub.
        (WebKit::WebInspectorProxy::platformClose): Added stub.
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformOpen): Added stub.
        (WebKit::WebInspectorProxy::platformClose): Added stub.
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::sendMessageToFrontend): Added more null checks to avoid a crash.
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        (WebKit::WebInspectorFrontendClient::closeWindow): Call WebInspector::didClose.
        (WebKit::WebInspectorFrontendClient::disconnectFromBackend): Ditto.
        (WebKit::WebInspectorFrontendClient::sendMessageToBackend): Removed. This does not need to be
        implemented by our subclass since we are in a single process.
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.h: Removed sendMessageToBackend.
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::didClose): Added. Send a DidClose message to the UI process.
        * WebProcess/WebPage/WebInspector.h:

2010-12-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig and Dan Bernstein.

        Clean up the BackingStore implementation
        https://bugs.webkit.org/show_bug.cgi?id=50498

        * Shared/BackingStore.cpp:
        (WebKit::BackingStore::create):
        (WebKit::BackingStore::createSharable):
        (WebKit::BackingStore::resize):
        Use new numBytesForSize helper function.

        (WebKit::BackingStore::createFlippedGraphicsContext):
        Make this function platform independent.

        * Shared/BackingStore.h:
        (WebKit::BackingStore::numBytesForSize):
        Given a size, return the number of bytes needed for it.

        (WebKit::BackingStore::sizeInBytes):
        Implement.

        * Shared/cg/BackingStoreCG.cpp:
        (WebKit::BackingStore::paint):
        Don't use CGBitmapContextCreateImage; it creates an extra copy of the image data.

        * Shared/qt/BackingStoreQt.cpp:
        Remove createFlippedGraphicsContext.

2010-12-03  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] [WK2] Build system improvements for non-Unix targets
        https://bugs.webkit.org/show_bug.cgi?id=50257

        * DerivedSources.pro:
        Fix dir seperator errors on Windows build host. Thanks to Laszlo Gombos.

2010-12-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Enable <a ping> for Mac/Windows/WebKit2 builds
        <rdar://problem/8504473>
        https://bugs.webkit.org/show_bug.cgi?id=50488

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetHyperlinkAuditingEnabled):
        (WKPreferencesGetHyperlinkAuditingEnabled):
        * UIProcess/API/C/WKPreferences.h:
        Add "HyperlinkAuditing" preference and enabled it by default.

2010-12-03  Brady Eidson  <beidson@apple.com>

        Reviewed by good sense in fixing builds.

        Export the 4 new API headers I added today.

        * WebKit2.xcodeproj/project.pbxproj:

2010-12-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8725679> and https://bugs.webkit.org/show_bug.cgi?id=50482
        Crash trying to empty caches with no WebProcess.

        * Shared/WebProcessCreationParameters.h: Add the "clear this cache" flags.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::ensureWebProcess): If either of the clear cache flags are set when a new WebProcess is
          created, include those flags in the parameters.
        (WebKit::WebContext::clearResourceCaches): If the current process isn't valid, flag this action to be done later.
        (WebKit::WebContext::clearApplicationCache): Ditto.
        * UIProcess/WebContext.h:

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess): Clear the caches if told to.

2010-12-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Fix failing API test. The default san serif font on the mac
        should be Helvetica, not Courier.

        * Shared/WebPreferencesStore.h:

2010-12-03  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Need to move all code that applies correction into correction panel callback.
        https://bugs.webkit.org/show_bug.cgi?id=50426
        <rdar://problem/8720832>

        Adopted new signature of dismissCorrectionPanel.

        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::dismissCorrectionPanel):

2010-12-03  Jessie Berlin  <jberlin@apple.com>

        Windows build fix. Unreviewed.

        * win/WebKit2Generated.make:
        Add the new API files from http://trac.webkit.org/changeset/73281.

2010-12-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        Groundwork for <rdar://problem/7660733> and https://bugs.webkit.org/show_bug.cgi?id=50191
        WebKit2 Authentication Support

        With this patch in place, authentication challenges are sent up from WebCore and shipped over the IPC layer.
        Client apps can implement the related client methods to attempt to continue without credentials or cancel a
        challenge.

        There's not yet API to inspect a challenge or create a credential to use in reply - that will come later.

        Build-system changes:
        * DerivedSources.make:
        * DerivedSources.pro:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Common.vsprops:

        Messages and casts for IPC and APIs:
        * Platform/CoreIPC/MessageID.h:
        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/API/C/WKAPICast.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage):

        Stub out the AuthenticationChallenge class family:
        * UIProcess/API/C/WKAuthenticationChallenge.cpp: Added.
        (WKAuthenticationChallengeGetTypeID):
        * UIProcess/API/C/WKAuthenticationChallenge.h: Added.
        * UIProcess/API/C/WKCredential.cpp: Added.
        (WKCredentialGetTypeID):
        * UIProcess/API/C/WKCredential.h: Added.
        * UIProcess/API/C/WKProtectionSpace.cpp: Added.
        (WKProtectionSpaceGetTypeID):
        * UIProcess/API/C/WKProtectionSpace.h: Added.

        Add an Authentication listener for the client app to respond to:
        * UIProcess/API/C/WKAuthenticationDecisionListener.cpp: Added.
        (WKAuthenticationDecisionListenerGetTypeID):
        (WKAuthenticationDecisionListenerUseCredential):
        (WKAuthenticationDecisionListenerCancel):
        * UIProcess/API/C/WKAuthenticationDecisionListener.h: Added.

        Add Authentication related methods to the page loader client:
        * UIProcess/API/C/WKPage.h:

        Add empty implementations of the new API objects:
        * UIProcess/Authentication: Added.
        * UIProcess/Authentication/AuthenticationChallengeProxy.cpp: Added.
        (WebKit::AuthenticationChallengeProxy::AuthenticationChallengeProxy):
        (WebKit::AuthenticationChallengeProxy::~AuthenticationChallengeProxy):
        (WebKit::AuthenticationChallengeProxy::useCredential):
        (WebKit::AuthenticationChallengeProxy::cancel):
        * UIProcess/Authentication/AuthenticationChallengeProxy.h: Added.
        (WebKit::AuthenticationChallengeProxy::create):
        (WebKit::AuthenticationChallengeProxy::listener):
        (WebKit::AuthenticationChallengeProxy::type):

        * UIProcess/Authentication/WebCredential.cpp: Added.
        (WebKit::WebCredential::core):
        * UIProcess/Authentication/WebCredential.h: Added.
        (WebKit::WebCredential::create):
        (WebKit::WebCredential::type):
        * UIProcess/Authentication/WebProtectionSpace.cpp: Added.
        (WebKit::WebProtectionSpace::WebProtectionSpace):
        * UIProcess/Authentication/WebProtectionSpace.h: Added.
        (WebKit::WebProtectionSpace::create):
        (WebKit::WebProtectionSpace::type):

        Add implementation of the Authentication decision listener:
        * UIProcess/Authentication/AuthenticationDecisionListener.cpp: Added.
        (WebKit::AuthenticationDecisionListener::AuthenticationDecisionListener):
        (WebKit::AuthenticationDecisionListener::useCredential):
        (WebKit::AuthenticationDecisionListener::cancel):
        (WebKit::AuthenticationDecisionListener::detachChallenge):
        * UIProcess/Authentication/AuthenticationDecisionListener.h: Added.
        (WebKit::AuthenticationDecisionListener::create):
        (WebKit::AuthenticationDecisionListener::type):

        WebPage and PageLoaderClient glue:
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::canAuthenticateAgainstProtectionSpaceInFrame):
        (WebKit::WebLoaderClient::didReceiveAuthenticationChallengeInFrame):
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::canAuthenticateAgainstProtectionSpaceInFrame):
        (WebKit::WebPageProxy::didReceiveAuthenticationChallenge):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        Add a manager to map the actual platform authentication challenges to a challenge ID,
        as at least some platforms require the object identity to persist:
        * WebProcess/Authentication: Added.
        * WebProcess/Authentication/AuthenticationManager.cpp: Added.
        (WebKit::generateAuthenticationChallengeID):
        (WebKit::AuthenticationManager::shared):
        (WebKit::AuthenticationManager::AuthenticationManager):
        (WebKit::AuthenticationManager::didReceiveMessage):
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        (WebKit::AuthenticationManager::useCredentialForChallenge):
        (WebKit::AuthenticationManager::continueWithoutCredentialForChallenge):
        (WebKit::AuthenticationManager::cancelChallenge):
        * WebProcess/Authentication/AuthenticationManager.h: Added.
        * WebProcess/Authentication/AuthenticationManager.messages.in: Added.

        Hand off Authentication challenges to the manager to be sent over IPC:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge):
        (WebKit::WebFrameLoaderClient::canAuthenticateAgainstProtectionSpace):

        * UIProcess/API/qt/qwkpage.cpp:

2010-12-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Flip the destination context when painting a backing store into the destination
        https://bugs.webkit.org/show_bug.cgi?id=50491

        * Shared/cg/BackingStoreCG.cpp:
        (WebKit::BackingStore::paint):

2010-12-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        The chunked update drawing area is flipped twice when drawing
        https://bugs.webkit.org/show_bug.cgi?id=50465
        <rdar://problem/8726836>

        * UIProcess/mac/ChunkedUpdateDrawingAreaProxyMac.mm:
        (WebKit::ChunkedUpdateDrawingAreaProxy::platformPaint):
        (WebKit::ChunkedUpdateDrawingAreaProxy::drawUpdateChunkIntoBackingStore):
        Flip the destination contexts, thus unflipping them. (Turns out two wrongs make a right here).

2010-12-03  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        Need a WebKit2 Equivalent of WebSecurityOrigin
        https://bugs.webkit.org/show_bug.cgi?id=50170

        * Shared/API/c/WKBase.h:
        Add the WKSecurityOriginRef typedef.

        * Shared/APIObject.h:
        Add the SecurityOrigin type as a Shared type.

        * Shared/API/c/WKSharedAPICast.h::
        Add the mapping between WKSecurityOriginRef and WebSecurityOrigin.

        * UIProcess/API/C/WKSecurityOrigin.cpp: Added.
        (WKSecurityOriginGetTypeID):
        (WKSecurityOriginCreate):
        (WKSecurityOriginGetProtocol):
        (WKSecurityOriginGetHost):
        (WKSecurityOriginGetPort):
        * UIProcess/API/C/WKSecurityOrigin.h: Added.

        * UIProcess/WebSecurityOrigin.h: Added.
        (WebKit::WebSecurityOrigin::create):
        Create based on the database identifier, which contains the protocol, host and port.
        (WebKit::WebSecurityOrigin::protocol):
        (WebKit::WebSecurityOrigin::host):
        (WebKit::WebSecurityOrigin::port):
        (WebKit::WebSecurityOrigin::databaseIdentifier):
        (WebKit::WebSecurityOrigin::WebSecurityOrigin):
        (WebKit::WebSecurityOrigin::type):

        * WebKit2.pro:
        Add WKSecurityOrigin.cpp/.h.

        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Add the WebSecurityOrigin.h and WKSecurityOrigin.cpp/.h.

        * win/WebKit2Generated.make:
        Make sure WKSecurityOrigin.h file gets copied over to the WebKitBuild directory on Windows.

2010-12-02  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Csaba Osztrogonác.

        [Qt] Fix compilation with !ENABLE(OFFLINE_WEB_APPLICATIONS) and 
        !ENABLE(TILED_BACKING_STORE) for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=50071

        Add appropriate guards. No functional change if guards are set.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::setActualVisibleContentsRect):
        * UIProcess/TiledDrawingAreaProxy.cpp:
        * UIProcess/qt/TiledDrawingAreaProxyQt.cpp:
        * UIProcess/qt/TiledDrawingAreaTileQt.cpp:
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::applicationCacheDirectory):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2010-12-02  Sam Weinig  <sam@webkit.org>

        Fix Qt.

        * UIProcess/API/qt/qwkpreferences.cpp:
        (QWKPreferencesPrivate::createPreferences):

2010-12-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2 Preferences should be held off the PageGroup, not the Context
        https://bugs.webkit.org/show_bug.cgi?id=50414

        - In addition, this now makes the preference held off the PageGroup have
          the identifier of the PageGroup and autosave to disk (only on the mac
          for now).
        - Adds ability to create an arbitrary preference that can be autosaved
          via a new WKPreferencesCreateWithIdentifier function.

        * UIProcess/API/C/WKContext.cpp:
        * UIProcess/API/C/WKContext.h:
        Remove preference related code.

        * UIProcess/API/C/WKPageGroup.cpp:
        (WKPageGroupSetPreferences):
        (WKPageGroupGetPreferences):
        * UIProcess/API/C/WKPageGroup.h:
        Add getter/setter for preferences.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesCreateWithIdentifier):
        * UIProcess/API/C/WKPreferences.h:
        Add WKPreferencesCreateWithIdentifier and remove WKPreferencesCreateCopy which is
        unused.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        * UIProcess/WebContext.h:
        Remove preference related code.

        * UIProcess/WebPageGroup.cpp:
        (WebKit::WebPageGroup::WebPageGroup):
        (WebKit::WebPageGroup::addPage):
        (WebKit::WebPageGroup::removePage):
        (WebKit::WebPageGroup::setPreferences):
        (WebKit::WebPageGroup::preferences):
        (WebKit::WebPageGroup::preferencesDidChange):
        * UIProcess/WebPageGroup.h:
        Add preference and page tracking.

        * UIProcess/WebPageNamespace.cpp:
        * UIProcess/WebPageNamespace.h:
        Remove preference change notification code.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::~WebPageProxy):
        Add/remove self from page group set.

        (WebKit::WebPageProxy::preferencesDidChange):
        (WebKit::WebPageProxy::creationParameters):
        Get preferences from the pageGroup.

        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::WebPreferences):
        (WebKit::WebPreferences::addPageGroup):
        (WebKit::WebPreferences::removePageGroup):
        (WebKit::WebPreferences::update):
        * UIProcess/WebPreferences.h:
        (WebKit::WebPreferences::create):
        Change to track page groups instead of contexts.

        * UIProcess/mac/WebPreferencesMac.mm:
        (WebKit::makeKey): Add ".WebKit2" prefix for keys.

2010-12-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Flash videos on YouTube flicker
        https://bugs.webkit.org/show_bug.cgi?id=50409
        <rdar://problem/8668757>

        When painting from a backing store, we need to add the source location
        to the destination point.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::paint):
        (WebKit::PluginProxy::update):

2010-12-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2 needs API to turn on popup blocking
        https://bugs.webkit.org/show_bug.cgi?id=50407

        Pipe-through a preference for javascript being able to open
        windows without user gesture.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetJavaScriptCanOpenWindowsAutomatically):
        (WKPreferencesGetJavaScriptCanOpenWindowsAutomatically):
        * UIProcess/API/C/WKPreferences.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2010-12-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Plug-ins should be able to update the mouse cursor
        https://bugs.webkit.org/show_bug.cgi?id=50399

        Call WKEnableSettingCursorWhenInBackground.

        * PluginProcess/mac/PluginProcessMainMac.mm:
        (WebKit::PluginProcessMain):

2010-12-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=50368
        Overhaul WebKit2 preferences code

        - Reduces the number of places you have to touch to add a new preference
          (From 9 down to 4, but with a bit of elbow grease, we should get that
           down to 2 or 3).
        - Add hooks so that platforms can initialize the preferences based on an
          identifier. This is currently only used on the Mac to initialize a
          preference store from NSUserDefaults and autosave the changes to disk.
          It is not yet enabled due to no way to set the identifier from client
          code.

        * Shared/WebPageCreationParameters.cpp:
        Add necessary #include of WebCoreArgumentCoders.h which is now needed
        due to cleanup in WebPreferencesStore.h.

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::WebPreferencesStore):
        (WebKit::WebPreferencesStore::encode):
        (WebKit::WebPreferencesStore::decode):
        (WebKit::defaultValueForKey):
        (WebKit::setValueForKey):
        (WebKit::valueForKey):
        (WebKit::WebPreferencesStore::setStringValueForKey):
        (WebKit::WebPreferencesStore::getStringValueForKey):
        (WebKit::WebPreferencesStore::setBoolValueForKey):
        (WebKit::WebPreferencesStore::getBoolValueForKey):
        (WebKit::WebPreferencesStore::setUInt32ValueForKey):
        (WebKit::WebPreferencesStore::getUInt32ValueForKey):
        * Shared/WebPreferencesStore.h:
        Complete overhaul of this class to store the preferences as
        a set of HashMaps and use macros to define the keys and default
        values.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesGetFontSmoothingLevel):
        Add cast to keep conversion function working.

        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::WebPreferences): Add identifier constructor.
        (WebKit::WebPreferences::updateStringValueForKey):
        (WebKit::WebPreferences::updateBoolValueForKey):
        (WebKit::WebPreferences::updateUInt32ValueForKey):
        Add type based updaters. These currently give hooks to the platform and
        call the generic update, but in the future, we can use this to optimize
        updating preferences to not send the entire store for each change.

        * UIProcess/WebPreferences.h:
        Generate the getters and setters via macro instantiation.

        * UIProcess/cf/WebPreferencesCF.cpp: Added.
        (WebKit::WebPreferences::platformInitializeStore):
        (WebKit::WebPreferences::platformUpdateStringValueForKey):
        (WebKit::WebPreferences::platformUpdateBoolValueForKey):
        (WebKit::WebPreferences::platformUpdateUInt32ValueForKey):
        Stubbed out.

        * UIProcess/mac/WebPreferencesMac.mm: Added.
        (WebKit::makeKey):
        (WebKit::setStringValueIfInUserDefaults):
        (WebKit::setBoolValueIfInUserDefaults):
        (WebKit::setUInt32ValueIfInUserDefaults):
        (WebKit::WebPreferences::platformInitializeStore):
        (WebKit::WebPreferences::platformUpdateStringValueForKey):
        (WebKit::WebPreferences::platformUpdateBoolValueForKey):
        (WebKit::WebPreferences::platformUpdateUInt32ValueForKey):
        Use the platform hooks to initialize and update the store from
        NSUserDefaults.
        
        * UIProcess/qt/WebPreferencesQt.cpp: Added.
        (WebKit::WebPreferences::platformInitializeStore):
        (WebKit::WebPreferences::platformUpdateStringValueForKey):
        (WebKit::WebPreferences::platformUpdateBoolValueForKey):
        (WebKit::WebPreferences::platformUpdateUInt32ValueForKey):
        Stubbed out.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::platformPreferencesDidChange):
        Update to pull the value using the new type based getters.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Add new files.

2010-12-02  Steve Falkenburg  <sfalken@apple.com>

        Mac build fix.

        * WebProcess/WebKitMain.cpp:
        (enableDataExecutionPrevention):

2010-11-30 Amruth Raj  <amruthraj@motorola.com> and Ravi Kasibhatla  <ravi.kasibhatla@motorola.com>

        Reviewed by Martin Robinson.

        [GTK] Implement RunLoop, WorkQueue, Connection classes for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=48507

        * Platform/CoreIPC/Connection.h: UNIX_X11 specific changes for GTK port.
        (CoreIPC::Connection::messageProcessingCompleted):
        * Platform/CoreIPC/gtk: Added.
        * Platform/CoreIPC/gtk/ConnectionGtk.cpp: Added. Connection class implementation for GTK port (UNIX_X11 specific).
        (CoreIPC::readBytesFromSocket):
        (CoreIPC::writeBytesToSocket):
        (CoreIPC::Connection::platformInitialize):
        (CoreIPC::Connection::platformInvalidate):
        (CoreIPC::Connection::processCompletedMessage):
        (CoreIPC::Connection::readEventHandler):
        (CoreIPC::Connection::open):
        (CoreIPC::Connection::platformCanSendOutgoingMessages):
        (CoreIPC::Connection::sendOutgoingMessage):
        * Platform/PlatformProcessIdentifier.h: UNIX_X11 specific changes for GTK port.
        * Platform/RunLoop.h: GTK port specific changes.
        * Platform/WorkQueue.h: GTK port specific changes.
        * Platform/gtk/RunLoopGtk.cpp: Added. Runs an event loop using GMainLoop and handles the incoming messages.
        (RunLoop::RunLoop):
        (RunLoop::~RunLoop):
        (RunLoop::run):
        (RunLoop::mainLoop):
        (RunLoop::stop):
        (RunLoop::queueWork):
        (RunLoop::wakeUp):
        (RunLoop::TimerBase::TimerBase):
        (RunLoop::TimerBase::~TimerBase):
        (RunLoop::TimerBase::resetTimerSource):
        (RunLoop::TimerBase::oneShotTimerFired):
        (RunLoop::TimerBase::repeatingTimerFired):
        (RunLoop::TimerBase::start):
        (RunLoop::TimerBase::stop):
        (RunLoop::TimerBase::isActive):
        * Platform/gtk/WorkQueueGtk.cpp: Added. Creates a thread and polls on a given fd using GIOChannel. 
        Dispatches the obtained messages to RunLoop's GMainLoop.
        (WorkQueue::EventSource::EventSource):
        (WorkQueue::EventSource::dispatchSource):
        (WorkQueue::EventSource::performWorkOnce):
        (WorkQueue::EventSource::performWork):
        (WorkQueue::EventSource::deleteEventSource):
        (WorkQueue::platformInitialize):
        (WorkQueue::platformInvalidate):
        (WorkQueue::startWorkQueueThread):
        (WorkQueue::workQueueThreadBody):
        (WorkQueue::registerEventSourceHandler):
        (WorkQueue::unregisterEventSourceHandler):
        (WorkQueue::scheduleWork):

2010-12-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Move enableExecutionPrevention to WebKitMain
        https://bugs.webkit.org/show_bug.cgi?id=50392

        * WebProcess/WebKitMain.cpp:
        (enableDataExecutionPrevention):
        (WebKitMain):
        * WebProcess/win/WebProcessMainWin.cpp:
        (WebKit::WebProcessMain):

2010-12-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Enable DEP at runtime to allow for compatibility with older versions of ATL
        https://bugs.webkit.org/show_bug.cgi?id=50378

        * WebProcess/win/WebProcessMainWin.cpp:
        (WebKit::enableDataExecutionPrevention):
        (WebKit::WebProcessMain):
        * win/WebKit2WebProcessCommon.vsprops:

2010-12-01  Sam Weinig  <sam@webkit.org>

        Fix 64-bit build.

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

2010-12-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Give the fake Carbon window the right bounds
        https://bugs.webkit.org/show_bug.cgi?id=50361

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::windowAndViewFramesChanged):
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginControllerProxy.messages.in:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _updateWindowAndViewFrames]):
        Pass both the window frame and view frame along.

        (-[WKView renewGState]):
        Call _updateWindowAndViewFrames.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::windowAndViewFramesChanged):
        Pass both the window frame and view frame along.

        * UIProcess/WebPageProxy.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformPostInitialize):
        We don't want a title bar in our fake window.
    
        (WebKit::computeFakeWindowBoundsRect):
        Compute the fake window bounds.

        (WebKit::NetscapePlugin::windowAndViewFramesChanged):
        Update the fake window bounds.

        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::windowAndViewFramesChanged):
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::windowAndViewFramesChanged):
        (WebKit::PluginView::initializePlugin):
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::windowAndViewFramesChanged):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::windowFrameInScreenCoordinates):
        (WebKit::WebPage::viewFrameInWindowCoordinates):
        * WebProcess/WebPage/WebPage.messages.in:
        Pass both the window frame and view frame along.

2010-12-01  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Support multiple correction candidates panel for misspelled word on Mac OS X.
        https://bugs.webkit.org/show_bug.cgi?id=50137
        <rdar://problem/8568059>

        Adopted new function signatures defined in base class.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::getGuessesForWord):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::showCorrectionPanel):

2010-12-01  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by John Sullivan.

        Hit testing broken on sibling views of the WKView
        <rdar://problem/8718397>
        
        Make sure that hitView is not null when comparing with the
        _layerHostingView.

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

2010-12-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement the remaining PluginController/Plugin member functions
        https://bugs.webkit.org/show_bug.cgi?id=50356

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::cancelStreamLoad):
        (WebKit::PluginControllerProxy::cancelManualStreamLoad):
        (WebKit::PluginControllerProxy::setStatusbarText):
        (WebKit::PluginControllerProxy::pluginProcessCrashed):
        (WebKit::PluginControllerProxy::frameDidFinishLoading):
        (WebKit::PluginControllerProxy::frameDidFail):
        (WebKit::PluginControllerProxy::manualStreamDidReceiveResponse):
        (WebKit::PluginControllerProxy::manualStreamDidReceiveData):
        (WebKit::PluginControllerProxy::manualStreamDidFinishLoading):
        (WebKit::PluginControllerProxy::manualStreamDidFail):
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginControllerProxy.messages.in:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::frameDidFinishLoading):
        (WebKit::PluginProxy::frameDidFail):
        (WebKit::PluginProxy::manualStreamDidReceiveResponse):
        (WebKit::PluginProxy::manualStreamDidReceiveData):
        (WebKit::PluginProxy::manualStreamDidFinishLoading):
        (WebKit::PluginProxy::manualStreamDidFail):
        (WebKit::PluginProxy::windowFrameChanged):
        (WebKit::PluginProxy::cancelStreamLoad):
        (WebKit::PluginProxy::cancelManualStreamLoad):
        (WebKit::PluginProxy::setStatusbarText):
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginProxy.messages.in:

2010-12-01  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WinCairo build should not use link-time code generation (LTCG)
        https://bugs.webkit.org/show_bug.cgi?id=50353

        * win/WebKit2.vcproj:
        * win/WebKit2WebProcess.vcproj:

2010-12-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig..

        Fix <rdar://problem/8717674>.

        * WebProcess/com.apple.WebProcess.sb:
        Allow the UI process to issue file-write extensions.

2010-12-01  Sam Weinig  <sam@webkit.org>

        Another windows build fix.

        * UIProcess/API/C/win/WKView.cpp:
        (WKViewCreate):

2010-12-01  Sam Weinig  <sam@webkit.org>

        Attempt to fix Windows build.

        * UIProcess/API/C/win/WKViewPrivate.cpp:
        * UIProcess/API/C/win/WKViewPrivate.h:

2010-12-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add PageGrouping to WebKit2 API
        https://bugs.webkit.org/show_bug.cgi?id=50332

        - Adds WKPageGroupRef and WKBundlePageGroupRef API objects
          (backed by WebPageGroup and WebPageGroupProxy respectively).
        - Moves visibleToInjectedBundle from page to PageGroup.
        - Make userScript/userStyleSheet functions take a page group parameter.

        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * Shared/WebPageGroupData.cpp: Added.
        (WebKit::WebPageGroupData::encode):
        (WebKit::WebPageGroupData::decode):
        * Shared/WebPageGroupData.h: Added.
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetPageGroup):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/C/WKPageGroup.cpp: Added.
        (WKPageGroupGetTypeID):
        (WKPageGroupCreateWithIdentifier):
        (WKPageGroupCopyIdentifier):
        * UIProcess/API/C/WKPageGroup.h: Added.
        * UIProcess/API/C/WebKit2.h:
        * UIProcess/API/C/win/WKView.cpp:
        (WKViewCreate):
        * UIProcess/API/C/win/WKView.h:
        * UIProcess/API/mac/WKView.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:pageNamespaceRef:pageGroupRef:]):
        (-[WKView initWithFrame:pageNamespaceRef:]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::QWKPagePrivate):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::createWebPage):
        * UIProcess/WebContext.h:
        * UIProcess/WebContextUserMessageCoders.h:
        (WebKit::WebContextUserMessageEncoder::encode):
        (WebKit::WebContextUserMessageDecoder::decode):
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::inspectorPageGroup):
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebPageGroup.cpp: Added.
        (WebKit::generatePageGroupID):
        (WebKit::webPageGroupMap):
        (WebKit::WebPageGroup::create):
        (WebKit::WebPageGroup::get):
        (WebKit::WebPageGroup::WebPageGroup):
        (WebKit::WebPageGroup::~WebPageGroup):
        * UIProcess/WebPageGroup.h: Added.
        (WebKit::WebPageGroup::identifier):
        (WebKit::WebPageGroup::pageGroupID):
        (WebKit::WebPageGroup::data):
        (WebKit::WebPageGroup::type):
        * UIProcess/WebPageNamespace.cpp:
        (WebKit::WebPageNamespace::createWebPage):
        * UIProcess/WebPageNamespace.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::create):
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::pageGroup):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::createWebPage):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView):
        * UIProcess/win/WebView.h:
        (WebKit::WebView::create):
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleAddUserScript):
        (WKBundleAddUserStyleSheet):
        (WKBundleRemoveUserScript):
        (WKBundleRemoveUserStyleSheet):
        (WKBundleRemoveUserScripts):
        (WKBundleRemoveUserStyleSheets):
        (WKBundleRemoveAllUserContent):
        (WKBundleOverrideXSSAuditorEnabledForTestRunner):
        * WebProcess/InjectedBundle/API/c/WKBundle.h:
        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageGetPageGroup):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageGroup.cpp: Added.
        (WKBundlePageGroupGetTypeID):
        (WKBundlePageGroupCopyIdentifier):
        * WebProcess/InjectedBundle/API/c/WKBundlePageGroup.h: Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideXSSAuditorEnabledForTestRunner):
        (WebKit::InjectedBundle::addUserScript):
        (WebKit::InjectedBundle::addUserStyleSheet):
        (WebKit::InjectedBundle::removeUserScript):
        (WebKit::InjectedBundle::removeUserStyleSheet):
        (WebKit::InjectedBundle::removeUserScripts):
        (WebKit::InjectedBundle::removeUserStyleSheets):
        (WebKit::InjectedBundle::removeAllUserContent):
        (WebKit::InjectedBundle::didInitializePageGroup):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/InjectedBundle/InjectedBundleClient.cpp:
        (WebKit::InjectedBundleClient::didInitializePageGroup):
        * WebProcess/InjectedBundle/InjectedBundleClient.h:
        * WebProcess/InjectedBundle/InjectedBundleUserMessageCoders.h:
        (WebKit::InjectedBundleUserMessageEncoder::encode):
        (WebKit::InjectedBundleUserMessageDecoder::decode):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::create):
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::close):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::pageGroup):
        * WebProcess/WebPage/WebPageGroupProxy.cpp: Added.
        (WebKit::WebPageGroupProxy::create):
        (WebKit::WebPageGroupProxy::~WebPageGroupProxy):
        * WebProcess/WebPage/WebPageGroupProxy.h: Added.
        (WebKit::WebPageGroupProxy::identifier):
        (WebKit::WebPageGroupProxy::pageGroupID):
        (WebKit::WebPageGroupProxy::isVisibleToInjectedBundle):
        (WebKit::WebPageGroupProxy::WebPageGroupProxy):
        (WebKit::WebPageGroupProxy::type):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::webPageGroup):
        * WebProcess/WebProcess.h:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:

2010-12-01  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        vcproj changes can't be applied cleanly by the Windows EWS bot
        https://bugs.webkit.org/show_bug.cgi?id=50328

        * win/WebKit2.submit.sln: Added property svn:eol-style.
        * win/WebKit2.vcproj: Added property svn:eol-style.
        * win/WebKit2Apple.vsprops: Added property svn:eol-style.
        * win/WebKit2CFLite.vsprops: Added property svn:eol-style.
        * win/WebKit2Common.vsprops: Added property svn:eol-style.
        * win/WebKit2DirectX.vsprops: Added property svn:eol-style.
        * win/WebKit2Generated.vcproj: Added property svn:eol-style.
        * win/WebKit2GeneratedCommon.vsprops: Added property svn:eol-style.
        * win/WebKit2WebProcess.vcproj: Added property svn:eol-style.
        * win/WebKit2WebProcessCommon.vsprops: Added property svn:eol-style.

2010-12-01  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Size changes on layer-backed drawing areas don't always end up with the correct value
        https://bugs.webkit.org/show_bug.cgi?id=50351
        <rdar://problem/8692966>
        
        When the UI process does not receive didSetSize messages promptly, 
        LayerBackedDrawingAreaProxy::setSize() bails early based on the
        m_isWaitingForDidSetFrameNotification flag.
        
        In this situation, the final size may be incorrect. didSetSize()
        needs to compare the size that the web process has to the expected size,
        and send a final setSize if they differ.

        * UIProcess/LayerBackedDrawingAreaProxy.cpp:
        (WebKit::LayerBackedDrawingAreaProxy::didSetSize):
        (WebKit::LayerBackedDrawingAreaProxy::didReceiveMessage):
        * UIProcess/LayerBackedDrawingAreaProxy.h:
        * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
        (WebKit::LayerBackedDrawingArea::setSize):

2010-12-01  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Crash when closing WebKit2 window with accelerated composting content
        https://bugs.webkit.org/show_bug.cgi?id=50307
        <rdar://problem/8640126>
        
        When the web page is closing, notify the drawing area, so that
        the layer-backed drawing area can kill the runloop obsever,
        then clear it. Clearing it is not sufficient, since the drawing
        area is ref-counted.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::onPageClose):
        * WebProcess/WebPage/LayerBackedDrawingArea.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):
        * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm:
        (WebKit::LayerBackedDrawingArea::platformClear):
        (WebKit::LayerBackedDrawingArea::onPageClose):

2010-12-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Return a correct user agent if NPN_UserAgent is called with a null NPP from NPP_New.
        https://bugs.webkit.org/show_bug.cgi?id=50336

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_UserAgent):
        Call the static NetscapePlugin::userAgent function instead.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::userAgent):
        If the passed in NPP is null, get the NetscapePlugin currently executing NPP_New.

        (WebKit::NetscapePlugin::initialize):
        Keep track of the plug-in currently executing NPP_New.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:

2010-12-01  Brian Weinstein  <bweinstein@apple.com>

        One last Windows build fix.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::switchToDrawingAreaTypeIfNecessary):

2010-12-01  Anders Carlsson  <andersca@apple.com>

        Fix Windows build.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::pageDidEnterAcceleratedCompositing):
        (WebKit::WebView::pageDidLeaveAcceleratedCompositing):
        (WebKit::WebView::switchToDrawingAreaTypeIfNecessary):

2010-12-01  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * UIProcess/win/WebView.h:

2010-12-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Andreas Kling.

        Get rid of DrawingAreaBase
        https://bugs.webkit.org/show_bug.cgi?id=50329

        * Scripts/webkit2/messages.py:
        * Shared/DrawingAreaInfo.h:
        (WebKit::DrawingAreaInfo::DrawingAreaInfo):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _switchToDrawingAreaTypeIfNecessary:DrawingAreaInfo::]):
        (-[WKView _pageDidEnterAcceleratedCompositing]):
        (-[WKView _pageDidLeaveAcceleratedCompositing]):
        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::takeSnapshot):
        (QGraphicsWKViewPrivate::commitScale):
        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::ChunkedUpdateDrawingAreaProxy):
        (WebKit::ChunkedUpdateDrawingAreaProxy::setSize):
        (WebKit::ChunkedUpdateDrawingAreaProxy::setPageIsVisible):
        (WebKit::ChunkedUpdateDrawingAreaProxy::update):
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::DrawingAreaProxy):
        (WebKit::DrawingAreaProxy::nextIdentifier):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::info):
        * UIProcess/LayerBackedDrawingAreaProxy.cpp:
        (WebKit::LayerBackedDrawingAreaProxy::LayerBackedDrawingAreaProxy):
        (WebKit::LayerBackedDrawingAreaProxy::setSize):
        (WebKit::LayerBackedDrawingAreaProxy::setPageIsVisible):
        (WebKit::LayerBackedDrawingAreaProxy::update):
        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::TiledDrawingAreaProxy):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didChangeAcceleratedCompositing):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::switchToDrawingAreaTypeIfNecessary):
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
        (WebKit::ChunkedUpdateDrawingArea::ChunkedUpdateDrawingArea):
        (WebKit::ChunkedUpdateDrawingArea::didReceiveMessage):
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.h:
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        (WebKit::DrawingArea::DrawingArea):
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::info):
        * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
        (WebKit::LayerBackedDrawingArea::LayerBackedDrawingArea):
        (WebKit::LayerBackedDrawingArea::didReceiveMessage):
        * WebProcess/WebPage/LayerBackedDrawingArea.h:
        * WebProcess/WebPage/TiledDrawingArea.cpp:
        (WebKit::TiledDrawingArea::TiledDrawingArea):
        * WebProcess/WebPage/TiledDrawingArea.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::changeAcceleratedCompositingMode):

2010-11-30  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed speculative build fix for Windows.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::pageDidEnterAcceleratedCompositing):
        (WebKit::WebView::pageDidLeaveAcceleratedCompositing):
        (WebKit::WebView::switchToDrawingAreaTypeIfNecessary):
        * UIProcess/win/WebView.h:

2010-11-30  Anders Carlsson  <andersca@apple.com>

        Fix Qt build.

        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::takeSnapshot):
        (QGraphicsWKViewPrivate::commitScale):

2010-11-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Change DrawingArea and DrawingAreaProxy to not inherit from DrawingAreaBase
        https://bugs.webkit.org/show_bug.cgi?id=50300

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _switchToDrawingAreaTypeIfNecessary:DrawingAreaBase::]):
        (-[WKView _pageDidEnterAcceleratedCompositing]):
        (-[WKView _pageDidLeaveAcceleratedCompositing]):
        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::ChunkedUpdateDrawingAreaProxy):
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::DrawingAreaProxy):
        (WebKit::DrawingAreaProxy::nextDrawingAreaID):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::info):
        * UIProcess/LayerBackedDrawingAreaProxy.cpp:
        (WebKit::LayerBackedDrawingAreaProxy::LayerBackedDrawingAreaProxy):
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
        (WebKit::ChunkedUpdateDrawingArea::ChunkedUpdateDrawingArea):
        (WebKit::ChunkedUpdateDrawingArea::didReceiveMessage):
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.h:
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        (WebKit::DrawingArea::DrawingArea):
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::info):
        * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
        (WebKit::LayerBackedDrawingArea::LayerBackedDrawingArea):
        (WebKit::LayerBackedDrawingArea::didReceiveMessage):
        * WebProcess/WebPage/LayerBackedDrawingArea.h:
        * WebProcess/WebPage/TiledDrawingArea.cpp:
        (WebKit::TiledDrawingArea::TiledDrawingArea):
        * WebProcess/WebPage/TiledDrawingArea.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::changeAcceleratedCompositingMode):

2010-11-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Context menus broken after WebKit2 goes into accelerated composting mode.
        https://bugs.webkit.org/show_bug.cgi?id=50296
        
        Override hitTest: on the WKView to exclude the child layer-backed view from
        hit testing, so that context menus work.

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

2010-11-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Build fix.

        * Configurations/BaseTarget.xcconfig: Don't run Copy Files and Run Script build phases
        during installhdrs. It's not necessary, and it results in Xcode attempting to copy the
        plug-in shim dylib when it has not yet been built.
        * WebKit2.xcodeproj/project.pbxproj: Stop copying the .xcconfig file in to the application
        wrapper.

2010-11-30  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * Scripts/webkit2/messages.py:

2010-11-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Rename DrawingAreaBase.h to DrawingAreaInfo.h.

        * Shared/DrawingAreaInfo.h: Renamed from WebKit2/Shared/DrawingAreaBase.h.
        (WebKit::DrawingAreaBase::DrawingAreaInfo::DrawingAreaInfo):
        (WebKit::DrawingAreaBase::~DrawingAreaBase):
        (WebKit::DrawingAreaBase::info):
        (WebKit::DrawingAreaBase::DrawingAreaBase):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/DrawingAreaProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/DrawingArea.h:
        * win/WebKit2.vcproj:

2010-11-30  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * PluginProcess/mac/PluginProcessShim.cpp:

2010-11-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Add a simple shim function for Debugger().
        https://bugs.webkit.org/show_bug.cgi?id=50268

        * PluginProcess/PluginProcess.h:
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::initShouldCallRealDebugger):
        We only want to call the real Debugger() function when USERBREAK is set.

        (WebKit::shouldCallRealDebugger):
        Return whether USERBREAK is set.
        
        (WebKit::PluginProcess::initializeShim):
        Initialize the shim.

        * PluginProcess/mac/PluginProcessMainMac.mm:
        (WebKit::PluginProcessMain):
        Call PluginProcess::initializeShim.

        * PluginProcess/mac/PluginProcessShim.cpp:
        (WebKit::WebKitPluginProcessShimInitialize):
        This now takes a struct of callbacks.

        (WebKit::shimDebugger):
        Call the shouldCallDebugger function. If it returns true, the real Debugger() function should be called.

        * PluginProcess/mac/PluginProcessShim.h:
        * WebKit2.xcodeproj/project.pbxproj:

2010-11-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Pass the plug-in process shim in DYLD_INSERT_LIBRARIES when launching the plug-in process
        https://bugs.webkit.org/show_bug.cgi?id=50262

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        Add an EnvironmentVariables class that allows for easy modification of the environment variables
        passed to posix_spawn.

        (WebKit::ProcessLauncher::launchProcess):
        When spawning the plug-in process, insert the plug-in process shim.

2010-11-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add plug-in process shim
        https://bugs.webkit.org/show_bug.cgi?id=50261

        * Configurations/PluginProcessShim.xcconfig: Added.
        * PluginProcess/mac/PluginProcessShim.cpp: Added.
        (PluginProcessShimInitialize):
        * PluginProcess/mac/PluginProcessShim.h: Added.
        * WebKit2.xcodeproj/project.pbxproj:

2010-11-30  Brian Weinstein  <bweinstein@apple.com>

        Fix the Windows build by copying WKFindOptions.h into WebKitOutputDir with the other headers.

        * win/WebKit2Generated.make:

2010-11-30  Dan Bernstein  <mitz@apple.com>

        Try to fix the Windows build.

        * win/WebKit2.vcproj:

2010-11-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Injected bundle support for <rdar://problem/8710645> WebKitTestRunner needs layoutTestController.findString
        https://bugs.webkit.org/show_bug.cgi?id=50238

        * Shared/API/c/WKFindOptions.h: Added. Moved the definition of WKFindOptions here from WKPage.h.
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toFindOptions): Moved from WKAPICast.h.
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKPage.h:
        * WebKit2.xcodeproj/project.pbxproj: Added WKFindOptions.h.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageFindString): Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::findStringFromInjectedBundle): Added.
        * WebProcess/WebPage/WebPage.h:

2010-11-30  Andreas Kling  <kling@webkit.org>

        Reviewed by Dirk Schulze.

        GraphicsContext: Remove "current path" and have strokePath, fillPath and clipPath take a Path argument
        https://bugs.webkit.org/show_bug.cgi?id=48516

        * UIProcess/FindIndicator.cpp:
        (WebKit::FindIndicator::draw):

2010-11-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        All projects on Windows should use cmd files for build events
        https://bugs.webkit.org/show_bug.cgi?id=50213

        * win/WebKit2Common.vsprops:
        * win/WebKit2WebProcessCommon.vsprops:
        * win/WebKit2WebProcessPostBuild.cmd: Added.
        * win/WebKit2WebProcessPreBuild.cmd: Added.
        * win/WebKitPostBuild.cmd: Added.
        * win/WebKitPreBuild.cmd: Added.
        * win/WebKitPreLink.cmd: Added.

2010-11-30  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Early return if setResizesToContentsUsingLayoutSize() is called with already-set size

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

2010-11-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        WebKit2 part of <rdar://problem/8650085> adding word-prefix search options to the text search API.
        https://bugs.webkit.org/show_bug.cgi?id=50038
        Based on a patch from Darin Adler.

        * Shared/WebFindOptions.h: Renamed FindOptions.h to this to account for WebCore’s new private
        FindOptions.h. Added and reordered FindOptions and rolled FindDirection into FindOptions.
        * UIProcess/API/C/WKAPICast.h: Removed toFindDirection().
        (WebKit::toFindOptions): Updated for new values.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageFindString): Removed separate WKFindDirection.
        (WKPageCountStringMatches): Replaces caseInsensitive boolean with WKFindOptions.
        * UIProcess/API/C/WKPage.h: Removed WKFindDirection and updated WKFindOptions.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::findString): Removed separate FindDirection.
        (WebKit::WebPageProxy::countStringMatches): Replaced caseInsensitive boolean with FindOptions.
        * UIProcess/WebPageProxy.h:
        * WebKit2.xcodeproj/project.pbxproj: Updated for the header rename.
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::core): Added. Converts WebKit2 FindOptions to WebCore FindOptions.
        (WebKit::FindController::countStringMatches): Changed to use FindOptions.
        (WebKit::FindController::findString): Ditto.
        * WebProcess/WebPage/FindController.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::findString): Ditto.
        (WebKit::WebPage::countStringMatches): Ditto.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Ditto.

2010-11-29  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix.

        * win/WebKit2.vcproj: Add missing vsprops association for
        Debug_Cairo_CFLite target.

2010-11-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Cursor does not always change back to arrow when exiting image document
        https://bugs.webkit.org/show_bug.cgi?id=50190
        <rdar://problem/8665265>

        * Shared/mac/WebEventFactory.mm:
        (WebKit::mouseEventTypeForEvent):
        (WebKit::globalPointForEvent):
        (WebKit::pointForEvent):
        Handle the NSMouseEntered and NSMouseExited events.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:pageNamespaceRef:hiddenFromInjectedBundle:]):
        We want entered and exited events for this tracking area.
        Add mouseEntered and mouseExited handlers.

2010-11-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Should be able to pause and resume downloads
        https://bugs.webkit.org/show_bug.cgi?id=50185
        <rdar://problem/8691135>

        * UIProcess/API/C/WKContext.h:
        Add didCancel callback.

        * UIProcess/API/C/WKDownload.cpp:
        (WKDownloadGetResumeData):
        (WKDownloadCancel):
        Call the respective DownloadProxy member functions.

        * UIProcess/API/C/WKDownload.h:
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::cancel):
        Send Cancel to the WebProcess.

        (WebKit::DownloadProxy::didFail):
        This now takes a resumeData reference.

        (WebKit::DownloadProxy::didCancel):
        Set the resume data and call didCancel.

        * UIProcess/Downloads/DownloadProxy.h:
        (WebKit::DownloadProxy::resumeData):
        Return the resume data.

        * UIProcess/Downloads/DownloadProxy.messages.in:
        Add DidCancel message, Add resume data to DidFail.

        * UIProcess/WebDownloadClient.cpp:
        (WebKit::WebDownloadClient::didCancel):
        Call the didCancel context client function.

        * WebProcess/Downloads/Download.cpp:
        (WebKit::Download::didFail):
        This now takes a resume data argument as well.
        
        (WebKit::Download::didCancel):
        Send DidCancel.

        * WebProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::cancelDownload):
        Look up the download and cancel it.

        * WebProcess/Downloads/cf/DownloadCFNet.cpp:
        (WebKit::Download::cancel):
        Add stub.

        * WebProcess/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::cancel):
        Cancel the download.

        (-[WKDownloadAsDelegate download:didFailWithError:]):
        Pass the resume data along.

        * WebProcess/Downloads/qt/DownloadQt.cpp:
        (WebKit::Download::cancel):
        Add stub.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::cancelDownload):
        Ask the download manager to cancel the download.

        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        Add CancelDownload message.

2010-11-29  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Adam Roben.

        [WK2] Support repeating timers
        https://bugs.webkit.org/show_bug.cgi?id=50024

        Added boolean member for TimerBase on PLATFORM(WIN)
        and PLATFORM(QT) to be able to differentiate between
        repeating and one shot operating mode. Change the confusing
        signature of TimerBase::start: use a bool for selecting
        operating mode.
        * Platform/RunLoop.h:
        (RunLoop::TimerBase::startRepeating):
        (RunLoop::TimerBase::startOneShot):
        * Platform/mac/RunLoopMac.mm:
        (RunLoop::TimerBase::start):
        * Platform/qt/RunLoopQt.cpp:
        (RunLoop::TimerBase::timerFired): Only stop the timer if it
        is not in repeating mode.
        (RunLoop::TimerBase::TimerBase): 
        (RunLoop::TimerBase::start):
        * Platform/win/RunLoopWin.cpp:
        (RunLoop::TimerBase::timerFired):  Only stop the timer if it
        is not in repeating mode.
        (RunLoop::TimerBase::TimerBase):
        (RunLoop::TimerBase::start):

2010-11-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Downloads: When the web process crashes, call error callbacks for pending downloads
        https://bugs.webkit.org/show_bug.cgi?id=50164
        <rdar://problem/8691170>

        * UIProcess/API/C/WKContext.h:
        Add processDidCrash callback.

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::~DownloadProxy):
        Assert that the web context is null.

        (WebKit::DownloadProxy::processDidClose):
        Call the processDidCrash callback.

        (WebKit::DownloadProxy::didFinish):
        (WebKit::DownloadProxy::didFail):
        Call downloadFinished.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::processDidClose):
        Call processDidClose on all pending downloads.

        (WebKit::WebContext::downloadFinished):
        Remove the download proxy from the map.

        * UIProcess/WebDownloadClient.cpp:
        (WebKit::WebDownloadClient::processDidCrash):
        Call the processDidCrash callback function.

2010-11-29  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Allow pre-generation for package builds for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=50139

        Use a build variable for the generated directory path and set the
        value based on CONFIG just like for WebKit1.

        For non-package builds use a relative base path for the
        genrated directory just like for WebKit1.

        * DerivedSources.pro:
        * WebKit2.pro:

2010-11-28  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Move some build logic from Qt to platform independent code
        https://bugs.webkit.org/show_bug.cgi?id=50134

        Remove the creation of the directories under $$OUTPUT_DIR/include
        as these will be handled by the fwheader_generator target.

        Remove the explicit generation of $$OUTPUT_DIR/WebKit2/generated as
        this is not required.

        * DerivedSources.pro:

2010-11-24  Brady Eidson  <beidson@apple.com>

        Reviewed implicitly by John Sullivan.

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

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (-[WebUserDataWrapper initWithUserData:WebKit::]): Do the proper self = [super init] dance here.

2010-11-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein.

        More of <rdar://problem/8613727> and https://bugs.webkit.org/show_bug.cgi?id=50042
        WK2 Context Menu Items need a user data object and a client callback for selection.

        * Shared/API/c/WKContextMenuItem.cpp:
        (WKContextMenuItemGetUserData):
        (WKContextMenuItemSetUserData):
        * Shared/API/c/WKContextMenuItem.h:

        * Shared/WebContextMenuItem.cpp:
        (WebKit::WebContextMenuItem::userData):
        (WebKit::WebContextMenuItem::setUserData):
        * Shared/WebContextMenuItem.h:

        * Shared/WebContextMenuItemData.cpp:
        (WebKit::WebContextMenuItemData::userData):
        (WebKit::WebContextMenuItemData::setUserData):
        * Shared/WebContextMenuItemData.h:

        * UIProcess/API/C/WKPage.h:

        * UIProcess/WebPageContextMenuClient.cpp:
        (WebKit::WebPageContextMenuClient::customContextMenuItemSelected): Added for WK2 apps to get a callback.
        * UIProcess/WebPageContextMenuClient.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::contextMenuItemSelected):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (-[WebUserDataWrapper initWithUserData:WebKit::]): Add an "APIObject" user data wrapper class to associate with the NSMenuItem.
        (-[WebUserDataWrapper WebKit::]):
        (-[WebMenuTarget forwardContextMenuAction:]): Include the user data object in the created ContextMenuItemData.
        (WebKit::nsMenuItemVector):

2010-11-24  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        Make WebKit2 compile with !ENABLE(INSPECTOR).
        https://bugs.webkit.org/show_bug.cgi?id=49973

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        (WebKit::toImpl):
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKInspector.cpp:
        * UIProcess/API/C/WKInspector.h:
        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebInspectorProxy.cpp:
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::didReceiveSyncMessage):
        (WebKit::WebPageProxy::processDidCrash):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        * UIProcess/qt/WebInspectorProxyQt.cpp:
        * UIProcess/win/WebInspectorProxyWin.cpp:
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.h:
        * WebProcess/WebPage/WebInspector.cpp:
        * WebProcess/WebPage/WebInspector.h:
        * WebProcess/WebPage/WebInspector.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::close):
        (WebKit::WebPage::windowIsFocused):
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/qt/WebInspectorQt.cpp:
        * WebProcess/WebPage/win/WebInspectorWin.cpp:

2010-11-24  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Make deep copies of tile images

        We need the tile images we get from UpdateChunk::createImage() to persist,
        so we should take a copy() of them.

        * UIProcess/qt/TiledDrawingAreaTileQt.cpp:
        (WebKit::TiledDrawingAreaTile::updateFromChunk):

2010-11-24  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix uninitialized variable in QGraphicsWKViewPrivate

        Always initialize QGWKVP::m_isChangingScale in the constructor.

        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKViewPrivate::QGraphicsWKViewPrivate):

2010-11-23  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Andreas Kling.

        Adapt to setShouldDelegateScrolling not being a real setting anymore.
        We now similarily to setUseFixedLayout and setPaintEntireContents
        set it on the FrameView wen transitioning to a new page, etc.

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

2010-11-22  Adam Roben  <aroben@apple.com>

        Use paths relative to $WebKitVSPropsRedirectionDir to access shared .vsprops files

        Apple's Windows build allows placing header files and import libraries for WebKit's
        dependencies (CoreGraphics, CFNetwork, SQLite, etc.) outside the source tree via the
        $WebKitLibrariesDir environment variable. This is both required for production builds and
        convenient for Apple-internal developer builds. Apple's production builds also require that
        WebKit's shared .vsprops files be accessed relative to $WebKitLibrariesDir. In production
        builds, the files are copied into that directory tree by the
        WebKitLibraries/win/tools/WinTools.make file. In Apple-internal developer builds, the
        copying is done by
        JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make.

        This .vsprops copying is problematic in one very important case: when a developer updates
        their source tree and then tries to build. Visual Studio only reads .vsprops files when a
        project is first loaded. So, when Visual Studio is first opened after the .vsprops files are
        updated, it reads in the old files that were already residing in $WebKitLibrariesDir. When a
        build is started, JavaScriptCoreGenerated.make copies the new .vsprops files into
        $WebKitLibrariesDir, but Visual Studio will not pick up the changes.  The rest of the build
        will proceed with out-of-date .vsprops files, which will likely result in a build failure.

        To fix this, we now use normal relative paths to access the .vsprops files in the source
        tree rather than in $WebKitLibrariesDir, but prefix those paths with a new environment
        variable, $WebKitVSPropsRedirectionDir. In developer builds, this environment variable is
        unset, so the normal relative paths are used to read the .vsprops files out of the source
        tree directly. In production builds, this environment variable is set to a fake directory
        that will cause the .vsprops files in $WebKitLibrariesDir to be found when the relative path
        is resolved.
        
        For example, JavaScriptCore.vcproj uses this path for FeatureDefines.vsprops:

        $(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops

        In developer builds, where $WebKitVSPropsRedirectionDir is unset, this will point to the
        files in WebKitLibraries\win\tools\vsprops in the source tree. In production builds,
        JavaScriptCore.make sets $WebKitVSPropsRedirectionDir to
        "$(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\1\2\3\", so the full path for
        FeatureDefines.vsprops becomes:

        $(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\1\2\3\..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops

        which resolves to:

        $(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops

        (We rely on the fact that Windows doesn't care whether the directories "1", "2", and "3"
        actually exist since they are matched by an equal number of ".." path components.)

        Note that Visual Studio still won't pick up changes made to .vsprops files while Visual
        Studio is open, but that problem hasn't seemed to cause developers many headaches so far.

        Fixes <http://webkit.org/b/49181> Windows build fails mysteriously when .vsprops files are
        updated

        Reviewed by Dave Hyatt.

        * win/WebKit2.make: Set $WebKitVSPropsRedirectionDir so that production builds can
        find the .vsprops files.

        * win/WebKit2.vcproj:
        * win/WebKit2WebProcess.vcproj:
        Changed to use paths relative to $WebKitVSPropsRedirectionDir to access shared .vsprops
        files.

2010-11-22  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Andreas Kling.

        Make WebKit2 compile with ENABLE_JAVASCRIPT_DEBUGGER=0

        * WebProcess/WebPage/WebInspector.cpp: Add missing ENABLE(JAVASCRIPT_DEBUGGER) guards.
        (WebKit::WebInspector::startJavaScriptDebugging):
        (WebKit::WebInspector::stopJavaScriptDebugging):
        (WebKit::WebInspector::startJavaScriptProfiling):
        (WebKit::WebInspector::stopJavaScriptProfiling):

2010-11-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Textareas should be resizable by default
        https://bugs.webkit.org/show_bug.cgi?id=49892

        Test: WebKit2/WKPreferences

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::WebPreferencesStore):
        (WebKit::WebPreferencesStore::encode):
        (WebKit::WebPreferencesStore::decode):
        * Shared/WebPreferencesStore.h:
        Add textAreasAreResizable bit.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetJavaEnabled):
        (WKPreferencesGetJavaEnabled):
        Fix typo, WKPRe... -> WKPre...

        (WKPreferencesSetMinimumFontSize):
        (WKPreferencesGetMinimumFontSize):
        Fix comment to correctly reflect that the default minimumFontSize is 0, not 1.

        (WKPreferencesSetTextAreasAreResizable):
        (WKPreferencesGetTextAreasAreResizable):
        * UIProcess/API/C/WKPreferences.h:
        Add API.

        * UIProcess/API/C/WKPreferencesPrivate.h:
        Don't use PLATFORM in API headers.

        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::setTextAreasAreResizable):
        (WebKit::WebPreferences::textAreasAreResizable):
        * UIProcess/WebPreferences.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        Pipe bit through to the WebProcess and onto WebCore::Settings.

2010-11-19  Zalan Bujtas  <zbujtas@gmail.com>

        Reviewed by Andreas Kling.

        WebUIClient::createNewPage() expects a retained WKPageRef. 
        https://bugs.webkit.org/show_bug.cgi?id=48549

        * UIProcess/API/qt/ClientImpl.cpp:
        (qt_wk_createNewPage):

2010-11-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add a didFail WKContextDownloadClient callback
        https://bugs.webkit.org/show_bug.cgi?id=49847

        * UIProcess/API/C/WKContext.h:
        Add didFail callback.

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didFail):
        Call WebDownloadClient::didFail.

        * UIProcess/WebDownloadClient.cpp:
        (WebKit::WebDownloadClient::didFail):
        Call the didFail client function.


2010-11-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Extend sandbox when downloading files
        https://bugs.webkit.org/show_bug.cgi?id=49844

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction):
        Add new overload.

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::decideDestinationWithSuggestedFilename):
        Create a sandbox extension handle if necessary.

        * UIProcess/Downloads/DownloadProxy.messages.in:
        Add a sandbox extension handle out parameter to the DecideDestinationWithSuggestedFilename message.

        * WebProcess/Downloads/Download.cpp:
        (WebKit::Download::decideDestinationWithSuggestedFilename):
        Create and consume the returned sandbox extension handle.

        (WebKit::Download::didFinish):
        (WebKit::Download::didFail):
        Invalidate the sandbox extension handles.

        * WebProcess/Downloads/mac/DownloadMac.mm:
        (-[WKDownloadAsDelegate download:shouldDecodeSourceDataOfMIMEType:]):
        Whoops, fix inverted logic.

2010-11-19  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Add Debug_Cairo_CFLite and Release_Cairo_CFLite configurations for all vcproj files
        https://bugs.webkit.org/show_bug.cgi?id=49819

        * win/WebKit2.vcproj:
        * win/WebKit2Generated.vcproj:
        * win/WebKit2WebProcess.vcproj:
        * win/WebKit2WebProcessCommon.vsprops:

2010-11-19  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        More of <rdar://problem/8613727> and https://bugs.webkit.org/show_bug.cgi?id=49836
        Add WebKit2 API relevant to customization of context menus

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

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::allowsFollowingLink):
        * WebProcess/WebPage/WebFrame.h:

2010-11-19  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8613727> and https://bugs.webkit.org/show_bug.cgi?id=49836
        Add WebKit2 API relevant to customization of context menus

        Most of this is just exposing already-existing concepts in API.

        * Shared/API/c/WKURLRequest.cpp:
        (WKURLRequestCreateWithWKURL):
        * Shared/API/c/WKURLRequest.h:

        * Shared/WebURLRequest.cpp:
        (WebKit::WebURLRequest::create):
        * Shared/WebURLRequest.h:

        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp:
        (WKBundleHitTestResultCopyAbsoluteImageURL):
        (WKBundleHitTestResultCopyAbsoluteMediaURL):
        (WKBundleHitTestResultGetImageRect):
        (WKBundleHitTestResultGetIsSelected):
        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.h:

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageHasLocalDataForURL):
        (WKBundlePageCanHandleRequest):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:

        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
        (WebKit::InjectedBundleHitTestResult::absoluteImageURL):
        (WebKit::InjectedBundleHitTestResult::absoluteMediaURL):
        (WebKit::InjectedBundleHitTestResult::imageRect):
        (WebKit::InjectedBundleHitTestResult::isSelected):
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.h:

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

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::hasLocalDataForURL):
        (WebKit::WebPage::canHandleRequest):
        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (WebKit::WebPage::hasLocalDataForURL): Stubbed for now.
        (WebKit::WebPage::canHandleRequest): Ditto.
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::hasLocalDataForURL): Ditto.
        (WebKit::WebPage::canHandleRequest): Ditto.

2010-11-19  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Need a way to clear disk cache from WebContext
        https://bugs.webkit.org/show_bug.cgi?id=49820

        * UIProcess/API/C/WKContext.cpp:
        (WKContextClearResourceCaches): Added.
        (WKContextClearApplicationCache): Added.
        * UIProcess/API/C/WKContext.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::clearResourceCaches): Added.
        (WebKit::WebContext::clearApplicationCache): Added.
        * UIProcess/WebContext.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::clearResourceCaches): Added.
        (WebKit::WebProcess::clearApplicationCache): Added.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in: Added messages.
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformClearResourceCaches): Added.
        * WebProcess/qt/WebProcessQt.cpp:
        (WebKit::WebProcess::platformClearResourceCaches): Added.
        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformClearResourceCaches): Added.

2010-11-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement support for loading local files
        https://bugs.webkit.org/show_bug.cgi?id=49828
        <rdar://problem/8447121>

        * UIProcess/WebPageProxy.cpp:
        (WebKit::initializeSandboxExtensionHandle):
        Given an URL, create a sandbox extension if it's a local file URL.

        (WebKit::WebPageProxy::loadURL):
        (WebKit::WebPageProxy::loadURLRequest):
        Pass along sandbox extension handles to the LoadURL and LoadURLRequest messages.
        
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidStartProvisionalLoad):
        Call SandboxExtensionTracker::didStartProvisionalLoad.

        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
        Call SandboxExtensionTracker::didCommitProvisionalLoad.

        (WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad):
        Call SandboxExtensionTracker::didFailProvisionalLoad.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::~WebPage):
        Invalidate the sandbox extension tracker.

        (WebKit::WebPage::close):
        Invalidate the sandbox extension tracker.

        (WebKit::WebPage::loadURL):
        (WebKit::WebPage::loadURLRequest):
        Pass the sandbox extension handle to the sandbox extension tracker.

        (WebKit::WebPage::SandboxExtensionTracker::~SandboxExtensionTracker):
        Invalidate the sandbox extension tracker.

        (WebKit::WebPage::SandboxExtensionTracker::invalidate):
        invalidate ell the sandbox extensions.
        
        (WebKit::WebPage::SandboxExtensionTracker::beginLoad):
        Create a sandbox extension and store it as the "pending provisional extension".

        (WebKit::WebPage::SandboxExtensionTracker::didStartProvisionalLoad):
        Consume the pending provisional extension and make it the provisional extension.

        (WebKit::WebPage::SandboxExtensionTracker::didCommitProvisionalLoad):
        Invalidate the committed extension and make the provisional extension the committed extension.

        (WebKit::WebPage::SandboxExtensionTracker::didFailProvisionalLoad):
        Invalidate the provisional extension.

        * WebProcess/WebPage/WebPage.messages.in:
        Add SandboxExtension::Handle parameters to LoadURL and LoadURLRequest.

2010-11-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Make it possible to encode null SandboxExtension handles
        https://bugs.webkit.org/show_bug.cgi?id=49825

        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::Handle::encode):
        If there's no underlying sandbox extension, just encode an empty byte array.

        (WebKit::SandboxExtension::Handle::decode):
        If the decoded byte array is empty, don't try to create a sandbox extension.

        (WebKit::SandboxExtension::create):
        If the handle is null, return null.

        (WebKit::SandboxExtension::consume):
        Consuming shuld not null out the underlying sandbox extension object.

2010-11-19  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Normalize Cairo/CFLite project/solution configuration names
        https://bugs.webkit.org/show_bug.cgi?id=49818

        * win/WebKit2.vcproj:
        * win/WebKit2WebProcess.vcproj:

2010-11-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add SandboxExtension abstraction and use it for the injected bundle extension
        https://bugs.webkit.org/show_bug.cgi?id=49817

        * Shared/SandboxExtension.h:
        Add SandboxExtension abstraction.
        
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        Instead of encoding/decoding a token, encode/decode the sandbox extension handle.

        * Shared/mac/SandboxExtensionMac.mm: Added.
        Add Mac implementation of SandboxExtension.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureWebProcess):
        Create a SandboxExtension::Handle object.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new files.
        
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (WebKit::InjectedBundle::setSandboxExtension):
        Set the sandbox extension.

        * WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp:
        (WebKit::InjectedBundle::load):
        Consume the sandbox extension.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        Create a sandbox extension and set it on the injected bundle.

2010-11-18  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Windows vcproj configuration names should be normalized across projects
        https://bugs.webkit.org/show_bug.cgi?id=49776

        * win/WebKit2.submit.sln:
        * win/WebKit2Generated.vcproj:
        * win/WebKit2GeneratedCommon.vsprops: Added.

2010-11-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Crash in WebKit::PluginView::manualLoadDidReceiveResponse when navigating to a .wav file in WebKit2 on Mac
        https://bugs.webkit.org/show_bug.cgi?id=48559
        <rdar://problem/8606622>

        Add null checks for m_plugin.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::manualLoadDidReceiveResponse):
        (WebKit::PluginView::manualLoadDidReceiveData):
        (WebKit::PluginView::manualLoadDidFinishLoading):
        (WebKit::PluginView::manualLoadDidFail):

2010-11-18  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Adam Roben.

        <rdar://problem/8602509&8602717&8602724> Enable compaction support.

        * Configurations/WebKit2.xcconfig:

2010-11-18  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

         WebKit2: Safari shouldn't auto-activate plug-ins in background tabs.
         https://bugs.webkit.org/show_bug.cgi?id=49770
         <rdar://problem/8482424>
         
         Add an API on Windows to call setIsInWindow, which calls through to WebPage::setIsInWindow.
         Remove the !PLATFORM(WIN) check in WebPage, so we don't automatically start plugins that are
         loaded in background tabs.

        * UIProcess/API/C/win/WKView.cpp:
        (WKViewSetIsInWindow): Call through to WebView::setIsInWindow.
        * UIProcess/API/C/win/WKView.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::setIsInWindow): Call through to WebPage::setIsInWindow.
        * UIProcess/win/WebView.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Remove the !PLATFORM(WIN) check and update the comment.

2010-11-18  Darin Adler  <darin@apple.com>

        * WebProcess/WebPage/WebPage.cpp: Fix build by rolling out a change.

2010-11-18  Darin Adler  <darin@apple.com>

        Reviewed by Kevin Decker.

        REGRESSION (WebKit2): Plug-ins and <video> start playing immediately in background tabs
        https://bugs.webkit.org/show_bug.cgi?id=49766

        Test: manual-tests/resources/video-tab.html

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Call setCanStartMedia(false) since the rest of the code
        starts out treating the page as "not in a window".

2010-11-18  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Remove leftover Windows Debug_Internal configurations
        https://bugs.webkit.org/show_bug.cgi?id=49758

        * win/WebKit2.vcproj:
        * win/WebKit2WebProcess.vcproj:

2010-11-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Page overlays should be able to handle mouse events
        https://bugs.webkit.org/show_bug.cgi?id=49756

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        Add API cast function for converting an IntPoint to a WKPoint.

        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        (PageOverlayClientImpl::mouseEvent):
        Call the appropriate callbacks.

        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.h:
        Add new callbacks.

2010-11-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Keep the web process alive if there are active downloads
        https://bugs.webkit.org/show_bug.cgi?id=49755

        Make sure that Download objects are destroyed when the download finishes or fails.
        Don't close the web process if there are live Download objects.
        
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didFail):
        Add stub.

        * UIProcess/Downloads/DownloadProxy.h:
        * UIProcess/Downloads/DownloadProxy.messages.in:
        Add DidFail message.

        * WebProcess/Downloads/Download.cpp:
        (WebKit::Download::didFinish):
        Call DownloadManager::downloadFinished.

        (WebKit::Download::didFail):
        Send DidFail message and call DownloadManager::downloadFinished.
        
        * WebProcess/Downloads/Download.h:
        (WebKit::Download::destinationID):
        Call downloadID().

        (WebKit::Download::downloadID):
        Return the download ID.

        * WebProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::downloadFinished):
        Delete the Download object and call WebProcess::shutdownIfPossible.

        * WebProcess/Downloads/DownloadManager.h:
        (WebKit::DownloadManager::isDownloading):
        Return whether the download manager has any active downloads.

        * WebProcess/Downloads/mac/DownloadMac.mm:
        (-[WKDownloadAsDelegate download:didFailWithError:]):
        Call Download::didFail.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::removeWebPage):
        Call shutdownIfPossible.

        (WebKit::WebProcess::shutdownIfPossible):
        New function. Don't shutdown if there are live pages or active downloads.

        * WebProcess/WebProcess.h:

2010-11-18  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Debug_Internal Windows configuration is unnecessary, should be removed
        https://bugs.webkit.org/show_bug.cgi?id=49753

        * UIProcess/Launcher/win/ProcessLauncherWin.cpp:
        * WebKit2Prefix.h:

2010-11-18  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Clean up vcproj errors
        https://bugs.webkit.org/show_bug.cgi?id=49741

        * win/WebKit2WebProcess.vcproj:

2010-11-18  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] [WK2] WebKit 2 would not compile for Qt without ENABLE_TOUCH_EVENT
        https://bugs.webkit.org/show_bug.cgi?id=49664

        Move the ENABLE(TOUCH_EVENTS) to the code where internal WebKit touch
        types are used.

        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::touchEvent):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::touchEvent):

2010-11-17  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Reuse the size of the actualVisibleContentRect when loading a new page
        or navigating session history.

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

2010-11-17  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Converge means of querying a parent node into one way, which is Node::parentNode.
        https://bugs.webkit.org/show_bug.cgi?id=49686

        * WebProcess/WebPage/WebPage.cpp: Changed to use parentNode.
        (WebKit::WebPage::findZoomableAreaForPoint): Ditto.

2010-11-17  Timothy Hatcher  <timothy@apple.com>

        Remove duplicate Web Inspector message handeling in WebPage::didReceiveMessage.

        https://webkit.org/b/49689

        Reviewed by Andreas Kling.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveMessage): Remove duplicate code.

2010-11-17  Timothy Hatcher  <timothy@apple.com>

        Fix a crash when closing the inspected page when the Web Inspector
        page was never created.

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

        Reviewed by John Sullivan.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::sendMessageToFrontend): Null check the Inspector WebPage.

2010-11-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Don't crash when invalidating a page overlay that hasn't been installed yet
        https://bugs.webkit.org/show_bug.cgi?id=49685

        Null check the web page.

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

2010-11-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=49682 - Expose "removeItemAtIndex" in WKMutableArray

        * Shared/API/c/WKMutableArray.cpp:
        (WKArrayRemoveItemAtIndex):
        * Shared/API/c/WKMutableArray.h:

        * Shared/MutableArray.cpp:
        (WebKit::MutableArray::removeItemAtIndex):
        * Shared/MutableArray.h:

2010-11-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=49683 - Export WKContextMenuItem and WKContextMenuItemTypes as public headers

        * WebKit2.xcodeproj/project.pbxproj:

2010-11-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Need way to invalidate part of a WKOverlayRef so it will be redrawn
        https://bugs.webkit.org/show_bug.cgi?id=49679
        <rdar://problem/8679152>

        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        (WKBundlePageOverlaySetNeedsDisplay):
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.h:
        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::setNeedsDisplay):
        * WebProcess/WebPage/PageOverlay.h:

2010-11-17  Timothy Hatcher  <timothy@apple.com>

        Provide a way to create a WKView (WebPage) that is hidden from
        the InjectedBundle. This is needed for the Web Inspector.

        https://webkit.org/b/49670

        Reviewed by Sam Weinig.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode): Added visibleToInjectedBundle.
        (WebKit::WebPageCreationParameters::decode): Ditto.
        * Shared/WebPageCreationParameters.h: Ditto.
        * UIProcess/API/C/win/WKView.cpp:
        (WKViewCreate): Pass VisibleToInjectedBundle to the WebView create function.
        * UIProcess/API/C/win/WKViewPrivate.cpp:
        (WKViewCreateForWebInspector): Added. Not used yet. Passes HiddenFromInjectedBundle
        to the WebView create function.
        * UIProcess/API/C/win/WKViewPrivate.h: Added WKViewCreateForWebInspector.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:pageNamespaceRef:hiddenFromInjectedBundle:]): Added hiddenFromInjectedBundle
        parameter and calls WebPageProxy::setVisibleToInjectedBundle.
        (-[WKView initWithFrame:pageNamespaceRef:]): Calls initWithFrame:pageNamespaceRef:hiddenFromInjectedBundle:
        and passes NO for hiddenFromInjectedBundle.
        (-[WKView initWithFrame:]): Cleaned up by removing the local assignment to self and just returns the result.
        * UIProcess/API/mac/WKViewInternal.h: Added initWithFrame:pageNamespaceRef:hiddenFromInjectedBundle:.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Initialize m_visibleToInjectedBundle from the creation parameters.
        (WebKit::WebPageProxy::creationParameters): Set visibleToInjectedBundle using m_visibleToInjectedBundle.
        * UIProcess/WebPageProxy.h: Added m_visibleToInjectedBundle.
        (WebKit::WebPageProxy::visibleToInjectedBundle): Added. Return m_visibleToInjectedBundle.
        (WebKit::WebPageProxy::setVisibleToInjectedBundle): Added. Set m_visibleToInjectedBundle.
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView): Added InjectedBundleVisibility parameter and calls
        WebPageProxy::setVisibleToInjectedBundle.
        * UIProcess/win/WebView.h: Added InjectedBundleVisibility enum.
        (WebKit::WebView::create): Added InjectedBundleVisibility parameter.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::create): Checks visibleToInjectedBundle before talking to the injected bundle.
        (WebKit::WebPage::WebPage): Initialize m_isVisibleToInjectedBundle from the creation parameters.
        (WebKit::WebPage::close): Checks m_isVisibleToInjectedBundle before talking to the injected bundle.
        * WebProcess/WebPage/WebPage.h: Added m_isVisibleToInjectedBundle.

2010-11-17  Andras Becsi  <abecsi@webkit.org>

        Unreviewed buildfix.

        [Qt] D'oh! I screwed up the dependencies.

        * DerivedSources.pro:

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

        Reviewed by Andreas Kling.

        [WK2] Set paintsEntireContents for "resizes to contents" mode

        Only relevant for the tiled backing store.

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

2010-11-17  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] Make it possible to set custom user agent strings in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=49627

        Copy the MiniBrowser.qrc and QtTestBrowser's useragentlist.txt file
        to the build directory of MiniBrowser because it has to be in a
        subdirectory of the resource file.
        Add a method to QWKPage to retrieve the custom user agent string.

        * DerivedSources.pro:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::customUserAgent):
        * UIProcess/API/qt/qwkpage.h:

2010-11-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=45567
        Add stubbed-out layer-backed drawing area for Windows.

        Add implementations of LayerBackedDrawingArea and
        LayerBackedDrawingAreaProxy for Windows, and add them
        to the vcproj.

        * UIProcess/LayerBackedDrawingAreaProxy.cpp:
        * UIProcess/win/LayerBackedDrawingAreaProxyWin.cpp: Added.
        (WebKit::LayerBackedDrawingAreaProxy::page):
        (WebKit::LayerBackedDrawingAreaProxy::platformSetSize):
        (WebKit::LayerBackedDrawingAreaProxy::attachCompositingContext):
        (WebKit::LayerBackedDrawingAreaProxy::detachCompositingContext):
        (WebKit::LayerBackedDrawingAreaProxy::paint):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::pageDidEnterAcceleratedCompositing):
        (WebKit::WebView::pageDidLeaveAcceleratedCompositing):
        (WebKit::WebView::switchToDrawingAreaTypeIfNecessary):
        * UIProcess/win/WebView.h:
        * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
        * WebProcess/WebPage/win/LayerBackedDrawingAreaWin.cpp: Added.
        (WebKit::LayerBackedDrawingArea::platformInit):
        (WebKit::LayerBackedDrawingArea::platformClear):
        (WebKit::LayerBackedDrawingArea::attachCompositingContext):
        (WebKit::LayerBackedDrawingArea::detachCompositingContext):
        (WebKit::LayerBackedDrawingArea::setRootCompositingLayer):
        (WebKit::LayerBackedDrawingArea::scheduleCompositingLayerSync):
        (WebKit::LayerBackedDrawingArea::syncCompositingLayers):
        * win/WebKit2.vcproj:

2010-11-17  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] [WK2] The focus switching does not seems to work with QGraphicsWKView
        https://bugs.webkit.org/show_bug.cgi?id=49545

        Implement focus switching with Tab. This is now done asynchronously,
        waiting for webkit to call takeFocus() and switching the widget.

        Since the focus can change between the Tab press and the callback,
        QGraphicsWKView::focusNextPrevChildCallback() make sure the view still has
        focus before passing it to the next widget.

        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::QGraphicsWKView):
        (QGraphicsWKView::focusNextPrevChildCallback):
        (QGraphicsWKView::focusNextPrevChild):
        * UIProcess/API/qt/qgraphicswkview.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::takeFocus):
        * UIProcess/API/qt/qwkpage.h:
        * UIProcess/API/qt/qwkpage_p.h:

2010-11-17  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Don't prohibit scrolling in tiled backing store mode.

        We delegate scrolling instead.

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

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

        Reviewed by Kenneth Christiansen.

        [Qt] Improve painting performance on 16-bit displays

        When the default pixmap depth is 16-bit, then use RGB16 instead of
        RGB32 for the chunks, to avoid unnecessary conversions and reduce
        chunk size. The conversions happen as images as QPixmaps have 16-bit
        depth and the tiles on the ui process are also backed by QPixmaps.

        * Shared/qt/UpdateChunk.cpp:
        (WebKit::UpdateChunk::size):
        (WebKit::UpdateChunk::createImage):
        * Shared/qt/UpdateChunk.h:

2010-11-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        WebKit2: Support enabling site-specific quirks
        <rdar://problem/8451371>
        https://bugs.webkit.org/show_bug.cgi?id=46076

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::WebPreferencesStore):
        (WebKit::WebPreferencesStore::encode):
        (WebKit::WebPreferencesStore::decode):
        * Shared/WebPreferencesStore.h:
        Add needsSiteSpecificQuirks;

        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toFontSmoothingLevel):
        (WebKit::toAPI):
        Move FontSmoothing conversion functions here.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetFontSmoothingLevel):
        (WKPreferencesGetFontSmoothingLevel):
        (WKPreferencesSetAcceleratedCompositingEnabled):
        (WKPreferencesGetAcceleratedCompositingEnabled):
        (WKPreferencesSetCompositingBordersVisible):
        (WKPreferencesGetCompositingBordersVisible):
        (WKPreferencesSetCompositingRepaintCountersVisible):
        (WKPreferencesGetCompositingRepaintCountersVisible):
        (WKPreferencesSetNeedsSiteSpecificQuirks):
        (WKPreferencesGetNeedsSiteSpecificQuirks):
        Add WKPreferencesSetNeedsSiteSpecificQuirks/WKPreferencesGetNeedsSiteSpecificQuirks
        and move implementations from WKPreferencesPrivate.cpp here.

        * UIProcess/API/C/WKPreferencesPrivate.cpp: Removed.

        * UIProcess/API/C/WKPreferencesPrivate.h:
        Add Add WKPreferencesSetNeedsSiteSpecificQuirks/WKPreferencesGetNeedsSiteSpecificQuirks.

        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::setNeedsSiteSpecificQuirks):
        (WebKit::WebPreferences::needsSiteSpecificQuirks):
        * UIProcess/WebPreferences.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        Pipe through needsSiteSpecificQuirks.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebKit2.pro:
        * win/WebKit2.vcproj:
        Update for removed files.

2010-11-16  Adam Roben  <aroben@apple.com>

        Fix horizontal scrolling via the mousewheel/trackpad on Windows

        Reviewed by Mark Rowe.

        * Shared/win/WebEventFactory.cpp: Fixed typo in the
        WM_VISTA_MOUSEHWHEEL constant.

2010-11-16  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Disable LTCG for Windows Release builds. Add new Release_LTCG configuration.
        https://bugs.webkit.org/show_bug.cgi?id=49632

        * win/WebKit2.make:
        * win/WebKit2.submit.sln:
        * win/WebKit2.vcproj:
        * win/WebKit2WebProcess.vcproj:

2010-11-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Handle converting a ResourceHandle to a download
        https://bugs.webkit.org/show_bug.cgi?id=49631

        * WebProcess/Downloads/Download.h:
        Add startWithHandle.

        * WebProcess/Downloads/DownloadManager.h:
        * WebProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::convertHandleToDownload):
        Create a new Download object and call startWithHandle on it.

        * WebProcess/Downloads/cf/DownloadCFNet.cpp:
        (WebKit::Download::startWithHandle):
        Add stub.

        * WebProcess/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::startWithHandle):
        Create an NSURLDownload object from passed in ResourceHandle.

        * WebProcess/Downloads/qt/DownloadQt.cpp:
        (WebKit::Download::startWithHandle):
        Add stub.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::download):
        Call WebFrame::convertHandleToDownload.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::convertHandleToDownload):
        Call DownloadManager::convertHandleToDownload.

2010-11-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Set the original URL for downloads
        https://bugs.webkit.org/show_bug.cgi?id=49628

        * WebProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        * WebProcess/Downloads/DownloadManager.h:
        startDownload now takes the originating web page.

        * WebProcess/Downloads/cf/DownloadCFNet.cpp:
        (WebKit::Download::start):
        start now takes the originating web page.

        * WebProcess/Downloads/mac/DownloadMac.mm:
        (WebKit::originatingURL):
        (WebKit::setOriginalURLForDownload):
        Port code over from WebKit1 that sets the download URL.

        (WebKit::Download::start):
        Call setOriginalURLForDownload.

        * WebProcess/Downloads/qt/DownloadQt.cpp:
        (WebKit::Download::start):
        start now takes the originating web page.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::startDownload):
        Pass the web page to DownloadManager::startDownload.

2010-11-16  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=11004
        
        font-size:0 is ignored.  Remove the minimum font size of 1 in CSSStyleSelector.
        Change the pref value for minimum font size from 1 to 0.  Make sure to never use the NSFont's size,
        since it doesn't honor a size of 0.  Instead pass the size in to the FontPlatformData(NSFont*) version
        of the constructor rather than using [NSFont pointSize].

        https://bugs.webkit.org/show_bug.cgi?id=49582
        
        Negative leading is not handled correctly.  There are two bugs here.  The first is that
        maxAscent and maxDescent can be negative, so we need a notion of whether or not we have
        set them before so that we can allow them to be < 0.
        
        The second issue is that we should understand where fonts will end up relative to
        our baseline (excluding line height), and only allow those boxes to impact ascent and
        descent if the actual font box (without factoring in line height) is above or below the
        root line box baseline.

        Added fast/css/negative-leading.html
        
        These two bug fixes have to land together to keep the Acid 3 test rendering correctly.

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::WebPreferencesStore):

2010-11-16  Anders Carlsson  <andersca@apple.com>

        Fix clang++ build.

        * Scripts/webkit2/messages.py:
        * WebProcess/WebPage/WebInspector.h:

2010-11-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add WKPageCanShowMIMEType
        https://bugs.webkit.org/show_bug.cgi?id=49612

        * UIProcess/API/C/WKPage.cpp:
        (WKPageCanShowMIMEType):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::canShowMIMEType):
        * UIProcess/WebPageProxy.h:

2010-11-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Make WebPageProxy::decidePolicyForMIMEType a tad synchronous
        https://bugs.webkit.org/show_bug.cgi?id=49605

        Change the DecidePolicyForMIMEType message to be synchronous, and if the policy listener is
        invoked from within the decidePolicyForMIMEType callback return the policy information as out
        parameters. This is needed in order to convert a loading connection to a download.

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::decidePolicyForMIMEType):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForMIMEType):

2010-11-16  Kenneth Rohde Christiansen  <kenneth@webkit.org>, Zalan Bujtas  <zbujtas@gmail.com>

        Reviewed by Andreas Kling.

        [WK2][Qt] Add API for finding a zoomable area for a given point

        This is useful for implementing e.g "double tap zoom"

        Only enabled for Qt.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::findZoomableAreaForPoint):
        (QWKPagePrivate::didFindZoomableArea):
        * UIProcess/API/qt/qwkpage.h:
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFindZoomableArea):
        (WebKit::WebPageProxy::findZoomableAreaForPoint):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::findZoomableAreaForPoint):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2010-11-16  Andreas Kling  <kling@webkit.org>

        Rubber-stamped by Simon Hausmann.

        Revert !ENABLE(INSPECTOR) fix- we don't need it right now,
        and it was less maintainable than I had though.

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        (WebKit::toImpl):
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        * WebProcess/WebPage/WebInspector.cpp:

2010-11-16  Andreas Kling  <kling@webkit.org>

        Reviewed by Simon Hausmann.

        Fix compilation with !ENABLE(INSPECTOR)

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        (WebKit::toImpl):
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        * WebProcess/WebPage/WebInspector.cpp:

2010-11-16  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Use SIGINT instead of SIGKILL to let the web process clean up after itself.

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::QtWebProcess::setupChildProcess):

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

        Reviewed by Andreas Kling.

        [WK2][Qt] Expose resizes-to-contents mode in WebKit2

        Only available with ENABLE(TILED_BACKING_STORE)

        Based on a patch by Antti Koivisto.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::setResizesToContentsUsingLayoutSize):
        * UIProcess/API/qt/qwkpage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setResizesToContentsUsingLayoutSize):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::contentsSizeChanged):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setSize):
        (WebKit::WebPage::setResizesToContentsUsingLayoutSize):
        (WebKit::WebPage::resizeToContentsIfNeeded):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::resizesToContentsEnabled):
        (WebKit::WebPage::resizesToContentsLayoutSize):
        * WebProcess/WebPage/WebPage.messages.in:

2010-11-16  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Get proxy settings from environment (http[s]_proxy)

        If http_proxy and/or https_proxy are set in the environment,
        pass those in to QNetworkAccessManager.

        * WebProcess/qt/WebProcessMainQt.cpp:
        (WebKit::EnvHttpProxyFactory::EnvHttpProxyFactory):
        (WebKit::EnvHttpProxyFactory::initializeFromEnvironment):
        (WebKit::EnvHttpProxyFactory::queryProxy):
        (WebKit::initializeProxy):
        (WebKit::WebProcessMainQt):

2010-11-16  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Emit windowCloseRequested signal on window.close()

        Original patch by Zalan Bujtas.

        * UIProcess/API/qt/ClientImpl.cpp:
        (qt_wk_close):
        * UIProcess/API/qt/qwkpage.h:

2010-11-15  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Kill the web process if the UI process dies

        Connect UI (parent) process death signal to SIGKILL of the web
        process (child). This ensures that there's no stale web processes
        after the UI process has crashed.

        Original patch by Kimmo Kinnunen.

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::QtWebProcess::QtWebProcess):
        (WebKit::QtWebProcess::setupChildProcess):
        (WebKit::ProcessLauncherHelper::launch):

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

        Rubber-stamped by Andreas Kling.

        [Qt] Trivial build fix for building WebKit2 inside Qt Creator

        Similar to WebCore.pro, define a fallback for OUTPUT_DIR.

        * WebKit2.pro:

2010-11-15  Andreas Kling  <kling@webkit.org>

        Reviewed by Tor Arne Vestbø.

        [Qt] Make sure qwkpage.h and qwkpreferences.h are copied into includes/WebKit2

        * UIProcess/API/qt/WKView.h:

2010-11-15  Andreas Kling  <kling@webkit.org>

        Reviewed by Tor Arne Vestbø.

        [Qt] Use $${PYTHON} rather than "python" to execute Python scripts

        Fixes building with the old Python that currently ships with Scratchbox.

        * DerivedSources.pro:

2010-11-15  Brady Eidson  <beidson@apple.com>

        Reviewed by a better attempt at a Windows build fix.

        * win/WebKit2Generated.make:

2010-11-15  Brady Eidson  <beidson@apple.com>

        Reviewed by my attempt to fix the Windows build

        * win/WebKit2Generated.make: Add new API headers here.

2010-11-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Finish off <rdar://problem/8613727> and https://bugs.webkit.org/show_bug.cgi?id=48720
        Customizable context menu support in WebKit2.

        - Adds an API-level WKContextMenuItem.
        - Round trips through both the InjectedBundle client and the new PageContextMenuClient before
          actually displaying the menu.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

        * Shared/API/c/WKBase.h:
        * Shared/API/c/WKContextMenuItem.cpp: Added.
        (WKContextMenuItemGetTypeID):
        (WKContextMenuItemCreateAsAction):
        (WKContextMenuItemCreateAsCheckableAction):
        (WKContextMenuItemCreateAsSubmenu):
        (WKContextMenuItemSeparatorItem):
        (WKContextMenuItemGetTag):
        (WKContextMenuItemGetType):
        (WKContextMenuItemCopyTitle):
        (WKContextMenuItemGetEnabled):
        (WKContextMenuItemGetChecked):
        (WKContextMenuCopySubmenuItems):
        * Shared/API/c/WKContextMenuItem.h: Added.
        * Shared/API/c/WKContextMenuItemTypes.h: Added.

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        (WebKit::toImpl):

        * Shared/WebContextMenuItem.cpp:
        (WebKit::WebContextMenuItem::create):
        (WebKit::WebContextMenuItem::separatorItem):
        (WebKit::WebContextMenuItem::submenuItemsAsImmutableArray):
        * Shared/WebContextMenuItem.h:

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageContextMenuClient):
        (WKPageSetPageFindClient):
        (WKPageSetPageLoaderClient):
        (WKPageSetPagePolicyClient):
        (WKPageSetPageUIClient):
        * UIProcess/API/C/WKPage.h:

        * UIProcess/WebPageContextMenuClient.cpp: Added.
        (WebKit::WebPageContextMenuClient::getContextMenuFromProposedMenu):
        * UIProcess/WebPageContextMenuClient.h: Added.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeContextMenuClient):
        (WebKit::WebPageProxy::showContextMenu):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.cpp:
        (WebKit::InjectedBundlePageContextMenuClient::getCustomMenuFromDefaultItems):
        * WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.h:

        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::getCustomMenuFromDefaultItems):
        * WebProcess/WebPage/WebContextMenu.cpp:
        (WebKit::WebContextMenu::show):

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

        Reviewed by Sam Weinig.

        Add shouldDecodeSourceDataOfMIMEType WKContextDownloadClient callback
        https://bugs.webkit.org/show_bug.cgi?id=49558

        * UIProcess/API/C/WKContext.h:
        Add shouldDecodeSourceDataOfMIMEType callback.

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::shouldDecodeSourceDataOfMIMEType):
        Call WebDownloadClient::shouldDecodeSourceDataOfMIMEType.

        (WebKit::DownloadProxy::decideDestinationWithSuggestedFilename):
        Add allowOverwrite out parameter.

        * UIProcess/Downloads/DownloadProxy.h:
        * UIProcess/Downloads/DownloadProxy.messages.in:
        Add ShouldDecodeSourceDataOfMIMEType message.

        * UIProcess/WebDownloadClient.cpp:
        (WebKit::WebDownloadClient::shouldDecodeSourceDataOfMIMEType):
        Call the WKContextDownloadClient.

        (WebKit::WebDownloadClient::decideDestinationWithSuggestedFilename):
        Add allowOverwrite out parameter.

        * UIProcess/WebDownloadClient.h:
        * WebProcess/Downloads/Download.cpp:
        (WebKit::Download::shouldDecodeSourceDataOfMIMEType):
        Send the ShouldDecodeSourceDataOfMIMEType message.

        (WebKit::Download::decideDestinationWithSuggestedFilename):
        Add allowOverwrite reply parameter.

        * WebProcess/Downloads/mac/DownloadMac.mm:
        (-[WKDownloadAsDelegate download:shouldDecodeSourceDataOfMIMEType:]):
        Call Download::shouldDecodeSourceDataOfMIMEType.

        (-[WKDownloadAsDelegate download:decideDestinationWithSuggestedFilename:]):
        Add allowOverwrite parameter.

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

        Reviewed by Sam Weinig.

        Add decideDestinationWithSuggestedFilename WKContextDownloadClient callback
        https://bugs.webkit.org/show_bug.cgi?id=49554

        * Platform/CoreIPC/MessageSender.h:
        (CoreIPC::MessageSender::sendSync):
        Add sendSync capabilities to Messagesender.
        
        * UIProcess/API/C/WKContext.h:
        Add decideDestinationWithSuggestedFilename callback.

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::decideDestinationWithSuggestedFilename):
        Call WebDownloadClient::decideDestinationWithSuggestedFilename.

        * UIProcess/Downloads/DownloadProxy.messages.in:
        Add DecideDestinationWithSuggestedFilename.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::didReceiveSyncMessage):
        Process MessageClassDownloadProxy messages.

        * UIProcess/WebDownloadClient.cpp:
        (WebKit::WebDownloadClient::decideDestinationWithSuggestedFilename):
        Ask the WKContextDownloadClient for the destination.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        MessageClassDownloadProxy messages should go to the WebContext.

        * WebProcess/Downloads/Download.cpp:
        (WebKit::Download::decideDestinationWithSuggestedFilename):
        Send the DecideDestinationWithSuggestedFilename message.

        * WebProcess/Downloads/Download.h:
        * WebProcess/Downloads/mac/DownloadMac.mm:
        (-[WKDownloadAsDelegate download:decideDestinationWithSuggestedFilename:]):
        call Download::decideDestinationWithSuggestedFilename and set the destination.

2010-11-15  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [WK2][Qt] Add "page snapshot" functionality to tiled backing store

        Original patch by Antti Koivisto.

        Add a way to take a snapshot of a specific part of the page, at a specific scale.
        Only implemented for the tiled drawing area.

        * Shared/CoreIPCSupport/DrawingAreaMessageKinds.h:
        New message: TakeSnapshot.

        * Shared/CoreIPCSupport/DrawingAreaProxyMessageKinds.h:
        New message: SnapshotTaken.

        * UIProcess/API/qt/qgraphicswkview.h:
        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::takeSnapshot):
        Expose the snapshot functionality.

        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::didReceiveMessage):
        (WebKit::TiledDrawingAreaProxy::takeSnapshot):
        * UIProcess/TiledDrawingAreaProxy.h:
        * UIProcess/qt/TiledDrawingAreaProxyQt.cpp:
        (WebKit::TiledDrawingAreaProxy::snapshotTaken):
        * WebProcess/WebPage/TiledDrawingArea.cpp:
        (WebKit::TiledDrawingArea::didReceiveMessage):

2010-11-15  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [WK2][Qt] WebKit2 implementation of tiled backing store
        https://bugs.webkit.org/show_bug.cgi?id=49526

        Basic opt-in tiling implementation for WebKit2/Qt.

        Original patch by Antti Koivisto.

        * Shared/CoreIPCSupport/DrawingAreaMessageKinds.h:
        New messages: RequestTileUpdate and CancelTileUpdate.

        * Shared/CoreIPCSupport/DrawingAreaProxyMessageKinds.h:
        New messages: Invalidate, TileUpdated, AllTileUpdatesProcessed.

        * Shared/DrawingAreaBase.h:
        New area type: TiledDrawingAreaType.

        * UIProcess/API/qt/qgraphicswkview.h:
        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::QGraphicsWKView):
        (QGraphicsWKView::setGeometry):
        (QGraphicsWKViewPrivate::QGraphicsWKViewPrivate):
        (QGraphicsWKView::prepareScaleChange):
        (QGraphicsWKView::commitScaleChange):
        (QGraphicsWKViewPrivate::onScaleChanged):
        (QGraphicsWKViewPrivate::commitScale):
        Support for tiled backing store.

        * UIProcess/TiledDrawingAreaProxy.cpp: Added.
        (WebKit::TiledDrawingAreaProxy::create):
        (WebKit::TiledDrawingAreaProxy::TiledDrawingAreaProxy):
        (WebKit::TiledDrawingAreaProxy::~TiledDrawingAreaProxy):
        (WebKit::TiledDrawingAreaProxy::setSize):
        (WebKit::TiledDrawingAreaProxy::setPageIsVisible):
        (WebKit::TiledDrawingAreaProxy::didSetSize):
        (WebKit::TiledDrawingAreaProxy::didReceiveMessage):
        (WebKit::TiledDrawingAreaProxy::didReceiveSyncMessage):
        (WebKit::TiledDrawingAreaProxy::requestTileUpdate):
        (WebKit::TiledDrawingAreaProxy::waitUntilUpdatesComplete):
        (WebKit::TiledDrawingAreaProxy::createTile):
        (WebKit::TiledDrawingAreaProxy::setTileSize):
        (WebKit::TiledDrawingAreaProxy::setTileCreationDelay):
        (WebKit::TiledDrawingAreaProxy::setKeepAndCoverAreaMultipliers):
        (WebKit::TiledDrawingAreaProxy::invalidate):
        (WebKit::TiledDrawingAreaProxy::updateTileBuffers):
        (WebKit::TiledDrawingAreaProxy::tileBufferUpdateComplete):
        (WebKit::TiledDrawingAreaProxy::paint):
        (WebKit::TiledDrawingAreaProxy::adjustVisibleRect):
        (WebKit::TiledDrawingAreaProxy::setContentsScale):
        (WebKit::TiledDrawingAreaProxy::removeAllTiles):
        (WebKit::TiledDrawingAreaProxy::tileDistance):
        (WebKit::TiledDrawingAreaProxy::calculateKeepRect):
        (WebKit::TiledDrawingAreaProxy::calculateCoverRect):
        (WebKit::TiledDrawingAreaProxy::createTiles):
        (WebKit::TiledDrawingAreaProxy::resizeEdgeTiles):
        (WebKit::TiledDrawingAreaProxy::dropTilesOutsideRect):
        (WebKit::TiledDrawingAreaProxy::tileAt):
        (WebKit::TiledDrawingAreaProxy::setTile):
        (WebKit::TiledDrawingAreaProxy::removeTile):
        (WebKit::TiledDrawingAreaProxy::mapToContents):
        (WebKit::TiledDrawingAreaProxy::mapFromContents):
        (WebKit::TiledDrawingAreaProxy::contentsRect):
        (WebKit::TiledDrawingAreaProxy::tileRectForCoordinate):
        (WebKit::TiledDrawingAreaProxy::tileCoordinateForPoint):
        (WebKit::TiledDrawingAreaProxy::startTileBufferUpdateTimer):
        (WebKit::TiledDrawingAreaProxy::tileBufferUpdateTimerFired):
        (WebKit::TiledDrawingAreaProxy::startTileCreationTimer):
        (WebKit::TiledDrawingAreaProxy::tileCreationTimerFired):
        (WebKit::TiledDrawingAreaProxy::hasPendingUpdates):
        * UIProcess/TiledDrawingAreaProxy.h: Added.
        (WebKit::TiledDrawingAreaProxy::contentsScale):
        (WebKit::TiledDrawingAreaProxy::attachCompositingContext):
        (WebKit::TiledDrawingAreaProxy::detachCompositingContext):
        (WebKit::TiledDrawingAreaProxy::tileSize):
        (WebKit::TiledDrawingAreaProxy::tileCreationDelay):
        (WebKit::TiledDrawingAreaProxy::getKeepAndCoverAreaMultipliers):
        * UIProcess/TiledDrawingAreaTile.h: Added.
        (WebKit::TiledDrawingAreaTile::create):
        (WebKit::TiledDrawingAreaTile::hasBackBufferUpdatePending):
        (WebKit::TiledDrawingAreaTile::coordinate):
        (WebKit::TiledDrawingAreaTile::rect):
        (WebKit::TiledDrawingAreaTile::ID):
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        * WebProcess/WebPage/TiledDrawingArea.cpp: Added.
        (WebKit::TiledDrawingArea::TiledDrawingArea):
        (WebKit::TiledDrawingArea::~TiledDrawingArea):
        (WebKit::TiledDrawingArea::invalidateWindow):
        (WebKit::TiledDrawingArea::invalidateContentsAndWindow):
        (WebKit::TiledDrawingArea::invalidateContentsForSlowScroll):
        (WebKit::TiledDrawingArea::scroll):
        (WebKit::TiledDrawingArea::setNeedsDisplay):
        (WebKit::TiledDrawingArea::display):
        (WebKit::TiledDrawingArea::scheduleDisplay):
        (WebKit::TiledDrawingArea::setSize):
        (WebKit::TiledDrawingArea::suspendPainting):
        (WebKit::TiledDrawingArea::resumePainting):
        (WebKit::TiledDrawingArea::didUpdate):
        (WebKit::TiledDrawingArea::updateTile):
        (WebKit::TiledDrawingArea::tileUpdateTimerFired):
        (WebKit::TiledDrawingArea::didReceiveMessage):
        * WebProcess/WebPage/TiledDrawingArea.h: Added.
        (WebKit::TiledDrawingArea::attachCompositingContext):
        (WebKit::TiledDrawingArea::detachCompositingContext):
        (WebKit::TiledDrawingArea::setRootCompositingLayer):
        (WebKit::TiledDrawingArea::scheduleCompositingLayerSync):
        (WebKit::TiledDrawingArea::syncCompositingLayers):
        * WebProcess/WebPage/qt/TiledDrawingAreaQt.cpp: Added.
        (WebKit::TiledDrawingArea::paintIntoUpdateChunk):
        * WebKit2.pro:
        * UIProcess/qt/TiledDrawingAreaTileQt.cpp: Added.
        (WebKit::checkeredPixmap):
        (WebKit::TiledDrawingAreaTile::TiledDrawingAreaTile):
        (WebKit::TiledDrawingAreaTile::~TiledDrawingAreaTile):
        (WebKit::TiledDrawingAreaTile::isDirty):
        (WebKit::TiledDrawingAreaTile::isReadyToPaint):
        (WebKit::TiledDrawingAreaTile::hasReadyBackBuffer):
        (WebKit::TiledDrawingAreaTile::invalidate):
        (WebKit::TiledDrawingAreaTile::resize):
        (WebKit::TiledDrawingAreaTile::swapBackBufferToFront):
        (WebKit::TiledDrawingAreaTile::paint):
        (WebKit::TiledDrawingAreaTile::paintCheckerPattern):
        (WebKit::TiledDrawingAreaTile::updateFromChunk):
        (WebKit::TiledDrawingAreaTile::updateBackBuffer):
        * UIProcess/qt/TiledDrawingAreaProxyQt.cpp: Added.
        (WebKit::TiledDrawingAreaProxy::updateWebView):
        (WebKit::TiledDrawingAreaProxy::webViewVisibleRect):
        (WebKit::TiledDrawingAreaProxy::page):

2010-11-12  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Need to implement WebKit::pluginWillHandleLoadError for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=48764

        Add the missing error to Qt support.

        * WebProcess/WebCoreSupport/qt/WebErrorsQt.cpp:
        (WebKit::pluginWillHandleLoadError):

2010-11-12  John Sullivan  <sullivan@apple.com>

        Reviewed by Anders Carlsson.

        Fixed Target for WKBundlePageOverlay.cpp.

        * WebKit2.xcodeproj/project.pbxproj:
        Changed Target for WKBundlePageOverlay.cpp from WebProcess to WebKit2.

2010-11-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Need a way that WKBundlePageOverlayRef clients can make sure they only uninstall the overlay they installed
        https://bugs.webkit.org/show_bug.cgi?id=49461
        <rdar://problem/8662760>

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageUninstallPageOverlay):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::findString):
        (WebKit::FindController::hideFindUI):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::uninstallPageOverlay):
        * WebProcess/WebPage/WebPage.h:

2010-11-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Allow MessageSender to override sendMessage
        https://bugs.webkit.org/show_bug.cgi?id=49457

        Change MessageSender::send to encode the message and then call sendMessage.
        This allows for clients to override sendMessage, something which WebProcessProxy
        will be able to take advantage of.

        * Platform/CoreIPC/MessageSender.h:
        (CoreIPC::MessageSender::send):
        (CoreIPC::MessageSender::sendMessage):

2010-11-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        CoreIPC cleanup
        https://bugs.webkit.org/show_bug.cgi?id=49455

        Add a static create function to ArgumentEncoder. 
        Factor sync message argument encoder creation out into a new function,
        createSyncMessageArgumentEncoder.
        
        * Platform/CoreIPC/ArgumentEncoder.cpp:
        (CoreIPC::ArgumentEncoder::create):
        * Platform/CoreIPC/ArgumentEncoder.h:
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::createSyncMessageArgumentEncoder):
        (CoreIPC::Connection::dispatchSyncMessage):
        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::send):
        (CoreIPC::Connection::sendSync):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::send):

2010-11-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        ASSERTION when converting some WKStringRefs returned from willSubmitForm to CFStringRef
        <rdar://problem/8662180>
        https://bugs.webkit.org/show_bug.cgi?id=49454

        Enforce the invariant that a WebString never contains a null WTF::String at a
        lower level, in the WebString constructor, instead of relying on the callers of
        WebString::create to do it.

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        (WebKit::toCopiedAPI): Remove null string check...

        * Shared/WebString.h:
        (WebKit::WebString::WebString): ... and move it to the constructor.

        * Shared/API/c/WKURL.cpp:
        (WKURLCopyString): Use toCopiedAPI() instead of calling WebString directly
        to match other similar uses.

2010-11-12  Andreas Kling  <kling@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt][WK2] Fix leaking of mapped files

        MappedMemory::fileName was never set on the receiving side, which led
        the MappedMemoryPool to call QFile::map() again when reusing an existing file.

        * Platform/qt/MappedMemoryPool.cpp:
        (WebKit::MappedMemoryPool::mapFile):

2010-11-12  Adam Roben  <aroben@apple.com>

        Windows build fix

        * win/WebKit2Generated.make: Copy WKBundlePageOverlay.h.

2010-11-12  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Unreviewed fix after r71857.

        * UIProcess/qt/WebInspectorProxyQt.cpp:
        * WebProcess/WebPage/qt/WebInspectorQt.cpp:

2010-11-11  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Add didReceiveResponse and didReceiveData to the download client
        https://bugs.webkit.org/show_bug.cgi?id=49418

        * UIProcess/API/C/WKContext.h:
        Add didReceiveResponse and didReceiveData to WKContextDownloadClient.

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didReceiveResponse):
        (WebKit::DownloadProxy::didReceiveData):
        Call WebDownloadClient member functions.

        * UIProcess/Downloads/DownloadProxy.messages.in:
        Add DidReceiveResponse and DidReceiveData messages.

        * UIProcess/WebDownloadClient.cpp:
        (WebKit::WebDownloadClient::didReceiveResponse):
        (WebKit::WebDownloadClient::didReceiveData):
        Call client functions.

        * WebKit2.xcodeproj/project.pbxproj:
        Let Xcode update the file.

        * WebProcess/Downloads/Download.cpp:
        (WebKit::Download::didReceiveResponse):
        (WebKit::Download::didReceiveData):
        Send messages.

        * WebProcess/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::start):
        Set deletesFileUponFailure to NO.

        (-[WKDownloadAsDelegate download:didReceiveResponse:]):
        Call didReceiveResponse.

2010-11-11  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add an argument coder for ResourceResponse.
        https://bugs.webkit.org/show_bug.cgi?id=49415

        * Shared/WebCoreArgumentCoders.h:
        * Shared/gtk/WebCoreArgumentCodersGtk.cpp:
        (CoreIPC::encodeResourceResponse):
        (CoreIPC::decodeResourceResponse):
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (CoreIPC::encodeResourceResponse):
        (CoreIPC::decodeResourceResponse):
        * Shared/qt/WebCoreArgumentCodersQt.cpp:
        (CoreIPC::encodeResourceResponse):
        (CoreIPC::decodeResourceResponse):
        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::encodeResourceResponse):
        (CoreIPC::decodeResourceResponse):

2010-11-11  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed build fix for r71587.

        * WebKit2.xcodeproj/project.pbxproj: No longer uses absolute path.

2010-11-11  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed WebKit2 buildfix after r71587.

        * UIProcess/qt/WebInspectorProxyQt.cpp:
        * WebKit2.pro:

2010-11-11  Brian Weinstein  <bweinstein@apple.com>

        More Windows build fixing. Change another #import to a #include, and remove an unneeded
        namespace.

        * UIProcess/win/WebInspectorProxyWin.cpp:
        * WebProcess/WebPage/win/WebInspectorWin.cpp:

2010-11-11  Brent Fulgham  <bfulgham@webkit.org>

        Windows [Cairo] build fix. Unreviewed.

        Provide stubs for two BackingStore methods.

        * Shared/cairo/BackingStoreCairo.cpp:
        (WebKit::BackingStore::createFlippedGraphicsContext):
        (WebKit::BackingStore::paint):

2010-11-11  Brian Weinstein  <bweinstein@apple.com>

        Windows Build Fix. Change #imports to #includes.

        * UIProcess/win/WebInspectorProxyWin.cpp:

2010-11-08  Timothy Hatcher  <timothy@apple.com>

        Create and load the Web Inspector page.

        https://webkit.org/b/49207

        Reviewed by Anders Carlsson.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::createInspectorPage): Added. Call platformCreateInspectorPage and then
        call WebPageProxy::loadURL with inspectorPageURL.
        (WebKit::WebInspectorProxy::didLoadInspectorPage): Added stub.
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.messages.in: Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage): Call WebInspectorProxy::didReceiveWebInspectorProxyMessage.
        (WebKit::WebPageProxy::didReceiveSyncMessage): Call WebInspectorProxy::didReceiveSyncWebInspectorProxyMessage.
        * UIProcess/WebPageProxy.h: Made creationParameters public so WebInspectorProxy can use it.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage): Make a WkView and return the WebPageProxy.
        (WebKit::WebInspectorProxy::inspectorPageURL): Return the file URL for the inspector.html file.
        * UIProcess/qt/WebInspectorProxyQt.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage): Added stub.
        (WebKit::WebInspectorProxy::inspectorPageURL): Ditto.
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage): Added stub.
        (WebKit::WebInspectorProxy::inspectorPageURL): Ditto.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::openInspectorFrontend): Call WebInspector::createInspectorPage and set up the WebInspectorFrontendClient.
        (WebKit::WebInspectorClient::sendMessageToFrontend): Call doDispatchMessageOnFrontendPage in the base class.
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        (WebKit::WebInspectorFrontendClient::frontendLoaded): Call WebInspector::didLoadInspectorPage.
        (WebKit::WebInspectorFrontendClient::localizedStringsURL): Call WebInspector::localizedStringsURL.
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.h:

        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::WebInspector):
        (WebKit::WebInspector::createInspectorPage): Send a sync WebInspectorProxy::CreateInspectorPage message and set up
        the WebPage using the result page ID.
        (WebKit::WebInspector::didLoadInspectorPage): Send a WebInspectorProxy::DidLoadInspectorPage message.
        * WebProcess/WebPage/WebInspector.h:
        (WebKit::WebInspector::inspectorPage): Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveMessage): Call WebInspector::didReceiveWebInspectorMessage.

        * WebProcess/WebPage/mac/WebInspectorMac.mm:
        (WebKit::WebInspector::localizedStringsURL): Return the file URL for the localizedStrings.js file.
        * WebProcess/WebPage/qt/WebInspectorQt.cpp:
        (WebKit::WebInspector::localizedStringsURL): Added stub.
        * WebProcess/WebPage/win/WebInspectorWin.cpp:
        (WebKit::WebInspector::localizedStringsURL): Added stub.

        * DerivedSources.make: Added WebInspectorProxy.messages.in.
        * DerivedSources.pro: Ditto.

        * WebKit2.pro: Added new files.
        * WebKit2.xcodeproj/project.pbxproj: Ditto.
        * win/WebKit2.vcproj: Ditto.

2010-11-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Move the remaining API client classes to use the APIClient base class.
        https://bugs.webkit.org/show_bug.cgi?id=49404

        Also moves InjectedBundleClient into its own class to match other API clients.

        * UIProcess/WebContextInjectedBundleClient.cpp:
        * UIProcess/WebContextInjectedBundleClient.h:
        * UIProcess/WebHistoryClient.cpp:
        (WebKit::WebHistoryClient::didNavigateWithNavigationData):
        (WebKit::WebHistoryClient::didPerformClientRedirect):
        (WebKit::WebHistoryClient::didPerformServerRedirect):
        (WebKit::WebHistoryClient::didUpdateHistoryTitle):
        (WebKit::WebHistoryClient::populateVisitedLinks):
        * UIProcess/WebHistoryClient.h:
        (WebKit::WebHistoryClient::shouldTrackVisitedLinks):
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::initializeClient):
        (WebKit::InjectedBundle::reportException):
        (WebKit::InjectedBundle::didCreatePage):
        (WebKit::InjectedBundle::willDestroyPage):
        (WebKit::InjectedBundle::didReceiveMessage):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/InjectedBundle/InjectedBundleClient.cpp: Added.
        (WebKit::InjectedBundleClient::didCreatePage):
        (WebKit::InjectedBundleClient::willDestroyPage):
        (WebKit::InjectedBundleClient::didReceiveMessage):
        * WebProcess/InjectedBundle/InjectedBundleClient.h: Added.
        * win/WebKit2.vcproj:

2010-11-11  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Remove an unneeded CFAllocatorRef parameter.

        * Shared/API/c/mac/WKURLResponseNS.h:
        * Shared/API/c/mac/WKURLResponseNS.mm:
        (WKURLResponseCopyNSURLResponse):

2010-11-11  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Add and implement WKDownloadCopyRequest
        https://bugs.webkit.org/show_bug.cgi?id=49393

        * Shared/API/c/mac/WKURLRequestNS.h:
        * Shared/API/c/mac/WKURLRequestNS.mm:
        (WKURLRequestCopyNSURLRequest):
        Remove unneeded CFAllocator parameter.

        * Shared/WebURLRequest.cpp:
        (WebKit::WebURLRequest::WebURLRequest):
        * Shared/WebURLRequest.h:
        (WebKit::WebURLRequest::create):
        Change create to take a ResourceRequest instead.

        * UIProcess/API/C/WKDownload.cpp:
        (WKDownloadCopyRequest):
        Return a copied WKURLRequest.

        * UIProcess/API/C/WKDownload.h:
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didStart):
        Set the request.

        * UIProcess/Downloads/DownloadProxy.h:
        (WebKit::DownloadProxy::request):
        Return the request.

        * UIProcess/Downloads/DownloadProxy.messages.in:
        * WebProcess/Downloads/Download.cpp:
        (WebKit::Download::didStart):
        Pass the request along when sending the DidStart message.

2010-11-11  John Sullivan  <sullivan@apple.com>

        Rubber-stamped by Anders Carlsson.

        * WebKit2.xcodeproj/project.pbxproj:
        Added WKBundlePageOverlay.h to the WebKit2 Target and made it public.

2010-11-11  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Move GraphicsContext setup code to PageOverlay::drawRect
        https://bugs.webkit.org/show_bug.cgi?id=49389

        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.h:
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::drawRect):
        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::drawRect):

2010-11-11  Adam Roben  <aroben@apple.com>

        Build fix after r71816

        * WebProcess/WebPage/WebPage.messages.in: Compile out
        SetActualVisibleContentRect when ENABLE(TILED_BACKING_STORE) is
        turned off.

2010-11-11  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] Implement BackingStore
        https://bugs.webkit.org/show_bug.cgi?id=49377

        * Shared/qt/BackingStoreQt.cpp:
        (WebKit::createQImage): Added static helper. Creates a QImage
        from the shared memory buffer.
        (WebKit::BackingStore::createGraphicsContext):
        (WebKit::BackingStore::createFlippedGraphicsContext): Leave
        unimplemented with an ASSERT_NOT_REACHED since this is only
        needed for the CoreGraphics backend.
        (WebKit::BackingStore::paint):

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

        Reviewed by Andreas Kling.

        [Qt] Add a Qt WebKit2 API for overriding the actual visible content rect
        https://bugs.webkit.org/show_bug.cgi?id=49381

        Add an Qt WebKit2 API for overriding the actual visible content rect in
        WebCore. This is supposed to be used in combination with tiling.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::setActualVisibleContentsRect):
        * UIProcess/API/qt/qwkpage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setActualVisibleContentRect):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setActualVisibleContentRect):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

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

        Reviewed by Simon Fraser.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=49356 
        -[WebView _scaleWebView:] should take and origin and scroll the 
        document
        -and corresponding-
        <rdar://problem/8643921>

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toImpl):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageScaleWebView):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::scaleWebView):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scaleWebView):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2010-11-10  Ada Chan  <adachan@apple.com>
        
        Fix Windows build.

        * win/WebKit2Generated.make:

2010-11-10  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Misc drawing area cleanup
        https://bugs.webkit.org/show_bug.cgi?id=49349
        
        * UIProcess/LayerBackedDrawingAreaProxy.cpp:
        (WebKit::LayerBackedDrawingAreaProxy::setSize):
        (WebKit::LayerBackedDrawingAreaProxy::setPageIsVisible):
        (WebKit::LayerBackedDrawingAreaProxy::update):
        Call process()->send() instead of process()->connection()->send() in case
        the web process has not been launched yet.
        
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Delay creation of the drawing area
        until after other WebPage state has been initialized, in case
        the DrawingArea creation needs to call back to the WebPage.

2010-11-10  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adam Roben.

        Push m_viewSize down to DrawingAreaProxy base class
        https://bugs.webkit.org/show_bug.cgi?id=49347
        
        Some refactoring so that the various drawing area classes
        can share m_size.

        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::setSize):
        * UIProcess/ChunkedUpdateDrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::setSize):
        (WebKit::DrawingAreaProxy::size):
        * UIProcess/LayerBackedDrawingAreaProxy.cpp:
        (WebKit::LayerBackedDrawingAreaProxy::setSize):
        * UIProcess/LayerBackedDrawingAreaProxy.h:
        * UIProcess/mac/ChunkedUpdateDrawingAreaProxyMac.mm:
        (WebKit::ChunkedUpdateDrawingAreaProxy::ensureBackingStore):
        (WebKit::ChunkedUpdateDrawingAreaProxy::drawUpdateChunkIntoBackingStore):
        * UIProcess/mac/LayerBackedDrawingAreaProxyMac.mm:
        (WebKit::LayerBackedDrawingAreaProxy::platformSetSize):
        (WebKit::LayerBackedDrawingAreaProxy::attachCompositingContext):
        * UIProcess/win/ChunkedUpdateDrawingAreaProxyWin.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::ensureBackingStore):
        * UIProcess/qt/ChunkedUpdateDrawingAreaProxyQt.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::ensureBackingStore):

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

        Reviewed by Dan Bernstein.

        Closing tabs sometimes crashes the WebProcess in invalidateContentsAndWindow
        https://bugs.webkit.org/show_bug.cgi?id=49335
        <rdar://problem/8646621>

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::changeAcceleratedCompositingMode):
        If we fail to send the DidChangeAcceleratedCompositing message, don't null out the
        drawing area. This will happen during page teardown.

2010-11-10  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by David Hyatt.

        HTML5 Ruby support should be mandatory feature
        https://bugs.webkit.org/show_bug.cgi?id=49272

        Remove Ruby as optional feature.

        * Configurations/FeatureDefines.xcconfig:
        * WebKit2Prefix.h: Touch it to avoid incremental build failure on Windows.

2010-11-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add license to DerivedSources.make.

        * DerivedSources.make:

2010-11-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Convert client classes to use APIClient base class.
        https://bugs.webkit.org/show_bug.cgi?id=49322

        * UIProcess/WebFormClient.cpp:
        (WebKit::WebFormClient::willSubmitForm):
        * UIProcess/WebFormClient.h:
        * UIProcess/WebLoaderClient.cpp:
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebPolicyClient.cpp:
        * UIProcess/WebPolicyClient.h:
        * UIProcess/WebUIClient.cpp:
        * UIProcess/WebUIClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:

2010-11-10  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Fix re-use of memory-mapped files
        https://bugs.webkit.org/show_bug.cgi?id=49310

        QTemporaryFile::fileName() returns an empty string after close()
        so we have to keep separate track of the filename.

        Also, we can't reopen the file if it's been QFile::remove()d,
        so we defer unlinking until the MappedMemoryPool is destroyed or
        the CrashHandler kicks in.

        This makes re-use of memory-mapped files work (after we kill an
        assertion that the file size == the new mmap size - it's fine if
        the file is larger, too.)

        * Platform/qt/MappedMemoryPool.cpp:
        (WebKit::MappedMemoryPool::~MappedMemoryPool):
        (WebKit::MappedMemoryPool::clear):
        (WebKit::MappedMemoryPool::mapMemory):
        (WebKit::MappedMemoryPool::mapFile):
        * Platform/qt/MappedMemoryPool.h:
        (WebKit::MappedMemory::mappedFileName):
        * Shared/qt/CrashHandler.cpp:
        (WebKit::CrashHandler::deleteObjects):
        * Shared/qt/UpdateChunk.cpp:
        (WebKit::UpdateChunk::encode):

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

        Reviewed by the ever-picky Windows build-bot.

        Windows build bot was complaining about this.

        * Shared/WebContextMenuItemData.cpp:
        (WebKit::WebContextMenuItemData::core):

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

        Reviewed by John Sullivan.

        WKDownload.h should be a public header.

        * WebKit2.xcodeproj/project.pbxproj:

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

        Reviewed by Darin Adler.

        Part of <rdar://problem/8613727> and https://bugs.webkit.org/show_bug.cgi?id=48720
        Customizable context menu support in WebKit2.

        This adds a BundlePageContextMenu client and lets WebKit2 consult it with the proposed
        list of WebContextMenuItems.
        There is no realistic API for the embedding app to actually inspect or create new
        WebContextMenuItems (will be "WKContextMenuItem") and that ability will come later.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

        * Platform/Logging.cpp:
        (initializeLogChannelsIfNecessary):
        * Platform/Logging.h:

        * Shared/APIObject.h:

        * Shared/MutableArray.cpp:
        (WebKit::MutableArray::reserveCapacity):
        * Shared/MutableArray.h:

        * Shared/WebContextMenuItem.cpp: Added.
        (WebKit::WebContextMenuItem::WebContextMenuItem):
        (WebKit::WebContextMenuItem::data):
        * Shared/WebContextMenuItem.h: Added.
        (WebKit::WebContextMenuItem::create):
        (WebKit::WebContextMenuItem::type):

        * Shared/WebContextMenuItemData.cpp:
        (WebKit::WebContextMenuItemData::core):
        (WebKit::kitItems):
        (WebKit::coreItems):
        * Shared/WebContextMenuItemData.h:

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

        * WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.cpp: Added.
        (WebKit::InjectedBundlePageContextMenuClient::InjectedBundlePageContextMenuClient):
        (WebKit::InjectedBundlePageContextMenuClient::initialize):
        (WebKit::InjectedBundlePageContextMenuClient::getCustomMenuFromDefaultItems):
        * WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.h: Added.

        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::getCustomMenuFromDefaultItems): Call through to the injected bundle client
          with the default items and convert the returned items back for WebCore to use.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::initializeInjectedBundleContextMenuClient):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::injectedBundleContextMenuClient):

2010-11-09  Sam Weinig  <sam@webkit.org>

        Add some stylistic flourish to the last patch as suggested by Lord Darin Adler.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetSourceForFrame):
        (WKPageGetContentsAsString):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::invalidateCallbackMap):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::contentsAsString):

2010-11-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Need WebKit2 mechanism for getting the visible page text
        <rdar://problem/8646928>
        https://bugs.webkit.org/show_bug.cgi?id=49275

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetContentsAsString):
        (callContentsAsStringBlockBlockAndDispose):
        (WKPageGetContentsAsString_b):
        * UIProcess/API/C/WKPage.h:
        Add GetContentsAsString callback function declaration and forwarding.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::invalidateCallbackMap):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::getContentsAsString):
        (WebKit::WebPageProxy::didGetContentsAsString):
        (WebKit::WebPageProxy::processDidCrash):
        * UIProcess/WebPageProxy.h:
        Add GetContentsAsString callback and generalize invalidating the callback
        maps into a standalone function.

        * UIProcess/WebPageProxy.messages.in:
        Add DidGetContentsAsString return message.

        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::contentsAsString):
        Gets the string content of all the subframes.

        (WebKit::WebFrame::isFrameSet):
        Call through to the document.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::getContentsAsString):
        Forward to the the main frames contentsAsString function.

        * WebProcess/WebPage/WebPage.messages.in:
        Add GetContentsAsString and collect all callback messages together.

2010-11-09  Sam Weinig  <sam@webkit.org>

        Fix mac build.

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformSetCacheModel):

2010-11-09  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler, Dan Bernstein.

        <rdar://problem/8360145> Pages using accelerated compositing missing content on Windows

        Disable accelerated compositing on Windows until we have cross-process
        rendering implemented.

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

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

        Reviewed by Sam Weinig.

        Add injected bundle API for creating page overlays
        https://bugs.webkit.org/show_bug.cgi?id=49282

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

        * Shared/APIObject.h:
        Add TypeBundlePageOverlay.

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

        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        Add WKBundlePageOverlayRef mapping.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageInstallPageOverlay):
        Install the passed in page overlay.

        (WKBundlePageUninstallPageOverlay):
        Uninstall the passed in page overlay.

        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: Added.
        (PageOverlayClientImpl::create):
        (PageOverlayClientImpl::PageOverlayClientImpl):
        (PageOverlayClientImpl::pageOverlayDestroyed):
        (PageOverlayClientImpl::willMoveToWebPage):
        (PageOverlayClientImpl::didMoveToWebPage):
        (PageOverlayClientImpl::drawRect):
        (PageOverlayClientImpl::mouseEvent):
        Add a PageOverlay::Client subclass that forwards everything to its client.

        (WKBundlePageOverlayGetTypeID):
        (WKBundlePageOverlayCreate):
        Create a page overlay.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::pageOverlayDestroyed):
        * WebProcess/WebPage/FindController.h:
        Add stub.

        * WebProcess/WebPage/PageOverlay.h:
        Inherit from APIObject.

        (WebKit::PageOverlay::type):
        return TypeBundlePageOverlay.

        * win/WebKit2.vcproj:
        Add new files.

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

        Reviewed by Sam Weinig.

        Get rid of FindPageOverlay
        https://bugs.webkit.org/show_bug.cgi?id=49268

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        Remove files.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::findString):
        Create a PageOverlay with the FindController as its client.

        (WebKit::FindController::willMoveToWebPage):
        Null out the find page overlay if the web page is null.

        (WebKit::FindController::didMoveToWebPage):
        Add stub.

        * WebProcess/WebPage/FindController.h:
        FindController is now a PageOverlay::Client.

        * WebProcess/WebPage/FindPageOverlay.cpp: Removed.
        * WebProcess/WebPage/FindPageOverlay.h: Removed.
        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::setPage):
        Call the willMoveToWebPage and didMoveToWebPage client functions.

        (WebKit::PageOverlay::setNeedsDisplay):
        Pass the page overlay bounds instead of the web page size.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::installPageOverlay):
        Clear the page of the previous page overlay.

        (WebKit::WebPage::uninstallPageOverlay):
        Clear the page of the previous page overlay.

        * WebProcess/WebPage/WebPage.h:
        The page overlay is now refcounted.

        * win/WebKit2.vcproj:
        Remove files.

2010-11-09  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformSetCacheModel):

2010-11-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Factor calculation of cache sizes based on cache model into shared function
        https://bugs.webkit.org/show_bug.cgi?id=48706

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::calculateCacheSizes):
        * WebProcess/WebProcess.h:
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::volumeFreeSize):
        (WebKit::WebProcess::platformSetCacheModel):
        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::memorySize):
        (WebKit::volumeFreeSize):
        (WebKit::WebProcess::platformSetCacheModel):

2010-11-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Context menus show up in the wrong place when the page is scrolled
        https://bugs.webkit.org/show_bug.cgi?id=49264

        Convert the hitTestResult point into 'window' coordinates before sending over
        to the UIProcess to show the menu.

        * WebProcess/WebPage/WebContextMenu.cpp:
        (WebKit::WebContextMenu::show):
        Convert to use message sender interface.

        (WebKit::WebContextMenu::itemSelected):
        Remove unnecessary WebCore::'s.

2010-11-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Send messages directly to the WebContext
        https://bugs.webkit.org/show_bug.cgi?id=49262

        * Platform/CoreIPC/MessageID.h:
        Temporarily add MessageClassWebContextLegacy.

        * Shared/CoreIPCSupport/WebContextMessageKinds.h:
        Rename adding Legacy prefix.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::didNavigateWithNavigationData):
        (WebKit::WebContext::didPerformClientRedirect):
        (WebKit::WebContext::didPerformServerRedirect):
        (WebKit::WebContext::didUpdateHistoryTitle):
        (WebKit::WebContext::setCacheModel):
        (WebKit::WebContext::addVisitedLink):
        (WebKit::WebContext::addVisitedLinkHash):
        (WebKit::WebContext::getPlugins):
        (WebKit::WebContext::getPluginPath):
        (WebKit::WebContext::didReceiveMessage):
        (WebKit::WebContext::didReceiveSyncMessage):
        * UIProcess/WebContext.h:
        * UIProcess/WebContext.messages.in: Added.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPluginProcessConnection):
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::postMessage):
        (WebKit::InjectedBundle::postSynchronousMessage):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::updateGlobalHistory):
        (WebKit::WebFrameLoaderClient::updateGlobalHistoryRedirectLinks):
        (WebKit::WebFrameLoaderClient::setTitle):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::populatePluginCache):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::addVisitedLink):
        Move context related messages to be sent directly to the context.

        * DerivedSources.make:
        * DerivedSources.pro:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Add new files.

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

        Reviewed by John Sullivan.

        Move the find page overlay code to FindController
        https://bugs.webkit.org/show_bug.cgi?id=49266

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::~FindController):
        (WebKit::FindController::rectsForTextMatches):
        (WebKit::overlayBackgroundColor):
        (WebKit::FindController::drawRect):
        (WebKit::FindController::mouseEvent):
        * WebProcess/WebPage/FindController.h:
        * WebProcess/WebPage/FindPageOverlay.cpp:
        (WebKit::FindPageOverlay::drawRect):
        (WebKit::FindPageOverlay::mouseEvent):
        * WebProcess/WebPage/FindPageOverlay.h:
        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::bounds):
        (WebKit::PageOverlay::drawRect):
        (WebKit::PageOverlay::mouseEvent):
        * WebProcess/WebPage/PageOverlay.h:

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

        Reviewed by John Sullivan.

        Add a PageOverlay::Client object in preparation of not allowing subclassing of PageOverlay
        https://bugs.webkit.org/show_bug.cgi?id=49263

        * WebProcess/WebPage/FindPageOverlay.cpp:
        (WebKit::FindPageOverlay::FindPageOverlay):
        Call the PageOverlay constructor.

        (WebKit::FindPageOverlay::drawRect):
        (WebKit::FindPageOverlay::mouseEvent):
        These now take a PageOverlay callback.

        * WebProcess/WebPage/FindPageOverlay.h:
        FindPageOverlay now inherits from PageOverlay::Client.

        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::create):
        Add create function.

        (WebKit::PageOverlay::PageOverlay):
        The constructor now takes a client.

        (WebKit::PageOverlay::drawRect):
        (WebKit::PageOverlay::mouseEvent):
        Call the client methods.

        * WebProcess/WebPage/PageOverlay.h:
        Add Client class.

2010-11-09  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Darin Adler.

        <rdar://problem/8646456> WebProcess crashes reproducibly on complex text

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Initialize wkCreateCTTypesetterWithUniCharProviderAndOptions
        and wkCreateCTLineWithUniCharProvider.

2010-11-09  Sam Weinig  <sam@webkit.org>

        Fix Windows build.

        * win/WebKit2.vcproj:

2010-11-09  Sam Weinig  <sam@webkit.org>

        Fix Qt build.

        * WebKit2.pro:

2010-11-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Windows Popup widget support (<select>)
        <rdar://problem/8559439>
        https://bugs.webkit.org/show_bug.cgi?id=48701

        Port WebCore's PopupMenuWin's implementation to work within the confines of WebKit2.
        Since we currently can't draw text using WebCore in the UIProcess, this approach uses
        the WebProcess to create two bitmaps representing the full popup menu (both unselected and 
        selected) and sends them to the UIProcess to be drawn in an HWND.

        * Shared/BackingStore.h:
        * Shared/cg/BackingStoreCG.cpp:
        * Shared/qt/BackingStoreQt.cpp:

        Add new function to create a flipped graphics context from the backing store, 
        and add additional parameters to paint, to allow more control of how the backing
        store is painted into the destination context.

        * Shared/PlatformPopupMenuData.cpp: Added.
        (WebKit::PlatformPopupMenuData::PlatformPopupMenuData):
        (WebKit::PlatformPopupMenuData::encode):
        (WebKit::PlatformPopupMenuData::decode):
        * Shared/PlatformPopupMenuData.h: Added.
        Add struct so platforms can send platform specific data to their popup menu implementations.

        * Shared/WebPopupItem.cpp:
        (WebKit::WebPopupItem::WebPopupItem):
        (WebKit::WebPopupItem::encode):
        (WebKit::WebPopupItem::decode):
        * Shared/WebPopupItem.h:
        Add isLabel for each menu item.

        * UIProcess/FindIndicator.cpp:
        (WebKit::FindIndicator::draw):
        Update for new BackingStore::paint signature.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showPopupMenu):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebPopupMenuProxy.h:
        * UIProcess/mac/WebPopupMenuProxyMac.h:
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::showPopupMenu):
        * UIProcess/qt/WebPopupMenuProxyQt.cpp:
        (WebKit::WebPopupMenuProxyQt::showPopupMenu):
        * UIProcess/qt/WebPopupMenuProxyQt.h:
        Pass through the new PlatformPopupMenuData.

        * UIProcess/win/WebPopupMenuProxyWin.cpp:
        * UIProcess/win/WebPopupMenuProxyWin.h:
        Port implementation from WebCore.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::createPopupMenuProxy):
        Pass the WebView to the WebPopupMenuProxyWin.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::paint):
        (WebKit::PluginProxy::update):
        Update for new BackingStore::paint signature.

        * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
        (WebKit::WebPopupMenu::populateItems): Add isLabel for each item.
        (WebKit::WebPopupMenu::show): Give each platform a chance to add platform specific data.
        * WebProcess/WebCoreSupport/WebPopupMenu.h:

        * WebProcess/WebCoreSupport/mac/WebPopupMenuMac.mm: Added.
        (WebKit::WebPopupMenu::setUpPlatformData):
        * WebProcess/WebCoreSupport/qt/WebPopupMenuQt.cpp: Added.
        (WebKit::WebPopupMenu::setUpPlatformData):
        Add stubbed out setUpPlatformData.

        * WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp: Added.
        (WebKit::WebPopupMenu::setUpPlatformData):
        Compute data needed in the UIProcess including generating the bitmaps.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Add new files.

2010-11-09  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt][WK2] ASSERT fail in fast/frames/lots-of-objects.html
        https://bugs.webkit.org/show_bug.cgi?id=49253

        * Platform/qt/SharedMemoryQt.cpp:
        (WebKit::SharedMemory::create): Do not assert
        when the attach was unsuccessful but return with 0.

2010-11-09  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] WebKitTestRunner is dead
        https://bugs.webkit.org/show_bug.cgi?id=49129

        * Platform/qt/SharedMemoryQt.cpp:
        (WebKit::SharedMemory::~SharedMemory):
        Follow up fix: do not access the QSharedMemory object
        in an assert if it has been deleted.

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

        Reviewed by Andreas Kling.

        Send page scroll requests to the PageClient when scroll delegation is turned on
        https://bugs.webkit.org/show_bug.cgi?id=49171

        Implement the IPC and API required for making scroll delegation work
        with WebKit2. This is only used when you have tiling enabled.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::pageDidRequestScroll):
        * UIProcess/API/qt/qwkpage.h:
        * 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/WebPage/WebPage.cpp:
        (WebKit::WebPage::pageDidRequestScroll):
        * WebProcess/WebPage/WebPage.h:

2010-11-08  Ivan Krstić  <ike@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/8531943> Enable partial symbolication for sandbox violations in WebProcess.

        * WebProcess/com.apple.WebProcess.sb:

2010-11-08  Juha Savolainen  <juha.savolainen@weego.fi>

        Reviewed by Andreas Kling.

        [Qt] Added new methods to QWKHistory and made QWKHistoryItemPrivate to shared object.
        https://bugs.webkit.org/show_bug.cgi?id=49063

        Added more functionality to the QWKHistory and changed QWKHistoryItemPrivate to shared object.
        This is needed because we cannot delete the QWKHistoryItemPrivate pointer in destructor of QWKHistoryItem,
        there may have other history instances which share same private implementation.

        * UIProcess/API/qt/qwkhistory.cpp:
        (QWKHistoryItemPrivate::~QWKHistoryItemPrivate):
        (QWKHistoryItem::QWKHistoryItem):
        (QWKHistoryItem::QWKHistoryItem::operator=):
        (QWKHistory::currentItem): Added
        (QWKHistory::backItem): Added
        (QWKHistory::forwardItem): Added
        (QWKHistory::itemAt): Added
        (QWKHistory::backItems): Added
        (QWKHistory::forwardItems): Added
        * UIProcess/API/qt/qwkhistory.h:
        * UIProcess/API/qt/qwkhistory_p.h:

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

        Reviewed by Dan Bernstein.

        Add WKDownloadClient API
        https://bugs.webkit.org/show_bug.cgi?id=49227

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

        * UIProcess/API/C/WKAPICast.h:
        Add WKDownloadRef <-> DownloadProxy mapping.
        
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetDownloadClient):
        Initialize the download client.

        * UIProcess/API/C/WKContext.h:
        Add new WKContextDownloadClient API.
        
        * UIProcess/API/C/WKDownload.cpp: Added.
        * UIProcess/API/C/WKDownload.h:
        Add WKDownload files.

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didStart):
        (WebKit::DownloadProxy::didCreateDestination):
        (WebKit::DownloadProxy::didFinish):
        Call down to the the WebDownloadClient.
        
        * UIProcess/Downloads/DownloadProxy.messages.in:
        Rename DidBegin to DidStart.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::initializeDownloadClient):
        Initialize the download client.

        * UIProcess/WebContext.h:
        (WebKit::WebContext::downloadClient):
        Add getter.

        * UIProcess/WebDownloadClient.cpp:
        (WebKit::WebDownloadClient::didStart):
        (WebKit::WebDownloadClient::didCreateDestination):
        (WebKit::WebDownloadClient::didFinish):
        Call the relevant WKContextDownloadClient functions.

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

        * WebProcess/Downloads/Download.cpp:
        (WebKit::Download::didStart):
        * WebProcess/Downloads/Download.h:
        * WebProcess/Downloads/mac/DownloadMac.mm:
        (-[WKDownloadAsDelegate downloadDidBegin:]):
        Rename Download::didBegin to Download::didStart.

        * win/WebKit2.vcproj:
        Add new files.

2010-11-08  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        Part of https://bugs.webkit.org/show_bug.cgi?id=49222
        Rename "WebContextMenuItem" to "WebContextMenuItemData"

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

        * Shared/WebContextMenuItem.cpp: Removed.
        * Shared/WebContextMenuItem.h: Removed.
        * Shared/WebContextMenuItemData.cpp: Copied from Shared/WebContextMenuItem.cpp.
        (WebKit::WebContextMenuItemData::WebContextMenuItemData):
        (WebKit::WebContextMenuItemData::encode):
        (WebKit::WebContextMenuItemData::decode):
        (WebKit::kitItems):
        * Shared/WebContextMenuItemData.h: Copied from Shared/WebContextMenuItem.h.
        (WebKit::WebContextMenuItemData::submenu):

        * UIProcess/WebContextMenuProxy.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showContextMenu):
        (WebKit::WebPageProxy::contextMenuItemSelected):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (-[WebMenuTarget forwardContextMenuAction:]):
        (WebKit::WebContextMenuProxyMac::contextMenuItemSelected):
        (WebKit::nsMenuItemVector):
        (WebKit::WebContextMenuProxyMac::populate):
        (WebKit::WebContextMenuProxyMac::showContextMenu):

        * UIProcess/qt/WebContextMenuProxyQt.cpp:
        (WebKit::WebContextMenuProxyQt::showContextMenu):
        * UIProcess/qt/WebContextMenuProxyQt.h:

        * UIProcess/win/WebContextMenuProxyWin.cpp:
        (WebKit::WebContextMenuProxyWin::showContextMenu):
        * UIProcess/win/WebContextMenuProxyWin.h:

        * WebProcess/WebPage/WebContextMenu.cpp:
        (WebKit::WebContextMenu::itemSelected):
        * WebProcess/WebPage/WebContextMenu.h:

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didSelectItemFromActiveContextMenu):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

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

        Reviewed by John Sullivan and Dan Bernstein.

        Find in Page: scrolling the page with the scrollbar while overlay is up dismisses the overlay
        https://bugs.webkit.org/show_bug.cgi?id=49219
        <rdar://problem/8569550>

        * WebProcess/WebPage/FindPageOverlay.cpp:
        (WebKit::FindPageOverlay::bounds):
        Return the bounds of the find page overlay, excluding any scrollbars.

        (WebKit::FindPageOverlay::drawRect):
        Call bounds.

        (WebKit::FindPageOverlay::mouseEvent):
        Only dismiss the find UI if the mouse down event happens inside the overlay bounds.

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

        Reviewed by Adam Roben.

        Add the ability to send messages to DownloadProxy objects
        https://bugs.webkit.org/show_bug.cgi?id=49213

        * DerivedSources.make:
        * DerivedSources.pro:
        Add Download.messages.in.

        * Platform/CoreIPC/MessageID.h:
        Add MessageClassDownloadProxy message class.

        * Platform/CoreIPC/MessageSender.h:
        Include Connection.h directly since it's required.

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didBegin):
        (WebKit::DownloadProxy::didCreateDestination):
        (WebKit::DownloadProxy::didFinish):
        Add stubs.

        * UIProcess/Downloads/DownloadProxy.messages.in: Added.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::didReceiveMessage):
        Handle DownloadProxy messages.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        Hand DownloadProxy messages off to the context.

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

        * WebProcess/Downloads/Download.cpp:
        (WebKit::Download::didBegin):
        (WebKit::Download::didReceiveData):
        (WebKit::Download::didCreateDestination):
        (WebKit::Download::didFinish):
        Send messages.

        * WebProcess/Downloads/mac/DownloadMac.mm:
        (-[WKDownloadAsDelegate download:didCreateDestination:]):
        Call Download::didCreateDestination.

        * win/WebKit2.vcproj:
        Add new files.

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

        Reviewed by Adam Roben.

        Add DownloadProxy object
        https://bugs.webkit.org/show_bug.cgi?id=49211

        DownloadProxy will be the implementation of the forthcoming WKDownloadRef object.

        * Shared/APIObject.h:
        Add TypeDownload.

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::generateDownloadID):
        Generate a unique download ID.

        (WebKit::DownloadProxy::invalidate):
        Null out the web context.

        * UIProcess/Downloads/DownloadProxy.h:
        (WebKit::WebContext::processDidClose):
        Invalidate all downloads.

        (WebKit::WebContext::createDownloadProxy):
        Create a WebDownload object.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        Call createDownloadProxy instead.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Add new files.

        * win/WebKit2Common.vsprops:
        Add new include path.

2010-11-08  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=49201
        Crash when closing a page

        Handle null frame by passing a 0 frame id (normal ones start from 1).

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::focusedFrameChanged):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::focusedFrameChanged):

2010-11-08  Nate Chapin  <japhet@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Function call update for 
        https://bugs.webkit.org/show_bug.cgi?id=27165.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::Stream::start):

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

        Reviewed by Adam Roben.

        NPClass::construct and NPClass::invokeDefault never called with out-of-process plug-ins in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=49198

        * Shared/Plugins/NPObjectMessageReceiver.cpp:
        (WebKit::NPObjectMessageReceiver::invokeDefault):
        Call NPClass::invokeDefault.

        (WebKit::NPObjectMessageReceiver::construct):
        Call NPClass::construct
        
        * Shared/Plugins/NPObjectMessageReceiver.messages.in:
        Add InvokeDefault and Construct messages.

        * Shared/Plugins/NPObjectProxy.cpp:
        (WebKit::NPObjectProxy::invokeDefault):
        Send the InvokeDefault message.

        (WebKit::NPObjectProxy::construct):
        Send the Construct message.

        (WebKit::NPObjectProxy::NP_InvokeDefault):
        Call NPObjectProxy::invokeDefault.

        (WebKit::NPObjectProxy::NP_Construct):
        Call NPObjectProxy::construct.

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

        Reviewed by Dan Bernstein.

        Plug-in views should not assume that plugins are RenderEmbeddedObjects
        https://bugs.webkit.org/show_bug.cgi?id=49196
        <rdar://problem/8638467>

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

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

        Reviewed by Adam Roben.

        NPN_Evaluate doesn't work with out-of-process plugins in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=49193

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::evaluate):
        Send an Evaluate message.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::evaluate):
        Call Evaluate on the plug-in proxy.

        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginProxy.messages.in:
        Add Evaluate message.

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

        Reviewed by John Sullivan.

        Correctly convert NPObjectProxy to NPVariantData
        https://bugs.webkit.org/show_bug.cgi?id=49190

        * Shared/Plugins/NPObjectMessageReceiver.h:
        (WebKit::NPObjectMessageReceiver::npObject):
        Add NPObject getter.

        * Shared/Plugins/NPObjectProxy.h:
        (WebKit::NPObjectProxy::npObjectID):
        Add NPObjectID getter.

        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::npVariantToNPVariantData):
        Handle the case where the NPObject is an NPObjectProxy.

        (WebKit::NPRemoteObjectMap::npVariantDataToNPVariant):
        Handle NPVariantData::LocalNPObjectID.

        * Shared/Plugins/NPVariantData.cpp:
        (WebKit::NPVariantData::makeRemoteNPObjectID):
        * Shared/Plugins/NPVariantData.h:
        New function for creating an NPVariantData that contains a remote NPObject ID.

2010-11-08  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=48685
        Notify UI process about focused frame

        Handle notifications, store the current one in WebPageProxy in UI process.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetFocusedFrame):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::focusedFrameChanged):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::focusedFrame):
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::focusedFrameChanged):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

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

        Reviewed by Eric Seidel.

        Rename Cache to MemoryCache
        https://bugs.webkit.org/show_bug.cgi?id=49159

        * WebProcess/WebProcess.cpp:
        * WebProcess/mac/WebProcessMac.mm:
        * WebProcess/win/WebProcessWin.cpp:

2010-11-06  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] WebKitTestRunner is dead
        https://bugs.webkit.org/show_bug.cgi?id=49129

        * Platform/qt/SharedMemoryQt.cpp:
        (WebKit::SharedMemory::~SharedMemory):
        Avoid double deletion when deleteLater has
        already been called.

2010-11-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        suspendAnimations/resumeAnimations not present in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=49109

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameSuspendAnimations):
        (WKBundleFrameResumeAnimations):
        * WebProcess/InjectedBundle/API/c/WKBundleFramePrivate.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::suspendAnimations):
        (WebKit::WebFrame::resumeAnimations):
        * WebProcess/WebPage/WebFrame.h:

2010-11-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        WebProcess won't kill itself if UIProcess goes away while WebProcess is spinning
        https://bugs.webkit.org/show_bug.cgi?id=49090
        <rdar://problem/7834575>

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::connectionDidClose):
        Call Client::didCloseOnConnectionWorkQueue.

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::Client::didCloseOnConnectionWorkQueue):
        Add new client function. Will be called on the connection work queue when the connection is closed.

        * Platform/WorkItem.h:
        (FunctionWorkItem0::FunctionWorkItem0):
        (FunctionWorkItem0::execute):
        (WorkItem::create):
        Add a new WorkItem subclass that will invoke a C function.

        * Platform/WorkQueue.h:
        * Platform/mac/WorkQueueMac.cpp:
        (WorkQueue::scheduleWorkAfterDelay):
        New function which will schedule the given work item to be executed in at least 'delay' seconds.

        * Platform/qt/WorkQueueQt.cpp:
        (WorkQueue::scheduleWorkAfterDelay):
        Add empty stub.
        
        * Platform/win/WorkQueueWin.cpp:
        (WorkQueue::scheduleWorkAfterDelay):
        Ditto.

        * PluginProcess/PluginProcess.h:
        Derive from ChildProcess.

        * Shared/ChildProcess.cpp: Added.
        (WebKit::ChildProcess::ChildProcess):
        (WebKit::ChildProcess::~ChildProcess):
        (WebKit::watchdogCallback):
        Call _exit.

        (WebKit::ChildProcess::didCloseOnConnectionWorkQueue):
        When the connection is closed, schedule a work item to be run in 10 seconds. If the process hasn't
        exited normally by then, we'll exit.

        * Shared/ChildProcess.h: 
        Add new ChildProcess class which is a common base class of WebProcess and PluginProcess and which contains
        the watchdog timer logic.

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

        * WebProcess/WebProcess.h:
        Derive from ChildProcess.

        * win/WebKit2.vcproj:
        Add new files.

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

        Implement PluginInfoStore::shouldUsePlugin on Windows

        Fixes <http://webkit.org/b/43509> <rdar://problem/8273822> WebKit2
        should refuse to load the same plugins that old-WebKit refuses to load

        Reviewed by Anders Carlsson.

        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        (WebKit::fileVersion): Helper function to construct a 64-bit file
        version from two 32-bit numbers.
        (WebKit::PluginInfoStore::getPluginInfo): Ported code from
        WebCore::PluginPackage::fetchInfo to get the plugin's version. We now
        store it in Plugin::fileVersion.

        (WebKit::isOldWindowsMediaPlayerPlugin):
        (WebKit::isNewWindowsMediaPlayerPlugin):
        Added these helpers. The code came from
        WebCore::PluginDatabase::getPluginPathsInDirectories.

        (WebKit::PluginInfoStore::shouldUsePlugin): Implemented. The code was
        ported from WebCore::PluginDatabase::getPluginPathsInDirectories and
        WebCore::PluginPackage::isPluginBlacklisted.

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

        Operate on m_plugins directly in PluginInfoStore::shouldUsePlugin

        We'll need to operate on m_plugins if we ever want to unload an
        already-loaded plugin before loading the new one.

        Fixes <http://webkit.org/b/49076> loadedPlugins parameter to
        PluginInfoStore::shouldUsePlugin is redundant

        Reviewed by Anders Carlsson.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::loadPlugin):
        * UIProcess/Plugins/PluginInfoStore.h:
        * UIProcess/Plugins/gtk/PluginInfoStoreGtk.cpp:
        (WebKit::PluginInfoStore::shouldUsePlugin):
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::shouldUsePlugin):
        * UIProcess/Plugins/qt/PluginInfoStoreQt.cpp:
        (WebKit::PluginInfoStore::shouldUsePlugin):
        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        (WebKit::PluginInfoStore::shouldUsePlugin):
        Removed the loadedPlugins parameter from shouldUsePlugin. The single
        implementation (Mac) now uses m_plugins directly.

2010-11-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Implement pluginElementNPObject
        https://bugs.webkit.org/show_bug.cgi?id=49077

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::pluginElementNPObject):
        Send the GetPluginElementNPObject message.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::getPluginElementNPObject):
        Get the plug-in element NPObject and expose it to the other side of the connection.

        * WebProcess/Plugins/PluginProxy.messages.in:
        Add GetPluginElementNPObject.

2010-11-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver Hunt.

        Implement NP_RemoveProperty and NP_Enumerate
        https://bugs.webkit.org/show_bug.cgi?id=49046

        * Shared/Plugins/NPObjectMessageReceiver.cpp:
        (WebKit::NPObjectMessageReceiver::removeProperty):
        Call the removeProperty NPClass function.

        (WebKit::NPObjectMessageReceiver::enumerate):
        Call the enumerate NPClass function.

        * Shared/Plugins/NPObjectMessageReceiver.messages.in:
        Add RemoveProperty and Enumerate messages.

        * Shared/Plugins/NPObjectProxy.cpp:
        (WebKit::NPObjectProxy::removeProperty):
        Send the RemoveProperty message.

        (WebKit::NPObjectProxy::enumerate):
        Send the Enumerate message.

        (WebKit::NPObjectProxy::NP_RemoveProperty):
        Call removeProperty.

        (WebKit::NPObjectProxy::NP_Enumerate):
        Call enumerate.

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

        Fix failing python tests.

        * Scripts/webkit2/messages.py:
        * Scripts/webkit2/messages_unittest.py:

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

        Reviewed by Adam Roben..

        Generate the messages sent to the WebProcessProxy
        https://bugs.webkit.org/show_bug.cgi?id=49062

        * Platform/CoreIPC/MessageID.h:
        Temporarily add MessageClassWebProcessProxyLegacy while we still can't
        support GetPluginProcessConnection (and deferred sync replies) in the
        general mechanism.

        * Scripts/webkit2/messages.py:
        Add support for WebCore::PluginData and WebKit::WebNavigationDataStore.

        * Shared/CoreIPCSupport/WebProcessProxyMessageKinds.h:
        Remove now unused kinds. Rename to MessageClassWebProcessProxyLegacy.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPluginPath):
        (WebKit::WebProcessProxy::addBackForwardItem):
        (WebKit::WebProcessProxy::didNavigateWithNavigationData):
        (WebKit::WebProcessProxy::didPerformClientRedirect):
        (WebKit::WebProcessProxy::didPerformServerRedirect):
        (WebKit::WebProcessProxy::didUpdateHistoryTitle):
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        (WebKit::WebProcessProxy::didDestroyFrame):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in: Added.
        Move implementations to their own functions.

        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
        Change to use WebProcessProxyLegacyMessage.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::updateGlobalHistory):
        (WebKit::WebFrameLoaderClient::updateGlobalHistoryRedirectLinks):
        (WebKit::WebFrameLoaderClient::setTitle):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::populatePluginCache):
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::updateBackForwardItem):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::addVisitedLink):
        (WebKit::WebProcess::removeWebFrame):
        Use generated messages.

        * DerivedSources.make:
        * DerivedSources.pro:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Add new files.

2010-11-04  Adam Roben  <aroben@apple.com>

        Use a window region to clip windowed plugins

        Fixes <http://webkit.org/b/49024> <rdar://problem/8487847> Windowed
        plugins aren't clipped in WebKit2 on Windows

        Reviewed by Jon Honeycutt.

        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::registerPluginView): Removed the CS_PARENTDC style. This style
        makes Windows ignore the window region and always clip to the parent
        window. Also pass WebKit.dll's HINSTANCE as part of the WNDCLASSW
        struct so that the window class will be specific to WebKit.dll rather
        than to WebKit2WebProcess.exe. This is useful for testing, but also
        more pedantically correct.
        (WebKit::setWindowRegion): Helper function to set a window region and
        deal with ownership of the HRGN correctly.
        (WebKit::NetscapePlugin::platformGeometryDidChange): Make an HRGN that
        corresponds to m_clipRect and set it on the plugin's window.

2010-11-05  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] Left over files and shared memory segments
        https://bugs.webkit.org/show_bug.cgi?id=48985

        * Platform/qt/SharedMemoryQt.cpp:
        (WebKit::SharedMemory::create): Force deletion of the QSharedMemory
        object on terminate by connecting QCoreApplication::aboutToQuit with
        deleteLater. Add the object to the CrashHandler as well to release the
        shared memory segment even on crash.
        (WebKit::SharedMemory::~SharedMemory):
        * Shared/qt/CrashHandler.cpp: Added.
        CrashHandler has a container for QObjects that we want to
        destroy on crash. When we got a signal that we interpret as
        a crash then it destroys those objects.
        (WebKit::CrashHandler::CrashHandler):
        (WebKit::CrashHandler::signalHandler):
        (WebKit::CrashHandler::deleteObjects):
        * Shared/qt/CrashHandler.h: Added.
        (WebKit::CrashHandler::instance):
        (WebKit::CrashHandler::didDelete):
        (WebKit::CrashHandler::markForDeletionOnCrash):
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::ProcessLauncherHelper::ProcessLauncherHelper):
        Add the object itself to the CrashHandler to close the QLocalServer
        even on crash. Without that the QLocalServer leaves over socket files on the disk.
        (WebKit::ProcessLauncherHelper::~ProcessLauncherHelper):
        * WebKit2.pro:

2010-11-04  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        reversion bubble in WebViews
        https://bugs.webkit.org/show_bug.cgi?id=47630
        <rdar://problem/8530960>

        This patch is to add reversion to correction panel. Please see WebCore/ChangeLog for detail.

        * WebProcess/WebCoreSupport/WebEditorClient.h: Adopted new signature of base class method.
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: Ditto.
        (WebKit::WebEditorClient::showCorrectionPanel):
        (WebKit::WebEditorClient::dismissCorrectionPanel):

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

        Reviewed by David Hyatt.

        Delegate scrolling via a separate method
        https://bugs.webkit.org/show_bug.cgi?id=48988

        Add delegatedScrollRequested method to WebChromeClient,
        which is only used in conjunging with tiling, and thus ifdef'ed.

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

2010-11-03  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        Need a way to test in WebKit2 whether a form field contains marked text
        <rdar://problem/8555293>
        https://bugs.webkit.org/show_bug.cgi?id=48969
        
        Added a selection changed notification from the Web process to the UI process.
        The message being sent contains information about the current selection.
        Event though for this specific bug the only information required is the marked text,
        I've added other selection information that will be needed to support IME.
        All the stubbed methods are required methods by the NSTextInput protocol.
        
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::selectionChanged): Added.
        * UIProcess/API/mac/WKView.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:pageNamespaceRef:]): Added initialization of new members.
        (-[WKView _selectionChanged:isEditable:isPassword:hasMarkedText:]): Stores the values from
        the selection changed message.
        (-[WKView selectedRange]): Added stub.
        (-[WKView hasMarkedText]): Implemented.
        (-[WKView unmarkText]): Added stub.
        (-[WKView validAttributesForMarkedText]): Added stub.
        (-[WKView setMarkedText:selectedRange:]): Added stub.
        (-[WKView markedRange]): Added stub.
        (-[WKView attributedSubstringFromRange:]): Added stub.
        (-[WKView conversationIdentifier]): Added stub.
        (-[WKView characterIndexForPoint:]): Added stub.
        (-[WKView firstRectForCharacterRange:]): Added stub.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::selectionChanged): Added.
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didSelectionChange): New message handler.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::selectionChanged): Added.
        * UIProcess/win/WebView.h:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::respondToChangedSelection): Added implementation.

2010-11-04  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] Cleanup UpdateChunk and MappedMemoryPool
        https://bugs.webkit.org/show_bug.cgi?id=48994

        * Platform/qt/MappedMemoryPool.cpp:
        (WebKit::MappedMemoryPool::mapMemory):
        Removed argument with default value that was always
        used with the default value.
        (WebKit::MappedMemoryPool::mapFile): Ditto and
        add some asserts.
        * Platform/qt/MappedMemoryPool.h:
        Encapsulating MappedMemory and remove the unused
        MappedMemoryPool::searchForMappedMemory method.
        (WebKit::MappedMemory::mappedFile):
        (WebKit::MappedMemory::markFree):
        (WebKit::MappedMemory::data):
        (WebKit::MappedMemory::MappedMemory):
        (WebKit::MappedMemory::markUsed):
        (WebKit::MappedMemory::mapSize):
        (WebKit::MappedMemory::isFree):
        (WebKit::MappedMemoryPool::instance):
        * Shared/qt/UpdateChunk.cpp:
        Removed the unused data method besides other cleanups.
        (WebKit::UpdateChunk::UpdateChunk):
        (WebKit::UpdateChunk::encode):
        (WebKit::UpdateChunk::decode):
        (WebKit::UpdateChunk::createImage):
        * Shared/qt/UpdateChunk.h:

2010-11-04  Andreas Kling  <kling@webkit.org>

        Reviewed by Tor Arne Vestbø.

        [Qt] Add a stub WebContextMenuProxy

        This is the Qt equivalent of r71333.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::createContextMenuProxy):
        * UIProcess/qt/WebContextMenuProxyQt.cpp: Added.
        (WebKit::WebContextMenuProxyQt::WebContextMenuProxyQt):
        (WebKit::WebContextMenuProxyQt::create):
        (WebKit::WebContextMenuProxyQt::showContextMenu):
        (WebKit::WebContextMenuProxyQt::hideContextMenu):
        * UIProcess/qt/WebContextMenuProxyQt.h: Added.
        * WebKit2.pro:

2010-11-04  Adam Roben  <aroben@apple.com>

        Add a do-nothing WebContextMenuProxy implementation on Windows

        Fixes <http://webkit.org/b/48992> REGRESSION (r71041): Crash in
        WebPageProxy::showContextMenu when right-clicking in WebKit2 on
        Windows

        Reviewed by Dan Bernstein.

        * UIProcess/win/WebContextMenuProxyWin.cpp: Added.
        (WebKit::WebContextMenuProxyWin::WebContextMenuProxyWin):
        (WebKit::WebContextMenuProxyWin::create):
        (WebKit::WebContextMenuProxyWin::showContextMenu):
        (WebKit::WebContextMenuProxyWin::hideContextMenu):
        * UIProcess/win/WebContextMenuProxyWin.h: Added.
        Just stubbed-out this class.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::createContextMenuProxy): Create a new
        WebContextMenuProxyWin and return it. Returning 0 results in a crash.

        * win/WebKit2.vcproj: Added WebContextMenuProxyWin.

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

        Reviewed by Andreas Kling..

        [Qt] Build Webkit2 both in debug and release on Mac

        On Mac OS X we build QtWebKit in both debug and release, so
        we need to also build the webkit2 library in both configs.

        * WebKit2.pro:

2010-11-04  Adam Roben  <aroben@apple.com>

        Remove lame puts()s from WebPageProxy

        Rubber-stamped by Anders Carlsson.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadURL):
        (WebKit::WebPageProxy::loadURLRequest):

2010-11-03  Alice Liu  <alice.liu@apple.com>

        Fix clang++ build 

        * PluginProcess/PluginProcess.h:
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/WebContextMenuProxy.h:
        Change class to struct and vise versa where needed.

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

        Reviewed by Adam Roben.

        Implement NP_SetProperty
        https://bugs.webkit.org/show_bug.cgi?id=48956

        * Shared/Plugins/NPObjectMessageReceiver.cpp:
        (WebKit::NPObjectMessageReceiver::setProperty):
        Call the NPClass setProperty function.

        * Shared/Plugins/NPObjectMessageReceiver.messages.in:
        Add SetProperty message.

        * Shared/Plugins/NPObjectProxy.cpp:
        (WebKit::NPObjectProxy::setProperty):
        Send a SetProperty message.

        (WebKit::NPObjectProxy::NP_SetProperty):
        Call NPObjectProxy::setProperty.

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

        Reviewed by Simon Fraser.

        Out of process plug-ins don't support the CA drawing model
        https://bugs.webkit.org/show_bug.cgi?id=48950
        <rdar://problem/8626019>

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction):
        Add new overload.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::initialize):
        Call platformInitialize().

        (WebKit::PluginControllerProxy::destroy):
        Call platformDestroy().

        (WebKit::PluginControllerProxy::isAcceleratedCompositingEnabled):
        Assume that accelerated compositing is available if we have a render server port.

        (WebKit::PluginControllerProxy::geometryDidChange):
        Call platformGeometryDidChange().

        * PluginProcess/PluginProcess.h:
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::createPlugin):
        Pass back the remote layer client ID.

        * PluginProcess/WebProcessConnection.messages.in:
        Add a remoteLayerClientID out parameter to CreatePlugin.

        * PluginProcess/mac/PluginControllerProxyMac.mm: Added.
        (WebKit::PluginControllerProxy::platformInitialize):
        If the plug-in has a layer, create a remote layer client and associate it with the layer.

        (WebKit::PluginControllerProxy::platformDestroy):
        Invalidate the remote layer client.

        (WebKit::PluginControllerProxy::remoteLayerClientID):
        Return the remote layer client ID if one exists.

        (WebKit::PluginControllerProxy::platformGeometryDidChange):
        Update the layer bounds.

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

        * WebProcess/Plugins/Netscape/mac/PluginProxyMac.mm: Added.
        (WebKit::PluginProxy::pluginLayer):
        Create a render layer if needed.

        (WebKit::PluginProxy::needsBackingStore):
        Return whether the plug-in needs a backing store. (It doesn't need a backing store if it's a CA plug-in).

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::PluginProxy):
        Initialize m_remoteLayerClientID.

        (WebKit::PluginProxy::initialize):
        Set m_remoteLayerClientID.

        (WebKit::PluginProxy::paint):
        Bail if the plug-in doesn't need a backing store.

        (WebKit::PluginProxy::geometryDidChange):
        Don't create a backing store if the plug-in doesn't need one.

        * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
        (WebKit::LayerBackedDrawingArea::LayerBackedDrawingArea):
        Remove RetainPtr initialization.

        * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm:
        (WebKit::LayerBackedDrawingArea::platformClear):
        Use nullptr instead of 0.

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

        Reviewed by Simon Fraser.

        Crash when layout in response to setSize changes the drawing area
        https://bugs.webkit.org/show_bug.cgi?id=48947

        This is tested by compositing/plugins/small-to-large-composited-plugin.html.

        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
        (WebKit::ChunkedUpdateDrawingArea::setSize):
        * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
        (WebKit::LayerBackedDrawingArea::setSize):

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

        Reviewed by Adam Roben.

        Pass the accelerated compositing render server port to the plug-in process at startup
        https://bugs.webkit.org/show_bug.cgi?id=48925

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::PluginProcess):
        Initialize m_compositingRenderServerPort to MACH_PORT_NULL.

        (WebKit::PluginProcess::initialize):
        Get the plug-in path and render server port from the creation parameters.
        
        * PluginProcess/PluginProcess.messages.in:
        Change the Initialize message to take a PluginProcessCreationParameters struct.

        * Shared/Plugins/PluginProcessCreationParameters.cpp: Added.
        * Shared/Plugins/PluginProcessCreationParameters.h: Added.
        Add new PluginProcessCreationParameters struct.

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didFinishLaunching):
        Initialize now takes a PluginProcessCreationParameters struct.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm: Added.
        (WebKit::PluginProcessProxy::platformInitializePluginProcess):
        Initialize the render server port.

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

2010-11-03  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add the webkit2 library to LIBS instead of QMAKE_LFLAGS

        Otherwise the library order will get messed up and cause
        missing symbols on Mac OS X.

        * WebKit2.pri:
        * WebKit2.pro:

2010-11-02  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Barth.

        For unnamed frames, window.name returns a generated name
        https://bugs.webkit.org/show_bug.cgi?id=6751

        Part 1 of 2.

        Substitute FrameTree::uniqueName() for FrameTree::name() in WebKit2.

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

2010-11-02  Amruth Raj  <amruthraj@motorola.com> and Ravi Kasibhatla  <ravi.kasibhatla@motorola.com>

        Reviewed by Martin Robinson.

        Changes to enable building WebKit2 for Gtk port.
        (https://bugs.webkit.org/show_bug.cgi?id=37369)

        * Platform/gtk: Added.
        * Platform/gtk/SharedMemoryGtk.cpp: Added.  Stubbed implementation for GTK port. Yet to implement.
        (WebKit::SharedMemory::Handle::Handle):
        (WebKit::SharedMemory::Handle::~Handle):
        (WebKit::SharedMemory::Handle::encode):
        (WebKit::SharedMemory::Handle::decode):
        (WebKit::SharedMemory::create):
        (WebKit::SharedMemory::~SharedMemory):
        (WebKit::SharedMemory::createHandle):
        (WebKit::SharedMemory::systemPageSize):
        * Shared/gtk: Added.
        * Shared/gtk/BackingStoreGtk.cpp: Added. Stubbed implementation for GTK port. Yet to implement.
        (WebKit::BackingStore::createGraphicsContext):
        (WebKit::BackingStore::paint):
        * Shared/gtk/PlatformCertificateInfo.h: Added. Added. Stubbed implementation for GTK port. Yet to implement.
        (WebKit::PlatformCertificateInfo::PlatformCertificateInfo):
        (WebKit::PlatformCertificateInfo::encode):
        (WebKit::PlatformCertificateInfo::decode):
        * Shared/gtk/WebCoreArgumentCodersGtk.cpp: Added. Stubbed implementation for GTK port. Yet to implement.
        (CoreIPC::encodeResourceRequest):
        (CoreIPC::decodeResourceRequest):
        * UIProcess/Plugins/gtk: Added.
        * UIProcess/Plugins/gtk/PluginInfoStoreGtk.cpp: Added.  Stubbed implementation for GTK port. Yet to implement.
        (WebKit::PluginInfoStore::pluginsDirectories):
        (WebKit::PluginInfoStore::pluginPathsInDirectory):
        (WebKit::PluginInfoStore::individualPluginPaths):
        (WebKit::PluginInfoStore::getPluginInfo):
        (WebKit::PluginInfoStore::shouldUsePlugin):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/InjectedBundle/gtk: Added.
        * WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp: Added. Stubbed implementation for GTK port. Yet to implement.
        (WebKit::InjectedBundle::load):
        (WebKit::InjectedBundle::activateMacFontAscentHack):
        * WebProcess/Plugins/Netscape/gtk: Added.
        * WebProcess/Plugins/Netscape/gtk/NetscapePluginGtk.cpp: Added.  Stubbed implementation for GTK port. Yet to implement.
        (WebKit::NetscapePlugin::platformPostInitialize):
        (WebKit::NetscapePlugin::platformDestroy):
        (WebKit::NetscapePlugin::platformGeometryDidChange):
        (WebKit::NetscapePlugin::platformPaint):
        (WebKit::toNP):
        (WebKit::NetscapePlugin::platformHandleMouseEvent):
        (WebKit::NetscapePlugin::platformHandleWheelEvent):
        (WebKit::NetscapePlugin::platformSetFocus):
        (WebKit::NetscapePlugin::platformHandleMouseEnterEvent):
        (WebKit::NetscapePlugin::platformHandleMouseLeaveEvent):
        (WebKit::NetscapePlugin::platformHandleKeyboardEvent):
        * WebProcess/WebCoreSupport/gtk: Added.
        * WebProcess/WebCoreSupport/gtk/WebFrameNetworkingContext.h: Added. Added. Stubbed implementation for GTK port. Yet to implement.
        (WebFrameNetworkingContext::create):
        (WebFrameNetworkingContext::WebFrameNetworkingContext):

2010-11-02  Jing Jin  <jjin@apple.com>

        Reviewed by Alexey Proskuryakov.

        Key down calls are not being sent to the application.
        https://bugs.webkit.org/show_bug.cgi?id=48867

        * UIProcess/API/mac/WKView.mm:
        (-[WKView keyDown:]): Call super when ignoring a key down.

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

        Reviewed by John Sullivan.

        Add Null and Int32 to NPVariantData
        https://bugs.webkit.org/show_bug.cgi?id=48887

        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::npVariantToNPVariantData):
        (WebKit::NPRemoteObjectMap::npVariantDataToNPVariant):
        * Shared/Plugins/NPVariantData.cpp:
        (WebKit::NPVariantData::NPVariantData):
        (WebKit::NPVariantData::makeNull):
        (WebKit::NPVariantData::makeInt32):
        (WebKit::NPVariantData::encode):
        (WebKit::NPVariantData::decode):
        * Shared/Plugins/NPVariantData.h:
        (WebKit::NPVariantData::int32Value):

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

        Reviewed by Adam Roben.

        Add support for NP_HasMethod and NP_Invoke
        https://bugs.webkit.org/show_bug.cgi?id=48882

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction):
        Add new overload.

        * Shared/Plugins/NPObjectMessageReceiver.cpp:
        (WebKit::NPObjectMessageReceiver::hasMethod):
        Call hasMethod and return the result.

        (WebKit::NPObjectMessageReceiver::invoke):
        Convert the arguments, call invoke and return the result.

        (WebKit::NPObjectMessageReceiver::getProperty):
        Release the converted variant.

        * Shared/Plugins/NPObjectMessageReceiver.messages.in:
        Add HasMethod and Invoke messages.
        
        * Shared/Plugins/NPObjectProxy.cpp:
        (WebKit::NPObjectProxy::hasMethod):
        Send the HasMethod message.

        (WebKit::NPObjectProxy::invoke):
        Send the Invoke message.

        (WebKit::NPObjectProxy::NP_HasMethod):
        Call hasMethod.

        (WebKit::NPObjectProxy::NP_Invoke):
        Call invoke.

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

        Reviewed by Sam Weinig.

        Implement NP_HasProperty for NPObjectProxy
        https://bugs.webkit.org/show_bug.cgi?id=48876

        * Shared/Plugins/NPObjectMessageReceiver.cpp:
        (WebKit::NPObjectMessageReceiver::hasProperty):
        Call The hasProperty callback function.

        * Shared/Plugins/NPObjectMessageReceiver.messages.in:
        Add HasProperty message.

        * Shared/Plugins/NPObjectProxy.cpp:
        (WebKit::NPObjectProxy::hasProperty):
        Send the HasProperty message.

        (WebKit::NPObjectProxy::NP_HasProperty):
        Call hasProperty.


2010-11-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add a way to send startup messages on the context which can be posted when a process launches
        <rdar://problem/8617928>
        https://bugs.webkit.org/show_bug.cgi?id=48838

        Adds WKContextSetInitializationUserDataForInjectedBundle which sets an
        APIObject on WebContext to be sent to the InjectedBundle's WKBundleInitialize
        function each time a process starts up. This can help in cases where
        the WebProcess dies, and will be helpful in the world where there are
        multiple WebProcess's per context.

        * Scripts/webkit2/messages.py:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetInitializationUserDataForInjectedBundle):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureWebProcess):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::setInjectedBundleInitializationUserData):
        (WebKit::WebContext::injectedBundleInitializationUserData):
        * WebProcess/InjectedBundle/API/c/WKBundleInitialize.h:
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp:
        (WebKit::InjectedBundle::load):
        * WebProcess/InjectedBundle/qt/InjectedBundleQt.cpp:
        (WebKit::InjectedBundle::load):
        * WebProcess/InjectedBundle/win/InjectedBundleWin.cpp:
        (WebKit::InjectedBundle::load):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

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

        Reviewed by Sam Weinig.

        Implement PluginProxy::pluginScriptableNPObject
        https://bugs.webkit.org/show_bug.cgi?id=48874

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::getPluginScriptableNPObject):
        Ask the plug-in for its scriptable NPObject, register it with the map and return its object ID.

        * PluginProcess/PluginControllerProxy.messages.in:
        Add GetPluginScriptableNPObject message.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::pluginScriptableNPObject):
        Send the GetPluginScriptableNPObject message.

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

        Reviewed by Dan Bernstein.

        Add strings to NPVariantData
        https://bugs.webkit.org/show_bug.cgi?id=48871

        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::npVariantToNPVariantData):
        (WebKit::NPRemoteObjectMap::npVariantDataToNPVariant):
        * Shared/Plugins/NPVariantData.cpp:
        (WebKit::NPVariantData::makeString):
        (WebKit::NPVariantData::encode):
        (WebKit::NPVariantData::decode):
        * Shared/Plugins/NPVariantData.h:
        (WebKit::NPVariantData::stringValue):

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

        Reviewed by Dan Bernstein.

        Add convenience functions for allocating NPAPI memory
        https://bugs.webkit.org/show_bug.cgi?id=48870

        Add npnMemAlloc, npnMemFree and createNPString functions and 
        npnMemNew, npnMemNewArray function templates.

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

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

        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::convertJSValueToNPVariant):
        Use createNPString.

        * WebProcess/Plugins/Netscape/NPRuntimeUtilities.cpp:
        (WebKit::npnMemAlloc):
        Call malloc.

        (WebKit::npnMemFree):
        Call free.

        (WebKit::createNPString):
        Allocate the characters for a new NPString.

        (WebKit::createNPObject):
        Call npnMemNew.

        (WebKit::deallocateNPObject):
        Call npnMemFree.

        (WebKit::releaseNPVariantValue):
        Call npnMemFree.

        * WebProcess/Plugins/Netscape/NPRuntimeUtilities.h:
        (WebKit::npnMemNew):
        (WebKit::npnMemNewArray):
        Add new functions.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_MemAlloc):
        Call npnMemAlloc.

        (WebKit::NPN_MemFree):
        Call npnMemFree.

        (WebKit::NPN_UTF8FromIdentifier):
        Call npnMemNewArray.

        (WebKit::copyCString):
        Call npnMemNewArray. Correctly initialize the "len" out parameter.

2010-11-02  Jessie Berlin  <jberlin@apple.com>

        Windows build fix. Unreviewed.

        * win/WebKit2Generated.make:
        Add WKInspector.h so that it is copied over to the WebKitBuild directory.

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

        Reviewed by Adam Roben.

        Add some support for remote and local NPObjects to NPRemoteObjectMap
        https://bugs.webkit.org/show_bug.cgi?id=48864

        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::npVariantToNPVariantData):
        If the NPVariant contains an NPObject that isn't an NPObjectProxy, register it
        and return its ID.

        (WebKit::NPRemoteObjectMap::npVariantDataToNPVariant):
        If the NPVariantData contains a remote object, create an NPObjectProxy and return it.

        * Shared/Plugins/NPVariantData.cpp:
        (WebKit::NPVariantData::NPVariantData):
        Initialize m_localNPObjectIDValue and m_remoteNPObjectIDValue.

        (WebKit::NPVariantData::makeLocalNPObjectID):
        Create an NPVariantData that contains a local NPObject ID.

        (WebKit::NPVariantData::encode):
        Handle local and remote NPObject IDs.

        (WebKit::NPVariantData::decode):
        Decode local and remote NPObject IDs and "swap them" so an encoded remote NPObject ID is
        decoded as a local NPObjectID (and vice versa).

        * Shared/Plugins/NPVariantData.h:
        (WebKit::NPVariantData::localNPObjectIDValue):
        (WebKit::NPVariantData::remoteNPObjectIDValue):

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

        Attempt to fix a GCC release only warning.

        * Shared/Plugins/NPVariantData.cpp:
        (WebKit::NPVariantData::NPVariantData):

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

        Reviewed by John Sullivan.

        Invalidate the NPRemoteObjectMap
        https://bugs.webkit.org/show_bug.cgi?id=48856

        * Shared/Plugins/NPObjectMessageReceiver.cpp:
        (WebKit::NPObjectMessageReceiver::~NPObjectMessageReceiver):
        Remove FIXME. The NPRemoteObjectMap always outlives the NPObjectMessageReceiver.

        * Shared/Plugins/NPObjectProxy.cpp:
        (WebKit::NPObjectProxy::~NPObjectProxy):
        Call npObjectProxyDestroyed here.

        (WebKit::NPObjectProxy::invalidate):
        Null out m_npRemoteObjectMap.

        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::~NPRemoteObjectMap):
        Add assertions.

        (WebKit::NPRemoteObjectMap::createNPObjectProxy):
        Keep track of the NPObjectProxy by adding it to the m_npObjectProxies set.

        (WebKit::NPRemoteObjectMap::npObjectProxyDestroyed):
        Remove the NPObjectProxy from the m_npObjectProxies set.

        (WebKit::NPRemoteObjectMap::invalidate):
        Delete all NPObjectMessageReceivers. Iterate over all NPObjectProxy objects and invalidate them.

2010-11-02  Mike Thole  <mthole@apple.com>

        Reviewed by Anders Carlsson.

        WebProcessManager informed about crashes too late (pages may have already tried to load a new URL)
        https://bugs.webkit.org/show_bug.cgi?id=48853

        This also fixes: <rdar://problem/8610451> Webkit2: Crash in WebKit!WebKit::WebProcessProxy::sendMessage opening google.com page

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::~WebProcessProxy):
        Removed invalid assertion that is hit when the WebProcess dies unexpectedly.
        (WebKit::WebProcessProxy::didClose):
        Reordered so that the individual pages are informed that the processDidCrash() after the shared
        WebProcessManager has been. This allows the pages to properly trigger a new process to be launched.

2010-11-02  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        WebKit2: Repeated cmd-key presses lead to unusable UI state
        https://bugs.webkit.org/show_bug.cgi?id=48811
        <rdar://problem/8611924>

        Given the asynchronous nature of every interaction with the WebProcess,
        we could re-send a keyDown event to AppKit that maps to an
        action that is currently disabled and therefore will not trigger an action
        but a call to the keyDown method of the NSView. We need to detect this
        situation to avoid an infinite loop.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView performKeyEquivalent:]): Delay the release of the last processed event
        to the moment we receive another event.
        (-[WKView keyDown:]): Added early return in case the event is one we have re-sent.

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

        Reviewed by John Sullivan.

        Handle boolean values in NPVariant and NPVariantData
        https://bugs.webkit.org/show_bug.cgi?id=48852

        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::npVariantToNPVariantData):
        (WebKit::NPRemoteObjectMap::npVariantDataToNPVariant):
        * Shared/Plugins/NPVariantData.cpp:
        (WebKit::NPVariantData::makeBool):
        (WebKit::NPVariantData::encode):
        (WebKit::NPVariantData::decode):
        * Shared/Plugins/NPVariantData.h:
        (WebKit::NPVariantData::boolValue):

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

        Reviewed by John Sullivan.

        Assertion hit in WebProcessProxy::~WebProcessProxy()
        https://bugs.webkit.org/show_bug.cgi?id=48849
        <rdar://problem/8617676>

        It is perfectly valid for the page map to contain pages if the web process proxy
        goes away, this can happen if the process crashes for example.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::~WebProcessProxy):
        Remove the assertion.

2010-11-02  Christian Sejersen  <christian.webkit@gmail.com>

        Reviewed by Andreas Kling.

        The previous patch only took into account arm targets. This one
        now checks whether the build is done inside Scratchbox.
        https://bugs.webkit.org/show_bug.cgi?id=47895

        * DerivedSources.pro:

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

        Reviewed by Adam Roben.

        More NPRuntime work
        https://bugs.webkit.org/show_bug.cgi?id=48847

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::~WebProcessConnection):
        Add assertions.

        (WebKit::WebProcessConnection::removePluginControllerProxy):
        If we have no more plug-in controller proxies, invalidate the remote object map.

        * Shared/Plugins/NPIdentifierData.cpp:
        (WebKit::NPIdentifierData::createNPIdentifier):
        Create an NPIdentifier from the given NPIdentifierData.

        * Shared/Plugins/NPObjectMessageReceiver.cpp:
        (WebKit::NPObjectMessageReceiver::create):
        (WebKit::NPObjectMessageReceiver::NPObjectMessageReceiver):
        This now takes the NPRemoteObjectMap as well as the npObjectID of the object.

        (WebKit::NPObjectMessageReceiver::~NPObjectMessageReceiver):
        Unregister the object.

        (WebKit::NPObjectMessageReceiver::deallocate):
        Delete the object.

        (WebKit::NPObjectMessageReceiver::getProperty):
        Ask the NPObject for the property and convert it back to an NPVariantData.

        * Shared/Plugins/NPObjectProxy.cpp:
        (WebKit::NPObjectProxy::~NPObjectProxy):
        Send a Deallocate message to the corresponding message receiver on the other side.

        (WebKit::NPObjectProxy::getProperty):
        Convert the NPVariantData back to an NPVariant and return it.

        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::registerNPObject):
        Pass the NPRemoteObjectMap and the npObjectID to NPObjectMessageReceiver::create.

        (WebKit::NPRemoteObjectMap::unregisterNPObject):
        Remove the given object from the map of registered objects.

        (WebKit::NPRemoteObjectMap::npVariantToNPVariantData):
        Given an NPVariant, create an NPVariantData. Only supports void and double types right now.

        (WebKit::NPRemoteObjectMap::npVariantDataToNPVariant):
        Given an NPVariantData, create an NPVariant. Only supports void and double types right now.

        (WebKit::NPRemoteObjectMap::invalidate):
        Add stub.

        * Shared/Plugins/NPVariantData.cpp:
        (WebKit::NPVariantData::NPVariantData):
        Set the type to void by default.

        (WebKit::NPVariantData::makeVoid):
        Return a void NPVariantData.

        (WebKit::NPVariantData::makeDouble):
        Return an NPVariantData that contains a double value.

        (WebKit::NPVariantData::encode):
        Encode the NPVariantData.

        (WebKit::NPVariantData::decode):
        Decode the NPVariantData.

        * Shared/Plugins/NPVariantData.h:
        (WebKit::NPVariantData::type):
        Return the type of the NPVariantData.

        (WebKit::NPVariantData::doubleValue):
        Return the double value of the NPVariantData.
        
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didClose):
        Use nullptr instead of 0.

        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::~PluginProcessConnection):
        Assert that the connection and the remote object map are both null.

        (WebKit::PluginProcessConnection::removePluginProxy):
        If this was the last plug-in proxy, invalidate the remote object map.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::shutdown):
        Use nullptr instead of 0.

2010-11-02  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed Qt buildfix.

        * DerivedSources.pro: Add WebInspector to the list of
        message recievers.

2010-11-02  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] SharedMemory is broken
        https://bugs.webkit.org/show_bug.cgi?id=48520

        Implement SharedMemory with QSharedMemory to correctly handle
        ownership and to avoid extra allocation for page size requests.
        * Platform/SharedMemory.h:
        * Platform/qt/SharedMemoryQt.cpp:
        (WebKit::SharedMemory::Handle::Handle):
        (WebKit::SharedMemory::Handle::isNull):
        (WebKit::SharedMemory::Handle::encode):
        (WebKit::SharedMemory::Handle::decode):
        (WebKit::createUniqueKey):
        (WebKit::SharedMemory::create):
        (WebKit::accessMode):
        (WebKit::SharedMemory::~SharedMemory):
        (WebKit::SharedMemory::createHandle):

2010-11-02  Timothy Hatcher  <timothy@apple.com>

        Add WKInspector public APIs.

        https://webkit.org/b/48718

        Reviewed by Pavel Feldman.

        * DerivedSources.make: Added WebInspector to MESSAGE_RECEIVERS section.
        * UIProcess/API/C/WKInspector.cpp:
        (WKInspectorIsVisible): Added.
        (WKInspectorShow): Added.
        (WKInspectorClose): Added.
        (WKInspectorShowConsole): Added.
        (WKInspectorIsAttached): Added.
        (WKInspectorAttach): Added.
        (WKInspectorDetach): Added.
        (WKInspectorIsDebuggingJavaScript): Added.
        (WKInspectorToggleJavaScriptDebugging): Added.
        (WKInspectorIsProfilingJavaScript): Added.
        (WKInspectorToggleJavaScriptProfiling): Added.
        (WKInspectorIsProfilingPage): Added.
        (WKInspectorTogglePageProfiling): Added.
        * UIProcess/API/C/WKInspector.h: Added new functions.
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::WebInspectorProxy): Initialize new booleans.
        (WebKit::WebInspectorProxy::invalidate): Reset new booleans.
        (WebKit::WebInspectorProxy::show): Added.
        (WebKit::WebInspectorProxy::close): Added.
        (WebKit::WebInspectorProxy::showConsole): Added.
        (WebKit::WebInspectorProxy::attach): Added.
        (WebKit::WebInspectorProxy::detach): Added.
        (WebKit::WebInspectorProxy::toggleJavaScriptDebugging): Added.
        (WebKit::WebInspectorProxy::toggleJavaScriptProfiling): Added.
        (WebKit::WebInspectorProxy::togglePageProfiling): Added.
        * UIProcess/WebInspectorProxy.h:
        (WebKit::WebInspectorProxy::isVisible): Added.
        (WebKit::WebInspectorProxy::isAttached): Added.
        (WebKit::WebInspectorProxy::isDebuggingJavaScript): Added.
        (WebKit::WebInspectorProxy::isProfilingJavaScript): Added.
        (WebKit::WebInspectorProxy::isProfilingPage): Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close): Invalidate the WebInspectorProxy.
        (WebKit::WebPageProxy::inspector): Return 0 if closed or invalid.
        * WebKit2.pro: Added new files.
        * WebKit2.xcodeproj/project.pbxproj: Added new Files.
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::show): Added.
        (WebKit::WebInspector::close): Added.
        (WebKit::WebInspector::showConsole): Added.
        (WebKit::WebInspector::startJavaScriptDebugging): Added.
        (WebKit::WebInspector::stopJavaScriptDebugging): Added.
        (WebKit::WebInspector::startJavaScriptProfiling): Added.
        (WebKit::WebInspector::stopJavaScriptProfiling): Added.
        (WebKit::WebInspector::startPageProfiling): Added.
        (WebKit::WebInspector::stopPageProfiling): Added.
        * WebProcess/WebPage/WebInspector.h:
        (WebKit::WebInspector::page): Added.
        * WebProcess/WebPage/WebInspector.messages.in: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close): Destroy the WebInspector.
        (WebKit::WebPage::inspector): Return 0 if closed.
        (WebKit::WebPage::didReceiveMessage): Send the message to the WebInspector
        if the message class is MessageClassWebInspector.
        * win/WebKit2.vcproj: Added new files.

2010-11-02  Timothy Hatcher  <timothy@apple.com>

        Make WebInspectorFrontendClient inherit from InspectorFrontendClientLocal.

        We can do this since the Web Inspector WebPage will share the same process
        with the inspected WebPage.

        https://webkit.org/b/48652

        Reviewed by Pavel Feldman.

        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        (WebKit::WebInspectorFrontendClient::WebInspectorFrontendClient):
        Call the InspectorFrontendClientLocal constructor.
        (WebKit::WebInspectorFrontendClient::attachWindow): Added.
        (WebKit::WebInspectorFrontendClient::detachWindow): Added.
        (WebKit::WebInspectorFrontendClient::setAttachedWindowHeight): Added.
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.h:

2010-11-01  Juha Savolainen  <juha.savolainen@weego.fi>

        Reviewed by Kenneth Rohde Christiansen.

        Initial implementation of QWKHistoryItem.
        https://bugs.webkit.org/show_bug.cgi?id=48620

        The QWkHistoryItem represents one item in the history of QWKPage.

        * UIProcess/API/qt/qwkhistory.cpp:
        (QWKHistoryItemPrivate::QWKHistoryItemPrivate):
        (QWKHistoryItem::QWKHistoryItem):
        (QWKHistoryItem::~QWKHistoryItem):
        (QWKHistoryItem::title): The page title
        (QWKHistoryItem::url): The URL of the page.
        (QWKHistoryItem::originalUrl): The URL used to access the page.
        * UIProcess/API/qt/qwkhistory.h:
        * UIProcess/API/qt/qwkhistory_p.h:
        * WebKit2.pro: Added WKBackForwardListItem.h and WKBackForwardListItem.cpp

2010-11-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver Hunt.

        Make NPRemoteObjectMap a ref counted object
        https://bugs.webkit.org/show_bug.cgi?id=48808

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::windowScriptNPObject):
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::WebProcessConnection):
        (WebKit::WebProcessConnection::didReceiveSyncMessage):
        * PluginProcess/WebProcessConnection.h:
        (WebKit::WebProcessConnection::npRemoteObjectMap):
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::create):
        (WebKit::NPRemoteObjectMap::~NPRemoteObjectMap):
        (WebKit::NPRemoteObjectMap::createNPObjectProxy):
        * Shared/Plugins/NPRemoteObjectMap.h:
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::PluginProcessConnection):
        (WebKit::PluginProcessConnection::didReceiveSyncMessage):
        * WebProcess/Plugins/PluginProcessConnection.h:
        (WebKit::PluginProcessConnection::npRemoteObjectMap):
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::getWindowScriptNPObject):

2010-11-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Respond to NP_GetProperty by sending a GetProperty message
        https://bugs.webkit.org/show_bug.cgi?id=48797

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction):
        Add new sync message overload.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::didReceiveSyncMessage):
        If the message class is MessageClassNPObjectMessageReceiver, pass it to the NPRemoteObjectMap.

        * Shared/Plugins/NPIdentifierData.cpp:
        * Shared/Plugins/NPIdentifierData.h:
        Add NPIdentifierData, a CoreIPC representation of an NPIdentifier.

        * Shared/Plugins/NPObjectMessageReceiver.cpp:
        (WebKit::NPObjectMessageReceiver::getProperty):
        Add stub.

        * Shared/Plugins/NPObjectMessageReceiver.messages.in:
        Add GetProperty.

        * Shared/Plugins/NPObjectProxy.cpp:
        (WebKit::NPObjectProxy::create):
        (WebKit::NPObjectProxy::NPObjectProxy):
        (WebKit::NPObjectProxy::initialize):
        NPObjectProxy now takes an NPRemoteObjectMap in its create function.

        (WebKit::NPObjectProxy::getProperty):
        Send a GetProperty message.

        (WebKit::NPObjectProxy::NP_GetProperty):
        Call getProperty.

        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::createNPObjectProxy):
        Pass the NPRemoteObjectMap.

        (WebKit::NPRemoteObjectMap::didReceiveSyncMessage):
        Find the right message receiver and dispatch the message to it.

        * Shared/Plugins/NPVariantData.cpp:
        * Shared/Plugins/NPVariantData.h:
        Add NPVariantData, which will be a CoreIPC representation of an NPVariant.
        
        * WebKit2.xcodeproj/project.pbxproj:
        Add new files.

        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::didReceiveSyncMessage):
        If the message class is MessageClassNPObjectMessageReceiver, pass it to the NPRemoteObjectMap.

2010-11-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add ArgumentCoder specialization for WTF::CString
        https://bugs.webkit.org/show_bug.cgi?id=48796

        * Platform/CoreIPC/ArgumentCoders.h:

2010-11-01  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * WebKit2.xcodeproj/project.pbxproj:

2010-11-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Add NPObjectMessageReceiver.messages.in
        https://bugs.webkit.org/show_bug.cgi?id=48782

        * DerivedSources.make:
        Add NPObjectMessageReceiver.

        * Platform/CoreIPC/MessageID.h:
        Add MessageClassNPObjectMessageReceiver message class.

        * Shared/Plugins/NPObjectMessageReceiver.cpp:
        (WebKit::NPObjectMessageReceiver::deallocate):
        Add stubbed out deallocate member function.

        * Shared/Plugins/NPObjectMessageReceiver.messages.in: Added.

        * WebKit2.xcodeproj/project.pbxproj:
        Add NPObjectMessageReceiver.messages.in.

2010-11-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Start stubbing out NPClass functions in NPObjectProxy
        https://bugs.webkit.org/show_bug.cgi?id=48778

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::windowScriptNPObject):
        getOrCreateNPObjectProxy is now createNPObjectProxy.

        * Shared/Plugins/NPObjectProxy.cpp:
        (WebKit::NPObjectProxy::create):
        Allocate and initialize an NPObjectProxy object.

        (WebKit::NPObjectProxy::NPObjectProxy):
        Initialize m_npObjectID to 0.

        (WebKit::NPObjectProxy::isNPObjectProxy):
        Check the class.

        (WebKit::NPObjectProxy::initialize):
        Set m_npObjectID.

        (WebKit::NPObjectProxy::npClass):
        Return the NPClass with all functions filled in.

        (WebKit::NPObjectProxy::NP_Allocate):
        Create a new NPObjectProxy object.

        (WebKit::NPObjectProxy::NP_Deallocate):
        Deallocate the NPObjectProxy object.

        (WebKit::NPObjectProxy::NP_HasMethod):
        (WebKit::NPObjectProxy::NP_Invoke):
        (WebKit::NPObjectProxy::NP_InvokeDefault):
        (WebKit::NPObjectProxy::NP_HasProperty):
        (WebKit::NPObjectProxy::NP_GetProperty):
        (WebKit::NPObjectProxy::NP_SetProperty):
        (WebKit::NPObjectProxy::NP_RemoveProperty):
        (WebKit::NPObjectProxy::NP_Enumerate):
        (WebKit::NPObjectProxy::NP_Construct):
        Add stubs.

        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::createNPObjectProxy):
        * Shared/Plugins/NPRemoteObjectMap.h:
        Rename getOrCreateNPObjectProxy to createNPObjectProxy.

        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::NPJSObject::NP_Allocate):
        Remove unused parameter.

2010-11-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Both the WebProcessConnection and PluginProcessConnection should have NPRemoteObjectMaps
        https://bugs.webkit.org/show_bug.cgi?id=48775

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::windowScriptNPObject):
        Ask for an NPObjectProxy for the window script NPObject.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::WebProcessConnection):
        Initialize m_npRemoteObjectMap.

        * Shared/Plugins/NPObjectMessageReceiver.cpp:
        (WebKit::NPObjectMessageReceiver::create):
        Add a create member function that takes an NPObject.

        (WebKit::NPObjectMessageReceiver::NPObjectMessageReceiver):
        Retain the NPObject.

        (WebKit::NPObjectMessageReceiver::~NPObjectMessageReceiver):
        Release the NPObject.

        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::generateNPObjectID):
        Generate a unique 64-bit NPObject ID.

        (WebKit::NPRemoteObjectMap::getOrCreateNPObjectProxy):
        Add stub.

        (WebKit::NPRemoteObjectMap::registerNPObject):
        Create a NPObjectMessageReceiver and add it to the map.

        * WebKit2.xcodeproj/project.pbxproj:
        Set the correct target for NPRuntime related files.

        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::PluginProcessConnection):
        Initialize m_npRemoteObjectMap

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::getWindowScriptNPObject):
        Ask the real plug-in controller for the window script NPObject and register it.

2010-11-01  John Sullivan  <sullivan@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=48774
        minimFontSize preference needs to be exposed in WebKit2

        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::setMinimumFontSize):
        New function, parallel to existing functions for other preferences.
        (WebKit::WebPreferences::minimumFontSize):
        Ditto.

        * UIProcess/WebPreferences.h:
        Declared new function.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetMinimumFontSize):
        New UI process wrapper for new function.
        (WKPreferencesGetMinimumFontSize):
        Ditto.

        * UIProcess/API/C/WKPreferences.h:
        Declared new functions.

2010-11-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Tear down the related WebProcessProxy when a WebContext is deallocated
        https://bugs.webkit.org/show_bug.cgi?id=48769

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::~WebContext):
        Call WebProcessManager::contextWasDestroyed.

        (WebKit::WebContext::didNavigateWithNavigationData):
        (WebKit::WebContext::didPerformClientRedirect):
        (WebKit::WebContext::didPerformServerRedirect):
        (WebKit::WebContext::didUpdateHistoryTitle):
        It is valid for a frame to have a null page here, if the frame has outlived
        its page.

        * UIProcess/WebProcessManager.cpp:
        (WebKit::WebProcessManager::contextWasDestroyed):
        Remove the context from the map.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::~WebProcessProxy):
        It's OK for the connection to be non-null here if the process goes away because
        the context has been deallocated.

2010-11-01  Brady Eidson  <beidson@apple.com>

        Windows build fix.

        * UIProcess/win/WebView.cpp:

2010-11-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/7660547> and https://bugs.webkit.org/show_bug.cgi?id=48699
        Context menu support for WebKit 2.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

        * Shared/WebContextMenuItem.cpp: Added.
        (WebKit::WebContextMenuItem::WebContextMenuItem):
        (WebKit::WebContextMenuItem::encode):
        (WebKit::WebContextMenuItem::decode):
        (WebKit::kitItems):
        * Shared/WebContextMenuItem.h: Added.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::createContextMenuProxy):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::createContextMenuProxy): Stub to keep the build working.
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:

        * UIProcess/WebContextMenuProxy.cpp: Added.
        (WebKit::WebContextMenuProxy::~WebContextMenuProxy):
        (WebKit::WebContextMenuProxy::WebContextMenuProxy):
        * UIProcess/WebContextMenuProxy.h: Added.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showContextMenu): Shows the menu after receiving the message from the WebProcess.
        (WebKit::WebPageProxy::contextMenuItemSelected): Sends info about the selected menu item to the WebProcess
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * UIProcess/mac/WebContextMenuProxyMac.h: Added.
        (WebKit::WebContextMenuProxyMac::create):
        * UIProcess/mac/WebContextMenuProxyMac.mm: Added.
        (+[WebMenuTarget sharedMenuTarget]):
        (-[WebMenuTarget WebKit::]):
        (-[WebMenuTarget setMenuProxy:WebKit::]):
        (-[WebMenuTarget forwardContextMenuAction:]):
        (WebKit::WebContextMenuProxyMac::WebContextMenuProxyMac):
        (WebKit::WebContextMenuProxyMac::~WebContextMenuProxyMac):
        (WebKit::WebContextMenuProxyMac::contextMenuItemSelected):
        (WebKit::populateNSMenu):
        (WebKit::nsMenuItemVector):
        (WebKit::WebContextMenuProxyMac::populate):
        (WebKit::WebContextMenuProxyMac::showContextMenu):
        (WebKit::WebContextMenuProxyMac::hideContextMenu):

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::createContextMenuProxy): Stub for now.
        * UIProcess/win/WebView.h:

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

        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::getCustomMenuFromDefaultItems): Return the WebCore-provided default
          menu for now. Embedding app customization will come later (see bug 48720)

        * WebProcess/WebPage/WebContextMenu.cpp: Added.
        (WebKit::WebContextMenu::WebContextMenu):
        (WebKit::WebContextMenu::~WebContextMenu):
        (WebKit::WebContextMenu::show):
        (WebKit::WebContextMenu::itemSelected):
        * WebProcess/WebPage/WebContextMenu.h: Added.
        (WebKit::WebContextMenu::create):

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::contextMenu):
        (WebKit::handleMouseEvent): Pass right mouse presses along to WebCore as both a mouse event and context menu event, 
          the same way WebKit1 does.
        (WebKit::WebPage::didSelectItemFromActiveContextMenu):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2010-11-01  Adam Roben  <aroben@apple.com>

        Cancel main resource loads after we hand them off to the media engine

        This is the WebKit2 equivalent of r51104. Clearly this code should be
        moved to a cross-platform location someday.

        Fixes <http://webkit.org/b/48561> <rdar://problem/8606679> Assertion
        failure in DocumentLoader::commitData when loading a media document in
        WebKit2

        Reviewed by Eric Carlson.

        * WebProcess/WebCoreSupport/WebErrors.h: Added pluginWillHandleLoadError.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::committedLoad): Cancel the main resource load
        after handing off the load to the media engine. This code originally
        came from -[WebHTMLRepresentation receivedData:withDataSource:].
        (WebKit::WebFrameLoaderClient::pluginWillHandleLoadError): Call through to WebErrors.
        (WebKit::WebFrameLoaderClient::shouldFallBack): Implemented. We fall
        back for all errors except when the load was cancelled or we handed it
        off to the media engine or a plugin.

        * WebProcess/WebCoreSupport/mac/WebErrorsMac.mm:
        (WebKit::pluginWillHandleLoadError): Implemented.

        * WebProcess/WebCoreSupport/qt/WebErrorsQt.cpp:
        (WebKit::pluginWillHandleLoadError): Stubbed out.

        * WebProcess/WebCoreSupport/win/WebErrorsWin.cpp:
        (WebKit::pluginWillHandleLoadError): Implemented.

2010-11-01  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Cleanup viewportAttributesForSize API

        Change QSize argument to a const QSize&.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::viewportAttributesForSize):
        * UIProcess/API/qt/qwkpage.h:

2010-10-31  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Visited links not populated correctly in new web processes after the first
        https://bugs.webkit.org/show_bug.cgi?id=48735
        rdar://problem/8442177

        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::VisitedLinkProvider): Initialize
        m_webProcessHasVisitedLinkState.
        (WebKit::VisitedLinkProvider::processDidFinishLaunching): Renamed
        from populateVisitedLinksIfNeeded. Set m_webProcessHasVisitedLinkState
        to false, since this is a new process, and also start the timer
        so the visited links messages will be sent.
        (WebKit::VisitedLinkProvider::processDidClose): Renamed from
        stopVisitedLinksTimer.
        (WebKit::VisitedLinkProvider::pendingVisitedLinksTimerFired):
        Added logic so we send SetVisitedLinkTable and
        AllVisitedLinkStateChanged once to each new process and to set
        m_webProcessHasVisitedLinkState to true once that is done.

        * UIProcess/VisitedLinkProvider.h: Updated for above changes.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::processDidFinishLaunching): Called
        VisitedLinkProvider function under its new name. Also used
        ASSERT_UNUSED rather than ASSERT since the argument is used
        only for the assertion.
        (WebKit::WebContext::processDidClose): Ditto.

2010-10-30  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Crash in drawUpdateChunkIntoBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=48707

        UpdateChunk images have to be created using the QImage constructor
        that takes a bytesPerLine (stride) value, or the data length won't
        match UpdateChunk::size().

        * Shared/qt/UpdateChunk.cpp:
        (WebKit::UpdateChunk::createImage):

2010-10-29  Daniel Bates  <dbates@rim.com>

        No review, rolling out 70971.
        http://trac.webkit.org/changeset/70971
        https://bugs.webkit.org/show_bug.cgi?id=6751

        Rolling out changeset 70971 <http://trac.webkit.org/changeset/70971> since
        it caused layout test failures on all bots. In particular, the
        child count in a generated frame name differs after this patch. We need
        to look into this further.

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

2010-10-29  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Barth.

        For unnamed frames, window.name returns a generated name
        https://bugs.webkit.org/show_bug.cgi?id=6751

        Modified WebKit2 to use FrameTree::uniqueName().

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

2010-10-29  Sam Weinig  <weinig@apple.com>

        Reviewed by Simon Fraser.

        Implement WebProcess::platformSetCacheModel for windows
        <rdar://problem/8605796>
        https://bugs.webkit.org/show_bug.cgi?id=48703

        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::memorySize):
        (WebKit::volumeFreeSize):
        (WebKit::WebProcess::platformSetCacheModel):
        Add implemenation based on the version in WebKit/win/WebView.cpp.

2010-10-29  Andreas Kling  <kling@webkit.org>

        Reviewed by Anders Carlsson.

        WK2: Unbreak compilation of WebPlatformTouchPoint::decode()

        * Shared/WebPlatformTouchPoint.cpp:
        (WebKit::WebPlatformTouchPoint::decode):

2010-10-29  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        More back/forward refactoring

        * WebKit2.pro: Removed WebBackForwardControllerClient.cpp and .h.
        * WebKit2.xcodeproj/project.pbxproj: Ditto.

        * WebProcess/WebCoreSupport/WebBackForwardControllerClient.cpp: Removed.
        * WebProcess/WebCoreSupport/WebBackForwardControllerClient.h: Removed.

        * WebProcess/InjectedBundle/InjectedBundleBackForwardList.cpp:
        (WebKit::InjectedBundleBackForwardList::itemAtIndex): Use backForward.
        (WebKit::InjectedBundleBackForwardList::backListCount): Ditto.
        (WebKit::InjectedBundleBackForwardList::forwardListCount): Ditto.
        (WebKit::InjectedBundleBackForwardList::clear): Ditto.

        * WebProcess/WebPage/WebBackForwardListProxy.h: Added newly-needed include.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Set up backForwardClient.

2010-10-29  Adam Roben  <aroben@apple.com>

        Stop using encode/decodeBytes for WebEvent subclasses

        The use of encode/decodeBytes was making these classes sensitive to
        differences in padding on different architectures (e.g., 32-bit vs.
        64-bit). By encoding each data member explicitly we remove this
        sensitivity, allowing these classes to be passed between processes
        with different padding.

        Fixes <http://webkit.org/b/48552> <rdar://problem/8606571> Mouse
        events never reach Flash in WebKit2 on Mac (asserts in Debug builds)

        Reviewed by Anders Carlsson.

        * Platform/CoreIPC/Arguments.h:
        (CoreIPC::Arguments8::Arguments8):
        (CoreIPC::Arguments8::encode):
        (CoreIPC::Arguments8::decode):
        (CoreIPC::In):
        (CoreIPC::Out):
        Added Arguments8, the biggest Arguments yet.

        * Shared/WebEvent.cpp:
        (WebKit::WebEvent::encode):
        (WebKit::WebEvent::decode):
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::encode):
        (WebKit::WebKeyboardEvent::decode):
        * Shared/WebMouseEvent.cpp:
        (WebKit::WebMouseEvent::encode):
        (WebKit::WebMouseEvent::decode):
        * Shared/WebPlatformTouchPoint.cpp:
        (WebKit::WebPlatformTouchPoint::encode):
        (WebKit::WebPlatformTouchPoint::decode):
        * Shared/WebTouchEvent.cpp:
        (WebKit::WebTouchEvent::encode):
        (WebKit::WebTouchEvent::decode):
        * Shared/WebWheelEvent.cpp:
        (WebKit::WebWheelEvent::encode):
        (WebKit::WebWheelEvent::decode):
        Changed all encode/decode function to use CoreIPC::In/Out to
        encode/decode data members individually.

2010-10-29  Adam Roben  <aroben@apple.com>

        Use only CoreIPC-sanctioned types in WebEvent subclasses

        Fixes <http://webkit.org//48694> WebEvent subclasses should not use
        architecture-dependent types

        Reviewed by Anders Carlsson.

        * Shared/WebEvent.h:
        (WebKit::WebEvent::type):
        (WebKit::WebMouseEvent::button):
        (WebKit::WebMouseEvent::clickCount):
        (WebKit::WebWheelEvent::granularity):
        (WebKit::WebPlatformTouchPoint::id):
        (WebKit::WebPlatformTouchPoint::state):
        Replaced enums, ints, and unsigneds with uint32_ts, int32_ts, and
        uint32_ts, respectively.

2010-10-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Generate a DelayedReply struct for sync messages marked delayed
        https://bugs.webkit.org/show_bug.cgi?id=48696

        * Scripts/webkit2/messages.py:
        If we encounter a sync message marked delayed, generate a DelayedReply struct with a send member funciton
        that can be used for sending the reply.

        * Scripts/webkit2/messages_unittest.py:
        Update expected results.

2010-10-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Use WebPage::send in a couple of more places.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::setWindowRect):
        (WebKit::WebChromeClient::takeFocus):
        (WebKit::WebChromeClient::setToolbarsVisible):
        (WebKit::WebChromeClient::setStatusbarVisible):
        (WebKit::WebChromeClient::setMenubarVisible):
        (WebKit::WebChromeClient::setResizable):
        (WebKit::WebChromeClient::setStatusbarText):
        (WebKit::WebChromeClient::contentsSizeChanged):
        (WebKit::WebChromeClient::mouseDidMoveOverElement):
        (WebKit::WebChromeClient::setToolTip):
        (WebKit::WebChromeClient::setCursor):
        (WebKit::WebChromeClient::dispatchViewportDataDidChange):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::registerCommandForUndo):
        (WebKit::WebEditorClient::clearUndoRedoOperations):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::detachedFromParent2):
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidStartProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveTitle):
        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFailLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFinishDocumentLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFinishLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFirstLayout):
        (WebKit::WebFrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForMIMEType):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebKit::WebFrameLoaderClient::dispatchWillSubmitForm):
        (WebKit::WebFrameLoaderClient::postProgressStartedNotification):
        (WebKit::WebFrameLoaderClient::postProgressEstimateChangedNotification):
        (WebKit::WebFrameLoaderClient::postProgressFinishedNotification):
        (WebKit::WebFrameLoaderClient::didDisplayInsecureContent):
        (WebKit::WebFrameLoaderClient::didRunInsecureContent):
        (WebKit::WebFrameLoaderClient::dispatchDidBecomeFrameset):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::findString):
        (WebKit::FindController::hideFindIndicator):
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::addItem):
        (WebKit::WebBackForwardListProxy::goToItem):
        (WebKit::WebBackForwardListProxy::clear):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createMainFrame):
        (WebKit::WebFrame::createSubframe):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::sendClose):
        (WebKit::WebPage::pageDidScroll):
        (WebKit::WebPage::mouseEvent):
        (WebKit::WebPage::wheelEvent):
        (WebKit::WebPage::keyEvent):
        (WebKit::WebPage::validateMenuItem):
        (WebKit::WebPage::touchEvent):
        (WebKit::WebPage::show):
        (WebKit::WebPage::runJavaScriptInMainFrame):
        (WebKit::WebPage::getRenderTreeExternalRepresentation):
        (WebKit::WebPage::getSourceForFrame):

2010-10-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Add a MessageSender class template
        https://bugs.webkit.org/show_bug.cgi?id=48683

        * Platform/CoreIPC/MessageSender.h: Added.
        (CoreIPC::MessageSender::send):
        Add send overloads for simple message sending.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        Add MessageSender.h

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::countStringMatches):
        (WebKit::FindController::findString):
        (WebKit::FindController::updateFindIndicator):
        Call send on the web page.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::connection):
        Add connection(), used by the MessageSender.
        
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::destinationID):
        Add destinationID(), used by the MessageSender.

        * win/WebKit2.vcproj:
        Add MessageSender.h

2010-10-29  Adam Roben  <aroben@apple.com>

        Remove redundant data members from WebTouchEvent

        WebEvent already stores the Type and timestamp.

        Fixes <http://webkit.org/b/48671> WebTouchEvent duplicates data from
        WebEvent

        Reviewed by Anders Carlsson.

        * Shared/WebEvent.h:
        * Shared/WebTouchEvent.cpp:
        (WebKit::WebTouchEvent::WebTouchEvent):
        Removed m_type and m_timestamp (which was never even getting
        initialized!).

2010-10-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Add the plug-in proxy to the map before sending the CreatePlugin message
        https://bugs.webkit.org/show_bug.cgi?id=48678

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::initialize):

2010-10-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Add GetWindowScriptNPObject message
        https://bugs.webkit.org/show_bug.cgi?id=48670

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::windowScriptNPObject):
        Send the GetWindowScriptNPObject message.

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

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

2010-10-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Change the Connection::sendSync timeout parameter to have the NoTimeout argument as a default
        argument and update all the call sites.

        * Platform/CoreIPC/Connection.h:
        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::proxiesForURL):
        (WebKit::PluginControllerProxy::cookiesForURL):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::postSynchronousMessage):
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::initialize):
        (WebKit::PluginProxy::destroy):
        (WebKit::PluginProxy::paint):
        (WebKit::PluginProxy::handleMouseEvent):
        (WebKit::PluginProxy::handleWheelEvent):
        (WebKit::PluginProxy::handleMouseEnterEvent):
        (WebKit::PluginProxy::handleMouseLeaveEvent):
        (WebKit::PluginProxy::handleKeyboardEvent):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::windowRect):
        (WebKit::WebChromeClient::createWindow):
        (WebKit::WebChromeClient::toolbarsVisible):
        (WebKit::WebChromeClient::statusbarVisible):
        (WebKit::WebChromeClient::menubarVisible):
        (WebKit::WebChromeClient::canRunBeforeUnloadConfirmPanel):
        (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel):
        (WebKit::WebChromeClient::runJavaScriptAlert):
        (WebKit::WebChromeClient::runJavaScriptConfirm):
        (WebKit::WebChromeClient::runJavaScriptPrompt):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::populatePluginCache):
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::itemAtIndex):
        (WebKit::WebBackForwardListProxy::backListCount):
        (WebKit::WebBackForwardListProxy::forwardListCount):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        (WebKit::WebPage::changeAcceleratedCompositingMode):
        * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm:
        (WebKit::LayerBackedDrawingArea::attachCompositingContext):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::interceptEditingKeyboardEvent):

2010-10-29  John Sullivan  <sullivan@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=48666
        WebKit2 should provide counterpart getter to WKBundleNodeHandleSetHTMLInputElementAutofilled

        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleGetHTMLInputElementAutofilled):
        New function, calls through to InjectedBundleNodeHandle.

        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h:
        Declared new function.

        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::isHTMLInputElementAutofilled):
        New function, calls through to HTMLInputElement.

        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:
        Declared new function.

2010-10-29  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Anders Carlsson.

        ASSERTION FAILURE in WebProcessProxy::frameDestroyed when a Page is closed before it can send
        the DidCreateMainFrame messsage to the UIProcess.
        https://bugs.webkit.org/show_bug.cgi?id=48654

        WebProcessProxy::frameDestroyed was asserting that the frameID it was called with was
        registered in WebProcessProxy::frameCreated (which is called when the WebPageProxy is
        created). However, in the case where we close the page before it's had the chance to send
        the DidCreateMainFrame message back to the UI process, the UI Process will get the
        DidDestroyFrame message because it's sent directly to the WebProcessProxy and doesn't go
        through WebPageProxy.

        Remove the assert because it is invalid in this case.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::frameDestroyed):

2010-10-29  Adam Roben  <aroben@apple.com>

        Build fix when Carbon plugins are disabled

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

2010-10-29  Adam Roben  <aroben@apple.com>

        Move NPRuntime-related files into WebProcess/Plugins/Netscape

        Fixes <http://webkit.org/b/48645>.

        Reviewed by Anders Carlsson.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Updated the files' paths.

        * WebProcess/Plugins/Netscape/JSNPMethod.cpp: Renamed from WebKit2/WebProcess/Plugins/JSNPMethod.cpp.
        * WebProcess/Plugins/Netscape/JSNPMethod.h: Renamed from WebKit2/WebProcess/Plugins/JSNPMethod.h.
        * WebProcess/Plugins/Netscape/JSNPObject.cpp: Renamed from WebKit2/WebProcess/Plugins/JSNPObject.cpp.
        * WebProcess/Plugins/Netscape/JSNPObject.h: Renamed from WebKit2/WebProcess/Plugins/JSNPObject.h.
        * WebProcess/Plugins/Netscape/NPJSObject.cpp: Renamed from WebKit2/WebProcess/Plugins/NPJSObject.cpp.
        * WebProcess/Plugins/Netscape/NPJSObject.h: Renamed from WebKit2/WebProcess/Plugins/NPJSObject.h.
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp: Renamed from WebKit2/WebProcess/Plugins/NPRuntimeObjectMap.cpp.
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.h: Renamed from WebKit2/WebProcess/Plugins/NPRuntimeObjectMap.h.
        * WebProcess/Plugins/Netscape/NPRuntimeUtilities.cpp: Renamed from WebKit2/WebProcess/Plugins/NPRuntimeUtilities.cpp.
        * WebProcess/Plugins/Netscape/NPRuntimeUtilities.h: Renamed from WebKit2/WebProcess/Plugins/NPRuntimeUtilities.h.

2010-10-29  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=48576
        Let WebKit2 client know when a frame is a frameset

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::WebFrameProxy):
        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::setIsFrameSet):
        (WebKit::WebFrameProxy::isFrameSet):
        Remember whether the frame is currently a frameset.

        * UIProcess/API/C/WKFrame.cpp: (WKFrameIsFrameSet):
        * UIProcess/API/C/WKFrame.h:
        Added client API.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::frameDidBecomeFrameSet):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidBecomeFrameset):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        Pass notification from web process to UI process.

2010-10-28  Adam Roben  <aroben@apple.com>

        Use IntPoint/FloatSize in WebEvent subclasses

        This is nicer than passing around pairs of ints/floats.

        Fixes <http://webkit.org/b/48611>.

        Reviewed by Anders Carlsson.

        * Shared/WebEvent.h:
        * Shared/WebMouseEvent.cpp:
        * Shared/WebPlatformTouchPoint.cpp:
        * Shared/WebWheelEvent.cpp:
        Changed all x/y pairs to either use IntPoint or FloatSize, as
        appropriate.

        * Shared/WebEventConversion.cpp:
        * Shared/mac/WebEventFactory.mm:
        * Shared/qt/WebEventFactoryQt.cpp:
        * Shared/win/WebEventFactory.cpp:
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        Updated for WebEvent changes.

2010-10-29  Adam Roben  <aroben@apple.com>

        Touch WebKit2Prefix.h to fix incremental builds on Windows

        * WebKit2Prefix.h:

2010-10-28  Adam Roben  <aroben@apple.com>

        Remove unnecessary #includes from WebEvent.h

        Fixes <http://webkit.org/b/48609> WebEvent.h #includes things it
        doesn't need

        Reviewed by Sam Weinig.

        * Scripts/webkit2/messages.py:
        (MessageReceiver.iterparameters): Merged iterreplyparameters into this
        function. All callers to iterparameters are really interested in the
        reply parameters, too. This will cause us to, e.g., add
        forward-declarations for types used in sync replies.
        (headers_for_type): Added a special case for WebCore::KeypressCommand.

        * Scripts/webkit2/messages_unittest.py: Added a test to cover the
        failing case that inspired the above changes.

        * Shared/WebEvent.h: Replaced #includes with forward-declarations.

        * Shared/API/c/WKSharedAPICast.h:
        * Shared/NativeWebKeyboardEvent.h:
        * Shared/WebEvent.cpp:
        * Shared/WebKeyboardEvent.cpp:
        * Shared/WebMouseEvent.cpp:
        * Shared/WebPlatformTouchPoint.cpp:
        * Shared/WebTouchEvent.cpp:
        * Shared/WebWheelEvent.cpp:
        * Shared/qt/WebEventFactoryQt.cpp:
        * Shared/win/WebEventFactory.cpp:
        * UIProcess/API/qt/qwkpage.cpp:
        * UIProcess/LayerBackedDrawingAreaProxy.cpp:
        * UIProcess/WebUIClient.cpp:
        * UIProcess/WebUIClient.h:
        * UIProcess/win/WebView.cpp:
        * WebProcess/WebPage/FindController.cpp:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        Added now-needed #includes and declarations.

2010-10-29  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Adam Roben and David Kilzer.

        Fix and cleanup of build systems
        https://bugs.webkit.org/show_bug.cgi?id=48342

        * Configurations/FeatureDefines.xcconfig: Remove unnecessary ENABLE_SANDBOX and add missing features.

2010-10-28  Dan Bernstein  <mitz@apple.com>

        LLVM compiler build fix

        * WebProcess/Downloads/mac/DownloadMac.mm:
        (-[WKDownloadAsDelegate download:didReceiveResponse:]): Removed a stray semicolon.

2010-10-28  Adam Roben  <aroben@apple.com>

        Move some function definitions from WebEvent.h into new .cpp files

        Someday maybe we'll split the classes into their own header files,
        too.

        Fixes <http://webkit.org/b/48604>.

        Reviewed by Anders Carlsson.

        * Shared/WebEvent.h: Moved code from here...

        * Shared/WebEvent.cpp: Added.
        * Shared/WebKeyboardEvent.cpp: Added.
        * Shared/WebMouseEvent.cpp: Added.
        * Shared/WebPlatformTouchPoint.cpp: Added.
        * Shared/WebTouchEvent.cpp: Added.
        * Shared/WebWheelEvent.cpp: Added.
        ...to here. Also changed WebTouchEvent::touchPoints not to copy the
        Vector.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Added the new files.

2010-10-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Connection::sendSyncMessage needs to dispatch incoming sync messages
        https://bugs.webkit.org/show_bug.cgi?id=48606

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendSyncMessage):
        Protect the connection when waiting for a reply. Schedule for any remaining incoming sync messages
        to be sent once the bottom-most waitForSyncReply calls returns.

        (CoreIPC::Connection::waitForSyncReply):
        Make sure to dispatch any incoming sync messages.

        (CoreIPC::Connection::processIncomingMessage):
        If the incoming message is a sync message and we're waiting for a sync reply, add the message to the
        queue of "sync messages received while waiting for sync reply" and wake up the client thread.

        * Platform/CoreIPC/Connection.h:

2010-10-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Move code to dispatch a sync message out into a separate function
        https://bugs.webkit.org/show_bug.cgi?id=48605

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::dispatchSyncMessage):
        Factor code out from dispatchMessage. Handle receiving a message with an invalid reply ID.

        (CoreIPC::Connection::dispatchMessages):
        Call dispatchSyncMessage.

        * Platform/CoreIPC/Connection.h:

2010-10-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Add NPObjectMessageReceiver class.
        https://bugs.webkit.org/show_bug.cgi?id=48599

        * Shared/Plugins/NPObjectMessageReceiver.cpp: Added.
        (WebKit::NPObjectMessageReceiver::NPObjectMessageReceiver):
        (WebKit::NPObjectMessageReceiver::~NPObjectMessageReceiver):
        * Shared/Plugins/NPObjectMessageReceiver.h: Added.
        * WebKit2.xcodeproj/project.pbxproj:

2010-10-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add NPObjectProxy class
        https://bugs.webkit.org/show_bug.cgi?id=48558

        * Shared/Plugins/NPObjectProxy.cpp: Added.
        (WebKit::NPObjectProxy::NPObjectProxy):
        (WebKit::NPObjectProxy::~NPObjectProxy):
        * Shared/Plugins/NPObjectProxy.h: Added.
        * WebKit2.xcodeproj/project.pbxproj:

2010-10-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add NPRemoteObjectMap class
        https://bugs.webkit.org/show_bug.cgi?id=48553

        * Shared/Plugins/NPRemoteObjectMap.cpp: Added.
        (WebKit::NPRemoteObjectMap::NPRemoteObjectMap):
        * Shared/Plugins/NPRemoteObjectMap.h: Added.
        * WebKit2.xcodeproj/project.pbxproj:

2010-10-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WKURLRefs should be allowed to be null
        <rdar://problem/8575621>
        https://bugs.webkit.org/show_bug.cgi?id=48535

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toURLRef):
        (WebKit::toCopiedURLAPI):
        Turn a null WTF::String into a null WKURLRef.

2010-10-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add WebKit2 API for window feature getter/setters
        <rdar://problem/8590373>
        https://bugs.webkit.org/show_bug.cgi?id=48496

        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setToolbarsAreVisible):
        (WebKit::WebPageProxy::getToolbarsAreVisible):
        (WebKit::WebPageProxy::setMenuBarIsVisible):
        (WebKit::WebPageProxy::getMenuBarIsVisible):
        (WebKit::WebPageProxy::setStatusBarIsVisible):
        (WebKit::WebPageProxy::getStatusBarIsVisible):
        (WebKit::WebPageProxy::setIsResizable):
        (WebKit::WebPageProxy::getIsResizable):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::toolbarsAreVisible):
        (WebKit::WebUIClient::setToolbarsAreVisible):
        (WebKit::WebUIClient::menuBarIsVisible):
        (WebKit::WebUIClient::setMenuBarIsVisible):
        (WebKit::WebUIClient::statusBarIsVisible):
        (WebKit::WebUIClient::setStatusBarIsVisible):
        (WebKit::WebUIClient::isResizable):
        (WebKit::WebUIClient::setIsResizable):
        * UIProcess/WebUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::setToolbarsVisible):
        (WebKit::WebChromeClient::toolbarsVisible):
        (WebKit::WebChromeClient::setStatusbarVisible):
        (WebKit::WebChromeClient::statusbarVisible):
        (WebKit::WebChromeClient::setMenubarVisible):
        (WebKit::WebChromeClient::menubarVisible):
        (WebKit::WebChromeClient::setResizable):
        Plumb through the calls.

2010-10-28  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * win/WebKit2Common.vsprops:

2010-10-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        No longer soft-link zlib
        https://bugs.webkit.org/show_bug.cgi?id=48004

        * win/WebKit2Common.vsprops: Added zlib.lib to AdditionalDependencies.

2010-10-28  Adam Roben  <aroben@apple.com>

        Make PluginView retain its HTMLPlugInElement

        This matches WebKit/mac's WebBaseNetscapePluginView. WebCore didn't do
        this, but had a very different mechanism for implementing NPRuntime
        that didn't require it.

        Fixes <http://webkit.org/b/46672> <rdar://problem/8484208> Crash
        (preceded by assertion) in Node::document when running
        plugins/document-open.html in WebKit2 on Windows

        Reviewed by Anders Carlsson.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::create): Moved here from the header file so that
        clients of the header file won't have to pull in HTMLPlugInElement.h.
        Changed to take a PassRefPtr<HTMLPlugInElement>.
        (WebKit::PluginView::PluginView): Changed to take a
        PassRefPtr<HTMLPlugInElement> and to use m_pluginElement later (because
        the parameter to the function will be nulled-out after assigning into
        m_pluginElement).
        (WebKit::PluginView::pluginElementNPObject): Updated for change to m_pluginElement.

        * WebProcess/Plugins/PluginView.h: Made m_pluginElement a RefPtr.

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

        Reviewed by Andreas Kling.

        Make Qt viewportAttributesForSize not assert on (0, 0) size
        https://bugs.webkit.org/show_bug.cgi?id=48524

        We now return an invalid (isValid() == false) ViewportAttributes
        instance when the supplied size is (0, 0).

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::viewportAttributesForSize):

2010-10-28  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] SharedMemory should be released by the receiving process
        https://bugs.webkit.org/show_bug.cgi?id=48520

        * Platform/qt/SharedMemoryQt.cpp:
        (WebKit::SharedMemory::~SharedMemory):
        (WebKit::SharedMemory::createHandle):

2010-10-28  Kimmo Kinnunen  <kimmo.t.kinnunen@nokia.com>

         Reviewed by Kenneth Rohde Christiansen.

         [Qt] Web process cannot be debugged if it crashes in initialization
         https://bugs.webkit.org/show_bug.cgi?id=47399

         Wait 3 seconds for the debugger on debug mode if
         WEBKIT2_PAUSE_WEB_PROCESS_ON_LAUNCH environment variable is set.

         The debugging can be initiated for example in following way:
          export WEBKIT2_PAUSE_WEB_PROCESS_ON_LAUNCH=1
          ./MiniBrowser & while [ -z `pidof QtWebProcess` ]; do sleep 1; done; \
           gdb --pid=`pidof QtWebProcess`

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

2010-10-28  Mark Rowe  <mrowe@apple.com>

        32-bit build fix.

        Qualify references to Rect to avoid ambiguity between WebCore::Rect and Carbon's Rect.

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

2010-10-28  Ivan Krstić  <ike@apple.com>

        Reviewed by Mark Rowe.

        Remove unused experimental proxied panel interface.
        <rdar://problem/7237059>

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

2010-10-27  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * UIProcess/API/mac/PageClientImpl.mm: Reference the file using the correct case.

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

        Reviewed by Sam Weinig.

        Find indicators do not bounce
        https://bugs.webkit.org/show_bug.cgi?id=48490
        <rdar://problem/8564276>

        * UIProcess/API/mac/FindIndicatorWindow.h:
        * UIProcess/API/mac/FindIndicatorWindow.mm:
        (-[WebFindIndicatorWindowAnimation _initWithFindIndicatorWindow:WebKit::animationDuration:animationProgressCallback:WebKit::FindIndicatorWindow::animationDidEndCallback:WebKit::FindIndicatorWindow::]):
        Add an animationDuration parameter.
        
        (WebKit::FindIndicatorWindow::FindIndicatorWindow):
        Initialize m_bounceAnimationContext.

        (WebKit::FindIndicatorWindow::setFindIndicator):
        Create a bounce animation and start it.

        (WebKit::FindIndicatorWindow::closeWindow):
        Stop the bounce animation and destroy the bounce animation context.

        (WebKit::FindIndicatorWindow::startFadeOutTimerFired):
        pass the fade out duration.

        (WebKit::FindIndicatorWindow::bounceAnimationCallback):
        Set the bounce animation progress.

        (WebKit::FindIndicatorWindow::bounceAnimationDidEnd):
        Destroy the bounce animation context.

2010-10-27  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Andreas Kling.

        Remove the reference to the pageNamespace in the QWKPagePrivate.
        Access it through the WebPageProxy instead which holds a strong
        ref to it.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::QWKPagePrivate):
        (QWKPage::preferences):
        * UIProcess/API/qt/qwkpage_p.h:

2010-10-27  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        Support Appkit key bindings and custom key bindings in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=48271
        <rdar://problem/7660723>
        
        We need to support AppKit key bindings and custom key bindings in WebKit2.
        Every keyboard event is first sent to the WebProcess and we inform AppKit that
        we don't need further processing. When the event is processed by the WebProcess and no handler consumes it,
        we send a synchronous message back to the UI process to let AppKit perform the key bindings.
        This operation can result in one or more editing commands to execute or a noop.
        The WebProcess then replies back to the UI process to inform whether further processing is required, in
        which case the event is sent back to the application to be mapped.
        There is a potential for a race condition: in case the WebProcess is very slow to process the key events, the UI
        process could be in a completely different state when the event is being resent (for example it might not have the
        keyboard focus anymore) and the command could be lost. We should look out for user experience impact.

        * Scripts/webkit2/messages.py: Added header file in the generated file.
        * Shared/WebCoreArgumentCoders.h: Added encoder/decoder for KeypressCommand.
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::interceptKeyEvent): Pass-through call to WKView.
        (WebKit::PageClientImpl::didNotHandleKeyEvent): Added logic to resend the event to the application.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView validateUserInterfaceItem:]): Changed the default return value to YES, otherwise no menu shortcut is performed.
        (-[WKView doCommandBySelector:]): Added.
        (-[WKView insertText:]): Added.
        (-[WKView _handleStyleKeyEquivalent:]): Added to handle command-B and command-I.
        (-[WKView performKeyEquivalent:]): Added to intercept key binding sequences.
        (-[WKView _setEventBeingResent:]):
        (-[WKView _interceptKeyEvent:]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::interpretKeyEvent):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::handleKeyboardEvent):
        (WebKit::WebEditorClient::handleInputMethodKeydown):
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm: Moved handleKeyboardEvent and handleInputMethodKeydown
        to the Mac specific implementation.
        (WebKit::WebPage::interceptEditingKeyboardEvent): Added.

2010-10-27  Brian Weinstein  <bweinstein@apple.com>

        More Windows build fixage. Copy another new header into WebKitOutputDir.

        * win/WebKit2Generated.make:

2010-10-27  Brian Weinstein  <bweinstein@apple.com>

        Windows build fix. Copy a new header into WebKitOutputDir.

        * win/WebKit2Generated.make:

2010-10-26  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs to support layoutTestController.dumpBackForwardList
        https://bugs.webkit.org/show_bug.cgi?id=42322
        rdar://problem/8193631

        WebKitTestRunner needs to support layoutTestController.clearBackForwardList
        https://bugs.webkit.org/show_bug.cgi?id=42333
        rdar://problem/8193643

        * Shared/API/c/WKBase.h: Added WKBundleBackForwardListRef and
        WKBundleBackForwardListItemRef.

        * Shared/API/c/WKURL.cpp:
        (WKURLCopyString): Added.
        * Shared/API/c/WKURL.h: Added WKURLCopyString.

        * Shared/API/c/cf/WKURLCF.h: Fixed incorrect argument name.

        * Shared/APIObject.h: Added TypeBundleBackForwardList and
        TypeBundleBackForwardListItem.

        * Shared/ImmutableArray.h: Marked destructor virtual explicitly.
        * Shared/ImmutableDictionary.h: Ditto.
        * UIProcess/WebBackForwardListItem.h: Ditto.
        * UIProcess/WebContext.h: Ditto.
        * UIProcess/WebFrameProxy.h: Ditto.
        * UIProcess/WebNavigationData.h: Ditto.
        * UIProcess/WebPageNamespace.h: Ditto.
        * UIProcess/WebPreferences.h: Ditto.
        * WebProcess/InjectedBundle/InjectedBundleScriptWorld.h: Ditto.
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h: Ditto.
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.h: Ditto.

        * UIProcess/WebBackForwardList.cpp: Removed unneeded backListWithLimit
        and forwardListWithLimit functions.
        (WebKit::WebBackForwardList::clear): Added.
        * UIProcess/WebBackForwardList.h: Marked destructor virtual explicitly.
        Added clear, removed backListWithLimit and forwardListWithLimit functions.

        * UIProcess/WebPageProxy.cpp: Removed unneeded backForwardBackItem,
        backForwardCurrentItem, and backForwardForwardItem functions.
        (WebKit::WebPageProxy::backForwardClear): Added.
        * UIProcess/WebPageProxy.h: Ditto.
        * UIProcess/WebPageProxy.messages.in: Ditto.

        * WebKit2.pro: Added new files.
        * WebKit2.xcodeproj/project.pbxproj: Ditto.
        * win/WebKit2.vcproj: Ditto.

        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Added
        WKBundleBackForwardListRef and WKBundleBackForwardListItemRef.

        * WebProcess/InjectedBundle/API/c/WKBundleBackForwardList.cpp:
        Started with a copy of from WebKit2/UIProcess/API/C/WKBackForwardList.cpp.
        * WebProcess/InjectedBundle/API/c/WKBundleBackForwardList.h:
        Started with a copy of WebKit2/UIProcess/API/C/WKBackForwardList.h.

        * WebProcess/InjectedBundle/API/c/WKBundleBackForwardListItem.cpp:
        Started with a copy of WebKit2/UIProcess/API/C/WKBackForwardListItem.cpp.
        * WebProcess/InjectedBundle/API/c/WKBundleBackForwardListItem.h:
        Started with a copy of WebKit2/UIProcess/API/C/WKBackForwardListItem.h.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageGetBackForwardList): Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h: Ditto.


        * WebProcess/InjectedBundle/InjectedBundleBackForwardList.cpp:
        Started with a copy of WebKit2/UIProcess/WebBackForwardList.cpp.
        * WebProcess/InjectedBundle/InjectedBundleBackForwardList.h:
        Started with a copy of WebKit2/UIProcess/WebBackForwardList.h.

        * WebProcess/InjectedBundle/InjectedBundleBackForwardListItem.cpp:
        Started with a copy of WebKit2/UIProcess/WebBackForwardListItem.cpp.
        * WebProcess/InjectedBundle/InjectedBundleBackForwardListItem.h:
        Started with a copy of WebKit2/UIProcess/WebBackForwardListItem.h.

        * WebProcess/WebPage/WebBackForwardListProxy.cpp: Removed
        many unneeded functions.
        (WebKit::WebBackForwardListProxy::WebBackForwardListProxy):
        Removed unneeded initialization of m_closed.
        (WebKit::WebBackForwardListProxy::addItem): Added a check for
        the case of a capacity of 0.
        (WebKit::WebBackForwardListProxy::goToItem): Added a check for
        when the proxy outlives its page.
        (WebKit::WebBackForwardListProxy::itemAtIndex): Ditto.
        (WebKit::WebBackForwardListProxy::backListCount): Ditto.
        (WebKit::WebBackForwardListProxy::forwardListCount): Ditto.
        (WebKit::WebBackForwardListProxy::close): Removed unneeded code
        setting m_closed.
        (WebKit::WebBackForwardListProxy::isActive): Added.
        (WebKit::WebBackForwardListProxy::clear): Added.

        * WebProcess/WebPage/WebBackForwardListProxy.h: Added clear,
        isActive, and detach functions. Removed many other unneeded
        function and data members.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::~WebPage): Added call to detach on the
        back/forward list.
        (WebKit::WebPage::backForwardList): Added.
        * WebProcess/WebPage/WebPage.h: Added backForwardList function
        and m_backForwardList data member.

2010-10-27  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=48385 Add WebKit 
        SPI to scale a WebView
        -and corresponding-
        <rdar://problem/8107667>

        This patch adds SPI to Mac WebKit that scales the page by the given 
        scale factor.

        Implement scaleWebView(), which tells WebCore::Frame to scale, and 
        viewScaleFactor() which returns the current scale factor.
        * Shared/API/c/WKSharedAPICast.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageScaleWebView):
        (WKPageGetViewScaleFactor):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::scaleWebView):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::viewScaleFactor):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scaleWebView):
        (WebKit::WebPage::viewScaleFactor):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2010-10-27  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        Fix the WebKit2 API tests.
        https://bugs.webkit.org/show_bug.cgi?id=48461

        The API tests were failing because the tests expect to be able to send messages before the
        WebProcess finishes launching.

        Instead of dispatching the pending messages in processDidFinishLaunching, dispatch them in
        ensureWebProcess but do not make messages pending if the process is launching.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::processDidFinishLaunching):
        Move dispatching the pending messages back from here ...
        (WebKit::WebContext::ensureWebProcess):
        ... to here.
        (WebKit::WebContext::postMessageToInjectedBundle):
        Check whether the process can send messages in order to determine if a message needs to be
        sent later.

        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::canSendMessage):
        The WebProcessProxy can send a message if it is valid or if it is launching.

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

        Reviewed by Sam Weinig.

        More work on downloads
        https://bugs.webkit.org/show_bug.cgi?id=48480

        * WebProcess/Downloads/Download.cpp:
        (WebKit::Download::~Download):
        Call platformInvalidate().

        (WebKit::Download::didBegin):
        (WebKit::Download::didReceiveData):
        (WebKit::Download::didFinish):
        Add empty stubs.

        * WebProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        Create a Download object and insert it into the m_downloads map.

        * WebProcess/Downloads/cf/DownloadCFNet.cpp:
        (WebKit::Download::platformInvalidate):
        Add empty stub.
        
        * WebProcess/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::platformInvalidate):
        Tell the WKDownloadAsDelegate object that we're being invalidated.

        (-[WKDownloadAsDelegate downloadDidBegin:]):
        Call Download::didBegin.

        (-[WKDownloadAsDelegate download:didReceiveDataOfLength:]):
        Call Download::didReceiveData.

        (-[WKDownloadAsDelegate downloadDidFinish:]):
        Call Download::didFinish.

        * WebProcess/Downloads/qt/DownloadQt.cpp:
        (WebKit::Download::platformInvalidate):
        Add empty stub.

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

        Reviewed by Sam Weinig.

        WebPageProxy::isValid should return false if the page has been explicitly closed
        https://bugs.webkit.org/show_bug.cgi?id=48458

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::isValid):
        (WebKit::WebPageProxy::relaunch):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::processDidCrash):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isClosed):

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

        Reviewed by Adam Roben.

        Begin stubbing out the Download class
        https://bugs.webkit.org/show_bug.cgi?id=48447

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        Add new files.
        
        * WebKit2Prefix.h:
        Include WebCore/EmptyProtocolDefinitions.h
        
        * WebProcess/Downloads/Download.cpp: Added.
        * WebProcess/Downloads/Download.h: Added.

        * WebProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        Create a Download object and start it.

        * WebProcess/Downloads/mac/DownloadMac.mm: Added.
        (WebKit::Download::start):
        Create an NSURLDownload.
    
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::startDownload):
        Ask the download manager to start downloading.

        * win/WebKit2.vcproj:
        * win/WebKit2Common.vsprops:
        Add new files.

2010-10-27  Adam Roben  <aroben@apple.com>

        Don't allow setting NetscapePlugin::m_isWindowed after NPP_New has
        completed

        In Firefox, Chrome, and WebKit1 trying to set this value after NPP_New
        does not actually affect whether the plugin is windowed.

        Fixes <http://webkit.org/b/46673> <rdar://problem/8484211> Assertion
        failure in NetscapePlugin::platformDestroy when running
        plugins/mouse-events.html in WebKit2 on Windows

        Reviewed by Anders Carlsson.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::setIsWindowed): Moved here from the header.
        Bail out if m_isStarted is true, indicating that NPP_New has already
        finished.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h: Removed the
        implementation of setIsWindowed.

2010-10-27  Timothy Hatcher  <timothy@apple.com>

        Add API for enabling the developer extras (Web Inspector).

        http://webkit.org/b/48439

        Reviewed by John Sullivan.

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::WebPreferencesStore):
        (WebKit::WebPreferencesStore::encode):
        (WebKit::WebPreferencesStore::decode):
        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetDeveloperExtrasEnabled):
        (WKPreferencesGetDeveloperExtrasEnabled):
        * UIProcess/API/C/WKPreferences.h:
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::setDeveloperExtrasEnabled):
        (WebKit::WebPreferences::developerExtrasEnabled):
        * UIProcess/WebPreferences.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2010-10-27  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Anders Carlsson.

        Move contentsSizeChange from the UIClient into the PageClient and
        and make it a private Qt-only API in the process.

        Make WKPageContentsSizeChangedCallback be a private API
        https://bugs.webkit.org/show_bug.cgi?id=48409

        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::didChangeContentsSize):
        (QWKPage::QWKPage):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didChangeContentsSize):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebUIClient.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::contentsSizeChanged):

2010-10-26  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        WebKit2 shouldn't try to send an empty user agent
        https://bugs.webkit.org/show_bug.cgi?id=48397
        
        Change the check of the custom user agent to an empty check instead of a null check. When the client application
        sets a custom user agent and then resets it, the custom user agent is set to an empty string. If all we do
        is check for a null string, then we will think we have a custom user agent (which is empty) and send an empty
        user agent.

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

2010-10-27  Adam Roben  <aroben@apple.com>

        Don't call NPP_GetValue if the plugin didn't provide an implementation

        Fixes <http://webkit.org/b/48433> Crash in
        NetscapePlugin::shouldLoadSrcURL when using Shockwave Director 10.3 in
        WebKit2 on Windows

        Reviewed by Eric Carlson.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NPP_GetValue): Null-check the getvalue pointer
        before using it to call NPP_GetValue.

2010-10-27  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Assert due to multiple initialization of WebPlatformStrategies
        https://bugs.webkit.org/show_bug.cgi?id=48327

        We are using the LocalizationStrategy in the UI process
        so the previous attempt to fix this (http://trac.webkit.org/changeset/70620)
        was wrong.
        * UIProcess/API/qt/qwkpage.cpp:
        (initializePlatformStrategiesIfNeeded):
        Call WebPlatformStrategies::initialize exactly once.
        (QWKPagePrivate::QWKPagePrivate):

2010-10-27  Kimmo Kinnunen  <kimmo.t.kinnunen@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] WebKit2 UI process crashes if web process crashes
        https://bugs.webkit.org/show_bug.cgi?id=48400

        Check the success of socket write operations.
        Avoids crashing the UI process if web process has crashed.
        Qt socket code segfaults when write is called for a socket
        that has had an error.

        * Platform/CoreIPC/qt/ConnectionQt.cpp:
        (CoreIPC::Connection::platformInvalidate):
        Reset m_socket after deletion.

        (CoreIPC::Connection::sendOutgoingMessage):
        Check error status of write operations and
        invalidate socket if writes fail.

2010-10-27  Kimmo Kinnunen  <kimmo.t.kinnunen@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Type mismatch while serializing/deserializing message id size
        https://bugs.webkit.org/show_bug.cgi?id=48401

        Use correct types when reading data from connection buffer.

        The message id is written as uint32_t, thus the buffer size should be
        calculated based on sizeof(uint32_t) and not sizeof(MessageID).

        * Platform/CoreIPC/qt/ConnectionQt.cpp:
        (CoreIPC::Connection::readyReadHandler):

2010-10-27  Zalan Bujtas  <zbujtas@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        Multiple WebPlatformStrategy initialization triggers assert in WebCore/PlatformStrategies. 
        Remove the code for now, as it is not used at all.
        https://bugs.webkit.org/show_bug.cgi?id=48327

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

2010-10-26  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix.

        * WebProcess/WebCoreSupport/win/WebErrorsWin.cpp:
        (WebKit::cancelledError): Conditionalize use of CFNetwork calls
        and includes.

2010-10-26  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h: Modified original file, not its framework
        copy this time.

2010-10-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add DownloadManager class
        https://bugs.webkit.org/show_bug.cgi?id=48388

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

        * WebProcess/Downloads/DownloadManager.cpp: Added.
        (WebKit::DownloadManager::shared):
        (WebKit::DownloadManager::DownloadManager):
        * WebProcess/Downloads/DownloadManager.h: Added.

        * win/WebKit2.vcproj:
        * win/WebKit2Common.vsprops:
        Add new files.

2010-10-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Pass a downloadID to the web process whenever a download is requested
        https://bugs.webkit.org/show_bug.cgi?id=48380

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::generateDownloadID):
        Generate a unique download ID.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        Pass along a download ID if needed.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::startDownload):
        Call the web frame member function.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::WebFrame):
        Initialize m_policyDownloadID.

        (WebKit::WebFrame::invalidatePolicyListener):
        Reset m_policyDownloadID.

        (WebKit::WebFrame::didReceivePolicyDecision):
        Set m_policyDownloadID.

        (WebKit::WebFrame::startDownload):
        Assert that m_policyDownloadID is not zero.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceivePolicyDecision):
        Pass along the download ID.

        * WebProcess/WebPage/WebPage.messages.in:
        Add the download ID.

2010-10-26  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=48375
        <rdar://problem/8392724> Need delegate calls in PageLoaderClient to indicate if we have
        loaded insecure content

        Added the delegate. Just like the bundle version, it misses WebOrigin parameter that Mac
        delegate call used to have. It doesn't seem necessary for clients.

        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage):
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::didDisplayInsecureContentForFrame):
        (WebKit::WebLoaderClient::didRunInsecureContentForFrame):
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didDisplayInsecureContentForFrame):
        (WebKit::WebPageProxy::didRunInsecureContentForFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::didDisplayInsecureContentForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didRunInsecureContentForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::didDisplayInsecureContent):
        (WebKit::WebFrameLoaderClient::didRunInsecureContent):

2010-10-26  Jenn Braithwaite  <jennb@chromium.org>

        Reviewed by Dmitry Titov.

        Resource tracking failure when trying to move a frame between documents
        https://bugs.webkit.org/show_bug.cgi?id=44713

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transferLoadingResourceFromPage):
        Empty method.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2010-10-26  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Darin Adler.

        Post any pending messages to the Injected Bundle in WebContext::processDidFinishLaunching
        instead of in WebContext::ensureWebProcess.
        https://bugs.webkit.org/show_bug.cgi?id=48367

        Send pending injected bundle messages after the process finished launching instead of of
        directly after creating it.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureWebProcess):
        Move the logic to dispatch pending injected bundle messages from here ...
        (WebKit::WebContext::processDidFinishLaunching):
        ... to here.
        Also use a reference instead of a pointer when sending the pending messages.

2010-10-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        pageDidScroll callback should be on the UI process client rather than (or in addition to) the web process client
        https://bugs.webkit.org/show_bug.cgi?id=48366

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage):
        Add zero initializer.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::pageDidScroll):
        Call the pageDidScroll client function.

        * UIProcess/WebPageProxy.messages.in:
        Add PageDidScroll message.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::pageDidScroll):
        Send the PageDidScroll message.

2010-10-26  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Darin Adler.

        Need a way to retrieve custom user agent from a WKPage
        https://bugs.webkit.org/show_bug.cgi?id=48360
        <rdar://problem/8466537>
        
        Add an exported function on WKPage to get the page's custom user agent.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageCopyCustomUserAgent): Exported function that returns the custom user
            agent.
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close): Clear the custom user agent string.
        (WebKit::WebPageProxy::processDidCrash): Ditto.
        (WebKit::WebPageProxy::setCustomUserAgent): Add a new early return if we're setting
            the custom user agent to what it was before, and set the custom user agent member
            variable.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::customUserAgent): Returns the custom user agent.

2010-10-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Support layoutTestController.layerTreeAsText in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=42145
        
        Expose layerTreeAsText() as private API so that 
        WebKitTestRunner can use it.

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameCopyLayerTreeAsText):
        * WebProcess/InjectedBundle/API/c/WKBundleFramePrivate.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::numberOfActiveAnimations):
        (WebKit::WebFrame::layerTreeAsText):
        (WebKit::WebFrame::pendingUnloadCount):
        * WebProcess/WebPage/WebFrame.h:

2010-10-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Enable the plug-in process on Mac
        https://bugs.webkit.org/show_bug.cgi?id=48350

        * WebKit2Prefix.h:
        Flip the switch and enable the plug-in process on Mac.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformDestroy):
        Fix a bogus assert.

2010-10-26  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement SharedMemory for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=47345

        Implement unimplemented functions in SharedMemoryQt.cpp.
        Rename MappedMemory.h to MappedMemoryPool.h, move MappedMemoryPool.{h|cpp} from
        Shared/qt to Platform/qt. Modify affected lines of WebKit2.pro.
        Move MappedMemory implementation into MappedMemoryPool. Remove unnecessary 
        methods of MappedMemoryPool.

        * Platform/SharedMemory.h: Add a handle member for Qt.
        * Platform/qt/MappedMemoryPool.cpp: Copied from WebKit2/Shared/qt/MappedMemoryPool.cpp.
        (WebKit::MappedMemoryPool::searchForMappedMemory):
        (WebKit::MappedMemoryPool::mapMemory):
        (WebKit::MappedMemoryPool::mapFile):
        * Platform/qt/MappedMemoryPool.h: Copied from WebKit2/Shared/qt/MappedMemory.h.
        (WebKit::MappedMemoryPool::MappedMemory::mapSize):
        (WebKit::MappedMemoryPool::MappedMemory::markUsed):
        (WebKit::MappedMemoryPool::MappedMemory::markFree):
        (WebKit::MappedMemoryPool::MappedMemory::isFree):
        (WebKit::MappedMemoryPool::MappedMemory::data):
        (WebKit::MappedMemoryPool::MappedMemoryPool):
        Move MappedMemory implementation into MappedMemoryPool.
        * Platform/qt/SharedMemoryQt.cpp:
        (WebKit::SharedMemory::Handle::Handle): Implement.
        (WebKit::SharedMemory::Handle::~Handle):
        (WebKit::SharedMemory::Handle::isNull): Implement.
        (WebKit::SharedMemory::Handle::encode): Implement.
        (WebKit::SharedMemory::Handle::decode): Implement.
        (WebKit::SharedMemory::create): Implement.
        (WebKit::mapProtection): Added.
        (WebKit::SharedMemory::~SharedMemory): Implement.
        (WebKit::SharedMemory::createHandle): Implement.
        (WebKit::SharedMemory::systemPageSize): Implement.
        * Shared/qt/MappedMemory.h: Removed.
        * Shared/qt/MappedMemoryPool.cpp: Removed.
        * Shared/qt/UpdateChunk.cpp:
        (WebKit::UpdateChunk::UpdateChunk):
        (WebKit::UpdateChunk::decode):
        Modify to use MappedMemoryPool.
        * Shared/qt/UpdateChunk.h:
        * WebKit2.pro:
        Modify affected lines.

2010-10-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        WebKit2 callbacks for findString() and countMatchesForString() should report whether the match count was exceeded
        https://bugs.webkit.org/show_bug.cgi?id=48285
        <rdar://problem/8576318>

        * UIProcess/API/C/WKPage.h:
        Add a kWKMoreThanMaximumMatchCount constant.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::findString):
        If we get back more matches than allowed, send kWKMoreThanMaximumMatchCount as the match constant.

2010-10-25  Dan Bernstein  <mitz@apple.com>

        Non-Carbon build fix.

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

2010-10-25  Timothy Hatcher  <timothy@apple.com>

        Stub out WebInspector objects and WKInspectorRef API.

        https://webkit.org/b/48265

        Reviewed by Anders Carlsson.

        * Platform/CoreIPC/MessageID.h: Added MessageClassWebInspector and MessageClassWebInspectorProxy.
        * Shared/API/c/WKBase.h: Added WKInspectorRef.
        * Shared/APIObject.h: Added TypeInspector.
        * UIProcess/API/C/WKAPICast.h: Added WKInspectorRef to WebInspectorProxy mapping.
        * UIProcess/API/C/WKInspector.cpp: Added.
        (WKInspectorGetTypeID):
        (WKInspectorGetPage):
        * UIProcess/API/C/WKInspector.h: Added.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetInspector): Added.
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebInspectorProxy.cpp: Added.
        (WebKit::WebInspectorProxy::WebInspectorProxy):
        (WebKit::WebInspectorProxy::~WebInspectorProxy):
        (WebKit::WebInspectorProxy::invalidate):
        * UIProcess/WebInspectorProxy.h:
        (WebKit::WebInspectorProxy::create):
        (WebKit::WebInspectorProxy::page):
        (WebKit::WebInspectorProxy::type):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::inspector): Lazily create the WebInspectorProxy.
        * UIProcess/WebPageProxy.h:
        * WebKit2.pro: Added new files.
        * WebKit2.xcodeproj/project.pbxproj: Added new files.
        * WebProcess/WebPage/WebInspector.cpp: Added.
        (WebKit::WebInspector::WebInspector):
        * WebProcess/WebPage/WebInspector.h: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::inspector): Lazily create the WebInspector.
        * WebProcess/WebPage/WebPage.h:
        * win/WebKit2.vcproj: Added new files.

2010-10-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Update the fake Carbon window when the window frame changes
        https://bugs.webkit.org/show_bug.cgi?id=48273

        * UIProcess/API/mac/WKView.mm:
        (screenForWindow):
        (-[WKView _updateWindowFrame]):
        Pass the window frame in Carbon coordinates.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::windowFrameChanged):
        Update the window bounds.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::setWindowFrame):
        Call the plug-in.

        (WebKit::PluginView::platformLayer):
        Fix a crash when WebCore asked for the layer before it was initialized.

2010-10-25  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Remove exec and globalData arguments from jsNumber
        https://bugs.webkit.org/show_bug.cgi?id=48270

        Mechanical removal of exec parameter to jsNumber

        * WebProcess/Plugins/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::convertNPVariantToJSValue):

2010-10-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Replace matchCountDidChange with didFindString/didFailToFindString
        https://bugs.webkit.org/show_bug.cgi?id=48262
        <rdar://problem/8568928>

        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebFindClient.cpp:
        (WebKit::WebFindClient::didFindString):
        (WebKit::WebFindClient::didFailToFindString):
        * UIProcess/WebFindClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFindString):
        (WebKit::WebPageProxy::didFailToFindString):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::findString):

2010-10-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Add a pageDidScroll BundleUIClient callback
        https://bugs.webkit.org/show_bug.cgi?id=48260
        <rdar://problem/8531159>

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::pageDidScroll):
        Call the pageDidScroll callback.

        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::invalidateContentsForSlowScroll):
        (WebKit::WebChromeClient::scroll):
        Call pageDidScroll.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::pageDidScroll):
        Hide the find banner UI and call the BundleUIClient pageDidScroll callback.

2010-10-25  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Control + Mousewheel shouldn't be handled in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=48253
        
        Don't handle a wheel event if Control is pressed, pass the message back to DefWindowProc.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::onWheelEvent):

2010-10-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        cancelledError for WebKit2 on windows should use kCFErrorDomainCFNetwork instead of webKitErrorDomain
        https://bugs.webkit.org/show_bug.cgi?id=48254

        * WebProcess/WebCoreSupport/win/WebErrorsWin.cpp:
        (WebKit::cancelledError): Use kCFErrorDomainCFNetwork instead of webKitErrorDomain and switch over
        to using kCFURLErrorCancelled instead of a hard coded constant.

2010-10-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Need WebKit2 API to figure out if a frame can provide source
        <rdar://problem/8424632>
        https://bugs.webkit.org/show_bug.cgi?id=48252

        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameCanProvideSource):
        * UIProcess/API/C/WKFrame.h:
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::canProvideSource):
        * UIProcess/WebFrameProxy.h:
        Add API to figure out if a frame can provide source based on its
        MIME type.

2010-10-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Java applets don't display on the page
        https://bugs.webkit.org/show_bug.cgi?id=48251
        <rdar://problem/8483759>

        Add WKPreferencesSetJavaEnabled and initialize it to true by default, matching old WebKit.

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::WebPreferencesStore):
        Initialize javaEnabled.

        (WebKit::WebPreferencesStore::encode):
        Encode javaEnabled.

        (WebKit::WebPreferencesStore::decode):
        Decode javaEnabled.

        * Shared/WebPreferencesStore.h:
        Add javaEnabled.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPReferencesSetJavaEnabled):
        (WKPReferencesGetJavaEnabled):
        Call the WebPreferences functions.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createJavaAppletWidget):
        Just call createPlugin.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        Call Settings::setJavaEnabled.

2010-10-25  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by David Kilzer.

        Replace _countof with WTF_ARRAY_LENGTH
        https://bugs.webkit.org/show_bug.cgi?id=48229

        * UIProcess/Launcher/win/ProcessLauncherWin.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        (WebKit::safariPluginsDirectory):
        (WebKit::addMozillaPluginDirectories):
        (WebKit::addWindowsMediaPlayerPluginDirectory):
        (WebKit::addAdobeAcrobatPluginDirectory):
        (WebKit::addMacromediaPluginDirectories):
        (WebKit::addPluginPathsFromRegistry):
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::interpretKeyEvent):

2010-10-25  Adam Roben  <aroben@apple.com>

        Stop copying .messages.in files into WebKit2's framework bundle

        Fixes <http://webkit.org/b/48232> Several .messages.in files end up in
        WebKit2's framework bundle

        Reviewed by Dan Bernstein.

        * WebKit2.xcodeproj/project.pbxproj:

2010-10-25  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Fix the WebKit2 build after sheriffbot messed up the rollout patch.
        https://bugs.webkit.org/show_bug.cgi?id=48238

        * Shared/qt/MappedMemory.h: Renamed from WebKit2/Platform/qt/MappedMemoryPool.h.
        (WebKit::MappedMemory::mapSize):
        (WebKit::MappedMemory::markUsed):
        (WebKit::MappedMemory::markFree):
        (WebKit::MappedMemory::isFree):
        (WebKit::MappedMemory::data):

2010-10-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70450.
        http://trac.webkit.org/changeset/70450
        https://bugs.webkit.org/show_bug.cgi?id=48238

        Causes WTR to crash on tests which use SharedMemory.
        (Requested by bbandix on #webkit).

        * Platform/SharedMemory.h:
        * Platform/qt/MappedMemoryPool.cpp: Removed.
        * Platform/qt/SharedMemoryQt.cpp:
        (WebKit::SharedMemory::Handle::Handle):
        (WebKit::SharedMemory::Handle::~Handle):
        (WebKit::SharedMemory::Handle::encode):
        (WebKit::SharedMemory::Handle::decode):
        (WebKit::SharedMemory::create):
        (WebKit::SharedMemory::~SharedMemory):
        (WebKit::SharedMemory::createHandle):
        (WebKit::SharedMemory::systemPageSize):
        * Shared/qt/MappedMemory.h: Renamed from WebKit2/Platform/qt/MappedMemoryPool.h.
        (WebKit::MappedMemory::mapSize):
        (WebKit::MappedMemory::markUsed):
        (WebKit::MappedMemory::markFree):
        (WebKit::MappedMemory::isFree):
        (WebKit::MappedMemory::data):
        * Shared/qt/MappedMemoryPool.cpp: Added.
        (WebKit::MappedMemoryPool::MappedMemoryPool):
        (WebKit::MappedMemoryPool::instance):
        (WebKit::MappedMemoryPool::size):
        (WebKit::MappedMemoryPool::at):
        (WebKit::MappedMemoryPool::append):
        (WebKit::MappedMemoryPool::cleanUp):
        * Shared/qt/UpdateChunk.cpp:
        (WebKit::mapMemory):
        (WebKit::mapFile):
        (WebKit::UpdateChunk::UpdateChunk):
        (WebKit::UpdateChunk::decode):
        * Shared/qt/UpdateChunk.h:
        * WebKit2.pro:

2010-10-25  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement SharedMemory for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=47345

        Implement unimplemented functions in SharedMemoryQt.cpp.
        Rename MappedMemory.h to MappedMemoryPool.h, move MappedMemoryPool.{h|cpp} from
        Shared/qt to Platform/qt. Modify affected lines of WebKit2.pro.
        Move MappedMemory implementation into MappedMemoryPool. Remove unnecessary 
        methods of MappedMemoryPool.

        * Platform/SharedMemory.h: Add a handle member for Qt.
        * Platform/qt/MappedMemoryPool.cpp: Copied from WebKit2/Shared/qt/MappedMemoryPool.cpp.
        (WebKit::MappedMemoryPool::searchForMappedMemory):
        (WebKit::MappedMemoryPool::mapMemory):
        (WebKit::MappedMemoryPool::mapFile):
        * Platform/qt/MappedMemoryPool.h: Copied from WebKit2/Shared/qt/MappedMemory.h.
        (WebKit::MappedMemoryPool::MappedMemory::mapSize):
        (WebKit::MappedMemoryPool::MappedMemory::markUsed):
        (WebKit::MappedMemoryPool::MappedMemory::markFree):
        (WebKit::MappedMemoryPool::MappedMemory::isFree):
        (WebKit::MappedMemoryPool::MappedMemory::data):
        (WebKit::MappedMemoryPool::MappedMemoryPool):
        Move MappedMemory implementation into MappedMemoryPool.
        * Platform/qt/SharedMemoryQt.cpp:
        (WebKit::SharedMemory::Handle::Handle): Implement.
        (WebKit::SharedMemory::Handle::~Handle):
        (WebKit::SharedMemory::Handle::isNull): Implement.
        (WebKit::SharedMemory::Handle::encode): Implement.
        (WebKit::SharedMemory::Handle::decode): Implement.
        (WebKit::SharedMemory::create): Implement.
        (WebKit::mapProtection): Added.
        (WebKit::SharedMemory::~SharedMemory): Implement.
        (WebKit::SharedMemory::createHandle): Implement.
        (WebKit::SharedMemory::systemPageSize): Implement.
        * Shared/qt/MappedMemory.h: Removed.
        * Shared/qt/MappedMemoryPool.cpp: Removed.
        * Shared/qt/UpdateChunk.cpp:
        (WebKit::UpdateChunk::UpdateChunk):
        (WebKit::UpdateChunk::decode):
        Modify to use MappedMemoryPool.
        * Shared/qt/UpdateChunk.h:
        * WebKit2.pro:
        Modify affected lines.

2010-10-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Need a way to determine the screen rect for a form control in WebKit2
        <rdar://problem/8530670>
        https://bugs.webkit.org/show_bug.cgi?id=48216

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        Add conversion from IntRect to WKRect.

        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleGetElementBounds):
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::elementBounds):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:
        Add SPI to get the rect in window space. The client can then convert this to screen
        space if they wish to.

2010-10-23  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Sam Weinig.

        Unify globalData APIs
        https://bugs.webkit.org/show_bug.cgi?id=47969

        Adapt code to JSGlobalObject::globalData returning a reference
        instead of a pointer.

        * WebProcess/Plugins/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::getOrCreateJSObject):
        (WebKit::NPRuntimeObjectMap::evaluate):

2010-10-23  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=48083
        <rdar://problem/8489082> Need WebKit2 API for private browsing (48083)

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm: (InitWebCoreSystemInterface):
        Initialize the new method.

2010-10-21  Timothy Hatcher  <timothy@apple.com>

        Stub out WebInspectorFrontendClient.

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

        Reviewed by Adam Roben.

        * WebKit2.pro: Added WebInspectorFrontendClient.{cpp,h}.
        * WebKit2.xcodeproj/project.pbxproj: Added WebInspectorFrontendClient.{cpp,h}.
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp: Added.
        (WebKit::WebInspectorFrontendClient::windowObjectCleared): Added.
        (WebKit::WebInspectorFrontendClient::frontendLoaded): Added.
        (WebKit::WebInspectorFrontendClient::moveWindowBy): Added.
        (WebKit::WebInspectorFrontendClient::localizedStringsURL): Added.
        (WebKit::WebInspectorFrontendClient::hiddenPanels): Added.
        (WebKit::WebInspectorFrontendClient::bringToFront): Added.
        (WebKit::WebInspectorFrontendClient::closeWindow): Added.
        (WebKit::WebInspectorFrontendClient::disconnectFromBackend): Added.
        (WebKit::WebInspectorFrontendClient::requestAttachWindow): Added.
        (WebKit::WebInspectorFrontendClient::requestDetachWindow): Added.
        (WebKit::WebInspectorFrontendClient::changeAttachedWindowHeight): Added.
        (WebKit::WebInspectorFrontendClient::inspectedURLChanged): Added.
        (WebKit::WebInspectorFrontendClient::sendMessageToBackend): Added.
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.h: Added.
        (WebKit::WebInspectorFrontendClient::WebInspectorFrontendClient): Added.
        * win/WebKit2.vcproj: Added WebInspectorFrontendClient.{cpp,h}.

2010-10-21  Timothy Hatcher  <timothy@apple.com>

        Remove stale stubs that are not longer part of InspectorClient.

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

        Reviewed by Adam Roben.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorClient.h:

2010-10-22  Andy Estes  <aestes@apple.com>

        Reviewed by Adam Roben and Sam Weinig.

        WebKit shouldn't load a plug-in based on file extension if a MIME type
        is specified.
        https://bugs.webkit.org/show_bug.cgi?id=48046

        The fix landed in r70332 only covered the Mac port. Implement this fix
        for WebKit2 as well.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::findPlugin):

2010-10-22  Anders Carlsson  <andersca@apple.com>

        Fix clang++ build.

        * Scripts/webkit2/messages.py:

2010-10-22  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * UIProcess/API/qt/qwkpage_p.h:
        (QWKPagePrivate::didRelaunchProcess):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::didRelaunchProcess):
        * UIProcess/win/WebView.h:
        * WebKit2.xcodeproj/project.pbxproj:

2010-10-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        WebContext::ensureWebProcess shouldn't send multiple InitializeWebProcess messages.
        https://bugs.webkit.org/show_bug.cgi?id=48158
        <rdar://problem/8512572>

        If the web process was launching when another call to ensureWebProcess is sent, we
        would end up sending another InitializeWebProcess message to it which would result
        in assertions firing. Fix this by only checking for m_process, and not requiring a process
        to be valid (which it won't be until it's finished launching).
        
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureWebProcess):

2010-10-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Rename revive to relaunch everywhere.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didRelaunchProcess):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _didRelaunchProcess]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::relaunchProcessIfNecessary):
        * UIProcess/WebContext.h:
        * UIProcess/WebPageNamespace.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::relaunch):
        (WebKit::WebPageProxy::initializeWebPage):
        (WebKit::WebPageProxy::loadURL):
        (WebKit::WebPageProxy::loadURLRequest):
        * UIProcess/WebPageProxy.h:

2010-10-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Fix assert when a NetscapePluginModule loses its last NetscapePlugin.
        https://bugs.webkit.org/show_bug.cgi?id=48155

        (The assert in question is ASSERT(pluginModuleIndex != notFound) in 
        NetscapePluginModule::shutdown()).

        * WebProcess/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::pluginCreated):
        If we didn't have any live plug-ins, load the plug-in module.

        (WebKit::NetscapePluginModule::pluginDestroyed):
        If this was the last plug-in, unload the plug-in module.

        (WebKit::NetscapePluginModule::shutdown):
        Set m_isInitialized to false.

        (WebKit::NetscapePluginModule::load):
        Don't do anything if the plug-in module has already been initialized.

        (WebKit::NetscapePluginModule::unload):
        Assert that we're not initialized.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformPostInitialize):
        Assert that we successfully created the window.

2010-10-22  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Anders Carlsson.

        Crash in Connection::isValid when called in response to
        VisitedLinksProvider::pendingVisitedLinksTimerFired after WebProcessProxy::didClose was
        already called.
        https://bugs.webkit.org/show_bug.cgi?id=48153

        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::stopVisitedLinksTimer):
        * UIProcess/VisitedLinkProvider.h:

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::processDidClose):
        Stop the pendingVisitedLinksTimer and null out the process.
        * UIProcess/WebContext.h:

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didClose):
        Tell the WebContext that the WebProcess did close.

2010-10-22  Sam Weinig  <sam@webkit.org>

        Fix Qt build.

        * UIProcess/API/qt/ClientImpl.h:

2010-10-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2 needs to pass the current event modifier flags when requesting a new window
        https://bugs.webkit.org/show_bug.cgi?id=48140

        In addition to passing modifier flags from the now passed NavigationAction, also pass
        the WindowFeatures to the UIProcess.

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebEvent.h:
        (WebKit::WebEvent::modifiers):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::createNewPage):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::createNewPage):
        * UIProcess/WebUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createWindow):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchCreatePage):
        (WebKit::modifiersForNavigationAction):
        (WebKit::mouseButtonForNavigationAction):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2010-10-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Rename processDidExit to processDidCrash
        https://bugs.webkit.org/show_bug.cgi?id=48146

        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::processDidCrash):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _processDidCrash]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage):
        * UIProcess/API/qt/qwkpage_p.h:
        (QWKPagePrivate::processDidCrash):
        * UIProcess/PageClient.h:
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::processDidBecomeUnresponsive):
        (WebKit::WebLoaderClient::processDidBecomeResponsive):
        (WebKit::WebLoaderClient::processDidCrash):
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::processDidBecomeUnresponsive):
        (WebKit::WebPageProxy::processDidBecomeResponsive):
        (WebKit::WebPageProxy::processDidCrash):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didClose):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::processDidCrash):
        * UIProcess/win/WebView.h:

2010-10-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Corrected target dependencies.

        * WebKit2.xcodeproj/project.pbxproj: Made WebKit2 depend on DerivedSources and removed
        the explicit dependency of All on DerivedSources and WebKit2, since WebProcess depends on
        them.

2010-10-20  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/8423766> Cursor does not become "busy" when a page is
        loading with WebKit2

        Reviewed by Sam Weinig.

        * UIProcess/API/C/win/WKViewPrivate.cpp: Added.
        (WKViewSetOverrideCursor):
        Call the WebView's setOverrideCursor().

        * UIProcess/API/C/win/WKViewPrivate.h: Added.
        Declare WKViewSetOVerrideCursor().

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView):
        Initialize new member vars to 0.
        (WebKit::WebView::updateNativeCursor):
        If there is an override cursor, and the last cursor set from the web
        process was the arrow cursor, use the override cursor. Otherwise, use
        the cursor from the web process.
        (WebKit::WebView::setCursor):
        Record the web process's cursor, and call updateNativeCursor().
        (WebKit::WebView::setOverrideCursor):
        Record the override cursor, and call updateNativeCursor().

        * UIProcess/win/WebView.h:
        Declare setOverrideCursor() and updateNativeCursor(). Add members to
        hold the last cursor set from the web process and the override cursor.

        * win/WebKit2.vcproj:
        Add new files to project.

        * win/WebKit2Generated.make:
        Copy WKViewPrivate.h with other headers.

2010-10-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Crash evaluating JavaScript string that throws an exception
        https://bugs.webkit.org/show_bug.cgi?id=48092
        <rdar://problem/8487657>

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::sendMessage):
        m_connection can be null here; just return false if that is the case.
    
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInMainFrame):
        If the JSValue returned is null we just send along a null string.

2010-10-21  Adam Roben  <aroben@apple.com>

        Invalidate the plugin's HWND when NPN_InvalidateRect is called

        Fixes <http://webkit.org/b/48086> <rdar://problem/8482944> Silverlight
        doesn't repaint in WebKit2

        Reviewed by Anders Carlsson.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::invalidate): Call platformInvalidate before
        invalidating via the PluginController.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h: Added platformInvalidate.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformInvalidate):
        * WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp:
        (WebKit::NetscapePlugin::platformInvalidate):
        Stubbed out.

        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::NetscapePlugin::platformInvalidate): If the plugin is
        windowed, invalidate its HWND via ::InvalidateRect.

2010-10-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Find indicator does not draw found text in WebKit2 when page is not scrolled to top
        <rdar://problem/8562647>
        https://bugs.webkit.org/show_bug.cgi?id=48089

        We always want the selection rectangle in "WebCore window coordinates" which is the same
        as WKView coordinates in WebKit2.

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

2010-10-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Hyatt.

        Always clear the selection when the find string isn't found
        https://bugs.webkit.org/show_bug.cgi?id=48087
        <rdar://problem/8564640>

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

2010-10-21  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by John Sullivan.

        https://bugs.webkit.org/show_bug.cgi?id=48083
        <rdar://problem/8489082> Need WebKit2 API for private browsing

        This just adds glue code for passing the preference from embedder to WebCore. The aspects of
        private browsing that WebCore is responsible for do work, but cookies are not handled yet.

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::WebPreferencesStore):
        (WebKit::WebPreferencesStore::encode):
        (WebKit::WebPreferencesStore::decode):
        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetPrivateBrowsingEnabled):
        (WKPreferencesGetPrivateBrowsingEnabled):
        * UIProcess/API/C/WKPreferences.h:
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::setPrivateBrowsingEnabled):
        (WebKit::WebPreferences::privateBrowsingEnabled):
        * UIProcess/WebPreferences.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        Do what it takes to pass a single boolean from WebKit2 to WebCore. And we aren't even syncing
        the preference to user defaults yet.

2010-10-20  Adam Roben  <aroben@apple.com>

        Ask the UI client to close the page when the WKView receives a WM_CLOSE
        message

        Fixes <http://webkit.org/b/48044> <rdar://problem/8488446> Pressing
        Ctrl+W when viewing a full-page PDF destroys the WKView but doesn't
        close its parent window

        Reviewed by Jon Honeycutt.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::wndProc): Call through to WebPageProxy::tryClose when
        we receive a WM_CLOSE message, rather than passing the message along to
        ::DefWindowProcW. tryClose will end up asking the UI client to close
        the page, while ::DefWindowProcW would destroy us synchronously without
        notifying the UI client at all. One case where we'll get sent a
        WM_CLOSE message is when the user presses Ctrl+W when using the Adobe
        Reader plugin to view a PDF.

2010-10-20  Adam Roben  <aroben@apple.com>

        Remove confusing and redundant "host window" terminology from WKView on
        Windows

        WKView's "host window" is really just its HWND's parent window. The
        terminology has been updated to reflect this. The unnecessary
        WKViewGetHostWindow function has been removed, as it was a synonym for
        ::GetParent(WKViewGetWindow(view)).

        Fixes <http://webkit.org/b/48039> WKView's "host window" API is
        confusing

        Reviewed by Sam Weinig.

        * UIProcess/API/C/win/WKView.cpp:
        (WKViewCreate):
        (WKViewSetParentWindow):
        * UIProcess/API/C/win/WKView.h:
        Replaced "host window" with "parent window". Removed
        WKViewGetHostWindow.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView):
        (WebKit::WebView::setParentWindow):
        (WebKit::WebView::windowAncestryDidChange):
        (WebKit::WebView::close):
        * UIProcess/win/WebView.h:
        (WebKit::WebView::create):
        Replaced "host window" with "parent window". Removed m_hostWindow and
        hostWindow().

2010-10-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Null frame passed when running alert from UserScript run at document start
        <rdar://problem/8573809>
        https://bugs.webkit.org/show_bug.cgi?id=48036

        Don't initialize a Frame until after we have notified the UIProcess of its creation.
        This is necessary since arbitrary actions can happen during the call to Frame::init()
        such as the running of UserScripts.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createFrame):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createMainFrame):
        (WebKit::WebFrame::createSubframe):
        (WebKit::WebFrame::create):
        (WebKit::WebFrame::WebFrame):
        (WebKit::WebFrame::init):
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):

2010-10-21  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] PluginInfoStore does not set up mime types for plugins
        https://bugs.webkit.org/show_bug.cgi?id=48063

        * UIProcess/Plugins/qt/PluginInfoStoreQt.cpp:
        (WebKit::PluginInfoStore::getPluginInfo): Store the mime types
        that are supported by the plugin into the plugin argument.

2010-10-21  Juha Savolainen  <juha.savolainen@weego.fi>

        Reviewed by Kenneth Rohde Christiansen.

        This is initial implementation of QWKHistory. The QWKHistory class represents the history of a QWKPage.
        https://bugs.webkit.org/show_bug.cgi?id=47716

        Each QWKPage instance contains a history of a visited pages that can be accessed by QWKHistory::history().
        The QWKPagePrivate class creates QWKHistory in constructor.

        * UIProcess/API/qt/qwkhistory.cpp: Added.
        (QWKHistoryPrivate::QWKHistoryPrivate):
        (QWKHistoryPrivate::createHistory): Creates history object.
        (QWKHistoryPrivate::~QWKHistoryPrivate):
        (QWKHistory::QWKHistory):
        (QWKHistory::~QWKHistory):
        (QWKHistory::backListCount): Gets items count in back.
        (QWKHistory::forwardListCount): Gets items count in forward.
        (QWKHistory::count): Gets items count.
        * UIProcess/API/qt/qwkhistory.h: Added.
        * UIProcess/API/qt/qwkhistory_p.h: Added.
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::QWKPagePrivate):
        (QWKPagePrivate::~QWKPagePrivate):
        (QWKPage::history): Returns history object.
        * UIProcess/API/qt/qwkpage.h:
        * UIProcess/API/qt/qwkpage_p.h: Added history member variable.
        * WebKit2.pro: Added WKBackForwardList.h, WKBackForwardList.cpp and new files.

2010-10-14  Adam Roben  <aroben@apple.com>

        Don't require the plugin to always use the same NPP struct we gave it
        in NPP_New

        Neither WebCore, nor WebKit/mac, nor Firefox requires this, and
        Shockwave (at least) seems to use a different NPP struct that contains
        the same ndata member. So we shouldn't enforce it, either.

        Fixes <http://webkit.org/b/47690> <rdar://problem/8553020> Assertion
        failure in NetscapePlugin::fromNPP when using Shockwave in WebKit2

        Reviewed by John Sullivan.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::fromNPP): Removed the bogus assertion.

2010-10-20  Anders Carlsson  <andersca@apple.com>

        Fix clang++ build.

        * UIProcess/API/C/WKNativeEvent.h:

2010-10-20  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        Crash closing page with <video> element
        https://bugs.webkit.org/show_bug.cgi?id=47960
        <rdar://problem/8573297>

        I couldn't think of a good way to make a layout test for this because the
        crash isn't triggered by closing an iframe.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::scheduleCompositingLayerSync): NULL check drawingArea().

2010-10-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Out of process plug-ins are never asked to initially paint
        https://bugs.webkit.org/show_bug.cgi?id=47993
        <rdar://problem/8570342>

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction):
        Add new callMemberFunction overload.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::paintEntirePlugin):
        Set the dirty rect to be the entire plug-in rect and then paint the plug-in.

        * PluginProcess/PluginControllerProxy.messages.in:
        Add PaintEntirePlugin message.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::PluginProxy):
        Initialize m_pluginBackingStoreContainsValidData to false.

        (WebKit::PluginProxy::paint):
        If m_pluginBackingStoreContainsValidData is false, synchronously ask the plug-in to paint,
        then blit the plug-in backing store into our own backing store.

        (WebKit::PluginProxy::geometryDidChange):
        Set m_pluginBackingStoreContainsValidData to false.

        (WebKit::PluginProxy::update):
        Set m_pluginBackingStoreContainsValidData to true if the plug-in has painted its entire area.

2010-10-19  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Geoffrey Garen.

        ASSERTION FAILURE: !m_adoptionIsRequired for the WebFrame under the
        InjectedBundlePageLoaderClient::didClearWindowObjectForFrame callback.
        https://bugs.webkit.org/show_bug.cgi?id=47960

        Do not try to initialize the coreFrame (which results in the
        InjectedBundlePageLoaderClient::didClearWindowObjectForFrame being called) until after the
        WebFrame constructor has returned and the WebFrame has been adopted.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::create):
        Moved the call to init the coreFrame here ...
        (WebKit::WebFrame::WebFrame):
        ... from here.

2010-10-20  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Merge ColorSpace and ImageColorSpace enums
        https://bugs.webkit.org/show_bug.cgi?id=47922

        Renamed ColorSpace enum entries DeviceColorSpace and sRGBColorSpace to ColorSpaceDeviceRGB and ColorSpaceSRGB
        to follow webkit style rules.

        * UIProcess/FindIndicator.cpp:
        (WebKit::FindIndicator::draw):
        * WebProcess/WebPage/FindPageOverlay.cpp:
        (WebKit::FindPageOverlay::drawRect):

2010-10-20  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed.

        Fix Qt/WebKit2 build, also needs a svg/properties include.

        * WebKit2.pro:

2010-10-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Fix MiniBrowser crashes during startup and shutdown
        https://bugs.webkit.org/show_bug.cgi?id=47954

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::sharedProcessContext):
        Initialize the main thread.
        
        (WebKit::WebContext::create):
        Ditto.

        (WebKit::WebContext::WebContext):
        Add the language observer here so we know that it will always be set up.

        (WebKit::WebContext::ensureWebProcess):
        Remove code.

        * UIProcess/WebContext.h:

2010-10-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Coalesce plug-in drawing
        https://bugs.webkit.org/show_bug.cgi?id=47939

        Coalesce plug-in drawing in the same manner as we do it in the chunked update drawing area.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::PluginControllerProxy):
        Initialize m_waitingForDidUpdate to false.

        (WebKit::PluginControllerProxy::startPaintTimer):
        Move code from invalidate out to here. Don't start the paint timer if m_waitingForDidUpdate is true.

        (WebKit::PluginControllerProxy::invalidate):
        Call startPaintTimer.

        (WebKit::PluginControllerProxy::didUpdate):
        Set m_waitingForDidUpdate to false and start the paint timer.

        * PluginProcess/PluginControllerProxy.messages.in:
        Add DidUpdate message.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::PluginProxy):
        Initialize m_waitingForPaintInResponseToUpdate to false.

        (WebKit::PluginProxy::paint):
        If m_waitingForPaintInResponseToUpdate is true, send a DidUpdate message.

        (WebKit::PluginProxy::update):
        Set m_waitingForPaintInResponseToUpdate to true.

2010-10-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add alternateHTMLString and unreachableURL API to WebKit2
        <rdar://problem/8557864>
        https://bugs.webkit.org/show_bug.cgi?id=47938

        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameCopyUnreachableURL):
        * UIProcess/API/C/WKFrame.h:
        Add accessor for the unreachableURL if one is set. It will only be
        set during a loadAlternateHTMLString and will be unset on the next normal
        didStartProvisionalLoadForFrame call.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageLoadHTMLString): Remove whitespace.
        (WKPageLoadAlternateHTMLString):
        * UIProcess/API/C/WKPage.h:
        Add function to load a string as "alternate", meant for use as error pages.

        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::setUnreachableURL): 
        (WebKit::WebFrameProxy::unreachableURL):
        Add setter/getter for the unreachableURL.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadAlternateHTMLString):
        Plumb through the call to loadAlternateHTMLString to the WebProcess
        and set the main frame's unreachableURL. This does nothing if no pages
        have ever been loaded in this page.

        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        If this is not a provisional load of substitute data for an unreachableURL
        (e.g. someone who called WKPageLoadAlternateHTMLString), reset the
        frame's unreachableURL.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        Update function signatures.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidStartProvisionalLoad):
        Pass whether or not this is a load of SubstituteData for an unreachableURL
        to the UIProcess.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadData):
        (WebKit::WebPage::loadAlternateHTMLString):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Plumb through the loading of the alternate HTML string. 

2010-10-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=47933
        <rdar://problem/8494337> navigator.language doesn't work in WebKit2

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        Pass language code when creating a web process.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::~WebContext): Don't send language change notifications to the destroyed
        process.
        (WebKit::languageChanged): Make web process know about the change.
        (WebKit::WebContext::ensureWebProcess): Fill WebProcessCreationParameters, and register for
        change notifications.

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

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess): Use passed in language as an override. Web process
        doesn't know about per-application settings, so it depends on UI process for those.
        (WebKit::WebProcess::languageChanged): Update the language override when messaged.

        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        Added LanguageChanged message.

2010-10-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Stop waiting for sync replies if the connection is closed
        https://bugs.webkit.org/show_bug.cgi?id=47930

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::Connection):
        Initialize m_shouldWaitForSyncReplies to true.

        (CoreIPC::Connection::sendSyncMessage):
        Don't attempt to send a message if m_shouldWaitForSyncReplies is false.

        (CoreIPC::Connection::waitForSyncReply):
        Return if m_shouldWaitForSyncReplies was set to false.

        (CoreIPC::Connection::connectionDidClose):
        Set m_shouldWaitForSyncReplies to true and signal the semaphore.

        * Platform/CoreIPC/Connection.h:

2010-10-19  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebProcess/WebCoreSupport/win/WebErrorsWin.cpp:
        (WebKit::interruptForPolicyChangeError): Add a missing comma.

2010-10-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Part 2 of:
        Need to include WKErrorRef in the WKPageDidFail... functions
        <rdar://problem/8564110>
        https://bugs.webkit.org/show_bug.cgi?id=47871

        * Shared/API/c/WKError.cpp:
        (WKErrorCopyWKErrorDomain):
        * Shared/API/c/WKError.h:
        * Shared/WebError.cpp: Added.
        (WebKit::WebError::webKitErrorDomain):
        * Shared/WebError.h:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/mac/WebErrorsMac.mm:
        (+[NSError _webKitErrorWithCode:failingURL:]):
        (registerErrors):
        (WebKit::blockedError):
        (WebKit::cannotShowURLError):
        (WebKit::interruptForPolicyChangeError):
        (WebKit::cannotShowMIMETypeError):
        * WebProcess/WebCoreSupport/win/WebErrorsWin.cpp:
        (WebKit::cancelledError):
        (WebKit::blockedError):
        (WebKit::cannotShowURLError):
        (WebKit::interruptForPolicyChangeError):
        * win/WebKit2.vcproj:

2010-10-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Need to include WKErrorRef in the WKPageDidFail... functions
        <rdar://problem/8564110>
        https://bugs.webkit.org/show_bug.cgi?id=47871

        Give WebError a WebCore::ResourceError backing and start passing it over the wire
        for failure cases.  Also, fill out the WKError API to include domain, errorCode, 
        failingURL and localizedDescription.

        * Shared/API/c/WKError.cpp:
        (WKErrorCopyDomain):
        (WKErrorGetErrorCode):
        (WKErrorCopyFailingURL):
        (WKErrorCopyLocalizedDescription):
        * Shared/API/c/WKError.h:
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebError.h:
        (WebKit::WebError::create):
        (WebKit::WebError::domain):
        (WebKit::WebError::errorCode):
        (WebKit::WebError::failingURL):
        (WebKit::WebError::localizedDescription):
        (WebKit::WebError::platformError):
        (WebKit::WebError::WebError):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/qt/ClientImpl.cpp:
        (qt_wk_didFailProvisionalLoadWithErrorForFrame):
        (qt_wk_didFailLoadWithErrorForFrame):
        * UIProcess/API/qt/ClientImpl.h:
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::didFailProvisionalLoadWithErrorForFrame):
        (WebKit::WebLoaderClient::didFailLoadWithErrorForFrame):
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::didFailProvisionalLoadWithErrorForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didFailLoadWithErrorForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFailLoad):

2010-10-19  Christian Sejersen  <christian.webkit@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        Scratchbox has an old version of python as the default one, so
        force it to use version 2.6.
        https://bugs.webkit.org/show_bug.cgi?id=47895

        * DerivedSources.pro:

2010-10-19  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Antti Koivisto.

        [Qt] WebKit2 MacOS build fix
        https://bugs.webkit.org/show_bug.cgi?id=47897

        Qt WebKit2 MacOS build fix.

        * UIProcess/WebPageProxy.cpp:
        * WebKit2.pri:
        * WebKit2.pro:

2010-10-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Initialize the API client.

        * Shared/APIClient.h:
        (WebKit::APIClient::APIClient):

2010-10-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        WebKit2 should handle dismissing the Find overlay on mouse-down
        https://bugs.webkit.org/show_bug.cgi?id=47854

        * WebProcess/WebPage/FindPageOverlay.cpp:
        (WebKit::FindPageOverlay::mouseEvent):
        Dismiss the find UI on MouseDown.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mouseEvent):
        If there's a page overlay, let it have a go at the event.

2010-10-18  Anders Carlsson  <andersca@apple.com>

        Fix clang build.

        * UIProcess/API/mac/FindIndicatorWindow.mm:
        (-[WebFindIndicatorWindowAnimation _initWithFindIndicatorWindow:WebKit::animationProgressCallback:WebKit::FindIndicatorWindow::animationDidEndCallback:WebKit::FindIndicatorWindow::]):
        (WebKit::FindIndicatorWindow::setFindIndicator):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPopupMenuProxy.h:
        * WebProcess/WebCoreSupport/WebPopupMenu.h:

2010-10-18  Sam Weinig  <sam@webkit.org>

        Fix Qt build.

        * WebKit2.pro:

2010-10-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Simon Fraser.

        Don't try to change accelerated compositing mode if the web page is closed
        https://bugs.webkit.org/show_bug.cgi?id=47852

        changeAcceleratedCompositingMode ends up sending a sync message to the UI process which is unnecessary if
        the UI process is being torn down.
        
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::changeAcceleratedCompositingMode):
        (WebKit::WebPage::close):
        * WebProcess/WebPage/WebPage.h:

2010-10-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8036034>
        WebKit2's WebProcess dies immediately on Mac due to DYLD_FRAMEWORK_PATH problem

        Pass the path to the WebKit2 framework along to the web process and don't rely on DYLD_FRAMEWORK_PATH being set.

        * Shared/mac/CommandLineMac.cpp:
        (WebKit::CommandLine::parse):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        * mac/MainMac.cpp:
        (main):

2010-10-18  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        Need a WebKit2 equivalent of the WebKit1 WebUserContentURLPattern.
        https://bugs.webkit.org/show_bug.cgi?id=47783

        * Shared/API/c/WKBase.h:

        * Shared/API/c/WKSharedAPICast.h:

        * Shared/API/c/WKUserContentURLPattern.cpp: Added.
        (WKUserContentURLPatternGetTypeID):
        (WKUserContentURLPatternCreate):
        (WKUserContentURLPatternMatchesURL):
        * Shared/API/c/WKUserContentURLPattern.h: Added.

        * Shared/APIObject.h:

        * Shared/UserMessageCoders.h:
        Use the original pattern string to encode and decode a UserContentURLPattern.
        (WebKit::UserMessageEncoder::baseEncode):
        (WebKit::UserMessageDecoder::baseDecode):

        * Shared/WebUserContentURLPattern.h: Added.
        (WebKit::WebUserContentURLPattern::create):
        (WebKit::WebUserContentURLPattern::matchesURL):
        Use WebCore::UserContentURLPattern::matches.
        (WebKit::WebUserContentURLPattern::patternString):
        Expose the pattern string used to create the UserContentURLPattern for the purpose of
        encoding and decoding.
        (WebKit::WebUserContentURLPattern::WebUserContentURLPattern):
        (WebKit::WebUserContentURLPattern::type):

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Add WKUserContentURLPattern.h/.cpp and WebUserContentURLPattern.h

        * win/WebKit2Generated.make:
        Copy over WKUsercontentURLPattern into the output directory.

2010-10-18  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformHandleMouseEnterEvent):
        (WebKit::NetscapePlugin::platformHandleMouseLeaveEvent):
        (WebKit::NetscapePlugin::platformSetFocus):

2010-10-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Add matchCountDidChange callback
        https://bugs.webkit.org/show_bug.cgi?id=47840

        * UIProcess/API/C/WKPage.h:
        Add matchCountDidChange WKPageFindClient callback.
        
        * UIProcess/WebFindClient.cpp:
        (WebKit::WebFindClient::matchCountDidChange):
        Call the WKPageFindClient callback.

        * UIProcess/WebPageProxy.messages.in:
        Add MatchCountDidChange message.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::countStringMatches):
        Move code here from WebPage.

        (WebKit::FindController::findString):
        Send the MatchCountDidChange message.
        
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::countStringMatches):
        Move this code over to FindController.

2010-10-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Use nullptr instead of 0.

        * UIProcess/API/mac/FindIndicatorWindow.mm:
        (WebKit::FindIndicatorWindow::closeWindow):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView renewGState]):
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::removePluginProxy):

2010-10-15  Sam Weinig  <sam@webkit.org>

        Fix Qt build.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::createPopupMenuProxy):

2010-10-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Popup widget support (<select>)
        <rdar://problem/8147746>
        https://bugs.webkit.org/show_bug.cgi?id=47740

        Add initial support for popup menus. Only works on the mac at this time.

        * Shared/WebPopupItem.cpp: Added.
        (WebKit::WebPopupItem::WebPopupItem):
        (WebKit::WebPopupItem::encode):
        (WebKit::WebPopupItem::decode):
        * Shared/WebPopupItem.h: Added.
        Serializable representation of a menu item.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::createPopupMenuProxy):
        Create a WebPopupMenuProxyMac.

        * UIProcess/API/qt/qwkpage.cpp:
        (WebView::createPopupMenuProxy):
        * UIProcess/API/qt/qwkpage_p.h:
        Create a WebPopupMenuProxyQt (which is just a stub right now).

        (WebKit::WebPopupMenuProxyWin::create):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::createPopupMenuProxy):
        * UIProcess/win/WebView.h:
        Create a WebPopupMenuProxyWin (which is just a stub right now).

        * UIProcess/PageClient.h:
        Add new client function to get a platform specific WebPopupMenuProxy.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::showPopupMenu):
        (WebKit::WebPageProxy::hidePopupMenu):
        (WebKit::WebPageProxy::processDidExit):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        Pipe through calls to set up the menu.

        * UIProcess/mac/WebPopupMenuProxyMac.h: Added.
        (WebKit::WebPopupMenuProxyMac::create):
        * UIProcess/mac/WebPopupMenuProxyMac.mm: Added.
        (WebKit::WebPopupMenuProxyMac::WebPopupMenuProxyMac):
        (WebKit::WebPopupMenuProxyMac::~WebPopupMenuProxyMac):
        (WebKit::WebPopupMenuProxyMac::populate):
        (WebKit::WebPopupMenuProxyMac::showPopupMenu):
        (WebKit::WebPopupMenuProxyMac::hidePopupMenu):
        Add UI process side implementation. Currently this does not support
        custom fonts as the old implementation did.

        * UIProcess/qt/WebPopupMenuProxyQt.cpp: Added.
        (WebKit::WebPopupMenuProxyQt::WebPopupMenuProxyQt):
        (WebKit::WebPopupMenuProxyQt::~WebPopupMenuProxyQt):
        (WebKit::WebPopupMenuProxyQt::showPopupMenu):
        (WebKit::WebPopupMenuProxyQt::hidePopupMenu):
        * UIProcess/qt/WebPopupMenuProxyQt.h: Added.
        (WebKit::WebPopupMenuProxyQt::create):
        * UIProcess/win/WebPopupMenuProxyWin.cpp: Added.
        (WebKit::WebPopupMenuProxyWin::WebPopupMenuProxyWin):
        (WebKit::WebPopupMenuProxyWin::~WebPopupMenuProxyWin):
        (WebKit::WebPopupMenuProxyWin::showPopupMenu):
        (WebKit::WebPopupMenuProxyWin::hidePopupMenu):
        * UIProcess/win/WebPopupMenuProxyWin.h: Added.
        Add stubbed out implementations for Qt and windows.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createPopupMenu):
        (WebKit::WebChromeClient::createSearchPopupMenu):
        Pass the page in the create function.

        * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
        (WebKit::WebPopupMenu::create):
        (WebKit::WebPopupMenu::WebPopupMenu):
        (WebKit::WebPopupMenu::didChangeSelectedIndex):
        (WebKit::WebPopupMenu::populateItems):
        (WebKit::WebPopupMenu::show):
        (WebKit::WebPopupMenu::hide):
        * WebProcess/WebCoreSupport/WebPopupMenu.h:
        (WebKit::WebPopupMenu::disconnectFromPage):
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp:
        (WebKit::WebSearchPopupMenu::create):
        (WebKit::WebSearchPopupMenu::WebSearchPopupMenu):
        (WebKit::WebSearchPopupMenu::popupMenu):
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):
        (WebKit::WebPage::setActivePopupMenu):
        (WebKit::WebPage::didChangeSelectedIndexForActivePopupMenu):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Pipe through calls to set up the menu.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Add new files.

2010-10-15  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * UIProcess/API/mac/FindIndicatorWindow.mm:
        (-[WebFindIndicatorWindowAnimation setCurrentProgress:]):

2010-10-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Add 'didDraw' callback for framerate tracking
        https://bugs.webkit.org/show_bug.cgi?id=47478
        
        Hook up the 'didDraw' callback for WebKit2 on Mac.

        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView drawRect:]):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didDraw):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::didDraw):
        * UIProcess/WebUIClient.h:

2010-10-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Make the find indicator window fade out when requested
        https://bugs.webkit.org/show_bug.cgi?id=47747

        * UIProcess/API/mac/FindIndicatorWindow.h:
        * UIProcess/API/mac/FindIndicatorWindow.mm:
        Add WebFindIndicatorWindowAnimation - an NSAnimation subclass that takes two
        C++ member function pointers and invokes them the animation progress changes and
        when the animation stops.

        (-[WebFindIndicatorWindowAnimation setCurrentProgress:]):
        Call the _animationProgressCallback.

        (-[WebFindIndicatorWindowAnimation animationDidEnd:]):
        Call the _animationDidEndCallback.

        (WebKit::FindIndicatorWindow::FindIndicatorWindow):
        Initialize the fade out start timer.

        (WebKit::FindIndicatorWindow::setFindIndicator):
        When asked to fade out, we start the fade out timer.

        (WebKit::FindIndicatorWindow::closeWindow):
        Stop the fade out timer and the fade out animation.

        (WebKit::FindIndicatorWindow::startFadeOutTimerFired):
        Create a fade out animation.

        (WebKit::FindIndicatorWindow::fadeOutAnimationCallback):
        Update the window alpha.

        (WebKit::FindIndicatorWindow::fadeOutAnimationDidEnd):
        Close the window.

2010-10-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Move find indicator window logic to WKView
        https://bugs.webkit.org/show_bug.cgi?id=47739

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setFindIndicator):
        Call -[WKView _setFindIndicator:fadeOut:].

        * UIProcess/API/mac/WKView.mm:
        (-[WKView renewGState]):
        Hide the find indicator.

        (-[WKView _setFindIndicator:fadeOut:]):
        Move the find indicator logic here.

2010-10-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Hide the find indicator/overlay when necessary
        https://bugs.webkit.org/show_bug.cgi?id=47737

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::invalidateContentsForSlowScroll):
        Hide the find indicator.

        (WebKit::WebChromeClient::scroll):
        Ditto.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidStartProvisionalLoad):
        Hide the find indicator and the find overlay.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::findString):
        Always hide all previous find matches. Only clear the selection if the string
        not found wasn't empty.

        (WebKit::FindController::hideFindUI):
        Uninstall the page overlay and hide the find indicator.

        (WebKit::FindController::hideFindIndicator):
        Rename resetFindIndicator to hideFindIndicator.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::uninstallPageOverlay):
        Invalidate the entire page.

2010-10-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add FindIndicatorWindow class
        https://bugs.webkit.org/show_bug.cgi?id=47731

        * UIProcess/API/mac/FindIndicatorWindow.h: Added.
        * UIProcess/API/mac/FindIndicatorWindow.mm: Added.
        (-[WebFindIndicatorView _initWithFindIndicator:WebKit::]):
        Initialize the find indicator view.

        (-[WebFindIndicatorView drawRect:]):
        Ask the find indicator to draw.

        (-[WebFindIndicatorView isFlipped]):
        Return YES.

        (WebKit::FindIndicatorWindow::~FindIndicatorWindow):
        Make sure to close the window.

        (WebKit::FindIndicatorWindow::setFindIndicator):
        Update the find indicator window.

        (WebKit::FindIndicatorWindow::closeWindow):
        Close and release the window.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setFindIndicator):
        Create a find indicator window.

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

2010-10-15  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * UIProcess/API/qt/qwkpage.cpp:
        * UIProcess/win/WebView.cpp:

2010-10-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add a FindIndicator class
        https://bugs.webkit.org/show_bug.cgi?id=47635

        * Shared/BackingStore.h:
        (WebKit::BackingStore::bounds):
        New function that returns the bounds of the backing store.

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setFindIndicator):
        Add stub.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::setFindIndicator):
        Add stub.

        * UIProcess/FindIndicator.cpp: Added.
        * UIProcess/FindIndicator.h:

        * UIProcess/PageClient.h:
        Add setFindIndicator client member function.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setFindIndicator):
        Call PageClient::setFindIndicator.

        * UIProcess/WebPageProxy.messages.in:
        Add a fadeOut boolean to the message.

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

        * UIProcess/win/WebView.h:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::findString):
        (WebKit::FindController::updateFindIndicator):
        (WebKit::FindController::resetFindIndicator):
        * WebProcess/WebPage/FindController.h:
        * win/WebKit2.vcproj:

2010-10-14  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Plumb accelerated compositing prefs through WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=46860
        <rdar://problem/8495312>
        
        Wire up the prefs to enable accelerated compositing, and
        show debug borders and repaint counters.

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::WebPreferencesStore):
        (WebKit::WebPreferencesStore::encode):
        (WebKit::WebPreferencesStore::decode):
        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferencesPrivate.cpp:
        (WKPreferencesSetAcceleratedCompositingEnabled):
        (WKPreferencesGetAcceleratedCompositingEnabled):
        (WKPreferencesSetCompositingBordersVisible):
        (WKPreferencesGetCompositingBordersVisible):
        (WKPreferencesSetCompositingRepaintCountersVisible):
        (WKPreferencesGetCompositingRepaintCountersVisible):
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::setAcceleratedCompositingEnabled):
        (WebKit::WebPreferences::acceleratedCompositingEnabled):
        (WebKit::WebPreferences::setCompositingBordersVisible):
        (WebKit::WebPreferences::compositingBordersVisible):
        (WebKit::WebPreferences::setCompositingRepaintCountersVisible):
        (WebKit::WebPreferences::compositingRepaintCountersVisible):
        * UIProcess/WebPreferences.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::preferencesDidChange):
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/WebPage.h:

2010-10-14  Ada Chan  <adachan@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Store the certificate chain in PlatformCertificateInfo.
        https://bugs.webkit.org/show_bug.cgi?id=47603

        * Shared/API/c/win/WKCertificateInfoWin.cpp:
        (WKCertificateInfoGetCertificateChainLength):
        (WKCertificateInfoGetCertificateContextAtIndex):
        * Shared/API/c/win/WKCertificateInfoWin.h:
        * Shared/win/PlatformCertificateInfo.cpp:
        (WebKit::PlatformCertificateInfo::PlatformCertificateInfo): Get the chain context from the response and duplicate the certificate contexts
        in the chain to store in m_certificateChain.
        (WebKit::PlatformCertificateInfo::~PlatformCertificateInfo): Free all the certificate contexts in the chain.
        (WebKit::PlatformCertificateInfo::operator=): Duplicate the certificate contexts from the other PlatformCertificateInfo's certificate chain
        to store in m_certificateChain.
        (WebKit::PlatformCertificateInfo::encode):
        (WebKit::PlatformCertificateInfo::decode):
        (WebKit::PlatformCertificateInfo::clearCertificateChain): Free all the certificate contexts in the chain and clear the vector.
        * Shared/win/PlatformCertificateInfo.h:
        (WebKit::PlatformCertificateInfo::certificateChain):

2010-10-14  Adam Roben  <aroben@apple.com>

        Make sure WebKit2 only loads each plugin once

        Fixes <http://webkit.org/b/47677> <rdar://problem/8552178> WebKit2 can
        load the same plugin multiple times

        Reviewed by Sam Weinig.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::addFromVector): Helper function that adds all the elements
        from a Vector to a HashSet.
        (WebKit::PluginInfoStore::loadPluginsIfNecessary): Put all the plugin
        paths into a HashSet, then load the plugins specified in the HashSet.
        On Windows, the HashSet is case-insensitive, just like the file
        system.

        * UIProcess/Plugins/PluginInfoStore.h: Removed loadPluginsInDirectory,
        which is no longer used.

        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        (WebKit::addPluginPathsFromRegistry):
        (WebKit::PluginInfoStore::individualPluginPaths):
        Changed to store the paths in a Vector instead of a HashSet now that
        loadPluginsIfNecessary will handle duplicates for us.

2010-10-14  Adam Roben  <aroben@apple.com>

        Load plugins that are specified in the MozillaPlugins registry key

        Fixes <http://webkit.org/b/44271> <rdar://problem/8329750> WebKit2
        should load plugins specified in the MozillaPlugins registry key (like
        old WebKit does)

        I couldn't think of a good way to test this.

        Reviewed by Steve Falkenburg.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::loadPluginsIfNecessary): Also load plugins
        specified by individualPluginPaths.

        * UIProcess/Plugins/PluginInfoStore.h: Added individualPluginPaths and
        some comments.

        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::individualPluginPaths):
        * UIProcess/Plugins/qt/PluginInfoStoreQt.cpp:
        (WebKit::PluginInfoStore::individualPluginPaths):
        Stubbed out.

        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        (WebKit::addPluginPathsFromRegistry):
        (WebKit::PluginInfoStore::individualPluginPaths):
        Ported this code from WebCore's PluginDatabaseWin.cpp. I slightly
        cleaned it up and changed it to use a case-insensitive hash, since
        paths on Windows are case-insensitive.

2010-10-14  Adam Roben  <aroben@apple.com>

        Call ::DefWindowProcW for unhandled key events

        ::DefWindowProcW does important things for at least some key events
        (e.g., it generates a WM_SYSCOMMAND message when the Alt key is
        released), so we need to make sure to call it when we don't handle key
        events.

        Fixes <http://webkit.org/b/47671> <rdar://problem/8435594> Pressing
        the Alt key when MiniBrowser's WKView is focused doesn't send focus to
        the menu bar

        Reviewed by Steve Falkenburg.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didNotHandleKeyEvent):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::didNotHandleKeyEvent):
        * UIProcess/API/qt/qwkpage_p.h:
        Stubbed out didNotHandleKeyEvent.

        * UIProcess/PageClient.h: Added didNotHandleKeyEvent.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveEvent): Tell the PageClient about the
        unhandled event.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::onKeyEvent): Added a comment.
        (WebKit::WebView::didNotHandleKeyEvent): Pass the event to
        ::DefWindowProcW.

        * UIProcess/win/WebView.h: Added didNotHandleKeyEvent.

2010-10-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Jon Honeycutt.

        Memory smasher in WebKit2 InjectedBundleHitTestResult::absoluteLinkURL
        https://bugs.webkit.org/show_bug.cgi?id=47648

        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
        (WebKit::InjectedBundleHitTestResult::absoluteLinkURL):
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.h: Return a String instead of
        a const String&.

2010-10-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Jon Honeycutt.

        PlatformMouseEvents need to contain modifier flags
        https://bugs.webkit.org/show_bug.cgi?id=47651

        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformMouseEvent::WebKit2PlatformMouseEvent):
        Fill in m_modifierFlags.

2010-10-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Draw the find overlay holes
        https://bugs.webkit.org/show_bug.cgi?id=47631

        * WebProcess/WebPage/FindPageOverlay.cpp:
        (WebKit::FindPageOverlay::drawRect):
        Draw the white frames and the holes.

2010-10-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Use WKSI to get wheel event deltas
        https://bugs.webkit.org/show_bug.cgi?id=47617

        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::createWebWheelEvent):
        Call WKGetWheelEventDeltas.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:pageNamespaceRef:]):
        Call InitWebCoreSystemInterface.

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

2010-10-13  Adam Roben  <aroben@apple.com>

        Fix the Cairo build

        * Shared/cairo/BackingStoreCairo.cpp: Added.
        (WebKit::BackingStore::createGraphicsContext):
        (WebKit::BackingStore::paint):
        Stubbed out.

        * win/WebKit2.vcproj: Build BackingStoreCG.cpp in CG builds and
        BackingStoreCairo.cpp in Cairo builds.

2010-10-13  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * Shared/cg/BackingStoreCG.cpp:

2010-10-13  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=43987
        Switch XMLHttpRequest, FileReader, and FileReaderSync to use a Stringbuilder
        to construct their internal result string.  Remove ScriptString (this is now
        redundant).

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

2010-10-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Send over find indicator information to the UI process
        https://bugs.webkit.org/show_bug.cgi?id=47612

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setFindIndicator):
        Add stub.

        * UIProcess/WebPageProxy.messages.in:
        Add SetFindIndicator.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::FindController):
        Initialize m_isShowingFindIndicator.

        (WebKit::FindController::findString):
        Update the find indicator if needed.

        (WebKit::FindController::updateFindIndicator):
        Compute find indicator information, paint the find indicator text into a 
        backing store and send it over.

        (WebKit::FindController::resetFindIndicator):
        Send a SetFindIndicator message with a null backing store.

2010-10-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add BackingStoreQt.cpp file with stubbed out BackingStore member functions
        https://bugs.webkit.org/show_bug.cgi?id=47614

        * Shared/BackingStore.h:
        Remove unused include.

        * Shared/qt/BackingStoreQt.cpp: Added.
        (WebKit::BackingStore::createGraphicsContext):
        (WebKit::BackingStore::paint):

        * WebKit2.pro:
        Add BackingStore.cpp, BackingStore.h and BackingStoreQt.cpp

2010-10-13  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fixes after r69538.

        * UIProcess/WebBackForwardList.h: Add missing include directive
        for CoreFoundation.
        * UIProcess/cf/WebBackForwardListCF.cpp: Add missing include
        directives for RetainPtr.h and CoreFoundation.
        * UIProcess/cf/WebPageProxyCF.cpp: Add missing include directive
        for RetainPtr.h.

2010-10-13  Adam Roben  <aroben@apple.com>

        Start compiling BackingStore on Windows

        Rubber-stamped by Anders Carlsson.

        * win/WebKit2.vcproj: Added BackingStore.

2010-10-13  Adam Roben  <aroben@apple.com>

        Rename BackingStoreMac.mm to BackingStoreCG.cpp

        There's nothing Mac-specific about this file.

        Rubber-stamped by Anders Carlsson.

        * Shared/cg/BackingStoreCG.cpp: Renamed from WebKit2/Shared/mac/BackingStoreMac.mm.

        * WebKit2.xcodeproj/project.pbxproj: Updated for rename.

2010-10-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Allow all signals to be delivered to the web process
        https://bugs.webkit.org/show_bug.cgi?id=47602
        <rdar://problem/8546399>

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

2010-10-12  Adam Roben  <aroben@apple.com>

        Let WebCore handle scrolling when the spacebar is pressed on Windows

        WebCore already has code to do this, and WebKit2 was doing it on
        keydown instead of keypress, which caused problems with text fields.

        WebCore's spacebar-handling code is currently compiled out on Mac and
        Qt, so we continue to handle spacebar in WebKit2 on those platforms.

        Fixes <http://webkit.org/b/47544> <rdar://problem/8540645> REGRESSION:
        Pressing spacebar in a text field in WebKit2 does not insert a space,
        scrolls the page instead

        Test: WebKit2/SpacebarScrolling

        Reviewed by Sam Weinig.

        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent):
        Removed handling for spacebar presses. WebCore already does this for
        us, and does it better.

2010-10-12  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Jon Honeycutt.

        Add ability for WK2 to set domain relaxation forbidden for a URL scheme.
        https://bugs.webkit.org/show_bug.cgi?id=47562

        Add the schemes for which domain relaxation is forbidden to the
        WebProcessCreationParameters.
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:

        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetDomainRelaxationForbiddenForURLScheme):
        * UIProcess/API/C/WKContextPrivate.h:

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureWebProcess):
        Copy over the schemes for which domain relaxation is forbidden to
        WebProcessCreationParameters.
        (WebKit::WebContext::setDomainRelaxationForbiddenForURLScheme):
        Only send a message to the WebProcess if it is valid.
        * UIProcess/WebContext.h:

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        Set domain relaxation forbidden for the schemes in
        WebProcesCreationParameters.urlSchemesForWhichDomainRelaxationIsForbidden.
        (WebKit::WebProcess::setDomainRelaxationForbiddenForURLScheme):
        * WebProcess/WebProcess.h:

        * WebProcess/WebProcess.messages.in:
        Add the SetDomainRelaxationFobiddenForURLScheme message.

2010-10-13  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Simplify code generation in WebKit2/DerivedSources.pro
        https://bugs.webkit.org/show_bug.cgi?id=47543

        * DerivedSources.pro: General generator rules added instead of copy/paste code to converge Makefile.DerivedSources.
        * WebKit2.pro: PluginProcess' headers and sources added.

2010-10-13  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Use flag instead of magic word to mark memory map free/used

        Original patch by Antti Koivisto.

        * Shared/qt/MappedMemory.h:
        (WebKit::MappedMemory::mapSize):
        (WebKit::MappedMemory::markUsed):
        (WebKit::MappedMemory::markFree):
        (WebKit::MappedMemory::isFree):
        (WebKit::MappedMemory::data):
        * Shared/qt/MappedMemoryPool.cpp:
        (WebKit::MappedMemoryPool::cleanUp):
        * Shared/qt/UpdateChunk.cpp:
        (WebKit::mapMemory):
        (WebKit::mapFile):
        (WebKit::UpdateChunk::data):
        (WebKit::UpdateChunk::decode):

2010-10-12  Jon Honeycutt  <jhoneycutt@apple.com>

        Build fix. Unreviewed.

        * win/WebKit2Generated.make:
        Copy over WKBundleHitTestResult.h.

2010-10-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin "Sometimes" Barraclough.

        Add API to get the target frame from a HitTestResult.

        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp:
        (WKBundleHitTestResultGetFrame):
        (WKBundleHitTestResultGetTargetFrame):
        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.h:
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
        (WebKit::InjectedBundleHitTestResult::frame): Rename from webFrame.
        (WebKit::InjectedBundleHitTestResult::targetFrame):
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.h:

2010-10-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Paint the find overlay background
        https://bugs.webkit.org/show_bug.cgi?id=47565

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::findString):
        Don't show the overlay if we have too many matches.

        * WebProcess/WebPage/FindPageOverlay.cpp:
        (WebKit::FindPageOverlay::rectsForTextMatches):
        Get the rects for all text matches.

        (WebKit::FindPageOverlay::drawRect):
        Assert that we're only being called if there are any text matches.
        Paint the background.

2010-10-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        When a provisional load fails, the provisional URL returned
        from WKFrameCopyProvisionalURL should be empty
        <rdar://problem/8540878>
        https://bugs.webkit.org/show_bug.cgi?id=47546

        API Tests: FailedLoad (updated).

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didFailProvisionalLoad): Empty out the provisional URL.

2010-10-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Start fleshing out find page overlays
        https://bugs.webkit.org/show_bug.cgi?id=47559

        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toFindOptions):
        Handle the kWKFindOptionsShowFindIndicator flag.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        Add new files.
        
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::FindController):
        Initialize the find page overlay.

        (WebKit::FindController::findString):
        Hide or show the find page overlay.

        (WebKit::FindController::findPageOverlayDestroyed):
        Null out the find page overlay.

        * WebProcess/WebPage/FindPageOverlay.cpp: Added.
        * WebProcess/WebPage/FindPageOverlay.h: Added.
        Add stubbed out FindPageOverlay class.

        * WebProcess/WebPage/PageOverlay.cpp: Added.
        (WebKit::PageOverlay::setPage):
        Set the parent web page.

        (WebKit::PageOverlay::setNeedsDisplay):
        Invalidate the parent web page.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::drawRect):
        If there's a page overlay, ask it to draw on top of the page contents.

        (WebKit::WebPage::installPageOverlay):
        Set the page overlay.

        (WebKit::WebPage::uninstallPageOverlay):
        Clear the page overlay.

        * win/WebKit2.vcproj:
        Add new files.

2010-10-12  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Jon Honeycutt.

        Add ability for WK2 to register a scheme as secure.
        https://bugs.webkit.org/show_bug.cgi?id=47557

        Add the schemes that need to be registered as secure to the WebProcessCreationParameters.
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:

        * UIProcess/API/C/WKContext.cpp:
        (WKContextRegisterURLSchemeAsSecure):
        * UIProcess/API/C/WKContextPrivate.h:

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureWebProcess):
        Copy over the schemes that are to be registered as secure to the
        WebProcessCreationParameters.
        (WebKit::WebContext::registerURLSchemeAsSecure):
        Only send a message to the WebProcess if it is valid.
        * UIProcess/WebContext.h:

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        Register the schemes that need to be registered as secure from the
        WebProcessCreationParameters.
        (WebKit::WebProcess::registerURLSchemeAsSecure):
        * WebProcess/WebProcess.h:

        * WebProcess/WebProcess.messages.in:
        Add the RegisterURLSchemeAsSecure message.

2010-10-12  John Sullivan  <sullivan@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=47556
        WKBundleNodeHandlePrivate.h should be marked private, not project

        * WebKit2.xcodeproj/project.pbxproj:
        Marked WKBundleNodeHandlePrivate.h as private.

2010-10-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add FindController class
        https://bugs.webkit.org/show_bug.cgi?id=47555

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

        * WebProcess/WebPage/FindController.cpp: Added.
        (WebKit::FindController::FindController):
        (WebKit::FindController::findString):
        Ask WebCore to find the given string for us.

        (WebKit::FindController::hideFindUI):
        Add stub.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        Initialize the find controller.

        (WebKit::WebPage::findString):
        (WebKit::WebPage::hideFindUI):
        Call the find controller.
        
        * win/WebKit2.vcproj:
        Add new files.

2010-10-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Need WebKit2 API to get the cell above a table cell
        <rdar://problem/8537111>
        https://bugs.webkit.org/show_bug.cgi?id=47532

        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleCopyHTMLTableCellElementCellAbove):
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::copyHTMLTableCellElementCellAbove):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:

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

        Reviewed by Sam Weinig.

        Add BinarySemaphore class to CoreIPC and use it in Connection::waitForSyncReply
        https://bugs.webkit.org/show_bug.cgi?id=47526

        * Platform/CoreIPC/BinarySemaphore.cpp: Added.
        * Platform/CoreIPC/BinarySemaphore.h: Added.
        Add BinarySemaphore class.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendSyncMessage):
        (CoreIPC::Connection::waitForSyncReply):
        (CoreIPC::Connection::processIncomingMessage):
        Use the binary semaphore and the newly added m_pendingSyncRepliesMutex.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Add new files.

2010-10-12  Adam Roben  <aroben@apple.com>

        Bring WebKit2 .vcproj files up-to-date with reality

        * win/WebKit2.vcproj:
        * win/WebKit2Generated.vcproj:
        Added missing files, removed non-existent files.

2010-10-12  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit WebKit2 build.

        * UIProcess/cf/WebBackForwardListCF.cpp:
        (WebKit::WebBackForwardList::restoreFromCFDictionaryRepresentation): Change currentIndex to be of
        type CFIndex and specify kCFNumberCFIndexType when calling CFNumberGetValue. This avoids a warning
        when comparing currentIndex with another variable of type CFIndex later in the function.

2010-10-12  Mark Rowe  <mrowe@apple.com>

        Fix class vs struct forward declaration issues in WebKit2 observed when using clang.

        * Scripts/webkit2/messages.py: Add WebCore::ViewportArguments to the set of structs.
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:

2010-10-12  Juha Savolainen  <juha.savolainen@weego.fi>

        Reviewed by Antti Koivisto.

        [Qt] Adding Qt WebKit2 API for zooming.
        https://bugs.webkit.org/show_bug.cgi?id=47539

        Adding zoom methods to QWKPage.
        
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::textZoomFactor): Added
        (QWKPage::setTextZoomFactor): Added
        (QWKPage::pageZoomFactor): Added
        (QWKPage::setPageZoomFactor): Added
        (QWKPage::setPageAndTextZoomFactors): Added
        * UIProcess/API/qt/qwkpage.h:

2010-10-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler of the past.

        Address some of Darin's review feedback in https://bugs.webkit.org/show_bug.cgi?id=47354
        that wasn't left till after my original commit.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageCopySessionState): Nuke the temporary variable.
        * UIProcess/API/C/WKPage.h:

        * UIProcess/WebPageProxy.h: Fix up function declarations.
        
        * UIProcess/cf/WebPageProxyCF.cpp:
        (WebKit::WebPageProxy::sessionStateData): Use sizeof(UInt32) instead of 4.
        (WebKit::WebPageProxy::restoreFromSessionStateData): Ditto.

2010-10-11  Brady Eidson  <beidson@apple.com>

        Reviewed by BUILD FIX.

        Build fix for Windows in https://bugs.webkit.org/show_bug.cgi?id=47354

        * UIProcess/cf/WebPageProxyCF.cpp:
        (WebKit::WebPageProxy::sessionStateData): Change to use CF APIs that exist on Windows.
        (WebKit::WebPageProxy::restoreFromSessionStateData): Ditto.

2010-10-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add WebKit2 equivalents for setValueForUser and setAutofilled
        <rdar://problem/8475934>
        https://bugs.webkit.org/show_bug.cgi?id=47524

        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleSetHTMLInputElementValueForUser):
        (WKBundleNodeHandleSetHTMLInputElementAutofilled):
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::setHTMLInputElementValueForUser):
        (WebKit::InjectedBundleNodeHandle::setHTMLInputElementAutofilled):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:

2010-10-11  Brian Weinstein  <bweinstein@apple.com>

        Windows build fix. Add a needed include.

        * UIProcess/cf/WebPageProxyCF.cpp:

2010-10-11  Brian Weinstein  <bweinstein@apple.com>

        Windows build fix. Wrap calls to CFSTR in parentheses.

        * UIProcess/cf/WebBackForwardListCF.cpp:
        * UIProcess/cf/WebPageProxyCF.cpp:

2010-10-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add ability to convert from a JSObjectRef back to a WKBundleNodeHandleRef
        https://bugs.webkit.org/show_bug.cgi?id=47509

        Add SPI to convert a JSObjectRef to a WKBundleNodeHandleRef.

        * DerivedSources.pro:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleCreate):
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h: Added.
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::getOrCreate):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:

2010-10-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler and Sam Weinig.

        <rdar://problem/8262202> and https://bugs.webkit.org/show_bug.cgi?id=47354
        Need WKPage API for serializing and restoring a page's state

        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

        * WebKit2Prefix.h: Add DEFINE_STATIC_GETTER convenience.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetSessionHistoryURLValueType):
        (WKPageCopySessionState): Change to use a filter function to allow the API client to decide what
          types of things get serialized as session state.  For now it only filters based on URL in
          session history entries.
        (WKPageRestoreFromSessionState):
        * UIProcess/API/C/WKPage.h:

        * UIProcess/WebBackForwardList.h:
        (WebKit::WebBackForwardList::restoredCurrentURL):

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::sessionStateData): Leave stubs for non-CF platform builds.
        (WebKit::WebPageProxy::restoreFromSessionStateData): Ditto.
        * UIProcess/WebPageProxy.h:

        * UIProcess/cf: Added.
        * UIProcess/cf/WebBackForwardListCF.cpp: Added.
        (WebKit::WebBackForwardList::createCFDictionaryRepresentation): Store back/forward list info CF property list style.
        (WebKit::WebBackForwardList::restoreFromCFDictionaryRepresentation): Restore from that data - but for now we don't 
          actually put the back/forward list back into place and instead only remember the current URL.

        * UIProcess/cf/WebPageProxyCF.cpp: Added.
        (WebKit::WebPageProxy::sessionStateData): Create the sessions state date CF property list style, plus a version header.
        (WebKit::WebPageProxy::restoreFromSessionStateData): Restore from that property list style session state data.

2010-10-11  Adam Roben  <aroben@apple.com>

        Implement SharedMemory on Windows

        This makes visited links be colored correctly.

        Fixes <http://webkit.org/b/47499> <rdar://problem/8422725>.

        Reviewed by Anders Carlsson.

        * Platform/SharedMemory.h: Add Windows-specific members to
        SharedMemory and SharedMemory::Handle.

        * Platform/win/SharedMemoryWin.cpp:
        (WebKit::SharedMemory::Handle::Handle): Initialize our members.
        (WebKit::SharedMemory::Handle::~Handle): Close our HANDLE if we have
        one.
        (WebKit::SharedMemory::Handle::encode): Encode our size, HANDLE, and
        PID. Null out our HANDLE member, as it is now the receiving process's
        responsibility to close the HANDLE.
        (WebKit::SharedMemory::Handle::decode): Copy the handle from the
        sending process into the receiving process and close the HANDLE the
        sending process gave us.
        (WebKit::SharedMemory::create): Map some memory and store it in a new
        SharedMemory object.
        (WebKit::accessRights): Helper function to convert a
        SharedMemory::Protection to a file-mapping access right.
        (WebKit::SharedMemory::create): Map the memory represented by the
        Handle, and adopt the HANDLE from it.
        (WebKit::SharedMemory::~SharedMemory): Clean up our memory mapping.
        (WebKit::SharedMemory::createHandle): Give the Handle a copy of our
        HANDLE with the specified protection.

2010-10-11  Adam Roben  <aroben@apple.com>

        Make it possible to restart a RunLoop::Timer on Windows

        Fixes <http://webkit.org/b/47505> RunLoop::Timer only ever fires once
        on Windows

        Reviewed by Anders Carlsson.

        * Platform/win/RunLoopWin.cpp:
        (RunLoop::TimerBase::timerFired): Remove non-repeating timers from the
        set of active timers when they fire, just like we do when stopping
        them manually.

2010-10-11  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Darin Adler.

        Add Private API for creating a WebKit2 WebSerializedScriptValue from the internal
        representation of a WebKit1 WebSerializedJSValue.
        https://bugs.webkit.org/show_bug.cgi?id=47439

        * Shared/API/c/WKSerializedScriptValue.cpp:
        (WKSerializedScriptValueCreateWithInternalRepresentation):
        Use the existing WebSerializedScriptValue constructor that takes a pointer to the internal
        representation (a WebCore::SerializedScriptValue).
        * Shared/API/c/WKSerializedScriptValuePrivate.h:

2010-10-11  Mike Thole  <mthole@apple.com>

        Reviewed by Darin Adler.

        Rename WKCertificateInfoGetPeerCertificates() to WKCertificateInfoGetCertificateChain()
        https://bugs.webkit.org/show_bug.cgi?id=47495

        * Shared/API/c/mac/WKCertificateInfoMac.h:
        Renamed WKCertificateInfoGetPeerCertificates() to WKCertificateInfoGetCertificateChain()
        * Shared/API/c/mac/WKCertificateInfoMac.mm:
        (WKCertificateInfoGetCertificateChain): Updated for name change.
        * Shared/mac/PlatformCertificateInfo.h:
        (WebKit::PlatformCertificateInfo::certificateChain): Renamed from peerCertificates()
        * Shared/mac/PlatformCertificateInfo.mm:
        (WebKit::PlatformCertificateInfo::PlatformCertificateInfo): Updated for name change.
        (WebKit::PlatformCertificateInfo::encode): Ditto.
        (WebKit::PlatformCertificateInfo::decode): Ditto.
        (WebKit::PlatformCertificateInfo::dump): Ditto.

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

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Issue a warning when an InjectedBundle can't be loaded.
        https://bugs.webkit.org/show_bug.cgi?id=47497

        The original author of the patch is Jocelyn Turcotte <jocelyn.turcotte@nokia.com>.

        * WebProcess/InjectedBundle/qt/InjectedBundleQt.cpp:
        (WebKit::InjectedBundle::load):

2010-10-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Simon Fraser.

        Rename transformToDeviceSpace to convertToDeviceSpace and 
        transformToUserSpace to convertToUserSpace at Simon's request.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::convertToDeviceSpace):
        (WebKit::PageClientImpl::convertToUserSpace):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _convertToDeviceSpace:]):
        (-[WKView _convertToUserSpace:]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::convertToDeviceSpace):
        (QWKPagePrivate::convertToUserSpace):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setWindowFrame):
        (WebKit::WebPageProxy::getWindowFrame):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::convertToDeviceSpace):
        (WebKit::WebView::convertToUserSpace):
        * UIProcess/win/WebView.h:

2010-10-11  Sam Weinig  <sam@webkit.org>

        Try to fix the Mac release build.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _transformToDeviceSpace:]):
        (-[WKView _transformToUserSpace:]):
        * UIProcess/API/mac/WKViewInternal.h:

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

        Reviewed by Kenneth Rohde Christiansen.

        WebProcess ASSERTs with a null application cache dir creation parameter
        https://bugs.webkit.org/show_bug.cgi?id=47489

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

2010-10-11  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Andreas Kling.

        Unlink the files used for I/O mapped memory as soon as they are
        created.

        * Shared/qt/UpdateChunk.cpp:
        (WebKit::mapMemory):
        (WebKit::mapFile):

2010-10-11  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Rubberstamped by Andreas Kling.

        Build fix when using MeeGo Touch

        * WebProcess/qt/WebProcessMainQt.cpp:

2010-10-11  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Andreas Kling.

        Use raster for the QtWebProcess.

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

2010-10-11  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Unreviewed win build fix.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:

2010-10-08  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Sam Weinig.

        Adding Qt WebKit2 API for dealing with viewport meta info
        https://bugs.webkit.org/show_bug.cgi?id=47202

        Add new API for setting scale and layout viewport given the data
        provided by the viewport meta tag.

        Any Qt view components who wants to support this, will need to
        compute the viewport attributes before first load using
        viewportAttributesForSize(..), and then again everytime
        the viewport attributes gets invalidates (loading a new page,
        navigating page cache) or every time on of the browser
        attributes change, such as when the device is rotates (which
        changes the actual visible viewport). A signal
        viewportChangeRequested() is provided for the former.

        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setViewportArguments):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::setViewportArguments):
        (QWKPage::ViewportAttributes::ViewportAttributes):
        (QWKPage::ViewportAttributes::~ViewportAttributes):
        (QWKPage::ViewportAttributes::operator=):
        (QWKPage::viewportAttributesForSize):
        * UIProcess/API/qt/qwkpage.h:
        * UIProcess/API/qt/qwkpage_p.h:
        (QtViewportAttributesPrivate::QtViewportAttributesPrivate):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::didChangeViewportData):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::setViewportArguments):
        * UIProcess/win/WebView.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::dispatchViewportDataDidChange):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2010-10-11  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] WebKit2 build scripts are buggy
        https://bugs.webkit.org/show_bug.cgi?id=47377

        Generated sources must depends on WebKit2/Scripts/webkit2/messages.py too.

        * DerivedSources.pro: Missing dependencies added.

2010-10-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        WKFrameGetFrameLoadState() returns kWKFrameLoadStateCommitted after the load has been stopped
        <rdar://problem/8173667>
        https://bugs.webkit.org/show_bug.cgi?id=47461

        API Test: WebKit2/FailedLoad

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didFailProvisionalLoad):
        (WebKit::WebFrameProxy::didFailLoad):
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        Set the frame load state to LoadStateFinished for both didFailProvisionalLoadForFrame
        and didFailLoadForFrame.

2010-10-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Add WebKit2 version of runBeforeUnloadConfirmPanelWithMessage
        <rdar://problem/8447690>
        https://bugs.webkit.org/show_bug.cgi?id=47459

        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setWindowFrame):
        (WebKit::WebPageProxy::getWindowFrame):
        (WebKit::WebPageProxy::canRunBeforeUnloadConfirmPanel):
        (WebKit::WebPageProxy::runBeforeUnloadConfirmPanel):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::canRunBeforeUnloadConfirmPanel):
        (WebKit::WebUIClient::runBeforeUnloadConfirmPanel):
        * UIProcess/WebUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::canRunBeforeUnloadConfirmPanel):
        (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel):
        Pipe calls through to the UIProcess.

2010-10-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Need implementation of ChromeClient windowRect related functions.
        <rdar://problem/8469476>
        https://bugs.webkit.org/show_bug.cgi?id=47386

        * Shared/API/c/WKGeometry.h: Added.
        Adds WKPoint, WKSize and WKRect structs.

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toImpl):
        (WebKit::toAPI):
        Add conversion functions for WKRect.

        * Shared/WebCoreArgumentCoders.h:
        Add encoding for FloatPoint, FloatSize and FloatRect.

        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::transformToDeviceSpace):
        (WebKit::PageClientImpl::transformToUserSpace):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _transformToDeviceSpace:]):
        (-[WKView _transformToUserSpace:]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::transformToDeviceSpace):
        (QWKPagePrivate::transformToUserSpace):
        (QWKPage::QWKPage):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setWindowFrame):
        (WebKit::WebPageProxy::getWindowFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::setWindowFrame):
        (WebKit::WebUIClient::windowFrame):
        * UIProcess/WebUIClient.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::setEditCommandState):
        (WebKit::WebView::transformToDeviceSpace):
        (WebKit::WebView::transformToUserSpace):
        * UIProcess/win/WebView.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::setWindowFrame):
        (WebKit::WebChromeClient::windowFrame):
        Pipe calls through to the UIProcess, and give ports a chance to transform
        the rect (via the PageClient) before it is passed on.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:
        Add new files.

2010-10-07  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        Add Private API for creating a WebKit1 WebSerializedJSValue from the internal
        representation of a WebKit2 WebSerializedScriptValue.
        https://bugs.webkit.org/show_bug.cgi?id=47390

        * Shared/API/c/WKSerializedScriptValue.cpp:
        (WKSerializedScriptValueGetInternalRepresentation):
        * Shared/API/c/WKSerializedScriptValuePrivate.h: Added.

        * Shared/WebSerializedScriptValue.h:
        (WebKit::WebSerializedScriptValue::internalRepresentation):
        Return the WebCore::SerializedScriptValue as a void* so that it can be passed through the
        API.

        * WebKit2.xcodeproj/project.pbxproj:
        Add WKSerializedScriptValuePrivate.h.
        * win/WebKit2.vcproj:
        Ditto, also some sorting.

        * win/WebKit2Generated.make:
        Copy over WKSerializedScriptValuePrivate.h.

2010-10-08  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Fix WKStringQt.h and WKURLQt.h API problems.
        https://bugs.webkit.org/show_bug.cgi?id=47412

        * UIProcess/API/cpp/qt/WKStringQt.h:
        Remove the extern "C"
        * UIProcess/API/cpp/qt/WKURLQt.h:
        Remove the extern "C"
        * UIProcess/API/qt/qgraphicswkview.h:
        Fix the forwarded declaration

2010-10-08  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Don't use -whole-archive to link-in libWebKit2.a except for libQtWebKit.so
        https://bugs.webkit.org/show_bug.cgi?id=47347

        * WebKit2.pri:

2010-10-08  Kimmo Kinnunen  <kimmo.t.kinnunen@nokia.com>

        Reviewed by Andreas Kling.

        Notify WebPage when QGraphicsWKView gains focus. Set both
        active flag and focused flag, similar to QWebPage behavior.

        [Qt] WebKit2 should support focusing
        https://bugs.webkit.org/show_bug.cgi?id=47168

        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::focusInEvent): Added.
        (QGraphicsWKView::focusOutEvent): Added.
        * UIProcess/API/qt/qgraphicswkview.h: Added declarations.

2010-10-07  Ivan Krstić  <ike@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/8349882> Many WebProcess sandbox violations during basic browsing operations.

        * WebProcess/com.apple.WebProcess.sb:
        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain):

2010-10-07  Brady Eidson  <beidson@apple.com>

        Build fix.

        GCC continued to mask the fact that I still hadn't declared the correct symbol.

        * Platform/Logging.cpp:
        (initializeLogChannel):
        * Platform/Logging.h:

2010-10-07  Brian Weinstein  <bweinstein@apple.com>

        Build Fix. Fix the vcproj to make it valid and openable by Visual Studio.

        * win/WebKit2.vcproj:

2010-10-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add a WKPageFindClient, hook up WKPageCountStringMatches
        https://bugs.webkit.org/show_bug.cgi?id=47373

        * Shared/APIClient.h: Added.
        Add an APIClient class template which can be used to reduce duplicated
        code in the client wrappers.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageFindClient):
        Initialize the page find client.

        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebFindClient.cpp: Added.
        (WebKit::WebFindClient::didCountStringMatches):
        Call the WKPageFindClient function.

        * UIProcess/WebFindClient.h: Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeFindClient):
        Initialize the WebFindClient.

        (WebKit::WebPageProxy::findString):
        Send a FindString message.

        (WebKit::WebPageProxy::hideFindUI):
        Send a HideFindUI message.

        (WebKit::WebPageProxy::countStringMatches):
        Send a CountStringMatches message.

        (WebKit::WebPageProxy::didCountStringMatches):
        Call the find client.

        * UIProcess/WebPageProxy.messages.in:
        Add new message.

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

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::findString):
        (WebKit::WebPage::hideFindUI):
        Add stubs.

        (WebKit::WebPage::countStringMatches):
        Figure out the number of matches and send them back in the DidCountStringMatches msessage.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Add new messages.

        * win/WebKit2.vcproj:
        Add new files.

2010-10-07  Sam Weinig  <sam@webkit.org>

        Update unit tests results.

        * Scripts/webkit2/messages_unittest.py:

2010-10-07  Brady Eidson  <beidson@apple.com>

        Reviewed by BUILD FIX for non-gcc builds.

        * Platform/Logging.cpp:
        (initializeLogChannel):  GCC optimized out the only caller of this function. Windows doesn't, and is breaking.

2010-10-07  Darin Adler  <darin@apple.com>

        Fix include mistake that makes build fail with non-Objective-C.

        * Shared/API/c/mac/WKCertificateInfoMac.h: Include CoreFoundation.h,
        not Foundation.h.

2010-10-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Generate the messages sent to the WebPageProxy
        https://bugs.webkit.org/show_bug.cgi?id=47239

        * DerivedSources.make:
        * DerivedSources.pro:
        * Platform/CoreIPC/Arguments.h:
        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::handleMessage):
        * Scripts/webkit2/messages.py:
        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h: Removed.
        * Shared/StringPairVector.h: Added.
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::registerEditCommand):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::registerEditCommand):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::unapply):
        (WebKit::WebEditCommandProxy::reapply):
        * UIProcess/WebFormClient.cpp:
        (WebKit::WebFormClient::willSubmitForm):
        * UIProcess/WebFormClient.h:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in: Added.
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::registerEditCommand):
        * UIProcess/win/WebView.h:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::registerCommandForUndo):
        (WebKit::WebEditorClient::clearUndoRedoOperations):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        * win/WebKit2.vcproj:

2010-10-07  Brady Eidson  <beidson@apple.com>

        Reviewed by BUILD FIX.

        Forgot this to keep the build working.

        * WebKit2Prefix.h:

2010-10-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Start stubbing out the find API
        https://bugs.webkit.org/show_bug.cgi?id=47366
        <rdar://problem/8524998>

        * Shared/FindOptions.h: Added.
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toFindDirection):
        (WebKit::toFindOptions):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageFindString):
        (WKPageHideFindUI):
        (WKPageCountStringMatches):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::findString):
        (WebKit::WebPageProxy::hideFindUI):
        (WebKit::WebPageProxy::countStringMatches):
        * UIProcess/WebPageProxy.h:

2010-10-07  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>, Andras Becsi  <abecsi@webkit.org>, Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add WTR's InjectedBundle build files.
        https://bugs.webkit.org/show_bug.cgi?id=47333

        * WebKit2.pro:

2010-10-07  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Part of https://bugs.webkit.org/show_bug.cgi?id=47354 - Add WebCore/WebKit1 style logging channel mechanism0 to WebKit2, 
        including the first channel to be used for SessionState work.

        * Platform/Logging.cpp: Added.
        (initializeLogChannelsIfNecessary):
        * Platform/Logging.h: Added.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2010-10-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r69315.
        http://trac.webkit.org/changeset/69315
        https://bugs.webkit.org/show_bug.cgi?id=47363

        Forgot to add the new files (Requested by kbalazs on #webkit).

        * WebKit2.pro:

2010-10-07  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Fixing viewport meta tag user-scalable handling
        https://bugs.webkit.org/show_bug.cgi?id=47330

        user-scalable attribute was not considered in viewport meta tag handling.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::viewportConfigurationForSize):

2010-10-07  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>, Andras Becsi  <abecsi@webkit.org>, Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add WTR's InjectedBundle build files.
        https://bugs.webkit.org/show_bug.cgi?id=47333

        * WebKit2.pro:

2010-10-07  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Some viewport meta tag api refactoring
        https://bugs.webkit.org/show_bug.cgi?id=47334

        WebCore::findConfigurationForViewportData renamed to computeViewportAttributes.
        WebCore::ViewportAttributes::layoutViewport renamed to layoutSize.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::viewportConfigurationForSize):

2010-10-06  Jessie Berlin  <jberlin@apple.com>

        Reviewed by John Sullivan.

        Bundle should expose a reportException method.
        https://bugs.webkit.org/show_bug.cgi?id=46769

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

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::reportException):
        Mimic the behavior of WebView::reportException.
        * WebProcess/InjectedBundle/InjectedBundle.h:

2010-10-07  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Adam Roben.

        [Qt] Webkit2 MacOS build fix
        https://bugs.webkit.org/show_bug.cgi?id=47167

        There were two problems when building Qt WebKit2 in Mac. The first was that
        ld does not support flag -whole-archive and it needed to be replaced by flag -all_load.
        The second problem was that __APPLE__ is been used to identify safari builds and, when
        building Qt in MacOS, Qt was ending up using the wrong typedef. The solution was to use
        a Qt specific WKNativeEvent.h that only has the proper Qt typedef instead of the original one.

        * UIProcess/API/C/qt/WKNativeEvent.h: Added.
        * WebKit2.pri:
        * WebKit2.pro:

2010-10-07  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        WebKitTestRunner should be portable
        https://bugs.webkit.org/show_bug.cgi?id=45393

        Introducing additional URL API.
        * Shared/API/c/WKURL.cpp:
        (WKURLCreateWithUTF8CString):
        (WKURLIsEqual):
        * Shared/API/c/WKURL.h:

2010-10-06  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add WebKitTestRunner's build files
        https://bugs.webkit.org/show_bug.cgi?id=44155

        * DerivedSources.pro: Changes according the new location
        of generate-forwarding-headers.pl.
        * UIProcess/API/C/WebKit2.h: Do not check the value of the
        __APPLE__ define if it is not defined.
        * WebKit2.pro: Changes according the new location
        of generate-forwarding-headers.pl. Added missing files
        to the build that provides API that is used by WTR.
        * generate-forwarding-headers.pl: Moved to WebKitTools/Scripts
        since from now this is not only used by WebKit2.

2010-10-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Separate actually calling the member function from decoding/encoding arguments
        and remove any ambiguities when calling the function.

        * Platform/CoreIPC/Arguments.h:
        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction):
        (CoreIPC::handleMessage):

2010-10-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        More Arguments.h cleanup.

        * Platform/CoreIPC/Arguments.h:
        * Platform/CoreIPC/HandleMessage.h:
        Remove unnecessary typedefs, simplify.

        * Scripts/webkit2/messages.py:
        * UIProcess/WebContext.h:
        Fix clang++ build.

2010-10-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Start cleaning up Arguments.h
        https://bugs.webkit.org/show_bug.cgi?id=47304

        This is a first step towards simplifying all the handleMessage overloads we have.

        * Platform/CoreIPC/Arguments.h:
        (CoreIPC::Arguments1):
        Make Arguments1 a struct and get rid of the FirstArgumentType typedef. Instead, add a
        ValueType typedef which is defined to an Arguments1 type whose type parameter is not
        a reference type.

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::handleMessage):
        Update for the Arguments1 change. Rename "arguments" to "argumentDecoder" and "reply" to
        "replyEncoder".

2010-10-06  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix the build after API changes introduced in r69214.

        * UIProcess/API/cpp/qt/WKStringQt.cpp:
        (WKStringCreateWithQString):
        * UIProcess/API/cpp/qt/WKURLQt.cpp:
        (WKURLCreateWithQUrl):

2010-10-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r69210.
        http://trac.webkit.org/changeset/69210
        https://bugs.webkit.org/show_bug.cgi?id=47297

        This patch broke Windows (Requested by andersca on #webkit).

        * DerivedSources.make:
        * DerivedSources.pro:
        * Platform/CoreIPC/Arguments.h:
        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::handleMessage):
        * Scripts/webkit2/messages.py:
        * Scripts/webkit2/messages_unittest.py:
        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h: Added.
        * Shared/StringPairVector.h: Removed.
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::registerEditCommand):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::registerEditCommand):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::unapply):
        (WebKit::WebEditCommandProxy::reapply):
        * UIProcess/WebFormClient.cpp:
        (WebKit::WebFormClient::willSubmitForm):
        * UIProcess/WebFormClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::didReceiveSyncMessage):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        (WebKit::WebPageProxy::didReceiveTitleForFrame):
        (WebKit::WebPageProxy::didFirstLayoutForFrame):
        (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame):
        (WebKit::WebPageProxy::didRemoveFrameFromHierarchy):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForMIMEType):
        (WebKit::WebPageProxy::willSubmitForm):
        (WebKit::WebPageProxy::createNewPage):
        (WebKit::WebPageProxy::runJavaScriptAlert):
        (WebKit::WebPageProxy::runJavaScriptConfirm):
        (WebKit::WebPageProxy::runJavaScriptPrompt):
        (WebKit::WebPageProxy::mouseDidMoveOverElement):
        (WebKit::WebPageProxy::contentsSizeChanged):
        (WebKit::WebPageProxy::addItemToBackForwardList):
        (WebKit::WebPageProxy::goToItemInBackForwardList):
        (WebKit::WebPageProxy::registerEditCommandForUndo):
        (WebKit::WebPageProxy::registerEditCommandForRedo):
        (WebKit::WebPageProxy::didReceiveEvent):
        (WebKit::WebPageProxy::didChangeAcceleratedCompositing):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in: Removed.
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::registerEditCommand):
        * UIProcess/win/WebView.h:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::setWindowRect):
        (WebKit::WebChromeClient::takeFocus):
        (WebKit::WebChromeClient::createWindow):
        (WebKit::WebChromeClient::runJavaScriptAlert):
        (WebKit::WebChromeClient::runJavaScriptConfirm):
        (WebKit::WebChromeClient::runJavaScriptPrompt):
        (WebKit::WebChromeClient::setStatusbarText):
        (WebKit::WebChromeClient::contentsSizeChanged):
        (WebKit::WebChromeClient::mouseDidMoveOverElement):
        (WebKit::WebChromeClient::setToolTip):
        (WebKit::WebChromeClient::setCursor):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::registerCommandForUndo):
        (WebKit::WebEditorClient::clearUndoRedoOperations):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::detachedFromParent2):
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidStartProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveTitle):
        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFailLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFinishDocumentLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFinishLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFirstLayout):
        (WebKit::WebFrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForMIMEType):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebKit::WebFrameLoaderClient::dispatchWillSubmitForm):
        (WebKit::WebFrameLoaderClient::postProgressStartedNotification):
        (WebKit::WebFrameLoaderClient::postProgressEstimateChangedNotification):
        (WebKit::WebFrameLoaderClient::postProgressFinishedNotification):
        (WebKit::WebFrameLoaderClient::createFrame):
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::addItem):
        (WebKit::WebBackForwardListProxy::goToItem):
        (WebKit::WebBackForwardListProxy::backItem):
        (WebKit::WebBackForwardListProxy::currentItem):
        (WebKit::WebBackForwardListProxy::forwardItem):
        (WebKit::WebBackForwardListProxy::itemAtIndex):
        (WebKit::WebBackForwardListProxy::backListCount):
        (WebKit::WebBackForwardListProxy::forwardListCount):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::changeAcceleratedCompositingMode):
        (WebKit::WebPage::enterAcceleratedCompositingMode):
        (WebKit::WebPage::sendClose):
        (WebKit::WebPage::mouseEvent):
        (WebKit::WebPage::wheelEvent):
        (WebKit::WebPage::keyEvent):
        (WebKit::WebPage::validateMenuItem):
        (WebKit::WebPage::touchEvent):
        (WebKit::WebPage::show):
        (WebKit::WebPage::runJavaScriptInMainFrame):
        (WebKit::WebPage::getRenderTreeExternalRepresentation):
        (WebKit::WebPage::getSourceForFrame):
        * win/WebKit2.vcproj:

2010-10-06  Jessie Berlin  <jberlin@apple.com>

        Rubber-stamped by Dan Bernstein.

        WKSerializedScriptValue.h needs to be copied over into the WEBKITOUTPUTDIR on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=47287

        * win/WebKit2Generated.make:
        Copy WKSerializedScriptValue.h into $(WEBKITOUTPUTDIR)\include\WebKit2.

2010-10-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Rename toRef/toWK to toAPI/toImpl
        https://bugs.webkit.org/show_bug.cgi?id=47281

        * Shared/API/c/WKArray.cpp:
        * Shared/API/c/WKCertificateInfo.cpp:
        * Shared/API/c/WKData.cpp:
        * Shared/API/c/WKDictionary.cpp:
        * Shared/API/c/WKError.cpp:
        * Shared/API/c/WKMutableArray.cpp:
        * Shared/API/c/WKMutableDictionary.cpp:
        * Shared/API/c/WKNumber.cpp:
        * Shared/API/c/WKSerializedScriptValue.cpp:
        * Shared/API/c/WKSharedAPICast.h:
        * Shared/API/c/WKString.cpp:
        * Shared/API/c/WKType.cpp:
        * Shared/API/c/WKURL.cpp:
        * Shared/API/c/WKURLRequest.cpp:
        * Shared/API/c/WKURLResponse.cpp:
        * Shared/API/c/cf/WKStringCF.cpp:
        * Shared/API/c/cf/WKURLCF.cpp:
        * Shared/API/c/cf/WKURLRequestCF.cpp:
        * Shared/API/c/cf/WKURLResponseCF.cpp:
        * Shared/API/c/mac/WKCertificateInfoMac.mm:
        * Shared/API/c/mac/WKURLRequestNS.mm:
        * Shared/API/c/mac/WKURLResponseNS.mm:
        * Shared/API/c/win/WKCertificateInfoWin.cpp:
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKBackForwardList.cpp:
        * UIProcess/API/C/WKBackForwardListItem.cpp:
        * UIProcess/API/C/WKContext.cpp:
        * UIProcess/API/C/WKFormSubmissionListener.cpp:
        * UIProcess/API/C/WKFrame.cpp:
        * UIProcess/API/C/WKFramePolicyListener.cpp:
        * UIProcess/API/C/WKNavigationData.cpp:
        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/C/WKPageNamespace.cpp:
        * UIProcess/API/C/WKPreferences.cpp:
        * UIProcess/API/C/WKPreferencesPrivate.cpp:
        * UIProcess/API/C/win/WKContextWin.cpp:
        * UIProcess/API/C/win/WKView.cpp:
        * UIProcess/API/cpp/qt/WKStringQt.cpp:
        * UIProcess/API/cpp/qt/WKURLQt.cpp:
        * UIProcess/API/mac/PageClientImpl.mm:
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/API/qt/ClientImpl.cpp:
        * UIProcess/API/qt/qwkpage.cpp:
        * UIProcess/GenericCallback.h:
        * UIProcess/WebContextInjectedBundleClient.cpp:
        * UIProcess/WebFormClient.cpp:
        * UIProcess/WebHistoryClient.cpp:
        * UIProcess/WebLoaderClient.cpp:
        * UIProcess/WebPolicyClient.cpp:
        * UIProcess/WebUIClient.cpp:
        * UIProcess/mac/ChunkedUpdateDrawingAreaProxyMac.mm:
        * UIProcess/mac/LayerBackedDrawingAreaProxyMac.mm:
        * UIProcess/qt/ChunkedUpdateDrawingAreaProxyQt.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleRangeHandle.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp:
        * WebProcess/InjectedBundle/qt/InjectedBundleQt.cpp:
        * WebProcess/InjectedBundle/win/InjectedBundleWin.cpp:

2010-10-06  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Renaming WebCore::ViewportConfiguration to WebCore::ViewportAttributes
        https://bugs.webkit.org/show_bug.cgi?id=47268

        Renaming WebCore::ViewportConfiguration to WebCore::ViewportAttributes

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::viewportConfigurationForSize):

2010-10-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Generate the messages sent to the WebPageProxy
        https://bugs.webkit.org/show_bug.cgi?id=47239

        * Platform/CoreIPC/Arguments.h:
        Add additional typedefs.

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::handleMessage):
        Add more handleMessage implementations.

        * Scripts/webkit2/messages.py:
        * Scripts/webkit2/messages_unittest.py:
        Add headers for reply argument types.

        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h: Removed.

        * Shared/StringPairVector.h: Added.
        This file is a hack to work around a deficiency in the generator
        which can't deal with class templates with more than one argument.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        * UIProcess/API/qt/qwkpage.cpp:
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebEditCommandProxy.cpp:
        * UIProcess/WebFormClient.cpp:
        * UIProcess/WebFormClient.h:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        Migrate to generated calls.

        * UIProcess/WebPageProxy.messages.in: Added.
        New messages definitions file.

        * DerivedSources.make:
        * DerivedSources.pro:
        * win/WebKit2.vcproj:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        Add new files.

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

        Reviewed by Sam Weinig.

        Send null events and mouse events
        https://bugs.webkit.org/show_bug.cgi?id=47223

        * WebKit2.xcodeproj/project.pbxproj:
        Add "-Wno-deprecated-declarations" to the COMPILER_FLAGS for NetscapePluginMac.mm since
        we call Button() which is deprecated.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin):
        Initialize the null event timer.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformPostInitialize):
        Start the null event timer.

        (WebKit::NetscapePlugin::platformDestroy):
        Stop the null event timer.

        (WebKit::NetscapePlugin::platformHandleMouseEvent):
        Initialize the event record and call NPP_HandleEvent.

        (WebKit::NetscapePlugin::nullEventTimerFired):
        Send a null event with the current mouse position.

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

        Reviewed by Sam Weinig.

        Start sending Carbon plug-in events in th Carbon event model
        https://bugs.webkit.org/show_bug.cgi?id=47209
        <rdar://problem/8515677>

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin):
        Initialize the NP_CGContext struct.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformPostInitialize):
        Create a fake Carbon window.

        (WebKit::NetscapePlugin::platformDestroy):
        Destroy the Carbon window.

        (WebKit::modifiersForEvent):
        Given a WebEvent, return the EventRecord modifiers.

        (WebKit::NetscapePlugin::platformPaint):
        (WebKit::NetscapePlugin::platformHandleMouseEvent):
        (WebKit::NetscapePlugin::platformHandleWheelEvent):
        (WebKit::NetscapePlugin::platformHandleMouseEnterEvent):
        (WebKit::NetscapePlugin::platformHandleMouseLeaveEvent):
        (WebKit::NetscapePlugin::platformSetFocus):
        (WebKit::NetscapePlugin::windowFocusChanged):
        Create Carbon EventRecords and call NPP_HandleEvent.

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

        Reviewed by Mark Rowe.

        Add MIMEType accessor to WKFrame
        <rdar://problem/8347683>
        https://bugs.webkit.org/show_bug.cgi?id=47138

        Tests: WebKit2/FrameMIMETypePNG
               WebKit2/FrameMIMETypeHTML

        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameCopyMIMEType):
        * UIProcess/API/C/WKFrame.h:
        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::setMIMEType):
        (WebKit::WebFrameProxy::mimeType):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):

2010-10-05  Kimmo Kinnunen  <kimmo.t.kinnunen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Implement API call for setting custom user agent
        (QWKPage::setCustomUserAgent)

        [Qt] Ability to set custom userAgent for WebKit2/WebKit
        https://bugs.webkit.org/show_bug.cgi?id=44265

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::setCustomUserAgent): Added.
        * UIProcess/API/qt/qwkpage.h: Add setCustomUserAgent.

2010-10-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r69103.
        http://trac.webkit.org/changeset/69103
        https://bugs.webkit.org/show_bug.cgi?id=47177

        Breaking Windows and Mac build. (Requested by lca on #webkit).

        * UIProcess/API/C/WKNativeEvent.h:
        * UIProcess/API/qt/qwkpage.cpp:
        * UIProcess/API/qt/qwkpage.h:
        * WebKit2.pri:

2010-10-05  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Antti Koivisto.

        [Qt] Webkit2 MacOS build fix
        https://bugs.webkit.org/show_bug.cgi?id=47167

        Qt WebKit2 MacOS build fix.

        * UIProcess/API/C/WKNativeEvent.h:
        * UIProcess/API/qt/qwkpage.cpp:
        * UIProcess/API/qt/qwkpage.h:
        * WebKit2.pri:

2010-10-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Fix the build when sandboxing is enabled.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureWebProcess):
        * UIProcess/WebProcessProxy.cpp:

2010-10-04  Andras Becsi  <abecsi@webkit.org>

        Reviewed Csaba Osztrogonác.

        [Qt] Build fix after r69037.
        Also remove dummy setUpAcceleratedCompositing() from the source file,
        since it has been removed from the header.

        * UIProcess/WebProcessProxy.cpp:

2010-10-04  Andras Becsi  <abecsi@webkit.org>

        Rubber-stamped by Csaba Osztrogonác.

        [Qt] Fix the WebKit2 build after r69029.

        * DerivedSources.pro:

2010-10-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Change WebProcess initialization to be done with an
        auxiliary struct.

        * Platform/CoreIPC/mac/MachPort.h:
        * Shared/WebProcessCreationParameters.cpp: Added.
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h: Added.
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureWebProcess):
        * UIProcess/WebContext.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        * UIProcess/mac/WebProcessProxyMac.mm: Removed.
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::applicationCacheDirectory):
        (WebKit::WebContext::platformInitializeWebProcess):
        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * win/WebKit2.vcproj:

2010-10-04  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fixes after r68260 and r68686.

        * Platform/CoreIPC/DataReference.h: Add include directive for
        <inttypes.h>, needed for WinCairo build.
        * Shared/win/PlatformCertificateInfo.cpp:
        (WebKit::PlatformCertificateInfo::PlatformCertificateInfo):
        Conditionalize logic specific to WebKitSystemInterface and
        add a stub implementation for WinCairo.

2010-10-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Generate messages sent to the WebProcess class.
        https://bugs.webkit.org/show_bug.cgi?id=47097

        * DerivedSources.make:
        Add new file to generate and new directory to search.

        * Scripts/webkit2/messages.py:
        (forward_declarations_and_headers): Special case class templates.
        (headers_for_type): Special case Vector.
        * Scripts/webkit2/messages_unittest.py:
        Make this script work for passing a templated type.

        * Shared/CoreIPCSupport/WebProcessMessageKinds.h: Removed.

        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::pendingVisitedLinksTimerFired):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::initializeHistoryClient):
        (WebKit::WebContext::ensureWebProcess):
        (WebKit::WebContext::registerURLSchemeAsEmptyDocument):
        (WebKit::WebContext::setCacheModel):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeWebPage):
        (WebKit::WebPageProxy::reinitializeWebPage):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy): Always pass both
        the bundle path and a key, even if the key is null, which it will be for
        all non-mac builds for now.
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::setUpAcceleratedCompositing):
        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::setShouldPaintNativeControls):
        (WebKit::WebContext::platformSetUpWebProcess):
        Use the new syntax for sending the messages.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setShouldTrackVisitedLinks):
        (WebKit::WebProcess::setCacheModel):
        (WebKit::WebProcess::setupAcceleratedCompositingPort):
        (WebKit::WebProcess::setShouldPaintNativeControls):
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/WebProcess.h:
        Convert to using generated didReceiveWebProcessMessage.

        * WebProcess/WebProcess.messages.in: Added.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Update projects.

2010-10-04  Sam Weinig  <sam@webkit.org>

        Fix the Mac build.

        * WebProcess/mac/WebProcessMac.mm:

2010-10-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add ability to set the CacheModel in Webkit2
        https://bugs.webkit.org/show_bug.cgi?id=47066

        Add WKContext function to set the cache model for the context.

        * Shared/CacheModel.h: Added.
        * Shared/CoreIPCSupport/WebProcessMessageKinds.h:
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toCacheModel):
        (WebKit::toRef):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetCacheModel):
        (WKContextGetCacheModel):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::ensureWebProcess):
        (WebKit::WebContext::setCacheModel):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::cacheModel):
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::setCacheModel):
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/WebProcess.h:
        * WebProcess/mac/WebProcessMac.mm: Added.
        (WebKit::memorySize):
        (WebKit::volumeFreeSize):
        (WebKit::WebProcess::platformSetCacheModel):
        * WebProcess/qt/WebProcessQt.cpp: Added.
        (WebKit::WebProcess::platformSetCacheModel):
        * WebProcess/win/WebProcessWin.cpp: Added.
        (WebKit::WebProcess::platformSetCacheModel):
        * win/WebKit2.vcproj:

2010-10-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement newly added Plugin/PluginController member functions for out of process plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=47065
        <rdar://problem/8507194>

        * Platform/CoreIPC/Arguments.h:
        Add typedefs.

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::handleMessage):
        Add new handleMessage overload.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::create):
        Add an isPrivateBrowsingEnabled boolean.
        
        (WebKit::PluginControllerProxy::PluginControllerProxy):
        Add an isPrivateBrowsingEnabled boolean.

        (WebKit::PluginControllerProxy::proxiesForURL):
        (WebKit::PluginControllerProxy::cookiesForURL):
        (WebKit::PluginControllerProxy::setCookiesForURL):
        Send messages to the web process.

        (WebKit::PluginControllerProxy::isPrivateBrowsingEnabled):
        Return whether private browsing is enabled or not.

        (WebKit::PluginControllerProxy::handleKeyboardEvent):
        Call Plugin::handleKeyboardEvent.

        (WebKit::PluginControllerProxy::privateBrowsingStateChanged):
        Call Plugin::privateBrowsingStateChanged.

        * PluginProcess/PluginControllerProxy.messages.in:
        Add new messages.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::createPlugin):
        Pass the isPrivateBrowsingEnabled flag.

        * PluginProcess/WebProcessConnection.h:
        * PluginProcess/WebProcessConnection.messages.in:
        Update CreatePlugin message parameters.

        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::didReceiveMessage):
        (WebKit::PluginProcessConnection::didReceiveSyncMessage):
        It's OK for a plug-in to not get a sync message.

        * WebProcess/Plugins/PluginProcessConnection.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::handleKeyboardEvent):
        (WebKit::PluginProxy::privateBrowsingStateChanged):
        Send messages.

        (WebKit::PluginProxy::proxiesForURL):
        (WebKit::PluginProxy::cookiesForURL):
        (WebKit::PluginProxy::setCookiesForURL):
        Call the plug-in controller.

        * WebProcess/Plugins/PluginProxy.messages.in:
        Add new messages.

2010-10-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Send keyboard events to plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=47064
        <rdar://problem/8507148>

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::handleKeyboardEvent):
        Call platformHandleKeyboardEvent.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::modifierFlags):
        Return the modifier flags given a WebKeyboardEvent.

        (WebKit::initializeKeyboardEvent):
        Initialize an NPCocoaEvent from a WebKeyboardEvent.

        (WebKit::NetscapePlugin::platformHandleKeyboardEvent):
        Initialize the event and dispatch it using NPP_HandleEvent.

        * WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp:
        (WebKit::NetscapePlugin::platformHandleKeyboardEvent):
        Add stub.

        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::NetscapePlugin::platformHandleKeyboardEvent):
        Add stub.
        
        * WebProcess/Plugins/Plugin.h:
        Add handleKeyboardEvent.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::handleEvent):
        Call Plugin::handleKeyboardEvent if we see a keydown or keyup event.

2010-10-01  Mark Rowe  <mrowe@apple.com>

        Build fix.

        Clear the executable bit from a number of source files.

        * WebProcess/WebCoreSupport/win/WebFrameNetworkingContext.h:

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

        Reviewed by Sam Weinig.

        Plug-ins should have access to the private browsing state.
        https://bugs.webkit.org/show_bug.cgi?id=47031
        <rdar://problem/8505405>
    
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue):
        Handle NPNVprivateModeBool.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::isPrivateBrowsingEnabled):
        Call PluginController::isPrivateBrowsingEnabled.

        (WebKit::NetscapePlugin::NPP_SetValue):
        Add NPP_SetValue wrapper.

        (WebKit::NetscapePlugin::privateBrowsingStateChanged):
        Call NPP_SetValue with the updated state.

        * WebProcess/Plugins/Plugin.h:
        Add privateBrowsingStateChanged pure virtual member function.

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

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::privateBrowsingStateChanged):
        Call Plugin::privateBrowsingStateChanged.

2010-10-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add SPI to convert a WKStringRef to a JSStringRef and vice-versa.

        API Test: WebKit2/WKStringJSString

        * Shared/API/c/WKString.cpp:
        (WKStringCreateWithJSString):
        (WKStringCopyJSString):
        * Shared/API/c/WKStringPrivate.h: Added.
        * Shared/WebString.h:
        (WebKit::WebString::create):
        (WebKit::WebString::createJSString):
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:

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

        Reviewed by Sam Weinig.

        Implement proxiesForURL, cookiesForURL and setCookiesForURL
        https://bugs.webkit.org/show_bug.cgi?id=47029

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::proxiesForURL):
        (WebKit::PluginView::cookiesForURL):
        (WebKit::PluginView::setCookiesForURL):

2010-10-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Add additional WKString API
        https://bugs.webkit.org/show_bug.cgi?id=46958

        API Test: WebKit2/WKString

        * Shared/API/c/WKString.cpp:
        (WKStringCreateWithUTF8CString):
        (WKStringGetMaximumUTF8CStringSize):
        (WKStringGetUTF8CString):
        (WKStringIsEqual):
        (WKStringIsEqualToUTF8CString):
        * Shared/API/c/WKString.h:
        * Shared/WebString.h:
        (WebKit::WebString::createFromUTF8String):
        (WebKit::WebString::maximumUTF8CStringSize):
        (WebKit::WebString::getUTF8CString):
        (WebKit::WebString::equal):
        (WebKit::WebString::equalToUTF8String):

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

        Reviewed by Dan Bernstein.

        Implement NPN_GetValueForURL/NPN_SetValueForURL and stub out PluginController functions
        https://bugs.webkit.org/show_bug.cgi?id=46992

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::copyCString):
        Helper function for allocating a string using NPN_MemAlloc.

        (WebKit::NPN_GetValueForURL):
        Ask the plug-in for either the proxy or the cookies given an URL.

        (WebKit::NPN_SetValueForURL):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        Tell the plug-in to set the cookies for the given URL.

        (WebKit::NetscapePlugin::proxiesForURL):
        (WebKit::NetscapePlugin::cookiesForURL):
        (WebKit::NetscapePlugin::setCookiesForURL):
        Call the corresponding PluginController functions.

        * WebProcess/Plugins/PluginController.h:
        Add new pure virtual member functions.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::proxiesForURL):
        (WebKit::PluginView::cookiesForURL):
        (WebKit::PluginView::setCookiesForURL):
        Add stubbed out implementations of the new PluginController functions.

        * WebProcess/Plugins/PluginView.h:

2010-10-01  Adam Roben  <aroben@apple.com>

        Implement NPN_GetValue(NPNVnetscapeWindow)

        Fixes <http://webkit.org/b/46726> <rdar://problem/8486319>
        Right-clicking on windowless Flash plugin in WebKit2 makes a context
        menu appear in the bottom-right corner of the screen

        Test: platform/win/plugins/get-value-netscape-window.html

        Reviewed by Anders Carlsson.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue): Added case for NPNVnetscapeWindow that calls
        through to NetscapePlugin::containingWindow.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h: Added containingWindow
        on Windows.

        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::NetscapePlugin::containingWindow): Added. Calls through to
        the PluginController.
        (WebKit::NetscapePlugin::platformPostInitialize): Changed to use
        containingWindow.

2010-09-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Background doesn't draw when entering accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=45848
        
        LayerBackedDrawingArea::setSize() is normally called in response
        to a message from the UI process, so this can come some time after
        LayerBackedDrawingArea creation. Depending on the timing, we could
        end up being at size 0x0 for the first invalidate and paint, resulting
        in missing content.
        
        The fix is to size the backing layer on creation, using the WebView's size.
        
        Also changed various calls to syncCompositingStateForThisLayerOnly()
        to do lazy updates via scheduleCompositingLayerSync().
        
        Also add the fix for https://bugs.webkit.org/show_bug.cgi?id=46226 (r68028)
        to the WebKit2 code, in scheduleUpdateLayoutRunLoopObserver().

        * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
        (WebKit::LayerBackedDrawingArea::LayerBackedDrawingArea):
        (WebKit::LayerBackedDrawingArea::setNeedsDisplay):
        (WebKit::LayerBackedDrawingArea::setSize):
        * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm:
        (WebKit::LayerBackedDrawingArea::platformInit):
        (WebKit::LayerBackedDrawingArea::attachCompositingContext):
        (WebKit::LayerBackedDrawingArea::detachCompositingContext):
        (WebKit::LayerBackedDrawingArea::setRootCompositingLayer):
        (WebKit::LayerBackedDrawingArea::syncCompositingLayers):
        (WebKit::LayerBackedDrawingArea::scheduleUpdateLayoutRunLoopObserver):

2010-09-29  Jon Honeycutt  <jhoneycutt@apple.com>

        WebKit2 on Windows should use Windows fonts for the various standard
        font families
        https://bugs.webkit.org/show_bug.cgi?id=43499
        <rdar://problem/8272758>

        Reviewed by Adam Roben.

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::WebPreferencesStore):
        Use Windows fonts on Windows.

2010-09-30  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46774 - Add WKStringIsEqual API

        * Shared/API/c/WKString.cpp:
        (WKStringIsEqual):
        * Shared/API/c/WKString.h:

2010-09-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Forward declare structs with 'struct' in the message headers
        https://bugs.webkit.org/show_bug.cgi?id=46925
        <rdar://problem/8497940>

        * Scripts/webkit2/messages.py:
        (struct_or_class): New function which given a type and a namespace returns the correct
        forward declaration syntax (struct or class).

        * Scripts/webkit2/messages_unittest.py:
        Update expected results.

2010-09-30  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Antti Koivisto.

        Original patch by Zalan Bujtas.

        The m_readBuffer might be smaller than the incoming message size and
        thus result in memory corruption. Do a similar fix as the win port,
        resizing the m_readBuffer to have room for the message.

        * Platform/CoreIPC/qt/ConnectionQt.cpp:
        (CoreIPC::Connection::readyReadHandler):

2010-09-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Simon Fraser.

        Calling Connection::send/sendSync from Connection::Client::didClose should always fail
        https://bugs.webkit.org/show_bug.cgi?id=46859
        <rdar://problem/8212583>

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

2010-09-29  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Assertion then crash closing WebKit2 window with accelerated compositing in
        https://bugs.webkit.org/show_bug.cgi?id=46857
        
        Fix two issues when closing a WebKit2 window using accelerated
        compositing.
        
        The first is that the response to the sync DidChangeAcceleratedCompositing message
        sent by changeAcceleratedCompositingMode() may be empty, because the corresponding
        page may have been destroyed already in the UI process. In that case newDrawingAreaInfo
        is not filled in, so we get a DrawingArea::Type of None. Don't attempt to make a new
        drawing area in that case.
        
        We then have to null-check the drawing area in WebPage::didReceiveMessage(),
        in the case where the UI process is calling back with a SuspendPainting message,
        before our page has gone away.
        
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::changeAcceleratedCompositingMode):
        (WebKit::WebPage::didReceiveMessage):

2010-09-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement more of PluginProxy and PLuginControllerProxy.

        * Platform/CoreIPC/ArgumentDecoder.cpp:
        (CoreIPC::ArgumentDecoder::decodeBytes):
        * Platform/CoreIPC/ArgumentDecoder.h:
        Add new overload that takes a DataReference. Wrap the debug function in #ifndef NDEBUG.

        * Platform/CoreIPC/ArgumentEncoder.cpp:
        * Platform/CoreIPC/ArgumentEncoder.h:
        Wrap the debug function in #ifndef NDEBUG.

        * Platform/CoreIPC/Arguments.h:
        Add new typedefs.
        
        * Platform/CoreIPC/DataReference.cpp:
        * Platform/CoreIPC/DataReference.h:
        Add a DataReference class.
    
        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::handleMessage):
        Add new overload.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::didEvaluateJavaScript):
        (WebKit::PluginControllerProxy::streamDidReceiveResponse):
        (WebKit::PluginControllerProxy::streamDidReceiveData):
        (WebKit::PluginControllerProxy::streamDidFinishLoading):
        (WebKit::PluginControllerProxy::streamDidFail):
        call Plugin member functions.

        * PluginProcess/PluginControllerProxy.messages.in:
        Add new messages.
        
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Add DataReference.cpp and DataReference.h

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::didEvaluateJavaScript):
        (WebKit::PluginProxy::streamDidReceiveResponse):
        (WebKit::PluginProxy::streamDidReceiveData):
        (WebKit::PluginProxy::streamDidFinishLoading):
        (WebKit::PluginProxy::streamDidFail):
        Send messages.

2010-09-29  Anders Carlsson  <andersca@apple.com>

        Update expected results.

        * Scripts/webkit2/messages_unittest.py:

2010-09-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement LoadURL
        https://bugs.webkit.org/show_bug.cgi?id=46826

        * Platform/CoreIPC/ArgumentCoders.h:
        Move String argument coder here from WebCoreArgumentCoders.h. Add
        argument coder for AtomicString.

        * Platform/CoreIPC/Arguments.h:
        Add typedefs for Arguments7.

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::handleMessage):
        Add handleMessage overload that takes 7 parameters.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::loadURL):
        Send the LoadURL message.

        * Scripts/webkit2/messages.py:
        (parse_parameter_string): Use rsplit in case the type name contains spaces.
        (argument_coder_headers_for_type): Special case Vector.
        
        * Scripts/webkit2/messages_unittest.py:
        Update results.

        * Shared/WebCoreArgumentCoders.h:
        Add argument coder for HTTPHeaderMap.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::loadURL):
        Ask the plug-in controller to load the URL.

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

2010-09-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Handle getting the user agent in the plug-in process
        https://bugs.webkit.org/show_bug.cgi?id=46819

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::handleMessage):
        Add new handleMessage overload.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::create):
        (WebKit::PluginControllerProxy::PluginControllerProxy):
        Pass the user agent to the plug-in controller proxy.

        (WebKit::PluginControllerProxy::userAgent):
        Return the user agent.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::createPlugin):
        Pass the user agent when creating the plug-in controller proxy.

        * PluginProcess/WebProcessConnection.messages.in:
        Add userAgent.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::userAgent):
        * WebProcess/Plugins/PluginController.h:
        Remove the URL parameter to userAgent.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::initialize):
        Pass the user agent to WebProcessConnection::CreatePlugin.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::userAgent):
        Remove url parameter.

2010-09-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement more PluginProxy member functions
        https://bugs.webkit.org/show_bug.cgi?id=46815

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::handleMessage):
        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::handleMouseEvent):
        (WebKit::PluginControllerProxy::handleWheelEvent):
        (WebKit::PluginControllerProxy::handleMouseEnterEvent):
        (WebKit::PluginControllerProxy::handleMouseLeaveEvent):
        (WebKit::PluginControllerProxy::setFocus):
        (WebKit::PluginControllerProxy::windowFocusChanged):
        (WebKit::PluginControllerProxy::windowFrameChanged):
        (WebKit::PluginControllerProxy::windowVisibilityChanged):
        Call the appropriate Plugin member functions.

        * PluginProcess/PluginControllerProxy.messages.in:
        Add new messages.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::didReceiveMessage):
        It's OK to get a message for a plug-in controller proxy that has gone away.

        (WebKit::WebProcessConnection::didReceiveSyncMessage):
        Forward the message to the PluginControllerProxy handler.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::handleMouseEvent):
        (WebKit::PluginProxy::handleWheelEvent):
        (WebKit::PluginProxy::handleMouseEnterEvent):
        (WebKit::PluginProxy::handleMouseLeaveEvent):
        (WebKit::PluginProxy::setFocus):
        (WebKit::PluginProxy::windowFocusChanged):
        (WebKit::PluginProxy::windowFrameChanged):
        (WebKit::PluginProxy::windowVisibilityChanged):
        Send messages to the plug-in process.
        
        (WebKit::PluginProxy::controller):
        Return the plug-in controller.

2010-09-29  Adam Roben  <aroben@apple.com>

        Look for WebKit.dll (not WebKit_debug.dll) when launching the web
        process in Debug builds

        Fixes <http://webkit.org/b/46809> <rdar://problem/8491809> REGRESSION
        (r67979): All tests crashing on Windows WebKit2 test bot

        Reviewed by Sam Weinig.

        * UIProcess/Launcher/win/ProcessLauncherWin.cpp: WebKit_debug.dll is
        only used in Debug_All builds (but WebKit2WebProcess_debug.exe is used
        in all non-Debug_Internal debug-style builds).

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

        Reviewed by Sam Weinig.

        Paint the plug-in backing store into the WebProcess backing store
        https://bugs.webkit.org/show_bug.cgi?id=46768

        * DerivedSources.make:
        Add PluginProxy.
        
        * Platform/CoreIPC/MessageID.h:
        Add PluginProxy message class.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::paint):
        Let the web process know that we've painted.

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

        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::didReceiveMessage):
        Pass the message on to a plug-in proxy.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::paint):
        Paint our backing store into the graphics context.

        (WebKit::PluginProxy::controller):
        Add notImplemented().

        (WebKit::PluginProxy::update):
        Blit the plug-in backing store into the local backing store and tell the plug-in
        controller that we want to repaint.

        * WebProcess/Plugins/PluginProxy.messages.in: Added.

2010-09-28  Jenn Braithwaite  <jennb@chromium.org>

        Reviewed by Dmitry Titov.

        Added oldPage param to FrameLoaderClient::didTransferChildFrameToNewDocument.
        https://bugs.webkit.org/show_bug.cgi?id=46663

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

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

        Reviewed by Sam Weinig.

        Begin hooking up painting in the plug-in process
        https://bugs.webkit.org/show_bug.cgi?id=46766

        * DerivedSources.make:
        Add PluginControllerProxy.
    
        * Platform/CoreIPC/MessageID.h:
        Add a MessageClassPluginControllerProxy message class.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::PluginControllerProxy):
        Initialize the paint timer.

        (WebKit::PluginControllerProxy::paint):
        Create a graphics context referencing our backing store and paint into it.

        (WebKit::PluginControllerProxy::invalidate):
        Update the dirty rect and start the paint timer if necessary.

        (WebKit::PluginControllerProxy::geometryDidChange):
        If we're passed a new backing store handle, reinitialize the backing store.

        * PluginProcess/PluginControllerProxy.messages.in: Added.
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::didReceiveMessage):
        If the message has a destination ID, forward it to the plug-in controller proxy.

        * Scripts/webkit2/messages.py:
        Always include WebCoreArgumentCoders.h if the type is in the WebCore namespace.

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

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::geometryDidChange):
        Update the size of the backing store. Create a new plug-in backing store if needed and send
        it over to the plug-in process.
        
2010-09-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        ASSERT when launching the plugin process
        https://bugs.webkit.org/show_bug.cgi?id=46754
        <rdar://problem/8484570>

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        Don't assert if we fail to launch the process. Instead, set the connection identifier
        and process ID to null and deallocate the port we created.

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch):
        Move all code from didClose here.

        (WebKit::PluginProcessProxy::didClose):
        Call pluginProcessCrashedOrFailedToLaunch.

        (WebKit::PluginProcessProxy::didFinishLaunching):
        If we failed to launch, call pluginProcessCrashedOrFailedToLaunch.

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

        Reviewed by Sam Weinig.

        Differentiate waitForSyncReply from waitForReply
        https://bugs.webkit.org/show_bug.cgi?id=46752

        Since waitForSyncReply is going to need to dispatch incoming sync messages while
        waiting for the correct reply, we need to add a new waitForSyncReply function that
        can do this.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendSyncMessage):
        Push the pending sync reply information on the m_pendingSyncReplies stack,
        send the message, wait for a reply and pop the information off the stack.

        (CoreIPC::Connection::waitForSyncReply):
        Block while waiting for a reply to the sync message with the given ID.
        
        (CoreIPC::Connection::processIncomingMessage):
        If the incoming message is a sync reply, set the didReceiveReply flag and the replyDecoder
        members in the pending sync reply and signal the client thread to wakeup.

        * Platform/CoreIPC/Connection.h:
        Add a stack of PendingSyncReply structs.

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

        Reviewed by Darin Adler and Dave Hyatt.

        Vertical scroll bar on apple.com is too short with WebKit2
        <rdar://problem/8379230>
        https://bugs.webkit.org/show_bug.cgi?id=46739

        This gets us most of the way to having correct scroll corner behavior. We should
        follow this up by moving to painting the window re-sizer in WebCore.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _ownsWindowGrowBox]):
        (-[WKView _updateGrowBoxForWindowFrameChange]): Calculate whether we should
        be taking the scroll corner into account when laying out scrollbars.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setWindowResizerSize):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setWindowResizerSize):
        (WebKit::WebPage::windowResizerRect): This now returns IntRect() for
        non-mac platforms (or any platform that never sends a setWindowResizerSize
        message).
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2010-09-28  Adam Roben  <aroben@apple.com>

        Tell the UI client when a key event is not handled

        When the web process receives an event, it sends a
        WebPageProxyMessage::DidReceiveEvent message back to the UI process.
        That message is now sent after handling the event, and includes a
        boolean signifying whether or not the event was actually handled.

        Every time WebPageProxy receives a key event, it adds it to a queue.
        When it receives a WebPageProxyMessage::DidReceiveEvent for a key
        event, the event is removed from the queue. If the event was not
        handled, we tell the UI client.

        Fixes <http://webkit.org/b/46660> <rdar://problem/8483465> Need API to
        tell a WebKit2 client application that a key event was not handled

        Reviewed by Kenneth Rohde Christiansen and Sam Weinig.

        * Shared/NativeWebKeyboardEvent.h: Added. This class wraps a
        WebKeyboardEvent and the native event that was used to construct it.
        (WebKit::NativeWebKeyboardEvent::nativeEvent): Simple getter.

        * Shared/WebEvent.h: Made isKeyboardEventType public for
        WebPageProxy's benefit.

        * Shared/mac/NativeWebKeyboardEventMac.mm: Added.
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent):
        * Shared/qt/NativeWebKeyboardEventQt.cpp: Added.
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent):
        * Shared/win/NativeWebKeyboardEventWin.cpp: Added.
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent):
        The constructor creates a WebKeyboardEvent and stores the native
        event.

        * UIProcess/API/C/WKNativeEvent.h: Added.

        * UIProcess/API/C/WKPage.h: Added WKPageDidNotHandleKeyEventCallback
        and WKPageUIClient::didNotHandleKeyEvent.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView keyUp:]):
        (-[WKView keyDown:]):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::onKeyEvent):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::keyPressEvent):
        (QWKPagePrivate::keyReleaseEvent):
        Changed to use NativeWebKeyboardEvent.

        (QWKPage::QWKPage): Updated for addition of didNotHandleKeyEvent.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleKeyboardEvent): Changed to take a
        NativeWebKeyboardEvent and to add it to m_keyEventQueue.
        (WebKit::WebPageProxy::didReceiveMessage): Changed to expect a boolean
        parameter in WebPageProxyMessage::DidReceiveEvent.
        (WebKit::WebPageProxy::didReceiveEvent): Added a boolean "handled"
        parameter. If the event was a keyboard event, we remove it from
        m_keyEventQueue, and if it wasn't handled by WebCore, we tell the UI
        client.

        * UIProcess/WebPageProxy.h: Added m_keyEventQueue.

        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::didNotHandleKeyEvent):
        * UIProcess/WebUIClient.h:
        Added. Just calls through to the WKPageUIClient.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::handleMouseEvent):
        (WebKit::WebPage::mouseEvent):
        (WebKit::handleWheelEvent):
        (WebKit::WebPage::wheelEvent):
        (WebKit::handleKeyEvent):
        (WebKit::WebPage::keyEvent):
        (WebKit::handleTouchEvent):
        (WebKit::WebPage::touchEvent):
        Moved code from the *Event functions into new helper handle*Event
        functions, and changed to pass a boolean to
        WebPageProxyMessage::DidReceiveEvent signaling whether the event was
        handled or not.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:
        Added WKNativeEvent.h and NativeWebKeyboardEvent.

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

        Reviewed by Adam Roben.

        Implement PluginProxy::destroy
        https://bugs.webkit.org/show_bug.cgi?id=46737

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::handleMessage):
        Add overload for a sync message with one in parameter and no out parameters.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::destroyPluginControllerProxy):
        Rename this to avoid conflicts with the destroyPlugin message handler.

        (WebKit::WebProcessConnection::destroyPlugin):
        Call destroyPluginControllerProxy.

        * PluginProcess/WebProcessConnection.messages.in:
        Add DestroyPlugin message.

        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::didClose):
        
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::PluginProxy):
        (WebKit::PluginProxy::~PluginProxy):
        Don't add and/the plug-in proxy from the map in the constructor/destructor. Instead,
        do it in initialize/destroy, since otherwise we could be calling pluginProcessCrashed on a
        PluginController that had already been freed.

        (WebKit::PluginProxy::initialize):
        (WebKit::PluginProxy::destroy):
        send the DestroyPlugin message.

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

        Reviewed by Adam Roben.

        Improve plug-in process lifecycle handling
        https://bugs.webkit.org/show_bug.cgi?id=46734

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::destroyPlugin):
        Destroy and delete the plug-in.

        (WebKit::WebProcessConnection::didClose):
        Our web process crashed, go through and delete all plug-in instances.

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didClose):
        The plug-in process crashed. Go through all pending replies and send them so the
        web processes won't be blocked waiting for a reply.

        (WebKit::PluginProcessProxy::didCreateWebProcessConnection):
        We need to remove the pending reply connection once we've sent the reply.

        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::didClose):
        The plug-in process crashed. Iterate over all proxies and let them know that the plug-in
        process has crashed.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::pluginProcessCrashed):
        Tell our controller that the plug-in process crashed.

        (WebKit::PluginProxy::destroy):
        Null out the controller.

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

        Reviewed by Adam Roben.

        Implement PluginControllerProxy::initialize and have it create a plug-in
        https://bugs.webkit.org/show_bug.cgi?id=46731

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::initialize):
        Create the plug-in and try to initialize it.

        (WebKit::PluginControllerProxy::destroy):
        Destroy the plug-in.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::addPluginControllerProxy):
        Add the given plug-in controller proxy to the map and assume ownership of it.

        (WebKit::WebProcessConnection::removePluginControllerProxy):
        Remove the given plug-in controller proxy from the map and delete it.

        (WebKit::WebProcessConnection::createPlugin):
        Create a plug-in controller proxy and try to initialize it.

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

        Reviewed by Adam Roben.

        Add PluginControllerProxy class
        https://bugs.webkit.org/show_bug.cgi?id=46728

        * PluginProcess/PluginControllerProxy.cpp: Added.
        * PluginProcess/PluginControllerProxy.h: Added.
        Add stubbed out PluginControllerProxy class.
        
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::~WebProcessConnection):
        Assert that we don't have any live plug-in controller proxies.

        (WebKit::WebProcessConnection::addPluginControllerProxy):
        Add the plug-in controller proxy to the map.
                
        (WebKit::WebProcessConnection::removePluginControllerProxy):
        Remove the plug-in controller proxy from the map. If the last plug-in controller
        proxy went away, invalidate the connection.
        
        * WebKit2.xcodeproj/project.pbxproj:
        Add files.

2010-09-28  Adam Roben  <aroben@apple.com>

        Don't call NPP_SetWindow until the plugin's HWND has been
        sized/positioned

        Test: platform/win/plugins/window-geometry-initialized-before-set-window.html

        Reviewed by Anders Carlsson.

        Fixes <http://webkit.org/b/46716> <rdar://problem/8482014> Full-page
        Adobe Reader does not paint until window is resized

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::geometryDidChange): Call NPP_SetWindow after
        updating the platform (HWND) geometry.

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

        Out of process plug-ins shouldn't be turned on just yet...

        * WebKit2Prefix.h:

2010-09-28  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] ProcessLauncherHelper should not leave stray socket files in /tmp.
        https://bugs.webkit.org/show_bug.cgi?id=46722

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::ProcessLauncherHelper::~ProcessLauncherHelper): close the socket.
        (WebKit::ProcessLauncherHelper::ProcessLauncherHelper): delete the helper on exit.

2010-09-28  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Remove support for Qt 4.5
        https://bugs.webkit.org/show_bug.cgi?id=46718

        Remove the code for versions of Qt prior to 4.6.

        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::event):
        * UIProcess/API/qt/qwkpage.cpp:
        * UIProcess/API/qt/qwkpage_p.h:

2010-09-28  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Fix generation of WebPageMessages.h and WebPageMessageReceiver.cpp
        to avoid rebuilding them every time.

        * DerivedSources.pro: add target to extra compilers.

2010-09-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46688 - Add an API to get the WKBackForwardItem at an arbitrary index.

        * UIProcess/API/C/WKBackForwardList.cpp:
        (WKBackForwardListGetItemAtIndex):
        * UIProcess/API/C/WKBackForwardList.h:

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

        Turns out people other than me might want to build this thing.

        * WebKit2.xcodeproj/project.pbxproj:

2010-09-27  Darin Adler  <darin@apple.com>

        * Scripts/webkit2: Added property svn:ignore.

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

        Reviewed by Sam Weinig.

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::sendSync):
        Add new sendSync overload that takes a message struct.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::didReceiveSyncMessage):
        Call didReceiveSyncWebProcessConnectionMessage.
        
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::addPluginProxy):
        Add the plug-in proxy to the map.

        (WebKit::PluginProcessConnection::removePluginProxy):
        Remove the plug-in proxy from the map. If the map is empty, disconnect from the
        plug-in process.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::generatePluginInstanceID):
        Generate a unique plug-in instance ID.

        (WebKit::PluginProxy::PluginProxy):
        Add the plug-in proxy to the map.
        
        (WebKit::PluginProxy::~PluginProxy):
        Remove the plug-in proxy from the map.

        (WebKit::PluginProxy::initialize):
        Ask the plug-in process to create a plug-in.

2010-09-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add remaining event handlers to WKView.

        Also fixes <rdar://problem/8467058>
        Does not get decidePolicyForNavigationAction callback when middle clicking a link

        - Adds otherButton and rightButton NSResponder event handlers to WKView.
        - Renames WebPageProxy event handlers to use the handle prefix.
        - Uses a macro to reduce duplicate code for WKView event handlers.
        - Add view parameter to WebEventFactory::createWebKeyboardEvent on the mac
          for uniformity.

        * Shared/mac/WebEventFactory.h:
        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::keyPressEvent):
        (QWKPagePrivate::keyReleaseEvent):
        (QWKPagePrivate::mouseMoveEvent):
        (QWKPagePrivate::mousePressEvent):
        (QWKPagePrivate::mouseReleaseEvent):
        (QWKPagePrivate::mouseDoubleClickEvent):
        (QWKPagePrivate::wheelEvent):
        (QWKPagePrivate::touchEvent):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleMouseEvent):
        (WebKit::WebPageProxy::handleWheelEvent):
        (WebKit::WebPageProxy::handleKeyboardEvent):
        (WebKit::WebPageProxy::handleTouchEvent):
        * UIProcess/WebPageProxy.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::onMouseEvent):
        (WebKit::WebView::onWheelEvent):
        (WebKit::WebView::onKeyEvent):

2010-09-27  Ivan Krstić  <ike@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/8348990> / <http://webkit.org/b/46633> Make it possible to disable sandboxing of
        web process via runtime flag.

        Enable sandboxing of the web process only if the DisableSandbox user default is not set for the
        web process.

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

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

        Reviewed by Adam Roben.

        Add WebProcessConnection CreatePlugin message
        https://bugs.webkit.org/show_bug.cgi?id=46668

        * DerivedSources.make:
        Add WebProcessConnection.

        * Platform/CoreIPC/HandleMessage.h:
        Add handleMessage overload for a sync message with two input parameters
        and one output parameter.

        (CoreIPC::handleMessage):
        * Platform/CoreIPC/MessageID.h:
        Add MessageClassWebProcessConnection.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::createPlugin):
        Add stub.

        * PluginProcess/WebProcessConnection.messages.in: Added.
        * Scripts/webkit2/messages.py:
        Include headers directly for types that we believe are nested structs.

        * Scripts/webkit2/messages_unittest.py:
        Update expected results.

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

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

        Reviewed by Adam Roben.

        Add support for autogenerating synchronous message handlers
        https://bugs.webkit.org/show_bug.cgi?id=46654

        * Scripts/webkit2/messages.py:
        (reply_type): Renamed from reply_base_class.
        (delayed_reply_type): Renamed from delayed_reply_base_class.
        (message_to_struct_declaration): Add a Reply type typedef.
        (async_case_statement): Rename from case_statement.
        (generate_message_handler): Generate a sync message handler as well.

        * Scripts/webkit2/messages_unittest.py:
        Update expected results.

2010-09-27  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Make generate-forwarding-headers.pl aware of moved headers
        https://bugs.webkit.org/show_bug.cgi?id=46621

        * generate-forwarding-headers.pl:

2010-09-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        The mouseDidMoveOverElement callback in the injected bundle should include modifier info
        https://bugs.webkit.org/show_bug.cgi?id=46629

        - Moves event related API enums to WKEvent.h which can be shared between
          both the bundle and the main API.

        * Shared/API/c/WKEvent.h: Added.
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toRef):
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKPage.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::mouseDidMoveOverElement):
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::mouseDidMoveOverElement):
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:

2010-09-27  Adam Roben  <aroben@apple.com>

        Give mouse wheel events the right coordinates on Windows

        Fixes <http://webkit.org/b/46625> <rdar://problem/8481161> Placing
        mouse cursor inside a scrollable area and scrolling the mouse wheel
        generally doesn't scroll the area

        Reviewed by Sam Weinig.

        * Shared/win/WebEventFactory.cpp:
        (WebKit::point): Renamed from positionForEvent. The old name implied
        that all events used the same relative origin, which is untrue.
        (WebKit::WebEventFactory::createWebMouseEvent): Changed to use point
        and ::ClientToScreen explicitly rather than relying on
        positionForEvent/globalPositionForEvent.
        (WebKit::WebEventFactory::createWebWheelEvent): Changed to use point
        and ::ScreenToClient. The old code was assuming that wheel event
        points are relative to the client area, but they are in fact relative
        to the screen.

2010-09-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Opening links in a new window asserts while decoding decidePolicyForNewWindowAction.
        <rdar://problem/8479445>
        https://bugs.webkit.org/show_bug.cgi?id=46623

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage): Fix the order of decoding to
        match the order of encoding. (Swapping url and mouseButton).

2010-09-27  Adam Roben  <aroben@apple.com>

        Stop leaking the web process's process handle on Windows

        Fixes <http://webkit.org/b/46133> <rdar://problem/8455343>

        Reviewed by Anders Carlsson.

        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::ProcessLauncher::invalidate): Call platformInvalidate.

        * UIProcess/Launcher/ProcessLauncher.h: Added platformInvalidate.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::platformInvalidate):
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::ProcessLauncher::platformInvalidate):
        Stubbed out.

        * UIProcess/Launcher/win/ProcessLauncherWin.cpp:
        (WebKit::ProcessLauncher::platformInvalidate): Close the process
        handle like MSDN says we should.

2010-09-27  Adam Roben  <aroben@apple.com>

        Don't double-free CERT_CONTEXTs when copying PlatformCertificateInfos
        on Windows

        Fixes <http://webkit.org/b/46536> <rdar://problem/8477292> REGRESSION
        (r68260): Crash in PlatformCertificateInfo::~PlatformCertificateInfo
        when navigating away from Gmail

        Reviewed by Sam Weinig.

        * Shared/win/PlatformCertificateInfo.cpp:
        (WebKit::PlatformCertificateInfo::PlatformCertificateInfo):
        (WebKit::PlatformCertificateInfo::operator=):
        * Shared/win/PlatformCertificateInfo.h:
        Added a copy constructor and assigment operator to handle correctly
        reffing/dereffing the CERT_CONTEXTs when copying a
        PlatformCertificateInfo.

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

        Reviewed by Simon Fraser.

        MiniBrowser crashes when opening main menu item
        https://bugs.webkit.org/show_bug.cgi?id=46588

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setEditCommandState): Don't allow default
        String -> NSString conversion to take place, and use the increasingly
        misnamed nsStringFromWebCoreString instead.

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

        Another windows build fix windows attempt.

        * win/WebKit2Common.vsprops:

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

        Another windows build fix windows attempt.

        * win/WebKit2Generated.make:

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

        Attempt to fix windows build.

        * win/WebKit2Common.vsprops:

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

        Attempt to fix Qt build.

        * WebKit2.pro:

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

        Reviewed by Anders Carlsson.

        Move shared WebKit2 API (used by both bundle and main API) to WebKit2/Shared/API
        https://bugs.webkit.org/show_bug.cgi?id=46587

        - Moves shared types (WKArrayRef, WKDictionaryRef, etc) to Shared/API/c.
        - Removes WKBundleBase.h and moves all opaque type declarations to WKBase.h (which
          moves to Shared/API/c).
        - Adds WKSharedAPICast.h which includes shared API casting logic and is included
          by both WKAPICast.h and WKBundleAPICast.h now. Moved to using macros for API 
          mappings to reduce verbosity.
        - Move windows c API files from UIProcess/API/win to UIProcess/API/C/win.

        * Shared/API: Added.
        * Shared/API/c: Added.
        * Shared/API/c/WKArray.cpp: Copied from UIProcess/API/C/WKArray.cpp.
        * Shared/API/c/WKArray.h: Copied from UIProcess/API/C/WKArray.h.
        * Shared/API/c/WKBase.h: Copied from UIProcess/API/C/WKBase.h.
        * Shared/API/c/WKCertificateInfo.cpp: Copied from UIProcess/API/C/WKCertificateInfo.cpp.
        * Shared/API/c/WKCertificateInfo.h: Copied from UIProcess/API/C/WKCertificateInfo.h.
        * Shared/API/c/WKData.cpp: Copied from UIProcess/API/C/WKData.cpp.
        * Shared/API/c/WKData.h: Copied from UIProcess/API/C/WKData.h.
        * Shared/API/c/WKDictionary.cpp: Copied from UIProcess/API/C/WKDictionary.cpp.
        * Shared/API/c/WKDictionary.h: Copied from UIProcess/API/C/WKDictionary.h.
        * Shared/API/c/WKError.cpp: Copied from UIProcess/API/C/WKError.cpp.
        * Shared/API/c/WKError.h: Copied from UIProcess/API/C/WKError.h.
        * Shared/API/c/WKMutableArray.cpp: Copied from UIProcess/API/C/WKMutableArray.cpp.
        * Shared/API/c/WKMutableArray.h: Copied from UIProcess/API/C/WKMutableArray.h.
        * Shared/API/c/WKMutableDictionary.cpp: Copied from UIProcess/API/C/WKMutableDictionary.cpp.
        * Shared/API/c/WKMutableDictionary.h: Copied from UIProcess/API/C/WKMutableDictionary.h.
        * Shared/API/c/WKNumber.cpp: Copied from UIProcess/API/C/WKNumber.cpp.
        * Shared/API/c/WKNumber.h: Copied from UIProcess/API/C/WKNumber.h.
        * Shared/API/c/WKSerializedScriptValue.cpp: Copied from UIProcess/API/C/WKSerializedScriptValue.cpp.
        * Shared/API/c/WKSerializedScriptValue.h: Copied from UIProcess/API/C/WKSerializedScriptValue.h.
        * Shared/API/c/WKSharedAPICast.h: Copied from UIProcess/API/C/WKAPICast.h.
        * Shared/API/c/WKString.cpp: Copied from UIProcess/API/C/WKString.cpp.
        * Shared/API/c/WKString.h: Copied from UIProcess/API/C/WKString.h.
        * Shared/API/c/WKType.cpp: Copied from UIProcess/API/C/WKType.cpp.
        * Shared/API/c/WKType.h: Copied from UIProcess/API/C/WKType.h.
        * Shared/API/c/WKURL.cpp: Copied from UIProcess/API/C/WKURL.cpp.
        * Shared/API/c/WKURL.h: Copied from UIProcess/API/C/WKURL.h.
        * Shared/API/c/WKURLRequest.cpp: Copied from UIProcess/API/C/WKURLRequest.cpp.
        * Shared/API/c/WKURLRequest.h: Copied from UIProcess/API/C/WKURLRequest.h.
        * Shared/API/c/WKURLResponse.cpp: Copied from UIProcess/API/C/WKURLResponse.cpp.
        * Shared/API/c/WKURLResponse.h: Copied from UIProcess/API/C/WKURLResponse.h.
        * Shared/API/c/cf: Copied from UIProcess/API/C/cf.
        * Shared/API/c/mac: Copied from UIProcess/API/C/mac.
        * Shared/API/c/win: Added.
        * Shared/API/c/win/WKBaseWin.h: Copied from UIProcess/API/win/WKBaseWin.h.
        * Shared/API/c/win/WKCertificateInfoWin.cpp: Copied from UIProcess/API/C/win/WKCertificateInfoWin.cpp.
        * Shared/API/c/win/WKCertificateInfoWin.h: Copied from UIProcess/API/C/win/WKCertificateInfoWin.h.
        * UIProcess/API/C/WKAPICast.h: Replaced.
        * UIProcess/API/C/WKArray.cpp: Removed.
        * UIProcess/API/C/WKArray.h: Removed.
        * UIProcess/API/C/WKBase.h: Removed.
        * UIProcess/API/C/WKCertificateInfo.cpp: Removed.
        * UIProcess/API/C/WKCertificateInfo.h: Removed.
        * UIProcess/API/C/WKData.cpp: Removed.
        * UIProcess/API/C/WKData.h: Removed.
        * UIProcess/API/C/WKDictionary.cpp: Removed.
        * UIProcess/API/C/WKDictionary.h: Removed.
        * UIProcess/API/C/WKError.cpp: Removed.
        * UIProcess/API/C/WKError.h: Removed.
        * UIProcess/API/C/WKMutableArray.cpp: Removed.
        * UIProcess/API/C/WKMutableArray.h: Removed.
        * UIProcess/API/C/WKMutableDictionary.cpp: Removed.
        * UIProcess/API/C/WKMutableDictionary.h: Removed.
        * UIProcess/API/C/WKNumber.cpp: Removed.
        * UIProcess/API/C/WKNumber.h: Removed.
        * UIProcess/API/C/WKSerializedScriptValue.cpp: Removed.
        * UIProcess/API/C/WKSerializedScriptValue.h: Removed.
        * UIProcess/API/C/WKString.cpp: Removed.
        * UIProcess/API/C/WKString.h: Removed.
        * UIProcess/API/C/WKType.cpp: Removed.
        * UIProcess/API/C/WKType.h: Removed.
        * UIProcess/API/C/WKURL.cpp: Removed.
        * UIProcess/API/C/WKURL.h: Removed.
        * UIProcess/API/C/WKURLRequest.cpp: Removed.
        * UIProcess/API/C/WKURLRequest.h: Removed.
        * UIProcess/API/C/WKURLResponse.cpp: Removed.
        * UIProcess/API/C/WKURLResponse.h: Removed.
        * UIProcess/API/C/cf: Removed.
        * UIProcess/API/C/cf/WKStringCF.cpp: Removed.
        * UIProcess/API/C/cf/WKStringCF.h: Removed.
        * UIProcess/API/C/cf/WKURLCF.cpp: Removed.
        * UIProcess/API/C/cf/WKURLCF.h: Removed.
        * UIProcess/API/C/cf/WKURLRequestCF.cpp: Removed.
        * UIProcess/API/C/cf/WKURLRequestCF.h: Removed.
        * UIProcess/API/C/cf/WKURLResponseCF.cpp: Removed.
        * UIProcess/API/C/cf/WKURLResponseCF.h: Removed.
        * UIProcess/API/C/mac: Removed.
        * UIProcess/API/C/mac/WKCertificateInfoMac.h: Removed.
        * UIProcess/API/C/mac/WKCertificateInfoMac.mm: Removed.
        * UIProcess/API/C/mac/WKURLRequestNS.h: Removed.
        * UIProcess/API/C/mac/WKURLRequestNS.mm: Removed.
        * UIProcess/API/C/mac/WKURLResponseNS.h: Removed.
        * UIProcess/API/C/mac/WKURLResponseNS.mm: Removed.
        * UIProcess/API/C/win/WKAPICastWin.h: Copied from UIProcess/API/win/WKAPICastWin.h.
        * UIProcess/API/C/win/WKBaseWin.h: Copied from UIProcess/API/win/WKBaseWin.h.
        * UIProcess/API/C/win/WKCertificateInfoWin.cpp: Removed.
        * UIProcess/API/C/win/WKCertificateInfoWin.h: Removed.
        * UIProcess/API/C/win/WKView.cpp: Copied from UIProcess/API/win/WKView.cpp.
        * UIProcess/API/C/win/WKView.h: Copied from UIProcess/API/win/WKView.h.
        * UIProcess/API/win: Removed.
        * UIProcess/API/win/WKAPICastWin.h: Removed.
        * UIProcess/API/win/WKBaseWin.h: Removed.
        * UIProcess/API/win/WKView.cpp: Removed.
        * UIProcess/API/win/WKView.h: Removed.
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundle.h:
        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        * WebProcess/InjectedBundle/API/c/WKBundleBase.h: Removed.
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
        * WebProcess/InjectedBundle/API/c/WKBundleFramePrivate.h:
        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.h:
        * WebProcess/InjectedBundle/API/c/WKBundleInitialize.h:
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/API/c/WKBundleRangeHandle.h:
        * WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.h:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:

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

        Fix non-Mac builds.

        * Platform/SharedMemory.h:
        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::Handle::isNull):

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

        Reviewed by Sam Weinig.

        Add PluginProxy class
        https://bugs.webkit.org/show_bug.cgi?id=46586

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

        * WebProcess/Plugins/PluginProxy.cpp: Added.
        * WebProcess/Plugins/PluginProxy.h: Added.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        Create a PluginProxy wrapper.

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

        Reviewed by Sam Weinig.

        Make it possible to encode null SharedMemory::Handle objects
        https://bugs.webkit.org/show_bug.cgi?id=46585

        * Platform/SharedMemory.h:
        (WebKit::SharedMemory::Handle::isNull):
        Add isNull.

        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::Handle::encode):
        Remove asserts.

        (WebKit::SharedMemory::create):
        Bail if we see a null handle. Also work around a kernel bug where
        mach_vm_map fails if the given address to map is already mapped, even if
        VM_FLAG_ANYWHERE is set.

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

        Reviewed by Sam Weinig.

        Add BackingStore class
        https://bugs.webkit.org/show_bug.cgi?id=46584

        * Shared/BackingStore.cpp: Added.
        (WebKit::BackingStore::create):
        Create a backing store backed by fastMalloc memory.

        (WebKit::BackingStore::createSharable):
        Create a backing store backed by shared memory.

        (WebKit::BackingStore::createHandle):
        Create a handle that can be sent over the wire.

        (WebKit::BackingStore::resize):
        Resize the backing store memory.

        (WebKit::BackingStore::data):
        Return the backing store data.

        * Shared/mac/BackingStoreMac.mm: Added.
        (WebKit::BackingStore::createGraphicsContext):
        Create a graphics context that will paint into the backing store.

        (WebKit::BackingStore::paint):
        Paint the backing store in a graphics context.

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

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

        Reviewed by Sam Weinig.

        Establish a connection between the plug-in process and the web process
        https://bugs.webkit.org/show_bug.cgi?id=46583

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::didReceiveMessage):
        Call the auto-generated didReceivePluginProcessMessage.

        * PluginProcess/PluginProcess.h:
        Add didReceivePluginProcessMessage declaration.

        * PluginProcess/PluginProcess.messages.in:
        Add new "CreateWebProcessConnection" message.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::didReceiveMessage):
        (WebKit::WebProcessConnection::didReceiveSyncMessage):
        (WebKit::WebProcessConnection::didClose):
        (WebKit::WebProcessConnection::didReceiveInvalidMessage):
        Add stubbed out member functions.

        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::getPluginProcessConnection):
        Ask the plug-in process proxy to create a connection.

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::createWebProcessConnection):
        Add the WebProcessProxy and the reply encoder to the queue of pending replies.
        If the process is still launching, keep track of how many pending requests we have, otherwise
        just send the request.

        (WebKit::PluginProcessProxy::didReceiveMessage):
        Call the auto-generated didReceivePluginProcessMessage.

        (WebKit::PluginProcessProxy::didFinishLaunching):
        Send all pending connection requests.

        (WebKit::PluginProcessProxy::didCreateWebProcessConnection):
        Get the first pending reply and send it with the mach port.

        * WebKit2.xcodeproj/project.pbxproj:
        Actually compile PluginProcessMessageReceiver.

        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::PluginProcessConnection):
        Create a CoreIPC connection.

        (WebKit::PluginProcessConnection::didReceiveMessage):
        (WebKit::PluginProcessConnection::didClose):
        (WebKit::PluginProcessConnection::didReceiveInvalidMessage):
        Add stubbed out member functions.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        Ask the plug-in process connection manager for a connection.

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

        Reviewed by Sam Weinig.

        Generated message handlers should include argument coder headers for some types
        https://bugs.webkit.org/show_bug.cgi?id=46582

        * Scripts/webkit2/messages.py:
        When determining which headers to use when generating a message handler, consider the
        argument coder headers.

        * Scripts/webkit2/messages_unittest.py:
        Update test result.

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

        Fix release build.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:

2010-09-24  Enrica Casucci  <enrica@apple.com>

        One more build fix.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::setEditCommandState):

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

        Reviewed by Darin Adler.

        Implement WebKit2 callback equivalent to -[WebUIDelegate mouseDidMoveOverElement:modifierFlags:]
        <rdar://problem/8359279>
        https://bugs.webkit.org/show_bug.cgi?id=46546

        - Adds new WKBundleHitTestResultRef object to represent a content under a cursor.
        - Adds new Bundle and UI level mouseDidMoveOverElement UIClient callbacks, with
          pass through userData to communicate context up to the UIProcess

        * Shared/APIObject.h:
        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::mouseDidMoveOverElement):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::mouseDidMoveOverElement):
        * UIProcess/WebUIClient.h:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        * WebProcess/InjectedBundle/API/c/WKBundleBase.h:
        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp: Added.
        (WKBundleHitTestResultGetTypeID):
        (WKBundleHitTestResultGetNodeHandle):
        (WKBundleHitTestResultGetFrame):
        (WKBundleHitTestResultCopyAbsoluteLinkURL):
        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.h: Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp: Added.
        (WebKit::InjectedBundleHitTestResult::create):
        (WebKit::InjectedBundleHitTestResult::nodeHandle):
        (WebKit::InjectedBundleHitTestResult::webFrame):
        (WebKit::InjectedBundleHitTestResult::absoluteLinkURL):
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.h: Added.
        (WebKit::InjectedBundleHitTestResult::coreHitTestResult):
        (WebKit::InjectedBundleHitTestResult::InjectedBundleHitTestResult):
        (WebKit::InjectedBundleHitTestResult::type):
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::mouseDidMoveOverElement):
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::mouseDidMoveOverElement):
        * win/WebKit2.vcproj:

2010-09-24  Enrica Casucci  <enrica@apple.com>

        Build fix.

        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::setEditCommandState):
        * UIProcess/win/WebView.h:

2010-09-24  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        Maui: Pasteboard support (42317)
        <rdar://problem/7660537>
        https://bugs.webkit.org/show_bug.cgi?id=42317
        
        This is the final piece of the pasteboard support for WebKit2.
        The menu validation has been hooked up for Mac. The validation is
        performed asynchronously and the menu entries updated while the menu
        is visible. I've created a generic mechanism to call editing commands
        that will make it easy to add new commands we will support in the future.
        The commands supported now are copy, cut, paste, pasteAsPlainText, delete
        and selectAll.

        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h: Added DidValidateMenuItem.
        * UIProcess/API/mac/PageClientImpl.h: Added setEditCommandState.
        * UIProcess/API/mac/PageClientImpl.mm: Added setEditCommandState implementation.
        (WebKit::PageClientImpl::setEditCommandState): Added.
        * UIProcess/API/mac/WKView.mm:
        (WebCore::MenuItemInfo::MenuItemInfo):
        (-[WKView initWithFrame:pageNamespaceRef:]):
        (createSelectorExceptionMap): Added.
        (commandNameForSelector): Added.
        (-[WKView validateUserInterfaceItem:]): Added implementation.
        (-[WKView _setUserInterfaceItemState:enabled:state:]): Added.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::validateMenuItem):
        (WebKit::WebPageProxy::executeEditCommand):
        (WebKit::WebPageProxy::didReceiveMessage): Now processing also
        DidValidateMenuItem.
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::executeEditingCommand): Fixed.
        (WebKit::WebPage::isEditingCommandEnabled): Fixed.
        (WebKit::WebPage::validateMenuItem): Added.
        (WebKit::WebPage::executeEditCommand): Added.
        * WebProcess/WebPage/WebPage.h: Removed cut, copy, paste, selectAll.
        Added validateMenuItem and executeEditCommand.
        * WebProcess/WebPage/WebPage.messages.in: Added new messages.
        * UIProcess/API/qt/qwkpage.cpp:
        (WebKit::QWKPage::setEditCommandState): Added.
        * UIProcess/API/qt/qwkpage_p.h: Added 
        

2010-09-24  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * WebKit2.xcodeproj/project.pbxproj:

2010-09-24  Adam Roben  <aroben@apple.com>

        Give windowed Netscape plugins their own window

        The plugin window is a child of the WebView's window. The WebView's
        window is in the UI process, and the plugin's window is in the web
        process (though someday it will be in the plugin process), but Windows
        mostly handles this just fine. Right now we move the plugin's window
        in the web process, but we need to do it at paint time in the UI
        process instead so that the plugin windows will stay in sync with the
        web page's contents. There are also a whole bunch of plugin quirks
        that WebKit1 supports that we don't support yet, but that's a task for
        another day.

        Fixes <http://webkit.org/b/44428> Get basic in-process windowed
        plugins working in WebKit2 on Windows

        Reviewed by Anders Carlsson.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::destroy):
        (WebKit::NetscapePlugin::geometryDidChange):
        Call the new platform-specific functions.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h: Added
        platformDestroy/platformGeometryDidChange, and an m_window member on
        Windows to hold our window.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformDestroy):
        (WebKit::NetscapePlugin::platformGeometryDidChange):
        * WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp:
        (WebKit::NetscapePlugin::platformDestroy):
        (WebKit::NetscapePlugin::platformGeometryDidChange):
        Stubbed these out.

        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::registerPluginView): Added. The code came from
        WebCore's PluginViewWin.cpp, though I changed it to add one to
        COLOR_WINDOW, since that's what MSDN says we should do.
        (WebKit::NetscapePlugin::platformPostInitialize): If we're windowed,
        create a window for the plugin and make it a child of the WebView's
        window. If we're not windowed, just set m_window to 0.
        (WebKit::NetscapePlugin::platformDestroy): Destroy our window if we
        have one and it hasn't been destroyed already.
        (WebKit::NetscapePlugin::platformGeometryDidChange): Update our
        window's size and position.

        * WebProcess/Plugins/PluginController.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::nativeParentWindow):
        * WebProcess/Plugins/PluginView.h:
        Added nativeParentWindow on Windows to return the WebView's window.

2010-09-24  Adam Roben  <aroben@apple.com>

        Pass the WebView's HWND over to the web process

        The HWND is packaged up in the WebPageCreationParameters and stored in
        the WebPage. It will eventually be used by windowed plugins.

        Fixes <http://webkit.org/b/46512> WebPage needs access to its
        corresponding HWND from the UI process

        Reviewed by Anders Carlsson.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        Encode and decode the HWND as a uint64_t.

        * Shared/WebPageCreationParameters.h: Added a nativeWindow member to
        store the HWND.

        * UIProcess/PageClient.h: Added a nativeWindow function on Windows.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters): Store the HWND from the
        page client in the struct to be sent to the web process.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView): Moved the call to initializeWebPage after
        we've created our window so that our window will be ready when
        WebPageProxy asks for it to send it to the web process.
        (WebKit::WebView::nativeWindow): Added. Just returns our window.

        * UIProcess/win/WebView.h: Added nativeWindow.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Store the HWND in the new m_nativeWindow
        member.

        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::nativeWindow): Added this simple getter.

2010-09-24  Adam Roben  <aroben@apple.com>

        Add WebPageProxy::creationParameters

        Fixes <http://webkit.org/b/46510> WebPageProxy has a bunch of
        duplicated WebPageCreationParameters code

        Reviewed by Anders Carlsson.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeWebPage):
        (WebKit::WebPageProxy::reinitializeWebPage):
        (WebKit::WebPageProxy::didReceiveSyncMessage):
        Use creationParameters.

        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        Added creationParameters.

2010-09-24  Adam Roben  <aroben@apple.com>

        Make WebPage::create take a WebPageCreationParameter struct

        It only makes sense, after all.

        Fixes <http://webkit.org/b/46502>.

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::create):
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebPage.h:
        Changed to take a WebPageCreationParameters struct.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::createWebPage): Changed to pass a
        WebPageCreationParameters struct.

2010-09-24  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Andreas Kling.

        Expose all WebKit2 C API preferences via the Qt API.

        Also rename a wrongly named C method (was using Web instead of WK).

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesCopyStandardFontFamily):
        * UIProcess/API/C/WKPreferences.h:
        * UIProcess/API/qt/qwkpreferences.cpp:
        (QWKPreferences::setFontFamily):
        (QWKPreferences::fontFamily):
        (QWKPreferences::testAttribute):
        (QWKPreferences::setAttribute):
        * UIProcess/API/qt/qwkpreferences.h:

2010-09-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Fill in more of PluginProcess
        https://bugs.webkit.org/show_bug.cgi?id=46534

        * DerivedSources.make:
        Add PluginProcessProxy.

        * Platform/CoreIPC/MessageID.h:
        Add a MessageClassPluginProcessProxy message class.

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::PluginProcess):
        Initialize the shutdown timer.

        (WebKit::PluginProcess::initializeConnection):
        Rename this to initializeConnection to avoid conflicts in the CoreIPC message handler.

        (WebKit::PluginProcess::removeWebProcessConnection):
        Remove the given web process connection from our vector.

        (WebKit::PluginProcess::initialize):
        Create the plug-in module.

        (WebKit::PluginProcess::createWebProcessConnection):
        Create a connection handle and send it to the UI process.

        (WebKit::PluginProcess::shutdownTimerFired):
        Quit.

        * PluginProcess/mac/PluginProcessMainMac.mm:
        (WebKit::PluginProcessMain):
        Call initializeConnection.

        * Scripts/webkit2/messages.py:
        Add CoreIPC::MachPort as a special case.

        * Scripts/webkit2/messages_unittest.py:
        Add test case.

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didCreateWebProcessConnection):
        Add empty function.

        * UIProcess/Plugins/PluginProcessProxy.messages.in: Added.
        * WebKit2.xcodeproj/project.pbxproj:
        Add PluginProcessProxy.messages.in.

        * WebKit2Prefix.h:
        Add an ENABLE_PLUGIN_PROCESS #define which is 0 for now.

2010-09-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        messages_unittest.py should compare the generated results against expected results
        https://bugs.webkit.org/show_bug.cgi?id=46490

        * Scripts/webkit2/messages_unittest.py:

2010-09-24  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Antonio Gomes.

        Make it possible to get the page preferences for Qt WebKit2 port.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::QWKPagePrivate):
        (QWKPage::preferences):
        * UIProcess/API/qt/qwkpage.h:
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/API/qt/qwkpreferences.cpp:
        (QWKPreferencesPrivate::createPreferences):
        (QWKPreferencesPrivate::createSharedPreferences):
        (QWKPreferences::sharedPreferences):
        (QWKPreferences::QWKPreferences):
        * UIProcess/API/qt/qwkpreferences.h:

2010-09-24  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Sam Weinig.

        Add WebKit2 C API for setting/getting frame flattening and plugin settings.
        http://webkit.org/b/46477

        NOTE: The plugin setting was partly done but there was no C API.

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::WebPreferencesStore):
        (WebKit::WebPreferencesStore::encode):
        (WebKit::WebPreferencesStore::decode):
        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetFrameFlatteningEnabled):
        (WKPreferencesGetFrameFlatteningEnabled):
        (WKPreferencesSetPluginsEnabled):
        (WKPreferencesGetPluginsEnabled):
        * UIProcess/API/C/WKPreferences.h:
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::setFrameFlatteningEnabled):
        (WebKit::WebPreferences::frameFlatteningEnabled):
        (WebKit::WebPreferences::setPluginsEnabled):
        (WebKit::WebPreferences::pluginsEnabled):
        * UIProcess/WebPreferences.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::preferencesDidChange):

2010-09-24  Adam Roben  <aroben@apple.com>

        Add WebPageCreationParameters

        This struct is used in any messages that end up creating a WebPage.
        Using a struct instead of individual parameters will make it easier to
        add platform-specific data, such as an HWND on Windows.

        Fixes <http://webkit.org/b/46470> Pass parameters for creating a
        WebPage in a single struct

        Reviewed by Anders Carlsson.

        * Shared/WebPageCreationParameters.cpp: Added.
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        Simple encode/decode functions.

        * Shared/WebPageCreationParameters.h: Added.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeWebPage):
        (WebKit::WebPageProxy::reinitializeWebPage):
        (WebKit::WebPageProxy::didReceiveSyncMessage):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createWindow):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::createWebPage):
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/WebProcess.h:
        Changed to use WebPageCreationParameters instead of passing the
        values individually.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Added WebPageCreationParameters.

2010-09-24  Adam Roben  <aroben@apple.com>

        Stop pretending that we know how to encode a DrawingArea and just
        encode the DrawingAreaInfo directly

        DrawingAreaBase and friends were trying to hide the fact that they
        were just encoding/decoding a DrawingAreaInfo behind the scenes, but
        everyone knew what was going on and it was getting embarassing.

        Fixes <http://webkit.org/b/46469> Code to encode/decode a
        DrawingAreaInfo is confusing

        Reviewed by Anders Carlsson.

        * Shared/DrawingAreaBase.cpp: Removed.
        * Shared/DrawingAreaBase.h: Removed encode/decode.
        * UIProcess/ChunkedUpdateDrawingAreaProxy.h: Removed encode override.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeWebPage):
        (WebKit::WebPageProxy::reinitializeWebPage):
        (WebKit::WebPageProxy::didReceiveSyncMessage):
        Changed to encode the DrawingAreaInfo directly.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Removed DrawingAreaBase.cpp.

2010-09-24  Adam Roben  <aroben@apple.com>

        Expose a whole DrawingAreaInfo instead of its constituent parts from
        DrawingAreaBase

        This is just a step toward cleaning up how drawing areas are
        encoded/ecoded.

        Fixes <http://webkit.org/b/46468> DrawingAreaInfo should be used in
        more places

        Reviewed by Anders Carlsson.

        * Shared/DrawingAreaBase.cpp:
        (WebKit::DrawingAreaBase::encode): Changed to use info().

        * Shared/DrawingAreaBase.h:
        (WebKit::DrawingAreaBase::info): Added. Replaces type() and id().
        (WebKit::DrawingAreaBase::DrawingAreaBase): Changed to store a
        DrawingAreaInfo instead of storing its constituent parts.

        * UIProcess/API/mac/WKView.mm:
        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        * UIProcess/LayerBackedDrawingAreaProxy.cpp:
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
        * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        Updated to use info().

2010-09-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add WebProcessConnection class
        https://bugs.webkit.org/show_bug.cgi?id=46478

        * PluginProcess/WebProcessConnection.cpp: Added.
        * PluginProcess/WebProcessConnection.h: Added.
        Add stubbed out WebProcessConnection class.

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

2010-09-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add PluginProcess class
        https://bugs.webkit.org/show_bug.cgi?id=46476

        * PluginProcess/PluginProcess.cpp: Added.
        * PluginProcess/PluginProcess.h: Added.
        Add stubbed out PluginProcess class.

        * PluginProcess/mac/PluginProcessMainMac.mm:
        (WebKit::PluginProcessMain):
        Initialize the plug-in process.

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

        * WebProcess/Plugins/PluginProcessConnection.h:
        Add a comment about which connection this is.

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

        Fix windows build.

        * Shared/win/PlatformCertificateInfo.cpp:
        (WebKit::PlatformCertificateInfo::PlatformCertificateInfo):

2010-09-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Add Windows implementation of PlatformCertificateInfo
        Part of <rdar://problem/8350189>
        https://bugs.webkit.org/show_bug.cgi?id=46450

        * Shared/win/PlatformCertificateInfo.cpp: Added.
        (WebKit::PlatformCertificateInfo::PlatformCertificateInfo):
        (WebKit::PlatformCertificateInfo::~PlatformCertificateInfo):
        (WebKit::PlatformCertificateInfo::encode):
        (WebKit::PlatformCertificateInfo::decode):
        (WebKit::organizationNameForCertificate):
        * Shared/win/PlatformCertificateInfo.h:
        (WebKit::PlatformCertificateInfo::certificateContext):
        * UIProcess/API/C/win/WKCertificateInfoWin.cpp: Added.
        (WKCertificateInfoGetCertificateContext):
        * UIProcess/API/C/win/WKCertificateInfoWin.h: Added.
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:

2010-09-23  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Sam Weinig.

        Add WebKit2 C API for setting the font families.
        https://bugs.webkit.org/show_bug.cgi?id=46408

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetStandardFontFamily):
        (WebPreferencesCopyStandardFontFamily):
        (WKPreferencesSetFixedFontFamily):
        (WKPreferencesCopyFixedFontFamily):
        (WKPreferencesSetSerifFontFamily):
        (WKPreferencesCopySerifFontFamily):
        (WKPreferencesSetSansSerifFontFamily):
        (WKPreferencesCopySansSerifFontFamily):
        (WKPreferencesSetCursiveFontFamily):
        (WKPreferencesCopyCursiveFontFamily):
        (WKPreferencesSetFantasyFontFamily):
        (WKPreferencesCopyFantasyFontFamily):
        * UIProcess/API/C/WKPreferences.h:
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::setStandardFontFamily):
        (WebKit::WebPreferences::standardFontFamily):
        (WebKit::WebPreferences::setFixedFontFamily):
        (WebKit::WebPreferences::fixedFontFamily):
        (WebKit::WebPreferences::setSerifFontFamily):
        (WebKit::WebPreferences::serifFontFamily):
        (WebKit::WebPreferences::setSansSerifFontFamily):
        (WebKit::WebPreferences::sansSerifFontFamily):
        (WebKit::WebPreferences::setCursiveFontFamily):
        (WebKit::WebPreferences::cursiveFontFamily):
        (WebKit::WebPreferences::setFantasyFontFamily):
        (WebKit::WebPreferences::fantasyFontFamily):
        * UIProcess/WebPreferences.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::preferencesDidChange):

2010-09-23  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r68220 on WebKit2.

        WebKit2 API: Need way to know when a frame is removed from the hierarchy
        https://bugs.webkit.org/show_bug.cgi?id=46432

        [Qt] qt_wk_didRemoveFrameFromHierarchy needs to be implemented

        * UIProcess/API/qt/ClientImpl.cpp:
        (qt_wk_didRemoveFrameFromHierarchy):
        * UIProcess/API/qt/ClientImpl.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage):

2010-09-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2 API: Need way to know when a frame is removed from the hierarchy
        <rdar://problem/8414062>
        https://bugs.webkit.org/show_bug.cgi?id=46432

        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::didRemoveFrameFromHierarchy):
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::didRemoveFrameFromHierarchy):
        * UIProcess/WebPageProxy.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::didRemoveFrameFromHierarchy):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::detachedFromParent2):
        (WebKit::WebFrameLoaderClient::didTransferChildFrameToNewDocument):

2010-09-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add PluginProcessConnection and PluginProcessConnectionManager
        https://bugs.webkit.org/show_bug.cgi?id=46425

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

        * WebProcess/Plugins/PluginProcessConnection.cpp:
        Add empty file for now.
        
        * WebProcess/Plugins/PluginProcessConnection.h:
        Add header.

        * WebProcess/Plugins/PluginProcessConnectionManager.cpp: Added.
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
        Check for an existing plug-in process connection. If we don't have one, ask the 
        UI process to create one.
        
        (WebKit::PluginProcessConnectionManager::removePluginProcessConnection):
        Remove the connection from our global vector.

2010-09-23  Adam Roben  <aroben@apple.com>

        Remove the DrawingAreaProxy parameter to
        WebPagProxy::initializeWebPage

        Callers are now required to set the drawing area via
        WebPageProxy::setDrawingArea before calling initializeWebPage. This
        will allow us to delay calling initializeWebPage on Windows until
        after we've created the WebView's HWND, which in turn will allow us to
        send the HWND over to the web process when the page is created. (The
        drawing area must be set before creating the HWND so that its size can
        be updated, etc., as the window is created.)

        Fixes <http://webkit.org/b/46409> DrawingAreaProxy parameter to
        initializeWebPage is unnecessary, and causes problems on Windows

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:pageNamespaceRef:]):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::init):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView):
        Added explicit calls to setDrawingArea.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeWebPage):
        * UIProcess/WebPageProxy.h:
        Removed the DrawingAreaProxy parameter and a stray puts(), and added
        an assertion.

2010-09-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Implement handlers for the GetPluginProcessConnection message
        https://bugs.webkit.org/show_bug.cgi?id=46415

        * Shared/CoreIPCSupport/WebProcessProxyMessageKinds.h:
        Add GetPluginProcessConnection message kind

        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::PluginProcessManager):
        Add missing constructor.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPluginProcessConnection):
        Ask the plug-in process manager for a connection.
        
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        Call getPluginProcessConnection.

        * UIProcess/WebProcessProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        Send the GetPluginProcessConnection message.

2010-09-23  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Reduce minimum DOMTimer interval
        https://bugs.webkit.org/show_bug.cgi?id=45362

        * WebProcess/WebPage/WebPage.cpp:
        Updating set interval call to use Settings' static version.

2010-09-23  Adam Roben  <aroben@apple.com>

        Try to fix the Windows build

        * win/WebKit2Common.vsprops: Add WebKit2/PluginProcess to the include
        path.

2010-09-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add PluginProcessMain files
        https://bugs.webkit.org/show_bug.cgi?id=46379

        * PluginProcess/PluginProcessMain.h: Added.
        * PluginProcess/mac/PluginProcessMainMac.mm: Added.
        
        * WebKit2.xcodeproj/project.pbxproj:
        Add PluginProcessMain files. Remove PluginProcess.messages.in from the target so it
        won't be installed in the WebKit2.framework bundle.

        * WebProcess/WebKitMain.cpp:
        (WebKitMain):
        Call PluginProcessMain if the process type is ProcessLauncher::PluginProcess.

2010-09-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add PluginProcessProxy class
        https://bugs.webkit.org/show_bug.cgi?id=46377

        * DerivedSources.make:
        Add PluginProcess.

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::send):
        Add send overload that takes a message.

        * Platform/CoreIPC/MessageID.h:
        Add MessageClassPluginProcess message kind.

        * PluginProcess/PluginProcess.messages.in: Added.
        Add PluginProcess messages.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::infoForPluginWithPath):
        * UIProcess/Plugins/PluginInfoStore.h:
        New function that returns the plug-in info for a plug-in with the given path.

        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::getPluginProcessConnection):
        Look for an existing plug-in process proxy.

        * UIProcess/Plugins/PluginProcessProxy.cpp: Added.
        (WebKit::PluginProcessProxy::create):
        Launch the process.

        (WebKit::PluginProcessProxy::didReceiveMessage):
        (WebKit::PluginProcessProxy::didReceiveInvalidMessage):
        Add stubbed out functions.

        (WebKit::PluginProcessProxy::didClose):
        Delete the plug-in process proxy.
        
        (WebKit::PluginProcessProxy::didFinishLaunching):
        Open a connection to the plug-in process proxy.

        * UIProcess/Plugins/PluginProcessProxy.h: Added.
        (WebKit::PluginProcessProxy::pluginInfo):
        Return the plug-in info.

        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::context):
        Add a context getter.

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

2010-09-23  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        Expose the BundlePage on the BundleFrame in the API.
        https://bugs.webkit.org/show_bug.cgi?id=46366

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

2010-09-23  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Andreas Kling.

        Add a preference class for Qt for WebKit2.

        * UIProcess/API/qt/qwkpreferences.cpp: Added.
        (QWKPreferences::globalPreferences):
        (QWKPreferences::QWKPreferences):
        (QWKPreferences::~QWKPreferences):
        (QWKPreferences::testAttribute):
        (QWKPreferences::setAttribute):
        * UIProcess/API/qt/qwkpreferences.h: Added.
        * WebKit2.pro:

2010-09-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        It should be possible to conditionally define an entire group of messages
        https://bugs.webkit.org/show_bug.cgi?id=46368

        * Scripts/webkit2/messages.py:
        Check for a condition when parsing the "messages -> " string and set it as the
        message receiver condition.

        * Scripts/webkit2/messages_unittest.py:
        Add test.

2010-09-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Message autogeneration script should parse sync message syntax
        https://bugs.webkit.org/show_bug.cgi?id=46359

        * Scripts/webkit2/messages.py:
        (MessageReceiver.parse): Expand the regular expression to handle sync messages.
        (function_parameter_type): Use a const reference for all parameters except the known builtins.
        (base_class): Returns the base class for a sync message reply struct.
        (delayed_base_class): Returns the base class for a delayed sync message reply struct.
        
        * Scripts/webkit2/messages_unittest.py:
        Add unit tests for various sync messages.

2010-09-22  Andras Becsi  <abecsi@webkit.org>

        Unreviewed build fix after r68079.

        [Qt] Also generate WebPage's message-receiving code and message types
        for the Qt port of WebKit2.

        * DerivedSources.pro:
        * WebKit2.pro:

2010-09-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Stub out a PluginProcessManager class
        https://bugs.webkit.org/show_bug.cgi?id=46305

        * UIProcess/Plugins/PluginProcessManager.cpp: Added.
        (WebKit::PluginProcessManager::shared):
        (WebKit::PluginProcessManager::getPluginProcessConnection):
        (WebKit::PluginProcessManager::removePluginProcessProxy):
        * UIProcess/Plugins/PluginProcessManager.h: Added.
        * WebKit2.xcodeproj/project.pbxproj:

2010-09-22  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Antonio Gomes.

        Add a ViewportConfiguration class for the Qt WebKit2 API, which
        currently calculated a fallback viewport configuration.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::ViewportConfiguration::ViewportConfiguration):
        (QWKPage::ViewportConfiguration::~ViewportConfiguration):
        (QWKPage::ViewportConfiguration::operator=):
        (QWKPage::viewportConfigurationForSize):
        * UIProcess/API/qt/qwkpage.h:
        * UIProcess/API/qt/qwkpage_p.h:
        (QtViewportConfigurationPrivate::QtViewportConfigurationPrivate):

2010-09-22  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebProcess/WebKitMain.cpp:
        (WebKitMain): Fix typo

2010-09-22  Adam Roben  <aroben@apple.com>

        Autogenerate WebPage's message-receiving code and message types

        This patch encompasses several changes that allow message types and
        receiving code to be generated by a script, and add some type-safety
        as a bonus. Messages are now represented by structs instead of an ID +
        ArgumentCoder. The struct contains the arguments and the ID together,
        and has a constructor that enforces the use of correct types.
        Correspondingly, a new overload of WebProcessProxy::send that takes a
        message struct (instead of a message ID and separate arguments) has
        been added. Eventually all callers should use this overload and the
        old one can be removed.

        This patch only touches WebPage's messages. We should transition other
        message receivers over to this new system eventually.

        Fixes <http://webkit.org/b/43636> <rdar://problem/8282462> Add a
        type-safe IPC mechanism to WebKit2

        Reviewed by Anders Carlsson.

        * DerivedSources.make: Added. Calls generate-message-receiver.py and
        generate-messages-header.py for each message receiver it knows about
        (just WebPage for now).

        * Platform/CoreIPC/Arguments.h: Added First/Second/ThirdArgumentType
        typedefs for use in handleMessage.

        * Platform/CoreIPC/HandleMessage.h: Added.
        (CoreIPC::handleMessage): This overloaded function template decodes
        arguments and passes them along to the specified function.

        * Scripts/generate-message-receiver.py: Added.
        * Scripts/generate-messages-header.py: Added.
        These scripts just wrap functionality in messages.py.

        * Scripts/webkit2/__init__.py: Added. This just exists so that Python
        will treat this directory as a package.

        * Scripts/webkit2/messages.py: Added. Contains the code to parse
        messages files and generate .cpp/.h files from them.
        (MessageReceiver.__init__): This class represents a single receiver of
        messages.
        (MessageReceiver.iterparameters): Returns a generator that can be used
        to iterate over all the parameters of all the messages of this
        receiver.
        (MessageReceiver.parse): Reads a messages file from a file-like object
        and parses it into a MessageReceiver object.
        (Message.__init__): This class represents a single message.
        (Message.id): Returns the ID name for this message.
        (Parameter.__init__): This class represents a single parameter for a
        message.
        (messages_header_filename): Returns the name of the header that
        defines the messages for a given receiver.
        (surround_in_condition): Surrounds the given string in #if/#endif if
        there is an associated condition.
        (messages_to_kind_enum): Returns a string that defines the Kind enum
        for these messages.
        (function_parameter_type): Returns the type that should be used when
        passing a value of the given type as a parameter to a function.
        (base_class): Returns the base class for a message struct.
        (message_to_struct_declaration): Returns a string that declares the
        struct for this message.
        (forward_declarations_for_namespace): Returns a string that contains
        forward-declarations for a set of types in a given namespace.
        (forward_declarations): Returns a string that contains all the
        forward-declarations needed in order to declare all the message
        structs for this receiver.
        (generate_header_file): Returns a string containing the messages
        header file for this receiver.
        (handler_function): Returns the name of the function that handles a
        given message for a given receiver.
        (case_statement): Returns a string containing a case statement for
        handling the given message.
        (header_for_type): Returns the header needed to define a given type,
        enclosed in quotes or angle brackets as needed.
        (generate_message_handler): Returns a string containing the contents
        of a .cpp file that defines a didReceive*Message function.

        * Scripts/webkit2/messages_unittest.py: Added. Contains tests for
        messages.py.

        * Shared/CoreIPCSupport/WebPageMessageKinds.h: Removed. This has been
        replaced by a generated WebPageMessages.h header.

        * UIProcess/WebEditCommandProxy.cpp:
        * UIProcess/WebPageProxy.cpp:
        Updated to use the new message structs and WebProcessProxy::send
        overload.

        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::send): Added this new overload that takes a
        message struct.

        * WebKit2.xcodeproj/project.pbxproj: Added a Derived Sources shell
        script target that invokes DerivedSources.make. Added "Derived
        Sources" and "Scripts" groups that contain the various new files.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceivePolicyDecision):
        (WebKit::WebPage::getSourceForFrame):
        Changed these functions to take the raw IPC types and do the necessary
        translation themselves. This keeps the generated code from need to
        know how to perform the translation.

        (WebKit::WebPage::didReceiveMessage): Replaced handling of WebPage
        messages with a call to didReceiveWebPageMessage, whose implementation
        is generated by the scripts.

        * WebProcess/WebPage/WebPage.h: Added didReceiveWebPageMessage.

        * WebProcess/WebPage/WebPage.messages.in: Added. This file declares
        all of the messages that WebPage receives, roughly grouped by
        functionality.

        * win/WebKit2.vcproj: Added "Derived Sources" and "Scripts" filters
        that contain the various new files. Let VS resort some other files.

        * win/WebKit2Common.vsprops: Added
        $(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources to the include
        path so that the generated messages header can be found.

        * win/WebKit2.make: Copy the generated source files to $(DSTROOT).

        * win/WebKit2Generated.make: Added a call to build-generated-files.sh.

        * win/WebKit2Generated.vcproj: Added build-generated-files.sh.

        * win/build-generated-files.sh: Added. Invokes DerivedSources.make.

2010-09-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Enhance ProcessLauncher to be able to launch plug-in processes
        https://bugs.webkit.org/show_bug.cgi?id=46295

        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::ProcessLauncher::ProcessLauncher):
        Make the ProcessLauncher constructor take a LaunchOptions struct.

        (WebKit::ProcessLauncher::processTypeAsString):
        Given a process type, return its string representation.

        (WebKit::ProcessLauncher::getProcessTypeFromString):
        And vice versa.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        Rename "mode" to "type" and pass the type as a string based on the LaunchOptions struct.
        Also, set the launch architecture from the LaunchOptions struct.

        * UIProcess/Launcher/win/ProcessLauncherWin.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        Rename "mode" to "type."

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::connect):
        Initialize a LaunchOptions struct.

        * WebProcess/WebKitMain.cpp:
        (WebKitMain):
        Factor code that can be shared between the mac and windows WebKitMain code out into a
        WebKitMain overload that takes a CommandLine.

        * WebProcess/WebProcessMain.h:
        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain):
        * WebProcess/win/WebProcessMainWin.cpp:
        (WebKit::WebProcessMain):
        Change WebProcessMain to take a const CommandLine reference instead of a pointer.

2010-09-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Rename GetPluginHostConnection to GetPluginPath
        https://bugs.webkit.org/show_bug.cgi?id=46292

        Rename GetPluginHostConnection to GetPluginPath since this message will always get the
        plug-in path. We'll add another message to actually get the connection.

        * Shared/CoreIPCSupport/WebProcessProxyMessageKinds.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPluginPath):
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        * UIProcess/WebProcessProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):

2010-09-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Move plug-in creation to WebPage::createPlugin
        https://bugs.webkit.org/show_bug.cgi?id=46289

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin):
        Call WebPage::createPlugin.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        Create the plug-in.

2010-09-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Random plug-in cleanups
        https://bugs.webkit.org/show_bug.cgi?id=46279

        * WebProcess/Plugins/Plugin.cpp:
        (WebKit::Plugin::Parameters::encode):
        (WebKit::Plugin::Parameters::decode):
        Add CoreIPC coding support for the Plugin::Parameters struct.

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

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::handleEvent):
        handleEvent can be called when m_plugin is null.

        (WebKit::PluginView::pluginProcessCrashed):
        Ask the renderer to show the crashed plug-in indicator.
        
2010-09-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Don't listen for some window notifications on all windows
        https://bugs.webkit.org/show_bug.cgi?id=46277

        Only listen for NSWindowDidBecomeKeyNotification and NSWindowDidResignKeyNotification notifications
        on all windows; this matches old WebKit and fixes a crash where we would send notifications to views whose
        underlying pages were invalid.

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

2010-09-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Crash when running plug-in layout tests
        https://bugs.webkit.org/show_bug.cgi?id=46269

        Store the web page directly in the PluginView class, instead of getting it from the frame
        of the plug-in element; this fixes two crashes, one where the plug-in element had been deallocated
        before the plug-in view, and another where the plug-in element's document did not have a frame.

        This also makes things more robust since we're asserting in the WebPage destructor that no plug-ins have
        an outstanding reference to it.
        
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::webPage):
        (WebKit::PluginView::PluginView):
        (WebKit::PluginView::~PluginView):
        (WebKit::PluginView::initializePlugin):
        * WebProcess/Plugins/PluginView.h:

2010-09-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Change a bunch of Vector<char> to Vector<uint8_t> to better indicate that we're
        dealing with raw bytes.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::parsePostBuffer):
        (WebKit::NPN_GetURL):
        (WebKit::NPN_PostURL):
        (WebKit::NPN_GetURLNotify):
        (WebKit::NPN_PostURLNotify):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::loadURL):
        (WebKit::NetscapePlugin::initialize):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::deliverData):
        (WebKit::NetscapePluginStream::deliverDataToPlugin):
        * WebProcess/Plugins/Netscape/NetscapePluginStream.h:
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::loadURL):
        * WebProcess/Plugins/PluginView.h:

2010-09-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Assertion fails in [WKView _updateWindowFrame] when closing a WebKit2 window
        https://bugs.webkit.org/show_bug.cgi?id=46264
        <rdar://problem/8463534>

        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewDidMoveToWindow]):
        Only update window visibility and frame when we're moving to a window.

2010-09-22  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] PluginStrategy implementation is broken
        https://bugs.webkit.org/show_bug.cgi?id=46078

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::QWKPagePrivate):
        Initialize the WebPlatformStrategies at the UI side as well because
        we are using the LocalizationStrategy in the UI process.
        Added a FIXME since this should be fixed in the future.

2010-09-22  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        PluginStrategy should satisfy the needs of Qt
        https://bugs.webkit.org/show_bug.cgi?id=45857
        No new functionality so no new tests.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::getPluginInfo):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2010-09-21  Steve Falkenburg  <sfalken@apple.com>

        Rubber stamped by Simon Fraser.

        Add DirectX SDK include path.

        * win/WebKit2DirectX.vsprops:

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

        Reviewed by Dan Bernstein.

        Forward window focus changes to the plug-in
        https://bugs.webkit.org/show_bug.cgi?id=46227

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::windowFocusChanged):
        Send the NPCocoaEventWindowFocusChanged event.

        (WebKit::NetscapePlugin::windowFrameChanged):
        (WebKit::NetscapePlugin::windowVisibilityChanged):
        Add stubs.

        * WebProcess/Plugins/Plugin.h:
        Add windowFocusChanged, windowFrameChanged and windowVisibilityChanged.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::webPage):
        Make webPage a member function instead.

        (WebKit::PluginView::setWindowIsFocused):
        Call the plug-in member function.

        (WebKit::PluginView::initializePlugin):
        When the plug-in has been initialized, update its window frame, window visibility 
        and window focus states.

        (WebKit::PluginView::setParent):
        Move viewGeometryDidChange to initializePlugin.
        
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setActive):
        Tell all plug-in views about the new window focus state.

        (WebKit::WebPage::windowIsFocused):
        Return whether the window is focused or not.

        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::windowIsVisible):
        (WebKit::WebPage::windowFrame):
        Add getters.

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

        Reviewed by John Sullivan.

        Handle booleans in injected bundle messages
        https://bugs.webkit.org/show_bug.cgi?id=46213

        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        (WebKit::UserMessageDecoder::baseDecode):

2010-09-21  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        WebKit2 should look for WebKit2WebProcess.exe next to WebKit.dll
        https://bugs.webkit.org/show_bug.cgi?id=46209
        <rdar://problem/8445639>
        
        Find WebKit2WebProcess.exe by getting the full path to WebKit.dll, and then
        removing the last path component and replacing it with WebKit2WebProcess.exe.

        * UIProcess/Launcher/win/ProcessLauncherWin.cpp:
        (WebKit::ProcessLauncher::launchProcess):

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

        Reviewed by Adam Roben.

        Send window visibility and window frame change sizes to the plug-in
        https://bugs.webkit.org/show_bug.cgi?id=46202

        * Shared/CoreIPCSupport/WebPageMessageKinds.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _updateWindowVisibility]):
        Call WebPageProxy::setWindowIsVisible.

        (-[WKView addWindowObserversForWindow:]):
        Add additional observers.

        (-[WKView removeWindowObservers]):
        Remove observers.

        (-[WKView _updateWindowFrame]):
        Call WebPageProxy::setWindowFrame.

        (-[WKView viewDidMoveToWindow]):
        Update the window visibility and the web frame.

        (-[WKView _windowDidMiniaturize:]):
        (-[WKView _windowDidDeminiaturize:]):
        Update the window visibility.

        (-[WKView _windowFrameDidChange:]):
        Update the window frame.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setWindowIsVisible):
        (WebKit::WebPageProxy::setWindowFrame):
        Send messages along to the web process.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::PluginView):
        Register the plug-in view.

        (WebKit::PluginView::~PluginView):
        Unregister the plug-in view.

        (WebKit::PluginView::setWindowIsVisible):
        (WebKit::PluginView::setWindowFrame):
        Add empty stubs.

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

        (WebKit::WebPage::~WebPage):
        Assert that all plug-in views have been removed.

        (WebKit::WebPage::setWindowIsVisible):
        Notify all plug-ins about the window visibility change.
        
        (WebKit::WebPage::setWindowFrame):
        Notify all plug-ins about the window frame change.
        
        (WebKit::WebPage::didReceiveMessage):
        Handle setWindowIsVisible and setWindowFrame.

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

        Reviewed by Mark Rowe.

        * Configurations/WebKit2.xcconfig:
        Add a note about keeping the path in MainMac.cpp in sync with the install path.

        * mac/MainMac.cpp:
        (main):
        Use the correct framework path.

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

        Fix build.

        * mac/MainMac.cpp:
        (closeUnusedFileDescriptors):
        Move this out into a separate function.

        (main):
        Don't use the soft linking macros, they were bringing in WTFReportAssertionFailure.

2010-09-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Zombie WebProcesses are left around
        https://bugs.webkit.org/show_bug.cgi?id=46148
        <rdar://problem/8455898>

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::setupTerminationNotificationHandler):
        Register a dispatch handler that calls waitpid when the child process exits. This prevents zombies from
        staying around after the child process has quit.

        (WebKit::ProcessLauncher::launchProcess):
        Pass POSIX_SPAWN_START_SUSPENDED to posix_spawn to avoid race conditions when setting up the termination
        notification handler. When the handler is set up we send the SIGCONT signal to the child process.
        
        * mac/MainMac.cpp:
        (main):
        Loop through all file descriptors except for stdin, stdout and stderr and close them.

        * WebKit2.xcodeproj/project.pbxproj:
        Soft-link the Web process with WebKit2. We do this so we can ensure that we won't accidentally close any
        file descriptors opened by initialization code that would have been called before main().

2010-09-21  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        [Qt] QtWebProcess should clean up shared memory map files on close
        https://bugs.webkit.org/show_bug.cgi?id=45984

        Relocate MappedMemory struct code to it's own header and implement
        a singleton pool class (MappedMemoryPool) which tracks shared memory
        to be able to clean up map files from disk if RunLoop stops.

        * Shared/qt/MappedMemory.h: Added.
        (WebKit::MappedMemory::markUsed):
        (WebKit::MappedMemory::markFree):
        (WebKit::MappedMemory::isFree):
        * Shared/qt/MappedMemoryPool.cpp: Added.
        (WebKit::MappedMemoryPool::MappedMemoryPool):
        (WebKit::MappedMemoryPool::instance):
        (WebKit::MappedMemoryPool::size):
        (WebKit::MappedMemoryPool::at):
        (WebKit::MappedMemoryPool::append):
        (WebKit::MappedMemoryPool::cleanUp):
        * Shared/qt/UpdateChunk.cpp:
        (WebKit::mapMemory):
        (WebKit::mapFile):
        * Shared/qt/UpdateChunk.h:
        * WebKit2.pro:

2010-09-20  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GTK] enhanced context menu for media elements
        https://bugs.webkit.org/show_bug.cgi?id=45021

        New localized strings for the media element context-menu.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::contextMenuItemTagOpenVideoInNewWindow):
        (WebKit::WebPlatformStrategies::contextMenuItemTagOpenAudioInNewWindow):
        (WebKit::WebPlatformStrategies::contextMenuItemTagCopyVideoLinkToClipboard):
        (WebKit::WebPlatformStrategies::contextMenuItemTagCopyAudioLinkToClipboard):
        (WebKit::WebPlatformStrategies::contextMenuItemTagToggleMediaControls):
        (WebKit::WebPlatformStrategies::contextMenuItemTagToggleMediaLoop):
        (WebKit::WebPlatformStrategies::contextMenuItemTagEnterVideoFullscreen):
        (WebKit::WebPlatformStrategies::contextMenuItemTagMediaPlay):
        (WebKit::WebPlatformStrategies::contextMenuItemTagMediaPause):
        (WebKit::WebPlatformStrategies::contextMenuItemTagMediaMute):
        (WebKit::WebPlatformStrategies::contextMenuItemTagMediaUnMute):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2010-09-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Add a way to delay sending replies to sync requests
        https://bugs.webkit.org/show_bug.cgi?id=46117

        Change the didReceiveSyncMessage client message to return a SyncReplyMode. If the SyncReplyMode is 
        AutomaticReply, the reply will be sent when the didReceiveSyncMessage function returns. However, if it is
        ManualReply, then the client is handed ownership of the reply ArgumentEncoder and can choose to send it 
        at a later time using Connection::sendSyncReply.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendSyncReply):
        Send the message as a sync reply.

        (CoreIPC::Connection::dispatchMessages):
        Check the return value of didReceiveSyncMessage. If it is AutomaticReply, immediately send the reply.

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::MessageReceiver::didReceiveSyncMessage):
        Change return type.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        * UIProcess/WebProcessProxy.h:
        Update for changed return type.

2010-09-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Don't use bufferIsLargeEnoughToContain for Vectors with variable sized elements
        https://bugs.webkit.org/show_bug.cgi?id=46109

        Add a new VectorArgumentCoder class template, with specializations based on whether the
        element is fixed size or not. Then update the ArgumentEncoder<Vector<T>> specialization to choose the
        right VectorArgumentCoder specialization. To determine this, we use the "IsArithmetic" type trait, 
        which holds true for all integer types and all floating point types. 
        
        * Platform/CoreIPC/ArgumentCoders.h:

2010-09-20  Enrica Casucci  <enrica@apple.com>

        Reviewed by Sam Weinig.

        Pasteboard doesn't work in WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=42317
        <rdar://problem/7660537>

        Adding support for RTF, RTFD and NSUrl formats on the Mac.
        Still missing the selective enabling of the menu entries.

        * WebKit2.xcodeproj/project.pbxproj: Added WebEditorClientMac.mm.
        * WebProcess/WebCoreSupport/WebEditorClient.cpp: Removed Mac only methods
        that are now in WebEditorClientMac.mm
        * WebProcess/WebCoreSupport/WebEditorClient.h: Fixed style and changed parameter
        type in documentFragmentFromAttributedString to be a Vector of RefPtr.
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: Added.
        All the following methods have been moved from WebEditorClient.cpp.
        (WebKit::WebEditorClient::userVisibleString): Added implementation.
        (WebKit::createExcludedElementsForAttributedStringConversion): Added.
        (WebKit::WebEditorClient::documentFragmentFromAttributedString): Added implementation.
        (WebKit::WebEditorClient::setInsertionPasteboard):
        (WebKit::WebEditorClient::pasteboardTypesForSelection):
        (WebKit::WebEditorClient::uppercaseWord):
        (WebKit::WebEditorClient::lowercaseWord):
        (WebKit::WebEditorClient::capitalizeWord):
        (WebKit::WebEditorClient::showSubstitutionsPanel):
        (WebKit::WebEditorClient::substitutionsPanelIsShowing):
        (WebKit::WebEditorClient::toggleSmartInsertDelete):
        (WebKit::WebEditorClient::isAutomaticQuoteSubstitutionEnabled):
        (WebKit::WebEditorClient::toggleAutomaticQuoteSubstitution):
        (WebKit::WebEditorClient::isAutomaticLinkDetectionEnabled):
        (WebKit::WebEditorClient::toggleAutomaticLinkDetection):
        (WebKit::WebEditorClient::isAutomaticDashSubstitutionEnabled):
        (WebKit::WebEditorClient::toggleAutomaticDashSubstitution):
        (WebKit::WebEditorClient::isAutomaticTextReplacementEnabled):
        (WebKit::WebEditorClient::toggleAutomaticTextReplacement):
        (WebKit::WebEditorClient::isAutomaticSpellingCorrectionEnabled):
        (WebKit::WebEditorClient::toggleAutomaticSpellingCorrection):
        (WebKit::WebEditorClient::checkTextOfParagraph):
        (WebKit::WebEditorClient::showCorrectionPanel):
        (WebKit::WebEditorClient::dismissCorrectionPanel):
        (WebKit::WebEditorClient::isShowingCorrectionPanel):

2010-09-20  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        Fix a style issue and add a FIXME to make the AppleConnect plug-in
        workaround dependent on site-specific quirks being enabled, which
        WebKit2 does not yet support in its WebPreferences implementation.
        https://bugs.webkit.org/show_bug.cgi?id=45960

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

2010-09-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Add WebKit2 API to load a string as plain text
        https://bugs.webkit.org/show_bug.cgi?id=46091

        * Shared/CoreIPCSupport/WebPageMessageKinds.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageLoadPlainTextString):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadPlainTextString):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadData):
        (WebKit::WebPage::loadHTMLString):
        (WebKit::WebPage::loadPlainTextString):
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebPage/WebPage.h:

2010-09-19  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * UIProcess/API/C/WKPage.h:

2010-09-19  Sam Weinig  <sam@webkit.org>

        Attempt to fix Qt build.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::doTextFieldCommandFromEvent):

2010-09-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add WebKit2 equivalent of the WebFormDelegate's doCommandBySelector
        <rdar://problem/8377088>
        https://bugs.webkit.org/show_bug.cgi?id=46073

        Add bundle client to match the behavior of:
          - (BOOL)textField:(DOMHTMLInputElement *)element doCommandBySelector:(SEL)commandSelector inFrame:(WebFrame *)frame;

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:
        (WebKit::InjectedBundlePageFormClient::shouldPerformActionInTextField):
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.h:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::getActionTypeForKeyEvent):
        (WebKit::WebEditorClient::doTextFieldCommandFromEvent):
        (WebKit::WebEditorClient::textWillBeDeletedInTextField):

2010-09-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2 decidePolicyForNavigationAction should include mouse button information
        <rdar://problem/8413165>
        https://bugs.webkit.org/show_bug.cgi?id=46060

        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toRef):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPolicyClient.cpp:
        (WebKit::WebPolicyClient::decidePolicyForNavigationAction):
        (WebKit::WebPolicyClient::decidePolicyForNewWindowAction):
        * UIProcess/WebPolicyClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::findMouseEvent):
        (WebKit::mouseButtonForNavigationAction):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2010-09-19  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix after r67813.

        Replace WKBundleRangeRef with WKBundleRangeHandleRef.
        https://bugs.webkit.org/show_bug.cgi?id=46054

        * DerivedSources.pro: Add WebCore/generated/JSRange.h to WEBCORE_GENERATED_HEADERS_FOR_WEBKIT2

2010-09-19  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix after r67802.

        WebKit2: Improve/unify the PageLoadClient interfaces.
        https://bugs.webkit.org/show_bug.cgi?id=46043

        * UIProcess/API/qt/ClientImpl.h:

2010-09-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Replace WKBundleRangeRef with WKBundleRangeHandleRef.
        https://bugs.webkit.org/show_bug.cgi?id=46054

        The new one acts like WKBundleNodeHandleRef and allows for getting a
        wrapper in a specific world for the handle.

        * Shared/APIObject.h:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        * WebProcess/InjectedBundle/API/c/WKBundleBase.h:
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameGetJavaScriptWrapperForRangeForWorld):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/API/c/WKBundleRange.cpp: Removed.
        * WebProcess/InjectedBundle/API/c/WKBundleRange.h: Removed.
        * WebProcess/InjectedBundle/API/c/WKBundleRangeHandle.cpp: Added.
        (WKBundleRangeHandleGetTypeID):
        * WebProcess/InjectedBundle/API/c/WKBundleRangeHandle.h: Added.
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::getOrCreate):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp: Added.
        (WebKit::domHandleCache):
        (WebKit::InjectedBundleRangeHandle::getOrCreate):
        (WebKit::InjectedBundleRangeHandle::create):
        (WebKit::InjectedBundleRangeHandle::InjectedBundleRangeHandle):
        (WebKit::InjectedBundleRangeHandle::~InjectedBundleRangeHandle):
        (WebKit::InjectedBundleRangeHandle::coreRange):
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.h: Added.
        (WebKit::InjectedBundleRangeHandle::type):
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp:
        (WebKit::InjectedBundlePageEditorClient::shouldBeginEditing):
        (WebKit::InjectedBundlePageEditorClient::shouldEndEditing):
        (WebKit::InjectedBundlePageEditorClient::shouldInsertNode):
        (WebKit::InjectedBundlePageEditorClient::shouldInsertText):
        (WebKit::InjectedBundlePageEditorClient::shouldDeleteRange):
        (WebKit::InjectedBundlePageEditorClient::shouldChangeSelectedRange):
        (WebKit::InjectedBundlePageEditorClient::shouldApplyStyle):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::jsWrapperForWorld):
        * WebProcess/WebPage/WebFrame.h:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:

2010-09-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Improve/unify the PageLoadClient interfaces.
        https://bugs.webkit.org/show_bug.cgi?id=46043

        - Ensure that all the PageLoadClient functions (that are load related)
          have bundle API equivalents (this meant adding didFirstLayoutForFrame
          and didFirstVisuallyNonEmptyLayoutForFrame to the BundlePageLoadClient).
        - Add a userData out parameters to all the now paired BundlePageLoadClient
          functions, and a matching userData parameter to the PageLoadClient ones.

        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/qt/ClientImpl.cpp:
        (qt_wk_didStartProvisionalLoadForFrame):
        (qt_wk_didReceiveServerRedirectForProvisionalLoadForFrame):
        (qt_wk_didFailProvisionalLoadWithErrorForFrame):
        (qt_wk_didCommitLoadForFrame):
        (qt_wk_didFinishDocumentLoadForFrame):
        (qt_wk_didFinishLoadForFrame):
        (qt_wk_didFailLoadWithErrorForFrame):
        (qt_wk_didReceiveTitleForFrame):
        (qt_wk_didFirstLayoutForFrame):
        (qt_wk_didFirstVisuallyNonEmptyLayoutForFrame):
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::didStartProvisionalLoadForFrame):
        (WebKit::WebLoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::WebLoaderClient::didFailProvisionalLoadWithErrorForFrame):
        (WebKit::WebLoaderClient::didCommitLoadForFrame):
        (WebKit::WebLoaderClient::didFinishDocumentLoadForFrame):
        (WebKit::WebLoaderClient::didFinishLoadForFrame):
        (WebKit::WebLoaderClient::didFailLoadWithErrorForFrame):
        (WebKit::WebLoaderClient::didReceiveTitleForFrame):
        (WebKit::WebLoaderClient::didFirstLayoutForFrame):
        (WebKit::WebLoaderClient::didFirstVisuallyNonEmptyLayoutForFrame):
        (WebKit::WebLoaderClient::didStartProgress):
        (WebKit::WebLoaderClient::didChangeProgress):
        (WebKit::WebLoaderClient::didFinishProgress):
        (WebKit::WebLoaderClient::didBecomeUnresponsive):
        (WebKit::WebLoaderClient::didBecomeResponsive):
        (WebKit::WebLoaderClient::processDidExit):
        (WebKit::WebLoaderClient::didChangeBackForwardList):
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        (WebKit::WebPageProxy::didReceiveTitleForFrame):
        (WebKit::WebPageProxy::didFirstLayoutForFrame):
        (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame):
        * UIProcess/WebPageProxy.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::didStartProvisionalLoadForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didFailProvisionalLoadWithErrorForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didCommitLoadForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didFinishDocumentLoadForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didFinishLoadForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didFailLoadWithErrorForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didReceiveTitleForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didFirstLayoutForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didFirstVisuallyNonEmptyLayoutForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didClearWindowObjectForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didCancelClientRedirectForFrame):
        (WebKit::InjectedBundlePageLoaderClient::willPerformClientRedirectForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didChangeLocationWithinPageForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didHandleOnloadEventsForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didDisplayInsecureContentForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didRunInsecureContentForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidStartProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveTitle):
        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFailLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFinishDocumentLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFinishLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFirstLayout):
        (WebKit::WebFrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout):

2010-09-18  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Enable Platform Strategies on Qt

        [Qt] Turn on PLATFORM_STRATEGIES
        https://bugs.webkit.org/show_bug.cgi?id=45831

        * WebKit2.pro: Added Added WebPlatformStrategies.{cpp,h}

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

        Reviewed by Jon Honeycutt.

        Need a way to load data (as plain text) in a WKPage
        <rdar://problem/8424239>

        * Shared/CoreIPCSupport/WebPageMessageKinds.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageLoadHTMLString):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadHTMLString):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadHTMLString):
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebPage/WebPage.h:

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

        Rubber-stamped by Anders Carlsson.

        Replace all uses of WTF::String and WTF::AtomicString with
        String and AtomicString.

        * Platform/Module.h:
        * Shared/CommandLine.h:
        (WebKit::CommandLine::operator[]):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebEvent.h:
        (WebKit::WebKeyboardEvent::WebKeyboardEvent):
        (WebKit::WebKeyboardEvent::text):
        (WebKit::WebKeyboardEvent::unmodifiedText):
        (WebKit::WebKeyboardEvent::keyIdentifier):
        (WebKit::WebKeyboardEvent::decode):
        * Shared/WebNavigationDataStore.h:
        * Shared/WebPreferencesStore.h:
        * Shared/WebString.h:
        (WebKit::WebString::create):
        (WebKit::WebString::string):
        (WebKit::WebString::WebString):
        * Shared/WebURL.h:
        (WebKit::WebURL::create):
        (WebKit::WebURL::string):
        (WebKit::WebURL::WebURL):
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toRef):
        (WebKit::toURLRef):
        (WebKit::toCopiedRef):
        (WebKit::toCopiedURLRef):
        (WebKit::toWTFString):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextCreate):
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::nsStringFromWebCoreString):
        * UIProcess/PageClient.h:
        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::setAdditionalPluginsDirectories):
        * UIProcess/Plugins/PluginInfoStore.h:
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::getPluginInfo):
        (WebKit::PluginInfoStore::getMIMETypeForExtension):
        * UIProcess/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::create):
        (WebKit::WebBackForwardListItem::setOriginalURL):
        (WebKit::WebBackForwardListItem::originalURL):
        (WebKit::WebBackForwardListItem::setURL):
        (WebKit::WebBackForwardListItem::url):
        (WebKit::WebBackForwardListItem::setTitle):
        (WebKit::WebBackForwardListItem::title):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::setAdditionalPluginsDirectory):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::injectedBundlePath):
        * UIProcess/WebContextInjectedBundleClient.h:
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didReceiveTitle):
        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::url):
        (WebKit::WebFrameProxy::provisionalURL):
        * UIProcess/WebHistoryClient.h:
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::didReceiveTitleForFrame):
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebNavigationData.h:
        (WebKit::WebNavigationData::title):
        (WebKit::WebNavigationData::url):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::pageTitle):
        (WebKit::WebPageProxy::toolTip):
        (WebKit::WebPageProxy::urlAtProcessExit):
        * UIProcess/WebPolicyClient.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPluginHostConnection):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebUIClient.h:
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (WebKit::InjectedBundle::create):
        (WebKit::InjectedBundle::setSandboxToken):
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::willPerformClientRedirectForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        * WebProcess/Plugins/NPRuntimeObjectMap.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/NetscapePluginModule.h:
        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::start):
        * WebProcess/Plugins/Netscape/NetscapePluginStream.h:
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebContextMenuClient.h:
        * WebProcess/WebCoreSupport/WebDragClient.h:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::showCorrectionPanel):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp:
        (WebKit::WebSearchPopupMenu::saveRecentSearches):
        (WebKit::WebSearchPopupMenu::loadRecentSearches):
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.h:
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInMainFrame):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::registerURLSchemeAsEmptyDocument):
        * WebProcess/WebProcess.h:

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

        Fix Windows and Qt builds.

        * Shared/qt/PlatformCertificateInfo.h:
        (WebKit::PlatformCertificateInfo::decode):
        * Shared/win/PlatformCertificateInfo.h:
        (WebKit::PlatformCertificateInfo::decode):

2010-09-17  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION (r60104): Zoom level is unexpectedly reset on page reload
        https://bugs.webkit.org/show_bug.cgi?id=42863

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::textZoomFactor):
        (WebKit::WebPage::setTextZoomFactor):
        (WebKit::WebPage::pageZoomFactor):
        (WebKit::WebPage::setPageZoomFactor):
        (WebKit::WebPage::setPageAndTextZoomFactors):
        Call functions on Frame instead of FrameView.

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

        Reviewed by Anders Carlsson.

        Resize corner jiggles when resizing slowly in WebKit2
        <rdar://problem/7897425>
        https://bugs.webkit.org/show_bug.cgi?id=45601

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::windowResizerRect):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::windowResizerRect):
        * WebProcess/WebPage/WebPage.h:
        Move resize corner logic to WebPage and use the FrameView's size instead of the WebPages
        stored size, which doesn't get updated at the right time. This is in line with all other
        scrollbar metrics which are in terms of the FrameView's size.

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

        Reviewed by Anders Carlsson.

        Make certificate data available to the WKFrameRef after it is committed
        Part of <rdar://problem/8350189>
        https://bugs.webkit.org/show_bug.cgi?id=45998

        * Shared/APIObject.h:
        Add new type.

        * Shared/WebCertificateInfo.h: Added.
        (WebKit::WebCertificateInfo::create):
        (WebKit::WebCertificateInfo::platformCertificateInfo):
        (WebKit::WebCertificateInfo::WebCertificateInfo):
        (WebKit::WebCertificateInfo::type):
        Add API type for vending.

        * Shared/mac/PlatformCertificateInfo.h: Added.
        (WebKit::PlatformCertificateInfo::peerCertificates):
        * Shared/mac/PlatformCertificateInfo.mm: Added.
        (WebKit::PlatformCertificateInfo::PlatformCertificateInfo):
        (WebKit::PlatformCertificateInfo::encode):
        (WebKit::PlatformCertificateInfo::decode):
        (WebKit::PlatformCertificateInfo::dump):
        * Shared/qt/PlatformCertificateInfo.h: Added.
        (WebKit::PlatformCertificateInfo::PlatformCertificateInfo):
        (WebKit::PlatformCertificateInfo::encode):
        (WebKit::PlatformCertificateInfo::decode):
        * Shared/win/PlatformCertificateInfo.h: Added.
        (WebKit::PlatformCertificateInfo::PlatformCertificateInfo):
        (WebKit::PlatformCertificateInfo::encode):
        (WebKit::PlatformCertificateInfo::decode):
        Add platform specific holder for certificate data and encode/decode functions
        to send it over the wire. Right now, this only implemented for the mac.

        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKBase.h:
        * UIProcess/API/C/WKCertificateInfo.cpp: Added.
        (WKCertificateInfoGetTypeID):
        * UIProcess/API/C/WKCertificateInfo.h: Added.
        Add wrapper for WebCertificateInfo.

        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameGetCertificateInfo):
        * UIProcess/API/C/WKFrame.h:
        Add getter for a WKCertificateInfo.

        * UIProcess/API/C/mac/WKCertificateInfoMac.h: Added.
        * UIProcess/API/C/mac/WKCertificateInfoMac.mm: Added.
        (WKCertificateInfoGetPeerCertificates):
        Add mac specific getters for the platform specific certificate
        data.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::setCertificateInfo):
        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::certificateInfo):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        Pipe the certificate info through to the WebFrameProxy on
        commit.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:
        Add new files.

2010-09-17  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Reduce minimum DOMTimer interval
        https://bugs.webkit.org/show_bug.cgi?id=45362

        * WebProcess/WebPage/WebPage.cpp: Added in a call to set the mimimum allowed DOMTimer to 4ms.

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

        Reviewed by Sam Weinig.

        CoreIPC argument coder improvements
        https://bugs.webkit.org/show_bug.cgi?id=45999

        * Platform/CoreIPC/ArgumentCoders.h:
        Add explicit specialization for a vector of bytes.

        * Platform/CoreIPC/Arguments.h:
        (CoreIPC::Arguments1::decode):
        (CoreIPC::Arguments2::decode):
        (CoreIPC::Arguments3::decode):
        (CoreIPC::Arguments4::decode):
        (CoreIPC::Arguments5::decode):
        (CoreIPC::Arguments6::decode):
        Use the injected class name for less typing.

        (CoreIPC::Arguments7::Arguments7):
        (CoreIPC::Arguments7::encode):
        (CoreIPC::Arguments7::decode):
        (CoreIPC::In):
        (CoreIPC::Out):
        Add Arguments7 class.

2010-09-17  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8440903> WK2: REGRESSION (r66156): Web sites using
        AppleConnect fail to log in: "HTTP Status 404 - /ssowebapp/scriptFrame"
        https://bugs.webkit.org/show_bug.cgi?id=45960

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

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

        Reviewed by Anders Carlsson.

        Make WebNumbers immutable matching CF.

        * Shared/WebNumber.h:
        (WebKit::WebNumber::value):
        (WebKit::WebNumber::WebNumber):
        * UIProcess/API/C/WKNumber.cpp:
        (WKUInt64GetValue):
        * UIProcess/API/C/WKNumber.h:

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

        Reviewed by John Sullivan.

        Add bool wrapper for WebKit2 API
        https://bugs.webkit.org/show_bug.cgi?id=45985

        * Shared/APIObject.h:
        * Shared/WebNumber.h:
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKBase.h:
        * UIProcess/API/C/WKNumber.cpp:
        (WKBooleanGetTypeID):
        (WKBooleanCreate):
        (WKBooleanGetValue):
        (WKBooleanSetValue):
        * UIProcess/API/C/WKNumber.h:

2010-09-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add support for sending synchronous messages from the InjectedBundle to the WKContext
        <rdar://problem/8365320>
        https://bugs.webkit.org/show_bug.cgi?id=44785

        * Shared/CoreIPCSupport/WebContextMessageKinds.h:
        * UIProcess/API/C/WKContext.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::didReceiveSynchronousMessageFromInjectedBundle):
        (WebKit::WebContext::didReceiveMessage):
        (WebKit::WebContext::didReceiveSyncMessage):
        * UIProcess/WebContext.h:
        * UIProcess/WebContextInjectedBundleClient.cpp:
        (WebKit::WebContextInjectedBundleClient::didReceiveSynchronousMessageFromInjectedBundle):
        * UIProcess/WebContextInjectedBundleClient.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundlePostSynchronousMessage):
        * WebProcess/InjectedBundle/API/c/WKBundle.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::postSynchronousMessage):
        * WebProcess/InjectedBundle/InjectedBundle.h:

2010-09-16  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed trivial typo fix.

        Remove old debug helper code inside |#if 0| from ConnectionQt.cpp

        * Platform/CoreIPC/qt/ConnectionQt.cpp:
        (CoreIPC::Connection::readyReadHandler):

2010-09-15  Enrica Casucci  <enrica@apple.com>

        Reviewed by Sam Weinig.

        Pasteboard doesn't work in WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=42317
        <rdar://problem/7660537>
        
        Initial work to support cut, copy, paste and selectAll in WebKit2.
        It still does not support RTF and RTFD format for Mac and the selective
        enabling of the editing menu entries.
        
        * Shared/CoreIPCSupport/WebPageMessageKinds.h: Added messages to support the
        new editing commands.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView validateUserInterfaceItem:]): Added.
        (-[WKView copy:]): Added.
        (-[WKView cut:]): Added.
        (-[WKView paste:]): Addded.
        (-[WKView selectAll:]): Added.
        * UIProcess/WebPageProxy.cpp: Added all the proxy methods.
        (WebKit::WebPageProxy::selectAll):
        (WebKit::WebPageProxy::copy):
        (WebKit::WebPageProxy::cut):
        (WebKit::WebPageProxy::paste):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::documentFragmentFromAttributedString): Added but not
        implemented. This is needed to support RTF and RTFD.
        (WebKit::WebEditorClient::setInsertionPasteboard): Added but not implemented.
        This is needed only to support Mail on the Mac.
        * WebProcess/WebPage/WebPage.cpp: Added all the stub methods.
        (WebKit::WebPage::selectAll):
        (WebKit::WebPage::copy):
        (WebKit::WebPage::cut):
        (WebKit::WebPage::paste):
        (WebKit::WebPage::didReceiveMessage): Modified to handle the new messages from
        the UI process.
        * WebProcess/WebPage/WebPage.h:

2010-09-16  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Jian Li.

        Unify FILE_SYSTEM and FILE_WRITER enables under the name FILE_SYSTEM.
        https://bugs.webkit.org/show_bug.cgi?id=45798

        * Configurations/FeatureDefines.xcconfig:

2010-09-15  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        WebKit2 should be able to encode and decode objects of type APIObject::TypeURL.
        https://bugs.webkit.org/show_bug.cgi?id=45819

        * Shared/UserMessageCoders.h:
        Add the ability to encode and decode the URL type.
        (WebKit::UserMessageEncoder::baseEncode):
        (WebKit::UserMessageDecoder::baseDecode):

2010-09-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Jon Honeycutt.

        Add user message coding for WebUInt64 type.

        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        (WebKit::UserMessageDecoder::baseDecode):

2010-09-15  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Jon Honeycutt.

        We should save messages that can't be sent when postMessageToInjectedBundle is called and
        send them in ensureWebProcess.
        https://bugs.webkit.org/show_bug.cgi?id=45822

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureWebProcess):
        Post any messages to the Injected Bundle that couldn't be sent earlier because the
        WebProcess hadn't been initialized yet.
        (WebKit::WebContext::postMessageToInjectedBundle):
        * UIProcess/WebContext.h:

2010-09-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8214099> Mousewheel scrolling in WebKit2 is wonky
        
        Use floats so that fractional scrollwheel deltas don't get lost.

        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::createWebWheelEvent):

2010-09-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Jon Honeycutt.

        Add WKUInt64Ref wrapper for sending uint64_ts.

        * Shared/APIObject.h:
        * Shared/WebNumber.h:
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKBase.h:
        * UIProcess/API/C/WKNumber.cpp:
        (WKUInt64GetTypeID):
        (WKUInt64Create):
        (WKUInt64GetValue):
        (WKUInt64SetValue):
        * UIProcess/API/C/WKNumber.h:

2010-09-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=44715
        maps.google.com flips upside down when zooming map using trackpad in WebKit2 on Mac
        
        Move geometry flipping to platform-specific code.

        * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
        (WebKit::LayerBackedDrawingArea::LayerBackedDrawingArea):
        * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm:
        (WebKit::LayerBackedDrawingArea::platformInit):

2010-09-14  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        Only intercept ESC key press when autocorrection UI is visible.
        https://bugs.webkit.org/show_bug.cgi?id=45071

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::isShowingCorrectionPanel): Dummy implementation.

        * WebProcess/WebCoreSupport/WebEditorClient.h: Adopt new method delcared in base class.

2010-09-14  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * win/WebKit2Generated.make:

2010-09-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove WKBundleNodeRef, replacing uses with WKBundleNodeHandleRef.
        https://bugs.webkit.org/show_bug.cgi?id=45785

        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Remove files.

        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        * WebProcess/InjectedBundle/API/c/WKBundleBase.h:
        * WebProcess/InjectedBundle/API/c/WKBundleNode.cpp: Removed.
        * WebProcess/InjectedBundle/API/c/WKBundleNode.h: Removed.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/API/c/WKBundleRange.cpp:
        (WKBundleRangeCopyStartContainer):
        (WKBundleRangeCopyEndContainer):
        * WebProcess/InjectedBundle/API/c/WKBundleRange.h:
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp:
        (WebKit::InjectedBundlePageEditorClient::shouldInsertNode):
        Change to be in terms of WKBundleNodeHandleRef.

2010-09-14  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        Exceptions are getting ignored on 64-bit Windows in the Web Process
        https://bugs.webkit.org/show_bug.cgi?id=45779

        * WebProcess/WebKitMain.cpp:
        (disableProcessCallbackFilterForExceptions):
        Clear the PROCESS_CALLBACK_FILTER_ENABLED flag so that exceptions thrown in callback routines
        are not ignored, as described in http://support.microsoft.com/kb/976038 and
        http://blog.paulbetts.org/index.php/2010/07/20/the-case-of-the-disappearing-onload-exception-user-mode-callback-exceptions-in-x64/.
        (WebKitMain):

2010-09-14  Brent Fulgham  <bfulgham@webkit.org>

        Build correction, no review.

        * win/WebKit2.vcproj: Disable build for Cairo targets of
        the WebURLRequestWin.cpp and WebURLResponseWin.cpp files.

2010-09-14  Eric Seidel  <eric@webkit.org>

        Unreviewed, reverting changes r67451 and r67451.
        Broke lots of builders.

        Only intercept ESC key press when autocorrection UI is visible.
        https://bugs.webkit.org/show_bug.cgi?id=45071

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::dismissCorrectionPanel):
        * WebProcess/WebCoreSupport/WebEditorClient.h:

2010-09-14  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        Only intercept ESC key press when autocorrection UI is visible.
        https://bugs.webkit.org/show_bug.cgi?id=45071

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::isShowingCorrectionPanel): Dummy implementation.

        * WebProcess/WebCoreSupport/WebEditorClient.h: Adopt new method delcared in base class.

2010-09-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Jon Honeycutt.

        URL in address bar doesn't update when navigating to http://webkit.org/new-bug when using WebKit2
        <rdar://problem/8272775>
        https://bugs.webkit.org/show_bug.cgi?id=45729

        Pass an updated provisional url while notifying the UIProcess of
        didReceiveServerRedirectForProvisionalLoadForFrame.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didReceiveServerRedirectForProvisionalLoad):
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad):

2010-09-13  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * UIProcess/Launcher/win/ProcessLauncherWin.cpp:

2010-09-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Jon Honeycutt.

        Threaded mode should work in WebKit2 MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=45727

        - Make starting the web thread more like starting a new
          process (encapsulate it in a thread launcher class).
        - Make the call to didFinishLaunching asynchronous so that
          WebProcess is fully constructed before it is called.

        * Platform/WorkItem.h:
        (MemberFunctionWorkItem1::MemberFunctionWorkItem1):
        (MemberFunctionWorkItem1::~MemberFunctionWorkItem1):
        (MemberFunctionWorkItem1::execute):
        (WorkItem::create):
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/ThreadLauncher.cpp: Added.
        (WebKit::ThreadLauncher::ThreadLauncher):
        (WebKit::ThreadLauncher::launchThread):
        (WebKit::ThreadLauncher::didFinishLaunchingThread):
        (WebKit::ThreadLauncher::invalidate):
        * UIProcess/Launcher/ThreadLauncher.h: Added.
        (WebKit::ThreadLauncher::Client::~Client):
        (WebKit::ThreadLauncher::create):
        (WebKit::ThreadLauncher::isLaunching):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::terminateProcess):
        * UIProcess/Launcher/mac/ThreadLauncherMac.mm: Added.
        (WebKit::webThreadBody):
        (WebKit::ThreadLauncher::createWebThread):
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        * UIProcess/Launcher/qt/ThreadLauncherQt.cpp: Added.
        (WebKit::webThreadBody):
        (WebKit::ProcessLauncher::createWebThread):
        * UIProcess/Launcher/win/ProcessLauncherWin.cpp:
        * UIProcess/Launcher/win/ThreadLauncherWin.cpp: Added.
        (WebKit::webThreadBody):
        (WebKit::ProcessLauncher::createWebThread):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::~WebProcessProxy):
        (WebKit::WebProcessProxy::connect):
        (WebKit::WebProcessProxy::isLaunching):
        (WebKit::WebProcessProxy::didFinishLaunching):
        * UIProcess/WebProcessProxy.h:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2010-09-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        didFinishDocumentLoadForFrame() is not being sent by WebKit2
        <rdar://problem/8424171>

        Finish wiring up didFinishDocumentLoad to the UIProcess.

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

2010-09-13  Enrica Casucci  <enrica@apple.com>

        Reviewed by Sam Weinig.

        Paste should be implemented in WebCore like Copy and Cut for Mac also.
        https://bugs.webkit.org/show_bug.cgi?id=45494
        <rdar://problem/7660537>

        On the Mac platform, the implementation of the paste operation is all done
        at the WebKit level. In order to support it on WebKit2 it is necessary to
        refactor the code and move this functionality at the level of WebCore like
        we already have on Windows.
        The original code relies on some in AppKit functions that call back into
        WebKit causing problems in WebKit2. All this functionality has been moved
        at the level of the editor client where it can be dealt with appropriately.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::documentFragmentFromAttributedString): Added.
        (WebKit::WebEditorClient::setInsertionPasteboard): Added.
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::canShowMIMETypeAsHTML): Added.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2010-09-11  Daniel Bates  <dbates@rim.com>

        Attempt to fix the Qt Linux Release build after changeset 67312 <http://trac.webkit.org/changeset/67312>.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage): Add missing ',' in WKPageUIClient initialization list.

2010-09-11  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Make SecurityOrigin::canDisplay an instance function
        https://bugs.webkit.org/show_bug.cgi?id=45219

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

2010-09-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Implement WebKit2 callback equivalent to - [WebUIDelegate webView:setStatusText:]
        <rdar://problem/8359252>
        https://bugs.webkit.org/show_bug.cgi?id=45605

        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::setStatusText):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::setStatusText):
        * UIProcess/WebUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::setStatusbarText):

2010-09-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Add callback mechanism for the getting the source of a frame
        <rdar://problem/8364681>
        https://bugs.webkit.org/show_bug.cgi?id=45604

        * Shared/CoreIPCSupport/WebPageMessageKinds.h:
        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetSourceForFrame):
        (callGetSourceForFrameBlockBlockAndDispose):
        (WKPageGetSourceForFrame_b):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::getSourceForFrame):
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::didGetSourceForFrame):
        (WebKit::WebPageProxy::processDidExit):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::source):
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::getSourceForFrame):
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebPage/WebPage.h:

2010-09-10  Jesus Sanchez-Palencia <jesus.palencia@openbossa.org>

        Reviewed by Darin Adler.

        Add NetworkingContext to avoid layer violations
        https://bugs.webkit.org/show_bug.cgi?id=42292

        * WebProcess/WebCoreSupport/win/WebFrameNetworkingContext.cpp:
        * WebProcess/WebCoreSupport/win/WebFrameNetworkingContext.h:
        (WebFrameNetworkingContext::create):

2010-09-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Add zoom support to WebKit2 API
        <rdar://problem/7660657>
        https://bugs.webkit.org/show_bug.cgi?id=45585

        - Add UIProcess API for setting zoom factors.
        - Change bundle zoom API to be in terms of doubles
          for consistency.

        * Shared/CoreIPCSupport/WebPageMessageKinds.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetTextZoomFactor):
        (WKPageSetTextZoomFactor):
        (WKPageGetPageZoomFactor):
        (WKPageSetPageZoomFactor):
        (WKPageSetPageAndTextZoomFactors):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setTextZoomFactor):
        (WebKit::WebPageProxy::setPageZoomFactor):
        (WebKit::WebPageProxy::setPageAndTextZoomFactors):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::textZoomFactor):
        (WebKit::WebPageProxy::pageZoomFactor):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageGetTextZoomFactor):
        (WKBundlePageSetTextZoomFactor):
        (WKBundlePageGetPageZoomFactor):
        (WKBundlePageSetPageZoomFactor):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::textZoomFactor):
        (WebKit::WebPage::setTextZoomFactor):
        (WebKit::WebPage::pageZoomFactor):
        (WebKit::WebPage::setPageZoomFactor):
        (WebKit::WebPage::setPageAndTextZoomFactors):
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebPage/WebPage.h:

2010-09-10  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Andreas Kling.

        Application cache directory should be checked before sending to the web process
        https://bugs.webkit.org/show_bug.cgi?id=45462

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy): Check the return value of
        m_context->applicationCacheDirectoy() to avoid sending a null string
        to the web process what makes it asserting.

2010-09-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Remove unnecessary constraint in WebCore of choosing either text zoom or full page zoom.
        Precursor to <rdar://problem/7660657>
        https://bugs.webkit.org/show_bug.cgi?id=45522

        Now that WebCore doesn't require a mode, change the bundle API for zoom to not
        require one either.

        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageStopLoading):
        (WKBundlePageGetTextZoomFactor):
        (WKBundlePageSetTextZoomFactor):
        (WKBundlePageGetPageZoomFactor):
        (WKBundlePageSetPageZoomFactor):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::textZoomFactor):
        (WebKit::WebPage::setTextZoomFactor):
        (WebKit::WebPage::pageZoomFactor):
        (WebKit::WebPage::setPageZoomFactor):
        * WebProcess/WebPage/WebPage.h:

2010-09-10  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Andreas Kling.

        [Qt] Implement port specific part of WebKit::InjectedBundle
        https://bugs.webkit.org/show_bug.cgi?id=45541

        * WebProcess/InjectedBundle/InjectedBundle.h: Typedef PlatformBundle as QLibrary for qt.
        * WebProcess/InjectedBundle/qt/InjectedBundleQt.cpp:
        (WebKit::InjectedBundle::load): Implemented.

2010-09-10  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Andreas Kling.

        [Qt] MiniBrowser crashes with multiply windows when closing one of them
        https://bugs.webkit.org/show_bug.cgi?id=45536

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::~QWKPage): Do not call WKPageTerminate since this is designed
        to terminate the web process. We are correctly detaching the page without
        this call anyway.

2010-09-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Fisher.

        Move code from WebKit-layer to DocumentLoader
        https://bugs.webkit.org/show_bug.cgi?id=45569

        This code looks copy/pasted from Mac.  It's unclear whether whether all
        the complexity is needed here, but I don't have a good way to find out.

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

2010-09-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mark Rowe and Darin Adler.

        Set the visible name for the web process
        https://bugs.webkit.org/show_bug.cgi?id=45564
        <rdar://problem/8416970>

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::processName):
        Add a thread safe implementation of -[NSProcessInfo processName].

        (WebKit::ProcessLauncher::launchProcess):
        Pass the process name to the child process.

        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain):
        Set the visible name.

2010-09-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Main resource bytes shouldn't bounce through FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=45496

        Now return the bytes to the DocumentLoader.

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

2010-09-10  Adam Roben  <aroben@apple.com>

        Don't crash when a frame is destroyed after the UI process has
        disconnected

        Fixes <http://webkit.org/b/45535> <rdar://problem/8412928> Crash in
        WebProcess::removeWebFrame on exit with WebKit2 (Release builds only)

        Reviewed by Darin Adler.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::removeWebFrame): Null-check m_connection before
        dereferencing it.

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

        Reviewed by Adam Roben.

        Scrollbars fail to render in composited iframes.
        https://bugs.webkit.org/show_bug.cgi?id=45335

        Use LocalWindowsContext when painting the plugin.

        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::NetscapePlugin::platformPaint):

2010-09-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Allow passing WebDoubles via postMessage.

        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        (WebKit::UserMessageDecoder::baseDecode):

2010-09-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        WebKit2 needs a way to box numbers (for Array, Dictionary, etc.)
        <rdar://problem/8408844>
        https://bugs.webkit.org/show_bug.cgi?id=45429

        This adds a generic WebNumber class that can be used for any scalar
        numeric type. Right now, we are only exposing a double version, but it
        is designed to allow more.

        * Shared/APIObject.h:
        * Shared/WebNumber.h: Added.
        (WebKit::WebNumber::create):
        (WebKit::WebNumber::value):
        (WebKit::WebNumber::setValue):
        (WebKit::WebNumber::WebNumber):
        (WebKit::WebNumber::type):
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKBase.h:
        * UIProcess/API/C/WKNumber.cpp: Added.
        (WKDoubleGetTypeID):
        (WKDoubleCreate):
        (WKDoubleGetValue):
        (WKDoubleSetValue):
        * UIProcess/API/C/WKNumber.h: Added.
        * UIProcess/API/C/WebKit2.h:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:

2010-09-08  Anders Carlsson  <andersca@apple.com>

        Don't include the std namespace in a header. This hopefully fixes the Windows build.

        * Shared/WebCoreArgumentCoders.h:

2010-09-08  Anders Carlsson  <andersca@apple.com>

        Suggested and reviewed by Darin Adler.

        Fix an overflow bug in bufferIsLargeEnoughToContain.

        * Platform/CoreIPC/ArgumentDecoder.h:
        (CoreIPC::ArgumentDecoder::bufferIsLargeEnoughToContain):

2010-09-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Improve CoreIPC encoding of strings
        https://bugs.webkit.org/show_bug.cgi?id=45418

        Encode and decode null Strings. Check that the string length isn't bogus.

        * Platform/CoreIPC/ArgumentCoders.h:
        * Platform/CoreIPC/ArgumentDecoder.cpp:
        (CoreIPC::ArgumentDecoder::bufferIsLargeEnoughToContain):
        * Platform/CoreIPC/ArgumentDecoder.h:
        (CoreIPC::ArgumentDecoder::bufferIsLargeEnoughToContain):
        * Shared/WebCoreArgumentCoders.h:

2010-09-08  Adam Roben  <aroben@apple.com>

        Add a way to cause the web process to crash at a random time

        Setting the WEBKIT2_CRASH_WEB_PROCESS_RANDOMLY environment variable
        will cause the web process to crash at a random point up to 3 minutes
        after launching.

        Fixes <http://webkit.org/b/43058> <rdar://problem/8240150>

        Reviewed by Darin Adler.

        * WebProcess/WebProcess.cpp:
        (WebKit::sleep): Added an implementation of this function for Windows.
        It just calls through to ::Sleep.
        (WebKit::randomCrashThread): Added. Sleeps for a random amount of time
        up to 3 minutes, then crashes.
        (WebKit::startRandomCrashThreadIfRequested): Added. Starts the crash
        thread if the WEBKIT2_CRASH_WEB_PROCESS_RANDOMLY environment variable
        is set.
        (WebKit::WebProcess::initialize): Added a call to
        startRandomCrashThreadIfRequested.

2010-09-08  Adam Roben  <aroben@apple.com>

        Fix potential ref-counting issues with WorkItemWin

        Reviewed by Anders Carlsson.

        * Platform/WorkQueue.h: Changed WorkItemWin to inherit from
        ThreadSafeShared instead of RefCounted so that its ref-count will stay
        consistent when used on multiple threads.

2010-09-08  Adam Roben  <aroben@apple.com>

        Teach WorkQueue how to stop waiting on objects on Windows

        WorkQueue now uses a subclass of WorkItemWin, HandleWorkItem, to hold
        the waited-upon HANDLE and its corresponding wait handle. When a
        HANDLE is unregistered, we use the HandleWorkItem to cancel the wait
        and destroy the HANDLE.

        Fixes <http://webkit.org/b/42826> <rdar://problem/8222253> Crash in
        thread pool because WorkQueue keeps waiting on closed HANDLEs

        Reviewed by Anders Carlsson.

        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::platformInvalidate): Changed to call
        WorkQueue::unregisterAndCloseHandle instead of closing our handles
        manually.

        (CoreIPC::Connection::readEventHandler):
        (CoreIPC::Connection::writeEventHandler):
        Handle cases where the pipe has already closed by just bailing out.
        This can happen if a WorkItem to call one of these functions has
        already been scheduled before platformInvalidate is called.

        * Platform/WorkQueue.h: Gave WorkItemWin a virtual destructor, added
        HandleWorkItem, changed m_handles to hold HandleWorkItems, and added
        functions for unregistering waits.

        * Platform/win/WorkQueueWin.cpp:
        (WorkQueue::WorkItemWin::~WorkItemWin): Added. This virtual destructor
        ensures that HandleWorkItem's destructor gets called.

        (WorkQueue::HandleWorkItem::HandleWorkItem):
        (WorkQueue::HandleWorkItem::createByAdoptingHandle):
        Added simple constructor/creator.

        (WorkQueue::HandleWorkItem::~HandleWorkItem): Closes the handle we
        adopted.
        (WorkQueue::registerHandle): Changed to create a HandleWorkItemWin and
        to store the wait handle in it.
        (WorkQueue::unregisterAndCloseHandle): Added. Removes the
        HandleWorkItem for this HANDLE from m_handles and then schedules its
        wait to be unregistered and the item to be destroyed.
        (WorkQueue::platformInvalidate): Added an assertion and removed an
        obsolete FIXME.
        (WorkQueue::unregisterWaitAndDestroyItemSoon): Added. Calls
        unregisterWaitAndDestroyItemCallback on a worker thread, passing it
        ownership of the HandleWorkItem.
        (WorkQueue::unregisterWaitAndDestroyItemCallback): Added. Adopts the
        passed-in HandleWorkItem, then unregisters the handle's wait, then
        destroys the HandleWorkItem when the RefPtr holding it goes out of
        scope. Destroying the HandleWorkItem closes the handle.

2010-09-08  Adam Roben  <aroben@apple.com>

        Remove WKSerializedScriptValue.cpp/h from the Copy Files build phase

        * WebKit2.xcodeproj/project.pbxproj:

2010-09-08  Adam Roben  <aroben@apple.com>

        Get rid of WorkQueue::m_performWorkEvent

        We were signaling m_performWorkEvent to spawn a worker thread. We can
        use ::QueueUserWorkItem to spawn the thread instead.

        Fixes <http://webkit.org/b/45407> WorkQueue::m_performWorkEvent is
        unnecessary

        Reviewed by Anders Carlsson.

        * Platform/WorkQueue.h: Removed m_performWorkEvent.

        * Platform/win/WorkQueueWin.cpp:
        (WorkQueue::workThreadCallback): Replaced eventCallback with this
        function. Its functionality is unchanged.

        (WorkQueue::platformInitialize):
        (WorkQueue::platformInvalidate):
        Removed code to set up and clean up m_performWorkEvent.

        (WorkQueue::scheduleWork): Use ::QueueUserWorkItem instead of
        signaling m_performWorkEvent to spawn a worker thread.

2010-09-08  Adam Roben  <aroben@apple.com>

        Fix WebKit2Common.vsprops line-endings

        * win/WebKit2Common.vsprops: Made all line-endings be CRLF, as this is
        the format Visual Studio wants.

2010-09-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by Anders Carlsson.

        Support SerializedScriptValue in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=45340

        Add wrappers and IPC serialization for SerializedScriptValue

        * Shared/APIObject.h:
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        (WebKit::UserMessageDecoder::baseDecode):
        * Shared/WebSerializedScriptValue.h: Added.
        (WebKit::WebSerializedScriptValue::create):
        (WebKit::WebSerializedScriptValue::adopt):
        (WebKit::WebSerializedScriptValue::deserialize):
        (WebKit::WebSerializedScriptValue::data):
        (WebKit::WebSerializedScriptValue::WebSerializedScriptValue):
        (WebKit::WebSerializedScriptValue::type):
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKBase.h:
        * UIProcess/API/C/WKSerializedScriptValue.cpp: Added.
        (WKSerializedScriptValueGetTypeID):
        (WKSerializedScriptValueCreate):
        (WKSerializedScriptValueDeserialize):
        * UIProcess/API/C/WKSerializedScriptValue.h: Added.
        * WebKit2.xcodeproj/project.pbxproj:

2010-09-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Jon Honeycutt.

        Would like WKBundleFrameRef to turn into WKFrameRef across postMessage boundary, a la PageRef
        <rdar://problem/8402804>
        https://bugs.webkit.org/show_bug.cgi?id=45370

        * UIProcess/WebContextUserMessageCoders.h:
        (WebKit::WebContextUserMessageEncoder::encode):
        (WebKit::WebContextUserMessageDecoder::decode):
        * WebProcess/InjectedBundle/InjectedBundleUserMessageCoders.h:
        (WebKit::InjectedBundleUserMessageEncoder::encode):
        (WebKit::InjectedBundleUserMessageDecoder::decode):

2010-09-07  Kinuko Yasuda  <kinuko@chromium.org>

        Unreviewed, another Qt release build fix attempt.

        * UIProcess/API/cpp/qt/WKURLQt.cpp:

2010-09-07  Kinuko Yasuda  <kinuko@chromium.org>

        Unreviewed, attempt to fix Qt release build.

        * UIProcess/API/cpp/qt/WKStringQt.cpp:

2010-09-07  Brent Fulgham  <bfulgham@webkit.org>

        Build correction, no review.

        * win/WebKit2.vcproj: Disable two unused files for
        the WinCairo target.

2010-09-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Fix clang++ build.

        * UIProcess/API/C/WKAPICast.h:
        Move all functions into the WebKit namespace.
        
        * UIProcess/API/C/cf/WKStringCF.cpp:
        Add using namespace WebKit.

        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        Move all functions into the WebKit namespace.

2010-09-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8381749> -Wcast-align warning emitted when building with clang

        Remove the -Wcast-align-warning since it isn't really useful, and clang is more aggressive about warning than gcc.

        * Configurations/Base.xcconfig:

2010-09-07  Sam Weinig  <sam@webkit.org>

        Another windows fix.

        * UIProcess/win/WebView.cpp:

2010-09-07  Sam Weinig  <sam@webkit.org>

        Try and fix windows.

        * UIProcess/WebEditCommandProxy.h:

2010-09-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Fix incorrect parameter name.

        * UIProcess/API/mac/PageClientImpl.mm:

2010-09-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Add support for Undo/Redo
        <rdar://problem/7660519>
        https://bugs.webkit.org/show_bug.cgi?id=42781

        Adds platform independent parts of Undo/Redo support and the mac
        platform support.

        To work around the common assumption made by platforms, that a redo
        item will be added synchronously while an undo is in progress, we
        ignore the calls from WebCore to add redo items, and instead add add
        them after telling WebCore to unapply the EditCommand. We similarly
        need to ignore undos, that take place during a redo, and force the
        addition ourselves.

        * Shared/CoreIPCSupport/WebPageMessageKinds.h:
        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h:
        Add new messages.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (-[WebEditCommandObjC initWithWebEditCommandProxy:WebKit::]):
        (-[WebEditCommandObjC WebKit::]):
        (-[WebEditorUndoTargetObjC undoEditing:]):
        (-[WebEditorUndoTargetObjC redoEditing:]):
        (WebKit::PageClientImpl::PageClientImpl):
        (WebKit::nameForEditAction):
        (WebKit::PageClientImpl::registerEditCommand):
        (WebKit::PageClientImpl::clearAllEditCommands):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::registerEditCommand):
        (QWKPagePrivate::clearAllEditCommands):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::registerEditCommand):
        (WebKit::WebView::clearAllEditCommands):
        * UIProcess/win/WebView.h:
        Add platform specific hooks for undo/redo.

        * UIProcess/WebEditCommandProxy.cpp: Added.
        (WebKit::WebEditCommandProxy::WebEditCommandProxy):
        (WebKit::WebEditCommandProxy::~WebEditCommandProxy):
        (WebKit::WebEditCommandProxy::unapply):
        (WebKit::WebEditCommandProxy::reapply):
        * UIProcess/WebEditCommandProxy.h: Added.
        (WebKit::WebEditCommandProxy::create):
        (WebKit::WebEditCommandProxy::commandID):
        (WebKit::WebEditCommandProxy::editAction):
        (WebKit::WebEditCommandProxy::invalidate):
        A proxy for the WebEditCommands in the WebProcess. These are owned
        by the platform back/forward list, with a weak reference back to the
        WebPageProxy (which holds a weakset of live WebEditCommandProxys).

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::registerEditCommandForUndo):
        (WebKit::WebPageProxy::clearAllEditCommands):
        (WebKit::WebPageProxy::registerEditCommandForRedo):
        (WebKit::WebPageProxy::addEditCommand):
        (WebKit::WebPageProxy::removeEditCommand):
        (WebKit::WebPageProxy::processDidExit):
        * UIProcess/WebPageProxy.h:
        Forward messages.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::registerCommandForUndo):
        (WebKit::WebEditorClient::registerCommandForRedo):
        (WebKit::WebEditorClient::clearUndoRedoOperations):
        Send undo/redo registration and clearing to the UIProcess.

        * WebProcess/WebPage/WebEditCommand.cpp: Added.
        (WebKit::generateCommandID):
        (WebKit::WebEditCommand::WebEditCommand):
        * WebProcess/WebPage/WebEditCommand.h: Added.
        (WebKit::WebEditCommand::create):
        (WebKit::WebEditCommand::command):
        (WebKit::WebEditCommand::commandID):
        Wrapper for WebCore::EditCommand, with an added unique ID.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::webEditCommand):
        (WebKit::WebPage::addWebEditCommand):
        (WebKit::WebPage::removeWebEditCommand):
        (WebKit::WebPage::unapplyEditCommand):
        (WebKit::WebPage::reapplyEditCommand):
        (WebKit::WebPage::didRemoveEditCommand):
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::isInRedo):
        Forward messages.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Add new files.

2010-09-07  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Darin Adler.

        Indicate which one of the ScriptWorlds for a Frame the Window Object has been cleared for
        https://bugs.webkit.org/show_bug.cgi?id=45217

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:

        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::didClearWindowObjectForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:

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

2010-09-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Rename SecurityOrigin::canLoad to canDisplay
        https://bugs.webkit.org/show_bug.cgi?id=45214

        Propagate name change.

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

2010-09-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Allow passing null to postMessage API functions
        https://bugs.webkit.org/show_bug.cgi?id=45234

        * Shared/APIObject.h: Add TypeNull to enum. This is only used
        for serialization purposes, and does not represent a concrete subclass
        of APIObject.

        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h: Remove WillSubmitFormWithUserData
        now that it is not needed.

        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        (WebKit::UserMessageDecoder::baseDecode):
        Add explicit encoding/decoding of null for user messages.

        * UIProcess/WebContextUserMessageCoders.h:
        (WebKit::WebContextUserMessageEncoder::encode):
        (WebKit::WebContextUserMessageDecoder::decode):
        * WebProcess/InjectedBundle/InjectedBundleUserMessageCoders.h:
        (WebKit::InjectedBundleUserMessageEncoder::encode):
        (WebKit::InjectedBundleUserMessageDecoder::decode):
        Update UserMessageCoders subclasses to call the base class in the correct
        way to work with null messages. This means moving the encoding/decoding
        of the type down to the base class, which is a nice cleanup.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        Remove now redundant WillSubmitFormWithUserData implementation.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchWillSubmitForm):
        Ditto.

2010-09-03  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Darin Adler.

        Add NetworkingContext to avoid layer violations
        https://bugs.webkit.org/show_bug.cgi?id=42292

        Add FrameNetworkingContext implementation.

        * WebKit2.pro:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createNetworkingContext):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::needsSiteSpecificQuirks):
        (WebKit::WebFrameNetworkingContext::localFileContentSniffingEnabled):
        (WebKit::WebFrameNetworkingContext::scheduledRunLoopPairs):
        (WebKit::WebFrameNetworkingContext::blockedError):
        * WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.cpp: Added.
        (WebCore::WebFrameNetworkingContext::WebFrameNetworkingContext):
        (WebCore::WebFrameNetworkingContext::create):
        (WebCore::WebFrameNetworkingContext::originatingObject):
        (WebCore::WebFrameNetworkingContext::networkAccessManager):
        * WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.h: Added.
        * WebProcess/WebCoreSupport/win/WebFrameNetworkingContext.cpp: Added.
        * WebProcess/WebCoreSupport/win/WebFrameNetworkingContext.h: Added.
        (WebFrameNetworkingContext::create):
        (WebFrameNetworkingContext::WebFrameNetworkingContext):
        * win/WebKit2.vcproj:
        * win/WebKit2Common.vsprops:

2010-09-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Add ability to send UserData to willSubmitForm
        https://bugs.webkit.org/show_bug.cgi?id=45222

        - Adds a willSubmitForm callback to the BundlePageFormClient with an out
          parameter WKTypeRef* parameter.
        - That out parameter gets serialized and then passed to the PageFormClient's
          willSubmitForm, which now has WKTypeRef parameter.

        - Temporarily adds a new WillSubmitFormWithUserData message kind. This will
          be replaced by the ability to explicitly serialize null as a UserMessage.

        * Platform/CoreIPC/Arguments.h:
        (CoreIPC::Arguments6::Arguments6):
        (CoreIPC::Arguments6::encode):
        (CoreIPC::Arguments6::decode):
        (CoreIPC::In):
        (CoreIPC::Out):
        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebFormClient.cpp:
        (WebKit::WebFormClient::willSubmitForm):
        * UIProcess/WebFormClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::willSubmitForm):
        * UIProcess/WebPageProxy.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:
        (WebKit::InjectedBundlePageFormClient::textFieldDidBeginEditing):
        (WebKit::InjectedBundlePageFormClient::textFieldDidEndEditing):
        (WebKit::InjectedBundlePageFormClient::textDidChangeInTextField):
        (WebKit::InjectedBundlePageFormClient::textDidChangeInTextArea):
        (WebKit::InjectedBundlePageFormClient::willSubmitForm):
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchWillSubmitForm):

2010-09-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Change WKDictionaryIsMutable to take a WKDictionaryRef instead of a WKMutableDictionaryRef.
        If the type is already states it is mutable, there would be no reason for the check.

        * UIProcess/API/C/WKMutableDictionary.cpp:
        (WKDictionaryIsMutable):
        * UIProcess/API/C/WKMutableDictionary.h:

2010-09-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add ability to send WKDictionaryRefs via post message.
        https://bugs.webkit.org/show_bug.cgi?id=45151

        * Shared/ImmutableDictionary.cpp:
        (WebKit::ImmutableDictionary::ImmutableDictionary):
        * Shared/ImmutableDictionary.h:
        (WebKit::ImmutableDictionary::adopt): Remove tag, it wasn't doing anything.
        (WebKit::ImmutableDictionary::isMutable):
        (WebKit::ImmutableDictionary::map): Add accessor of internal
        map for encoder.

        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        (WebKit::UserMessageDecoder::baseDecode):
        Add encoder/decoder.

2010-09-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Share the common parts of UserMessage coding between both processes.
        https://bugs.webkit.org/show_bug.cgi?id=45139

        Add base classes UserMessageEncoder and UserMessageDecoder which implement
        encoding/decoding of ImmutableArray and String (soon to be others as well, such
        as ImmutableDictionary, Data, etc.) and add derived classes which implement the
        process specific bits such as Page -> BundlePage conversion.

        * Shared/UserMessageCoders.h: Copied from WebProcess/InjectedBundle/InjectedBundle.cpp.
        (WebKit::UserMessageEncoder::baseEncode):
        (WebKit::UserMessageEncoder::UserMessageEncoder):
        (WebKit::UserMessageDecoder::baseDecode):
        (WebKit::UserMessageDecoder::UserMessageDecoder):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::postMessageToInjectedBundle):
        (WebKit::WebContext::didReceiveMessage):
        * UIProcess/WebContextUserMessageCoders.h: Copied from UIProcess/WebContext.cpp.
        (WebKit::WebContextUserMessageEncoder::WebContextUserMessageEncoder):
        (WebKit::WebContextUserMessageEncoder::encode):
        (WebKit::WebContextUserMessageDecoder::WebContextUserMessageDecoder):
        (WebKit::WebContextUserMessageDecoder::decode):
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::postMessage):
        (WebKit::InjectedBundle::didReceiveMessage):
        * WebProcess/InjectedBundle/InjectedBundleUserMessageCoders.h: Copied from WebProcess/InjectedBundle/InjectedBundle.cpp.
        (WebKit::InjectedBundleUserMessageEncoder::InjectedBundleUserMessageEncoder):
        (WebKit::InjectedBundleUserMessageEncoder::encode):
        (WebKit::InjectedBundleUserMessageDecoder::InjectedBundleUserMessageDecoder):
        (WebKit::InjectedBundleUserMessageDecoder::decode):
        * win/WebKit2.vcproj:

2010-09-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Simplify ownership semantics of some WebKit2 types
        https://bugs.webkit.org/show_bug.cgi?id=45120

        - Make ImmutableArray and MutableArray use a Vector<RefPtr<APIObject> > and
          therefore ref any items it takes in.
        - Make the PostMessageDecoder operate on a RefPtr<APIObject>& to avoid the odd
          leaking semantics.

        * Shared/ImmutableArray.cpp:
        (WebKit::ImmutableArray::ImmutableArray): This constructor now uses a for-loop
        instead of memcpy to ref each item.
        (WebKit::ImmutableArray::~ImmutableArray): No longer necessary to manually deref.
        * Shared/ImmutableArray.h:
        (WebKit::ImmutableArray::adopt):
        (WebKit::ImmutableArray::at):
        Changes to accommodate entries being changed to a Vector<RefPtr<APIObject> >.

        * Shared/ImmutableDictionary.cpp:
        (WebKit::ImmutableDictionary::keys):
        Build a Vector<RefPtr<APIObject> >.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::backListAsImmutableArrayWithLimit):
        (WebKit::WebBackForwardList::forwardListAsImmutableArrayWithLimit):
        Ditto.

        * UIProcess/WebContext.cpp:
        (WebKit::PostMessageEncoder::PostMessageDecoder::PostMessageDecoder):
        (WebKit::PostMessageEncoder::PostMessageDecoder::decode):
        (WebKit::WebContext::didReceiveMessage):
        APIObject>& to avoid the odd leaking semantics.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::PostMessageEncoder::PostMessageDecoder::PostMessageDecoder):
        (WebKit::PostMessageEncoder::PostMessageDecoder::decode):
        (WebKit::InjectedBundle::didReceiveMessage):
        Ditto.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::childFrames):
        Build a Vector<RefPtr<APIObject> >.

2010-09-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add WKMutableDictionary API for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=45117

        Add WKMutableDictionary API that inherits from WKDictionaryRef
        the same way WKMutableArrayRef inherits from WKArrayRef.

        * Shared/ImmutableDictionary.h:
        (WebKit::ImmutableDictionary::get):
        (WebKit::ImmutableDictionary::isMutable):
        * Shared/MutableDictionary.cpp: Added.
        (WebKit::MutableDictionary::MutableDictionary):
        (WebKit::MutableDictionary::~MutableDictionary):
        (WebKit::MutableDictionary::add):
        (WebKit::MutableDictionary::set):
        * Shared/MutableDictionary.h: Added.
        (WebKit::MutableDictionary::create):
        (WebKit::MutableDictionary::isMutable):
        * UIProcess/API/C/WKAPICast.h:
        (toWK):
        * UIProcess/API/C/WKBase.h:
        * UIProcess/API/C/WKMutableDictionary.cpp: Added.
        (WKMutableDictionaryCreate):
        (WKDictionaryIsMutable):
        (WKDictionaryAddItem):
        (WKDictionarySetItem):
        * UIProcess/API/C/WKMutableDictionary.h: Added.
        * UIProcess/API/C/WebKit2.h:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:

2010-09-02  Jessie Berlin  <jberlin@apple.com>

        Windows build fix. Unreviewed.

        * UIProcess/API/win/WKAPICastWin.h:
        (toWK):
        * UIProcess/API/win/WKBaseWin.h:

2010-09-01  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        Add support for autocorrection UI on Mac OS X.
        https://bugs.webkit.org/show_bug.cgi?id=44958
        <rdar://problem/7326847>

        See detailed high level description in WebCore/ChangeLog.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::showCorrectionPanel): Dummy implementation.
        (WebKit::WebEditorClient::dismissCorrectionPanel): Ditto

        * WebProcess/WebCoreSupport/WebEditorClient.h: Added new methods declared in base class.

2010-09-01  Sam Weinig  <sam@webkit.org>

        Fix the build.

        As with CF, const struct OpaqueType* should be the default type
        so that const_casts are not necessary in user code.

        * UIProcess/API/C/WKArray.cpp:
        (WKArrayCreate):
        * UIProcess/API/C/WKBase.h:
        * UIProcess/API/C/WKType.cpp:
        (WKGetTypeID):
        (WKRetain):
        (WKRelease):
        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        (toWK):
        * WebProcess/InjectedBundle/API/c/WKBundleBase.h:

2010-09-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Add mutable array API to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=45082

        Add a mutable API to WebKit2 called WKMutableArrayRef. Make it "inherit" from 
        WKArrayRef in the same way JSObjectRef can inherit from JSValueRef in the JSC
        API, by abusing the c type system (WKArrayRef is defined as a const version of
        WKMutableArrayRef). Add very basic mutable API to go along with it.

        * Shared/ImmutableArray.h:
        (WebKit::ImmutableArray::isMutable):
        Add ability to ask it an array is mutable.

        * Shared/MutableArray.cpp: Added.
        (WebKit::MutableArray::MutableArray):
        (WebKit::MutableArray::~MutableArray):
        (WebKit::MutableArray::append):
        * Shared/MutableArray.h: Added.
        (WebKit::MutableArray::create):
        (WebKit::MutableArray::isMutable):
        Sketch out the mutable array interface.

        * UIProcess/API/C/WKAPICast.h:
        (toWK):
        Now that the opaque types can be const, use template magic to const_cast
        it away.

        * UIProcess/API/C/WKBase.h:
        Add new type and re-type WKArrayRef as const.

        * UIProcess/API/C/WKMutableArray.cpp: Added.
        (WKMutableArrayCreate):
        (WKArrayIsMutable):
        (WKArrayAppendItem):
        * UIProcess/API/C/WKMutableArray.h: Added.
        Fill in basic API.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:
        Add files.

2010-09-01  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement PluginInfoStore for UNIX
        https://bugs.webkit.org/show_bug.cgi?id=45038

        This implementation is generally just reusing the logic in WebCore since
        there is no way to get informations from a UNIX plugin without loading it
        - in contrast to mac bundles and windows dll-s.
        * UIProcess/Plugins/qt/PluginInfoStoreQt.cpp:
        (WebKit::PluginInfoStore::pluginsDirectories):
        (WebKit::PluginInfoStore::pluginPathsInDirectory):
        (WebKit::PluginInfoStore::getPluginInfo):
        (WebKit::PluginInfoStore::shouldUsePlugin):

2010-09-01  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Allow the web process to load frameworks other than WebKit2.framework from the build directory
        when running engineering builds.

        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain): Pass the path containing WebKit2.framework to the sandbox rather than
        the path of the WebKit2.framework itself.

2010-09-01  Sam Weinig  <sam@webkit.org>

        Reviewed by John Sullivan.

        Change ImmutableArray to be backed by a Vector
        https://bugs.webkit.org/show_bug.cgi?id=45064

        Change ImmutableArray to be backed by a Vector to work toward having 
        a mutable subclass and to improve the API when working with it in WebKit2
        itself.

        - Also remove WKArrayCreateAdoptingValues which was confusing and unused.

        * Shared/ImmutableArray.cpp:
        (WebKit::ImmutableArray::ImmutableArray):
        (WebKit::ImmutableArray::~ImmutableArray):
        * Shared/ImmutableArray.h:
        (WebKit::ImmutableArray::adopt):
        (WebKit::ImmutableArray::at):
        (WebKit::ImmutableArray::size):
        * Shared/ImmutableDictionary.cpp:
        (WebKit::ImmutableDictionary::keys):
        * UIProcess/API/C/WKArray.cpp:
        * UIProcess/API/C/WKArray.h:
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::backListAsImmutableArrayWithLimit):
        (WebKit::WebBackForwardList::forwardListAsImmutableArrayWithLimit):
        * UIProcess/WebContext.cpp:
        (WebKit::PostMessageEncoder::PostMessageDecoder::decode):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::PostMessageEncoder::PostMessageDecoder::decode):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::childFrames):

2010-09-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add URLResponse API for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=45062

        Add WebURLResponse class and WKURLResponseRef C API to go with it. Right now,
        instance of WKURLResponseRef are manipulated via platform types just like
        WKURLRequestRef.

        This just adds the type and conversion functions, no uses yet.

        * Shared/APIObject.h:
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebURLResponse.cpp: Added.
        (WebKit::WebURLResponse::WebURLResponse):
        * Shared/WebURLResponse.h: Added.
        (WebKit::WebURLResponse::create):
        (WebKit::WebURLResponse::resourceResponse):
        (WebKit::WebURLResponse::type):
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (CoreIPC::encodeWithNSKeyedArchiver):
        (CoreIPC::decodeWithNSKeyedArchiver):
        (CoreIPC::encodeResourceRequest):
        (CoreIPC::decodeResourceRequest):
        * Shared/mac/WebURLResponseMac.mm: Added.
        (WebKit::WebURLResponse::WebURLResponse):
        (WebKit::WebURLResponse::platformResponse):
        * Shared/qt/WebURLResponseQt.cpp: Added.
        (WebKit::WebURLResponse::WebURLResponse):
        (WebKit::WebURLResponse::platformResponse):
        * Shared/win/WebURLResponseWin.cpp: Added.
        (WebKit::WebURLResponse::WebURLResponse):
        (WebKit::WebURLResponse::platformResponse):
        * UIProcess/API/C/WKURLResponse.cpp: Added.
        (WKURLResponseGetTypeID):
        * UIProcess/API/C/WKURLResponse.h: Added.
        * UIProcess/API/C/cf/WKURLResponseCF.cpp: Added.
        (WKURLResponseCreateWithCFURLResponse):
        (WKURLResponseCopyCFURLResponse):
        * UIProcess/API/C/cf/WKURLResponseCF.h: Added.
        * UIProcess/API/C/mac/WKURLResponseNS.h: Added.
        * UIProcess/API/C/mac/WKURLResponseNS.mm: Added.
        (WKURLResponseCreateWithNSURLResponse):
        (WKURLResponseCopyNSURLResponse):
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:

2010-09-01  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Antti Koivisto.

        [Qt] Auto-generate WebKit2 forwarding headers
        https://bugs.webkit.org/show_bug.cgi?id=44692

        * DerivedSources.pro: let the generate-forwarding-headers.pl
        script generate forwarding headers.
        * generate-forwarding-headers.pl: Added.

2010-08-31  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

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

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

2010-08-31  Jon Honeycutt  <jhoneycutt@apple.com>

        Fix some copy/paste errors.

        Reviewed by Steve Falkenburg.

        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:
        (WebKit::InjectedBundlePageFormClient::textFieldDidEndEditing):
        Null check the correct callback.
        (WebKit::InjectedBundlePageFormClient::textDidChangeInTextField):
        Ditto.
        (WebKit::InjectedBundlePageFormClient::textDidChangeInTextArea):
        Ditto.

2010-08-31  Jon Honeycutt  <jhoneycutt@apple.com>

        Crash when closing a page with a form field when using WebKit2.

        Reviewed by Anders Carlsson.

        The crash came from accessing a BundlePageFormClient that had been
        destroyed. The client was intended to be cleared by a call to
        WKBundlePageSetFormClient, but a null check there caused it not to be
        cleared.

        I fixed this and all of the other WK "set client" functions.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetInjectedBundleClient):
        Return early if the caller passed a client with a version not equal to
        0.
        (WKContextSetHistoryClient):
        Ditto.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        Ditto.
        (WKPageSetPagePolicyClient):
        Ditto.
        (WKPageSetPageFormClient):
        Ditto.
        (WKPageSetPageUIClient):
        Ditto.

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

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetEditorClient):
        Ditto.
        (WKBundlePageSetFormClient):
        Ditto.
        (WKBundlePageSetLoaderClient):
        Ditto.
        (WKBundlePageSetUIClient):
        Ditto.

2010-08-31  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * Shared/WebPreferencesStore.h: Actually remove encode(), which has been moved to WebPreferencesStore.cpp.

2010-08-31  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=42195
        <rdar://problem/8186761> WebKitTestRunner needs to support layoutTestController.setXSSAuditorEnabled

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::WebPreferencesStore): Initialize xssAuditorEnabled.
        (WebKit::WebPreferencesStore::decode): Moved from header, added xssAuditorEnabled.
        (WebKit::WebPreferencesStore::encode): Ditto.
        (WebKit::WebPreferencesStore::overrideXSSAuditorEnabledForTestRunner): Set an override, so
        that decoding a WebPreferencesStore in the process will give the override result. WebProcess
        doesn't hold to WebPreferencesStore, so there are no existing ones to patch.
        (WebKit::WebPreferencesStore::removeTestRunnerOverrides): Remove the override.

        * Shared/WebPreferencesStore.h: Added xssAuditorEnabled.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetXSSAuditorEnabled):
        (WKPreferencesGetXSSAuditorEnabled):
        * UIProcess/API/C/WKPreferences.h:
        Added an API method to change xssAuditorEnabled preference.

        * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::preferencesDidChange): Added a comment
        explaining how making this method smarter could affect WebKitTestRunner.

        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::setXSSAuditorEnabled):
        (WebKit::WebPreferences::xssAuditorEnabled):
        * UIProcess/WebPreferences.h:
        Implemented xssAuditorEnabled preference accessors.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp: (WKBundleOverrideXSSAuditorEnabledForTestRunner):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        Added a private methods to temporarily change xssAuditor setting from an injected bundle,
        not notifying UIProcess about the change.

        * WebProcess/InjectedBundle/InjectedBundle.cpp: (WebKit::InjectedBundle::overrideXSSAuditorEnabledForTestRunner):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        Change the setting in existing pages, and override it for future ones.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Take xssAuditorEnabled from preferences store.
        (WebKit::WebPage::preferencesDidChange): If preferences change, forget our override. This only
        happens in WKRT when the next test begins.

2010-08-31  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        WebKitTestRunner needs layoutTestController.addUserStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=42680

        WebKitTestRunner needs layoutTestController.addUserScript
        https://bugs.webkit.org/show_bug.cgi?id=42681

        Improve UserContent APIs to allow passing null in the same places
        the WebKit1 API allowed. Add convenience function toWTFString to do
        WKStringRef conversion with correct null string behavior.

        * UIProcess/API/C/WKAPICast.h:
        (toWTFString):
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleAddUserScript):
        (WKBundleAddUserStyleSheet):
        (WKBundleRemoveUserScript):
        (WKBundleRemoveUserStyleSheet):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::toStringVector):

2010-08-31  Steve Falkenburg  <sfalken@apple.com>

        Rubber stamped by Sam Weinig.

        Remove library directive from def file to fix Debug_All build.

        * win/WebKit2.def:

2010-08-31  Adam Roben  <aroben@apple.com>

        Handle WM_PRINTCLIENT in WebKit2 on Windows

        Reviewed by Sam Weinig.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::wndProc): Call through to onPrintClientEvent when we
        get a WM_PRINTCLIENT message.
        (WebKit::WebView::onPrintClientEvent): Added. Paints the entire view
        into the HDC provided by Windows.

        * UIProcess/win/WebView.h: Added onPrintClientEvent.

2010-08-27  Adam Roben  <aroben@apple.com>

        Don't send messages to the injected bundle if the web process has
        exited

        Fixes <http://webkit.org/b/43046> <rdar://problem/8239455> Crash in
        WKContextPostMessageToInjectedBundle if the web process has exited

        Reviewed by Sam Weinig.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::postMessageToInjectedBundle): Only send messages
        when we have a valid web process.

2010-08-27  Adam Roben  <aroben@apple.com>

        Use the Windows thread pool instead of a dedicated thread for
        WorkQueue on Windows

        WorkQueue now uses ::RegisterWaitForSingleObject to find out when work
        items need to be executed. This causes Windows to wait on the objects
        on a thread pool wait thread, and then to spawn a thread pool worker
        thread when an object is signaled. This is more efficient than using
        our own dedicated thread to perform the wait and the work because
        multiple WorkQueues (and even other parts of WebKit or other modules)
        can all share the same wait thread and worker thread pool.

        Each time WorkQueue::m_performWorkEvent or any handle in
        WorkQueue::m_handles is signaled, a worker thread will be spawned.
        To maintain WorkQueue's serial nature, only one worker thread is
        allowed to perform work items at a time. (The worker thread that is
        actually performing work items is called the queue's "work thread".)
        To accomplish this, worker threads must register as the queue's work
        thread before performing work items.
        WorkQueue::m_isWorkThreadRegistered is used as an atomic guard to make
        sure that only one worker thread is registered at a time.
        
        Fixes <http://webkit.org/b/43150> <rdar://problem/8247280>.

        Reviewed by Anders Carlsson.

        * Platform/WorkQueue.h:
          - Added the WorkItemWin class, which is used to wrap WorkItems for
            WorkQueue's Windows implementation
          - Changed m_workItemQueue and m_handles to hold
            RefPtr<WorkItemWin>s
          - Replaced "work queue thread"-related members with new members that
            handle our thread pool code

        * Platform/win/WorkQueueWin.cpp:
        (WorkQueue::WorkItemWin::WorkItemWin):
        (WorkQueue::WorkItemWin::create):
        Added simple constructor/creator.

        (WorkQueue::handleCallback): Added. This function is called whenever a
        handle in WorkQueue::m_handles is signaled. We add the WorkItemWin
        that corresponds to the handle (passed via the context parameter) to
        the work item queue, then try to register as the work thread and
        perform any queued work. If another thread is already registered as
        the work thread, we just exit and let that thread handle the work we
        queued.
        (WorkQueue::registerHandle): Changed to wrap the WorkItem in a
        WorkItemWin, and to use ::RegisterWaitForSingleObject to wait on the
        handle.
        (WorkQueue::eventCallback): Added. This function is called whenever
        m_performWorkEvent is signaled. We try to register as the work thread
        and perfom any queued work. If another thread is already registered as
        the work thread, we just exit and let that thread handle the work.
        (WorkQueue::performWorkOnRegisteredWorkThread): Added. Performs any
        queued work in a loop until either the queue becomes invalid or no
        work is left to perform. Unregisters as the work thread before exiting
        so that other threads can perform work in the future.
        (WorkQueue::platformInitialize): Added initialization of
        m_isWorkThreadRegistered. Replaced code to spawn the old work queue
        thread with a call to ::RegisterWaitForSingleObject so that a worker
        thread from the thread pool will be spawned when m_performWorkEvent is
        signaled.
        (WorkQueue::tryRegisterAsWorkThread): Added. Attempts an atomic
        compare-and-swap to change m_isWorkThreadRegistered from 0 to 1. If
        sucessful, we return true to indicate that this thread is now
        registered as the work thread.
        (WorkQueue::unregisterAsWorkThread): Added. Uses an atomic
        compare-and-swap to change m_isWorkThreadRegistered back from 1 to 0.
        (WorkQueue::scheduleWork): Changed to wrap the WorkItem in a
        WorkItemWin. Also added an optimization to avoid signaling
        m_performWorkEvent when a work thread is already performing work, as
        it will pick up the item we just queued without us having to do
        anything.

2010-08-31  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Fix warnings in WebKit2 directory
        https://bugs.webkit.org/show_bug.cgi?id=44593

        * Platform/CoreIPC/qt/ConnectionQt.cpp: Mark unused variables for compiler.
        (CoreIPC::Connection::readyReadHandler):
        (CoreIPC::Connection::sendOutgoingMessage):
        * Shared/qt/WebEventFactoryQt.cpp:
        (WebKit::WebEventFactory::createWebTouchEvent): Initialize state variable. Default case added.
        * WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp:
        (WebKit::toNP): Return initialized NPEvent.

2010-08-31  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Determine application path of MiniBrowser at runtime and use that path
        for QtWebProcess if the executable exists in that path.

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::ProcessLauncherHelper::launch):

2010-08-31  Zoltan Horvath  <zoltan@webkit.org>

        Build fix after r66448 on WebKit2.

        [Qt] qt_wk_didFinishDocumentLoadForFrame needs to be implemented 
        https://bugs.webkit.org/show_bug.cgi?id=44934

        * UIProcess/API/qt/ClientImpl.cpp:
        (qt_wk_didFinishDocumentLoadForFrame):
        * UIProcess/API/qt/ClientImpl.h:

2010-08-30  Alice Liu  <alice.liu@apple.com>

        Reviewed by Darin Adler.

        Add missing parts of didFinishDocumentLoadForFrame
        https://bugs.webkit.org/show_bug.cgi?id=44913

        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h: Added new kind
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage): Updated struct
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::didFinishDocumentLoadForFrame): Added
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage): Added case for WebPageProxyMessage::DidFinishDocumentLoadForFrame
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame): Added
        * UIProcess/WebPageProxy.h:

        Just rearranging existing code in these:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::didFinishDocumentLoadForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:

2010-08-30  Sam Weinig  <sam@webkit.org>

        Try and fix the WebKit2 buildbot.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Add missing initialization of QTMovieDisableComponent.

2010-08-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add URLRequest API for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=44910

        Add WebURLRequest class and WKURLRequestRef C API to go with it. Right now,
        instance of WKURLRequestRef are manipulated via platform types, a la the
        WKStringRef and WKURLRef types.

        - Pipes WKPageLoadURLRequest through to the WebProcess.

        * Shared/APIObject.h:
        * Shared/CoreIPCSupport/WebPageMessageKinds.h:
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebURLRequest.cpp: Added.
        (WebKit::WebURLRequest::WebURLRequest):
        * Shared/WebURLRequest.h: Added.
        (WebKit::WebURLRequest::create):
        (WebKit::WebURLRequest::resourceRequest):
        (WebKit::WebURLRequest::type):
        * Shared/mac/WebCoreArgumentCodersMac.mm: Added.
        (CoreIPC::encodeResourceRequest):
        (CoreIPC::decodeResourceRequest):
        * Shared/mac/WebURLRequestMac.mm: Added.
        (WebKit::WebURLRequest::WebURLRequest):
        (WebKit::WebURLRequest::platformRequest):
        * Shared/qt/WebCoreArgumentCodersQt.cpp: Added.
        (CoreIPC::encodeResourceRequest):
        (CoreIPC::decodeResourceRequest):
        * Shared/qt/WebURLRequestQt.cpp: Added.
        (WebKit::WebURLRequest::WebURLRequest):
        (WebKit::WebURLRequest::platformRequest):
        * Shared/win/WebCoreArgumentCodersWin.cpp: Added.
        (CoreIPC::encodeResourceRequest):
        (CoreIPC::decodeResourceRequest):
        * Shared/win/WebURLRequestWin.cpp: Added.
        (WebKit::WebURLRequest::WebURLRequest):
        (WebKit::WebURLRequest::platformRequest):
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKBase.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageLoadURLRequest):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/C/WKURLRequest.cpp: Added.
        (WKURLRequestGetTypeID):
        * UIProcess/API/C/WKURLRequest.h: Added.
        * UIProcess/API/C/WebKit2.h:
        * UIProcess/API/C/cf/WKURLRequestCF.cpp: Added.
        (WKURLRequestCreateWithCFURLRequest):
        (WKURLRequestCopyCFURLRequest):
        * UIProcess/API/C/cf/WKURLRequestCF.h: Added.
        * UIProcess/API/C/mac: Added.
        * UIProcess/API/C/mac/WKURLRequestNS.h: Added.
        * UIProcess/API/C/mac/WKURLRequestNS.mm: Added.
        (WKURLRequestCreateWithNSURLRequest):
        (WKURLRequestCopyNSURLRequest):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadURL):
        (WebKit::WebPageProxy::loadURLRequest):
        * UIProcess/WebPageProxy.h:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadURL):
        (WebKit::WebPage::loadURLRequest):
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebPage/WebPage.h:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:

2010-08-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        WorkQueue leaks its dispatch queue
        <rdar://problem/8358509>
        https://bugs.webkit.org/show_bug.cgi?id=44689

        * Platform/mac/WorkQueueMac.cpp:
        (WorkQueue::platformInvalidate):

2010-08-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Add UserContent API to WebKit2 InjectedBundle
        <rdar://problem/8367587>
        https://bugs.webkit.org/show_bug.cgi?id=44810

        The new API differs from the version in WebKit1 in that the function do not take
        a group name since we currently do not expose a way to make multiple PageGroups in
        the API.

        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        (toUserScriptInjectionTime):
        (toUserContentInjectedFrames):
        Add conversion functions for enums.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleAddUserScript):
        (WKBundleAddUserStyleSheet):
        (WKBundleRemoveUserScript):
        (WKBundleRemoveUserStyleSheet):
        (WKBundleRemoveUserScripts):
        (WKBundleRemoveUserStyleSheets):
        (WKBundleRemoveAllUserContent):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::toStringVector):
        (WebKit::InjectedBundle::addUserScript):
        (WebKit::InjectedBundle::addUserStyleSheet):
        (WebKit::InjectedBundle::removeUserScript):
        (WebKit::InjectedBundle::removeUserStyleSheet):
        (WebKit::InjectedBundle::removeUserScripts):
        (WebKit::InjectedBundle::removeUserStyleSheets):
        (WebKit::InjectedBundle::removeAllUserContent):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        Forward API to PageGroup.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::sharedPageGroup):
        (WebKit::WebProcess::visitedLinkStateChanged):
        (WebKit::WebProcess::allVisitedLinkStateChanged):
        * WebProcess/WebProcess.h: Ad accessor for global PageGroup.

2010-08-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Move WKBundle didCreatePage callback to outside the WebPage
        constructor to avoid adoptRef errors.

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

2010-08-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8147879> - Null URL passed to WebKit2 HistoryDelegate

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForMIMEType): WK2 now loads initial about:blank document's synchronously,
          without consulting the policy delegate.
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): Ditto.

2010-08-27  Adam Roben  <aroben@apple.com>

        Handle ERROR_IO_INCOMPLETE more correctly in Connection

        We still don't know exactly why we're getting this error, but at least
        we can do something sensible when we do.

        Fixes <http://webkit.org/b/44776> Occasional crash in
        Connection::readEventHandler or assertion failure in
        Connection::writeEventHandler due to ERROR_IO_INCOMPLETE

        Reviewed by Sam Weinig.

        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::readEventHandler): Bail out of this function
        entirely when we get ERROR_IO_INCOMPLETE. We'll get called back later
        when the read completes. Continuing in the function at this point
        would cause us to treat an incomplete read as a complete one, leading
        to a crash. Added an assertion to make the crash more understandable
        in the future.
        (CoreIPC::Connection::writeEventHandler): Bail out when we get
        ERROR_IO_INCOMPLETE. We'll get called back later when the write
        completes.

2010-08-27  Adam Roben  <aroben@apple.com>

        Make the web process pause on launch when the
        WEBKIT2_PAUSE_WEB_PROCESS_ON_LAUNCH environment variable is set

        This is a bit easier to use than holding Ctrl-Alt-Shift during launch,
        since the process can sometimes take a long time to launch under the
        debugger. Ctrl-Alt-Shift still works, however.

        Fixes <http://webkit.org/b/44774> Would like an easier way to pause
        the web process on launch

        Reviewed by Sam Weinig.

        * WebProcess/WebKitMain.cpp:
        (WebKitMain):

2010-08-27  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Adam Roben.

        * WebKit2.xcodeproj/project.pbxproj: Make WKBundleScriptWorld.h public.

2010-08-26  Daniel Bates  <dbates@rim.com>

        Attempt to fix the Qt WebKit2 build.

        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent): Pass m_page.get() to WebKit::scroll()
        instead of m_page since it expects a raw pointer.

2010-08-26  Gavin Barraclough  <barraclough@apple.com>

        Speculative windows build fix.

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

2010-08-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Adopt more uses OwnPtr/OwnArray in WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=44728

        Also clears up weird create vs. adoption semantics. Now both create
        and adopt both don't ref their pointers, adoption is just about the
        buffer.

        * Shared/ImmutableArray.cpp:
        (WebKit::ImmutableArray::ImmutableArray):
        (WebKit::ImmutableArray::~ImmutableArray):
        * Shared/ImmutableArray.h:
        (WebKit::ImmutableArray::adopt):
        * Shared/ImmutableDictionary.cpp:
        (WebKit::ImmutableDictionary::keys):
        * Shared/WebData.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::create):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:pageNamespaceRef:]):
        (-[WKView _switchToDrawingAreaTypeIfNecessary:DrawingAreaProxy::]):
        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::QGraphicsWKView):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::init):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::create):
        * UIProcess/ChunkedUpdateDrawingAreaProxy.h:
        * UIProcess/LayerBackedDrawingAreaProxy.cpp:
        (WebKit::LayerBackedDrawingAreaProxy::create):
        * UIProcess/LayerBackedDrawingAreaProxy.h:
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::backListAsImmutableArrayWithLimit):
        (WebKit::WebBackForwardList::forwardListAsImmutableArrayWithLimit):
        * UIProcess/WebContext.cpp:
        (WebKit::PostMessageEncoder::PostMessageDecoder::decode):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::PostMessageEncoder::PostMessageDecoder::decode):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createPopupMenu):
        (WebKit::WebChromeClient::createSearchPopupMenu):
        * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
        (WebKit::WebPopupMenu::create):
        * WebProcess/WebCoreSupport/WebPopupMenu.h:
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp:
        (WebKit::WebSearchPopupMenu::create):
        (WebKit::WebSearchPopupMenu::WebSearchPopupMenu):
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::childFrames):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::close):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::corePage):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent):
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent):

2010-08-26  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=44726
        <rdar://problem/7935518> WebFrameProxies aren't destroyed until a page is destroyed

        Since frames can be moved across documents, they are not really a Page level concept.
        Moved frame tracking to WebProcess/WebProcessProxy.

        * Shared/CoreIPCSupport/WebProcessProxyMessageKinds.h:
        (WebProcessProxyMessage::):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::getStatistics):
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::didReceiveSyncMessage):
        (WebKit::WebPageProxy::didCreateMainFrame):
        (WebKit::WebPageProxy::didCreateSubFrame):
        (WebKit::WebPageProxy::processDidExit):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        (WebKit::WebProcessProxy::didClose):
        (WebKit::WebProcessProxy::webFrame):
        (WebKit::WebProcessProxy::frameCreated):
        (WebKit::WebProcessProxy::frameDestroyed):
        (WebKit::WebProcessProxy::disconnectFramesFromPage):
        (WebKit::WebProcessProxy::frameCountInPage):
        * UIProcess/WebProcessProxy.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::WebFrame):
        (WebKit::WebFrame::invalidate):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::webFrame):
        (WebKit::WebProcess::addWebFrame):
        (WebKit::WebProcess::removeWebFrame):
        * WebProcess/WebProcess.h:

2010-08-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Add PassOwnArrayPtr
        https://bugs.webkit.org/show_bug.cgi?id=44627

        * UIProcess/WebContext.cpp:
        (WebKit::PostMessageEncoder::PostMessageDecoder::decode):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::PostMessageEncoder::PostMessageDecoder::decode):

2010-08-26  Peter Kasting  <pkasting@google.com>

        Reviewed by Dimitri Glazkov.

        Misc. cleanup split off from bug 32356.
        https://bugs.webkit.org/show_bug.cgi?id=44696

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

2010-08-25  Brent Fulgham  <bfulgham@webkit.org>

        Build fix, no review.

        Add conditional guards around Safari-specific
        include files.

        * WebProcess/WebPage/win/WebPageWin.cpp:

2010-08-25  Adam Roben  <aroben@apple.com>

        Clean up Connection::open on Windows

        Fixes <http://webkit.org/b/44185>.

        Reviewed by Steve Falkenburg.

        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::platformInitialize): Set m_isConnected to true
        since the pipe got connected before it was even given to us.
        (CoreIPC::Connection::readEventHandler): Removed code that will never
        run now that m_isConnected is always true when this function is
        called. Since no outgoing messages will have been queued before
        m_isConnected is set to true, there's no need to send them explicitly
        here; they'll get sent as they're queued.
        (CoreIPC::Connection::open): Removed the call to ::ConnectNamedPipe,
        since the pipe is already connected by this point. Changed to schedule
        a read in the server and client the same way (rather than using
        ::SetEvent in the server).

2010-08-19  Adam Roben  <aroben@apple.com>

        Call NP_GetEntryPoints before NP_Initialize on Windows

        Doing otherwise will cause Flash and QuickTime to crash inside
        NP_Initialize.

        Fixes <http://webkit.org/b/44270> <rdar://problem/8330393> Crash in
        NP_Initialize when loading QuickTime when running
        plugins/embed-attributes-setting.html in WebKit2 on Windows

        Reviewed by John Sullivan.

        * WebProcess/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::tryLoad): On Windows, first call
        NP_GetEntryPoints, then NP_Initialize. Do the reverse on Mac to
        prevent Silverlight (e.g.) from crashing (see r38858).

2010-08-25  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement WebKit::Module for qt
        https://bugs.webkit.org/show_bug.cgi?id=44527

        * Platform/Module.h:
        * Platform/qt/ModuleQt.cpp:
        (WebKit::Module::load):
        (WebKit::Module::unload):
        (WebKit::Module::platformFunctionPointer):

2010-08-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        WebKit2 should launch the WebProcess in 32-bit mode if the UIProcess is in 32-bit mode
        <rdar://problem/8348100>
        https://bugs.webkit.org/show_bug.cgi?id=44537

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess): Use posix_spawnattr_setbinpref_np
        to tell posix_spawn to launch the WebProcess in 32-bit mode when the UIProcess
        is running in 32-bit mode.

2010-08-24  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Sam Weinig.

        Set the install path of WebKit2.framework to the build directory for debug and release builds
        to match our other frameworks.

        * WebKit2.xcodeproj/project.pbxproj:

2010-08-24  Sam Weinig  <sam@webkit.org>

        Reviewed by John Sullivan.

        Update profile.

        * WebProcess/com.apple.WebProcess.sb:

2010-08-23  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        * WebProcess/InjectedBundle/API/c/WKBundleNode.cpp:
        (WKBundleNodeGetParent): Update since parent now returns a
        ContainerNode*. The toRef function is a bit too picky to convert
        it without a bit of help.

2010-08-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65703.
        http://trac.webkit.org/changeset/65703
        https://bugs.webkit.org/show_bug.cgi?id=44460

        "Causing lots of crashes on Snow Leopard when running the
        layout tests" (Requested by eseidel2 on #webkit).

        * WebProcess/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::tryLoad):

2010-08-23  Jon Honeycutt  <jhoneycutt@apple.com>

        Layout tests do not run when using WebKitTestRunner in a Debug build.
        https://bugs.webkit.org/show_bug.cgi?id=44409

        Reviewed by Dan Bernstein.

        * UIProcess/Launcher/win/ProcessLauncherWin.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        Use WebKit2WebProcess_debug.exe when building Debug.

2010-08-23  Daniel Bates  <dbates@rim.com>

        Rubber-stamped by Adam Roben.

        Substitute "sizeof("javascript:") - 1" for the hardcoded constant 11 when
        extracting the JavaScript code portion of a JavaScript URL so as to make
        it clearer that the 11 represents the length of the scheme portion of
        a JavaScript URL.

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

2010-08-23  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Ariya Hidayat.

        [Qt] Find needed forwarding headers for WebKit2 automatically
        https://bugs.webkit.org/show_bug.cgi?id=44336

        * DerivedSources.pro: Use the new enumerate-included-framework-headers script for generating
        the list of forwarding headers we want to create.

2010-08-23  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] Build fix.

        * DerivedSources.pro:
        * WebKit2.pro:
        * WebProcess/Plugins/Netscape/qt: Added.
        * WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp: Added.
        (WebKit::NetscapePlugin::platformPostInitialize):
        (WebKit::NetscapePlugin::platformPaint):
        (WebKit::toNP):
        (WebKit::NetscapePlugin::platformHandleMouseEvent):
        (WebKit::NetscapePlugin::platformHandleWheelEvent):
        (WebKit::NetscapePlugin::platformSetFocus):
        (WebKit::NetscapePlugin::platformHandleMouseEnterEvent):
        (WebKit::NetscapePlugin::platformHandleMouseLeaveEvent):

2010-08-22  Juha Savolainen  <juha.savolainen@weego.fi>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add QTouchEvents support for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=44330

        This patch adds support for QTouchEvents in WebKit2. A new WebEvent-class
        is created for touchevents, WebTouchEvent. Also touchpoints needed a new
        class, WebPlatformTouchPoint. This is similar solution like in other
        events(like MouseEvent) on WebKit2. These classes are introduced in WebEvent.h 
        Also there was a need to create an empty constructor to PlatformTouchPoint-class.

        * DerivedSources.pro:
        * Shared/CoreIPCSupport/WebPageMessageKinds.h:
        (WebPageMessage::):
        * Shared/WebEvent.h:
        (WebKit::WebEvent::):
        (WebKit::WebTouchPoint::):
        (WebKit::WebTouchPoint::WebTouchPoint):
        (WebKit::WebTouchPoint::id):
        (WebKit::WebTouchPoint::state):
        (WebKit::WebTouchPoint::screenPosX):
        (WebKit::WebTouchPoint::screenPosY):
        (WebKit::WebTouchPoint::posX):
        (WebKit::WebTouchPoint::posY):
        (WebKit::WebTouchPoint::setState):
        (WebKit::WebTouchPoint::encode):
        (WebKit::WebTouchPoint::decode):
        (WebKit::WebTouchEvent::WebTouchEvent):
        (WebKit::WebTouchEvent::type):
        (WebKit::WebTouchEvent::touchPoints):
        (WebKit::WebTouchEvent::encode):
        (WebKit::WebTouchEvent::decode):
        (WebKit::WebTouchEvent::isTouchEventType):
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformTouchPoint::WebKit2PlatformTouchPoint):
        (WebKit::WebKit2PlatformTouchEvent::WebKit2PlatformTouchEvent):
        (WebKit::platform):
        * Shared/WebEventConversion.h:
        * Shared/qt/WebEventFactoryQt.cpp:
        (WebKit::webEventTypeForEvent):
        (WebKit::WebEventFactory::createWebTouchEvent):
        * Shared/qt/WebEventFactoryQt.h:
        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::event):
        (QGraphicsWKView::touchEvent):
        * UIProcess/API/qt/qgraphicswkview.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::touchEvent):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::touchEvent):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::touchEvent):
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebPage/WebPage.h:

2010-08-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Remove specialized retain/release functions in favor of a single one for WKTypeRefs
        https://bugs.webkit.org/show_bug.cgi?id=44386

        * UIProcess/API/C/WKArray.cpp:
        (WKArrayGetSize):
        * UIProcess/API/C/WKArray.h:
        * UIProcess/API/C/WKBackForwardList.cpp:
        (WKBackForwardListCopyForwardListWithLimit):
        * UIProcess/API/C/WKBackForwardList.h:
        * UIProcess/API/C/WKBackForwardListItem.cpp:
        (WKBackForwardListItemCopyTitle):
        * UIProcess/API/C/WKBackForwardListItem.h:
        * UIProcess/API/C/WKBase.h:
        * UIProcess/API/C/WKContext.cpp:
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/WKData.cpp:
        (WKDataGetSize):
        * UIProcess/API/C/WKData.h:
        * UIProcess/API/C/WKDictionary.cpp:
        (WKDictionaryCopyKeys):
        * UIProcess/API/C/WKDictionary.h:
        * UIProcess/API/C/WKError.h:
        * UIProcess/API/C/WKFormSubmissionListener.cpp:
        (WKFormSubmissionListenerContinue):
        * UIProcess/API/C/WKFormSubmissionListener.h:
        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameGetPage):
        * UIProcess/API/C/WKFrame.h:
        * UIProcess/API/C/WKFramePolicyListener.cpp:
        (WKFramePolicyListenerIgnore):
        * UIProcess/API/C/WKFramePolicyListener.h:
        * UIProcess/API/C/WKNavigationData.cpp:
        (WKNavigationDataCopyURL):
        * UIProcess/API/C/WKNavigationData.h:
        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/C/WKPageNamespace.cpp:
        (WKPageNamespaceGetContext):
        * UIProcess/API/C/WKPageNamespace.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesCreate):
        (WKPreferencesGetLocalStorageEnabled):
        * UIProcess/API/C/WKPreferences.h:
        * UIProcess/API/C/WKString.cpp:
        * UIProcess/API/C/WKString.h:
        * UIProcess/API/C/WKType.cpp:
        (WKRetain):
        (WKRelease):
        * UIProcess/API/C/WKType.h:
        * UIProcess/API/C/WKURL.cpp:
        (WKURLGetTypeID):
        * UIProcess/API/C/WKURL.h:
        * UIProcess/API/cpp/WKRetainPtr.h:
        * UIProcess/API/win/WKView.cpp:
        * UIProcess/API/win/WKView.h:
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::shared):
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleGetTypeID):
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.h:
        * WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.cpp:
        (WKBundleScriptWorldNormalWorld):
        * WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.h:

2010-08-20  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Antonio Gomes.

        [Qt] Implement cursor change in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=44263

        Implemented PageClient::setCursor.
        * UIProcess/API/qt/qgraphicswkview.cpp: Added updateCursor slot to be connected to the QWKPage::setCursor signal.
        (QGraphicsWKView::QGraphicsWKView):
        (QGraphicsWKView::updateCursor): Sets the cursor of the widget.
        * UIProcess/API/qt/qgraphicswkview.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::setCursor): Added implementation for PageClient::setCursor. Emitting singal through the QWKPage.
        * UIProcess/API/qt/qwkpage.h: Added setCursor signal.
        * UIProcess/API/qt/qwkpage_p.h:

2010-08-19  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Fix Mac build after Windows WebKit2 changes for Netscape Plug-ins

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformPaint): Changed frameRect() to
        m_frameRect.

2010-08-19  Adam Roben  <aroben@apple.com>

        Send mouse events to windowless plugins on Windows

        This seems to have been the last issue blocking us from playing videos
        on vimeo.com.

        Fixes <http://webkit.org/b/44276> <rdar://problem/8330398> Can't click
        play button in vimeo.com Flash video player in WebKit2 on Windows

        Reviewed by Sam Weinig.

        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::toNP): Added. Converts a WebMouseEvent to an NPEvent. Code
        was adapted from WebCore's PluginViewWin.cpp.

        (WebKit::NetscapePlugin::platformHandleMouseEvent):
        (WebKit::NetscapePlugin::platformHandleMouseEnterEvent):
        (WebKit::NetscapePlugin::platformHandleMouseLeaveEvent):
        Convert the WebMouseEvent to an NPEvent and send it to the plugin.

2010-08-19  Adam Roben  <aroben@apple.com>

        Add support for painting windowless plugins on Windows

        This gets the video on the front page of vimeo.com painting (though
        you can't make it play because we don't support mouse events yet).

        Fixes <http://webkit.org/b/44274> <rdar://problem/8330395> Windowless
        plugins don't paint in WebKit2 on Windows

        Reviewed by Sam Weinig.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue): Tell the plugin that we support windowless
        mode on Windows.
        (WebKit::NPN_SetValue): Implemented handling of NPPVpluginWindowBool
        by calling through to NetscapePlugin::setIsWindowed.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin): Added initialization of
        m_isWindowed. It defaults to false on Mac and true on other platforms,
        matching WebCore's PluginView.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h: Added m_isWindowed.
        (WebKit::NetscapePlugin::setIsWindowed): Added standard setter.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformPaint): Moved Mac-specific context
        translation code here from PluginView::paint.

        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::NetscapePlugin::platformPaint): Implemented. Code was ported
        from WebCore's PluginViewWin.cpp.

        * WebProcess/Plugins/Plugin.h: Updated the comment for Plugin::paint
        to explain the coordinate system of the context.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::paint): Changed to translate the context from
        document to window coordinates. We were previously trying to translate
        to plugin-local coordinates, but this only worked for documents whose
        origin was the same as the window's origin (i.e., the main frame). The
        plugin takes care of any further translations needed. (Mac translates
        the context into plugin-local coordinates, and Windows leaves it in
        window coordinates.)

2010-08-19  Adam Roben  <aroben@apple.com>

        Implement PluginInfoStore::pluginsDirectories

        This makes WebKit2 able to find and load Flash on Windows.

        Note that we aren't yet respecting the MozillaPlugins registry key.
        That's covered by <http://webkit.org/b/44271>.

        Fixes <http://webkit.org/b/43510> <rdar://problem/8273827> WebKit2
        should load plugins from the same directories as old-WebKit

        Reviewed by Jon Honeycutt and Ada Chan.

        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        (WebKit::parseVersionString):
        (WebKit::compareVersions):
        (WebKit::safariPluginsDirectory):
        (WebKit::addMozillaPluginDirectories):
        (WebKit::addWindowsMediaPlayerPluginDirectory):
        (WebKit::addQuickTimePluginDirectory):
        (WebKit::addAdobeAcrobatPluginDirectory):
        (WebKit::addMacromediaPluginDirectories):
        (WebKit::PluginInfoStore::pluginsDirectories):
        Ported (and ever-so-slightly cleaned up) code from WebCore's
        PluginDatabaseWin.cpp.

2010-08-19  Adam Roben  <aroben@apple.com>

        Call NP_GetEntryPoints before NP_Initialize on Windows

        Doing otherwise will cause Flash and QuickTime to crash inside
        NP_Initialize.

        Fixes <http://webkit.org/b/44270> <rdar://problem/8330393> Crash in
        NP_Initialize when loading QuickTime when running
        plugins/embed-attributes-setting.html in WebKit2 on Windows

        Reviewed by Sam Weinig.

        * WebProcess/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::tryLoad): On Windows, first call
        NP_GetEntryPoints, then NP_Initialize. Do the reverse on Mac to
        prevent Silverlight (e.g.) from crashing (see r38858).

2010-08-19  Adam Roben  <aroben@apple.com>

        Add NetscapePluginWin.cpp

        Fixes <http://webkit.org/b/44269> <rdar://problem/8330391>
        NetscapePlugin.h contains functions that should be in
        NetscapePluginWin.cpp

        Reviewed by Sam Weinig.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h: Moved functions from
        here...
        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp: ...to here.

        * win/WebKit2.vcproj: Added NetscapePluginWin.cpp and let VS reorder
        the file list.

2010-08-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Add modifier key info to policy client functions in WebKit2
        <rdar://problem/8185298>
        https://bugs.webkit.org/show_bug.cgi?id=44280

        * UIProcess/API/C/WKAPICast.h:
        Add conversion function for modifiers and rename an incorrectly named
        toWK to toRef.

        * UIProcess/API/C/WKPage.h:
        Add WKEventModifiers enum.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPolicyClient.cpp:
        (WebKit::WebPolicyClient::decidePolicyForNavigationAction):
        (WebKit::WebPolicyClient::decidePolicyForNewWindowAction):
        * UIProcess/WebPolicyClient.h:
        Pipe through modifier info.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::modifiersForNavigationAction):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        Get modifier info out of the NavigationInfo class in the same manner as
        WebKit1.

2010-08-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Add ability to get all the keys from a WKDictionaryRef
        https://bugs.webkit.org/show_bug.cgi?id=44221

        * Shared/ImmutableDictionary.cpp:
        (WebKit::ImmutableDictionary::keys):
        * Shared/ImmutableDictionary.h:
        Add keys function.

        * UIProcess/API/C/WKDictionary.cpp:
        (WKDictionaryCopyKeys):
        * UIProcess/API/C/WKDictionary.h:
        Wrap keys function.

2010-08-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Jon Honeycutt.

        Add ability to set custom userAgent for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=44215

        * Shared/CoreIPCSupport/WebPageMessageKinds.h:
        (WebPageMessage::):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetCustomUserAgent):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setCustomUserAgent):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::userAgent):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setCustomUserAgent):
        (WebKit::WebPage::userAgent):
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebPage/WebPage.h:

2010-08-18  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by John Sullivan.

        Make WKBundleNodeHandleRef usable from WKRetainPtr.

        * WebKit2.xcodeproj/project.pbxproj: Make WKBundleNodeHandle.h public.
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.h: Add WKRetain/WKRelease overloads.

2010-08-18  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Forwards QtWebProcess' stdout, stderr onto the UI process
        https://bugs.webkit.org/show_bug.cgi?id=44159

        For debugging purposes forwards stdout and stderr of QtWebProcess onto the UI process.

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::ProcessLauncherHelper::launch):

2010-08-17  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Darin Adler.

        Add NetworkingContext to avoid layer violations
        https://bugs.webkit.org/show_bug.cgi?id=42292

        Preparation: Just add the files to the build system.

        * WebKit2.xcodeproj/project.pbxproj: Added new files.
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h: Added.
        Placeholder with tentative code that might be changed when landing
        the rest of it.
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm: Added.
        Empty placeholder for now.

2010-08-16  Jon Honeycutt  <jhoneycutt@apple.com>

        Allow some tests to pass in WebKitTestRunner before SharedMemory and
        PluginInfoStore are implemented on Windows.

        Reviewed by Sam Weinig.

        * Platform/win/SharedMemoryWin.cpp:
        Disable not implemented warnings.
        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        Ditto.

2010-08-16  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig

        Remove unnecessary includes from UString.h, add new includes as necessary.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:

2010-08-16  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * Shared/win/CommandLineWin.cpp:

2010-08-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Remove #includes of <WebCore/PlatformString.h> in favor of <wtf/text/WTFString.h>

        * Platform/Module.cpp:
        * Platform/Module.h:
        * Shared/CommandLine.h:
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebEvent.h:
        * Shared/WebNavigationDataStore.h:
        * Shared/WebPreferencesStore.h:
        * Shared/WebString.h:
        * Shared/WebURL.h:
        * Shared/mac/CommandLineMac.cpp:
        * Shared/qt/UpdateChunk.cpp:
        * UIProcess/API/C/WKContext.cpp:
        * UIProcess/API/C/cf/WKStringCF.cpp:
        * UIProcess/API/C/cf/WKURLCF.cpp:
        * UIProcess/API/cpp/qt/WKStringQt.cpp:
        * UIProcess/API/cpp/qt/WKURLQt.cpp:
        * UIProcess/API/mac/PageClientImpl.mm:
        * UIProcess/API/qt/qgraphicswkview.cpp:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        * UIProcess/Launcher/win/ProcessLauncherWin.cpp:
        * UIProcess/WebBackForwardListItem.cpp:
        * UIProcess/WebBackForwardListItem.h:
        * UIProcess/WebContext.h:
        * UIProcess/WebContextInjectedBundleClient.cpp:
        * UIProcess/WebFrameProxy.cpp:
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPolicyClient.cpp:
        * UIProcess/WebProcessProxy.cpp:
        * UIProcess/WebUIClient.cpp:
        * UIProcess/win/WebView.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp:
        * WebProcess/Plugins/JSNPObject.cpp:
        * WebProcess/Plugins/NPJSObject.cpp:
        * WebProcess/Plugins/Netscape/NetscapePluginModule.cpp:
        * WebProcess/Plugins/Netscape/NetscapePluginModule.h:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebKitMain.cpp:
        * WebProcess/win/WebProcessMainWin.cpp:

2010-08-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Null CFURLRef returned from provisionalURL after searching on zillow.com
        <rdar://problem/8261812>
        https://bugs.webkit.org/show_bug.cgi?id=44072

        Conversion from WKURLRef to CFRURLRef was breaking on URLs using characters
        such as '{'.

        * UIProcess/API/C/cf/WKURLCF.cpp:
        (WKURLCopyCFURL): Use code similar to that found in KURLCFNet.cpp for conversion.

2010-08-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Remove unnecessary copy constructor, assignment operator and swap function.
        The defaults (for all except swap) should do just fine.

        * Shared/WebPreferencesStore.cpp:
        * Shared/WebPreferencesStore.h:

2010-08-16  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        Handle content size change in WebKit2
        Re-landing after fix.

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

        Based on the work of Antti Koivisto.
        Send message to the UI client when the contents size has changed through the WebChromeClient
        and propagate it to the WKPageUIClient.

        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h:
        (WebPageProxyMessage::): Added ContentsSizeChanged message kind.
        * UIProcess/API/C/WKPage.h: Added WKPageContentsSizeChangedCallback callback to the WKPageUIClient.
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage): Initialize the new callback to 0.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage): Handle ContentsSizeChanged message. Calls contetsSizeChanged.
        (WebKit::WebPageProxy::contentsSizeChanged): Added. Propagate the event to the the UI client.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::contentsSizeChanged): Added. Propagate the event forward to the WKPageUIClient.
        * UIProcess/WebUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::contentsSizeChanged): Implemented.

2010-08-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65419.
        http://trac.webkit.org/changeset/65419
        https://bugs.webkit.org/show_bug.cgi?id=44053

        Broke the Windows build (Requested by bbandix on #webkit).

        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h:
        (WebPageProxyMessage::):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebUIClient.cpp:
        * UIProcess/WebUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::contentsSizeChanged):

2010-08-16  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        Handle content size change in WebKit2

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

        Based on the work of Antti Koivisto.
        Send message to the UI client when the contents size has changed through the WebChromeClient
        and propagate it to the WKPageUIClient.

        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h:
        (WebPageProxyMessage::): Added ContentsSizeChanged message kind.
        * UIProcess/API/C/WKPage.h: Added WKPageContentsSizeChangedCallback callback to the WKPageUIClient.
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage): Initialize the new callback to 0.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage): Handle ContentsSizeChanged message. Calls contetsSizeChanged.
        (WebKit::WebPageProxy::contentsSizeChanged): Added. Propagate the event to the the UI client.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::contentsSizeChanged): Added. Propagate the event forward to the WKPageUIClient.
        * UIProcess/WebUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::contentsSizeChanged): Implemented.

2010-08-16  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Unreviewed Qt WebKit2 build fix.

        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::platformSetUpWebProcess): Added empty stub implementation.
        * WebKit2.pro: Enumerate new files, include WebKit.pri for correct define macro set.

2010-08-15  Dan Bernstein  <mitz@apple.com>

        Revised build fix from r65363 based on suggestion from Darin Adler.

        * UIProcess/API/C/WKArray.h: Include stddef.h.
        * UIProcess/API/C/WKBase.h: Uninclude ctype.h.
        * UIProcess/API/C/WKData.h: Include stddef.h.
        * UIProcess/API/C/WKDictionary.h: Ditto.

2010-08-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson in Sweden.

        Clean build of WebKitTestRunner fails with “'size_t' has not been declared” in WKArray.h
        https://bugs.webkit.org/show_bug.cgi?id=44005

        * UIProcess/API/C/WKBase.h: Include ctype.h.

2010-08-13  Sam Weinig  <sam@webkit.org>

        Fix build.

        * WebKit2.xcodeproj/project.pbxproj: Make WKDictionary.h public.

2010-08-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        Pass values map to willSubmitForm in WebKit2 API
        Part of <rdar://problem/8255932>
        https://bugs.webkit.org/show_bug.cgi?id=43995

        * Platform/CoreIPC/ArgumentCoders.h:
        (CoreIPC::):
        Add overload for std::pair.

        * Shared/ImmutableDictionary.h:
        (WebKit::ImmutableDictionary::adopt):
        Fix function signature by removing size parameter.

        * UIProcess/API/C/WKPage.h:
        Add dictionary parameter to callback.

        * UIProcess/WebFormClient.cpp:
        (WebKit::WebFormClient::willSubmitForm):
        Create an ImmutableDictionary from the vector of string pairs.

        * UIProcess/WebFormClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::willSubmitForm):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchWillSubmitForm):
        Plumb through the values vector.

2010-08-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        Add dictionary API type
        https://bugs.webkit.org/show_bug.cgi?id=43990

        Add an immutable dictionary type (WKStringRef -> WKTypeRef).

        * Shared/APIObject.h:
        (WebKit::APIObject::):
        Add new APIType.

        * Shared/ImmutableDictionary.cpp: Added.
        (WebKit::ImmutableDictionary::ImmutableDictionary):
        (WebKit::ImmutableDictionary::~ImmutableDictionary):
        * Shared/ImmutableDictionary.h: Added.
        (WebKit::ImmutableDictionary::create):
        (WebKit::ImmutableDictionary::adopt):
        (WebKit::ImmutableDictionary::get):
        (WebKit::ImmutableDictionary::size):
        (WebKit::ImmutableDictionary::):
        (WebKit::ImmutableDictionary::type):
        Add basic implementation

        * UIProcess/API/C/WKAPICast.h:
        (WebKit::):
        Add new mappings.

        * UIProcess/API/C/WKBase.h:
        Add new opaque type.

        * UIProcess/API/C/WKDictionary.cpp: Added.
        (WKDictionaryGetTypeID):
        (WKDictionaryGetItemForKey):
        (WKDictionaryGetSize):
        (WKDictionaryRetain):
        (WKDictionaryRelease):
        * UIProcess/API/C/WKDictionary.h: Added.
        Add API wrappings.
    
        * UIProcess/API/C/WebKit2.h:
        Add missing public headers.

        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:
        Add new files.

2010-08-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Jon Honeycutt.

        Add form submission listener to WebKit2
        Part of <rdar://problem/8255932>
        https://bugs.webkit.org/show_bug.cgi?id=43947

        * Shared/APIObject.h:
        Add TypeFormSubmissionListener APIType.
        
        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h:
        Add WillSubmitForm message kind.

        * UIProcess/API/C/WKAPICast.h:
        Add new mappings for WKFormSubmissionListenerRef -> WebFormSubmissionListener

        * UIProcess/API/C/WKBase.h:
        Add OpaqueWKFormSubmissionListener and rename the other opaque types to match.

        * UIProcess/API/C/WKFormSubmissionListener.cpp: Added.
        (WKFormSubmissionListenerGetTypeID):
        (WKFormSubmissionListenerContinue):
        (WKFormSubmissionListenerRetain):
        (WKFormSubmissionListenerRelease):
        * UIProcess/API/C/WKFormSubmissionListener.h: Added.
        Add C wrapper for WebFormSubmissionListener.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageFormClient):
        * UIProcess/API/C/WKPage.h:
        Add WKPageFormClient with willSubmitForm callback. Additional callbacks will be added as
        needed.

        * UIProcess/API/C/WebKit2.h:
        Add include for WKFormSubmissionListener.h

        * UIProcess/WebFormClient.cpp: Added.
        (WebKit::WebFormClient::WebFormClient):
        (WebKit::WebFormClient::initialize):
        (WebKit::WebFormClient::willSubmitForm):
        * UIProcess/WebFormClient.h: Added.
        Add client for form related delagations.

        * UIProcess/WebFormSubmissionListenerProxy.cpp: Added.
        (WebKit::WebFormSubmissionListenerProxy::WebFormSubmissionListenerProxy):
        (WebKit::WebFormSubmissionListenerProxy::continueSubmission):
        * UIProcess/WebFormSubmissionListenerProxy.h: Added.
        (WebKit::WebFormSubmissionListenerProxy::create):
        (WebKit::WebFormSubmissionListenerProxy::type):
        * UIProcess/WebFrameListenerProxy.cpp: Copied from UIProcess/WebFramePolicyListenerProxy.cpp.
        Add new type of listener for form submissions. It inherits from the new base class
        for listeners, WebFrameListenerProxy.

        (WebKit::WebFrameListenerProxy::WebFrameListenerProxy):
        (WebKit::WebFrameListenerProxy::~WebFrameListenerProxy):
        (WebKit::WebFrameListenerProxy::invalidate):
        (WebKit::WebFrameListenerProxy::receivedPolicyDecision):
        * UIProcess/WebFrameListenerProxy.h: Copied from UIProcess/WebFramePolicyListenerProxy.h.
        Move logic that would have to be shared between WebFramePolicyListenerProxy and
        WebFormSubmissionListenerProxy into shared base class.

        * UIProcess/WebFramePolicyListenerProxy.cpp:
        (WebKit::WebFramePolicyListenerProxy::WebFramePolicyListenerProxy):
        * UIProcess/WebFramePolicyListenerProxy.h:
        (WebKit::WebFramePolicyListenerProxy::create):
        (WebKit::WebFramePolicyListenerProxy::type):
        Move to inheriting from WebFrameListenerProxy.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::disconnect):
        (WebKit::WebFrameProxy::receivedPolicyDecision):
        (WebKit::WebFrameProxy::setUpPolicyListenerProxy):
        (WebKit::WebFrameProxy::setUpFormSubmissionListenerProxy):
        * UIProcess/WebFrameProxy.h:
        Change listener functions to act on WebFrameListenerProxys and add setUpFormSubmissionListenerProxy.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeFormClient):
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::willSubmitForm):
        * UIProcess/WebPageProxy.h:
        Plumb through willSubmitForm call as we do with the other listeners.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchWillSubmitForm):
        Ditto.

        * WebKit2.xcodeproj/project.pbxproj: Add new files.
        * win/WebKit2.vcproj: Add new files.
        * win/WebKit2Generated.make: Ditto.

2010-08-13  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig

        Unify UString::UTF8String() & String::utf8() methods,
        remove UString::cost() & make atArrayIndex a free function.

        * WebProcess/Plugins/JSNPObject.cpp:
        (WebKit::npIdentifierFromIdentifier):
        * WebProcess/Plugins/NPJSObject.cpp:
        (WebKit::NPJSObject::enumerate):
        * WebProcess/Plugins/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::convertJSValueToNPVariant):

2010-08-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65295.
        http://trac.webkit.org/changeset/65295
        https://bugs.webkit.org/show_bug.cgi?id=43950

        It broke 4 sputnik tests (Requested by Ossy on #webkit).

        * WebProcess/Plugins/JSNPObject.cpp:
        (WebKit::npIdentifierFromIdentifier):
        * WebProcess/Plugins/NPJSObject.cpp:
        (WebKit::NPJSObject::enumerate):
        * WebProcess/Plugins/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::convertJSValueToNPVariant):

2010-08-12  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig

        Unify UString::UTF8String() & String::utf8() methods,
        remove UString::cost() & make atArrayIndex a free function.

        * WebProcess/Plugins/JSNPObject.cpp:
        (WebKit::npIdentifierFromIdentifier):
        * WebProcess/Plugins/NPJSObject.cpp:
        (WebKit::NPJSObject::enumerate):
        * WebProcess/Plugins/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::convertJSValueToNPVariant):

2010-08-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam Weinig.

        WebKit2 crashes when WebFrame outlives WebPage
        https://bugs.webkit.org/show_bug.cgi?id=43939

        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebKit::WebChromeClient::page): Add this method, to allow
        WebFrame to retrieve its WebPage following WebCore pointers.
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::WebFrame): Do not initialize m_page (it's gone).
        (WebKit::WebFrame::page): Don't use the data member, get it from
        WebCore.
        (WebKit::WebFrame::invalidate): Use method to get page() and null check.
        (WebKit::WebFrame::isMainFrame): ditto
        * WebProcess/WebPage/WebFrame.h:

2010-08-12  Jon Honeycutt  <jhoneycutt@apple.com>

        WebKit2 needs to initialize SafariTheme
        https://bugs.webkit.org/show_bug.cgi?id=43901

        Reviewed by Sam Weinig.

        * WebProcess/win/WebProcessMainWin.cpp:
        (WebKit::initializeSafariTheme):
        Copied from old WebKit.
        (WebKit::WebProcessMain):
        If we're using SafariTheme, initialize it.

2010-08-12  Jon Honeycutt  <jhoneycutt@apple.com>

        WebKitTestRunner needs to run tests without using native controls
        https://bugs.webkit.org/show_bug.cgi?id=43772

        Reviewed by Sam Weinig.

        * Shared/CoreIPCSupport/WebProcessMessageKinds.h:
        (WebProcessMessage::):
        Add a new message.

        * UIProcess/API/C/win/WKContextPrivateWin.h: Added.
        Declare WKContextSetShouldPaintNativeControls().

        * UIProcess/API/C/win/WKContextWin.cpp: Added.
        (WKContextSetShouldPaintNativeControls):
        Call the WebContext's setShouldPaintNativeControls().

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        Initialize m_shouldPaintNativeControls.
        (WebKit::WebContext::ensureWebProcess):
        If we created a web process, call platformSetUpWebProcess().

        * UIProcess/WebContext.h:
        Declare new functions and a member to store whether we should paint
        native controls.

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

        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::setShouldPaintNativeControls):
        Set m_shouldPaintNativeControls. If we have a valid web process, send a
        SetShouldPaintNativeControls message.
        (WebKit::WebContext::platformSetUpWebProcess):
        Send a SetShouldPaintNativeControls message.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage):
        If this is a SetShouldPaintNativeControls message, decode the argument,
        and call Settings::setShouldPaintNativeControls().

        * win/WebKit2.vcproj:
        Add WKContextPrivateWin.h and WKContextWin.cpp to project.

        * win/WebKit2Generated.make:
        Copy WKContextPrivateWin.h.

2010-08-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Add SPI to stop loading from the InjectedBundle.

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

2010-08-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        WKPageStopLoading always asserts

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveMessage): Switch break to return, break made us
        hit the ASSERT_NOT_REACHED at the end of the function.

2010-08-11  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Unreviewed build fix.

        [Qt] Update WebKit2 build environment, add stub implementation of SharedMemory.

        * DerivedSources.pro:
        * Platform/qt/SharedMemoryQt.cpp: Added.
        (WebKit::SharedMemory::Handle::Handle):
        (WebKit::SharedMemory::Handle::~Handle):
        (WebKit::SharedMemory::Handle::encode):
        (WebKit::SharedMemory::Handle::decode):
        (WebKit::SharedMemory::create):
        (WebKit::SharedMemory::~SharedMemory):
        (WebKit::SharedMemory::createHandle):
        (WebKit::SharedMemory::systemPageSize):
        * WebKit2.pro:
        * WebKit2Prefix.h:

2010-08-11  Mark Rowe  <mrowe@apple.com>

        Build fix.  Update references to StringHash.h.

        * Shared/CommandLine.h:
        * UIProcess/WebContext.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/win/WebProcessMainWin.cpp:

2010-08-10  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Add leakRef and clear to all RefPtr variants
        https://bugs.webkit.org/show_bug.cgi?id=42389

        * UIProcess/API/cpp/WKRetainPtr.h: Changed all uses of "template <...>" to
        "template<...>". Defined many of the inlined functions outside the class
        definition, to avoid style checker warnings about multiple statements on
        a single line and for slightly better clarity of the class definition itself.
        Renamed releaseRef to leakRef. Added a releaseRef that calls leakRef so we
        don't have to rename all callers at once. Added a clear function.

2010-08-10  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Antonio Gomes.

        [Qt] Build WebKit2 into a static lib

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

        * WebKit2.pri: Added. Defined addWebKit2Lib function that defines how to link against the static lib.
        * WebKit2.pro:  Build specification for the WebKit2 framework.
        * WebProcess.pro: Copied from WebKit2/WebKit2.pro. Build specification for the WebProcess binary.

2010-08-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Add zoom support for injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=43759

        Add SPI to change the zoom factor for a page.

        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        (toZoomMode):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageGetZoomFactor):
        (WKBundlePageSetZoomFactor):
        (WKBundlePageSetZoomMode):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::zoomFactor):
        (WebKit::WebPage::setZoomFactor):
        (WebKit::WebPage::setZoomMode):
        * WebProcess/WebPage/WebPage.h:

2010-08-06  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig

        Bug 43594 - Add string forwards to Forward.h
        This allows us to remove forward declarations for these classes from
        WebCore/WebKit (a step in moving these class from WebCore:: to WTF::).

        * UIProcess/PageClient.h:
        * UIProcess/VisitedLinkProvider.h:
        * UIProcess/WebContextInjectedBundleClient.h:
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebHistoryClient.h:
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebPolicyClient.h:
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebUIClient.h:
        * UIProcess/win/WebView.h:
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        * WebProcess/Plugins/NPRuntimeObjectMap.h:
        * WebProcess/Plugins/Netscape/NetscapePluginStream.h:
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebProcess.h:

2010-08-09  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] No need for PageClientImpl

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

        Remove PageClientImpl, take the implementation of WebKit::PageClient into QWKPagePrivate.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::QWKPagePrivate):
        (QWKPagePrivate::toolTipChanged):
        * UIProcess/API/qt/qwkpage_p.h:
        (QWKPagePrivate::pageDidEnterAcceleratedCompositing):
        (QWKPagePrivate::pageDidLeaveAcceleratedCompositing):
        (QWKPagePrivate::processDidExit):
        (QWKPagePrivate::processDidRevive):
        (QWKPagePrivate::setCursor):
        (QWKPagePrivate::takeFocus):

2010-08-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKitTestRunner needs to print onunload handler information
        <rdar://problem/8213831>
        https://bugs.webkit.org/show_bug.cgi?id=42703

        Add SPI to get the number of pending unload events.

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

2010-08-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add additional loader client functions need to complete WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=43684

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::didCancelClientRedirectForFrame):
        (WebKit::InjectedBundlePageLoaderClient::willPerformClientRedirectForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didChangeLocationWithinPageForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didFinishDocumentLoadForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didHandleOnloadEventsForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didDisplayInsecureContentForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didRunInsecureContentForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidHandleOnloadEvents):
        (WebKit::WebFrameLoaderClient::dispatchDidCancelClientRedirect):
        (WebKit::WebFrameLoaderClient::dispatchWillPerformClientRedirect):
        (WebKit::WebFrameLoaderClient::dispatchDidChangeLocationWithinPage):
        (WebKit::WebFrameLoaderClient::dispatchDidFinishDocumentLoad):
        (WebKit::WebFrameLoaderClient::didDisplayInsecureContent):
        (WebKit::WebFrameLoaderClient::didRunInsecureContent):

2010-08-07  Sam Weinig  <sam@webkit.org>

        Another fix for the windows build.

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

2010-08-07  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::platformLayer):
        * WebProcess/Plugins/PluginView.h:

2010-08-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKitTestRunner needs GCController
        <rdar://problem/8213834>
        https://bugs.webkit.org/show_bug.cgi?id=42701

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleGarbageCollectJavaScriptObjects):
        (WKBundleGarbageCollectJavaScriptObjectsOnAlternateThreadForDebugging):
        (WKBundleGetJavaScriptObjectsCount):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::garbageCollectJavaScriptObjects):
        (WebKit::InjectedBundle::garbageCollectJavaScriptObjectsOnAlternateThreadForDebugging):
        (WebKit::InjectedBundle::javaScriptObjectsCount):
        * WebProcess/InjectedBundle/InjectedBundle.h:

2010-08-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        CA drawing model support for Mac Plugins
        https://bugs.webkit.org/show_bug.cgi?id=43678
        <rdar://problem/7929701>

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue):
        Handle WKNVSupportsCompositingCoreAnimationPluginsBool and 
        NPNVsupportsCoreAnimationBool and return true if accelerated compositing is enabled.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::isAcceleratedCompositingEnabled):
        Call PluginController::isAcceleratedCompositingEnabled.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformPostInitialize):
        If the plug-in uses the Core Animation drawing model, ask it for its layer.

        (WebKit::NetscapePlugin::platformPaint):
        Don't send draw events if the Core Animation drawing model is used.

        (WebKit::NetscapePlugin::pluginLayer):
        Return the plug-in layer.

        * WebProcess/Plugins/Plugin.h:
        Add a pluginLayer pure virtual member function.

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

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::initializePlugin):
        If the plug-in has a layer, enter compositing mode.

        (WebKit::PluginView::platformLayer):
        Ask the plug-in for its layer.

        (WebKit::PluginView::isAcceleratedCompositingEnabled):
        Call Settings::acceleratedCompositingEnabled.

        * WebProcess/Plugins/PluginView.h:

2010-08-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Delete key doesn't go Back in WebKit2
        <rdar://problem/8272978>
        https://bugs.webkit.org/show_bug.cgi?id=43665

        - Adds support for delete key going back (mac only for now)
        - Adds support for command-left/command right going back/forward
        - Flesh out scrolling due to arrow keys on the mac to match old webkit.
        - Made performDefaultBehaviorForKeyEvent platform specific and added
          a boolean return value which will be used later to inform the UI process
          about what events have been processed.

        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h:
        (WebPageProxyMessage::):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _wantsKeyDownForEvent:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveSyncMessage):
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::backItem):
        (WebKit::WebBackForwardListProxy::forwardItem):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::keyEvent):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::scroll):
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent):
        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (WebKit::scroll):
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent):
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::scroll):
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent):

2010-08-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r64904.
        http://trac.webkit.org/changeset/64904
        https://bugs.webkit.org/show_bug.cgi?id=43671

        Broke the Qt Windows builders. (Requested by bbandix on
        #webkit).

        * WebKit2.pri: Removed.
        * WebKit2.pro:
        * WebProcess.pro: Removed.

2010-08-07  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Eric Seidel.

        NPAPI headers should be included through npruntime_internal.h

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

        * DerivedSources.pro:
        * WebProcess/Plugins/NPJSObject.h:
        * WebProcess/Plugins/NPRuntimeUtilities.h:
        * WebProcess/Plugins/Netscape/NetscapePluginStream.h:

2010-08-07  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Eric Seidel.

        [Qt] Build WebKit2 into a static lib

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

        * WebKit2.pri: Added. Defined addWebKit2Lib function that defines how to link against the static lib.
        * WebKit2.pro:  Build specification for the WebKit2 framework.
        * WebProcess.pro: Copied from WebKit2/WebKit2.pro. Build specification for the WebProcess binary.

2010-08-05  Jon Honeycutt  <jhoneycutt@apple.com>

        WebKitTestRunner needs to be able to set the font smoothing type
        https://bugs.webkit.org/show_bug.cgi?id=43406

        Reviewed by Adam Roben.

        * Shared/FontSmoothingLevel.h: Added.
        (WebKit::):

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::WebPreferencesStore):
        Initialize fontSmoothingLevel.
        (WebKit::WebPreferencesStore::swap):
        Copy fontSmoothingLevel.

        * Shared/WebPreferencesStore.h:
        (WebKit::WebPreferencesStore::encode):
        Encode fontSmoothingLevel.
        (WebKit::WebPreferencesStore::decode):
        Decode it.

        * UIProcess/API/C/WKPreferencesPrivate.cpp: Added.
        (WKPreferencesSetFontSmoothingLevel):
        Get the font smoothing level from the WKFontSmoothingLevel, and call
        WebPreferences::setFontSmoothingLevel().
        (WKPreferencesGetFontSmoothingLevel):
        Get the font smoothing level from WebPreferences, and translate it to a
        WKFontSmoothingLevel.

        * UIProcess/API/C/WKPreferencesPrivate.h: Added.
        Declare the font smoothing levels, and declare functions to get and set
        the level.

        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::setFontSmoothingLevel):
        Set fontSmoothingLevel and call update().
        (WebKit::WebPreferences::fontSmoothingLevel):
        Return the level.

        * UIProcess/WebPreferences.h:
        Declare getter and setter for fontSmoothingLevel.

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

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::preferencesDidChange):
        Call platformPreferencesDidChange().

        * WebProcess/WebPage/WebPage.h:
        Declare platformPreferencesDidChange().

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

        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (WebKit::WebPage::platformPreferencesDidChange):
        Stubbed.

        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::platformPreferencesDidChange):
        On CG platforms, call wkSetFontSmoothingLevel(). This matches the code
        in old WebKit's WebPreferences. Set the font rendering mode to either
        normal (CG) or alternative (GDI) based on the font smoothing level. This
        matches what was done in old WebKit's WebView.

        * win/WebKit2.vcproj:
        Add FontSmoothingLevel.h and WKPreferencesPrivate.{h,cpp} to project.

        * win/WebKit2Generated.make:
        Copy WKPreferencesPrivate.h.

2010-08-06  Anders Carlsson  <andersca@apple.com>

        Build fixes.

        * Platform/win/SharedMemoryWin.cpp:
        (WebKit::SharedMemory::Handle::encode):
        (WebKit::SharedMemory::Handle::decode):
        * Shared/qt/UpdateChunk.cpp:
        (WebKit::UpdateChunk::encode):
        (WebKit::UpdateChunk::decode):
        * Shared/qt/UpdateChunk.h:
        * Shared/win/UpdateChunk.cpp:
        (WebKit::UpdateChunk::encode):
        (WebKit::UpdateChunk::decode):
        * Shared/win/UpdateChunk.h:

2010-08-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Change all ArgumentEncoder and ArgumentDecoder references to pointers
        https://bugs.webkit.org/show_bug.cgi?id=43651

        * Platform/CoreIPC/ArgumentCoder.h:
        * Platform/CoreIPC/ArgumentDecoder.h:
        * Platform/CoreIPC/Arguments.h:
        * Platform/CoreIPC/Attachment.cpp:
        * Platform/CoreIPC/Attachment.h:
        * Platform/CoreIPC/mac/MachPort.h:
        * Platform/SharedMemory.h:
        * Platform/mac/SharedMemoryMac.cpp:
        * Shared/DrawingAreaBase.cpp:
        * Shared/DrawingAreaBase.h:
        * Shared/WebEvent.h:
        * Shared/WebNavigationDataStore.h:
        * Shared/WebPreferencesStore.h:
        * Shared/mac/UpdateChunk.cpp:
        * Shared/mac/UpdateChunk.h:
        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        * UIProcess/ChunkedUpdateDrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/LayerBackedDrawingAreaProxy.cpp:
        * UIProcess/LayerBackedDrawingAreaProxy.h:
        * UIProcess/WebContext.cpp:
        * UIProcess/WebContext.h:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.h:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
        * WebProcess/WebPage/LayerBackedDrawingArea.h:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebProcess.cpp:

2010-08-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Don't try to allocate a vector unless we know the buffer can contain it
        https://bugs.webkit.org/show_bug.cgi?id=43647

        * Platform/CoreIPC/ArgumentCoders.h:
        (CoreIPC::):
        Check that the argument decoder buffer actually can hold all the vector elements.

        * Platform/CoreIPC/ArgumentDecoder.cpp:
        (CoreIPC::ArgumentDecoder::bufferIsLargeEnoughtToContain):
        Align the current position to the given alignment, add the size and check if the position is
        past the end of the buffer.

        * Platform/CoreIPC/ArgumentDecoder.h:
        (CoreIPC::ArgumentDecoder::bufferIsLargeEnoughtToContain):
        Get the size and alignment and call the other bufferIsLargeEnoughtToContain overload.

2010-08-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Detect invalid CoreIPC messages and call didReceiveInvalidMessage
        https://bugs.webkit.org/show_bug.cgi?id=43643
        <rdar://problem/7891069>

        * Platform/CoreIPC/ArgumentDecoder.cpp:
        (CoreIPC::ArgumentDecoder::alignBufferPosition):
        If we can't correctly align the buffer position, mark the decoder as invalid.

        * Platform/CoreIPC/ArgumentDecoder.h:
        (CoreIPC::ArgumentDecoder::isInvalid):
        Check if the argument decoder is valid.

        (CoreIPC::ArgumentDecoder::markInvalid):
        Mark the argument decoder as invalid, by setting its buffer position past its end position.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::dispatchMessages):
        Check if m_client is null before dispatching messages. If an argument decoder was marked invalid, call
        Connection::Client::didReceiveInvalidMessage.

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::Message::releaseArguments):
        Rename destroy to releaseArguments and make it return a PassOwnPtr.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::~WebProcessProxy):
        Call releaseArguments instead of destroy.

        (WebKit::WebProcessProxy::didReceiveInvalidMessage):
        Kill the web process and invalidate its connection.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveInvalidMessage):
        Don't do anything, if the UI process is sending invalid messages there's not much we can do.

        * WebProcess/WebProcess.h:

2010-08-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Add CoreIPC::MessageReceiver class
        https://bugs.webkit.org/show_bug.cgi?id=43637

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::MessageReceiver::~MessageReceiver):
        Add MessageReceiver class and make Client inherit from it.

        (CoreIPC::Connection::MessageReceiver::didReceiveSyncMessage):
        Change didReceiveSyncMessage from being a pure virtual member function and make it
        assert by default instead.

        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        * UIProcess/ChunkedUpdateDrawingAreaProxy.h:
        Remove ChunkedUpdateDrawingAreaProxy::didReceiveSyncMessage.

        * Shared/DrawingAreaBase.h:
        Include "Connection.h" instead.

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::didReceiveSyncMessage):
        Change didReceiveSyncMessage from being a pure virtual member function and make it
        assert by default instead.

        * WebProcess/WebProcess.cpp:
        * WebProcess/WebProcess.h:
        Remove didReceiveSyncMessage.

2010-08-06  Jessie Berlin  <jberlin@apple.com>

        Roll out http://trac.webkit.org/changeset/64801, which broke the Safari Windows Build.
        Unreviewed.

        * UIProcess/PageClient.h:
        * UIProcess/VisitedLinkProvider.h:
        * UIProcess/WebContextInjectedBundleClient.h:
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebHistoryClient.h:
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebPolicyClient.h:
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebUIClient.h:
        * UIProcess/win/WebView.h:
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        * WebProcess/Plugins/NPRuntimeObjectMap.h:
        * WebProcess/Plugins/Netscape/NetscapePluginStream.h:
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebProcess.h:

2010-08-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add form client for injected bundle code
        https://bugs.webkit.org/show_bug.cgi?id=43603

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetFormClient):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp: Added.
        (WebKit::InjectedBundlePageFormClient::InjectedBundlePageFormClient):
        (WebKit::InjectedBundlePageFormClient::initialize):
        (WebKit::InjectedBundlePageFormClient::textFieldDidBeginEditing):
        (WebKit::InjectedBundlePageFormClient::textFieldDidEndEditing):
        (WebKit::InjectedBundlePageFormClient::textDidChangeInTextField):
        (WebKit::InjectedBundlePageFormClient::textDidChangeInTextArea):
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.h: Added.
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::textFieldDidBeginEditing):
        (WebKit::WebEditorClient::textFieldDidEndEditing):
        (WebKit::WebEditorClient::textDidChangeInTextField):
        (WebKit::WebEditorClient::textDidChangeInTextArea):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::initializeInjectedBundleFormClient):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::injectedBundleFormClient):
        * win/WebKit2.vcproj:

2010-08-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add ability to get a JSValueRef for a node handle and a world
        https://bugs.webkit.org/show_bug.cgi?id=43591

        - Add API to get a JSValueRef for a world, node and frame (the
          frame is currently necessary to pick the right globalObject for
          the node wrapper).
        - Add API to a JSGlobalContextRef for a world and a frame.

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameGetJavaScriptContextForWorld):
        (WKBundleFrameGetJavaScriptWrapperForNodeForWorld):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.h:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::coreNode):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:
        * WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp:
        (WebKit::InjectedBundleScriptWorld::coreWorld):
        * WebProcess/InjectedBundle/InjectedBundleScriptWorld.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::jsContext):
        (WebKit::WebFrame::jsContextForWorld):
        (WebKit::WebFrame::jsWrapperForWorld):
        * WebProcess/WebPage/WebFrame.h:

2010-08-05  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig

        Bug 43594 - Add string forwards to Forward.h
        This allows us to remove forward declarations for these classes from
        WebCore/WebKit (a step in moving these class from WebCore:: to WTF::).

        * UIProcess/PageClient.h:
        * UIProcess/VisitedLinkProvider.h:
        * UIProcess/WebContextInjectedBundleClient.h:
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebHistoryClient.h:
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebPolicyClient.h:
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebUIClient.h:
        * UIProcess/win/WebView.h:
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        * WebProcess/Plugins/NPRuntimeObjectMap.h:
        * WebProcess/Plugins/Netscape/NetscapePluginStream.h:
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebProcess.h:

2010-08-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Use the visited link provider for visited links
        https://bugs.webkit.org/show_bug.cgi?id=43583

        * Shared/CoreIPCSupport/WebProcessMessageKinds.h:
        (WebProcessMessage::):
        Remove AddVisitedLink.

        * Shared/CoreIPCSupport/WebProcessProxyMessageKinds.h:
        (WebProcessProxyMessage::):
        Remove PopulateVisitedLinks and add AddVisitedLink.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::sharedProcessContext):
        Initialize the main run loop before creating the context.
        
        (WebKit::WebContext::sharedThreadContext):
        Ditto.
        
        (WebKit::WebContext::create):
        Ditto.

        (WebKit::WebContext::WebContext):
        Initialize the visited link provider.

        (WebKit::WebContext::processDidFinishLaunching):
        Ask the visited link provider to populate visited links.

        (WebKit::WebContext::addVisitedLink):
        Ask the visited link provider to add the visited link.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::addVisitedLink):
        Call WebContext::addVisitedLink.

        (WebKit::WebProcessProxy::didReceiveMessage):
        Handle AddVisitedLink.

        (WebKit::WebProcessProxy::didFinishLaunching):
        Call WebContext::processdidFinishLaunching.

        * UIProcess/WebProcessProxy.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::populateVisitedLinks):
        Don't send the WebProcessProxyMessage::PopulateVisitedLinks message.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::isLinkVisited):
        Call WebProcess::isLinkVisited.
        
        (WebKit::WebPlatformStrategies::addVisitedLink):
        Call WebProcess::addVisitedLink.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setVisitedLinkTable):
        Create a shared memory object and tell the visited link table about it.

        (WebKit::WebProcess::visitedLinkStateChanged):
        Go through the link hashes and call Page::visitedStateChanged.

        (WebKit::WebProcess::allVisitedLinkStateChanged):
        Call Page::allVisitedStateChanged.

        (WebKit::WebProcess::isLinkVisited):
        Call VisitedLinkTable::isLinkVisited.

        (WebKit::WebProcess::addVisitedLink):
        Inform the UI process about the added link.

        (WebKit::WebProcess::didReceiveMessage):
        Handle new messages.

2010-08-05  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.
        Add missing include path.

        * win/WebKit2Common.vsprops:

2010-08-05  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Sam Weinig.

        Export WKError.h

        * WebKit2.xcodeproj/project.pbxproj:

2010-08-05  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.
        Correct vcproj nesting.

        * win/WebKit2.vcproj:

2010-08-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Add script world API for injected bundles
        https://bugs.webkit.org/show_bug.cgi?id=43577

        * Shared/APIObject.h:
        (WebKit::APIObject::):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        (WebKit::):
        * WebProcess/InjectedBundle/API/c/WKBundleBase.h:
        * WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.cpp: Added.
        (WKBundleScriptWorldGetTypeID):
        (WKBundleScriptWorldCreateWorld):
        (WKBundleScriptWorldNormalWorld):
        (WKBundleScriptWorldRetain):
        (WKBundleScriptWorldRelease):
        * WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.h: Added.
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        * WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp: Added.
        (WebKit::allWorlds):
        (WebKit::InjectedBundleScriptWorld::create):
        (WebKit::InjectedBundleScriptWorld::getOrCreate):
        (WebKit::InjectedBundleScriptWorld::normalWorld):
        (WebKit::InjectedBundleScriptWorld::InjectedBundleScriptWorld):
        (WebKit::InjectedBundleScriptWorld::~InjectedBundleScriptWorld):
        * WebProcess/InjectedBundle/InjectedBundleScriptWorld.h: Added.
        (WebKit::InjectedBundleScriptWorld::type):
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:

2010-08-05  Sam Weinig  <sam@webkit.org>

        Reviewed Anders Carlsson.

        Add DOM Node wrapper class for injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=43524

        - This class should not expose any DOM APIs, but just be a handle that can be used to get a JS
          wrapper for the node in a specific world.

        * Shared/APIObject.h:
        (WebKit::APIObject::):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        (WebKit::):
        * WebProcess/InjectedBundle/API/c/WKBundleBase.h:
        * WebProcess/InjectedBundle/API/c/WKBundleNode.h:
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp: Added.
        (WKBundleNodeHandleGetTypeID):
        (WKBundleNodeHandleRetain):
        (WKBundleNodeHandleRelease):
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.h: Added.
        * WebProcess/InjectedBundle/DOM: Added.
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp: Added.
        (WebKit::domHandleCache):
        (WebKit::getDOMHandle):
        (WebKit::setDOMHandle):
        (WebKit::removeDOMHandle):
        (WebKit::InjectedBundleNodeHandle::getOrCreate):
        (WebKit::InjectedBundleNodeHandle::create):
        (WebKit::InjectedBundleNodeHandle::InjectedBundleNodeHandle):
        (WebKit::InjectedBundleNodeHandle::~InjectedBundleNodeHandle):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h: Added.
        (WebKit::InjectedBundleNodeHandle::type):
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:

2010-08-05  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * Platform/mac/SharedMemoryMac.cpp:

2010-08-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add VisitedLinkProvider class
        https://bugs.webkit.org/show_bug.cgi?id=43570

        * Shared/CoreIPCSupport/WebProcessMessageKinds.h:
        (WebProcessMessage::):
        Add SetVisitedLinkTable, VisitedLinkStateChanged and AllVisitedLinkStateChanged.

        * UIProcess/VisitedLinkProvider.cpp: Added.
        (WebKit::VisitedLinkProvider::VisitedLinkProvider):
        Initialize table.

        (WebKit::VisitedLinkProvider::populateVisitedLinksIfNeeded):
        Ask the context to populate visited links.

        (WebKit::VisitedLinkProvider::addVisitedLink):
        Add the link hash to the set of pending visited links and start the timer.

        (WebKit::nextPowerOf2):
        Add helper function.

        (WebKit::tableSizeForKeyCount):
        Given a key count, returns a table size. The table size is always a power of two, and
        is chosen so that the table is always at least half empty.

        (WebKit::VisitedLinkProvider::pendingVisitedLinksTimerFired):
        First, check if we need to resize the hash table and allocate new shared memory for it if that is the case.
        Then, go through the pending link hash vector and insert all the elements in the table. Finally, notify the web
        process about visited links whose state have changed.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage):
        Add case statements.

        * win/WebKit2.vcproj:
        * WebKit2.xcodeproj/project.pbxproj:
        Add VisitedLinkProvider.cpp and VisitedLinkProvider.h.

2010-08-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add VisitedLinkTable class
        https://bugs.webkit.org/show_bug.cgi?id=43566

        * Shared/VisitedLinkTable.cpp: Added.
        (WebKit::VisitedLinkTable::VisitedLinkTable):
        (WebKit::VisitedLinkTable::~VisitedLinkTable):
        Add out of line constructors so we won't have to include SharedMemory.h in the 
        VisitedLinkTable.h header.

        (WebKit::isPowerOf2):
        Add helper function.

        (WebKit::VisitedLinkTable::setSharedMemory):
        Set the new shared memory and update the table size and hash.

        (WebKit::doubleHash):
        Add helper function from the WTF HashTable.

        (WebKit::VisitedLinkTable::addLinkHash):
        Add a link hash to the table.

        (WebKit::VisitedLinkTable::isLinkVisited):
        See if there is an entry for the given link hash.

        * Shared/VisitedLinkTable.h: Added.
        (WebKit::VisitedLinkTable::sharedMemory):
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Add VisitedLinkTable.cpp and VisitedLinkTable.h

2010-08-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Add shared memory abstraction
        https://bugs.webkit.org/show_bug.cgi?id=43535
        <rdar://problem/8275295>

        * Platform/SharedMemory.h: Added.
        (WebKit::SharedMemory::):
        (WebKit::SharedMemory::size):
        Return the size, in bytes, of the shared memory object.
        
        (WebKit::SharedMemory::data):
        Return a pointer to the shared memory object.
        
        * Platform/mac/SharedMemoryMac.cpp: Added.
        (WebKit::SharedMemory::Handle):
        A shared memory handle, which can be passed in a CoreIPC Connection.

        (WebKit::SharedMemory::create):
        Allocate the shared memory.

        (WebKit::SharedMemory::~SharedMemory):
        Deallocate the shared memory.

        (WebKit::SharedMemory::createHandle):
        Create a mach port and pass it to the handle.

        (WebKit::SharedMemory::systemPageSize):
        Return the system page size, in bytes.
        
        * Platform/win/SharedMemoryWin.cpp: Added.
        Add stubbed out version.

        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Add files.

2010-08-05  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Unify blob related feature defines to ENABLE(BLOB).
        https://bugs.webkit.org/show_bug.cgi?id=43081

        * Configurations/FeatureDefines.xcconfig:

2010-08-05  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Rubber-stamped by Kenneth Rohde Christiansen.

        [Qt] Remove redundant include paths from WebKit2.pro.

        * WebKit2.pro:

2010-08-04  Adam Roben  <aroben@apple.com>

        Teach WebKit2 how to load the TestNetscapePlugin

        Fixes <http://webkit.org/b/43513> WebKitTestRunner on Windows fails to
        load TestNetscapePlugin

        Reviewed by Jon Honeycutt.

        * Platform/Module.cpp:
        (WebKit::Module::Module): Initialize m_module on Windows.

        * Platform/Module.h: Added m_module on Windows.

        * Platform/win/ModuleWin.cpp:
        (WebKit::Module::load): Implemented using ::LoadLibraryExW.
        (WebKit::Module::unload): Implemented using ::FreeLibrary.
        (WebKit::Module::platformFunctionPointer): Implemented using
        ::GetProcAddress.

        * Platform/win/RunLoopWin.cpp:
        (RunLoop::TimerBase::timerFired): Kill the native timer before calling
        the fired callback. This makes all our timers non-repeating, but
        that's all we need currently.
        (RunLoop::TimerBase::start): Added an assertion to help us figure out
        when we need to implement repeating timers. Also fixed a typo.

        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        (WebKit::PluginInfoStore::pluginsDirectories): Added a FIXME.

        (WebKit::PathWalker::PathWalker):
        (WebKit::PathWalker::~PathWalker):
        (WebKit::PathWalker::isValid):
        (WebKit::PathWalker::data):
        (WebKit::PathWalker::step):
        Added. This class wraps the ::FindFirstFile/::FindNextFile APIs.

        (WebKit::PluginInfoStore::pluginPathsInDirectory): Implemented by
        porting logic from
        WebCore::PluginDatabase::getPluginPathsInDirectories.
        (WebKit::getVersionInfo): Copied from PluginDatabaseWin.cpp.
        (WebKit::PluginInfoStore::getPluginInfo): Implemented by porting logic
        from WebCore::PluginPackage::fetchInfo.
        (WebKit::PluginInfoStore::shouldUsePlugin): Changed to always return
        true for now. Added a FIXME about implementing this for real.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin):
        Removed PLATFORM(MAC) guards around plugin code.

        * win/WebKit2.vcproj: Let VS sort the file.

2010-08-05  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        Use toCopiedRef for making WK objects
        https://bugs.webkit.org/show_bug.cgi?id=43552

        * UIProcess/API/cpp/qt/WKStringQt.cpp:
        (WKStringCreateWithQString):
        * UIProcess/API/cpp/qt/WKURLQt.cpp:
        (WKURLCreateWithQUrl):

2010-08-04  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Change callback APIs to include an Error object in one callback, instead of having a second callback for failure.
        https://bugs.webkit.org/show_bug.cgi?id=43522

        This includes adding a WKErrorRef object which - for now - either exists or doesn't.
        In the future, it may contain useful information about the error.
        
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:
        
        * Shared/APIObject.h:
        (WebKit::APIObject::):
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKBase.h:
        
        * Shared/WebError.h: Added.
        (WebKit::WebError::create):
        (WebKit::WebError::WebError):
        (WebKit::WebError::type):
        
        * UIProcess/API/C/WKError.cpp: Added.
        (WKErrorGetTypeID):
        * UIProcess/API/C/WKError.h: Added.
        
        * UIProcess/API/C/WKPage.cpp:
        (WKPageRunJavaScriptInMainFrame):
        (callRunJavaScriptBlockAndRelease):
        (WKPageRunJavaScriptInMainFrame_b):
        (WKPageRenderTreeExternalRepresentation):
        (callRenderTreeExternalRepresentationBlockAndDispose):
        (WKPageRenderTreeExternalRepresentation_b):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/C/WKPagePrivate.h:
        
        * UIProcess/GenericCallback.h:
        (WebKit::GenericCallback::create):
        (WebKit::GenericCallback::performCallbackWithReturnValue):
        (WebKit::GenericCallback::invalidate):
        (WebKit::GenericCallback::GenericCallback):

2010-08-04  Ada Chan  <adachan@apple.com>

        Windows build fix        

        * win/WebKit2Generated.make:

2010-08-04  John Sullivan  <sullivan@apple.com>

        Build fix, rubber-stamped by Brady Eidson.

        * WebKit2.xcodeproj/project.pbxproj:
        Made WKData.h a public header.

2010-08-04  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_SetValue): Removed unreachable code.

2010-08-04  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_SetValue): Added some case statements that are compiled
        on Windows to avoid a warning about having default but not cases.

2010-08-04  Adam Roben  <aroben@apple.com>

        Windows build fix

        * win/WebKit2.vcproj: Added NetscapeBrowserFuncs.

2010-08-04  Adam Roben  <aroben@apple.com>

        Windows build fix

        The functions in NetscapePluginModuleWin.cpp have been moved to
        NetscapePluginModule.cpp.

        * WebProcess/Plugins/Netscape/win/NetscapePluginModuleWin.cpp: Removed.
        * win/WebKit2.vcproj: Removed NetscapePluginModuleWin.

2010-08-04  Adam Roben  <aroben@apple.com>

        Move bundle-loading code from NetscapePluginModule to a new Module
        class

        This allows more NetscapePluginModule code to be cross-platform.

        Fixes <http://webkit.org/b/43497> NetscapePluginModule::try/unload
        should be cross-platform

        Reviewed by Anders Carlsson.

        * Platform/Module.cpp: Added.
        (WebKit::Module::Module): Store our path.
        (WebKit::Module::~Module): Unload our native module.

        * Platform/Module.h: Added.
        (WebKit::Module::leakBundle): Does what it says.
        (WebKit::Module::functionPointer): Returns a pointer to the named
        function, with the right type.

        * Platform/mac/ModuleMac.mm: Added.
        (WebKit::Module::load): Code was moved here from
        NetscapePluginModule::tryLoad.
        (WebKit::Module::unload): Just clears our bundle.
        (WebKit::Module::platformFunctionPointer): Code was moved here from
        NetscapePluginModuleMac.cpp.

        * Platform/qt/ModuleQt.cpp: Added.
        (WebKit::Module::load):
        (WebKit::Module::unload):
        (WebKit::Module::platformFunctionPointer):
        * Platform/win/ModuleWin.cpp: Added.
        (WebKit::Module::load):
        (WebKit::Module::unload):
        (WebKit::Module::platformFunctionPointer):
        Just stubbed out these functions.

        * WebKit2.xcodeproj/project.pbxproj: Added Module.

        * WebProcess/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::tryLoad):
        (WebKit::NetscapePluginModule::unload):
        Moved here from NetscapePluginModuleMac.cpp. Now uses the
        cross-platform m_module member.

        * WebProcess/Plugins/Netscape/NetscapePluginModule.h: Replaced
        m_bundle with m_module.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginModuleMac.cpp: Removed.

        * win/WebKit2.vcproj: Added Module.

2010-08-04  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Lay the groundwork for saving/restoring page session state to WK2
        https://bugs.webkit.org/show_bug.cgi?id=43495

        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

        * Shared/APIObject.h:
        (WebKit::APIObject::):
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKBase.h:
        
        Arbitrary byte buffer:
        * Shared/WebData.h: Added.
        (WebKit::WebData::create):
        (WebKit::WebData::bytes):
        (WebKit::WebData::size):
        (WebKit::WebData::WebData):
        (WebKit::WebData::type):
        
        API facing object to act as a byte buffer:
        * UIProcess/API/C/WKData.cpp: Added.
        (WKDataGetTypeID):
        (WKDataCreate):
        (WKDataGetBytes):
        (WKDataGetSize):
        (WKDataRetain):
        (WKDataRelease):
        * UIProcess/API/C/WKData.h: Added.

        API for saving/restoring state:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageCopySessionState):
        (WKPageRestoreFromSessionState):
        * UIProcess/API/C/WKPage.h:

        These will be filled in later:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::sessionState):
        (WebKit::WebPageProxy::restoreFromSessionState):
        * UIProcess/WebPageProxy.h:


2010-08-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Set correct default minimumFontSize.

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::WebPreferencesStore):

2010-08-03  Adam Roben  <aroben@apple.com>

        Turn on PLATFORM_STRATEGIES on Windows

        Fixes <http://webkit.org/b/43431>.

        Reviewed by Anders Carlsson.

        * win/WebKit2.vcproj: Added WebPlatformStrategies. Also let VS reorder
        this file as it saw fit.

2010-08-03  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Close the WebProcess

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

        * Platform/CoreIPC/qt/ConnectionQt.cpp:
        (CoreIPC::Connection::open): Registered connectionDidClose to be called when the client disconnected.
        * Platform/qt/RunLoopQt.cpp:
        (RunLoop::stop): Implemented by calling QCoreApplication::exit.

2010-08-03  Jon Honeycutt  <jhoneycutt@apple.com>

        WebKitTestRunner needs to activate the Mac font ascent hack
        https://bugs.webkit.org/show_bug.cgi?id=43404

        Reviewed by Darin Adler.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleActivateMacFontAscentHack):
        Get the InjectedBundle, and calls its activateMacFontAscentHack().

        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        Declare WKBundleActivateMacFontAscentHack().

        * WebProcess/InjectedBundle/InjectedBundle.h:
        Declare activateMacFontAscentHack().

        * WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp:
        (WebKit::InjectedBundle::activateMacFontAscentHack):
        Stubbed.

        * WebProcess/InjectedBundle/qt/InjectedBundleQt.cpp:
        (WebKit::InjectedBundle::activateMacFontAscentHack):
        Stubbed.

        * WebProcess/InjectedBundle/win/InjectedBundleWin.cpp:
        (WebKit::InjectedBundle::activateMacFontAscentHack):
        Activate the ascent hack.

2010-08-03  Simon Fraser  <simon.fraser@apple.com>

        Fix typo in typo fix.

        * Shared/DrawingAreaBase.h:
        (WebKit::DrawingAreaBase::DrawingAreaInfo::DrawingAreaInfo):
        (WebKit::DrawingAreaBase::DrawingAreaBase):

2010-08-03  Simon Fraser  <simon.fraser@apple.com>

        Fix typo in previous commit.

        * Shared/DrawingAreaBase.h:
        (WebKit::DrawingAreaBase::DrawingAreaInfo::DrawingAreaInfo):
        (WebKit::DrawingAreaBase::DrawingAreaBase):

2010-08-03  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Compositing iframe layout test crashes in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42860
        
        Fix assertion caused by a DrawingArea handling a message that was targetted at an older DrawingArea
        that it has replaced.
        
        This was done by assigning a unique ID to each DrawingAreaProxy that gets created, and passing
        this ID, along with the type, to the WebProcess via an encoded DrawingAreaInfo. Each message
        also includes this ID. Messages with an ID that doesn't match that of the current DrawingArea are ignored.
        
        Refactored some common code and data into a DrawingAreaBase class which is shared, and adding
        encode/decode of DrawingAreaInfo.

        * Shared/DrawingAreaBase.cpp: Added.
        (WebKit::DrawingAreaBase::encode):
        (WebKit::DrawingAreaBase::decode):
        * Shared/DrawingAreaBase.h: Added.
        (WebKit::DrawingAreaBase::):
        (WebKit::DrawingAreaBase::~DrawingAreaBase):
        (WebKit::DrawingAreaBase::type):
        (WebKit::DrawingAreaBase::id):
        (WebKit::DrawingAreaBase::DrawingAreaInfo::DrawingAreaInfo):
        (WebKit::DrawingAreaBase::DrawingAreaBase):
        (CoreIPC::):
        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::setSize):
        (WebKit::ChunkedUpdateDrawingAreaProxy::setPageIsVisible):
        (WebKit::ChunkedUpdateDrawingAreaProxy::update):
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::DrawingAreaProxy):
        (WebKit::DrawingAreaProxy::nextDrawingAreaID):
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/LayerBackedDrawingAreaProxy.cpp:
        (WebKit::LayerBackedDrawingAreaProxy::setSize):
        (WebKit::LayerBackedDrawingAreaProxy::setPageIsVisible):
        (WebKit::LayerBackedDrawingAreaProxy::update):
        * UIProcess/LayerBackedDrawingAreaProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveSyncMessage):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createWindow):
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
        (WebKit::ChunkedUpdateDrawingArea::ChunkedUpdateDrawingArea):
        (WebKit::ChunkedUpdateDrawingArea::didReceiveMessage):
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.h:
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        (WebKit::DrawingArea::DrawingArea):
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
        (WebKit::LayerBackedDrawingArea::LayerBackedDrawingArea):
        (WebKit::LayerBackedDrawingArea::didReceiveMessage):
        * WebProcess/WebPage/LayerBackedDrawingArea.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::create):
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::changeAcceleratedCompositingMode):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::createWebPage):
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/WebProcess.h:
        * win/WebKit2.vcproj:

2010-08-03  Alex Milowski  <alex@milowski.com>

        Reviewed by Beth Dakin.

        Changed the ENABLE_MATHML value to enable MathML by default.

        * Configurations/FeatureDefines.xcconfig:

2010-08-03  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Compositing iframe layout test crashes in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42860
        
        Part one of the fix: make DrawingArea ref-counted, so that the object
        can survide a swap in drawing areas inside the run loop observer callback.

        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm:
        (WebKit::LayerBackedDrawingArea::platformClear):
        (WebKit::LayerBackedDrawingArea::updateLayoutRunLoopObserverCallback):
        (WebKit::LayerBackedDrawingArea::updateLayoutRunLoopObserverFired):

2010-08-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Frequent ASSERT_NOT_REACHED in Connection::processIncomingMessage when running regression tests
        https://bugs.webkit.org/show_bug.cgi?id=42926
        <rdar://problem/8237329>

        Remove this assert, it's bogus. It would fire when a reply came in on the connection queue before 
        waitForReply was called on the client thread, but that case is already covered.

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

2010-08-03  Adam Roben  <aroben@apple.com>

        Compile out two Mac-only localized strings on non-Mac platforms

        Fixes <http://webkit.org/b/43433> copyImageUnknownFileLabel and
        AXARIAContentGroupText should only be compiled on Mac

        Reviewed by Anders Carlsson.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        Wrapped copyImageUnknownFileLabel and AXARIAContentGroupText in
        PLATFORM(MAC).

2010-08-03  Balazs Kelemen  <kb@inf.u-szeged.hu>

        [Qt] Unreviewed typo fix in the WebKit2/DerivedSources.pro project file.

        Use QMAKE_MKDIR as the command for directory creation.

        * DerivedSources.pro:

2010-08-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        Add VisitedLinkStrategy for each platform to implement
        https://bugs.webkit.org/show_bug.cgi?id=43393

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createVisitedLinkStrategy):
        (WebKit::WebPlatformStrategies::isLinkVisited): Call back into PageGroup's visited links, for now.
        (WebKit::WebPlatformStrategies::addVisitedLink): Ditto.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2010-07-27  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Darin Fisher.

        PopupMenu refactoring in preparation to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42592

        Classes WebPopupMenu and WebSearchPopupMenu inherit from PopupMenu and
        SearchPopupMenu respectively. At this point they are just empty implementations.

        * WebProcess/WebCoreSupport/WebPopupMenu.cpp: Added.
        (WebKit::WebPopupMenu::WebPopupMenu):
        (WebKit::WebPopupMenu::~WebPopupMenu):
        (WebKit::WebPopupMenu::disconnectClient):
        (WebKit::WebPopupMenu::show):
        (WebKit::WebPopupMenu::hide):
        (WebKit::WebPopupMenu::updateFromElement):
        * WebProcess/WebCoreSupport/WebPopupMenu.h: Added.
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp: Added.
        (WebKit::WebSearchPopupMenu::WebSearchPopupMenu):
        (WebKit::WebSearchPopupMenu::popupMenu):
        (WebKit::WebSearchPopupMenu::saveRecentSearches):
        (WebKit::WebSearchPopupMenu::loadRecentSearches):
        (WebKit::WebSearchPopupMenu::enabled):
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.h: Added.

        As ChromeClient was made responsible for providing PopupMenu and SearchPopupMenu
        instances, concrete classes that inherit from ChromeClient needed to be changed to
        implement the new methods.

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

        build issues:

        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2010-08-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Fix plug-in test failures and remove tests from the Skipped list
        https://bugs.webkit.org/show_bug.cgi?id=43389

        * WebProcess/Plugins/JSNPMethod.cpp:
        JSNPMethod::s_info should specify InternalFunction::info as its parent.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::cancelStreamLoad):
        Special-case the manual stream and call PluginController::cancelManualStreamLoad.

        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::stop):
        It's OK to call stop on a stream that hasn't been started. Remove assertion and return early.
        
        * WebProcess/Plugins/PluginController.h:
        Add cancelManualStreamLoad.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::cancelManualStreamLoad):
        Tell the document loader to cancel the main resource load.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::innerText):
        Check for a null document element.

2010-08-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add support for loading manual streams
        https://bugs.webkit.org/show_bug.cgi?id=43380

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin):
        Initialize m_loadManually to false.

        (WebKit::NetscapePlugin::removePluginStream):
        Special case the manual stream.

        (WebKit::NetscapePlugin::initialize):
        Don't request the stream if we're already loading.

        (WebKit::NetscapePlugin::manualStreamDidReceiveResponse):
        Create the manual stream and pass the response to it.

        (WebKit::NetscapePlugin::manualStreamDidReceiveData):
        Pass the data to the manual stream.

        (WebKit::NetscapePlugin::manualStreamDidFinishLoading):
        Call the manual stream.

        (WebKit::NetscapePlugin::manualStreamDidFail):
        Ditto.

        * WebProcess/Plugins/Plugin.h:
        Add pure virtual member functions for manual stream loading.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::buildHTTPHeaders):
        Put code in a function so both PluginView::Stream::didReceiveResponse and 
        manualLoadDidReceiveResponse can call it.

        (WebKit::PluginView::Stream::didReceiveResponse):
        Call buildHTTPHeaders.

        (WebKit::PluginView::Stream::didFinishLoading):
        Protect the plug-in when calling destroyStream.

        (WebKit::PluginView::manualLoadDidReceiveResponse):
        Call Plugin::manualStreamDidReceiveResponse.

        (WebKit::PluginView::manualLoadDidReceiveData):
        Call Plugin::manualStreamDidReceiveData.

        (WebKit::PluginView::manualLoadDidFinishLoading):
        Call Plugin::manualStreamDidFinishLoading.

        (WebKit::PluginView::manualLoadDidFail):
        Call Plugin::manualStreamDidFail.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::WebFrameLoaderClient):
        Initialize m_hasSentResponseToPluginView to false.

        (WebKit::WebFrameLoaderClient::setMainDocumentError):
        Call PluginView::manualLoadDidFail.

        (WebKit::WebFrameLoaderClient::committedLoad):
        Call PluginView::manualLoadDidReceiveResponse.

        (WebKit::WebFrameLoaderClient::finishedLoading):
        Call PluginView::manualLoadDidFinishLoading.

        (WebKit::WebFrameLoaderClient::redirectDataToPlugin):
        Keep track of the plug-in view.

2010-08-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        Basic WK2 visited link coloring
        https://bugs.webkit.org/show_bug.cgi?id=43377

        Add simple API that allows the WK2 app to add 1 visited link at a time.
        For now, this just pipes each individual LinkHash down to WebCore.
        
        * Shared/CoreIPCSupport/WebProcessMessageKinds.h:
        (WebProcessMessage::):

        * UIProcess/API/C/WKContext.cpp:
        (WKContextAddVisitedLink):
        * UIProcess/API/C/WKContext.h:

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::addVisitedLink):
        * UIProcess/WebContext.h:

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::addVisitedLinkHash):
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/WebProcess.h:

2010-08-02  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs layoutTestController.setCanOpenWindows
        https://bugs.webkit.org/show_bug.cgi?id=42321

        WebKitTestRunner needs layoutTestController.setCloseRemainingWindowsWhenComplete
        https://bugs.webkit.org/show_bug.cgi?id=42779

        Implemented window.close, added a function that does a similar operation on behalf
        of injected bundle code named WKBundlePageClose, and fixed the reference counting of
        the result of the createNewPage client function.

        * UIProcess/API/cpp/WKRetainPtr.h: Added clear. Tweaked formatting. Renamed
        releaseRef to leakRef.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _updateVisibility]): Handle the case where drawing area is 0. This
        came up in WebKitTestRunner and other functions handle drawing area of 0.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveSyncMessage): Update now that createNewPage
        returns a PassRefPtr.
        (WebKit::WebPageProxy::createNewPage): Changed to return a PassRefPtr.
        * UIProcess/WebPageProxy.h: Ditto.

        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::createNewPage): Changed to return a PassRefPtr and adopt
        the WKPageRef passed from the client. This follows the "create rule".
        * UIProcess/WebUIClient.h: Ditto.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageClose): Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h: Added WKBundlePageClose
        and re-sorted the other functions in this file.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::closeWindowSoon): Implemented this.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Called setJavaScriptCanOpenWindowsAutomatically(true).
        I suppose we will need to revisit this later when we implement pop-up blocking.
        (WebKit::WebPage::tryClose): Factored out the part of this that sends a message
        to the other process.
        (WebKit::WebPage::sendClose): This is where the part that sends a message went.
        * WebProcess/WebPage/WebPage.h: Added sendClose, used by both closeWindowSoon
        and WKBundlePageClose.

2010-08-02  John Sullivan  <sullivan@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=43369
        WebBackForwardList::forwardListAsImmutableArrayWithLimit can return partly-uninitialized array
        
        Reviewed by Ada Chan.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::forwardListAsImmutableArrayWithLimit):
        Use a simpler and correct expression to determine "last".

2010-08-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Protect the plug-in from being destroyed while in plug-in code
        https://bugs.webkit.org/show_bug.cgi?id=43370

        Add a PluginProtector to NPRuntimeObjectMap and use it in JSNPObject.
        
        * WebProcess/Plugins/JSNPObject.cpp:
        (WebKit::JSNPObject::callMethod):
        (WebKit::JSNPObject::callObject):
        (WebKit::JSNPObject::callConstructor):
        (WebKit::JSNPObject::put):
        (WebKit::JSNPObject::getOwnPropertyNames):
        (WebKit::JSNPObject::propertyGetter):
        Add PluginProtector declarations.

        * WebProcess/Plugins/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::PluginProtector::PluginProtector):
        Ref the plug-in view (unless it's being destroyed).

        (WebKit::NPRuntimeObjectMap::PluginProtector::~PluginProtector):
        * WebProcess/Plugins/NPRuntimeObjectMap.h:

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::PluginView):
        Initialize m_isBeingDestroyed.

        (WebKit::PluginView::~PluginView):
        Set m_isBeingDestroyed to true.

        (WebKit::PluginView::scriptObject):
        Don't crash if the plug-in failed to initialize.

        (WebKit::PluginView::evaluate):
        Remove comment.

        * WebProcess/Plugins/PluginView.h:
        (WebKit::PluginView::isBeingDestroyed):

2010-08-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Cache JSNPObjects and fix bugs in the object map
        https://bugs.webkit.org/show_bug.cgi?id=43368

        * WebProcess/Plugins/JSNPObject.cpp:
        (WebKit::JSNPObject::JSNPObject):
        Assert that we're not trying to wrap an NPJSObject.

        (WebKit::JSNPObject::~JSNPObject):
        Tell the object map that we're gone.

        (WebKit::JSNPObject::invalidate):
        Release the NPObject and null out the pointer.

        * WebProcess/Plugins/NPJSObject.cpp:
        (WebKit::NPJSObject::create):
        Assert that we're not trying to wrap a JSNPObject.

        * WebProcess/Plugins/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::getOrCreateNPObject):
        If we're passed a JSNPObject, just extract its NPObject.

        (WebKit::NPRuntimeObjectMap::getOrCreateJSObject):
        If we're passed an NPJSObject, just extract its JSObject. Otherwise, check if we already have
        a JSObject for this NPObject and return it.

        (WebKit::NPRuntimeObjectMap::jsNPObjectDestroyed):
        Remove the object from the map.

        (WebKit::NPRuntimeObjectMap::convertNPVariantToJSValue):
        getOrCreateJSObject now checks for wrapped objects.

        (WebKit::NPRuntimeObjectMap::convertJSValueToNPVariant):
        getOrCreateNPObject now checks for wrapped objects.

        (WebKit::NPRuntimeObjectMap::invalidate):
        Invalidate JSNPObjects as well.

2010-08-02  Jeremy Orlow  <jorlow@chromium.org>

        Speculative revert of 64425 due to Chromium instability
        https://bugs.webkit.org/show_bug.cgi?id=43347

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebPopupMenu.cpp: Removed.
        * WebProcess/WebCoreSupport/WebPopupMenu.h: Removed.
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp: Removed.
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.h: Removed.
        * win/WebKit2.vcproj:

2010-08-02  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        [Qt] Generate forwarding headers for WebKit2

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

        * DerivedSources.pro: Added.

2010-08-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement NPN_SetException
        https://bugs.webkit.org/show_bug.cgi?id=43320

        * WebProcess/Plugins/JSNPObject.cpp:
        (WebKit::JSNPObject::callConstructor):
        (WebKit::JSNPObject::put):
        (WebKit::JSNPObject::getOwnPropertyNames):
        (WebKit::JSNPObject::propertyGetter):
        Call NPRuntimeObjectMap::moveGlobalExceptionToExecState.

        * WebProcess/Plugins/NPRuntimeObjectMap.cpp:
        (WebKit::globalExceptionString):
        Add static global.

        (WebKit::NPRuntimeObjectMap::setGlobalException):
        Set the global exception string.

        (WebKit::NPRuntimeObjectMap::moveGlobalExceptionToExecState):
        Create an error from the exception string.

        * WebProcess/Plugins/NPRuntimeObjectMap.h:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_SetException):
        Call NetscapePlugin::setException.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::setException):
        Call NPRuntimeObjectMap::setGlobalException.

2010-08-01  Sam Weinig  <sam@webkit.org>

        Roll r64446 out. It broke the test runner.

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

2010-08-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Don't send user messages to the injected bundle if the process is not active
        https://bugs.webkit.org/show_bug.cgi?id=43317

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

2010-08-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add ability to reset frame names for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=43316

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageClearMainFrameName):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::clearMainFrameName):
        * WebProcess/WebPage/WebPage.h:

2010-08-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Minor NPRuntime fixes
        https://bugs.webkit.org/show_bug.cgi?id=43318

        * WebProcess/Plugins/JSNPObject.h:
        (WebKit::JSNPObject::npObject):
        * WebProcess/Plugins/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::convertJSValueToNPVariant):
        If we see an JSNPObject, extract the NPObject.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetProperty):
        Don't check for whether the property exists before getting it.

2010-08-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement NPN_RemoveProperty
        https://bugs.webkit.org/show_bug.cgi?id=43315

        * WebProcess/Plugins/NPJSObject.cpp:
        (WebKit::NPJSObject::removeProperty):
        Try to remove the property.

        (WebKit::NPJSObject::npClass):
        Add NP_RemoveProperty.

        (WebKit::NPJSObject::NP_RemoveProperty):
        Call NPJSObject::removeProperty.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_RemoveProperty):
        Call the NPClass::removeProperty function.

2010-07-31  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Crash due to calling StringImpl::createCFString() from non-main thread in plug-in code
        https://bugs.webkit.org/show_bug.cgi?id=43306
        <rdar://problem/8259687>

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::getMIMETypeForExtension):
        (WebKit::PluginInfoStore::findPlugin):
        * UIProcess/Plugins/PluginInfoStore.h:
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::safeCreateCFString):
        (WebKit::PluginInfoStore::getMIMETypeForExtension):
        Bypass MIMETypeRegistry in the UIProcess until we can safely convert Strings
        to CFStringRefs.

2010-07-31  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=43305
        Add back WKBundleFrameCopyInnerText to fix ~50 test failures
        due to SVGElements not having the innerText function.

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

2010-07-27  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Darin Fisher.

        PopupMenu refactoring in preparation to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42592

        Classes WebPopupMenu and WebSearchPopupMenu inherit from PopupMenu and
        SearchPopupMenu respectively. At this point they are just empty implementations.

        * WebProcess/WebCoreSupport/WebPopupMenu.cpp: Added.
        (WebKit::WebPopupMenu::WebPopupMenu):
        (WebKit::WebPopupMenu::~WebPopupMenu):
        (WebKit::WebPopupMenu::disconnectClient):
        (WebKit::WebPopupMenu::show):
        (WebKit::WebPopupMenu::hide):
        (WebKit::WebPopupMenu::updateFromElement):
        * WebProcess/WebCoreSupport/WebPopupMenu.h: Added.
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp: Added.
        (WebKit::WebSearchPopupMenu::WebSearchPopupMenu):
        (WebKit::WebSearchPopupMenu::popupMenu):
        (WebKit::WebSearchPopupMenu::saveRecentSearches):
        (WebKit::WebSearchPopupMenu::loadRecentSearches):
        (WebKit::WebSearchPopupMenu::enabled):
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.h: Added.

        As ChromeClient was made responsible for providing PopupMenu and SearchPopupMenu
        instances, concrete classes that inherit from ChromeClient needed to be changed to
        implement the new methods.

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

        build issues:

        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2010-07-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r64422.
        http://trac.webkit.org/changeset/64422
        https://bugs.webkit.org/show_bug.cgi?id=43304

        Build fixes are needed for Snow Leopard and Windows.
        (Requested by lca on #webkit).

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebPopupMenu.cpp: Removed.
        * WebProcess/WebCoreSupport/WebPopupMenu.h: Removed.
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp: Removed.
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.h: Removed.
        * win/WebKit2.vcproj:

2010-07-27  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Darin Fisher.

        PopupMenu refactoring in preparation to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42592

        Classes WebPopupMenu and WebSearchPopupMenu inherit from PopupMenu and
        SearchPopupMenu respectively. At this point they are just empty implementations.

        * WebProcess/WebCoreSupport/WebPopupMenu.cpp: Added.
        (WebKit::WebPopupMenu::WebPopupMenu):
        (WebKit::WebPopupMenu::~WebPopupMenu):
        (WebKit::WebPopupMenu::disconnectClient):
        (WebKit::WebPopupMenu::show):
        (WebKit::WebPopupMenu::hide):
        (WebKit::WebPopupMenu::updateFromElement):
        * WebProcess/WebCoreSupport/WebPopupMenu.h: Added.
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp: Added.
        (WebKit::WebSearchPopupMenu::WebSearchPopupMenu):
        (WebKit::WebSearchPopupMenu::popupMenu):
        (WebKit::WebSearchPopupMenu::saveRecentSearches):
        (WebKit::WebSearchPopupMenu::loadRecentSearches):
        (WebKit::WebSearchPopupMenu::enabled):
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.h: Added.

        As ChromeClient was made responsible for providing PopupMenu and SearchPopupMenu
        instances, concrete classes that inherit from ChromeClient needed to be changed to
        implement the new methods.

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

        build issues:

        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2010-07-30  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

        Eliminate BackForwardList::pushStateItem
        https://bugs.webkit.org/show_bug.cgi?id=43282

        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        * WebProcess/WebPage/WebBackForwardListProxy.h:

2010-07-30  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Limit ApplicationCache Total and Per-Origin Storage Capacity (Quotas)
        https://bugs.webkit.org/show_bug.cgi?id=40627

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

2010-07-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=43290
        Add structured message passing from the injected bundle to UIProcess

        * Platform/CoreIPC/MessageID.h:
        * Shared/CoreIPCSupport/WebContextMessageKinds.h: Added.
        * Shared/CoreIPCSupport/WebProcessProxyMessageKinds.h:
        (WebProcessProxyMessage::):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/WebContext.cpp:
        (WebKit::):
        (WebKit::PostMessageEncoder::PostMessageDecoder::PostMessageDecoder):
        (WebKit::PostMessageEncoder::PostMessageDecoder::decode):
        (WebKit::WebContext::didReceiveMessageFromInjectedBundle):
        (WebKit::WebContext::didReceiveMessage):
        * UIProcess/WebContext.h:
        * UIProcess/WebContextInjectedBundleClient.cpp:
        (WebKit::WebContextInjectedBundleClient::didReceiveMessageFromInjectedBundle):
        * UIProcess/WebContextInjectedBundleClient.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        * UIProcess/WebProcessProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundlePostMessage):
        * WebProcess/InjectedBundle/API/c/WKBundle.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::):
        (WebKit::InjectedBundle::InjectedBundle):
        (WebKit::InjectedBundle::~InjectedBundle):
        (WebKit::InjectedBundle::initializeClient):
        (WebKit::InjectedBundle::postMessage):
        (WebKit::InjectedBundle::setShouldTrackVisitedLinks):
        (WebKit::InjectedBundle::removeAllVisitedLinks):
        (WebKit::InjectedBundle::didCreatePage):
        (WebKit::InjectedBundle::willDestroyPage):
        (WebKit::InjectedBundle::didReceiveMessage):
        * WebProcess/InjectedBundle/InjectedBundle.h:

2010-07-30  Andy Estes  <aestes@apple.com>

        Reviewed by David Kilzer.

        Add support to Xcode for compiling WebKit against iOS SDKs.
        https://bugs.webkit.org/show_bug.cgi?id=42796

        * Configurations/FeatureDefines.xcconfig:

2010-07-30  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Cast the return value for the templated ImmutableArray::at().

        * Shared/ImmutableArray.h:
        (WebKit::ImmutableArray::at):

2010-07-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=43283
        Add APIObject template introspection support.

        Add a way to get the type the APIObject::Type from the APIObject subclass typenames
        for template fun. Use this to make a type checking version of ImmutableArray::at.

        * Shared/ImmutableArray.h:
        (WebKit::ImmutableArray::at):
        (WebKit::ImmutableArray::type):
        * Shared/WebString.h:
        (WebKit::WebString::type):
        * Shared/WebURL.h:
        (WebKit::WebURL::type):
        * UIProcess/API/C/WKArray.cpp:
        (WKArrayGetTypeID):
        * UIProcess/API/C/WKBackForwardList.cpp:
        (WKBackForwardListGetTypeID):
        * UIProcess/API/C/WKBackForwardListItem.cpp:
        (WKBackForwardListItemGetTypeID):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetTypeID):
        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameGetTypeID):
        * UIProcess/API/C/WKFramePolicyListener.cpp:
        (WKFramePolicyListenerGetTypeID):
        * UIProcess/API/C/WKNavigationData.cpp:
        (WKNavigationDataGetTypeID):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetTypeID):
        * UIProcess/API/C/WKPageNamespace.cpp:
        (WKPageNamespaceGetTypeID):
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesGetTypeID):
        * UIProcess/API/C/WKString.cpp:
        (WKStringGetTypeID):
        * UIProcess/API/C/WKURL.cpp:
        (WKURLGetTypeID):
        * UIProcess/WebBackForwardList.h:
        (WebKit::WebBackForwardList::type):
        * UIProcess/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::type):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::type):
        * UIProcess/WebFramePolicyListenerProxy.h:
        (WebKit::WebFramePolicyListenerProxy::type):
        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::type):
        * UIProcess/WebNavigationData.h:
        (WebKit::WebNavigationData::type):
        * UIProcess/WebPageNamespace.h:
        (WebKit::WebPageNamespace::type):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::type):
        * UIProcess/WebPreferences.h:
        (WebKit::WebPreferences::type):
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleGetTypeID):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameGetTypeID):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageGetTypeID):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (WebKit::InjectedBundle::type):
        * WebProcess/WebPage/WebFrame.h:
        (WebKit::WebFrame::type):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::type):

2010-07-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=43275
        Make WKArrayRef more usable.

        - Add Create functions.
        - Make WKArrayGetItemAtIndex return a WKTypeRef.

        * UIProcess/API/C/WKArray.cpp:
        (WKArrayCreate):
        (WKArrayCreateAdoptingValues):
        (WKArrayGetItemAtIndex):
        * UIProcess/API/C/WKArray.h:

2010-07-30  Ada Chan  <adachan@apple.com>

        Reviewed by John Sullivan.

        Fix issue with populating the back list when limit is a huge number.
        https://bugs.webkit.org/show_bug.cgi?id=43270

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::backListAsImmutableArrayWithLimit):

2010-07-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=43274
        Add first pass of structured message passing.

        - Only supports passing messages from the UIProcess -> InjectedBundle
        - Only supports passing Strings, Arrays, and WebPage references (NOTE: There
          currently isn't a way to make an array).
        - Changed ImmutableArray to operate on APIObjects instead of void*'s and 
          removed the retain/release abstraction.

        * Platform/CoreIPC/MessageID.h:
        (CoreIPC::):
        * Shared/CoreIPCSupport/InjectedBundleMessageKinds.h: Added.
        (InjectedBundleMessage::):
        (CoreIPC::):
        * Shared/CoreIPCSupport/WebProcessMessageKinds.h:
        (WebProcessMessage::):
        * Shared/ImmutableArray.cpp:
        (WebKit::ImmutableArray::ImmutableArray):
        (WebKit::ImmutableArray::~ImmutableArray):
        * Shared/ImmutableArray.h:
        (WebKit::ImmutableArray::create):
        (WebKit::ImmutableArray::adopt):
        (WebKit::ImmutableArray::at):
        * UIProcess/API/C/WKBase.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextPostMessageToInjectedBundle):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/WKType.cpp:
        (WKGetTypeID):
        * UIProcess/API/C/WebKit2.h:
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::backListAsImmutableArrayWithLimit):
        (WebKit::WebBackForwardList::forwardListAsImmutableArrayWithLimit):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::postMessageToInjectedBundle):
        (WebKit::WebContext::didReceiveMessageFromInjectedBundle):
        * UIProcess/WebContext.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundle.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::didReceiveMessage):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::childFrames):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/WebProcess.h:
        * win/WebKit2.vcproj:

2010-07-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement NPN_Evaluate
        https://bugs.webkit.org/show_bug.cgi?id=43268

        * WebProcess/Plugins/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::evaluate):
        Evaluate the passed in string.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_Evaluate):
        Call NetscapePlugin::evaluate.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::evaluate):
        Call PluginController::evaluate.

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

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::evaluate):
        Update the popup window state and call NPRuntimeObjectMap::evaluate.

2010-07-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement NPN_InvokeDefault
        https://bugs.webkit.org/show_bug.cgi?id=43266

        * WebProcess/Plugins/JSNPObject.cpp:
        (WebKit::JSNPObject::JSNPObject):
        Remove ExecState parameter.

        (WebKit::JSNPObject::callObject):
        Call the NPClass::invokeDefault function.

        (WebKit::callNPJSObject):
        Call JSNPObject::callObject.

        (WebKit::JSNPObject::getCallData):
        Check if the NPClass has an invokeDefault function.

        * WebProcess/Plugins/JSNPObject.h:
        * WebProcess/Plugins/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::getOrCreateJSObject):
        Remove ExecState parameter.

        (WebKit::NPRuntimeObjectMap::convertNPVariantToJSValue):
        Remove ExecState parameter.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::scriptObject):
        Remove ExecState parameter.

2010-07-30  Adam Roben  <aroben@apple.com>

        Roll our r64361 and r64363

        We can't make these changes until QuartzCore.lib is included in
        WebKitSupportLibrary.

2010-07-30  Adam Roben  <aroben@apple.com>

        Windows build fix

        * win/WebKit2Apple.vsprops: Always link against QuartzCore, since
        WebKitSystemInterface requires it.

2010-07-30  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Unreviewed build fix.

        [Qt] Build fix for recent API changes in WebKit2.

        * UIProcess/API/cpp/qt/WKStringQt.cpp:
        (WKStringCopyQString):
        * UIProcess/API/cpp/qt/WKURLQt.cpp:
        (WKURLCopyQUrl):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage):

2010-07-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Setting empty document schemes on the WKContext shouldn't start the WebProcess
        <rdar://problem/8253734> and https://bugs.webkit.org/show_bug.cgi?id=43222
        
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureWebProcess):
        (WebKit::WebContext::registerURLSchemeAsEmptyDocument):
        * UIProcess/WebContext.h:

2010-07-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Make all public facing client setters take const pointers
        https://bugs.webkit.org/show_bug.cgi?id=43219

        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetInjectedBundleClient):
        (WKContextSetHistoryClient):
        * UIProcess/API/C/WKContext.h:

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        (WKPageSetPagePolicyClient):
        (WKPageSetPageUIClient):
        * UIProcess/API/C/WKPage.h:

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::initializeInjectedBundleClient):
        (WebKit::WebContext::initializeHistoryClient):
        * UIProcess/WebContext.h:

        * UIProcess/WebContextInjectedBundleClient.cpp:
        (WebKit::WebContextInjectedBundleClient::initialize):
        * UIProcess/WebContextInjectedBundleClient.h:

        * UIProcess/WebHistoryClient.cpp:
        (WebKit::WebHistoryClient::initialize):
        * UIProcess/WebHistoryClient.h:

        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::initialize):
        * UIProcess/WebLoaderClient.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeLoaderClient):
        (WebKit::WebPageProxy::initializePolicyClient):
        (WebKit::WebPageProxy::initializeUIClient):
        * UIProcess/WebPageProxy.h:

        * UIProcess/WebPolicyClient.cpp:
        (WebKit::WebPolicyClient::initialize):
        * UIProcess/WebPolicyClient.h:

        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::initialize):
        * UIProcess/WebUIClient.h:

2010-07-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement NPN_SetProperty
        https://bugs.webkit.org/show_bug.cgi?id=43217

        * WebProcess/Plugins/NPJSObject.cpp:
        (WebKit::NPJSObject::setProperty):
        Convert the NPVariant to a JSValue and set it on the underlying JSObject.

        (WebKit::NPJSObject::NP_SetProperty):
        Call NPJSObject::setProperty.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetProperty):
        Remove unused parameter name.

        (WebKit::NPN_SetProperty):
        Call the NPClass::setProperty function.

2010-07-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement NPN_Enumerate
        https://bugs.webkit.org/show_bug.cgi?id=43215

        * WebProcess/Plugins/JSNPObject.cpp:
        (WebKit::npIdentifierFromIdentifier):
        Get the UTF-8 string representation instead of the lossy ASCII representation.
        
        (WebKit::JSNPObject::getOwnPropertyNames):
        Implement by calling the NPClass::enumerate function.

        * WebProcess/Plugins/JSNPObject.h:
        * WebProcess/Plugins/NPJSObject.cpp:
        (WebKit::NPJSObject::enumerate):
        Implement by calling JSObject::getPropertyNames.

        (WebKit::NPJSObject::npClass):
        (WebKit::NPJSObject::NP_Enumerate):
        Call NPJSObject::enumerate.

        * WebProcess/Plugins/NPJSObject.h:
        * WebProcess/Plugins/NPRuntimeUtilities.cpp:
        (WebKit::createNPObject):
        Fix a comment.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_Enumerate):
        Call the NPClass::enumerate function.

2010-07-29  John Sullivan  <sullivan@apple.com>

        <https://bugs.webkit.org/show_bug.cgi?id=43203>
        WebBackForwardList::back/ForwardListWithLimit() crashes if passed a limit larger than max int

        Reviewed by Sam Weinig.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::backListAsImmutableArrayWithLimit):
        Fixed casting so that a large unsigned won't become a negative int.
        (WebKit::WebBackForwardList::forwardListAsImmutableArrayWithLimit):
        Ditto.

2010-07-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement NPN_Status
        https://bugs.webkit.org/show_bug.cgi?id=43205

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_Status):
        Convert the message char* to a String and call NetscapePlugin::setStatusbarText.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::setStatusbarText):
        Call PluginController::setStatusbarText.
    
        * WebProcess/Plugins/PluginController.h:
        Add setStatusbarText.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::setStatusbarText):
        Call the Chrome member function.

2010-07-29  Adam Roben  <aroben@apple.com>

        Always say "plugins directory" when referring to a directory
        containing one or more plugins

        Fixes <http://webkit.org/b/43197> WebKit2 often says "plugin
        directory" when it means "plugins directory"

        Reviewed by John Sullivan.

        * UIProcess/API/C/WKContext.cpp:
        (_WKContextSetAdditionalPluginsDirectory):
        * UIProcess/API/C/WKContextPrivate.h:
        Renamed from _WKContextSetAdditionalPluginDirectory.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::setAdditionalPluginsDirectories): Renamed
        from setAdditionalPluginDirectories.
        (WebKit::PluginInfoStore::loadPluginsIfNecessary): Updated for rename.

        * UIProcess/Plugins/PluginInfoStore.h: Renamed
        m_additionalPluginDirectories to m_additionalPluginsDirectories.

        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::pluginsDirectories):
        * UIProcess/Plugins/qt/PluginInfoStoreQt.cpp:
        (WebKit::PluginInfoStore::pluginsDirectories):
        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        (WebKit::PluginInfoStore::pluginsDirectories):
        Renamed from pluginDirectories.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::setAdditionalPluginsDirectory):
        * UIProcess/WebContext.h:
        Renamed from setAdditionalPluginDirectory.

2010-07-29  Adam Roben  <aroben@apple.com>

        Always say "directory" when referring to a plugin directory

        Fixes <http://webkit.org/b/43195> WebKit2 often says "plugin path"
        when it means "plugin directory"

        Reviewed by John Sullivan.

        * UIProcess/API/C/WKContext.cpp:
        (_WKContextSetAdditionalPluginDirectory):
        * UIProcess/API/C/WKContextPrivate.h:
        Renamed from _WKContextSetAdditionalPluginPath.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::setAdditionalPluginDirectories): Renamed
        from setAdditionalPluginPaths.
        (WebKit::PluginInfoStore::loadPluginsIfNecessary): Updated for rename.

        * UIProcess/Plugins/PluginInfoStore.h: Renamed m_additionalPluginPaths
        to m_additionalPluginDirectories.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::setAdditionalPluginDirectory):
        * UIProcess/WebContext.h:
        Renamed from setAdditionalPluginPath, and updated for PluginInfoStore
        rename.

2010-07-29  Adam Roben  <aroben@apple.com>

        Remove PluginInfoStore::mimeTypeFromExtension

        WebCore::MIMETypeRegistry already provides a cross-platform interface
        for this.

        Fixes <http://webkit.org/b/43188>
        PluginInfoStore::mimeTypeFromExtension is unnecessary

        Reviewed by Nikolas Zimmermann.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::findPlugin): Changed to use
        MIMETypeRegistry.

        * UIProcess/Plugins/PluginInfoStore.h:
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        * UIProcess/Plugins/qt/PluginInfoStoreQt.cpp:
        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        Removed mimeTypeFromExtension.

2010-07-28  Sam Weinig  <sam@webkit.org>

        Another Windows build fix.

        * UIProcess/API/C/WKBase.h:
        * win/WebKit2Generated.make:

2010-07-28  Sam Weinig  <sam@webkit.org>

        Fix builds.

        * UIProcess/API/C/WKAPICast.h:
        (WebKit::ProxyingRefPtr::operator APIType):
        (toURLRef):
        (toCopiedRef):
        (toCopiedURLRef):
        * UIProcess/win/WebView.h:
        (WebKit::WebView::type):

2010-07-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=43163
        Add a CF-style base type (WKTypeRef) as a base for polymorphic functions.

        - Add first polymorphic function, WKGetTypeID.
        - Add functions to each WK type to get their respective TypeIDs.
        - Adds WebURL to complement WebString.

        * Shared/APIObject.h:
        (WebKit::APIObject::):
        (WebKit::APIObject::~APIObject):
        * Shared/ImmutableArray.h:
        (WebKit::ImmutableArray::type):
        * Shared/WebString.h:
        (WebKit::WebString::type):
        * Shared/WebURL.h: Added.
        (WebKit::WebURL::create):
        (WebKit::WebURL::type):
        (WebKit::WebURL::isNull):
        (WebKit::WebURL::isEmpty):
        (WebKit::WebURL::string):
        (WebKit::WebURL::WebURL):
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::ProxyingRefPtr::ProxyingRefPtr):
        (WebKit::ProxyingRefPtr::operator APIType):
        (toRef):
        (toURLRef):
        (toCopiedURLRef):
        * UIProcess/API/C/WKArray.cpp:
        (WKArrayGetTypeID):
        * UIProcess/API/C/WKArray.h:
        * UIProcess/API/C/WKBackForwardList.cpp:
        (WKBackForwardListGetTypeID):
        * UIProcess/API/C/WKBackForwardList.h:
        * UIProcess/API/C/WKBackForwardListItem.cpp:
        (WKBackForwardListItemGetTypeID):
        * UIProcess/API/C/WKBackForwardListItem.h:
        * UIProcess/API/C/WKBase.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetTypeID):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameGetTypeID):
        * UIProcess/API/C/WKFrame.h:
        * UIProcess/API/C/WKFramePolicyListener.cpp:
        (WKFramePolicyListenerGetTypeID):
        * UIProcess/API/C/WKFramePolicyListener.h:
        * UIProcess/API/C/WKNavigationData.cpp:
        (WKNavigationDataGetTypeID):
        * UIProcess/API/C/WKNavigationData.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetTypeID):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/C/WKPageNamespace.cpp:
        (WKPageNamespaceGetTypeID):
        * UIProcess/API/C/WKPageNamespace.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesGetTypeID):
        * UIProcess/API/C/WKPreferences.h:
        * UIProcess/API/C/WKString.cpp:
        (WKStringGetTypeID):
        * UIProcess/API/C/WKString.h:
        * UIProcess/API/C/WKType.cpp: Added.
        (WKGetTypeID):
        * UIProcess/API/C/WKType.h: Added.
        * UIProcess/API/C/WKURL.cpp:
        (WKURLGetTypeID):
        * UIProcess/API/C/WKURL.h:
        * UIProcess/API/win/WKView.cpp:
        (WKViewGetTypeID):
        * UIProcess/API/win/WKView.h:
        * UIProcess/WebBackForwardList.h:
        (WebKit::WebBackForwardList::type):
        * UIProcess/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::type):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::type):
        * UIProcess/WebFramePolicyListenerProxy.h:
        (WebKit::WebFramePolicyListenerProxy::type):
        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::type):
        * UIProcess/WebNavigationData.h:
        (WebKit::WebNavigationData::type):
        * UIProcess/WebPageNamespace.h:
        (WebKit::WebPageNamespace::type):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::type):
        * UIProcess/WebPreferences.h:
        (WebKit::WebPreferences::type):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleGetTypeID):
        * WebProcess/InjectedBundle/API/c/WKBundle.h:
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameGetTypeID):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageGetTypeID):
        (WKBundlePageSetEditorClient):
        (WKBundlePageSetLoaderClient):
        (WKBundlePageSetUIClient):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/WebPage/WebFrame.h:
        (WebKit::WebFrame::type):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::type):
        * win/WebKit2.vcproj:

2010-07-28  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs to support layoutTestController.execCommand
        <https://bugs.webkit.org/show_bug.cgi?id=42538>

        WebKitTestRunner needs layoutTestController.isCommandEnabled
        <https://bugs.webkit.org/show_bug.cgi?id=42671>

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageExecuteEditingCommand): Added.
        (WKBundlePageIsEditingCommandEnabled): Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h: Ditto.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::executeEditingCommand): Added.
        (WebKit::WebPage::isEditingCommandEnabled): Added.
        * WebProcess/WebPage/WebPage.h: Ditto.

2010-07-28  Anders Carlsson  <andersca@apple.com>

        Fix 64-bit build.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue):

2010-07-28  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        First pass at visited link support for WK2
        https://bugs.webkit.org/show_bug.cgi?id=43157

        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h:
        (WebPageProxyMessage::):
        * Shared/CoreIPCSupport/WebProcessMessageKinds.h:
        (WebProcessMessage::):
        * Shared/CoreIPCSupport/WebProcessProxyMessageKinds.h:
        (WebProcessProxyMessage::):

        Move HistoryClient support from the page...:
        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/C/WKPage.h:
        
        ...to the Context
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetHistoryClient):
        * UIProcess/API/C/WKContext.h:

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::initializeHistoryClient):
        (WebKit::WebContext::ensureWebProcess): When a new WebProcess is created, set its "should track visited links" mode.
        (WebKit::WebContext::didNavigateWithNavigationData):
        (WebKit::WebContext::didPerformClientRedirect):
        (WebKit::WebContext::didPerformServerRedirect):
        (WebKit::WebContext::didUpdateHistoryTitle):
        (WebKit::WebContext::populateVisitedLinks):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::hasValidProcess):

        * UIProcess/WebHistoryClient.cpp:
        (WebKit::WebHistoryClient::initialize):
        (WebKit::WebHistoryClient::didNavigateWithNavigationData):
        (WebKit::WebHistoryClient::didPerformClientRedirect):
        (WebKit::WebHistoryClient::didPerformServerRedirect):
        (WebKit::WebHistoryClient::didUpdateHistoryTitle):
        (WebKit::WebHistoryClient::populateVisitedLinks):
        * UIProcess/WebHistoryClient.h:
        (WebKit::WebHistoryClient::shouldTrackVisitedLinks):

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        * UIProcess/WebPageProxy.h:

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):

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

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::updateGlobalHistory):
        (WebKit::WebFrameLoaderClient::updateGlobalHistoryRedirectLinks):
        (WebKit::WebFrameLoaderClient::setTitle):

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

2010-07-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add JSNPObject::getConstructData
        https://bugs.webkit.org/show_bug.cgi?id=43165

        * WebProcess/Plugins/JSNPObject.cpp:
        (WebKit::JSNPObject::callMethod):
        Add a null check for m_npObject.
        
        (WebKit::JSNPObject::callConstructor):
        Call NPClass::construct.

        (WebKit::JSNPObject::getConstructData):
        Set up the construct data.

        (WebKit::JSNPObject::propertyGetter):
        convertNPVariantToJSValue now takes a JSGlobalObject as well.
        
        * WebProcess/Plugins/NPJSObject.cpp:
        (WebKit::NPJSObject::invoke):
        (WebKit::NPJSObject::invokeDefault):
        (WebKit::NPJSObject::construct):
        convertNPVariantToJSValue now takes a JSGlobalObject as well.
        
        * WebProcess/Plugins/NPJSObject.h:
        Make isNPJSObject and toNPJSObject public.

        * WebProcess/Plugins/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::convertNPVariantToJSValue):
        Convert NPObjects correctly.
        
        (WebKit::NPRuntimeObjectMap::globalObject):
        Get the globalObject from the frame.

        (WebKit::NPRuntimeObjectMap::globalExec):
        Call globalObject.

        * WebProcess/Plugins/NPRuntimeObjectMap.h:

2010-07-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement NPN_InvokeDefault and NPN_Construct
        https://bugs.webkit.org/show_bug.cgi?id=43160

        * WebProcess/Plugins/NPJSObject.cpp:
        (WebKit::NPJSObject::invoke):
        Just call invoke directly.

        (WebKit::NPJSObject::invokeDefault):
        Call invoke.

        (WebKit::NPJSObject::construct):
        Implement this.

        (WebKit::NPJSObject::invoke):
        Add new invoke overload that takes the function as a JSValue.

        (WebKit::NPJSObject::npClass):
        Add NP_Construct.

        (WebKit::NPJSObject::NP_InvokeDefault):
        Call NPJSObject::invokeDefault.

        (WebKit::NPJSObject::NP_Construct):
        Call NPJSObject::construct.

        * WebProcess/Plugins/NPJSObject.h:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue):
        Handle the Core Animation drawing model and the Carbon event model.

        (WebKit::NPN_InvokeDefault):
        Call the NPClass::invokeDefault function.

        (WebKit::NPN_Construct):
        Call the NPClass::construct function.

2010-07-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement NPN_Invoke
        https://bugs.webkit.org/show_bug.cgi?id=43158

        * WebProcess/Plugins/NPJSObject.cpp:
        (WebKit::NPJSObject::hasMethod):
        Use the free getCallData function.

        (WebKit::NPJSObject::invoke):
        Get the JavaScript function and call it.

        (WebKit::NPJSObject::NP_Invoke):
        Call NPJSObject::invoke.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_Invoke):
        Call the NPClass::invoke function.

2010-07-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement NPN_HasMethod
        https://bugs.webkit.org/show_bug.cgi?id=43155

        * WebProcess/Plugins/NPJSObject.cpp:
        (WebKit::NPJSObject::hasMethod):
        Check if the JSObject has a property with the given name. If it does, check that the value is a function.
    
        (WebKit::NPJSObject::hasProperty):
        Add a JSLock.

        (WebKit::NPJSObject::npClass):
        Add some stubbed out functions.

        (WebKit::NPJSObject::NP_HasMethod):
        Call NPJSObject::hasMethod.

        (WebKit::NPJSObject::NP_Invoke):
        (WebKit::NPJSObject::NP_InvokeDefault):
        (WebKit::NPJSObject::NP_SetProperty):
        Stub out functions.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_HasMethod):
        Call the NPClass::hasMethod function.

2010-07-28  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Sam Weinig.

        Make sure new pages are always added to the same PageGroup (for now).

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

2010-07-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=43097
        Make all objects in the WebKit2 API inherit from a single base class

        - Adds an APIObject base class for all objects which one can get through
          the C API to inherit from.
        - Adds a WebString class which wraps WebCore::String for now. I am not too fond of
          this solution, so we should continue to iterate on it.
        - This is a first step toward make a CF-style base type (eg. CFTypeRef) for the C-API.

        * Shared/APIObject.h: Added.
        (WebKit::APIObject::APIObject):
        Base class for API objects.

        * Shared/ImmutableArray.h:
        Make inherit from APIObject.

        * Shared/WebString.h: Added.
        (WebKit::WebString::create):
        (WebKit::WebString::isNull):
        (WebKit::WebString::isEmpty):
        (WebKit::WebString::string):
        (WebKit::WebString::WebString):
        Wraps a WebCore::String so that it can be passed out to the API
        and still inherit from APIObject.

        * UIProcess/API/C/WKAPICast.h:
        (WebKit::WebStringAdaptor::WebStringAdaptor):
        (WebKit::WebStringAdaptor::operator WKStringRef):
        (WebKit::WebStringAdaptor::operator WKURLRef):
        Update conversion methods to deal in terms of WebStrings. Added WebStringAdaptor
        to ease passing strings to client functions.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextCreateWithInjectedBundlePath):
        (WKContextPostMessageToInjectedBundle):
        (_WKContextSetAdditionalPluginPath):
        (_WKContextRegisterURLSchemeAsEmptyDocument): 
        Get the WebCore::String from the WebString.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageLoadURL):
        Ditto.

        * UIProcess/API/C/WKString.cpp:
        (WKStringIsEmpty):
        Implement in terms of WebString.

        * UIProcess/API/C/WKURL.cpp:
        * UIProcess/API/C/cf/WKStringCF.cpp:
        (WKStringCreateWithCFString):
        (WKStringCopyCFString):
        Ditto.
    
        * UIProcess/API/C/cf/WKURLCF.cpp:
        (WKURLCreateWithCFURL):
        (WKURLCopyCFURL):
        Ditto.

        * UIProcess/WebBackForwardList.h:
        Make inherit from APIObject.

        * UIProcess/WebBackForwardListItem.h:
        Ditto.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::didReceiveMessageFromInjectedBundle):
        (WebKit::WebContext::postMessageToInjectedBundle):
        (WebKit::WebContext::registerURLSchemeAsEmptyDocument):
        Use String instead of StringImpl to be consistent.

        * UIProcess/WebContext.h:
        Make inherit from APIObject.

        * UIProcess/WebFramePolicyListenerProxy.h:
        Ditto.

        * UIProcess/WebFrameProxy.h:
        Ditto.

        * UIProcess/WebNavigationData.h:
        Ditto.

        * UIProcess/WebPageNamespace.h:
        Ditto.

        * UIProcess/WebPageProxy.h:
        Ditto.

        * UIProcess/WebPreferences.h:
        Ditto.

        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::runJavaScriptPrompt):
        Implement in terms of WebString.

        * UIProcess/win/WebView.h:
        Make inherit from APIObject.

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

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundlePostMessage):
        Get the WebCore::String from the WebString.

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFramePauseAnimationOnElementWithId):
        Ditto.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::postMessage):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        Use String instead of StringImpl to be consistent.

        * WebProcess/WebPage/WebFrame.h:
        Make inherit from APIObject.

        * WebProcess/WebPage/WebPage.h:
        Make inherit from APIObject.

        * win/WebKit2.vcproj:
        Add new files.

2010-07-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement JSNPObject::put
        https://bugs.webkit.org/show_bug.cgi?id=43149

        * WebProcess/Plugins/JSNPObject.cpp:
        (WebKit::JSNPObject::getOwnPropertySlot):
        Fix a typo.

        (WebKit::JSNPObject::getOwnPropertyDescriptor):
        Implement this in the same way as it's implemented in RuntimeObject.

        (WebKit::JSNPObject::put):
        Implement this, call NPClass::setProperty.

        * WebProcess/Plugins/JSNPObject.h:

2010-07-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add support for calling NPObject methods
        https://bugs.webkit.org/show_bug.cgi?id=43145

        * WebKit2.xcodeproj/project.pbxproj:
        Add JSNPMethod.cpp and JSNPMethod.h
    
        * WebProcess/Plugins/JSNPMethod.cpp: Added.
        * WebProcess/Plugins/JSNPMethod.h: Added.
        * WebProcess/Plugins/JSNPObject.cpp:
        (WebKit::):
        Add a ClassInfo static variable for JSNPObject.

        (WebKit::JSNPObject::callMethod):
        Convert the passed in arguments, call the method and convert the result back.

        (WebKit::JSNPObject::getOwnPropertySlot):
        Check if the NPObject has a method.

        (WebKit::JSNPObject::methodGetter):
        Return a new JSNPMethod.

        * WebProcess/Plugins/JSNPObject.h:
        (WebKit::JSNPObject::classInfo):
        Return the s_info.

        * WebProcess/Plugins/NPJSObject.cpp:
        (WebKit::NPJSObject::getProperty):
        Get the property from the JSObject.

        * WebProcess/Plugins/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::convertJSValueToNPVariant):
        Convert the given JSValue to an NPVariant.

        * win/WebKit2.vcproj:
        Add JSNPMethod.cpp and JSNPMethod.h

2010-07-28  Adam Roben  <aroben@apple.com>

        Teach CoreIPC how to handle with a pipe closing during a write

        Fixes <http://webkit.org/b/43131> Assertion failure in
        Connection::sendOutgoingMessage if the other process exits at just the
        wrong time

        Reviewed by Darin Adler.

        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::sendOutgoingMessage): If ::WriteFile fails with
        ERROR_NO_DATA, the pipe (and thus the connection) has closed.

2010-07-28  Adam Roben  <aroben@apple.com>

        Teach CoreIPC the right way to send large messages on Windows

        r63776 added support for ::WriteFile failing with ERROR_IO_PENDING,
        but it had a major flaw: we didn't ensure that the data being sent
        (which is owned by the ArgumentEncoder) stayed around until the write
        finished. We'd destroy the data immediately, leading to ::WriteFile
        accessing that freed memory later. This seemed to always manifest
        itself as a crash in ::WaitForMultipleObjects.

        The correct solution (as hinted above) is to make sure that the data
        being written is not destroyed until the write completes. When
        ::WriteFile fails with ERROR_IO_PENDING, we store the data being sent
        in Connection::m_pendingWriteArguments, and don't send any more
        messages until that write completes. We use an event in the OVERLAPPED
        structure passed to ::WriteFile to detect when the write has completed
        (similar to what we do for reads).

        Fixes <http://webkit.org/b/42785> <rdar://problem/8218522> Crash in
        WebKit2WebProcess in WaitForMultipleObjects beneath
        WorkQueue::workQueueThreadBody when running tests that produce a lot
        of output

        Reviewed by Anders Carlsson.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::canSendOutgoingMessages): Added. This calls out
        to a platform-specific function to allow each platform to have its own
        policy for when messages can and can't be sent.
        (CoreIPC::Connection::sendOutgoingMessages): Use the new
        canSendOutgoingMessages to determine whether we can send any messages
        right now. We now remove one message at a time from m_outgoingMessages
        and send it. We stop sending messages when sendOutgoingMessage returns
        false.

        * Platform/CoreIPC/Connection.h: Added m_pendingWriteArguments and
        m_writeState on Windows.
        (CoreIPC::Connection::Message::Message): Added this default
        constructor.

        * Platform/CoreIPC/MessageID.h:
        (CoreIPC::MessageID::MessageID): Made the default constructor public
        for Message's benefit.

        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::platformCanSendOutgoingMessages): Added. Always
        returns true.
        (CoreIPC::Connection::sendOutgoingMessage): Changed to return a
        boolean indicating whether more messages can be sent at this time.

        * Platform/CoreIPC/qt/ConnectionQt.cpp:
        (CoreIPC::Connection::platformCanSendOutgoingMessages): Added. Returns
        true if we have a socket.
        (CoreIPC::Connection::sendOutgoingMessage): Changed a null-check of
        m_socket to an assertion since it should be checked for null in
        platformCanSendOutgoingMessages. Changed to return a boolean
        indicating whether more messages can be sent at this time.

        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::platformInitialize): Added initialization of
        m_writeState.
        (CoreIPC::Connection::platformInvalidate): Close m_writeState's event
        handle.
        (CoreIPC::Connection::writeEventHandler): Added. Checks if the pending
        write has completed, cleans up our pending write state, and sends any
        remaining messages.
        (CoreIPC::Connection::open): Register our write event with the
        WorkQueue so that writeEventHandler will be called when the event is
        signaled.
        (CoreIPC::Connection::platformCanSendOutgoingMessages): Added. We can
        only send messages if there isn't a write pending.
        (CoreIPC::Connection::sendOutgoingMessage): Changed to return a
        boolean indicating whether more messages can be sent at this time. We
        now pass m_writeState to ::WriteFile instead of an empty OVERLAPPED
        struct so that our write event will be signaled when the write
        completes. We also no longer pass a pointer to receive how many bytes
        were written, as recommended by MSDN. If ::WriteFile fails with
        ERROR_IO_PENDING, we save the ArgumentEncoder for this message and
        return false to indicate that no more messages can be sent at this
        time.

2010-07-28  Adam Roben  <aroben@apple.com>

        Stop leaking Connection::m_readState.hEvent on Windows

        Fixes <http://webkit.org/b/43129> CoreIPC::Connection leaks its read
        event on Windows

        Reviewed by Darin Adler.

        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::platformInvalidate): Close the event handle.

2010-07-26  Steve Block  <steveblock@google.com>

       Reviewed by Jeremy Orlow.

       Page clients should be passed to Page constructor via structure of pointers
       https://bugs.webkit.org/show_bug.cgi?id=42834

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

2010-07-28  Andras Becsi  <abecsi@webkit.org>

        Unreviewed trivial build fix.

        [Qt] Follow the API changes after r64172.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::url):
        (QWKPage::title):

2010-07-27  Anders Carlsson  <andersca@apple.com>

        Fix Windows build.

        * WebProcess/Plugins/JSNPObject.cpp:
        (WebKit::JSNPObject::propertyGetter):
        Remove unreachable code.

2010-07-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement JSNPObject::propertyGetter
        https://bugs.webkit.org/show_bug.cgi?id=43091

        * WebProcess/Plugins/JSNPObject.cpp:
        (WebKit::JSNPObject::propertyGetter):
        Ask the NPObject for its property.

        * WebProcess/Plugins/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::jsNPObjectDestroyed):
        Add a stub.

        (WebKit::NPRuntimeObjectMap::convertNPVariantToValue):
        Implement this for everything except objects.

2010-07-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=43087
        Clean up handling of strings at the WebKit2 API layer.

        - Always use the "copy" rule for functions that return WKStringRefs or WKURLRefs.
        - Never return a null WKStringRef or WKURLRef.

        * UIProcess/API/C/WKAPICast.h:
        (toRef):
        (toURLRef):
        (toCopiedRef):
        (toCopiedURLRef):
        * UIProcess/API/C/WKBackForwardListItem.cpp:
        (WKBackForwardListItemCopyOriginalURL):
        (WKBackForwardListItemCopyURL):
        (WKBackForwardListItemCopyTitle):
        * UIProcess/API/C/WKBackForwardListItem.h:
        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameIsMainFrame):
        (WKFrameCopyProvisionalURL):
        (WKFrameCopyURL):
        (WKFrameGetPage):
        (WKFrameRetain):
        (WKFrameRelease):
        * UIProcess/API/C/WKFrame.h:
        * UIProcess/API/C/WKNavigationData.cpp:
        (WKNavigationDataCopyTitle):
        (WKNavigationDataCopyURL):
        * UIProcess/API/C/WKNavigationData.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageCopyTitle):
        * UIProcess/API/C/WKPage.h:
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameCopyURL):
        (WKBundleFrameCopyName):
        (WKBundleFrameCopyCounterValue):
        (WKBundleFrameCopyMarkerText):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
        * WebProcess/InjectedBundle/API/c/WKBundleNode.cpp:
        (WKBundleNodeCopyNodeName):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCopyRenderTreeExternalRepresentation):

2010-07-27  Adam Roben  <aroben@apple.com>

        Fix PageClient ownership in WebPageProxy

        WKView now owns the PageClient, similar to how things work on Windows
        (where the WebView is the PageClient).

        Fixes <http://webkit.org/b/40185> WebPageProxy should keep a weak
        reference to the PageClient

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:pageNamespaceRef:]): Store the PageClientImpl
        on our WKViewData object and pass it to the WebPageProxy.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setPageClient):
        * UIProcess/WebPageProxy.h:
        Removed Mac-specific code that put the PageClient in an OwnPtr. We now
        store it in a bare pointer just like on Windows.

2010-07-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add JSNPObject, a JSObject that wraps an NPObject
        https://bugs.webkit.org/show_bug.cgi?id=43079

        * WebKit2.xcodeproj/project.pbxproj:
        Add JSNPObject.cpp and JSNPObject.h
        
        * WebProcess/Plugins/JSNPObject.cpp: Added.
        (WebKit::npIdentifierFromIdentifier):
        (WebKit::JSNPObject::JSNPObject):
        (WebKit::JSNPObject::~JSNPObject):
        (WebKit::JSNPObject::getOwnPropertySlot):
        Check if the NPObject has the given property.

        (WebKit::JSNPObject::propertyGetter):
        (WebKit::JSNPObject::throwInvalidAccessError):
        * WebProcess/Plugins/JSNPObject.h: Added.
        (WebKit::JSNPObject::createStructure):
        * WebProcess/Plugins/NPJSObject.h:
        
        * win/WebKit2.vcproj:
        Add JSNPObject.cpp and JSNPObject.h

2010-07-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Expose interface for returning the plug-in script JSObject
        https://bugs.webkit.org/show_bug.cgi?id=43074

        * WebProcess/Plugins/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::getOrCreateJSObject):
        Add empty stub.

        * WebProcess/Plugins/NPRuntimeObjectMap.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::pluginScriptableNPObject):
        Ask the plug-in for it's scriptable NPObject.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Plugin.h:
        Add pluginScritableNPObject.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::PluginView):
        Call PluginViewBase constructor.

        (WebKit::PluginView::scriptObject):
        Ask the plug-in for its scriptable object and wrap it.

        * WebProcess/Plugins/PluginView.h:
        PluginView now inherits from PluginViewBase.

2010-07-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Move NPJSObject out into separate files
        https://bugs.webkit.org/show_bug.cgi?id=43068

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/NPJSObject.cpp: Added.
        (WebKit::NPJSObject::create):
        (WebKit::NPJSObject::NPJSObject):
        (WebKit::NPJSObject::~NPJSObject):
        (WebKit::NPJSObject::isNPJSObject):
        (WebKit::NPJSObject::initialize):
        (WebKit::identifierFromIdentifierRep):
        (WebKit::NPJSObject::hasProperty):
        (WebKit::NPJSObject::getProperty):
        (WebKit::NPJSObject::npClass):
        (WebKit::NPJSObject::NP_Allocate):
        (WebKit::NPJSObject::NP_Deallocate):
        (WebKit::NPJSObject::NP_HasProperty):
        (WebKit::NPJSObject::NP_GetProperty):
        * WebProcess/Plugins/NPJSObject.h: Added.
        (WebKit::NPJSObject::jsObject):
        (WebKit::NPJSObject::toNPJSObject):
        * WebProcess/Plugins/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::npJSObjectDestroyed):
        (WebKit::NPRuntimeObjectMap::globalExec):
        * WebProcess/Plugins/NPRuntimeObjectMap.h:
        * win/WebKit2.vcproj:

2010-07-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Rename NPJSObjectMap to NPRuntimeObjectMap
        https://bugs.webkit.org/show_bug.cgi?id=43066

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/NPJSObjectMap.cpp: Removed.
        * WebProcess/Plugins/NPJSObjectMap.h: Removed.
        * WebProcess/Plugins/NPRuntimeObjectMap.cpp: Added.
        (WebKit::NPJSObject::NPJSObject):
        (WebKit::NPJSObject::~NPJSObject):
        (WebKit::NPJSObject::toNPJSObject):
        (WebKit::NPJSObject::create):
        (WebKit::NPJSObject::isNPJSObject):
        (WebKit::NPJSObject::initialize):
        (WebKit::identifierFromIdentifierRep):
        (WebKit::NPJSObject::hasProperty):
        (WebKit::NPJSObject::getProperty):
        (WebKit::NPJSObject::npClass):
        (WebKit::NPJSObject::NP_Allocate):
        (WebKit::NPJSObject::NP_Deallocate):
        (WebKit::NPJSObject::NP_HasProperty):
        (WebKit::NPJSObject::NP_GetProperty):
        (WebKit::NPRuntimeObjectMap::NPRuntimeObjectMap):
        (WebKit::NPRuntimeObjectMap::getOrCreateNPObject):
        (WebKit::NPRuntimeObjectMap::invalidate):
        * WebProcess/Plugins/NPRuntimeObjectMap.h: Added.
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::PluginView):
        (WebKit::PluginView::~PluginView):
        (WebKit::PluginView::windowScriptNPObject):
        (WebKit::PluginView::pluginElementNPObject):
        * WebProcess/Plugins/PluginView.h:
        * win/WebKit2.vcproj:

2010-07-27  Adam Roben  <aroben@apple.com>

        Make preferences APIs robust against web process crashes

        Fixes <http://webkit.org/b/43049> Crash in
        WebPageNamespace::preferencesDidChange if preferences are changed
        after the web process crashes

        Reviewed by Anders Carlsson.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::preferencesDidChange): Bail out if we don't have
        a web process. The new preference values will get propogated to the
        web process if and when it launches.

2010-07-27  Adam Roben  <aroben@apple.com>

        Add a ProcessDidExit callback to the WKPageLoaderClient

        Fixes <http://webkit.org/b/43048> UI process needs a way to find out
        when the web process crashes

        Reviewed by Anders Carlsson.

        * UIProcess/API/C/WKPage.h: Added WKPageProcessDidExitCallback, and a
        processDidExit member of that type to WKPageLoaderClient.

        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::processDidExit): Added. Calls through to the
        WKPageLoaderClient.

        * UIProcess/WebLoaderClient.h: Added processDidExit.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::processDidExit): Tell the loader client the
        process exited.

2010-07-27  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] WebEventFactory::createWebMouseEvent should follow WebKit2 API changes
        https://bugs.webkit.org/show_bug.cgi?id=43042

        * Shared/qt/WebEventFactoryQt.cpp:
        (WebKit::WebEventFactory::createWebMouseEvent):
        Set deltaX, deltaY and deltaZ arguments.

2010-07-27  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] WebKit::PageClient implementation needs a dedicated class

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

        * UIProcess/API/qt/qwkpage.cpp:
        (PageClientImpl::PageClientImpl): Added.
        (PageClientImpl::pageDidEnterAcceleratedCompositing): Moved from QWKPagePrivate.
        (PageClientImpl::pageDidLeaveAcceleratedCompositing): Ditto.
        (PageClientImpl::processDidExit): Ditto.
        (PageClientImpl::processDidRevive): Ditto.
        (PageClientImpl::setCursor): Ditto.
        (PageClientImpl::takeFocus): Ditto.
        (PageClientImpl::toolTipChanged): Ditto.
        (QWKPagePrivate::QWKPagePrivate): Set a new instance of the PageClientImpl as PageClient rather than 'this'.
        * UIProcess/API/qt/qwkpage_p.h: Removed PageClient implementation methods from QWKPagePrivate.

2010-07-26  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs to support layoutTestController.counterValueForElementById
        https://bugs.webkit.org/show_bug.cgi?id=42537

        WebKitTestRunner needs layoutTestController.markerTextForListItem
        https://bugs.webkit.org/show_bug.cgi?id=42549

        * UIProcess/API/C/WKString.cpp:
        (WKStringIsEmpty): Added.
        * UIProcess/API/C/WKString.h: Added WKStringIsEmpty.

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (copiedString): Added. Helper for functions that return a
        WKStringRef that follows the copy rule.
        (WKBundleFrameCopyName): Use copiedString.
        (WKBundleFrameCopyCounterValue): Added. Calls counterValue.
        (WKBundleFrameCopyMarkerText): Added. Calls markerText.
        * WebProcess/InjectedBundle/API/c/WKBundleFramePrivate.h:
        Added WKBundleFrameCopyCounterValue and WKBundleFrameCopyMarkerText.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::computedStyleIncludingVisitedInfo):
        Renamed argument to streamline function a bit.
        (WebKit::WebFrame::counterValue): Added.
        (WebKit::WebFrame::markerText): Added.
        * WebProcess/WebPage/WebFrame.h: Added counterValue and markerText.

2010-07-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Part 2 of https://bugs.webkit.org/show_bug.cgi?id=43013
        <rdar://problem/8152434>
        Add support for scrolling using the keyboard in WebKit2

        Add support for scrolling with the space bar and ensure that we don't scroll
        if WebCore is handling the event in another way.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::keyEvent):
        (WebKit::getScrollMapping):
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent):
        * WebProcess/WebPage/WebPage.h:

2010-07-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=43013
        Part of <rdar://problem/8152434>
        Add support for scrolling using the keyboard in WebKit2

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::getScrollMapping):
        (WebKit::WebPage::keyEvent):
        Scroll the page in response to keyDown.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        Use WindowsKeyboardCodes.h instead of redefining the constants.

2010-07-26  Ada Chan  <adachan@apple.com>

        Fix Windows build.

        * win/WebKit2Generated.make:

2010-07-26  Anders Carlsson  <andersca@apple.com>

        Fix Windows build.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        (WebKit::NetscapePlugin::platformHandleMouseEnterEvent):
        (WebKit::NetscapePlugin::platformHandleMouseLeaveEvent):

2010-07-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Handle mouseenter/mouseleave + focus events
        https://bugs.webkit.org/show_bug.cgi?id=42997

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::handleMouseEnterEvent):
        Call platformHandleMouseEnterEvent.
        
        (WebKit::NetscapePlugin::handleMouseLeaveEvent):
        Call platformHandleMouseExitEvent.

        (WebKit::NetscapePlugin::setFocus):
        Call platformSetFocus.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::fillInCocoaEventFromMouseEvent):
        Factor out code that fills in an NPCocoaEvent from a WebMouseEvent.

        (WebKit::initializeMouseEvent):
        Call fillInCocoaEventFromMouseEvent.
        
        (WebKit::NetscapePlugin::platformHandleMouseEnterEvent):
        Send an NPCocoaEventMouseEntered event.
    
        (WebKit::NetscapePlugin::platformHandleMouseLeaveEvent):
        Send an NPCocoaEventMouseExited event.

        (WebKit::NetscapePlugin::platformSetFocus):
        Send an NPCocoaEventFocusChanged.

        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::handleEvent):
        Dispatch mouse enter and mouse leave events. Call focusPluginElement on mousedown.

        (WebKit::PluginView::focusPluginElement):
        Focus the plug-in's containing frame and its element.

        (WebKit::PluginView::setFocus):
        Call Plugin::setFocus.

2010-07-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Add ability for WK2 to register a scheme to always be displayed as an empty document
        https://bugs.webkit.org/show_bug.cgi?id=42995

        * Shared/CoreIPCSupport/WebProcessMessageKinds.h:
        (WebProcessMessage::):
        
        * UIProcess/API/C/WKContext.cpp:
        (_WKContextRegisterURLSchemeAsEmptyDocument):
        * UIProcess/API/C/WKContextPrivate.h:
        
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::registerURLSchemeAsEmptyDocument):
        * UIProcess/WebContext.h:
        
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::registerURLSchemeAsEmptyDocument):
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/WebProcess.h:

2010-07-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Get rid of the dummy plug-in.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/DummyPlugin.cpp: Removed.
        * WebProcess/Plugins/DummyPlugin.h: Removed.
        * win/WebKit2.vcproj:

2010-07-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Move some non-APIish functions into private headers.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundle.h:
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
        * WebProcess/InjectedBundle/API/c/WKBundleFramePrivate.h: Copied from WebProcess/InjectedBundle/API/c/WKBundleFrame.h.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h: Copied from WebProcess/InjectedBundle/API/c/WKBundle.h.
        * win/WebKit2.vcproj:

2010-07-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=42986
        Add prompt and confirm client functions to WebKit2

        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h:
        (WebPageProxyMessage::):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveSyncMessage):
        (WebKit::WebPageProxy::runJavaScriptAlert):
        (WebKit::WebPageProxy::runJavaScriptConfirm):
        (WebKit::WebPageProxy::runJavaScriptPrompt):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::runJavaScriptAlert):
        (WebKit::WebUIClient::runJavaScriptConfirm):
        (WebKit::WebUIClient::runJavaScriptPrompt):
        * UIProcess/WebUIClient.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::runJavaScriptConfirm):
        (WebKit::WebChromeClient::runJavaScriptPrompt):

2010-07-26  Adam Roben  <aroben@apple.com>

        Windows build fix

        * win/WebKit2.vcproj:
        * win/WebKit2WebProcess.vcproj:
        Removed empty attributes so the values will be picked up from the
        vsprops files. (Also removed a couple of attributes that accidentally
        duplicated values from the vsprops files.)

2010-07-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Composited layers don't scroll in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42771
        
        In WebKit2, do the compositing layer geometry flipping on the drawing area's main 
        backing layer. This both avoids us having to flip the layer contents, and also avoids issues
        with the positioning of the root platform layer, which we want top-left. Doing the flipping
        lower down would require that the root platform layer know where the scrollbar is.

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

2010-07-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Deliver mouse and wheel events to plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=42988

        * Shared/WebEvent.h:
        (WebKit::WebMouseEvent::WebMouseEvent):
        (WebKit::WebMouseEvent::deltaX):
        (WebKit::WebMouseEvent::deltaY):
        (WebKit::WebMouseEvent::deltaZ):
        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::createWebMouseEvent):
        Add deltaX, deltaY and deltaZ member variables to WebMosueEvent.

        * WebKit2.xcodeproj/project.pbxproj:
        Rename NetscapePluginMac.cpp to NetscapePluginMac.mm.
        
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NPP_HandleEvent):
        Add NPP_ wrapper.

        (WebKit::NetscapePlugin::handleMouseEvent):
        (WebKit::NetscapePlugin::handleWheelEvent):
        Call the platform variants.
    
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm: Added.
        (WebKit::modifierFlags):        
        (WebKit::buttonNumber):
        (WebKit::initializeMouseEvent):
        (WebKit::NetscapePlugin::platformHandleMouseEvent):
        Create an NPCocoaEvent and send it to the plug-in.
        
        (WebKit::NetscapePlugin::platformHandleWheelEvent):
        Ditto.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::handleEvent):
        Get the current WebEvent and send it to the plug-in if necessary.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::currentEvent):
        (WebKit::CurrentEvent::CurrentEvent):
        (WebKit::CurrentEvent::~CurrentEvent):
        (WebKit::WebPage::mouseEvent):
        (WebKit::WebPage::wheelEvent):
        (WebKit::WebPage::keyEvent):
        * WebProcess/WebPage/WebPage.h:
        Add RAII object for keeping track of the current event.

2010-07-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Clean up event handling functions
        https://bugs.webkit.org/show_bug.cgi?id=42977

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mouseEvent):
        (WebKit::WebPage::wheelEvent):
        (WebKit::WebPage::keyEvent):
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebPage/WebPage.h:

2010-07-25  Darin Adler  <darin@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKitTestRunner needs to support layoutTestController.keepWebHistory
        https://bugs.webkit.org/show_bug.cgi?id=42323

        Added WKBundleSetShouldTrackVisitedLinks, WKBundleRemoveAllVisitedLinks,
        and WKBundleFrameGetComputedStyleIncludingVisitedInfo.

        Also fixed misspellings of the word "receive".

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetShouldTrackVisitedLinks): Added.
        (WKBundleRemoveAllVisitedLinks): Added.
        * WebProcess/InjectedBundle/API/c/WKBundle.h: Added functions and
        fixed mispellings of receive.

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameGetJavaScriptContext): Moved the code from here into WebFrame,
        to be consistent with the rest of the functions in this file.
        (WKBundleFrameGetComputedStyleIncludingVisitedInfo): Added.
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h: Added
        WKBundleFrameGetComputedStyleIncludingVisitedInfo and tried to rearrange the
        file to be more logically ordered and grouped.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setShouldTrackVisitedLinks): Added.
        (WebKit::InjectedBundle::removeAllVisitedLinks): Added.
        (WebKit::InjectedBundle::didReceiveMessage): Fixed mispellings of receive.
        * WebProcess/InjectedBundle/InjectedBundle.h: Ditto.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::jsContext): Added. Contains the code that used to be in
        WKBundleFrameGetJavaScriptContext.
        (WebKit::WebFrame::computedStyleIncludingVisitedInfo): Added.
        * WebProcess/WebPage/WebFrame.h: Ditto.

        * UIProcess/API/C/WKContext.h: Fixed misspellings of receive.
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::didReceiveMessageFromInjectedBundle): Ditto.
        * UIProcess/WebContext.h: Ditto.
        * UIProcess/WebContextInjectedBundleClient.cpp:
        (WebKit::WebContextInjectedBundleClient::didReceiveMessageFromInjectedBundle): Ditto.
        * UIProcess/WebContextInjectedBundleClient.h: Ditto.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::forwardMessageToWebContext): Ditto.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::forwardMessageToInjectedBundle): Ditto.

2010-07-25  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=42193
        Support layoutTestController.dumpEditingDelegates in WebKitTestRunner

        Step 2 - add the rest of editing delegates.

        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        * WebProcess/InjectedBundle/API/c/WKBundleBase.h:
        Added enums for EditorInsertAction and EAffinity. Also added a dummy type for
        CSSStyleDeclaration - neither DumpRenderTree not WebKitTestRunner actually use that.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp:
        (WebKit::InjectedBundlePageEditorClient::shouldBeginEditing):
        (WebKit::InjectedBundlePageEditorClient::shouldEndEditing):
        (WebKit::InjectedBundlePageEditorClient::shouldInsertNode):
        (WebKit::InjectedBundlePageEditorClient::shouldInsertText):
        (WebKit::InjectedBundlePageEditorClient::shouldDeleteRange):
        (WebKit::InjectedBundlePageEditorClient::shouldChangeSelectedRange):
        (WebKit::InjectedBundlePageEditorClient::shouldApplyStyle):
        (WebKit::InjectedBundlePageEditorClient::didBeginEditing):
        (WebKit::InjectedBundlePageEditorClient::didEndEditing):
        (WebKit::InjectedBundlePageEditorClient::didChange):
        (WebKit::InjectedBundlePageEditorClient::didChangeSelection):
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.h:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::shouldDeleteRange):
        (WebKit::WebEditorClient::shouldEndEditing):
        (WebKit::WebEditorClient::shouldInsertNode):
        (WebKit::WebEditorClient::shouldInsertText):
        (WebKit::WebEditorClient::shouldChangeSelectedRange):
        (WebKit::WebEditorClient::shouldApplyStyle):
        (WebKit::WebEditorClient::didBeginEditing):
        (WebKit::WebEditorClient::respondToChangedContents):
        (WebKit::WebEditorClient::respondToChangedSelection):
        (WebKit::WebEditorClient::didEndEditing):
        Added remaining delagates that are needed for WebKitTestRunner.

2010-07-19 Balazs Kelemen <kb@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Setup the QtWebProcess

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

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        Remove the framework entry point from here to WebProcess/qt/WebProcessMainQt.cpp to match with with the mac and the win port.
        * WebKit2.pro: Added.
        * WebProcess/qt/WebProcessMainQt.cpp: Added.
        (WebKit::WebProcessMainQt): Framework entry point for Qt.
        * qt/MainQt.cpp: Added.
        (main):

2010-07-22  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Eliminate unneeded WKBundleFrameCopyInnerText function from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42847

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp: Removed WKBundleFrameCopyInnerText.
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h: Ditto.
        * WebProcess/WebPage/WebFrame.cpp: Removed innerText.
        * WebProcess/WebPage/WebFrame.h: Ditto.

2010-07-22  Alexey Proskuryakov  <ap@apple.com>

        More Windows build fixing.

        * win/WebKit2Generated.make: Copy the new public headers to $(WEBKITOUTPUTDIR)\include\WebKit2.

2010-07-22  Alexey Proskuryakov  <ap@apple.com>

        Windows build fix.

        * win/WebKit2.vcproj: Added new files.

2010-07-22  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig and Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=42193
        Support layoutTestController.dumpEditingDelegates in WebKitTestRunner

        Step 1: Add the method, and implement one actual delegate call as proof of concept. No tests
        fixed, but this makes difference one line smaller on many editing tests.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        * WebProcess/InjectedBundle/API/c/WKBundleBase.h:
        * WebProcess/InjectedBundle/API/c/WKBundleNode.cpp: Added.
        (WKBundleNodeCopyNodeName):
        (WKBundleNodeGetParent):
        * WebProcess/InjectedBundle/API/c/WKBundleNode.h: Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetEditorClient):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/API/c/WKBundleRange.cpp: Added.
        (WKBundleRangeGetStartOffset):
        (WKBundleRangeGetStartContainer):
        (WKBundleRangeGetEndOffset):
        (WKBundleRangeGetEndContainer):
        * WebProcess/InjectedBundle/API/c/WKBundleRange.h: Added.
        Added WKBundleRangeRef and WKBundleNodeRef types for injected bundles. These are just pointers
        to respective WebCore objects, without any WebKit2 wrappers.

        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp: Added.
        (WebKit::InjectedBundlePageEditorClient::InjectedBundlePageEditorClient):
        (WebKit::InjectedBundlePageEditorClient::initialize):
        (WebKit::InjectedBundlePageEditorClient::shouldBeginEditing):
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.h: Added.
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::shouldBeginEditing):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::initializeInjectedBundleEditorClient):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::injectedBundleEditorClient):
        Added the plumbing for invoking injected bundle code for editor client. There is no real API
        for editor client yet.

2010-07-22  Ivan Krstić  <ike@apple.com>

        Reviewed by Anders Carlsson.

        Adapt sandbox for new WebProcess bootstrap service naming scheme.
        <rdar://problem/8225000>

        * WebProcess/com.apple.WebProcess.sb:

2010-07-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        It should be possible to attach to the WebProcess in gdb during startup
        https://bugs.webkit.org/show_bug.cgi?id=42853

        Create an unique bootstrap service name and pass it to the web process, instead of registering a per process
        name (which was incorrect anyway). This lets us get rid of the requirement that the UI process always should be
        the parent process of the web process, something which is false when running under the debugger.

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

2010-07-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Don't assert when Connection::invalidate is called before Connection::dispatchConnectionDidClose
        https://bugs.webkit.org/show_bug.cgi?id=42851

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::dispatchConnectionDidClose):
        Just return early if m_client is 0.

2010-07-22  Adam Roben  <aroben@apple.com>

        Use ::MessageBox instead of ::DebugBreak to make the web process wait
        for a debugger

        While ::DebugBreak can make it easier to attach a debugger (because it
        brings up the Just-in-Time debugger window), using ::MessageBox has
        two advantages:
          1) It explains to the user what's going on, so it's harder to
             mistake this debugging aid for a bug.
          2) It allows you to debug the UI process and the web process using
             the same debugger, if desired.

        Special thanks to John Sullivan for help with the text that's shown in
        the alert.

        Fixes <http://webkit.org/b/42848> WebKit2's wait-for-debugger
        debugging aid should explain to the user what's happening

        Reviewed by John Sullivan and Anders Carlsson.

        * WebProcess/WebKitMain.cpp:
        (WebKitMain): Use a ::MessageBox instead of a ::DebugBreak to wait for
        the debugger. The alert explains to the user what's going on.

2010-07-22  Adam Roben  <aroben@apple.com>

        Make WorkQueue aware of potential errors with ::WaitForMultipleObjects

        Fixes <http://webkit.org/b/42846> WorkQueue should detect
        ::WaitForMultipleObject failures

        Reviewed by Anders Carlsson.

        * Platform/win/WorkQueueWin.cpp:
        (WorkQueue::workQueueThreadBody): Added some assertions about the
        various things that can fail with ::WaitForMultipleObjects,
        specifically:
          - Passing too many objects
          - Timeouts (which shouldn't happen since we pass a timeout interval
            of INFINITE)
          - Abandoned mutexes (which shouldn't happen since we don't wait on
            any mutexes currently)
          - Miscellaneous failures

2010-07-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42836
        Add localized strings stubs for WebKit2.

        Gets us below 200 tests failing in WebKitTestRunner.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2010-07-22  Andras Becsi  <abecsi@webkit.org>

        Unreviewed trivial build fix.

        [Qt] Mend remaining issues to fix the WebKit2 build.

        * Shared/qt/UpdateChunk.h: add missing function
        (WebKit::UpdateChunk::isEmpty):
        * UIProcess/API/qt/qwkpage_p.h: Add stub implementation
        (QWKPagePrivate::pageDidEnterAcceleratedCompositing):
        (QWKPagePrivate::pageDidLeaveAcceleratedCompositing):

2010-07-22  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Implement WebContext::applicationCacheDirectory() for the Qt port of WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=42830

        * UIProcess/qt/WebContextQt.cpp: Added.
        (WebKit::WebContext::applicationCacheDirectory):

2010-07-22  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Unreviewed build fix.

        [Qt] Fix WebKit2 build

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

        * UIProcess/API/qt/qwkpage_p.h:
        (QWKPagePrivate::setCursor): Added empty implementation.

2010-07-22  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Antonio Gomes.

        Lazy cursor creation should be guarded by #if USE(LAZY_NATIVE_CURSOR) in WebKit2

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

        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::setCursor):

2010-07-22  Jon Honeycutt  <jhoneycutt@apple.com>

        Build fix. Unreviewed.

        * win/WebKit2WebProcess.vcproj:
        Remove the pre- and post-build events, so that they will use the value
        inherited from the vsprops.

2010-07-21  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs layoutTestController.dumpChildFrameScrollPositions
        https://bugs.webkit.org/show_bug.cgi?id=42548

        Added WKBundleFrameCopyName.

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameCopyName): Added.
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h: Ditto.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::name): Added.
        * WebProcess/WebPage/WebFrame.h: Ditto.

2010-07-21  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs to support dumping of scroll position
        https://bugs.webkit.org/show_bug.cgi?id=42514

        Added WKBundleFrameGetJavaScriptContext function.

        * WebKit2.xcodeproj: Added property svn:ignore.

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameGetJavaScriptContext): Added.
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h: Ditto.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::didClearWindowObjectForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidClearWindowObjectInWorld):
        Use JSGlobalContextRef instead of JSContextRef and context instead of ct.

2010-07-21  Adam Roben  <aroben@apple.com>

        Handle broken pipes in more places in CoreIPC

        Fixes <http://webkit.org/b/42784> Assertion failure in
        Connection::readEventHandler when WebKitTestRunner exits

        Reviewed by Anders Carlsson.

        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::readEventHandler): Check for a broken pipe
        whenever we call ::PeekNamedPipe.

2010-07-21  Adam Roben  <aroben@apple.com>

        Teach CoreIPC how to handle messages that are larger than the pipe's
        buffer

        ::GetOverlappedResult and ::ReadFile can fail with ERROR_MORE_DATA
        when there is more data available on the pipe than was requested in
        the read operation. In those cases, the appropriate response is to
        perform another read operation to read the extra data. We now do this.

        Also, MSDN says that, because we are doing asynchronous read
        operations, we should not pass a pointer to ::ReadFile to find out how
        many bytes were read. Instead we should always call
        ::GetOverlappedResult to find this out. I've changed
        Connection::readEventHandler to have a single loop that calls
        ::GetOverlappedResult and ::ReadFile in alternation, rather than
        sometimes calling ::ReadFile multiple times in a row, to satisfy this
        requirement.

        In order to simplify the logic in this function, I've made us request
        only a single byte from the pipe when there are no messages already in
        the pipe. (Previously we were requesting 4096 bytes in this case.)
        This allows us not to have to consider the case where the received
        message is smaller than our read buffer. If we decide that this has a
        negative impact on performance, we can of course change it. I've
        mitigated this somewhat by using ::PeekNamedMessage to find out the
        size of the next message in the pipe (if any), so that we can read it
        all in one read operation.

        Fixes <http://webkit.org/b/42710> <rdar://problem/8197571> Assertion
        in Connection::readEventHandler when launching WebKitTestRunner

        Reviewed by Anders Carlsson.

        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::readEventHandler): Put the call to
        ::GetOverlappedResult in the same loop as ::ReadFile so that we will
        call them alternately. If ::GetOverlappedResult fails with
        ERROR_MORE_DATA, use ::PeekNamedPipe to determine the size of the rest
        of the message, then read it from the pipe. After dispatching the
        message, use ::PeekNamedPipe to find out the size of the next message
        in the pipe so we can read it all in one operation. If there's no
        message in the pipe, we'll request just a single byte of the next
        message that becomes available, and Windows will tell us when the rest
        of the message is ready. If ::ReadFile fails with ERROR_MORE_DATA it
        means there is data available now even though we didn't think there
        was any. We go back to the top of the loop in this case and call
        ::GetOverlappedResult again to retrieve the available data.

2010-07-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42539
        WebKitTestRunner needs to support printing ALERT, PROMPT and CONFIRM messages

        - Convert injected bundle UIClient functions to will-style, at least until we establish
          more concrete use cases for them past the TestRunner.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::willAddMessageToConsole):
        (WebKit::InjectedBundlePageUIClient::willSetStatusbarText):
        (WebKit::InjectedBundlePageUIClient::willRunJavaScriptAlert):
        (WebKit::InjectedBundlePageUIClient::willRunJavaScriptConfirm):
        (WebKit::InjectedBundlePageUIClient::willRunJavaScriptPrompt):
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::addMessageToConsole):
        (WebKit::WebChromeClient::runJavaScriptAlert):
        (WebKit::WebChromeClient::runJavaScriptConfirm):
        (WebKit::WebChromeClient::runJavaScriptPrompt):
        (WebKit::WebChromeClient::setStatusbarText):

2010-07-21  Simon Fraser  <simon.fraser@apple.com>

        Windows build fix.

        Need to supply implementations of PageClient::pageDidEnterAcceleratedCompositing()
        and pageDidLeaveAcceleratedCompositing() for WebView on Windows.

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

2010-07-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Don't assert when clicking on a plug-in in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42762

        Add stub for PluginView::handleEvent.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::handleEvent):
        * WebProcess/Plugins/PluginView.h:

2010-07-21  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Get accelerated compositing working with webkit2
        https://bugs.webkit.org/show_bug.cgi?id=41084
        
        Hook up dynamic DrawingArea switching, so that when the WebProcess hits a page
        that requires accelerated compositing, we switch to the LayerBackedDrawingArea.
        
        * Shared/CoreIPCSupport/DrawingAreaProxyMessageKinds.h:
        (DrawingAreaProxyMessage::):
        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h:
        (WebPageProxyMessage::):
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::pageDidEnterAcceleratedCompositing):
        (WebKit::PageClientImpl::pageDidLeaveAcceleratedCompositing):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _startAcceleratedCompositing:]):
        (-[WKView _switchToDrawingAreaTypeIfNecessary:DrawingAreaProxy::]):
        (-[WKView _pageDidEnterAcceleratedCompositing]):
        (-[WKView _pageDidLeaveAcceleratedCompositing]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::didReceiveSyncMessage):
        * UIProcess/ChunkedUpdateDrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::):
        (WebKit::DrawingAreaProxy::type):
        * UIProcess/LayerBackedDrawingAreaProxy.cpp:
        (WebKit::LayerBackedDrawingAreaProxy::didSetSize):
        (WebKit::LayerBackedDrawingAreaProxy::didReceiveMessage):
        (WebKit::LayerBackedDrawingAreaProxy::didReceiveSyncMessage):
        * UIProcess/LayerBackedDrawingAreaProxy.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setDrawingArea):
        (WebKit::WebPageProxy::didReceiveSyncMessage):
        (WebKit::WebPageProxy::didEnterAcceleratedCompositing):
        (WebKit::WebPageProxy::didLeaveAcceleratedCompositing):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/LayerBackedDrawingAreaProxyMac.mm:
        (WebKit::LayerBackedDrawingAreaProxy::attachCompositingContext):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::attachRootGraphicsLayer):
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.h:
        (WebKit::ChunkedUpdateDrawingArea::attachCompositingContext):
        (WebKit::ChunkedUpdateDrawingArea::setRootCompositingLayer):
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::):
        (WebKit::DrawingArea::type):
        * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
        (WebKit::LayerBackedDrawingArea::LayerBackedDrawingArea):
        (WebKit::LayerBackedDrawingArea::setNeedsDisplay):
        (WebKit::LayerBackedDrawingArea::setSize):
        (WebKit::LayerBackedDrawingArea::didUpdate):
        (WebKit::LayerBackedDrawingArea::setRootCompositingLayer):
        * WebProcess/WebPage/LayerBackedDrawingArea.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::changeAcceleratedCompositingMode):
        (WebKit::WebPage::enterAcceleratedCompositingMode):
        (WebKit::WebPage::exitAcceleratedCompositingMode):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm:
        (WebKit::LayerBackedDrawingArea::platformInit):
        (WebKit::LayerBackedDrawingArea::attachCompositingContext):
        (WebKit::LayerBackedDrawingArea::detachCompositingContext):
        (WebKit::LayerBackedDrawingArea::setRootCompositingLayer):

2010-07-20  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WebKit on Windows should build optionally with an unversioned ICU DLL
        https://bugs.webkit.org/show_bug.cgi?id=42722
        <rdar://problem/8211767> WebKit needs to link against unversioned ICU

        To get the proper value for U_DISABLE_RENAMING into all source files, we force
        the include of ICUVersion.h (our generated header) via the compiler options.

        Since the versioned and unversioned ICU have different filenames (libicuuc.lib vs icuuc.lib)
        we copy the ICU lib to an intermediate location under obj with a common name. This
        allows us to link properly with either without adding a new build configuration.

        * win/WebKit2Common.vsprops:
        Copy ICU libs into a common location with a common name.
        Add additional library search path to pick up icu lib.
        Change ICU library filename specified to linker.
        Add forced include of ICUVersion.h.        

2010-07-21  Adam Roben  <aroben@apple.com>

        Windows build fix

        * Shared/win/UpdateChunk.h:
        (WebKit::UpdateChunk::isEmpty): Added to match the Mac definition.

2010-07-21  Anders Carlsson  <andersca@apple.com>

        Land file I forgot to add.

        * WebProcess/com.apple.WebProcess.sb: Added.

2010-07-21  Adam Roben  <aroben@apple.com>

        Move WebKit2WebProcess's settings to a vsprops file

        Fixes <http://webkit.org/b/42751> WebKit2WebProcess should use vsprops
        files

        Reviewed by Darin Adler.

        * win/WebKit2WebProcess.vcproj: Moved settings from here...
        * win/WebKit2WebProcessCommon.vsprops: ...to here.

2010-07-20  Ivan Krstić  <ike@apple.com>

        Reviewed and tweaked by Anders Carlsson and Sam Weinig.

        Put WebProcess in a sandbox. All of the following changes are
        Mac-only.
        <rdar://problem/7865269>

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        Send Sandbox extension for injected bundle to WebProcess.

        * WebKit2.xcodeproj/project.pbxproj:
        Add Sandbox profile to Resources for WebProcess.

        * WebProcess/InjectedBundle/InjectedBundle.h:
        New function InjectedBundle::setSandboxToken.

        * WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp:
        (WebKit::InjectedBundle::load):
        Consume Sandbox token for the bundle if present.

        (WebKit::InjectedBundle::setSandboxToken):
        Set Sandbox token for the bundle.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::loadInjectedBundle):
        Extra function parameter for Sandbox token.

        (WebKit::WebProcess::didReceiveMessage):
        Pass Sandbox token to loadInjectedBundle().

        * WebProcess/WebProcess.h:
        Extra function parameter for Sandbox token in loadInjectedBundle().

        * WebProcess/com.apple.WebProcess.sb: Added.
        Sandbox profile for WebProcess.

        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain):
        Initialize Sandbox, exit on failure.

2010-07-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42719
        Make Acid2 pass in WebKit2

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::objectContentType): Check for supported image mimetypes
        before falling back to plugins.

2010-07-20  Adam Roben  <aroben@apple.com>

        Remove WebKit2.sln

        WebKit.sln builds all the same projects.

        Rubber-stamped in advance by Steve Falkenburg.

        * WebKit2.sln: Removed.

2010-07-20  Adam Roben  <aroben@apple.com>

        Make the web process break into the debugger when Ctrl-Alt-Shift is
        held during launch

        Fixes <http://webkit.org/b/42670> Would like a way to break into the
        debugger when the web process launches

        Reviewed by Anders Carlsson.

        * WebProcess/WebKitMain.cpp:
        (WebKitMain): If the Control, Alt, and Shift keys are held down in a
        Debug build, call DebugBreak() so that we will break into the
        debugger.

2010-07-20  Adam Roben  <aroben@apple.com>

        Teach Connection how to handle a slow receiver

        Fixes <http://webkit.org/b/42667> Assertion in
        Connection::sendOutgoingMessage when browser or web process is paused

        Reviewed by Anders Carlsson.

        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::sendOutgoingMessage): If WriteFile returns FALSE
        and the last error is ERROR_IO_PENDING, Windows will write the data as
        soon as the current write operation is completed. We don't need to do
        anything special in this case, so there's no need to assert about it.

2010-07-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Handle WKView visibility changes
        <rdar://problem/7891077>
    
        * Shared/mac/UpdateChunk.h:
        (WebKit::UpdateChunk::isEmpty):
        Add convenience getter.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewDidMoveToWindow]):
        Reorder the calls to _updateActiveState and _updateVisibility based on whether the view is moved to
        a window or away from a window.

        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::ChunkedUpdateDrawingAreaProxy):
        Initialize m_forceRepaintWhenResumingPainting to false.

        (WebKit::ChunkedUpdateDrawingAreaProxy::setPageIsVisible):
        Pass the m_forceRepaintWhenResumingPainting along to the DrawingAreaMessage::ResumePainting message.

        (WebKit::ChunkedUpdateDrawingAreaProxy::didSetSize):
        Don't try to paint empty update chunks.

        (WebKit::ChunkedUpdateDrawingAreaProxy::update):
        Don't paint the update chunk if we're not visible. Instead, make sure that the entire page is being redrawn
        when its shown again.

        * UIProcess/ChunkedUpdateDrawingAreaProxy.h:
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
        (WebKit::ChunkedUpdateDrawingArea::ChunkedUpdateDrawingArea):
        (WebKit::ChunkedUpdateDrawingArea::display):
        (WebKit::ChunkedUpdateDrawingArea::suspendPainting):
        Rename m_shouldPaint to m_isPaintingSuspended and invert its logic.
        
        (WebKit::ChunkedUpdateDrawingArea::scheduleDisplay):
        Don't schedule a display timer if the dirty rect is empty.

        (WebKit::ChunkedUpdateDrawingArea::setSize):
        If painting is suspended, just send back an empty update chunk in the DidSetSize message.

        (WebKit::ChunkedUpdateDrawingArea::resumePainting):
        If forceRepaint is true, repaint the entire drawing area.

2010-07-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Implement NPN_GetURL and NPN_PostURL
        https://bugs.webkit.org/show_bug.cgi?id=42650

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::parsePostBuffer):
        Add a FIXME about deleting the file.

        (WebKit::makeURLString):
        Move this static method before NPN_GetURL.

        (WebKit::NPN_GetURL):
        Call NetscapePLugin::LoadURL.
        
        (WebKit::NPN_PostURL):
        Ditto.

        (WebKit::NPN_PostURLNotify):
        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        Remove unreached code.

        (WebKit::NetscapePluginStream::deliverDataToPlugin):
        Stop the stream if the plug-in returns -1 from NPP_Write.

2010-07-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner and WebProcess simultaneously stall in CoreIPC::Connection::sendOutgoingMessage
        https://bugs.webkit.org/show_bug.cgi?id=42356

        Up the port queue length from 5 to 1024. While this does solve the problem, we should still try to
        make sendOutgoingMessage not block. I've filed https://bugs.webkit.org/show_bug.cgi?id=42611 to track 
        doing this on Mac and Windows.

        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::open):
        Call setMachPortQueueLength.

        * Platform/mac/MachUtilities.cpp: Added.
        (setMachPortQueueLength):
        Given a mach port receive right, sets the port queue length.

        * Platform/mac/MachUtilities.h: Added.
        
        * WebKit2.xcodeproj/project.pbxproj:
        Add MachUtilities.cpp and MachUtilities.h

2010-07-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler, Adam Roben, Dan Bernstein and Sam Weinig.

        Handle NP_ASFILE and NP_ASFILEONLY transfer modes
        https://bugs.webkit.org/show_bug.cgi?id=42587

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NPP_StreamAsFile):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        Add NPP_ wrapper.

        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::NetscapePluginStream):
        Initialize m_fileHandle.

        (WebKit::isSupportedTransferMode):
        NP_ASFILE and NP_ASFILEONLY is now supported.

        (WebKit::NetscapePluginStream::deliverData):
        Call deliverDataToFile if necessary.

        (WebKit::NetscapePluginStream::deliverDataToFile):
        Create a temporary file and write the data into it.

        (WebKit::NetscapePluginStream::stop):
        If the transfer mode is either NP_ASFILE or NP_ASFILEONLY, make sure to
        call NPP_StreamAsFile and close the file and delete it.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::cancelStreamLoad):
        Keep a reference to the Stream since cancelling it will remove it from the map.

2010-07-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement NPN_PostURLNotify
        https://bugs.webkit.org/show_bug.cgi?id=42602

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::parsePostBuffer):
        Read the buffer from a file if necessary and parse it.

        (WebKit::NPN_GetURLNotify):
        Add extra arguments.

        (WebKit::NPN_PostURLNotify):
        Parse the post buffer, then call NetscapePlugin::loadURL.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::loadURL):
        Pass the method, the header fields and form data along.

        (WebKit::NetscapePlugin::allowPopups):
        Just return false for now.

        (WebKit::NetscapePlugin::initialize):
        Pass extra arguments to loadURL.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/PluginController.h:
        Add method, header fields and form data.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::loadURL):
        Set the method, add the header fields and set the body.

2010-07-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Add local storage support for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42584

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::WebPreferencesStore):
        (WebKit::WebPreferencesStore::swap):
        * Shared/WebPreferencesStore.h:
        (WebKit::WebPreferencesStore::encode):
        (WebKit::WebPreferencesStore::decode):
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetLocalStorageEnabled):
        (WKPreferencesGetLocalStorageEnabled):
        * UIProcess/API/C/WKPreferences.h:
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::setLocalStorageEnabled):
        (WebKit::WebPreferences::localStorageEnabled):
        * UIProcess/WebPreferences.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::preferencesDidChange):

2010-07-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Uae an OwnPtr for the drawing area in WebPage (fixes a leak!).

        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::drawingArea):

2010-07-19  Anders carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        WebKit2 does not have application cache
        https://bugs.webkit.org/show_bug.cgi?id=42552

        * Shared/CoreIPCSupport/WebProcessMessageKinds.h:
        (WebProcessMessage::):
        Add SetApplicationCacheDirectory.

        * Shared/WebPreferencesStore.h:
        (WebKit::WebPreferencesStore::encode):
        (WebKit::WebPreferencesStore::decode):
        add offlineWebApplicationCacheEnabled.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetOfflineWebApplicationCacheEnabled):
        (WKPreferencesGetOfflineWebApplicationCacheEnabled):
        * UIProcess/API/C/WKPreferences.h:
        Add getters/setters for whether the application cache is enabled.

        * UIProcess/WebContext.h:
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::setOfflineWebApplicationCacheEnabled):
        Update the store and call update().
        
        * UIProcess/WebPreferences.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        Ask the web process to set the application cache directory.

        * UIProcess/mac/WebContextMac.mm: Added.
        (WebKit::WebContext::applicationCacheDirectory):
        Return the application cache directory.

        * UIProcess/win/WebContextWin.cpp: Added.
        (WebKit::WebContext::applicationCacheDirectory):
        Ditto.

        * WebKit2.xcodeproj/project.pbxproj:
        Add WebContextMac.mm

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::preferencesDidChange):
        
        (WebKit::WebPage::didReceiveMessage):
        Handle PreferencesDidChange. Get rid of the default: case statement so we'll
        get warnings if we have unhandled message kinds.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setApplicationCacheDirectory):
        Set the application cache directory.

        (WebKit::WebProcess::didReceiveMessage):
        Handle SetApplicationCacheDirectory.

        win/WebKit2.vcproj:
        Add WebContextWin.cpp

2010-07-18  Anders Carlsson  <andersca@apple.com>

        Another attempt at fixing the Windows build.

        * WebProcess/Plugins/NPJSObjectMap.h:

2010-07-18  Anders Carlsson  <andersca@apple.com>

        Try to fix Windows build.

        * win/WebKit2.vcproj:

2010-07-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        More NPRuntime work
        https://bugs.webkit.org/show_bug.cgi?id=42526

        * WebProcess/Plugins/NPJSObjectMap.cpp:
        (WebKit::identifierFromIdentifierRep):
        (WebKit::NPJSObject::hasProperty):
        Check if the JSObject has the given property.

        (WebKit::NPJSObject::getProperty):
        Add stubbed out function.

        (WebKit::NPJSObject::npClass):
        Add NP_HasProperty and NP_GetProperty.

        (WebKit::NPJSObject::NP_HasProperty):
        Call NPJSObject::hasProperty.

        (WebKit::NPJSObject::NP_GetProperty):
        Call NPJSObject::getProperty.

        * WebProcess/Plugins/NPRuntimeUtilities.cpp:
        (WebKit::releaseNPVariantValue):
        Release the given NPVariant.

        * WebProcess/Plugins/NPRuntimeUtilities.h:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetProperty):
        Call the NPClass GetProperty function.

        (WebKit::NPN_HasProperty):
        Call the NPClass HasProperty function.
        
        (WebKit::NPN_ReleaseVariantValue):
        Call releaseNPVariantValue.

2010-07-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add NPJSObjectMap class
        https://bugs.webkit.org/show_bug.cgi?id=42524

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

        * WebProcess/Plugins/NPJSObjectMap.cpp: Added.
        * WebProcess/Plugins/NPJSObjectMap.h: Added.
        Add NPJSObjectMap, a map which contains NPObjects that wrap JavaScript objects.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::PluginView):
        Initialize the map.

        (WebKit::PluginView::~PluginView):
        Invalidate the map.

        (WebKit::PluginView::frame):
        Add frame getter.

        (WebKit::PluginView::windowScriptNPObject):
        Wrap the window object.

        (WebKit::PluginView::pluginElementNPObject):
        Wrap the plug-in element object.

        * WebProcess/Plugins/PluginView.h:

2010-07-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement more NPRuntime related NPN_ functions
        https://bugs.webkit.org/show_bug.cgi?id=42520

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/NPRuntimeUtilities.cpp: Added.
        * WebProcess/Plugins/NPRuntimeUtilities.h: Added.
        Add new file with NPRuntime related utility functions.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_CreateObject):
        (WebKit::NPN_RetainObject):
        (WebKit::NPN_ReleaseObject):
        Call the corresponding NPRuntimeUtilities functions.

2010-07-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Begin work on NPRuntime support
        https://bugs.webkit.org/show_bug.cgi?id=42519

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue):
        Handle NPNVWindowNPObject and NPNVPluginElementNPObject.

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

        * WebProcess/Plugins/PluginController.h:
        Add new windowScriptNPObject and pluginElementNPObject functions.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::windowScriptNPObject):
        (WebKit::PluginView::pluginElementNPObject):
        Add stubbed out functions.

2010-07-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Implement some NPRuntime related NPN_ functions
        https://bugs.webkit.org/show_bug.cgi?id=42518

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetStringIdentifier):
        (WebKit::NPN_GetStringIdentifiers):
        (WebKit::NPN_GetIntIdentifier):
        (WebKit::NPN_IdentifierIsString):
        (WebKit::NPN_UTF8FromIdentifier):
        (WebKit::NPN_IntFromIdentifier):
        (WebKit::NPN_CreateObject):

2010-07-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Add dumping of statusbar text to WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=42516

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        Add setStatusbarText callback to WKBundlePageUIClient.

        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::setStatusbarText):
        Call setStatusbarText.

        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::setStatusbarText):
        Call the bundle page UI client.

2010-07-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKitTestRunner should load the test plug-in
        https://bugs.webkit.org/show_bug.cgi?id=42509

        * UIProcess/API/C/WKContext.cpp:
        (_WKContextSetAdditionalPluginPath):
        Add a private function for setting a single additional plug-in path. the WebKit1 SPI that does the
        same thing takes an array of paths, but this is good enough for now.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::setAdditionalPluginPaths):
        Set the additional plug-in paths vector and refresh the database.
        
        (WebKit::PluginInfoStore::loadPluginsIfNecessary):
        First try to load plug-ins in the additional plug-in paths.
        
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::setAdditionalPluginPath):
        Call PluginInfoStore::setAdditionalPluginPaths.

        * UIProcess/WebContext.h:
        (WebKit::WebContext::pluginInfoStore):
        Make the plug-in info store per context instead of having a single shared info store.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPlugins):
        (WebKit::WebProcessProxy::getPluginHostConnection):
        * UIProcess/WebProcessProxy.h:
        Get the plug-in info store from the context.

2010-07-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Stop all NPStreams before destroying a plug-in
        https://bugs.webkit.org/show_bug.cgi?id=42504

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::stopAllStreams):
        Go through all streams and stop them.

        (WebKit::NetscapePlugin::destroy):
        Call stopAllStreams.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        Add stopAllStreams.
        
        * WebProcess/Plugins/Netscape/NetscapePluginStream.h:
        Make stop public.

2010-07-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Open streams should not keep a plug-in view alive
        https://bugs.webkit.org/show_bug.cgi?id=42503

        PluginView::Stream now has a weak reference to its PluginView.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::Stream::~Stream):
        Assert that the plug-in view is null.

        (WebKit::PluginView::Stream::didFail):
        After calling removeStream, set the plug-in view member variable to 0. This is OK to do
        since we keep a reference to the Stream, so we're sure that the call to removeStream does not
        destroy the stream.

        (WebKit::PluginView::Stream::didFinishLoading):
        Ditto .

        (WebKit::PluginView::~PluginView):
        Cancel all streams.
        
        (WebKit::PluginView::cancelAllStreams):
        Cancel all streams.

2010-07-16  Zhe Su  <suzhe@chromium.org>

        Reviewed by Darin Adler.

        REGRESSION(r61484): Broke focus behaviour on Qt and probably other platforms
        https://bugs.webkit.org/show_bug.cgi?id=42253

        Dummy implementation of EditorClient::willSetInputMethodState.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::willSetInputMethodState):
        * WebProcess/WebCoreSupport/WebEditorClient.h:

2010-07-16  Alice Liu  <alice.liu@apple.com>

        Build fix, not reviewed.

        Reverted http://trac.webkit.org/changeset/63585 because getopt isn't 
        available in the OpenSource support libraries

        * WebKit2.sln:

2010-07-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=42482
        <rdar://problem/8197701>
        Add notification of when the BackForwardList changes
        to aid invalidation of Back/Forward related UI elements.

        * UIProcess/API/C/WKPage.h:
        Add didChangeBackForwardList to the WKPageLoaderClient. This 
        fires whenever an item is added or removed from the back forward
        list or when the cursor changes position.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::addItem):
        (WebKit::WebBackForwardList::goToItem):
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::didChangeBackForwardList):
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didChangeBackForwardList):
        * UIProcess/WebPageProxy.h:
        Pipe changes to the WebBackForwardList up to the page load client.

2010-07-16  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        Add WebKitTestRunner to the WebKit2 solution

        * WebKit2.sln: Add InjectedBundle and WebKitTestRunner projects.  Also change the build dependency order from
        DumpRunderTree --> WebKitAPITest to
        DumpRenderTree --> InjectedBundle --> WebKitTestRunner --> WebKitAPITest

2010-07-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Set notifyData to the stream's notification data
        https://bugs.webkit.org/show_bug.cgi?id=42429

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

2010-07-15  Brent Fulgham  <bfulgham@webkit.org>

        Build fix.  Don't include CoreGraphics.h on non-CG builds.

        * WebKit2Prefix.h: Conditionalize include of CoreGraphics.h
        to avoid build break on WinCairo.

2010-07-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        If needed, NPN_GetURL the src URL
        https://bugs.webkit.org/show_bug.cgi?id=42424

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NPP_GetValue):
        Add NPP_GetValue wrapper.

        (WebKit::NetscapePlugin::shouldLoadSrcURL):
        Check whether the src url should be cancelled.

        (WebKit::NetscapePlugin::initialize):
        If the src URL should be loaded, then load it.
        
2010-07-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Stop the plug-in stream when it's finished loading
        https://bugs.webkit.org/show_bug.cgi?id=42423

        * WebProcess/Plugins/DummyPlugin.cpp:
        (WebKit::DummyPlugin::streamDidFinishLoading):
        * WebProcess/Plugins/DummyPlugin.h:
        Add empty stub.
        
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::streamDidFinishLoading):
        Call NetscapePluginStream::didFinishLoading.

        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::didFinishLoading):
        Stop the stream with NPRES_DONE.

        * WebProcess/Plugins/Plugin.h:
        Add streamDidFinishLoading.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::Stream::didFinishLoading):
        Call Plugin::streamDidFinishLoading.

2010-07-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Pass URL stream data to the plug-in
        https://bugs.webkit.org/show_bug.cgi?id=42420

        * WebProcess/Plugins/DummyPlugin.cpp:
        (WebKit::DummyPlugin::streamDidReceiveData):
        * WebProcess/Plugins/DummyPlugin.h:
        Add empty stub.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::streamDidReceiveData):
        Call NetscapePluginStream::didReceiveData.

        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::didReceiveData):
        Deliver the data to the plug-in.

        * WebProcess/Plugins/Plugin.h:
        Add pure virtual streamDidReceiveData member function.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::Stream::didReceiveData):
        Call Plugin::streamDidReceiveData.

2010-07-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Handle failed loads correctly
        https://bugs.webkit.org/show_bug.cgi?id=42418

        * WebProcess/Plugins/DummyPlugin.cpp:
        (WebKit::DummyPlugin::streamDidFail):
        * WebProcess/Plugins/DummyPlugin.h:
        Add empty stub.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::streamDidFail):
        Call NetscapePluginStream::didFail.
    
        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::didReceiveResponse):
        Take a reference to the plug-in stream in case starting it causes it to be destroyed.
        
        (WebKit::NetscapePluginStream::didFail):
        Take a reference to the plug-in stream in case stopping it causes it to be destroyed.

        (WebKit::NetscapePluginStream::destroy):
        Cancel the stream.

        (WebKit::NetscapePluginStream::start):
        If we fail to start the stream, cancel the load.

        (WebKit::NetscapePluginStream::cancel):
        Call NetscapePlugin::cancelStreamLoad.

        (WebKit::NetscapePluginStream::notifyAndDestroyStream):
        Don't call cancel here. notifyAndDestroyStream can be called when we don't want to cancel the
        load, such as when it's already failed to load.

        * WebProcess/Plugins/Netscape/NetscapePluginStream.h:
        Add didFail.

        * WebProcess/Plugins/Plugin.h:
        Add pure virtual streamDidFail member function.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::Stream::Stream):
        Initialize m_streamWasCancelled to false.

        (WebKit::PluginView::Stream::cancel):
        Set m_streamWasCancelled to true.

        (WebKit::PluginView::Stream::didFail):
        Call Plugin::streamDidFail.

2010-07-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=42358
        <rdar://problem/8194512>
        Hyphenation tests crash the Web process

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

2010-07-15  Anders Carlsson  <andersca@apple.com>

        Attempt to fix the Windows build.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::Stream::didReceiveResponse):
        expectedContentLength should be a signed long long.

2010-07-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Cancel stream loads when destroying NetscapePluginStreams
        https://bugs.webkit.org/show_bug.cgi?id=42413

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::cancelStreamLoad):
        Call PluginController::cancelStreamLoad.

        (WebKit::NetscapePlugin::streamDidReceiveResponse):
        Call NetscapePluginStream::didReceiveResponse.

        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::didReceiveResponse):
        Try to start the stream.

        (WebKit::NetscapePluginStream::sendJavaScriptStream):
        Don't stop the stream if it can't be started. start handles that now.

        (WebKit::isSupportedTransferMode):
        Return whether the given transfer mode is supported.

        (WebKit::NetscapePluginStream::start):
        If the stream fails to start, call notifyAndDestroyStream. If it starts successfully but has
        an unsupported transfer mode, call stop.
        
        (WebKit::NetscapePluginStream::notifyAndDestroyStream):
        Cancel the stream load unless it's being destroyed because it has finished loading.

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

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::Stream::cancel):
        Tell the stream loader to cancel and null it out.

        (WebKit::PluginView::cancelStreamLoad):
        Get the stream and cancel it.

        * WebProcess/Plugins/PluginView.h:

2010-07-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Start loading plug-in streams
        https://bugs.webkit.org/show_bug.cgi?id=42407

        * WebProcess/Plugins/DummyPlugin.cpp:
        (WebKit::DummyPlugin::streamDidReceiveResponse):
        * WebProcess/Plugins/DummyPlugin.h:
        Add empty stub.

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

        * WebProcess/Plugins/Plugin.h:
        Add streamDidReceiveResponse pure virtual member function.

        * WebProcess/Plugins/PluginView.cpp:
        Make PluginView::Stream a NetscapePlugInStreamLoaderClient.

        (WebKit::PluginView::Stream::start):
        Create a plug-in loader and start loading.

        (WebKit::PluginView::Stream::didReceiveResponse):
        Get the necessary data out of the resource response and call streamDidReceiveResponse.

        (WebKit::PluginView::Stream::didReceiveData):
        (WebKit::PluginView::Stream::didFail):
        (WebKit::PluginView::Stream::didFinishLoading):
        Add empty stubs.

2010-07-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42396
        Give the navigation type in the policy client callbacks meaning. 

        - Use the new WKFrameNavigationType instead of just uint32_t.

        * UIProcess/API/C/WKAPICast.h:
        (toWK):
        Add conversion method from WebCore::NavigationType to WKFrameNavigationType.
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPolicyClient.cpp:
        (WebKit::WebPolicyClient::decidePolicyForNavigationAction):
        (WebKit::WebPolicyClient::decidePolicyForNewWindowAction):
        * UIProcess/WebPolicyClient.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:

2010-07-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add a PluginView::Stream class
        https://bugs.webkit.org/show_bug.cgi?id=42398

        * WebProcess/Plugins/PluginView.cpp:
        Add the Stream class.

        (WebKit::PluginView::performURLRequest):
        Create the stream and start it.

        (WebKit::PluginView::addStream):
        Add the stream to the map.

        (WebKit::PluginView::removeStream):
        Remove the stream from the map.

        * WebProcess/Plugins/PluginView.h:
        Add Stream forward declaration and the m_streams map.

2010-07-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Don't allow multiple calls to NetscapePluginStream::stop
        https://bugs.webkit.org/show_bug.cgi?id=42395

        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::NetscapePluginStream):
        Initialize m_urlNotifyHasBeenCalled.

        (WebKit::NetscapePluginStream::~NetscapePluginStream):
        Assert that the stream didn't need a URL notification or that one was sent.

        (WebKit::NetscapePluginStream::sendJavaScriptStream):
        Don't call stop in the JS failure case because the stream won't be started.

        (WebKit::NetscapePluginStream::stop):
        Remove m_isStarted check and add an assertion instead. Move code that calls NPP_URLNotify and
        destroys the stream out to a separate function.

        (WebKit::NetscapePluginStream::notifyAndDestroyStream):
        Call NPP_URLNotify if necessary and destroy the stream.

        * WebProcess/Plugins/Netscape/NetscapePluginStream.h:

2010-07-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement NPN_DestroyStream
        https://bugs.webkit.org/show_bug.cgi?id=42393

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_DestroyStream):
        Call NetscapePlugin::destroyStream.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::destroyStream):
        Check if the stream is valid, and if it is call NetscapePluginStream::destroy.

        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::sendJavaScriptStream):
        Keep a reference to the stream in case it's destroyed by an NPP_ call.

        (WebKit::NetscapePluginStream::destroy):
        Verify that the stream can be destroyed and stop it.

        (WebKit::NetscapePluginStream::deliverDataToPlugin):
        Add m_isStarted checks after any calls to NPP_ functions.

        (WebKit::NetscapePluginStream::stop):
        Set m_isStarted to false before calling NPP_DestroyStream.
        
        * WebProcess/Plugins/Netscape/NetscapePluginStream.h:
        (WebKit::NetscapePluginStream::npStream):
        Add NPStream getter.

2010-07-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        WebKitTestRunner goes off the deep end, spinning in a dispatch queue thread
        https://bugs.webkit.org/show_bug.cgi?id=42355

        Sometimes, when receiving a message whose size is very close to the inlineMessageMaxSize,
        mach_msg would return with MACH_RCV_TOO_LARGE. In debug builds we would assert, but in release
        builds we would just bail and the receiveSourceEventHandler would be run again shortly since we didn't
        actually pull the message off the mach message queue.

        Fix this by setting the receive source buffer size to include the maximum message trailer size, which
        mach_msg requires. Also, handle mach_msg returning MACH_RCV_TOO_LARGE (even though in theory it would never happen
        now that the receivedBufferSize always includes the maximum message trailer size.

        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::receiveSourceEventHandler):
        Use a Vector with inline data instead of a char array. This way we can resize the Vector if the message received
        is too big.

2010-07-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Send JavaScript stream data to plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=42384

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NPP_WriteReady):
        (WebKit::NetscapePlugin::NPP_Write):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        Add NPP_ wrappers.
        
        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::NetscapePluginStream):
        Initialize m_deliveryDataTimer and m_stopstreamWhenDoneDelivering.

        (WebKit::NetscapePluginStream::sendJavaScriptStream):
        Call deliverData and stop.

        (WebKit::NetscapePluginStream::deliverData):
        Add the data to m_deliveryData and call deliverDataToPlugin.

        (WebKit::NetscapePluginStream::deliverDataToPlugin):
        Deliver the data in m_deliveryData to the plug-in. Call NPP_WriteReady to see how much
        data the plug-in can handle right now. If the plug-in returns zero or a negative value, delay the
        delivery using the delivery data timer. Otherwise, call NPP_Write in chunks until all the data has been
        delivered, then stop the stream if needed.

        (WebKit::NetscapePluginStream::stop):
        If the reason for stopping the stream is that it's finished and the plug-in hasn't processed all the data,
        don't close the stream now. Instead, set m_stopStreamWhenDoneDelivering to true which will cause the stream to be
        closed once all data has been delivered.

        * WebProcess/Plugins/Netscape/NetscapePluginStream.h:
        Add member functions and member variables.

2010-07-14  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Steve Falkenburg.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42299
        Correct WinCairo build for new WebKit2 project structure.

        * win/WebKit2Apple.vsprops: Put WebKit2.def here.
        * win/WebKit2CFLite.def: Added CFLite version of def file.
        * win/WebKit2CFLite.vsprops: Add new WebKit2CFLite.def here.
        * win/WebKit2Common.vsprops: Remove WebKit2.def definition as
          WinCairo and Apple need different versions of this.
        * win/WebKit2WebProcess.vcproj: Add a new Debug_Cairo target
          for the WebKit2WebProcess project.

2010-07-15  Mark Rowe  <mrowe@apple.com>

        Update the sorting in the Xcode project files.

        * WebKit2.xcodeproj/project.pbxproj:

2010-07-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42315
        <rdar://problem/8185281>
        All text in WebKit2 draws with no subpixel antialiasing

        - Change CGBitmapInfo passed to CGBitmapContextCreate and CGImageCreate
          from kCGImageAlphaPremultipliedLast to kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host.

        * Shared/mac/UpdateChunk.cpp:
        (WebKit::UpdateChunk::createImage):
        * UIProcess/mac/ChunkedUpdateDrawingAreaProxyMac.mm:
        (WebKit::ChunkedUpdateDrawingAreaProxy::ensureBackingStore):
        * WebProcess/WebPage/mac/ChunkedUpdateDrawingAreaMac.cpp:
        (WebKit::ChunkedUpdateDrawingArea::paintIntoUpdateChunk):

2010-07-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark Rowe.

        - Fix WebKitTestRunner build

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h: Add stdint.h include.

2010-07-14  Anders Carlsson  <andersca@apple.com>

        Try to fix Windows build.

        * win/WebKit2.vcproj:

2010-07-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        More work on plug-in streams
        https://bugs.webkit.org/show_bug.cgi?id=42308

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::loadURL):
        If the target is null, create a NetscapePluginStream and add it to the m_streams map.

        (WebKit::NetscapePlugin::removePluginStream):
        Remove the given NetscapePluginStream from the m_streams map.

        (WebKit::NetscapePlugin::NPP_NewStream):
        (WebKit::NetscapePlugin::NPP_DestroyStream):
        Add NPP_ wrappers.

        (WebKit::NetscapePlugin::streamFromID):
        Return the plug-in stream given a stream ID.

        (WebKit::NetscapePlugin::didEvaluateJavaScript):
        Find the plug-in stream and call sendJavaScriptStream.

        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::NetscapePluginStream):
        Initialize member variables.

        (WebKit::NetscapePluginStream::~NetscapePluginStream):
        Assert that we aren't started.

        (WebKit::NetscapePluginStream::sendJavaScriptStream):
        If the JavaScript request was successful, start the stream. Otherwise call stop() which just
        ends up calling NPP_URLNotify when the stream isn't started.

        (WebKit::NetscapePluginStream::start):
        Set up the NPStream object. Call NPP_NewStream. Return false if the call was not successful, or if
        the requested stream type is one that we don't yet support.

        (WebKit::NetscapePluginStream::stop):
        Call NPP_DestroyStream if the stream is started. Call NPP_URLNotify if necessary.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performJavaScriptURLRequest):
        Remove unneeded comment.

2010-07-14  Sam Weinig  <sam@webkit.org>

        Reviewed by John Sullivan.

        Make Back/Forward work.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::goForward): Pass the item ID to avoid roundtrip.
        (WebKit::WebPageProxy::goBack): Ditto.
        (WebKit::WebPageProxy::didReceiveMessage): Implement WebPageProxyMessage::BackForwardGoToItem.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::goForward): Use m_page->goToItem with the correct type instead of the Page shortcut.
        (WebKit::WebPage::goBack): Ditto.
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebPage/WebPage.h:
        Remove unused m_canGoBack and m_canGoForward.

2010-07-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Add NetscapePluginStream class
        https://bugs.webkit.org/show_bug.cgi?id=42296

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp: Added.
        (WebKit::NetscapePluginStream::NetscapePluginStream):
        (WebKit::NetscapePluginStream::~NetscapePluginStream):
        * WebProcess/Plugins/Netscape/NetscapePluginStream.h: Added.
        (WebKit::NetscapePluginStream::create):

2010-07-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42297
        <rdar://problem/8187355>
        Make titles in WebBackForwardListItems work.

        - Make WebBackForwardListItemMap per WebProcessProxy to allow updating
          them separate from a page. They are conceptually per process anyway.
        - Add a message to add or update a WebBackForwardListItemMap triggered
          by the WebCore::notifyHistoryItemChanged mechanism.

        * Shared/CoreIPCSupport/WebProcessProxyMessageKinds.h:
        (WebProcessProxyMessage::):
        Add AddOrUpdateBackForwardItem message.

        * UIProcess/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::setOriginalURL):
        (WebKit::WebBackForwardListItem::setURL):
        (WebKit::WebBackForwardListItem::setTitle):
        Add setters.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        BackForwardAddItem now assumes the item has already been created, so
        now just forwards the add message onto the WebBackForwardList.

        (WebKit::WebPageProxy::addItemToBackForwardList): Take a WebBackForwardList instead of an ID.
        (WebKit::WebPageProxy::goToItemInBackForwardList): Ditto.
        * UIProcess/WebPageProxy.h: Ditto.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::webBackForwardItem):
        (WebKit::WebProcessProxy::addOrUpdateBackForwardListItem):
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        * UIProcess/WebProcessProxy.h:
        Have the WebProcessProxy manage the WebBackForwardListItems.

        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::updateBackForwardItem):
        (WebKit::WK2NotifyHistoryItemChanged): Use this to notify UIProcess
        of HistoryItem changes (such as the title being added).
        (WebKit::WebBackForwardListProxy::WebBackForwardListProxy):
        Register the notifyHistoryItemChanged function.
        (WebKit::WebBackForwardListProxy::addItem):
        Just send the ID as the updateBackForwardItem is already going to have
        been called by this time.

2010-07-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Call NPN_URLNotify for frame loads initiated by plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=42291

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::loadURL):
        If needed, keep track of the request ID and URL so we can call NPP_URLNotify at a later point.

        (WebKit::NetscapePlugin::frameDidFinishLoading):
        Get the notification data and the URL from the map and call NPP_URLNotify.

        (WebKit::NetscapePlugin::frameDidFail):
        Get the notification data and the URL from the map and call NPP_URLNotify.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:

2010-07-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add NetscapePlugin::NPP_ member functions for calling into the plug-in
        https://bugs.webkit.org/show_bug.cgi?id=42287

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NPP_New):
        (WebKit::NetscapePlugin::NPP_Destroy):
        (WebKit::NetscapePlugin::NPP_SetWindow):
        (WebKit::NetscapePlugin::NPP_URLNotify):
        (WebKit::NetscapePlugin::callSetWindow):
        (WebKit::NetscapePlugin::initialize):
        (WebKit::NetscapePlugin::destroy):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:

2010-07-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Send JavaScript url request results back to the plug-in
        https://bugs.webkit.org/show_bug.cgi?id=42277

        * WebProcess/Plugins/DummyPlugin.cpp:
        (WebKit::DummyPlugin::didEvaluateJavaScript):
        * WebProcess/Plugins/DummyPlugin.h:
        Add empty stub.

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

        * WebProcess/Plugins/Plugin.h:
        Add didEvaluateJavaScript pure virtual member function.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performJavaScriptURLRequest):
        If target is not null, Call Plugin::frameDidFail or Plugin::frameDidFinishLoading.
        If target is null, call didEvaluateJavaScript with the result string.

2010-07-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42232
        Make changing Cursors work in WebKit2.

        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h:
        Add SetCursor message.

        * Shared/WebCoreArgumentCoders.h:
        Add encoding/decoding of Cursors. For now we don't support Custom
        cursors.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setCursor):
        * UIProcess/PageClient.h:
        Add pass through functions to get the cursor from the WebPageProxy
        to the WKView.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setCursor:]):
        * UIProcess/API/mac/WKViewInternal.h:
        Implement changing the cursor.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::setCursor):
        * UIProcess/WebPageProxy.h:
        Decode the cursor.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::wndProc):
        (WebKit::WebView::WebView):
        (WebKit::WebView::onSetCursor):
        (WebKit::WebView::setCursor):
        * UIProcess/win/WebView.h:
        Implement changing the cursor.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::setCursor):
        (WebKit::WebChromeClient::setLastSetCursorToCurrentCursor):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        Encode the cursor when setCursor is called.

2010-07-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add support for loading javascript: URLs
        https://bugs.webkit.org/show_bug.cgi?id=42221

        * WebProcess/Plugins/DummyPlugin.cpp:
        (WebKit::DummyPlugin::controller):
        * WebProcess/Plugins/DummyPlugin.h:
        Add stub function.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::destroy):
        Set the plug-in controller to 0.

        (WebKit::NetscapePlugin::controller):
        Return the plug-in controller.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        Add controller() member function.

        * WebProcess/Plugins/Plugin.h:
        Add controller() pure virtual member function.
        
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performURLRequest):
        If the given URL request has a javascript: protocol, call
        performJavaScriptURLRequest.

        (WebKit::PluginView::performFrameLoadURLRequest):
        Add a security origin check.

        (WebKit::PluginView::performJavaScriptURLRequest):
        Evaluate the JavaScript code, Get the resulting string.

        * WebProcess/Plugins/PluginView.h:
        Add performJavaScriptURLRequest.

2010-07-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add support for URL frame loading using NPN_GetURLNotify
        https://bugs.webkit.org/show_bug.cgi?id=42192

        * WebProcess/Plugins/DummyPlugin.cpp:
        (WebKit::DummyPlugin::frameDidFinishLoading):
        (WebKit::DummyPlugin::frameDidFail):
        * WebProcess/Plugins/DummyPlugin.h:
        Add empty stubs.
        
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        Implement NPN_GetURLNotify and have it call NetscapePlugin::loadURL.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin):
        Initialize m_nextRequestID to 0.

        (WebKit::NetscapePlugin::loadURL):
        Ask the plug-in controller to load the URL.

        (WebKit::NetscapePlugin::frameDidFinishLoading):
        (WebKit::NetscapePlugin::frameDidFail):
        Add empty stubs for now.

        * WebProcess/Plugins/Plugin.h:
        Add new member functions for frame load notifications.

        * WebProcess/Plugins/PluginController.h:
        Add loadURL.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::URLRequest::URLRequest):
        Add class that represents an URL request.

        (WebKit::PluginView::PluginView):
        Initialize m_pendingURLRequestsTimer.

        (WebKit::PluginView::~PluginView):
        Unset all active load listeners.

        (WebKit::PluginView::pendingURLRequestsTimerFired):
        Take the first request in the queue and process it.

        (WebKit::PluginView::performURLRequest):
        Call performFrameLoadURLRequest if necessary.

        (WebKit::PluginView::performFrameLoadURLRequest):
        Find a frame to load the request in. If a frame doesn't exist try to create a new frame.

        (WebKit::PluginView::loadURL):
        Create a URLRequest and add it to the queue.

        (WebKit::PluginView::didFinishLoad):
        Get the pending frame load request and call Plugin::frameDidFinishLoading.

        (WebKit::PluginView::didFailLoad):
        Get the pending frame load request and call Plugin::frameDidFail.

        * WebProcess/Plugins/PluginView.h:
        Inherit from WebFrame::LoadListener.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFailLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFinishLoad):
        (WebKit::WebFrameLoaderClient::didFinishLoad):
        Call the WebFrame's load listener if needed.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::WebFrame):
        Initialize m_loadListener to 0.

        * WebProcess/WebPage/WebFrame.h:
        Add a LoadListener class that the plug-in view can use to track frame loads.

        (WebKit::WebFrame::LoadListener::~LoadListener):
        (WebKit::WebFrame::setLoadListener):
        (WebKit::WebFrame::loadListener):

2010-07-13  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] [WebKit2] Hook up navigation actions
        https://bugs.webkit.org/show_bug.cgi?id=42183

        Make Back, Forward, Stop and Reload being enable/disabled according
        page loading.

        * UIProcess/API/qt/ClientImpl.cpp:
        (qt_wk_didStartProvisionalLoadForFrame):
        (qt_wk_didCommitLoadForFrame):
        (qt_wk_didFinishLoadForFrame):
        (qt_wk_didFailLoadWithErrorForFrame):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::updateAction):

2010-07-13  John Sullivan  <sullivan@apple.com>

        Written by Simon Fraser, reviewed by me.

        Cleaner fix for previous check-in.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::backListAsImmutableArrayWithLimit):
        Use std::max<int> for int-casting brevity.

2010-07-13  John Sullivan  <sullivan@apple.com>

        Reviewed by Sam Weinig.

        Fixed signed/unsigned problem that led to bogus contents in the array
        returned by WKBackForwardListCopyBackListWithLimit().

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::backListAsImmutableArrayWithLimit):
        Cast m_current and limit to signed values in std::max call.

2010-07-13  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Ada Chan.

        Fix missing resources causing layout test failures
        https://bugs.webkit.org/show_bug.cgi?id=42179
        
        Quick fix to get the layout tests going again.
        I'll work on getting resource.h from WebKit into a cross-project
        propagated header after this lands.

        * win/WebKit2.rc:
        * win/resource.h: Copied from WebKit/win/WebKit.vcproj/resource.h.

2010-07-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Make all NPN_ functions static.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:

2010-07-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Document the member functions of the abstract Plugin and PluginController classes.

        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginController.h:

2010-07-13  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Trivial build fix.

        Provide a stub for mimeTypeFromExtension() that uses notImplemented().

        * UIProcess/Plugins/qt/PluginInfoStoreQt.cpp:
        (WebKit::PluginInfoStore::mimeTypeFromExtension):

2010-07-13  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Tweaks needed to compile WebKit2 with Qt
        https://bugs.webkit.org/show_bug.cgi?id=41604

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::ProcessLauncherHelper::launch): Adjust to PassOwnPtr API changes.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h: Don't include JavaScriptCore.h,
        as it unconditionally includes JSStringRefCF. Instead include JavaScript.h.

2010-07-12  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.
        Don't build MiniBrowser except for Debug_Internal.

        * WebKit2.sln:

2010-07-12  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Maciej Stachowiak.

        Make WebKit2 be built by build-webkit (so it will be built by build.webkit.org bots)
        https://bugs.webkit.org/show_bug.cgi?id=40922
        
        Add additional dependent projects. Necessary since our WebKit build on
        Windows is packaged into a DLL with WebKit2.

        * WebKit2.sln:

2010-07-12  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Maciej Stachowiak.

        Fix WebKit2 to use the same compiler-selection logic as the other projects.

        * WebKit2.xcodeproj/project.pbxproj: Don't hard-code WebKit2 to build with GCC 4.2.

2010-07-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders Carlsson.

        WKView should override setFrameSize: instead of setFrame:
        https://bugs.webkit.org/show_bug.cgi?id=42127

        * UIProcess/API/mac/WKView.mm:
        (-[WKView setFrameSize:]): Override this method instead of setFrame:,
        since that is the right way to do it.

2010-07-12  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Alice Liu.

        <rdar://problem/8113038> WebKit1 and WebKit2 should build as a single DLL
        https://bugs.webkit.org/show_bug.cgi?id=40921
        
        Pre-WebKit2 WebKit now builds into a static library named WebKitLib.lib.
        WebKit.dll now links in WebCore.lib, WebKitLib.lib and WebKit2 code.

        This is a first step. We'll likely want to migrate the remainder of
        the non-deprecated WebKit code (strings, DLLMain, resources) into WebKit2.

        * UIProcess/API/C/WKBase.h: Updated to new BUILDING_ name.
        * WebProcess/InjectedBundle/API/c/WKBundleBase.h: Updated to new BUILDING_ name.
        * WebProcess/WebCoreSupport/win/WebCoreLocalizedStrings.cpp: Removed.
        * WebProcess/win/DllMain.cpp: Removed. Overlaps with implementation in WebKitLib.lib.
        * WebProcess/win/WebLocalizableStrings.cpp: Removed. Overlaps with implementation in WebKitLib.lib.
        * WebProcess/win/WebLocalizableStrings.h: Removed. Overlaps with implementation in WebKitLib.lib.
        * win/WebKit2.def: Added. Copied from WebKit project.
        * win/WebKit2.rc: Added resources previously in WebKit.
        * win/WebKit2.vcproj: Changed project name to WebKit so we will link output to WebKit.dll.
        Removed implementations overlapping with WebKitLib (WebCoreLocalizedStrings, DllMain, WebLocalizableStrings, WebProcessMain).
        * win/WebKit2Common.vsprops: Use a framework name of WebKit instead of WebKit2 to reflect project name.
        Renamed BUILDING_WEBKIT2 to BUILDING_WEBKIT since there is now just a single WebKit.dll.
        * win/WebKit2WebProcess.vcproj: Link against WebKit instead of WebKit2 due to renaming.        
        * win/deleteButton.png: Copied from ../WebKit/win/WebKit.vcproj/deleteButton.png.
        * win/deleteButtonPressed.png: Copied from ../WebKit/win/WebKit.vcproj/deleteButtonPressed.png.
        * win/fsVideoAudioVolumeHigh.png: Copied from ../WebKit/win/WebKit.vcproj/fsVideoAudioVolumeHigh.png.
        * win/fsVideoAudioVolumeLow.png: Copied from ../WebKit/win/WebKit.vcproj/fsVideoAudioVolumeLow.png.
        * win/fsVideoExitFullscreen.png: Copied from ../WebKit/win/WebKit.vcproj/fsVideoExitFullscreen.png.
        * win/fsVideoPause.png: Copied from ../WebKit/win/WebKit.vcproj/fsVideoPause.png.
        * win/fsVideoPlay.png: Copied from ../WebKit/win/WebKit.vcproj/fsVideoPlay.png.
        * win/missingImage.png: Copied from ../WebKit/win/WebKit.vcproj/missingImage.png.
        * win/nullplugin.png: Copied from ../WebKit/win/WebKit.vcproj/nullplugin.png.
        * win/panEastCursor.png: Copied from ../WebKit/win/WebKit.vcproj/panEastCursor.png.
        * win/panIcon.png: Copied from ../WebKit/win/WebKit.vcproj/panIcon.png.
        * win/panNorthCursor.png: Copied from ../WebKit/win/WebKit.vcproj/panNorthCursor.png.
        * win/panNorthEastCursor.png: Copied from ../WebKit/win/WebKit.vcproj/panNorthEastCursor.png.
        * win/panNorthWestCursor.png: Copied from ../WebKit/win/WebKit.vcproj/panNorthWestCursor.png.
        * win/panSouthCursor.png: Copied from ../WebKit/win/WebKit.vcproj/panSouthCursor.png.
        * win/panSouthEastCursor.png: Copied from ../WebKit/win/WebKit.vcproj/panSouthEastCursor.png.
        * win/panSouthWestCursor.png: Copied from ../WebKit/win/WebKit.vcproj/panSouthWestCursor.png.
        * win/panWestCursor.png: Copied from ../WebKit/win/WebKit.vcproj/panWestCursor.png.
        * win/searchCancel.png: Copied from ../WebKit/win/WebKit.vcproj/searchCancel.png.
        * win/searchCancelPressed.png: Copied from ../WebKit/win/WebKit.vcproj/searchCancelPressed.png.
        * win/searchMagnifier.png: Copied from ../WebKit/win/WebKit.vcproj/searchMagnifier.png.
        * win/searchMagnifierResults.png: Copied from ../WebKit/win/WebKit.vcproj/searchMagnifierResults.png.
        * win/textAreaResizeCorner.png: Copied from ../WebKit/win/WebKit.vcproj/textAreaResizeCorner.png.
        * win/verticalTextCursor.png: Copied from ../WebKit/win/WebKit.vcproj/verticalTextCursor.png.
        * win/zoomInCursor.png: Copied from ../WebKit/win/WebKit.vcproj/zoomInCursor.png.
        * win/zoomOutCursor.png: Copied from ../WebKit/win/WebKit.vcproj/zoomOutCursor.png.

2010-07-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders Carlsson.

        Get rid of auto_ptr use in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42119
        
        Replace all use of auto_ptr with OwnPtr/PassOwnPtr.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendMessage):
        (CoreIPC::Connection::waitForMessage):
        (CoreIPC::Connection::sendSyncMessage):
        (CoreIPC::Connection::processIncomingMessage):
        (CoreIPC::Connection::sendOutgoingMessages):
        (CoreIPC::Connection::dispatchMessages):
        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::Message::Message):
        (CoreIPC::Connection::send):
        (CoreIPC::Connection::sendSync):
        (CoreIPC::Connection::waitFor):
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::sendOutgoingMessage):
        (CoreIPC::createArgumentDecoder):
        (CoreIPC::Connection::receiveSourceEventHandler):
        * Platform/CoreIPC/qt/ConnectionQt.cpp:
        (CoreIPC::Connection::readyReadHandler):
        (CoreIPC::Connection::sendOutgoingMessage):
        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::readEventHandler):
        (CoreIPC::Connection::sendOutgoingMessage):
        * Platform/RunLoop.cpp:
        (RunLoop::performWork):
        (RunLoop::scheduleWork):
        * Platform/RunLoop.h:
        * Platform/WorkItem.h:
        (WorkItem::create):
        * Platform/WorkQueue.h:
        * Platform/mac/WorkQueueMac.cpp:
        (WorkQueue::executeWorkItem):
        (WorkQueue::scheduleWork):
        (WorkQueue::EventSource::EventSource):
        (WorkQueue::registerMachPortEventHandler):
        * Platform/qt/WorkQueueQt.cpp:
        (WorkQueue::connectSignal):
        (WorkQueue::scheduleWork):
        * Platform/win/WorkQueueWin.cpp:
        (WorkQueue::registerHandle):
        (WorkQueue::scheduleWork):
        (WorkQueue::performWork):
        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::paint):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::sendMessage):
        (WebKit::WebProcessProxy::didFinishLaunching):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::send):

2010-07-12  Ada Chan  <adachan@apple.com>

        Build fix.  Copy WKArray.h to the include directory.

        * win/WebKit2Generated.make:

2010-07-12  Mark Rowe  <mrowe@apple.com>

        Re-do an Xcode project change that Xcode decided not to save.

        * WebKit2.xcodeproj/project.pbxproj: Remove WebKit2.exp from the project.
        For some reason it was being copied in to the framework wrapper.

2010-07-12  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Remove the exports file from WebKit2.

        * Configurations/Base.xcconfig: Have symbols default to hidden visibility.
        * Configurations/WebKit2.xcconfig: Remove the export file.
        * UIProcess/API/mac/WKView.h: Export the WKView class.
        * WebProcess/WebKitMain.cpp: Export the WebKitMain function.
        * mac/WebKit2.exp: Removed.

2010-07-12  Adam Roben  <aroben@apple.com>

        Move WebKit2.vcproj's settings into .vsprops files

        This makes it easier to make changes that affect all configurations.

        Fixes <http://webkit.org/b/42097> WebKit2 should use .vsprops files

        Reviewed by Steve Falkenburg.

        * win/WebKit2.vcproj: Moved settings from here to the files below.
        * win/WebKit2Apple.vsprops: Added. Links against Apple-specific
        libraries.
        * win/WebKit2CFLite.vsprops: Added. Links against CFLite.
        * win/WebKit2Common.vsprops: Added. Contains settings shared by all
        configurations.
        * win/WebKit2DirectX.vsprops: Added. Contains settings to help with
        linking against DirectX.

2010-07-12  Adam Roben  <aroben@apple.com>

        Stop generating stripped symbols for Release builds

        It turns out we can strip the symbols after-the-fact using PDBCopy.

        Fixes <http://webkit.org/b/42085>.

        Reviewed by Steve Falkenburg.

        * win/WebKit2.vcproj: Removed the no-longer-needed Release override of
        the StripPrivateSymbols attribute. (This attribute is no longer set in
        release.vsprops, so doesn't need to be overridden.)

2010-07-12  Brian Weinstein  <bweinstein@apple.com>

        WebKit2 build fix for Windows.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp: Remove some stub function definitions.
        * win/WebKit2.vcproj: Add PluginController.h to the vcproj.

2010-07-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Add a PluginController class, use it for invalidation and getting the user agent
        https://bugs.webkit.org/show_bug.cgi?id=42084

        * WebKit2.xcodeproj/project.pbxproj:
        Add PluginController.h

        * WebProcess/Plugins/DummyPlugin.cpp:
        (WebKit::DummyPlugin::initialize):
        * WebProcess/Plugins/DummyPlugin.h:
        Pass the PluginController to initialize.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        Implement NPN_UserAgent, NPN_MemAlloc, NPN_MemFree, NPN_InvalidateRect and NPN_InvalidateRegion.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin):
        Initialize m_pluginController to null.

        (WebKit::NetscapePlugin::invalidate):
        Ask the plug-in controller to invalidate.

        (WebKit::NetscapePlugin::userAgent):´
        Ask the plug-in controller for the user agent.

        (WebKit::NetscapePlugin::initialize):
        Set the m_pluginController member variable.

        * WebProcess/Plugins/Plugin.h:
        Make initialize take a PluginController.

        * WebProcess/Plugins/PluginController.h: Added.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::initializePlugin):
        Pass the PluginController to initialize.

        (WebKit::PluginView::invalidateRect):
        Tell the host window to invalidate the given rect.

        (WebKit::PluginView::invalidate):
        Call invalidateRect.

        (WebKit::PluginView::userAgent):
        Ask the frame loader client for the user agent.

        * WebProcess/Plugins/PluginView.h:

2010-07-12  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebProcess/Plugins/Netscape/win/NetscapePluginModuleWin.cpp: Added.
        (WebKit::NetscapePluginModule::tryLoad):
        (WebKit::NetscapePluginModule::unload):
        Stubbed these out.

        * win/WebKit2.vcproj: Added a Netscape filter beneath
        WebProcess/Plugins, and moved NetscapePlugin into it. Added
        NetscapePluginModule to the new Netscape filter. Added
        WebProcess/Plugins to the include path for all configurations (it was
        only added to Release and Debug_Internal previously) and added
        WebProcess/Plugins/Netscape to the include path for all
        configurations.

2010-07-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        Implement animation-related methods for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=42053

        Implemented some helpers for WebKitTestRunner;
        
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameGetNumberOfActiveAnimations):
        (WKBundleFramePauseAnimationOnElementWithId):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::numberOfActiveAnimations):
        (WebKit::WebFrame::pauseAnimationOnElementWithId):
        * WebProcess/WebPage/WebFrame.h:
        * mac/WebKit2.exp:

2010-07-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Don't initialize plug-ins until allowed by the page
        https://bugs.webkit.org/show_bug.cgi?id=42033

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::paint):
        (WebKit::NetscapePlugin::geometryDidChange):
        Assert that the plug-in is started.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::PluginView):
        Initialize m_isWaitingUntilMediaCanStart.
        
        (WebKit::PluginView::~PluginView):
        If necessary, remove the plug-in view as a MediaCanStartListener.

        (WebKit::PluginView::initializePlugin):
        If we're not allowed to initialize the plug-in, add the plug-in view as a MediaCanStartListener.

        (WebKit::PluginView::paint):
        Check that the plug-in is initialized.

        (WebKit::PluginView::viewGeometryDidChange):
        Ditto.

        (WebKit::PluginView::mediaCanStart):
        Initialize the plug-in.

        * WebProcess/Plugins/PluginView.h:

2010-07-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Have the plug-in view initialize the plug-in
        https://bugs.webkit.org/show_bug.cgi?id=42030

        * WebProcess/Plugins/DummyPlugin.cpp:
        (WebKit::DummyPlugin::initialize):
        * WebProcess/Plugins/DummyPlugin.h:
        Plugin::initialize now takes a struct.
        
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::initialize):        
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        Plugin::initialize now takes a struct.
        
        * WebProcess/Plugins/Plugin.h:
        Add Parameters struct.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::PluginView):
        Add Parameters parameter.

        (WebKit::PluginView::~PluginView):
        Add m_plugin null check.

        (WebKit::PluginView::initializePlugin):
        Try to initialize the plug-in and zero out the plug-in if initialization fails.

        (WebKit::PluginView::paint):
        Add m_plugin null check.
        
        (WebKit::PluginView::setParent):
        Initialize the plug-in.
    
        * WebProcess/Plugins/PluginView.h:
        (WebKit::PluginView::create):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin):
        Don't initialize the plug-in here.

2010-07-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver Hunt.

        Call Page::canStartMedia when the WKView is added to/removed from a window
        https://bugs.webkit.org/show_bug.cgi?id=42029

        * Shared/CoreIPCSupport/WebPageMessageKinds.h:
        (WebPageMessage::):
        Add SetIsInWindow.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:pageNamespaceRef:]):
        Call setIsInWindow.

        (-[WKView _updateVisibility]):
        Call setIsInWindow.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        Initialize m_isInWindow.

        (WebKit::WebPageProxy::setIsInWindow):
        Send WebPageMessage::SetIsInWindow.

        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setIsInWindow):
        Call Page::canStartMedia.

        (WebKit::WebPage::didReceiveMessage):
        Handle the SetIsInWindow message.

        * WebProcess/WebPage/WebPage.h:

2010-07-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Reuse initialized NetscapePluginModules, pass parameters to NPP_New
        https://bugs.webkit.org/show_bug.cgi?id=42028

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin):
        Let the plug-in module know that a plug-in has been created.

        (WebKit::NetscapePlugin::~NetscapePlugin):
        Let the plug-in module know that a plug-in has been destroyed.

        (WebKit::NetscapePlugin::initialize):
        Pass the MIME type and parameters to the plug-in.

        * WebProcess/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::initializedNetscapePluginModules):
        Add list of initialized plug-in modules.

        (WebKit::NetscapePluginModule::NetscapePluginModule):
        Initialize m_pluginCount to 0.

        (WebKit::NetscapePluginModule::~NetscapePluginModule):
        Assert that we're not in the list of initialized plug-ins.

        (WebKit::NetscapePluginModule::pluginCreated):
        Increment the plug-in count.

        (WebKit::NetscapePluginModule::pluginDestroyed):
        Decrement the plug-in count and call shutdown if it's 0.

        (WebKit::NetscapePluginModule::shutdown):
        Call NP_Shutdown and remove the plug-in from the list of initialized plug-ins.

        (WebKit::NetscapePluginModule::getOrCreate):
        Look for an already initialized plug-in module before creating one.

        (WebKit::NetscapePluginModule::load):
        Set m_isInitialized to true.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginModuleMac.cpp:
        (WebKit::NetscapePluginModule::unload):
        Leak the CFBundleRef to avoid possible crashes.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin):
        Call getOrCreate instead of create.

2010-07-09  Leon Clarke  <leonclarke@google.com>

        Reviewed by Adam Barth.

        add support for link prefetching
        https://bugs.webkit.org/show_bug.cgi?id=3652

        * Configurations/FeatureDefines.xcconfig:

2010-07-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig and Dan Bernstein.

        Handle setting of drawing and event models
        https://bugs.webkit.org/show_bug.cgi?id=41994

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        Handle NPPVpluginDrawingModel and NPPVpluginEventModel.

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

        (WebKit::NetscapePlugin::~NetscapePlugin):
        Assert that we aren't still running.

        (WebKit::NetscapePlugin::fromNPP):
        New function that returns a NetscapePlugin object given a NPP pointer.

        (WebKit::NetscapePlugin::initialize):
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.cpp:
        (WebKit::NetscapePlugin::setDrawingModel):
        Set the drawing model.

        (WebKit::NetscapePlugin::setEventModel):
        Set the event model.

        (WebKit::initializeEvent):
        (WebKit::NetscapePlugin::platformPaint):
        Only send the Cocoa event when using the Cocoa event model.

2010-07-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41971
        Add really basic BackForwardList support.

        * Shared/CoreIPCSupport/WebPageMessageKinds.h:
        (WebPageMessage::):
        Add new message kind.

        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h:
        (WebPageProxyMessage::):
        Add new message kinds. Remove DidChangeCanGoBack and DidChangeCanGoForward.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGoToBackForwardListItem):
        * UIProcess/API/C/WKPage.h:
        Add function to initiate a navigation to a BackForward item.  The
        BackForward list will be updated to use this as the current item
        asynchronously. 

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::WebBackForwardList):
        (WebKit::WebBackForwardList::addItem): Added.
        (WebKit::WebBackForwardList::goToItem): Added.
        (WebKit::WebBackForwardList::itemAtIndex): Added.
        (WebKit::WebBackForwardList::backListCount): Changed to return int matching WebCore.
        (WebKit::WebBackForwardList::forwardListCount): Ditto.
        (WebKit::WebBackForwardList::backListWithLimit): Add cast to int.
        (WebKit::WebBackForwardList::forwardListWithLimit): Ditto.
        (WebKit::WebBackForwardList::backListAsImmutableArrayWithLimit): Ditto.
        (WebKit::WebBackForwardList::forwardListAsImmutableArrayWithLimit): Ditto.
        * UIProcess/WebBackForwardList.h:

        * UIProcess/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::WebBackForwardListItem):
        * UIProcess/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::create):
        (WebKit::WebBackForwardListItem::itemID):
        Added itemID.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::canGoForward):
        (WebKit::WebPageProxy::canGoBack):
        (WebKit::WebPageProxy::goToBackForwardItem):
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::didReceiveSyncMessage):
        (WebKit::WebPageProxy::addItemToBackForwardList):
        (WebKit::WebPageProxy::goToItemInBackForwardList):
        (WebKit::WebPageProxy::processDidExit):
        * UIProcess/WebPageProxy.h:
        - Removed m_canGoBack and m_canGoForward booleans and instead use the BackForwardList.
        - Forward goToBackForwardItem to the WebProcess.
        - Respond to messages from the WebBackForwardListProxy in the WebProcess,
          forwarding to the WebBackForwardList.

        * WebProcess/WebCoreSupport/WebBackForwardControllerClient.cpp:
        (WebKit::WebBackForwardControllerClient::createBackForwardList):
        Start using a WebBackForwardListProxy instead of a BackForwardListImpl.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidAddBackForwardItem):
        (WebKit::WebFrameLoaderClient::dispatchDidRemoveBackForwardItem):
        (WebKit::WebFrameLoaderClient::dispatchDidChangeBackForwardIndex):
        Remove calls backForwardListDidChange() now that we communicate much more
        information than just this state.

        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::idToHistoryItemMap):
        (WebKit::historyItemToIDMap):
        (WebKit::generateHistoryItemID):
        (WebKit::getIDForHistoryItem):
        (WebKit::WebBackForwardListProxy::itemForID):
        Add leaking cached maps of HistoryItems to IDs, the life time of these
        objects will be improved in a subsequent patch.

        (WebKit::WebBackForwardListProxy::WebBackForwardListProxy):
        (WebKit::WebBackForwardListProxy::addItem):
        (WebKit::WebBackForwardListProxy::goBack):
        (WebKit::WebBackForwardListProxy::goForward):
        (WebKit::WebBackForwardListProxy::goToItem):
        (WebKit::WebBackForwardListProxy::backItem):
        (WebKit::WebBackForwardListProxy::currentItem):
        (WebKit::WebBackForwardListProxy::forwardItem):
        (WebKit::WebBackForwardListProxy::itemAtIndex):
        (WebKit::WebBackForwardListProxy::backListWithLimit):
        (WebKit::WebBackForwardListProxy::forwardListWithLimit):
        (WebKit::WebBackForwardListProxy::capacity):
        (WebKit::WebBackForwardListProxy::setCapacity):
        (WebKit::WebBackForwardListProxy::enabled):
        (WebKit::WebBackForwardListProxy::setEnabled):
        (WebKit::WebBackForwardListProxy::backListCount):
        (WebKit::WebBackForwardListProxy::forwardListCount):
        (WebKit::WebBackForwardListProxy::containsItem):
        (WebKit::WebBackForwardListProxy::close):
        (WebKit::WebBackForwardListProxy::closed):
        (WebKit::WebBackForwardListProxy::removeItem):
        (WebKit::WebBackForwardListProxy::entries):
        (WebKit::WebBackForwardListProxy::pushStateItem):
        * WebProcess/WebPage/WebBackForwardListProxy.h:
        Forward functions to the UIProcess.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::goToBackForwardItem):
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebPage/WebPage.h:
        Respond to GoToBackForwardItem message.

        * mac/WebKit2.exp: Add new API function.

2010-07-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Verify drawing coordinates, add crude painting support
        https://bugs.webkit.org/show_bug.cgi?id=41984
    
        * WebKit2.xcodeproj/project.pbxproj:
        Add NetscapePluginMac.cpp.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin):
        Initialize drawing and event models.

        (WebKit::NetscapePlugin::initialize):
        Call platformPostInitialize.

        (WebKit::NetscapePlugin::destroy):
        Call NPP_Destroy.

        (WebKit::NetscapePlugin::paint):
        Call platformPaint.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        Add member functions.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.cpp: Added.
        (WebKit::NetscapePlugin::platformPostInitialize):
        Set default event and drawing models and verify that they are compatible.
        
        (WebKit::NetscapePlugin::platformPaint):
        Send a paint event (assuming the Cocoa event model currently).

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::paint):
        Change the paint rect to be in window coordinates.

        (WebKit::PluginView::viewGeometryDidChange):
        (WebKit::PluginView::clipRectInWindowCoordinates):
        * WebProcess/Plugins/PluginView.h:

2010-07-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Pass a clip rect to the plugin and call NPP_SetWindow
        https://bugs.webkit.org/show_bug.cgi?id=41969

        * WebProcess/Plugins/DummyPlugin.cpp:
        (WebKit::DummyPlugin::geometryDidChange):
        * WebProcess/Plugins/DummyPlugin.h:
        Add clip rect parameter.

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

        (WebKit::NetscapePlugin::callSetWindow):
        Call NPP_SetWindow.

        (WebKit::NetscapePlugin::initialize):
        Set the window type to NPWindowTypeDrawable for now.

        (WebKit::NetscapePlugin::geometryDidChange):
        Update the frame and clip rects and call NPP_SetWindow.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        Add an NPWindow member variable.

        * WebProcess/Plugins/Plugin.h:
        Add a clipRect parameter to geometryDidChange.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::PluginView):
        Add the plug-in element to the constructor.
        
        (WebKit::PluginView::viewGeometryDidChange):
        Compute the clip rect and pass it to the plug-in.

        * WebProcess/Plugins/PluginView.h:
        (WebKit::PluginView::create):
        Pass the plug-in element to the constructor.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin):
        Pass the plug-in element to PluginView::create.

2010-07-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Simon Fraser.

        Instantiate Netscape plug-ins, pass geometry information to Plugin
        https://bugs.webkit.org/show_bug.cgi?id=41960

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        Handle NPNVsupportsCoreGraphicsBool and NPNVsupportsCocoaBool.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin):
        Set npp.ndata.

        (WebKit::NetscapePlugin::initialize):
        Try to instantiate the plug-in by calling NPP_New.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        Store the NetscapePluginModule and the NPP struct.

        * WebProcess/Plugins/Netscape/NetscapePluginModule.h:
        Add a getter for the NPPluginFuncs vtable.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::frameRectsChanged):
        Make sure to call viewGeometryDidChange.

        (WebKit::PluginView::setParent):
        Ditto.

        (WebKit::PluginView::viewGeometryDidChange):
        Convert the frame rect to window coordinates and pass it to the plug-in.

        * WebProcess/Plugins/PluginView.h:
        Add function declarations.

2010-07-08  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] [WebKit2] Make QWKPage call _q_webActionTriggered as a private slot
        https://bugs.webkit.org/show_bug.cgi?id=41880

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

2010-07-09  Antti Koivisto  <koivisto@iki.fi>

        Not reviewed.

        Build fix.

        * UIProcess/API/qt/qwkpage.h:

2010-07-08  Brian Weinstein  <bweinstein@apple.com>

        WebKit2 build fix for Windows.

        * WebProcess/Plugins/PluginView.h: Change the forward declaration of Plugin
            to an include.
        * win/WebKit2.vcproj: Update the include paths for Release to match Debug, and
            add some files to the vcproj that were added on Mac.

2010-07-08  Sam Weinig  <sam@webkit.org>

        Attempt to fix the windows build.

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

2010-07-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add NetscapePlugin class
        https://bugs.webkit.org/show_bug.cgi?id=41919

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp: Added.
        (WebKit::NetscapePlugin::NetscapePlugin):
        (WebKit::NetscapePlugin::~NetscapePlugin):
        (WebKit::NetscapePlugin::initialize):
        (WebKit::NetscapePlugin::destroy):
        (WebKit::NetscapePlugin::paint):
        (WebKit::NetscapePlugin::geometryDidChange):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h: Added.
        (WebKit::NetscapePlugin::create):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin):

2010-07-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Enable notImplemented messages by default and have the various clients explicitly disable them.

        * Shared/NotImplemented.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:

2010-07-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add stubbed out NPN functions
        https://bugs.webkit.org/show_bug.cgi?id=41917

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp: Added.
        (WebKit::initializeBrowserFuncs):
        (WebKit::netscapeBrowserFuncs):
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.h: Added.
        * WebProcess/Plugins/Netscape/mac/NetscapePluginModuleMac.cpp:
        (WebKit::NetscapePluginModule::tryLoad):

2010-07-08  Anders Carlsson  <andersca@apple.com>

        Fix Windows build.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:

2010-07-08  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Spelling and style correction
        https://bugs.webkit.org/show_bug.cgi?id=41891

        Correcting a spelling and a style mistakes.

        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:

2010-07-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement more of NetscapePluginModule
        https://bugs.webkit.org/show_bug.cgi?id=41910

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::create):
        (WebKit::NetscapePluginModule::load):
        * WebProcess/Plugins/Netscape/NetscapePluginModule.h:
        * WebProcess/Plugins/Netscape/mac/NetscapePluginModuleMac.cpp: Added.
        (WebKit::NetscapePluginModule::unload):
        (WebKit::pointerToFunction):
        (WebKit::NetscapePluginModule::tryLoad):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin):

2010-07-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add stubbed out NetscapePluginModule class
        https://bugs.webkit.org/show_bug.cgi?id=41901

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/Netscape/NetscapePluginModule.cpp: Added.
        (WebKit::NetscapePluginModule::NetscapePluginModule):
        * WebProcess/Plugins/Netscape/NetscapePluginModule.h: Added.
        (WebKit::NetscapePluginModule::create):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin):

2010-07-08  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Move socket objects to connection's thread
        https://bugs.webkit.org/show_bug.cgi?id=41897

        To receive network related notifications in the WorkQueue thread, the
        QLocalSocket instances must be moved to that thread.

        * Platform/CoreIPC/qt/ConnectionQt.cpp:
        (CoreIPC::Connection::open):
        * Platform/WorkQueue.h:
        * Platform/qt/WorkQueueQt.cpp:
        (WorkQueue::moveSocketToWorkThread):

2010-07-08  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=41653
        Add new WebKitTestRunner project for Windows

        * win/WebKit2Generated.make: Add files needed for WebKitTestRunner

2010-07-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add a GetPluginHostConnection WebProcessProxy message
        https://bugs.webkit.org/show_bug.cgi?id=41893
        
        * Shared/CoreIPCSupport/WebProcessProxyMessageKinds.h:
        (WebProcessProxyMessage::):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPluginHostConnection):
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        * UIProcess/WebProcessProxy.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin):

2010-07-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add more parameters to Plugin::initialize
        https://bugs.webkit.org/show_bug.cgi?id=41890

        * WebProcess/Plugins/DummyPlugin.cpp:
        (WebKit::DummyPlugin::initialize):
        * WebProcess/Plugins/DummyPlugin.h:
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin):

2010-07-08  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * WebProcess/Plugins/DummyPlugin.h:

2010-07-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add a Plugin abstract base class and a DummyPlugin that implements it
        https://bugs.webkit.org/show_bug.cgi?id=41885

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

        * WebProcess/Plugins/DummyPlugin.cpp: Added.
        (WebKit::DummyPlugin::paint):
        Paint a red rectangle.
        
        * WebProcess/Plugins/Plugin.cpp: Added.
        * WebProcess/Plugins/Plugin.h: Added.
        Add Plugin, an abstract baseclass.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::PluginView):
        (WebKit::PluginView::~PluginView):
        (WebKit::PluginView::paint):
        (WebKit::PluginView::viewGeometryDidChange):
        * WebProcess/Plugins/PluginView.h:
        (WebKit::PluginView::create):
        Add a Plugin member function and forward PluginView calls to it.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin):
        Make a DummyPlugin and pass it to the PluginView.

        * win/WebKit2.vcproj:
        Add files.
        
2010-07-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add stubbed out PluginView class
        https://bugs.webkit.org/show_bug.cgi?id=41879

        * WebKit2.xcodeproj/project.pbxproj:
        Add PluginView.cpp and PluginView.h

        * WebProcess/Plugins/PluginView.cpp: Added.
        (WebKit::PluginView::PluginView):
        (WebKit::PluginView::~PluginView):
        (WebKit::PluginView::setFrameRect):
        (WebKit::PluginView::paint):
        (WebKit::PluginView::viewGeometryDidChange):
        (WebKit::PluginView::invalidateRect):
        Stub out these functions.

        * WebProcess/Plugins/PluginView.h: Added.
        (WebKit::PluginView::create):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin):
        Create a plug-in view.
        
        * win/WebKit2.vcproj:
        Add PluginView.cpp and PluginView.h.

2010-07-08  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WebKit2 on Windows needs a version resource
        https://bugs.webkit.org/show_bug.cgi?id=41870
        <rdar://problem/8170501>

        * win/WebKit2.rc: Added.
        * win/WebKit2.vcproj:
        * win/WebKit2WebProcess.rc: Added.
        * win/WebKit2WebProcess.vcproj:

2010-07-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41874
        Add stubbed out WebBackForwardListProxy

        - No behavior change.
        - Rename the old WebBackForwardListProxy to WebBackForwardList since it
          will be the implementation, not the proxy.

        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKBackForwardList.cpp:
        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/WebBackForwardList.cpp: Copied from UIProcess/WebBackForwardListProxy.cpp.
        * UIProcess/WebBackForwardList.h: Copied from UIProcess/WebBackForwardListProxy.h.
        (WebKit::WebBackForwardList::create):
        * UIProcess/WebBackForwardListProxy.cpp: Removed.
        * UIProcess/WebBackForwardListProxy.h: Removed.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::backForwardList):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebBackForwardListProxy.cpp: Added.
        * WebProcess/WebPage/WebBackForwardListProxy.h: Added.
        (WebKit::WebBackForwardListProxy::create):
        * win/WebKit2.vcproj:

2010-07-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Pass Page to BackForwardControllerClient::createBackForwardList since it
        may be called before implementations of BackForwardControllerClient have
        access to a Page.

        * WebProcess/WebCoreSupport/WebBackForwardControllerClient.cpp:
        (WebKit::WebBackForwardControllerClient::createBackForwardList):
        * WebProcess/WebCoreSupport/WebBackForwardControllerClient.h:

2010-07-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Fix fallout from Darin's adoptRef assertion changes.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::sharedProcessContext):
        (WebKit::WebContext::sharedThreadContext):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createMainFrame):
        (WebKit::WebFrame::createSubframe):
        (WebKit::WebFrame::create):
        (WebKit::WebFrame::WebFrame):
        * WebProcess/WebPage/WebFrame.h:

2010-07-08  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Mark Rowe.

        WebKit2 should enable DEP (Data Execution Prevention) on Windows via /NXCOMPAT
        https://bugs.webkit.org/show_bug.cgi?id=41837
        <rdar://problem/8170505>

        * win/WebKit2WebProcess.vcproj:

2010-07-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41826
        Convert BackForwardList to an abstract base class and add BackForwardListImpl
        as the concrete implementation of it.

        * WebProcess/WebCoreSupport/WebBackForwardControllerClient.cpp:
        (WebKit::WebBackForwardControllerClient::createBackForwardList):

2010-07-08  Luiz Agostini  <luiz@webkit.org>, Kenneth Rohde Christiansen <kenneth@webkit.org>

        Reviewed by Antti Koivisto.

        [Qt] Improve QtWebkit2 secondary process launching procedure
        https://bugs.webkit.org/show_bug.cgi?id=41853

        Changing secondary process launching procedure to make sure that the method
        ProcessLauncher::didFinishLaunchingProcess will only be called after secondary
        process has been launched and the connection has been stablished between the
        UIProcess and WebProcess.

        This solves the timing issues ocasionaly observed when launching MiniBrowser.

        QLocalServer object and related code has been removed from the class Connection.
        Server instances of the Connection class now get the QLocalSocket via ProcessLauncher.

        * Platform/CoreIPC/Connection.h:
        * Platform/CoreIPC/qt/ConnectionQt.cpp:
        (CoreIPC::Connection::platformInitialize):
        (CoreIPC::Connection::platformInvalidate):
        (CoreIPC::Connection::open):

        Using QProcess* as PlatformProcessIdentifier.

        * Platform/PlatformProcessIdentifier.h:

        A new singleton class named ProcessLauncherHelper was created to handle the QLocalServer
        object used to receive connections. This class launches the process and waits for it to connect
        before calling ProcessLauncher::didFinishLaunchingProcess.

        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::ProcessLauncherHelper::launch):
        (WebKit::ProcessLauncherHelper::takePendingConnection):
        (WebKit::ProcessLauncherHelper::ProcessLauncherHelper):
        (WebKit::ProcessLauncherHelper::instance):
        (WebKit::ProcessLauncherHelper::newConnection):
        (WebKit::ProcessLauncher::launchProcess):
        (WebKit::ProcessLauncher::terminateProcess):
        (_qt_takePendingConnection):

2010-07-08  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Initial WebKit2 implementation
        https://bugs.webkit.org/show_bug.cgi?id=40233
    
        Random build fixes.

        * Shared/qt/WebEventFactoryQt.cpp:
        * UIProcess/API/qt/ClientImpl.cpp:
        * UIProcess/API/qt/qwkpage.cpp:
        * UIProcess/API/qt/qwkpage.h:
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/qt/ChunkedUpdateDrawingAreaProxyQt.cpp:
        * WebProcess/WebProcess.cpp:

2010-07-07  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Terminate QtWebProcess on exit
        https://bugs.webkit.org/show_bug.cgi?id=41766

        Call WKPageTerminate to terminate QtWebProcess on exit.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::~QWKPage):

2010-07-07  Steve Falkenburg  <sfalken@apple.com>

        Windows release build fix.
        Don't generate public symbols since this is exceeding address space on our builders.

        * win/WebKit2.vcproj:

2010-07-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41772
        Add basic piping for BackForwardControllerClient.

        - Add very basic WebBackForwardControllerClient.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebBackForwardControllerClient.cpp: Added.
        (WebKit::WebBackForwardControllerClient::backForwardControllerDestroyed):
        (WebKit::WebBackForwardControllerClient::createBackForwardList):
        * WebProcess/WebCoreSupport/WebBackForwardControllerClient.h: Added.
        (WebKit::WebBackForwardControllerClient::WebBackForwardControllerClient):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * win/WebKit2.vcproj:

2010-07-07  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Initial WebKit2 implementation
        https://bugs.webkit.org/show_bug.cgi?id=40233
        
        Add Qt section to the prefix header.

        * WebKit2Prefix.h:

2010-07-07  Antti Koivisto  <koivisto@iki.fi>

        Not reviewed.

        Fix build, remove some left over debugging code.

        * Platform/CoreIPC/qt/ConnectionQt.cpp:
        (CoreIPC::Connection::readyReadHandler):
        (CoreIPC::Connection::sendOutgoingMessage):

2010-07-07  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Initial WebKit2 implementation
        https://bugs.webkit.org/show_bug.cgi?id=40233
        
        Implement WebPage for Qt.

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


2010-07-06  Anders Carlsson  <andersca@apple.com>

        Fix Windows WebKit2 build.

        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        (WebKit::PluginInfoStore::mimeTypeFromExtension):

2010-07-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add PluginInfoStore::findPlugin
        https://bugs.webkit.org/show_bug.cgi?id=41719

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::getPlugins):
        (WebKit::PluginInfoStore::findPluginForMIMEType):
        (WebKit::PluginInfoStore::findPluginForExtension):
        (WebKit::pathExtension):
        (WebKit::PluginInfoStore::findPlugin):
        * UIProcess/Plugins/PluginInfoStore.h:
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::mimeTypeFromExtension):

2010-07-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add injected bundle API for exposing console messages.

        - Split WKBundlePageClient into multiple clients matching WKPage.
          (For now we only have a loader client and a UI client)

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetLoaderClient):
        (WKBundlePageSetUIClient):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageClient.cpp: Removed.
        * WebProcess/InjectedBundle/InjectedBundlePageClient.h: Removed.
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp: Copied from WebProcess/InjectedBundle/InjectedBundlePageClient.cpp.
        (WebKit::InjectedBundlePageLoaderClient::InjectedBundlePageLoaderClient):
        (WebKit::InjectedBundlePageLoaderClient::initialize):
        (WebKit::InjectedBundlePageLoaderClient::didStartProvisionalLoadForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didFailProvisionalLoadWithErrorForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didCommitLoadForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didFinishLoadForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didFailLoadWithErrorForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didReceiveTitleForFrame):
        (WebKit::InjectedBundlePageLoaderClient::didClearWindowObjectForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h: Copied from WebProcess/InjectedBundle/InjectedBundlePageClient.h.
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp: Added.
        (WebKit::InjectedBundlePageUIClient::InjectedBundlePageUIClient):
        (WebKit::InjectedBundlePageUIClient::initialize):
        (WebKit::InjectedBundlePageUIClient::addMessageToConsole):
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h: Added.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::addMessageToConsole):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidStartProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveTitle):
        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFailLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFinishLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidClearWindowObjectInWorld):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::initializeInjectedBundleLoaderClient):
        (WebKit::WebPage::initializeInjectedBundleUIClient):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::injectedBundleLoaderClient):
        (WebKit::WebPage::injectedBundleUIClient):
        * mac/WebKit2.exp:
        * win/WebKit2.vcproj:

2010-07-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41707
        Add ability to dump frame inner text for the test runner

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameCopyInnerText):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::innerText):
        * WebProcess/WebPage/WebFrame.h:
        * mac/WebKit2.exp:

2010-07-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Only export a single WebKitMain function for the Web Process to call
        https://bugs.webkit.org/show_bug.cgi?id=41702

        * Shared/CommandLine.h:
        Add windows CommandLine::parse overload.

        * Shared/win/CommandLineWin.cpp: Added.
        (WebKit::CommandLine::parse):
        Move parse overload from WebProcess/win/WebProcessMain.cpp.

        * UIProcess/Launcher/win/ProcessLauncherWin.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        Pass the right mode to.

        * WebKit2.xcodeproj/project.pbxproj:
        Update for moves.
        
        * WebProcess/Launching/mac/WebProcessMain.mm: Removed.
        * WebProcess/Launching/win/WebProcessWinMain.cpp: Removed.
        * WebProcess/WebKitMain.cpp: Added.
        (WebKitMain):
        (enableTerminationOnHeapCorruption):
        Add WebKitMain functions for Mac and Windows.

        * WebProcess/WebProcessMain.h: Added.
        * WebProcess/mac/WebProcessMainMac.mm: Added.
        (WebKit::WebProcessMain):
        Add Mac version of WebProcessMain.

        * WebProcess/win/WebProcessMain.cpp: Removed.
        * WebProcess/win/WebProcessMain.h: Removed.
        * WebProcess/win/WebProcessMainWin.cpp: Added.
        (WebKit::WebProcessMain):
        Add Windows version of WebProcessMain.

        * mac/MainMac.cpp: Added.
        (main):
        Add Mac WebProcess main function.

        * mac/WebKit2.exp:
        Remove functions that we don't need to export.

        * win/MainWin.cpp: Added.
        (wWinMain):
        Add Windows WebProcess main function.

        * win/WebKit2.vcproj:
        * win/WebKit2WebProcess.vcproj:
        Update for moves.

2010-07-05  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] WebKit2 triple click
        https://bugs.webkit.org/show_bug.cgi?id=41629

        QtWebkit2 triple click implementation.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::mousePressEvent):
        (QWKPagePrivate::mouseDoubleClickEvent):
        (QWKPage::timerEvent):
        * UIProcess/API/qt/qwkpage.h:
        * UIProcess/API/qt/qwkpage_p.h:

2010-07-05  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Antti Koivisto.

        [Qt] Initial WebKit2 implementation
        https://bugs.webkit.org/show_bug.cgi?id=40233

        Add stubs

        * UIProcess/Plugins/qt/PluginInfoStoreQt.cpp: Copied from WebKit2/UIProcess/Plugins/win/PluginInfoStoreWin.cpp.
        (WebKit::PluginInfoStore::pluginDirectories):
        (WebKit::PluginInfoStore::pluginPathsInDirectory):
        (WebKit::PluginInfoStore::getPluginInfo):
        (WebKit::PluginInfoStore::shouldUsePlugin):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/InjectedBundle/qt/InjectedBundleQt.cpp: Added.
        (WebKit::InjectedBundle::load):

2010-07-05  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Antti Koivisto.

        [Qt] Initial WebKit2 implementation
        https://bugs.webkit.org/show_bug.cgi?id=40233

        Add WebErrorsQt

        * WebProcess/WebCoreSupport/qt/WebErrorsQt.cpp: Added.
        (WebKit::):
        (WebKit::cancelledError):
        (WebKit::blockedError):
        (WebKit::cannotShowURLError):
        (WebKit::interruptForPolicyChangeError):
        (WebKit::cannotShowMIMETypeError):
        (WebKit::fileDoesNotExistError):

2010-07-05  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Antti Koivisto.

        [Qt] Initial WebKit2 implementation
        https://bugs.webkit.org/show_bug.cgi?id=40233

        Add Qt C API integration.

        * UIProcess/API/cpp/qt/WKStringQt.cpp: Added.
        (WKStringCreateWithQString):
        (WKStringCopyQString):
        * UIProcess/API/cpp/qt/WKStringQt.h: Added.
        * UIProcess/API/cpp/qt/WKURLQt.cpp: Added.
        (WKURLCreateWithQUrl):
        (WKURLCopyQUrl):
        * UIProcess/API/cpp/qt/WKURLQt.h: Added.

2010-07-05  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Antti Koivisto.

        [Qt] Initial WebKit2 implementation
        https://bugs.webkit.org/show_bug.cgi?id=40233

        Add the Qt process launcher.

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp: Added.
        (WebKit::ProcessLauncher::launchProcess):
        (WebKit::ProcessLauncher::terminateProcess):
        (WebKit::webThreadBody):
        (WebKit::ProcessLauncher::createWebThread):
        (webProcessMain):

2010-07-05  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Initial WebKit2 implementation
        https://bugs.webkit.org/show_bug.cgi?id=40233
        
        Implement ChunkedUpdateDrawingArea + Proxy for Qt. Not built yet.

        * UIProcess/ChunkedUpdateDrawingAreaProxy.h:
        * UIProcess/qt: Added.
        * UIProcess/qt/ChunkedUpdateDrawingAreaProxyQt.cpp: Added.
        (WebKit::ChunkedUpdateDrawingAreaProxy::page):
        (WebKit::ChunkedUpdateDrawingAreaProxy::ensureBackingStore):
        (WebKit::ChunkedUpdateDrawingAreaProxy::invalidateBackingStore):
        (WebKit::ChunkedUpdateDrawingAreaProxy::platformPaint):
        (WebKit::ChunkedUpdateDrawingAreaProxy::drawUpdateChunkIntoBackingStore):
        * WebProcess/WebPage/qt: Added.
        * WebProcess/WebPage/qt/ChunkedUpdateDrawingAreaQt.cpp: Added.
        (WebKit::ChunkedUpdateDrawingArea::paintIntoUpdateChunk):

2010-07-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Add simple command line parser and pass mode argument to the web process
        https://bugs.webkit.org/show_bug.cgi?id=41586

        * Shared/CommandLine.h:
        (WebKit::CommandLine::operator[]):
        Add CommandLine class.

        * Shared/mac/CommandLineMac.cpp:
        (WebKit::CommandLine::parse):
        Implement Mac version of CommandLine::parse.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        Add "legacywebprocess" mode to the posix_spawn call.

        * WebKit2.xcodeproj/project.pbxproj:
        Add CommandLine to the xcode project.

        * WebProcess/Launching/mac/WebProcessMain.mm:
        (webProcessMain):
        (main):
        Parse the command line and check the mode.

2010-07-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark Rowe.

        WebProcess crashes in release for simple layout tests
        https://bugs.webkit.org/show_bug.cgi?id=41575

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCopyRenderTreeExternalRepresentation): ref external representation StringImpl*
        before taking it out of its parent String, to avoid returning freed memory.

2010-07-03  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Anders Carlsson.

        Add stdint.h include to fix WebKitTestRunner build.

        * UIProcess/API/C/WKPage.h:

2010-07-02  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Wrong method name in file  Connection.h
        https://bugs.webkit.org/show_bug.cgi?id=41536

        Method openConnectionHandler was spelled as openConnection in class Connection.

        * Platform/CoreIPC/Connection.h:

2010-07-02  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Sam Weinig.

        Adding notification and touch events methods to WebChromeClient
        https://bugs.webkit.org/show_bug.cgi?id=41527

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::notificationPresenter):
        (WebKit::WebChromeClient::needTouchEvents):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2010-07-02  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Sam Weinig.

        Removing CoreFoundation.h include from WKFrame.h
        https://bugs.webkit.org/show_bug.cgi?id=41528

        * UIProcess/API/C/WKFrame.h:

2010-07-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41540
        WebKit2: Add InjectedCode API to get a list of subframes

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameCopyChildFrames):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::childFrameRef):
        (WebKit::childFrameDeref):
        (WebKit::WebFrame::childFrames):
        * WebProcess/WebPage/WebFrame.h:
        * mac/WebKit2.exp:

2010-07-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Turn off the Objective-C garbage collection for the WebProcess.

        * Configurations/WebProcess.xcconfig:
        * WebProcess/Launching/mac/WebProcessMain.mm:
        (main): Assert that GC is off.

2010-07-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        There is no longer a reason to check that the process is valid when posting
        a message to the bundle, the process code will take care of that for us.

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

2010-07-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Use send instead of connection()->send(), now that connections() are created
        asynchronously it can be null at this point and the message needs to be queued.

        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::setUpAcceleratedCompositing):

2010-07-01  Steve Falkenburg  <sfalken@apple.com>

        Even more Windows build fixing.
        Removed bogus post-build event commands.
        Removed unnecessary link libraries.

        * win/WebKit2.vcproj:

2010-07-01  Steve Falkenburg  <sfalken@apple.com>

        Fix Windows while not breaking Qt (didn't realize this was building for Qt).

        * WebProcess/WebProcess.cpp:

2010-07-01  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        * win/WebKit2Generated.make:

2010-07-01  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        * WebProcess/WebProcess.cpp:

2010-07-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Jon Honeycutt.

        Make WebKit2 compile (though not work) on Leopard.

        * Platform/WorkQueue.h:
        * Platform/mac/WorkQueueMac.cpp:
        (WorkQueue::EventSource::EventSource):
        (WorkQueue::scheduleWork):
        (WorkQueue::registerMachPortEventHandler):
        (WorkQueue::unregisterMachPortEventHandler):
        (WorkQueue::platformInitialize):
        (WorkQueue::platformInvalidate):
        * UIProcess/mac/LayerBackedDrawingAreaProxyMac.mm:
        (WebKit::LayerBackedDrawingAreaProxy::attachCompositingContext):
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::setUpAcceleratedCompositing):
        * WebProcess/WebPage/LayerBackedDrawingArea.cpp:
        (WebKit::LayerBackedDrawingArea::LayerBackedDrawingArea):
        (WebKit::LayerBackedDrawingArea::setNeedsDisplay):
        * WebProcess/WebPage/LayerBackedDrawingArea.h:
        * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm:
        (WebKit::LayerBackedDrawingArea::platformClear):
        (WebKit::LayerBackedDrawingArea::attachCompositingContext):

2010-07-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=41491
        Add first stab at back/forward list API.

        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKBackForwardList.cpp: Added.
        * UIProcess/API/C/WKBackForwardList.h: Added.
        * UIProcess/API/C/WKBackForwardListItem.cpp: Added.
        * UIProcess/API/C/WKBackForwardListItem.h: Added.
        * UIProcess/API/C/WKBase.h:
        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/C/WebKit2.h:
        * UIProcess/WebBackForwardListItem.cpp: Added.
        * UIProcess/WebBackForwardListItem.h: Added.
        * UIProcess/WebBackForwardListProxy.cpp: Added.
        * UIProcess/WebBackForwardListProxy.h: Added.
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2010-07-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Make process launching asynchronous
        https://bugs.webkit.org/show_bug.cgi?id=41489

        * Platform/CoreIPC/Connection.h:
        Make OutgoingMessage public.

        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::paint):
        Don't wait for a paint reply when the process is starting up.

        * UIProcess/Launcher/ProcessLauncher.cpp: Added.
        Add new ProcessLauncher class.

        (WebKit::processLauncherWorkQueue):
        Returns the work queue where process launching will happen.

        (WebKit::ProcessLauncher::ProcessLauncher):
        Schedule launching the process.

        (WebKit::ProcessLauncher::didFinishLaunchingProcess):
        Call the client method.
        
        (WebKit::ProcessLauncher::invalidate):
        Set the client to 0.

        * UIProcess/Launcher/ProcessLauncher.h: Added.
        * UIProcess/Launcher/WebProcessLauncher.h: Removed.
        Rename WebProcessLauncher.h -> ProcessLauncher.h

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm: Added.
        * UIProcess/Launcher/mac/WebProcessLauncher.mm: Removed.
        Rename WebProcessLauncher.mm -> ProcessLauncherMac.mm, update for ProcessLauncher changes.

        * UIProcess/Launcher/win/ProcessLauncherWin.cpp: Added.
        * UIProcess/Launcher/win/WebProcessLauncher.cpp: Removed.
        Rename WebProcessLauncher.cpp -> ProcessLauncherWin.cpp, update for ProcessLauncher changes.
        
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::~WebProcessProxy):
        Delete any unsent messages.

        (WebKit::WebProcessProxy::connect):
        Use the new ProcessLauncher.

        (WebKit::WebProcessProxy::sendMessage):
        If we're waiting for the process to launch, the messages need to be enqueued.

        (WebKit::WebProcessProxy::didFinishLaunching):
        Send the outgoing messages.

        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Update for renames.

2010-07-01  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Get accelerated compositing working with webkit2
        https://bugs.webkit.org/show_bug.cgi?id=41084
        
        Start up the CA render server in the UI process (currently, at launch time), and
        pass the server port over to the web process for use by the layer-backed drawing area.
        
        Fix some style issues pointed out by Dan Bernstein.
        
        Implement the WebChromeClient methods that pass the attach/detach calls through
        to the drawing area.

        * Shared/CoreIPCSupport/WebProcessMessageKinds.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _startAcceleratedCompositing:]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::WebProcessProxy::setUpAcceleratedCompositing):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/mac/LayerBackedDrawingAreaProxyMac.mm:
        * UIProcess/mac/WebProcessProxyMac.mm: Added.
        (WebKit::WebProcessProxy::setUpAcceleratedCompositing):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::attachRootGraphicsLayer):
        (WebKit::WebChromeClient::scheduleCompositingLayerSync):
        * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm:
        (WebKit::LayerBackedDrawingArea::attachCompositingContext):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::compositingRenderServerPort):

2010-07-01  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Get accelerated compositing working with webkit2
        https://bugs.webkit.org/show_bug.cgi?id=41084
        
        Add a new kind of DrawingArea, which is a LayerBackedDrawingArea, which will be used
        when the page goes into accelerated compositing mode. It is not wired up yet.

        * Shared/CoreIPCSupport/DrawingAreaProxyMessageKinds.h: New 'attach' and 'detach' messages
        related to accelerated compositing.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _startAcceleratedCompositing:]):
        (-[WKView _stopAcceleratedCompositing]):
        * UIProcess/API/mac/WKViewInternal.h:
        Add a subview of the WKView which has layer-backing enabled, and put the drawing area's
        layer inside of that.
        
        * UIProcess/ChunkedUpdateDrawingAreaProxy.h:
        (WebKit::ChunkedUpdateDrawingAreaProxy::attachCompositingContext):
        (WebKit::ChunkedUpdateDrawingAreaProxy::detachCompositingContext): These methods will never be called
        on the ChunkedUpdateDrawingArea. Stub them out.

        * UIProcess/DrawingAreaProxy.h:
        Add attachCompositingContext() and detachCompositingContext() methods, and a new drawing area
        type to the enum.

        * UIProcess/LayerBackedDrawingAreaProxy.cpp: Added.
        * UIProcess/LayerBackedDrawingAreaProxy.h: Added.
        * UIProcess/mac/LayerBackedDrawingAreaProxyMac.mm: Added.

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

        * WebProcess/WebPage/ChunkedUpdateDrawingArea.h: Add virtual methods stubs.

        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create): Create a LayerBackedDrawingArea if asked.
        * WebProcess/WebPage/DrawingArea.h: New LayerBackedDrawingAreaType type, and new virtual
        methods related to accelerated compositing.

        * WebProcess/WebPage/LayerBackedDrawingArea.cpp: Added.
        * WebProcess/WebPage/LayerBackedDrawingArea.h: Added.
        * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm: Added.

2010-07-01  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

       Rubberstamped by Sam Weinig.

       Export symbols on Linux with GCC, like JSC does.

       * UIProcess/API/C/WKBase.h:
       * WebProcess/InjectedBundle/API/c/WKBundleBase.h:

2010-07-01  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Antti Koivisto.

        [Qt] Initial WebKit2 implementation
        https://bugs.webkit.org/show_bug.cgi?id=40233

        Add implementation of the UI and loader client for Qt.

        * UIProcess/API/qt/qwkpage.cpp:
        * UIProcess/API/qt/ClientImpl.cpp: Added.
        (toQWKPage):
        (qt_wk_didStartProvisionalLoadForFrame):
        (qt_wk_didReceiveServerRedirectForProvisionalLoadForFrame):
        (qt_wk_didFailProvisionalLoadWithErrorForFrame):
        (qt_wk_didCommitLoadForFrame):
        (qt_wk_didFinishLoadForFrame):
        (qt_wk_didFailLoadWithErrorForFrame):
        (qt_wk_didReceiveTitleForFrame):
        (qt_wk_didFirstLayoutForFrame):
        (qt_wk_didFirstVisuallyNonEmptyLayoutForFrame):
        (qt_wk_didStartProgress):
        (qt_wk_didChangeProgress):
        (qt_wk_didFinishProgress):
        (qt_wk_didBecomeUnresponsive):
        (qt_wk_didBecomeResponsive):
        (qt_wk_createNewPage):
        (qt_wk_showPage):
        (qt_wk_close):
        (qt_wk_runJavaScriptAlert):
        * UIProcess/API/qt/ClientImpl.h: Added.

2010-07-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Change the CoreIPC connection identifier to be a HANDLE on Windows
        https://bugs.webkit.org/show_bug.cgi?id=41479

        * Platform/CoreIPC/Connection.h:
        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::createServerAndClientIdentifiers):
        New function that creates a server and client HANDLE.

        (CoreIPC::Connection::platformInitialize):
        Don't open the connections here.

        (CoreIPC::Connection::readEventHandler):
        (CoreIPC::Connection::open):
        
        * UIProcess/Launcher/win/WebProcessLauncher.cpp:
        (WebKit::webThreadBody):
        Get the handle from the thread.

        (WebKit::launchWebProcess):
        Mark the client identifier as inheritable and pass it along to the web process.

        * WebProcess/win/WebProcessMain.cpp:
        (WebKit::CommandLine::CommandLine):
        (WebKit::CommandLine::parse):
        (WebKit::CommandLine::operator[]):
        Add simple command line parser.

        (WebKit::WebProcessMain):
        Get the handle identifier from the command line.

        * WebProcess/win/WebProcessMain.h:

2010-07-01  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Antti Koivisto.

        [Qt] Initial WebKit2 implementation
        https://bugs.webkit.org/show_bug.cgi?id=40233

        Add initial Qt API for WebKit2

        * UIProcess/API/qt/WKView.h: Added.
        * UIProcess/API/qt/qgraphicswkview.cpp: Added.
        (QGraphicsWKViewPrivate::pageRef):
        (QGraphicsWKView::QGraphicsWKView):
        (QGraphicsWKView::~QGraphicsWKView):
        (QGraphicsWKView::page):
        (QGraphicsWKView::paint):
        (QGraphicsWKView::setGeometry):
        (QGraphicsWKView::load):
        (QGraphicsWKView::setUrl):
        (QGraphicsWKView::url):
        (QGraphicsWKView::title):
        (QGraphicsWKView::triggerPageAction):
        (QGraphicsWKView::back):
        (QGraphicsWKView::forward):
        (QGraphicsWKView::reload):
        (QGraphicsWKView::stop):
        (QGraphicsWKView::itemChange):
        (QGraphicsWKView::event):
        (QGraphicsWKView::sizeHint):
        (QGraphicsWKView::inputMethodQuery):
        (QGraphicsWKView::keyPressEvent):
        (QGraphicsWKView::keyReleaseEvent):
        (QGraphicsWKView::hoverMoveEvent):
        (QGraphicsWKView::mouseMoveEvent):
        (QGraphicsWKView::mousePressEvent):
        (QGraphicsWKView::mouseReleaseEvent):
        (QGraphicsWKView::mouseDoubleClickEvent):
        (QGraphicsWKView::wheelEvent):
        (QGraphicsWKViewPrivate::QGraphicsWKViewPrivate):
        (QGraphicsWKView::visibleRect):
        * UIProcess/API/qt/qgraphicswkview.h: Added.
        * UIProcess/API/qt/qwkpage.cpp: Added.
        (QWKPagePrivate::QWKPagePrivate):
        (QWKPagePrivate::~QWKPagePrivate):
        (QWKPagePrivate::init):
        (QWKPagePrivate::toolTipChanged):
        (QWKPagePrivate::paint):
        (QWKPagePrivate::keyPressEvent):
        (QWKPagePrivate::keyReleaseEvent):
        (QWKPagePrivate::mouseMoveEvent):
        (QWKPagePrivate::mousePressEvent):
        (QWKPagePrivate::mouseReleaseEvent):
        (QWKPagePrivate::mouseDoubleClickEvent):
        (QWKPagePrivate::wheelEvent):
        (QWKPagePrivate::updateAction):
        (QWKPagePrivate::updateNavigationActions):
        (QWKPagePrivate::_q_webActionTriggered):
        (QWKPage::QWKPage):
        (QWKPage::~QWKPage):
        (QWKPage::pageRef):
        (QWKPage::setCreateNewPageFunction):
        (QWKPage::load):
        (QWKPage::setUrl):
        (QWKPage::url):
        (QWKPage::title):
        (QWKPage::setViewportSize):
        (QWKPage::requestZoomRect):
        (QWKPage::triggerAction):
        (QWKPage::action):
        * UIProcess/API/qt/qwkpage.h: Added.
        * UIProcess/API/qt/qwkpage_p.h: Added.
        (QWKPagePrivate::get):
        (QWKPagePrivate::processDidExit):
        (QWKPagePrivate::processDidRevive):
        (QWKPagePrivate::takeFocus):

2010-07-01  John Sullivan  <sullivan@apple.com>

        Rubber-stamped by Anders Carlsson.

        * mac/WebKit2.exp:
        Added _WKFramePolicyListenerDownload and _WKFramePolicyListenerIgnore.

2010-07-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r62267.
        http://trac.webkit.org/changeset/62267
        https://bugs.webkit.org/show_bug.cgi?id=41468

        broke stuff (Requested by weinig on #webkit).

        * UIProcess/API/C/WKBase.h:
        * WebProcess/InjectedBundle/API/c/WKBundleBase.h:

2010-07-01  John Sullivan  <sullivan@apple.com>

        Rubber-stamped by Sam Weinig.

        * mac/WebKit2.exp:
        Added _WKFramePolicyListenerRelease and _WKFramePolicyListenerRetain.

2010-07-01  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Antti Koivisto.

        [Qt] Initial WebKit2 implementation
        https://bugs.webkit.org/show_bug.cgi?id=40233

        Add our event factory for converting Qt events to something WebKit2
        understands.

        * Shared/qt/WebEventFactoryQt.cpp: Added.
        (WebKit::mouseButtonForEvent):
        (WebKit::webEventTypeForEvent):
        (WebKit::modifiersForEvent):
        (WebKit::WebEventFactory::createWebMouseEvent):
        (WebKit::WebEventFactory::createWebWheelEvent):
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        * Shared/qt/WebEventFactoryQt.h: Added.

2010-07-01  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Initial WebKit2 implementation
        https://bugs.webkit.org/show_bug.cgi?id=40233
        
        Add UpdateChunk. This one is mmap based, using Qt abstractions.

        * Shared/qt: Added.
        * Shared/qt/UpdateChunk.cpp: Added.
        (WebKit::MappedMemory::markUsed):
        (WebKit::MappedMemory::markFree):
        (WebKit::MappedMemory::isFree):
        (WebKit::mapMemory):
        (WebKit::mapFile):
        (WebKit::UpdateChunk::UpdateChunk):
        (WebKit::UpdateChunk::~UpdateChunk):
        (WebKit::UpdateChunk::data):
        (WebKit::UpdateChunk::encode):
        (WebKit::UpdateChunk::decode):
        (WebKit::UpdateChunk::createImage):
        * Shared/qt/UpdateChunk.h: Added.
        (WebKit::UpdateChunk::rect):
        (WebKit::UpdateChunk::size):

2010-07-01  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Initial WebKit2 implementation
        https://bugs.webkit.org/show_bug.cgi?id=40233
        
        Include some stdlib headers to fix linux build.

        * Platform/CoreIPC/ArgumentDecoder.cpp:
        * Platform/CoreIPC/ArgumentEncoder.cpp:
        * UIProcess/WebLoaderClient.cpp:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebUIClient.cpp:

2010-07-01  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Initial WebKit2 implementation
        https://bugs.webkit.org/show_bug.cgi?id=40233
        
        Implement CoreIPC::Connection and PlatformProcessIdentifier for Qt. Not built yet.

        * Platform/CoreIPC/Connection.h:
        * Platform/CoreIPC/qt: Added.
        * Platform/CoreIPC/qt/ConnectionQt.cpp: Added.
        (CoreIPC::Connection::platformInitialize):
        (CoreIPC::Connection::platformInvalidate):
        (CoreIPC::Connection::newConnectionHandler):
        (CoreIPC::Connection::readyReadHandler):
        (CoreIPC::Connection::openConnection):
        (CoreIPC::Connection::open):
        (CoreIPC::Connection::sendOutgoingMessage):
        * Platform/PlatformProcessIdentifier.h:

2010-07-01  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Initial WebKit2 implementation
        https://bugs.webkit.org/show_bug.cgi?id=40233
        
        Implement WorkQueue for Qt. Not built yet.

        * Platform/WorkQueue.h:
        * Platform/qt/WorkQueueQt.cpp: Added.
        (WorkQueue::WorkItemQt::WorkItemQt):
        (WorkQueue::WorkItemQt::~WorkItemQt):
        (WorkQueue::WorkItemQt::execute):
        (WorkQueue::WorkItemQt::timerEvent):
        (WorkQueue::connectSignal):
        (WorkQueue::disconnectSignal):
        (WorkQueue::platformInitialize):
        (WorkQueue::platformInvalidate):
        (WorkQueue::scheduleWork):

2010-07-01  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Initial WebKit2 implementation
        https://bugs.webkit.org/show_bug.cgi?id=40233
        
        Implement RunLoop for Qt. Not built yet.

        * Platform/RunLoop.h:
        * Platform/qt: Added.
        * Platform/qt/RunLoopQt.cpp: Added.
        (RunLoop::TimerObject::TimerObject):
        (RunLoop::TimerObject::performWork):
        (RunLoop::TimerObject::wakeUp):
        (RunLoop::TimerObject::timerEvent):
        (RunLoop::run):
        (RunLoop::stop):
        (RunLoop::RunLoop):
        (RunLoop::~RunLoop):
        (RunLoop::wakeUp):
        (RunLoop::TimerBase::timerFired):
        (RunLoop::TimerBase::TimerBase):
        (RunLoop::TimerBase::~TimerBase):
        (RunLoop::TimerBase::start):
        (RunLoop::TimerBase::stop):
        (RunLoop::TimerBase::isActive):

2010-06-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41426
        Add ImmutableArray class and WKArrayRef API to go with it. This will be used
        in a few follow up patches.

        * Shared/ImmutableArray.cpp: Added.
        (WebKit::ImmutableArray::ImmutableArray):
        (WebKit::ImmutableArray::~ImmutableArray):
        * Shared/ImmutableArray.h: Added.
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKArray.cpp: Added.
        * UIProcess/API/C/WKArray.h: Added.
        * UIProcess/API/C/WKBase.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * mac/WebKit2.exp:
        * win/WebKit2.vcproj:

2010-06-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Add WebProcessProxy::send
        https://bugs.webkit.org/show_bug.cgi?id=41416

        * Platform/CoreIPC/Connection.h:
        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::setSize):
        (WebKit::ChunkedUpdateDrawingAreaProxy::setPageIsVisible):
        (WebKit::ChunkedUpdateDrawingAreaProxy::update):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::postMessageToInjectedBundle):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeWebPage):
        (WebKit::WebPageProxy::reinitializeWebPage):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::tryClose):
        (WebKit::WebPageProxy::loadURL):
        (WebKit::WebPageProxy::stopLoading):
        (WebKit::WebPageProxy::reload):
        (WebKit::WebPageProxy::goForward):
        (WebKit::WebPageProxy::goBack):
        (WebKit::WebPageProxy::setFocused):
        (WebKit::WebPageProxy::setActive):
        (WebKit::WebPageProxy::mouseEvent):
        (WebKit::WebPageProxy::wheelEvent):
        (WebKit::WebPageProxy::keyEvent):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::runJavaScriptInMainFrame):
        (WebKit::WebPageProxy::getRenderTreeExternalRepresentation):
        (WebKit::WebPageProxy::preferencesDidChange):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::WebProcessProxy::sendMessage):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::connection):
        (WebKit::WebProcessProxy::send):

2010-06-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add a private Message class template
        https://bugs.webkit.org/show_bug.cgi?id=41370

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::Message::Message):
        (CoreIPC::Connection::Message::arguments):

2010-06-28  John Gregg  <johnnyg@google.com>

        Unreviewed, build fix (removing merge conflict from previous).

        * Configurations/FeatureDefines.xcconfig:

2010-06-23  John Gregg  <johnnyg@google.com>

        Reviewed by Kent Tamura.

        add ENABLE_DIRECTORY_UPLOAD build support
        https://bugs.webkit.org/show_bug.cgi?id=41100

        * Configurations/FeatureDefines.xcconfig:

2010-06-28  Sam Weinig  <sam@webkit.org>

        Rubber-stamped Geoffrey Garen.

        Add WKBundleFrameIsMainFrame to exports file.

        * mac/WebKit2.exp:

2010-06-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41288
        WebKit2: Add frame API for InjectedBundle code

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp: Added.
        (WKBundleFrameIsMainFrame):
        (WKBundleFrameGetURL):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h: Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageGetMainFrame):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::isMainFrame):
        (WebKit::WebFrame::url):
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::mainFrame):
        * mac/WebKit2.exp:
        * win/WebKit2.vcproj:

2010-06-27  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Maciej Stachowiak.

        Update guards related to blocks to check whether __BLOCKS__ is defined, rather than checking its value.
        This matches how similar checks are performed in system headers, and avoids a compile error when __BLOCKS__
        is not defined.

        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/C/WKPagePrivate.h:

2010-06-26  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add an ENABLE_WEB_TIMING option for enabling Web Timing support.
        https://bugs.webkit.org/show_bug.cgi?id=38924

        * Configurations/FeatureDefines.xcconfig:

2010-06-25  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        * win/WebKit2.vcproj:

2010-06-25  Ada Chan  <adachan@apple.com>

        Rubber-stamped by Mark Rowe.

        Add additional include search paths relative to $(WebKitLibrariesDir) to fix a build.

        * win/WebKit2.vcproj:

2010-06-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WKBundlePageRenderTreeExternalRepresentation really needs to be 
        WKBundlePageCopyRenderTreeExternalRepresentation so we don't have dangling
        pointers and adhere to naming conventions.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCopyRenderTreeExternalRepresentation):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        * mac/WebKit2.exp:

2010-06-24  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        * win/WebKit2.make: Added.
        * win/WebKit2.submit.sln: Added.

2010-06-24  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        * win/WebKit2WebProcess.vcproj:

2010-06-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        Add WKBundlePageRenderTreeExternalRepresentation for WebKitTestRunner.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageRenderTreeExternalRepresentation):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::renderTreeExternalRepresentation):
        (WebKit::WebPage::getRenderTreeExternalRepresentation):
        * WebProcess/WebPage/WebPage.h:
        * mac/WebKit2.exp:
        * win/WebKit2.vcproj:

2010-06-24  John Sullivan  <sullivan@apple.com>

        Rubber-stamped by Ada Chan.

        * mac/WebKit2.exp:
        Added _WKNavigationDataRelease and _WKNavigationDataRetain.

2010-06-24  John Sullivan  <sullivan@apple.com>

        Rubber-stamped by Anders Carlsson.

        * mac/WebKit2.exp:
        Added _WKPageReloadFromOrigin.

2010-06-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=41168
        <rdar://problem/8124605>
        Webkit2: Add WKPageReloadFromOrigin() to match old-WebKit functionality

        * UIProcess/API/C/WKPage.cpp:
        (WKPageReload):
        (WKPageReloadFromOrigin):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reload):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::reload):
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebPage/WebPage.h:

2010-06-24  Adam Roben  <aroben@apple.com>

        Windows build fix

        Fixes <http://webkit.org/b/41158>.

        Reviewed by Anders Carlsson.

        * Shared/win/UpdateChunk.cpp: Updated header name.

        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp: Added.
        (WebKit::PluginInfoStore::pluginDirectories):
        (WebKit::PluginInfoStore::pluginPathsInDirectory):
        (WebKit::PluginInfoStore::getPluginInfo):
        (WebKit::PluginInfoStore::shouldUsePlugin):
        Stubbed these out.

        * win/WebKit2.vcproj: Added UIProcess/Plugins to the include path for
        all configurations. Added UIProcess/Plugins files to the project.

2010-06-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Have the UI process compute the plug-in data
        https://bugs.webkit.org/show_bug.cgi?id=41118

        * Shared/CoreIPCSupport/WebProcessProxyMessageKinds.h:
        (WebProcessProxyMessage::):
        Add GetPlugin message kind.

        * Shared/WebCoreArgumentCoders.h:
        Add argument coders for PluginInfo and MimeClassInfo.
        
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::safeCreateCFString):
        (WebKit::PluginInfoStore::pluginPathsInDirectory):
        (WebKit::PluginInfoStore::getPluginInfo):
        Use safeCreateCFString.
        
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPlugins):
        Ask the plug-in info store for the plug-in list.

        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        Handle GetPlugins.

        * UIProcess/WebProcessProxy.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::objectContentType):
        Implement.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::populatePluginCache):
        Send a sync GetPlugins message.

2010-06-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Add ArgumentCoder for vectors.

        * Platform/CoreIPC/ArgumentCoders.h:
        (CoreIPC::):

2010-06-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Rename WebCoreTypeArgumentMarshalling.h to WebCoreArgumentCoders.h

        * Shared/WebCoreArgumentCoders.h: Copied from Shared/WebCoreTypeArgumentMarshalling.h.
        * Shared/WebCoreTypeArgumentMarshalling.h: Removed.
        * Shared/WebEvent.h:
        * Shared/WebNavigationDataStore.h:
        * Shared/WebPreferencesStore.h:
        * Shared/mac/UpdateChunk.cpp:
        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        * UIProcess/WebContext.cpp:
        * UIProcess/WebPageProxy.cpp:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebProcess.cpp:

2010-06-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        MessageIDs should always have the most significant bit zeroed out
        https://bugs.webkit.org/show_bug.cgi?id=41112

        The most significant bit is used by the Mac implementation of CoreIPC, and
        should always be zero in MessageID objects.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::waitForMessage):
        * Platform/CoreIPC/MessageID.h:
        (CoreIPC::MessageID::):
        (CoreIPC::MessageID::MessageID):
        (CoreIPC::MessageID::operator==):
        (CoreIPC::MessageID::fromInt):
        (CoreIPC::MessageID::isSync):
        (CoreIPC::MessageID::stripMostSignificantBit):
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::sendOutgoingMessage):
        (CoreIPC::createArgumentDecoder):

2010-06-23  John Sullivan  <sullivan@apple.com>

        Rubber-stamped by Anders Carlsson.

        * mac/WebKit2.exp:
        Added yet another symbol needed by Mac clients.

2010-06-23  John Sullivan  <sullivan@apple.com>

        Rubber-stamped by Anders Carlsson.

        * mac/WebKit2.exp:
        Added another symbol needed by Mac clients.

2010-06-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Rename SimpleArgumentCoder.h to ArgumentCoders.h

        * Platform/CoreIPC/ArgumentCoders.h: Copied from Platform/CoreIPC/SimpleArgumentCoder.h.
        * Platform/CoreIPC/SimpleArgumentCoder.h: Removed.
        * Shared/WebCoreTypeArgumentMarshalling.h:
        * WebKit2.xcodeproj/project.pbxproj:

2010-06-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add a plug-in info cache to WebPlatformStrategies
        https://bugs.webkit.org/show_bug.cgi?id=41087

        This is in preparation for proxying the getPlugins call over to the UI process.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::WebPlatformStrategies):
        (WebKit::WebPlatformStrategies::populatePluginCache):
        (WebKit::WebPlatformStrategies::refreshPlugins):
        (WebKit::WebPlatformStrategies::getPluginInfo):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2010-06-23  Sam Weinig  <sam@webkit.org>

        Reviewed by John Sullivan.

        Stop silently ignoring crashes.

        * WebProcess/Launching/mac/WebProcessMain.mm:

2010-06-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add missing include to WKRetainPtr.

        * UIProcess/API/cpp/WKRetainPtr.h:

2010-06-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=41073
        WebKit2: Flesh out more of the InjectedBundle client API

        * WebProcess/InjectedBundle/API/c/WKBundle.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::willDestroyPage):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/InjectedBundle/InjectedBundlePageClient.cpp:
        (WebKit::InjectedBundlePageClient::didStartProvisionalLoadForFrame):
        (WebKit::InjectedBundlePageClient::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::InjectedBundlePageClient::didFailProvisionalLoadWithErrorForFrame):
        (WebKit::InjectedBundlePageClient::didCommitLoadForFrame):
        (WebKit::InjectedBundlePageClient::didFinishLoadForFrame):
        (WebKit::InjectedBundlePageClient::didFailLoadWithErrorForFrame):
        (WebKit::InjectedBundlePageClient::didReceiveTitleForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageClient.h:
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp:
        (WebKit::InjectedBundle::load): Add some error logging on failure to load the bundle.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidStartProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveTitle):
        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFailLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFinishLoad):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):
        * mac/WebKit2.exp:

2010-06-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add a SimpleArgumentCoder class template that works on POD types
        https://bugs.webkit.org/show_bug.cgi?id=41023

        * Platform/CoreIPC/SimpleArgumentCoder.h: Added.
        (CoreIPC::SimpleArgumentCoder::encode):
        (CoreIPC::SimpleArgumentCoder::decode):
        * Shared/WebCoreTypeArgumentMarshalling.h:
        (CoreIPC::):
        * WebKit2.xcodeproj/project.pbxproj:

2010-06-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Use the ArgumentCoder class template for decoding
        https://bugs.webkit.org/show_bug.cgi?id=41021

        * Platform/CoreIPC/ArgumentCoder.h:
        (CoreIPC::ArgumentCoder::decode):
        * Platform/CoreIPC/ArgumentDecoder.h:
        (CoreIPC::ArgumentDecoder::decode):
        * Shared/WebCoreTypeArgumentMarshalling.h:
        (CoreIPC::):

2010-06-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Change the encode functions to be specializations of a class template
        https://bugs.webkit.org/show_bug.cgi?id=41015

        * Platform/CoreIPC/ArgumentCoder.h: Added.
        (CoreIPC::ArgumentCoder::encode):
        * Platform/CoreIPC/ArgumentEncoder.h:
        (CoreIPC::ArgumentEncoder::encode):
        * Shared/WebCoreTypeArgumentMarshalling.h:
        (CoreIPC::):
        * WebKit2.xcodeproj/project.pbxproj:

2010-06-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement PluginInfoStore::shouldUsePlugin.

        * UIProcess/Plugins/PluginInfoStore.h:
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::getPluginInfo):
        (WebKit::PluginInfoStore::shouldUsePlugin):
        * WebKit2.xcodeproj/project.pbxproj:

2010-06-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Support reading plug-in info from Carbon resources
        https://bugs.webkit.org/show_bug.cgi?id=40959

        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::ResourceMap::ResourceMap):
        (WebKit::ResourceMap::~ResourceMap):
        (WebKit::ResourceMap::isValid):
        (WebKit::getStringListResource):
        (WebKit::getPluginInfoFromCarbonResources):
        (WebKit::PluginInfoStore::getPluginInfo):

2010-06-21  Anders Carlsson  <andersca@apple.com>

        Build fix.

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

2010-06-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Have PluginInfoStoreMac actually get plug-in info and populate the plug-in list
        https://bugs.webkit.org/show_bug.cgi?id=40957

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::loadPluginsIfNecessary):
        (WebKit::PluginInfoStore::loadPluginsInDirectory):
        (WebKit::PluginInfoStore::loadPlugin):
        (WebKit::PluginInfoStore::getPlugins):
        * UIProcess/Plugins/PluginInfoStore.h:
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm: Added.
        (WebKit::PluginInfoStore::pluginDirectories):
        (WebKit::PluginInfoStore::pluginPathsInDirectory):
        (WebKit::getPluginArchitecture):
        (WebKit::getPluginInfoFromPropertyLists):
        (WebKit::PluginInfoStore::getPluginInfo):
        (WebKit::PluginInfoStore::shouldUsePlugin):
        * WebKit2.xcodeproj/project.pbxproj:

2010-06-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add PluginInfoStore class
        https://bugs.webkit.org/show_bug.cgi?id=40949

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::WebPreferencesStore):
        * Shared/WebPreferencesStore.h:
        (WebKit::WebPreferencesStore::encode):
        (WebKit::WebPreferencesStore::decode):
        Add plugInsEnabled to the preferences store.

        * UIProcess/Plugins: Added.
        * UIProcess/Plugins/PluginInfoStore.cpp: Added.
        (WebKit::PluginInfoStore::shared):
        (WebKit::PluginInfoStore::PluginInfoStore):
        (WebKit::PluginInfoStore::refresh):
        (WebKit::PluginInfoStore::getPlugins):
        * UIProcess/Plugins/PluginInfoStore.h: Added.
        * UIProcess/Plugins/mac: Added.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::refreshPlugins):
        (WebKit::WebPlatformStrategies::getPluginInfo):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):

2010-06-21  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Rename DrawingAreaProxyUpdateChunk to ChunkedUpdateDrawingArea
        https://bugs.webkit.org/show_bug.cgi?id=40948

        Rename UIProcess version of DrawingAreaUpdateChunk to ChunkedUpdateDrawingAreaProxy,
        and rename the Mac/Win versions of the various DrawingArea files too.
        
        Also rename the DrawingAreaUpdateChunkType enum to ChunkedUpdateDrawingAreaType.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:pageNamespaceRef:]):
        * UIProcess/ChunkedUpdateDrawingArea.cpp: Removed.
        * UIProcess/ChunkedUpdateDrawingArea.h: Removed.
        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp: Added.
        (WebKit::ChunkedUpdateDrawingAreaProxy::ChunkedUpdateDrawingAreaProxy):
        (WebKit::ChunkedUpdateDrawingAreaProxy::~ChunkedUpdateDrawingAreaProxy):
        (WebKit::ChunkedUpdateDrawingAreaProxy::paint):
        (WebKit::ChunkedUpdateDrawingAreaProxy::setSize):
        (WebKit::ChunkedUpdateDrawingAreaProxy::setPageIsVisible):
        (WebKit::ChunkedUpdateDrawingAreaProxy::didSetSize):
        (WebKit::ChunkedUpdateDrawingAreaProxy::update):
        (WebKit::ChunkedUpdateDrawingAreaProxy::didReceiveMessage):
        * UIProcess/ChunkedUpdateDrawingAreaProxy.h: Added.
        (WebKit::ChunkedUpdateDrawingAreaProxy::encode):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::):
        * UIProcess/mac/ChunkedUpdateDrawingAreaProxyMac.mm: Added.
        (WebKit::ChunkedUpdateDrawingAreaProxy::page):
        (WebKit::ChunkedUpdateDrawingAreaProxy::ensureBackingStore):
        (WebKit::ChunkedUpdateDrawingAreaProxy::invalidateBackingStore):
        (WebKit::ChunkedUpdateDrawingAreaProxy::platformPaint):
        (WebKit::ChunkedUpdateDrawingAreaProxy::drawUpdateChunkIntoBackingStore):
        * UIProcess/mac/DrawingAreaProxyUpdateChunkMac.mm: Removed.
        * UIProcess/win/ChunkedUpdateDrawingAreaProxyWin.cpp: Added.
        (WebKit::ChunkedUpdateDrawingAreaProxy::page):
        (WebKit::ChunkedUpdateDrawingAreaProxy::ensureBackingStore):
        (WebKit::ChunkedUpdateDrawingAreaProxy::invalidateBackingStore):
        (WebKit::ChunkedUpdateDrawingAreaProxy::platformPaint):
        (WebKit::ChunkedUpdateDrawingAreaProxy::drawUpdateChunkIntoBackingStore):
        * UIProcess/win/DrawingAreaProxyUpdateChunkWin.cpp: Removed.
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp: Added.
        (WebKit::ChunkedUpdateDrawingArea::ChunkedUpdateDrawingArea):
        (WebKit::ChunkedUpdateDrawingArea::~ChunkedUpdateDrawingArea):
        (WebKit::ChunkedUpdateDrawingArea::invalidateWindow):
        (WebKit::ChunkedUpdateDrawingArea::invalidateContentsAndWindow):
        (WebKit::ChunkedUpdateDrawingArea::invalidateContentsForSlowScroll):
        (WebKit::ChunkedUpdateDrawingArea::scroll):
        (WebKit::ChunkedUpdateDrawingArea::setNeedsDisplay):
        (WebKit::ChunkedUpdateDrawingArea::display):
        (WebKit::ChunkedUpdateDrawingArea::scheduleDisplay):
        (WebKit::ChunkedUpdateDrawingArea::setSize):
        (WebKit::ChunkedUpdateDrawingArea::suspendPainting):
        (WebKit::ChunkedUpdateDrawingArea::resumePainting):
        (WebKit::ChunkedUpdateDrawingArea::didUpdate):
        (WebKit::ChunkedUpdateDrawingArea::didReceiveMessage):
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.h: Added.
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::):
        * WebProcess/WebPage/DrawingAreaUpdateChunk.cpp: Removed.
        * WebProcess/WebPage/DrawingAreaUpdateChunk.h: Removed.
        * WebProcess/WebPage/mac/ChunkedUpdateDrawingAreaMac.cpp: Added.
        (WebKit::ChunkedUpdateDrawingArea::paintIntoUpdateChunk):
        * WebProcess/WebPage/mac/DrawingAreaUpdateChunkMac.cpp: Removed.
        * WebProcess/WebPage/win/ChunkedUpdateDrawingAreaWin.cpp: Added.
        (WebKit::ChunkedUpdateDrawingArea::paintIntoUpdateChunk):
        * WebProcess/WebPage/win/DrawingAreaUpdateChunkWin.cpp: Removed.
        * win/WebKit2.vcproj:

2010-06-21  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Rename DrawingAreaProxyUpdateChunk to ChunkedUpdateDrawingArea
        https://bugs.webkit.org/show_bug.cgi?id=40948
        
        Rename DrawingAreaUpdateChunk to ChunkedUpdateDrawingArea.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:pageNamespaceRef:]):
        * UIProcess/ChunkedUpdateDrawingArea.cpp: Added.
        (WebKit::ChunkedUpdateDrawingArea::ChunkedUpdateDrawingArea):
        (WebKit::ChunkedUpdateDrawingArea::~ChunkedUpdateDrawingArea):
        (WebKit::ChunkedUpdateDrawingArea::paint):
        (WebKit::ChunkedUpdateDrawingArea::setSize):
        (WebKit::ChunkedUpdateDrawingArea::setPageIsVisible):
        (WebKit::ChunkedUpdateDrawingArea::didSetSize):
        (WebKit::ChunkedUpdateDrawingArea::update):
        (WebKit::ChunkedUpdateDrawingArea::didReceiveMessage):
        * UIProcess/ChunkedUpdateDrawingArea.h: Added.
        (WebKit::ChunkedUpdateDrawingArea::encode):
        * UIProcess/DrawingAreaProxyUpdateChunk.cpp: Removed.
        * UIProcess/DrawingAreaProxyUpdateChunk.h: Removed.
        * UIProcess/mac/DrawingAreaProxyUpdateChunkMac.mm:
        (WebKit::ChunkedUpdateDrawingArea::page):
        (WebKit::ChunkedUpdateDrawingArea::ensureBackingStore):
        (WebKit::ChunkedUpdateDrawingArea::invalidateBackingStore):
        (WebKit::ChunkedUpdateDrawingArea::platformPaint):
        (WebKit::ChunkedUpdateDrawingArea::drawUpdateChunkIntoBackingStore):
        * UIProcess/win/DrawingAreaProxyUpdateChunkWin.cpp:
        (WebKit::ChunkedUpdateDrawingArea::page):
        (WebKit::ChunkedUpdateDrawingArea::ensureBackingStore):
        (WebKit::ChunkedUpdateDrawingArea::invalidateBackingStore):
        (WebKit::ChunkedUpdateDrawingArea::platformPaint):
        (WebKit::ChunkedUpdateDrawingArea::drawUpdateChunkIntoBackingStore):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView):
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2010-06-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=40940
        Add message passing support to the WebKit2 API.

        Adds message passing for both InjectedBundle -> WebContext
        and WebContext -> InjectedBundle.

        * Shared/CoreIPCSupport/WebProcessMessageKinds.h:
        (WebProcessMessage::):
        * Shared/CoreIPCSupport/WebProcessProxyMessageKinds.h: Added.
        (WebProcessProxyMessage::):
        (CoreIPC::):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetInjectedBundleClient):
        (WKContextPostMessageToInjectedBundle):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::initializeInjectedBundleClient):
        (WebKit::WebContext::forwardMessageToWebContext):
        (WebKit::WebContext::postMessageToInjectedBundle):
        * UIProcess/WebContext.h:
        * UIProcess/WebContextInjectedBundleClient.cpp: Added.
        (WebKit::WebContextInjectedBundleClient::WebContextInjectedBundleClient):
        (WebKit::WebContextInjectedBundleClient::initialize):
        (WebKit::WebContextInjectedBundleClient::didRecieveMessageFromInjectedBundle):
        * UIProcess/WebContextInjectedBundleClient.h: Added.
        * UIProcess/WebProcessManager.cpp:
        (WebKit::WebProcessManager::processDidClose):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveInjectedBundleMessage):
        (WebKit::WebProcessProxy::didReceiveMessage):
        * UIProcess/WebProcessProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundlePostMessage):
        * WebProcess/InjectedBundle/API/c/WKBundle.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::postMessage):
        (WebKit::InjectedBundle::didCreatePage):
        (WebKit::InjectedBundle::didRecieveMessage):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::loadInjectedBundle):
        (WebKit::WebProcess::forwardMessageToInjectedBundle):
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/WebProcess.h:
        * mac/WebKit2.exp:
        * win/WebKit2.vcproj:

2010-06-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Make WebKit2 build with clang++

        * Platform/CoreIPC/Connection.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView keyUp:]):
        (-[WKView keyDown:]):
        * UIProcess/WebHistoryClient.h:
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebProcess.h:

2010-06-21  Satish Sampath  <satish@chromium.org>

        Reviewed by Steve Block.

        Speech Input Patch 0: Added compilation argument to conditionally compile pending patches.

        Speech Input Patch 0: Added compilation argument to conditionally compile pending patches.
        https://bugs.webkit.org/show_bug.cgi?id=40878

        * Configurations/FeatureDefines.xcconfig:

2010-06-20  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Dan Bernstein.

        Add #if USE(PLATFORM_STRATEGIES) where WebPlatformStrategies is being used.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        Only initialize the web platform strategies if PLATFORM_STRATEGIES is being used.

2010-06-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=40882
        Add ability to have a WebProcess per WebContext.

        - Move to a one-to-one correspondence of WebContexts to WebProcessProxies.
        - Add explicit shared contexts for general use.
        - Only non-shared contexts can use injected bundles.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextCreate):
        (WKContextCreateWithInjectedBundlePath):
        (WKContextGetSharedProcessContext):
        (WKContextGetSharedThreadContext):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/WKContextPrivate.h:
        Change API for WKContext to no longer take a WKProcessModel type and instead
        have explicit Create/Get functions for the different kind of contexts. Added
        two shared contexts, one threaded, one process, and made the threaded on private
        for now.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:]):
        Make WKViews that don't have an explicit context use the shared process
        context by default.

        * UIProcess/Launcher/WebProcessLauncher.h:
        * UIProcess/Launcher/mac/WebProcessLauncher.mm:
        (WebKit::launchWebProcess):
        * UIProcess/Launcher/win/WebProcessLauncher.cpp:
        (WebKit::launchWebProcess):
        Use a boolean argument to note whether we are using a thread or a process
        instead of using the process model enum.

        * UIProcess/ProcessModel.h:
        (WebKit::):
        Convert to using explicit Shared modifier for shared contexts.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::sharedProcessContext):
        (WebKit::WebContext::sharedThreadContext):
        (WebKit::WebContext::ensureWebProcess):
        (WebKit::WebContext::createWebPage):
        (WebKit::WebContext::reviveIfNecessary):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::create):
        (WebKit::WebContext::process):
        * UIProcess/WebPageNamespace.cpp:
        (WebKit::WebPageNamespace::createWebPage):
        (WebKit::WebPageNamespace::preferencesDidChange):
        (WebKit::WebPageNamespace::getStatistics):
        * UIProcess/WebPageNamespace.h:
        (WebKit::WebPageNamespace::process):
        (WebKit::WebPageNamespace::reviveIfNecessary):
        Move WebProcessProxy creation logic up into WebContext.

        * UIProcess/WebProcessManager.cpp:
        (WebKit::WebProcessManager::getWebProcess):
        (WebKit::WebProcessManager::processDidClose):
        * UIProcess/WebProcessManager.h:
        Keep a map of WebContexts to WebProcessProxies in addition to the two
        shared processes.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::create):
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::WebProcessProxy::connect):
        (WebKit::WebProcessProxy::didClose):
        * UIProcess/WebProcessProxy.h:
        Store a WebContext instead of the process model.

        * mac/WebKit2.exp:
        Add new functions.

2010-06-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Make WebCoreSystemInterface.h a C++ only header
        https://bugs.webkit.org/show_bug.cgi?id=40867

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.h:
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.m: Removed.
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm: Copied from WebKit2/WebProcess/WebCoreSupport/mac/WebSystemInterface.m.
        * mac/WebKit2.exp:

2010-06-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add platform strategies for WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=40863

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp: Added.
        (WebKit::WebPlatformStrategies::initialize):
        (WebKit::WebPlatformStrategies::WebPlatformStrategies):
        (WebKit::WebPlatformStrategies::createPluginStrategy):
        (WebKit::WebPlatformStrategies::refreshPlugins):
        (WebKit::WebPlatformStrategies::getPluginInfo):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h: Added.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):

2010-06-18  Sam Weinig  <weinig@apple.com>

        Rolling http://trac.webkit.org/changeset/61297 back in.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: Added.
        (WKBundlePageSetClient):
        (WKBundlePageGetMainFrameURL):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h: Added.
        * WebProcess/InjectedBundle/InjectedBundlePageClient.cpp: Added.
        (WebKit::InjectedBundlePageClient::InjectedBundlePageClient):
        (WebKit::InjectedBundlePageClient::initialize):
        (WebKit::InjectedBundlePageClient::didClearWindowObjectForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageClient.h: Added.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidClearWindowObjectInWorld):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::initializeInjectedBundleClient):
        (WebKit::WebPage::mainFrameURL):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::injectedBundleClient):
        * mac/WebKit2.exp:
        * win/WebKit2.vcproj:

2010-06-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Fix a race condition during startup where we would never send the InitializeConnection message to the server.

        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::open):

2010-06-17  Ada Chan  <adachan@apple.com>

        Rolling out http://trac.webkit.org/changeset/61297 due to build errors.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: Removed.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h: Removed.
        * WebProcess/InjectedBundle/InjectedBundlePageClient.cpp: Removed.
        * WebProcess/InjectedBundle/InjectedBundlePageClient.h: Removed.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidClearWindowObjectInWorld):
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * mac/WebKit2.exp:
        * win/WebKit2.vcproj:

2010-06-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for <rdar://problem/8010805>
        Assertion failure ("mainThreadPthread") in isMainThread() mousing over cnn.com in Mini Browser

        Don't use WebCore::String::operator NSString*() from the UIProcess, since it uses
        StringImpl::createCFString() which expects to be called from WebCore's main thread.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::nsStringFromWebCoreString):
        (WebKit::PageClientImpl::toolTipChanged):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView view:stringForToolTip:point:userData:]):

2010-06-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=40630
        WebKit2: Add mechanism to inject code into the WebProcess on startup

        Add initial InjectedBundle support.

        * Shared/CoreIPCSupport/WebProcessMessageKinds.h:
        (WebProcessMessage::):
        Add new LoadInjectedBundle message kind.

        * UIProcess/API/C/WKContext.cpp:
        (toWK):
        (WKContextCreate):
        (WKContextCreateWithInjectedBundlePath):
        * UIProcess/API/C/WKContext.h:
        Rename WKContextCreateWithProcessModel to WKContextCreate and add
        WKContextCreateWithInjectedBundlePath for creating a context with
        a bundle.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::create):
        (WebKit::WebContext::processModel):
        (WebKit::WebContext::bundlePath):
        * UIProcess/WebPageNamespace.cpp:
        (WebKit::WebPageNamespace::ensureWebProcess):
        (WebKit::WebPageNamespace::reviveIfNecessary):
        * UIProcess/WebProcessManager.cpp:
        (WebKit::WebProcessManager::getWebProcess):
        * UIProcess/WebProcessManager.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::create):
        (WebKit::WebProcessProxy::WebProcessProxy):
        * UIProcess/WebProcessProxy.h:
        Thread the bundle path through process creation.

        * WebProcess/InjectedBundle: Added.
        * WebProcess/InjectedBundle/API: Added.
        * WebProcess/InjectedBundle/API/c: Added.
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp: Added.
        (WKBundleSetClient):
        * WebProcess/InjectedBundle/API/c/WKBundle.h: Added.
        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Added.
        (WebKit::):
        (toWK):
        (toRef):
        * WebProcess/InjectedBundle/API/c/WKBundleBase.h: Added.
        * WebProcess/InjectedBundle/API/c/WKBundleInitialize.h: Added.
        * WebProcess/InjectedBundle/InjectedBundle.cpp: Added.
        (WebKit::InjectedBundle::InjectedBundle):
        (WebKit::InjectedBundle::~InjectedBundle):
        (WebKit::InjectedBundle::initializeClient):
        (WebKit::InjectedBundle::didCreatePage):
        * WebProcess/InjectedBundle/InjectedBundle.h: Added.
        (WebKit::InjectedBundle::create):
        Add bundle boilerplate.

        * WebProcess/InjectedBundle/mac: Added.
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp: Added.
        (WebKit::InjectedBundle::load):
        Load the InjectedBundle using CFBundle.

        * WebProcess/InjectedBundle/win: Added.
        * WebProcess/InjectedBundle/win/InjectedBundleWin.cpp: Added.
        (WebKit::pathGetFileName):
        (WebKit::directoryName):
        (WebKit::InjectedBundle::load):
        Load the InjectedBundle using HMODULE.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        Add initial bundle callback for page creation. More to come.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::loadInjectedBundle):
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::injectedBundle):
        Load the InjectedBundle on LoadInjectedBundle message.

        * WebKit2.xcodeproj/project.pbxproj:
        * mac/WebKit2.exp:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.make:
        Add the new files.

2010-06-15  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Move functions out of Frame class that were marked "move to Chrome"
        https://bugs.webkit.org/show_bug.cgi?id=39636

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::tryClose): Call shouldClose on FrameLoader instead of
        going through Frame.

2010-06-14  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.
        Reorder build event to fix cygwin path issue.

        * win/WebKit2Generated.vcproj:

2010-06-14  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.
        Add build failure stopping code.

        * win/WebKit2WebProcess.vcproj:

2010-06-14  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.
        Add build failure stopping code.

        * win/WebKit2Generated.vcproj:

2010-06-14  Ada Chan  <adachan@apple.com>

        Rubber-stamped by Steve Falkenburg.

        - Fix the release configuration to use release.vsprops.
        - Add Debug_Internal and Debug_All configurations to the WebKit2WebProcess project.
        - Fix launchWebProcess() to get the right path to the WebKit2WebProcess executable.

        * UIProcess/Launcher/win/WebProcessLauncher.cpp:
        (WebKit::launchWebProcess):
        * win/WebKit2WebProcess.vcproj:

2010-06-12  Ada Chan  <adachan@apple.com>

        Unreviewed fix for a linking error with WebKit2LocalizableStringsBundle for Windows release build.

        * WebProcess/win/WebLocalizableStrings.cpp:
        (findCachedString):

2010-06-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Use -Os for optimized builds instead of -02. -02 wasn't giving the 
        right trade off at this time.

        * Configurations/Base.xcconfig:

2010-06-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Move WKRetain and WKRelease overloaded functions out of WKRetainPtr
        and into the files of the type they overload (eg, WKRetain(WKFrameRef 
        moves to WKFrame.h)).

        * UIProcess/API/C/WKBase.h:
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/WKFrame.h:
        * UIProcess/API/C/WKFramePolicyListener.h:
        * UIProcess/API/C/WKNavigationData.h:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/C/WKPageNamespace.h:
        * UIProcess/API/C/WKPreferences.h:
        * UIProcess/API/C/WKString.h:
        * UIProcess/API/C/WKURL.h:
        * UIProcess/API/cpp/WKRetainPtr.h:
        * UIProcess/API/win/WKView.h:

2010-06-10  John Sullivan  <sullivan@apple.com>

        Reviewed by Dan Bernstein.

        * mac/WebKit2.exp:
        Added another symbol needed by Mac clients.

2010-06-09  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed build fix.

        * WebProcess/WebCoreSupport/WebInspectorClient.h:

2010-06-09  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed build fix.

        WebInspector: On the way to Remote Debugging we want to transfer dom/timeline/etc
        data from inspected page to WebInspector as JSON string via http. The native
        serialization to JSON string is supported by InspectorValue's classes. This patch
        has the implementation of sendMessageToFrontend function. WebKit version of it still
        uses ScriptFunctionCall and will be switched to another transport a little bit later.
        https://bugs.webkit.org/show_bug.cgi?id=40134

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::sendMessageToFrontend):
        * WebProcess/WebCoreSupport/WebInspectorClient.h:

2010-06-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/8071268> WebKit2 URLs are displayed as 1-character strings in log statements

        Create a CFString from our WebCore string and then create the CFURL from the CFString.

        * UIProcess/API/C/cf/WKURLCF.cpp:
        (WKURLCopyCFURL):

2010-06-08  John Sullivan  <sullivan@apple.com>

        Rubber-stamped by Anders Carlsson.

        * mac/WebKit2.exp:
        Added _WKPageGetEstimatedProgress and _WKFrameGetPage

2010-06-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Would like a way to query WKPageRef for the current progress value
        https://bugs.webkit.org/show_bug.cgi?id=40310
        <rdar://problem/8071299>

        Add WKPageGetEstimatedProgress. Remove the progress parameter from the didChangeProgress
        loader client callback function.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetEstimatedProgress):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::didChangeProgress):
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::didStartProgress):
        (WebKit::WebPageProxy::didChangeProgress):
        (WebKit::WebPageProxy::didFinishProgress):
        (WebKit::WebPageProxy::processDidExit):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::estimatedProgress):

2010-06-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Would like a way to tell which WKPageRef a WKFrameRef is part of
        https://bugs.webkit.org/show_bug.cgi?id=40308
        <rdar://problem/8071251>

        Add and implement WKFrameGetPage.

        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameGetPage):
        * UIProcess/API/C/WKFrame.h:
        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::page):

2010-06-08  John Sullivan  <sullivan@apple.com>

        Rubber-stamped by Mark Rowe.

        * mac/WebKit2.exp:
        Added a few more symbols needed by Mac clients.

2010-06-08  MORITA Hajime  <morrita@google.com>

        Unreviewed. An attempt to fix test break.

        * Configurations/FeatureDefines.xcconfig:

2010-06-06  MORITA Hajime  <morrita@google.com>

        Unreviewd, follow up to r60820

        https://bugs.webkit.org/show_bug.cgi?id=40219
        [Mac] ENABLE_METER_TAG should be enabled
        
        * Configurations/FeatureDefines.xcconfig:

2010-06-05  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Dan Bernstein.

        <rdar://problem/8063622> Failure to launch WebProcess.app when framework is outside of the build directory

        * Configurations/WebProcess.xcconfig:

2010-06-04  John Sullivan  <sullivan@apple.com>

        Rubber-stamped by Ada Chan.

        Added a couple of symbols needed to start using WKFrameRefs in Mac clients.

        * mac/WebKit2.exp:
        Added _WKFrameRelease and _WKFrameRetain.

2010-06-04  Ada Chan  <adachan@apple.com>

        Reviewed by Anders Carlsson.

        http://bugs.webkit.org/show_bug.cgi?id=40186
        
        Need to close WebPageProxy when the WebView is destroyed.
        Also, WebPageProxy shouldn't hold an OwnPtr to the PageClient, which is the WebView on Windows.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setPageClient):
        * UIProcess/WebPageProxy.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::close):

2010-06-03  Ada Chan  <adachan@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=40152
        
        Need to remove the WebView from WindowMessageBroadcaster's listeners list when the WebView is destroyed.

        * UIProcess/API/win/WKView.cpp:
        (WKViewSetHostWindow): Expose API to change the host window of a WKView.
        (WKViewWindowAncestryDidChange): Expose API to allow clients to notify WebKit when a WKView's window ancestry has changed.
        * UIProcess/API/win/WKView.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::wndProc): Set the WebView's host window to 0 when it's destroyed.  setHostWindow() will call 
        windowAncestryDidChange(), which will remove this WebView from the WindowMessageBroadcaster's listeners list.
        (WebKit::WebView::WebView): Initialize m_isBeingDestroyed.
        (WebKit::WebView::setHostWindow): Update the window's parent window and call windowAncestryDidChange().
        (WebKit::WebView::close): Set the host window to 0.
        * UIProcess/win/WebView.h:

2010-06-04  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Utilize new takeFirst() method where appropriate.
        https://bugs.webkit.org/show_bug.cgi?id=40089

        * Platform/CoreIPC/ArgumentDecoder.cpp:
        (CoreIPC::ArgumentDecoder::removeAttachment):

2010-06-03  Ada Chan  <adachan@apple.com>

        Reviewed by Anders Carlsson.

        Add UIProcess\API\cpp to the list of additional include directories.
        Allow WKViewRef to work with WKRetainPtr on Windows.

        * UIProcess/API/cpp/WKRetainPtr.h:
        * win/WebKit2.vcproj:

2010-06-01  Alice Liu  <alice.liu@apple.com>

        Build fix. Not reviewed

        * win/WebKit2Generated.make: Added WKRetainPtr.h

2010-06-01  John Sullivan  <sullivan@apple.com>

        Rubber-stamped by Anders Carlsson.

        Added _WKRetainPtr to .exp file, and added .exp file to Xcode project.

        * WebKit2.xcodeproj/project.pbxproj:
        Added mac/WebKit2.exp.
        
        * mac/WebKit2.exp:
        Added _WKRetainPtr.

2010-06-01  John Sullivan  <sullivan@apple.com>

        Rubber-stamped by Anders Carlsson.

        Fixed typo/wordo that prevented a certain flavor of constructor from compiling.

        * UIProcess/API/cpp/WKRetainPtr.h:
        (WebKit::WKRetainPtr::WKRetainPtr):
        Changed the mysterious "retainWKPtr" to "WKRetain".

2010-05-28  John Sullivan  <sullivan@apple.com>

        Rubber-stamped by Dan Bernstein.

        Add a using declaration for AdoptWK to match the one just added for WKRetainPtr.

        * UIProcess/API/cpp/WKRetainPtr.h:

2010-05-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add a using declaration for WKRetainPtr matching what we do for our
        other smart pointers and fix the destructor.

        * UIProcess/API/cpp/WKRetainPtr.h:
        (WebKit::WKRetainPtr::~WKRetainPtr):

2010-05-25  Ada Chan  <adachan@apple.com>

        Reviewed by Darin Adler.

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

        Fix the ProjectGUID of the WebKit2 project so it doesn't conflict with the one in WebKit.        

        * WebKit2.sln:
        * win/WebKit2.vcproj:

2010-05-24  Ada Chan  <adachan@apple.com>

        Rubber-stamped by Mark Rowe.
        
        Build fix for 32bit systems.

        * mac/WebKit2.exp:

2010-05-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Teach WebKit2 to build in the Production configuration.

        * Configurations/Base.xcconfig: Restrict WebKit2 to Intel, and disable the order file.
        * Configurations/BaseTarget.xcconfig: Fix the path to the umbrella framework directory.
        This path is used to locate WebCore.framework, so it needs to be relative to WebKit.framework
        rather than WebKit2.framework.
        * Configurations/WebKit2.xcconfig: Update the install path.  Add an exports file.
        * Configurations/WebProcess.xcconfig: Update the install path.
        * WebKit2.xcodeproj/project.pbxproj: Add a Production configuration.
        * mac/WebKit2.exp: Added.

2010-05-21  Steve Block  <steveblock@google.com>

        Unreviewed build fix for WebKit2

        Pass 0 to Page constructor for DeviceOrientationClient.
        See http://trac.webkit.org/changeset/59935

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

2010-05-11  Mark Rowe  <mrowe@apple.com>

        Fix the world.

        In r59162 a change was made to WebCore's FeatureDefines.xcconfig that enabled FILE_READER and FILE_WRITER.
        The author and reviewer of that patch ignored the carefully-worded warning at the top of that file asking
        that changes to the file be kept in sync across JavaScriptCore, WebCore and WebKit, as well as being kept
        in sync with build-webkit.  This led to WebCore and WebKit having different views of Document's vtable
        and results in crashes in Safari shortly after launch when virtual function calls resulted in the wrong
        function in WebCore being called.

        We fix this by bringing the FeatureDefines.xcconfig files in to sync.  Based on the ChangeLog message and
        other changes in r59162 it appears that enabling FILE_WRITER was unintentional so that particular change
        has been reverted.

        * Configurations/FeatureDefines.xcconfig:

2010-05-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        [WebKit2] The web process doesn't need to paint when the web view is hidden.
        https://bugs.webkit.org/show_bug.cgi?id=38549

        * Shared/CoreIPCSupport/DrawingAreaMessageKinds.h:
        (DrawingAreaMessage::):
        Add SuspendPainting/ResumePainting messages.
        
        * UIProcess/DrawingAreaProxyUpdateChunk.cpp:
        (WebKit::DrawingAreaProxyUpdateChunk::setPageIsVisible):
        Suspend and resume painting accordingly.
        
        * WebProcess/WebPage/DrawingAreaUpdateChunk.cpp:
        (WebKit::DrawingAreaUpdateChunk::DrawingAreaUpdateChunk):
        Initialize m_shouldPaint to true.
        
        (WebKit::DrawingAreaUpdateChunk::display):
        Return if m_shouldPaint is false.
        
        (WebKit::DrawingAreaUpdateChunk::scheduleDisplay):
        Ditto.
        
        (WebKit::DrawingAreaUpdateChunk::setSize):
        Assert that we should paint here.

        (WebKit::DrawingAreaUpdateChunk::suspendPainting):
        Set m_shouldPaint to false and stop the timer.
        
        (WebKit::DrawingAreaUpdateChunk::resumePainting):
        Set m_shouldPaint to true and paint if needed.

        (WebKit::DrawingAreaUpdateChunk::didReceiveMessage):
        handle SuspendPainting/ResumePainting messages.

        * WebProcess/WebPage/DrawingAreaUpdateChunk.h:

2010-05-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Jon Honeycutt.

        [WebKit2] WKView should respond to WM_SHOWWINDOW messages
        https://bugs.webkit.org/show_bug.cgi?id=38496

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::wndProc):
        Add case for WM_SHOWWINDOW.

        (WebKit::WebView::onShowWindowEvent):
        Update the page visibility accordingly.

        * UIProcess/win/WebView.h:

2010-05-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Get rid of PageClient::isPageVisible and pass visibility directly in setPageIsVisible
        https://bugs.webkit.org/show_bug.cgi?id=38493

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        Remove isPageVisible.
        
        * UIProcess/API/mac/WKView.mm:
        (isViewVisible):
        New function (moved here from PageClientImpl).
        
        (-[WKView _updateVisibility]):
        Call didChangeVisibility.
        
        (-[WKView viewDidMoveToWindow]):
        (-[WKView viewDidHide]):
        (-[WKView viewDidUnhide]):
        Call _updateVisibility.
        
        * UIProcess/DrawingAreaProxy.h:
        Rename didChangeVisibility to setPageIsVisible and add an isVisible parameter.
        
        * UIProcess/DrawingAreaProxyUpdateChunk.cpp:
        (WebKit::DrawingAreaProxyUpdateChunk::setPageIsVisible):
        Don't call WebPageProxy::isVisible.

        * UIProcess/DrawingAreaProxyUpdateChunk.h:
        
        * UIProcess/PageClient.h:
        Remove isPageVisible.

        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        Remove isVisible.

2010-05-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Implement PageClient::isPageVisible on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=38483

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

2010-05-03  Anders Carlsson  <andersca@apple.com>

        Fix Windows build.

        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::sendOutgoingMessage):
        * Shared/win/UpdateChunk.cpp:
        (WebKit::UpdateChunk::UpdateChunk):
        (WebKit::UpdateChunk::encode):
        (WebKit::UpdateChunk::decode):
        * Shared/win/UpdateChunk.h:
        (WebKit::UpdateChunk::rect):
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxyUpdateChunk.h:
        * UIProcess/win/DrawingAreaProxyUpdateChunkWin.cpp:
        (WebKit::DrawingAreaProxyUpdateChunk::drawUpdateChunkIntoBackingStore):
        * WebProcess/WebPage/win/DrawingAreaUpdateChunkWin.cpp:
        (WebKit::DrawingAreaUpdateChunk::paintIntoUpdateChunk):
        * WebProcess/win/WebProcessMain.cpp:

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=38415
        Have the WKView notify the DrawingAreaProxy when its visibility changes.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::isPageVisible):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewDidMoveToWindow]):
        (-[WKView viewDidHide]):
        (-[WKView viewDidUnhide]):
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxyUpdateChunk.cpp:
        (WebKit::DrawingAreaProxyUpdateChunk::DrawingAreaProxyUpdateChunk):
        (WebKit::DrawingAreaProxyUpdateChunk::didChangeVisibility):
        * UIProcess/DrawingAreaProxyUpdateChunk.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::isVisible):
        * UIProcess/WebPageProxy.h:

2010-05-03  Jens Alfke  <snej@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Add "willSendSubmitEvent" hook to WebFrameClient and FrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=38397

        No tests (functionality is exposed only through native WebKit API.)

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        (WebKit::WebFrameLoaderClient::dispatchWillSendSubmitEvent):

2010-05-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=38471
        Add generic callback mechanism

        Added GenericCallback class replacing RenderTreeExternalRepresentationCallback
        and ScriptReturnValueCallback.
        
        Also,
        - Standardize C API callbacks to take the context last.
        - Standardize C API callbacks to not have the _f suffix (now the block
          variants have a _b suffix).
        - Re-write toWK and toRef methods as a set of template functions using
          the generic API->implementation mapping information.

        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageRunJavaScriptInMainFrame):
        (callRunJavaScriptBlockAndRelease):
        (disposeRunJavaScriptBlock):
        (WKPageRunJavaScriptInMainFrame_b):
        (WKPageRenderTreeExternalRepresentation):
        (WKPageRenderTreeExternalRepresentation_b):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/GenericCallback.h: Added.
        (WebKit::GenericCallback::create):
        (WebKit::GenericCallback::~GenericCallback):
        (WebKit::GenericCallback::performCallbackWithReturnValue):
        (WebKit::GenericCallback::invalidate):
        (WebKit::GenericCallback::callbackID):
        (WebKit::GenericCallback::generateCallbackID):
        (WebKit::GenericCallback::GenericCallback):
        * UIProcess/RenderTreeExternalRepresentationCallback.cpp: Removed.
        * UIProcess/RenderTreeExternalRepresentationCallback.h: Removed.
        * UIProcess/ScriptReturnValueCallback.cpp: Removed.
        * UIProcess/ScriptReturnValueCallback.h: Removed.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didRunJavaScriptInMainFrame):
        (WebKit::WebPageProxy::didGetRenderTreeExternalRepresentation):
        * UIProcess/WebPageProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2010-04-30  Sam Weinig  <sam@webkit.org>

        Fix the build.

        * Platform/CoreIPC/mac/ConnectionMac.cpp: Add missing #include.

2010-04-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=38413
        Add callback based API to get the textual representation of the RenderTree.

        - Also ensures that any pending callbacks are invalidated if the WebPage
          closes (expectedly or unexpectedly).
        - A follow up patch will unify the callback mechanism with a common base
          class.

        * Shared/CoreIPCSupport/WebPageMessageKinds.h:
        (WebPageMessage::):
        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h:
        (WebPageProxyMessage::):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageRunJavaScriptInMainFrame_f):
        (WKPageRenderTreeExternalRepresentation_f):
        (callRenderTreeExternalRepresentationBlockAndDispose):
        (disposeRenderTreeExternalRepresentationBlock):
        (WKPageRenderTreeExternalRepresentation):
        * UIProcess/API/C/WKPagePrivate.h: Added.
        * UIProcess/RenderTreeExternalRepresentationCallback.cpp: Added.
        (WebKit::generateCallbackID):
        (WebKit::RenderTreeExternalRepresentationCallback::RenderTreeExternalRepresentationCallback):
        (WebKit::RenderTreeExternalRepresentationCallback::~RenderTreeExternalRepresentationCallback):
        (WebKit::RenderTreeExternalRepresentationCallback::performCallbackWithReturnValue):
        (WebKit::RenderTreeExternalRepresentationCallback::invalidate):
        * UIProcess/RenderTreeExternalRepresentationCallback.h: Added.
        (WebKit::RenderTreeExternalRepresentationCallback::create):
        (WebKit::RenderTreeExternalRepresentationCallback::callbackID):
        * UIProcess/ScriptReturnValueCallback.cpp:
        (WebKit::ScriptReturnValueCallback::~ScriptReturnValueCallback):
        (WebKit::ScriptReturnValueCallback::performCallbackWithReturnValue):
        (WebKit::ScriptReturnValueCallback::invalidate):
        * UIProcess/ScriptReturnValueCallback.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::getRenderTreeExternalRepresentation):
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::didRunJavaScriptInMainFrame):
        (WebKit::WebPageProxy::didGetRenderTreeExternalRepresentation):
        (WebKit::WebPageProxy::processDidExit):
        * UIProcess/WebPageProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::getRenderTreeExternalRepresentation):
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebPage/WebPage.h:
        * win/WebKit2.vcproj:

2010-04-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=38406
        Add support for sending messages with a size greater than 4096 bytes

        Adds support by putting message bodies that are larger than 4096 bytes
        in OOL memory.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendMessage):
        (CoreIPC::Connection::waitForMessage):
        (CoreIPC::Connection::sendSyncMessage):
        (CoreIPC::Connection::dispatchMessages):
        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::OutgoingMessage::OutgoingMessage):
        (CoreIPC::Connection::OutgoingMessage::messageID):
        (CoreIPC::Connection::send):
        (CoreIPC::Connection::sendSync):
        * Platform/CoreIPC/MessageID.h:
        (CoreIPC::MessageID::):
        (CoreIPC::MessageID::MessageID):
        (CoreIPC::MessageID::equalIgnoringFlags):
        (CoreIPC::MessageID::copyAddingFlags):
        (CoreIPC::MessageID::fromInt):
        (CoreIPC::MessageID::toInt):
        (CoreIPC::MessageID::isMessageBodyOOL):
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::sendOutgoingMessage):
        (CoreIPC::createArgumentDecoder):

2010-04-28  Mike Thole  <mthole@apple.com>

        Build fix, not reviewed.

        Fix WebKit2 build by stubbing out WebFrameLoaderClient::canAuthenticateAgainstProtectionSpace().

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

2010-04-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Only build on SnowLeopard and later when using the Makefile.

        * Makefile:

2010-04-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=38238
        Allow both WebKit and WebKit2 to link to the same WebCore.framework

        * Configurations/WebKit2.xcconfig: Remove the OTHER_LDFLAGS. We don't
        need to set WebCore as a sub_umbrella of WebKit2, since we are not
        reexporting any of its symbols.

2010-04-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Add comment about not using StringImpl::createCFString in WKStringCopyCFString.

        * UIProcess/API/C/cf/WKStringCF.cpp:
        (WKStringCopyCFString):

2010-04-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Remove call to StringImpl::createCFString and instead use CFStringCreateWithCharacters
        directly. StringImpl::createCFString only an optimization when called
        from the thread that WebCore is running on, which is never the case for
        WKStringCopyCFString. We should revisit this later, perhaps adding a
        threadspecific allocator. We also now honor the passed in allocator.

        * UIProcess/API/C/cf/WKStringCF.cpp:
        (WKStringCopyCFString):

2010-04-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=38097
        Disentangle initializing the main thread from initializing threading

        * UIProcess/Launcher/mac/WebProcessLauncher.mm:
        (WebKit::webThreadBody): Add call to initializeMainThread.
        * UIProcess/Launcher/win/WebProcessLauncher.cpp:
        (WebKit::webThreadBody): Ditto.
        * WebProcess/Launching/mac/WebProcessMain.mm:
        (main): Ditto.
        * WebProcess/win/WebProcessMain.cpp:
        (WebKit::WebProcessMain): Ditto.

2010-04-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=38065
        Merge mac and win DrawingAreaProxyUpdateChunk implementations.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView drawRect:]):
        * UIProcess/DrawingAreaProxy.cpp: Copied from UIProcess/mac/DrawingAreaProxy.mm.
        * UIProcess/DrawingAreaProxy.h: Copied from UIProcess/mac/DrawingAreaProxy.h.
        * UIProcess/DrawingAreaProxyUpdateChunk.cpp: Copied from UIProcess/mac/DrawingAreaProxyUpdateChunk.mm.
        (WebKit::DrawingAreaProxyUpdateChunk::DrawingAreaProxyUpdateChunk):
        (WebKit::DrawingAreaProxyUpdateChunk::paint):
        (WebKit::DrawingAreaProxyUpdateChunk::setSize):
        (WebKit::DrawingAreaProxyUpdateChunk::didSetSize):
        (WebKit::DrawingAreaProxyUpdateChunk::update):
        (WebKit::DrawingAreaProxyUpdateChunk::didReceiveMessage):
        * UIProcess/DrawingAreaProxyUpdateChunk.h: Copied from UIProcess/mac/DrawingAreaProxyUpdateChunk.h.
        * UIProcess/mac/DrawingAreaProxy.h: Removed.
        * UIProcess/mac/DrawingAreaProxy.mm: Removed.
        * UIProcess/mac/DrawingAreaProxyUpdateChunk.h: Removed.
        * UIProcess/mac/DrawingAreaProxyUpdateChunk.mm: Removed.
        * UIProcess/mac/DrawingAreaProxyUpdateChunkMac.mm: Copied from UIProcess/mac/DrawingAreaProxyUpdateChunk.mm.
        (WebKit::DrawingAreaProxyUpdateChunk::page):
        (WebKit::DrawingAreaProxyUpdateChunk::invalidateBackingStore):
        (WebKit::DrawingAreaProxyUpdateChunk::platformPaint):
        (WebKit::DrawingAreaProxyUpdateChunk::drawUpdateChunkIntoBackingStore):
        * UIProcess/win/DrawingAreaProxy.cpp: Removed.
        * UIProcess/win/DrawingAreaProxy.h: Removed.
        * UIProcess/win/DrawingAreaProxyUpdateChunkWin.cpp: Copied from UIProcess/win/DrawingAreaProxy.cpp.
        (WebKit::DrawingAreaProxyUpdateChunk::page):
        (WebKit::DrawingAreaProxyUpdateChunk::ensureBackingStore):
        (WebKit::DrawingAreaProxyUpdateChunk::invalidateBackingStore):
        (WebKit::DrawingAreaProxyUpdateChunk::platformPaint):
        (WebKit::DrawingAreaProxyUpdateChunk::drawUpdateChunkIntoBackingStore):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView):
        (WebKit::WebView::onPaintEvent):
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2010-04-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=38059
        Merge mac and win DrawingAreaUpdateChunk implementations.

        * UIProcess/win/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::didSetSize):
        (WebKit::DrawingAreaProxy::didReceiveMessage):
        * UIProcess/win/DrawingAreaProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/DrawingAreaUpdateChunk.cpp: Copied from WebProcess/WebPage/mac/DrawingAreaUpdateChunk.cpp.
        (WebKit::DrawingAreaUpdateChunk::setSize):
        * WebProcess/WebPage/DrawingAreaUpdateChunk.h: Copied from WebProcess/WebPage/mac/DrawingAreaUpdateChunk.h.
        * WebProcess/WebPage/mac/DrawingAreaUpdateChunk.cpp: Removed.
        * WebProcess/WebPage/mac/DrawingAreaUpdateChunk.h: Removed.
        * WebProcess/WebPage/mac/DrawingAreaUpdateChunkMac.cpp: Copied from WebProcess/WebPage/mac/DrawingAreaUpdateChunk.cpp.
        * WebProcess/WebPage/win/DrawingAreaUpdateChunk.cpp: Removed.
        * WebProcess/WebPage/win/DrawingAreaUpdateChunk.h: Removed.
        * WebProcess/WebPage/win/DrawingAreaUpdateChunkWin.cpp: Copied from WebProcess/WebPage/win/DrawingAreaUpdateChunk.cpp.
        (WebKit::DrawingAreaUpdateChunk::paintIntoUpdateChunk):
        * win/WebKit2.vcproj:

2010-04-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Remove an assert. (It's not valid when resizing).

        * WebProcess/WebPage/win/DrawingAreaUpdateChunk.cpp:
        (WebKit::DrawingAreaUpdateChunk::didUpdate):

2010-04-23  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * UIProcess/win/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::paint):
        (WebKit::DrawingAreaProxy::setSize):
        (WebKit::DrawingAreaProxy::didReceiveMessage):
        * WebProcess/WebPage/win/DrawingAreaUpdateChunk.cpp:
        (WebKit::DrawingAreaUpdateChunk::setSize):
        (WebKit::DrawingAreaUpdateChunk::didReceiveMessage):

2010-04-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Remove an assert. (It's not valid when resizing).

        * WebProcess/WebPage/mac/DrawingAreaUpdateChunk.cpp:
        (WebKit::DrawingAreaUpdateChunk::didUpdate):

2010-04-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Merge the prefix headers.

        * Configurations/BaseTarget.xcconfig:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebKit2Prefix.h:
        * WebKit2_Prefix.pch: Removed.

2010-04-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Don't pass the new size when calling didSetSize, it's possible to get
        the size from the update chunk.

        * UIProcess/mac/DrawingAreaProxyUpdateChunk.h:
        * UIProcess/mac/DrawingAreaProxyUpdateChunk.mm:
        (WebKit::DrawingAreaProxyUpdateChunk::didSetSize):
        (WebKit::DrawingAreaProxyUpdateChunk::didReceiveMessage):
        * WebProcess/WebPage/mac/DrawingAreaUpdateChunk.cpp:
        (WebKit::DrawingAreaUpdateChunk::setSize):

2010-04-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Rename SetFrame and DidSetFrame to SetSize and DidSetSize.

        * Shared/CoreIPCSupport/DrawingAreaMessageKinds.h:
        (DrawingAreaMessage::):
        * Shared/CoreIPCSupport/DrawingAreaProxyMessageKinds.h:
        (DrawingAreaProxyMessage::):
        * UIProcess/mac/DrawingAreaProxyUpdateChunk.mm:
        (WebKit::DrawingAreaProxyUpdateChunk::drawRectIntoContext):
        (WebKit::DrawingAreaProxyUpdateChunk::setSize):
        (WebKit::DrawingAreaProxyUpdateChunk::didReceiveMessage):
        * WebProcess/WebPage/mac/DrawingAreaUpdateChunk.cpp:
        (WebKit::DrawingAreaUpdateChunk::setSize):
        (WebKit::DrawingAreaUpdateChunk::didReceiveMessage):

2010-04-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=38002
        Add rudimentary statistics gathering for WebKit2

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetStatistics):
        * UIProcess/API/C/WKContextPrivate.h: Copied from WebKit2/UIProcess/API/C/WKContext.h.
        * UIProcess/API/C/WKPageNamespace.cpp:
        (WKPageNamespaceGetContext):
        * UIProcess/API/C/WKPageNamespace.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::getStatistics):
        * UIProcess/WebContext.h:
        * UIProcess/WebPageNamespace.cpp:
        (WebKit::WebPageNamespace::getStatistics):
        * UIProcess/WebPageNamespace.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::getStatistics):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::numberOfPages):
        * UIProcess/WebProcessProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2010-04-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Don't paint the web page before we've blit the last update chunk to the backing store.

        * UIProcess/win/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::update):
        (WebKit::DrawingAreaProxy::didReceiveMessage):
        * UIProcess/win/DrawingAreaProxy.h:
        * WebProcess/WebPage/win/DrawingAreaUpdateChunk.cpp:
        (WebKit::DrawingAreaUpdateChunk::DrawingAreaUpdateChunk):
        (WebKit::DrawingAreaUpdateChunk::display):
        (WebKit::DrawingAreaUpdateChunk::scheduleDisplay):
        (WebKit::DrawingAreaUpdateChunk::setSize):
        (WebKit::DrawingAreaUpdateChunk::didUpdate):
        (WebKit::DrawingAreaUpdateChunk::didReceiveMessage):
        * WebProcess/WebPage/win/DrawingAreaUpdateChunk.h:

2010-04-20  Anders Carlsson  <andersca@apple.com>

        Fix build.

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

2010-04-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Don't paint the web page before we've blit the last update chunk to the backing store
        https://bugs.webkit.org/show_bug.cgi?id=37896

        * Shared/CoreIPCSupport/DrawingAreaMessageKinds.h:
        (DrawingAreaMessage::):
        * UIProcess/mac/DrawingAreaProxyUpdateChunk.h:
        * UIProcess/mac/DrawingAreaProxyUpdateChunk.mm:
        (WebKit::DrawingAreaProxyUpdateChunk::drawUpdateChunkIntoBackingStore):
        (WebKit::DrawingAreaProxyUpdateChunk::update):
        (WebKit::DrawingAreaProxyUpdateChunk::didReceiveMessage):
        * WebProcess/WebPage/mac/DrawingAreaUpdateChunk.cpp:
        (WebKit::DrawingAreaUpdateChunk::DrawingAreaUpdateChunk):
        (WebKit::DrawingAreaUpdateChunk::display):
        (WebKit::DrawingAreaUpdateChunk::scheduleDisplay):
        (WebKit::DrawingAreaUpdateChunk::setSize):
        (WebKit::DrawingAreaUpdateChunk::didUpdate):
        (WebKit::DrawingAreaUpdateChunk::didReceiveMessage):
        * WebProcess/WebPage/mac/DrawingAreaUpdateChunk.h:

2010-04-20  Anders Carlsson  <andersca@apple.com>

        Fix build.

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

2010-04-19  Anders Carlsson  <andersca@apple.com>

        Fix build.

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

2010-04-17  Sam Weinig  <weinig@apple.com>

        Reviewed by Jon "The Belly" Honeycutt.

        Remove the need for a .defs file! Define WK_EXPORT.

        * UIProcess/API/C/WKBase.h:
        * WebProcess/win/WebProcessMain.h:
        * win/WebKit2.def: Removed.
        * win/WebKit2.vcproj:

2010-04-17  Sam Weinig  <weinig@apple.com>

        Reviewed by Adam Roben.

        Teach windows MiniBrowser how to work with window.open()
        and targeted links.

        Export WKPageSetPageUIClient.

        * win/WebKit2.def:

2010-04-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix window.open() and targeted links.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveSyncMessage): Pass in the new pageID
        instead of 0.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::createWebPage): Allow for the page to have already
        been created, as is the case with programmatic window opening from within
        WebCore (e.g. window.open() or <a target="_blank">).

2010-04-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Don't optimize debug builds.

        * WebKit2.xcodeproj/project.pbxproj: Define GCC_OPTIMIZATION_LEVEL correctly.

2010-04-16  Anders Carlsson  <andersca@apple.com>

        Fix build.

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

2010-04-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Fix windows build.

        * Platform/win/RunLoopWin.cpp:
        (RunLoop::run):
        * UIProcess/Launcher/win/WebProcessLauncher.cpp:
        (WebKit::webThreadBody):
        (WebKit::launchWebProcess):
        * WebProcess/win/WebProcessMain.cpp:
        (WebKit::WebProcessMain):

2010-04-16  Sam Weinig  <weinig@apple.com>

        Reviewed by Anders Carlsson.

        Make resizing responsive on Windows.

        - Use the same waitFor logic as do for the Mac resizing
          DrawingAreaUpdateChunk code.

        * Shared/win/UpdateChunk.cpp:
        (WebKit::UpdateChunk::UpdateChunk):
        * Shared/win/UpdateChunk.h:
         Add a constructor that only takes an IntRect and allocates
         the shared memory mapping for you.
        * UIProcess/win/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::DrawingAreaProxy):
        (WebKit::DrawingAreaProxy::ensureBackingStore):
        (WebKit::DrawingAreaProxy::paint):
        (WebKit::DrawingAreaProxy::drawUpdateChunkIntoBackingStore):
        (WebKit::DrawingAreaProxy::setSize):
        (WebKit::DrawingAreaProxy::didSetSize):
        (WebKit::DrawingAreaProxy::didReceiveMessage):
        * UIProcess/win/DrawingAreaProxy.h:
        Perform wait in paint as we do on the mac.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::onSizeEvent):
        Change to use an IntSize.

        * WebProcess/WebPage/win/DrawingAreaUpdateChunk.cpp:
        (WebKit::DrawingAreaUpdateChunk::paintIntoUpdateChunk):
        (WebKit::DrawingAreaUpdateChunk::display):
        (WebKit::DrawingAreaUpdateChunk::setSize):
        * WebProcess/WebPage/win/DrawingAreaUpdateChunk.h:
        Specialize setSize() drawing and factor out painting
        into a helper function.

2010-04-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Hyatt.

        Make run loops be allocated as thread specific data.
        https://bugs.webkit.org/show_bug.cgi?id=37723

        * Platform/RunLoop.cpp:
        (RunLoop::initializeMainRunLoop):
        (RunLoop::current):
        (RunLoop::main):
        * Platform/RunLoop.h:
        * Platform/mac/RunLoopMac.mm:
        (RunLoop::run):
        (RunLoop::stop):
        * UIProcess/Launcher/mac/WebProcessLauncher.mm:
        (WebKit::webThreadBody):
        (WebKit::launchWebProcess):
        * UIProcess/ResponsivenessTimer.cpp:
        (WebKit::ResponsivenessTimer::ResponsivenessTimer):
        * WebProcess/Launching/mac/WebProcessMain.mm:
        (main):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::isSeparateProcess):

2010-04-16  Sam Weinig  <weinig@apple.com>

        Reviewed by Adam Roben.

        Use GDI text rendering on Windows by default.

        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::platformInitialize): Use the AlternateRenderingMode
        setting.

2010-04-16  Sam Weinig  <weinig@apple.com>

        Reviewed by Adam Roben.

        Fix crash when trying to load an invalid URL.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadURL): Use constructor for ResourceRequest
        that takes a KURL instead of the one that takes a String. The one
        that takes a string expects a valid URL.

2010-04-16  Sam Weinig  <weinig@apple.com>

        Reviewed by Adam Roben.

        Make tooltips work. Thanks Adam!

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::toolTipChanged): Pass the WebView's HWND, not the tooltip's.

2010-04-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Fix build dependencies.

        * WebKit2.sln:

2010-04-15  Adam Roben  <aroben@apple.com>

        Fix Windows WebKit2 build.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::processDidExit):
        * win/WebKit2Generated.make:

2010-04-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add WebHistoryClient support.
        https://bugs.webkit.org/show_bug.cgi?id=37671

        Adds the following callbacks:
            didNavigateWithNavigationData
            didPerformClientRedirect
            didPerformServerRedirect
            didUpdateHistoryTitle

        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h:
        (WebPageProxyMessage::):
        * Shared/WebNavigationDataStore.h: Added.
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKBase.h:
        * UIProcess/API/C/WKNavigationData.cpp: Added.
        * UIProcess/API/C/WKNavigationData.h: Added.
        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/C/WebKit2.h:
        * UIProcess/WebHistoryClient.cpp: Copied from UIProcess/WebUIClient.cpp.
        * UIProcess/WebHistoryClient.h: Copied from UIProcess/WebUIClient.h.
        * UIProcess/WebNavigationData.cpp: Added.
        * UIProcess/WebNavigationData.h: Added.
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * win/WebKit2.vcproj:

2010-04-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Remove empty file configurations.

        * win/WebKit2.vcproj:

2010-04-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix WebKit2s build. Don't return temporaries.

        * UIProcess/API/C/cf/WKStringCF.cpp:
        (WKStringCreateWithCFString):
        * UIProcess/API/C/cf/WKURLCF.cpp:
        (WKURLCreateWithCFURL):
        (WKURLCopyCFURL):

2010-04-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.

        Fixed complexity and performance FIXME created by using KURL in the UI
        process -- it turned out that everywhere we were using KURL, we could
        have just used String instead. (That's how Windows WebKit works, too.)

        I kept WKURLRef and WKStringRef distinct opaque types in the API for now,
        though, since there may be profit in changing their backing stores in the
        future, and it's nice for the API to encode a difference between generic
        strings and strings that are valid, canonical URLs.

        * Shared/KURLWrapper.h: Removed. Yay!

        * Shared/WebCoreTypeArgumentMarshalling.h: Nixed KURL marshalling functions.
        Old callers marshal Strings now, instead. (This is what KURL was doing
        under the covers, anyway.)

        * UIProcess/API/C/WKAPICast.h:
        (toWK): Backed by StringImpl* now.
        (toURLRef): Added a disambiguating function for specifying that you want
        a WKURLRef, since StringImpl* converts to WKStringRef by default.

        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameGetProvisionalURL):
        (WKFrameGetURL):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageLoadURL):
        * UIProcess/API/C/WKURL.cpp:
        * UIProcess/API/C/cf/WKURLCF.cpp:
        (WKURLCreateWithCFURL):
        (WKURLCopyCFURL):
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didStartProvisionalLoad):
        (WebKit::WebFrameProxy::didCommitLoad):
        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::url):
        (WebKit::WebFrameProxy::provisionalURL):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadURL):
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForMIMEType):
        (WebKit::WebPageProxy::processDidExit):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::urlAtProcessExit):
        * UIProcess/WebPolicyClient.cpp:
        (WebKit::WebPolicyClient::decidePolicyForNavigationAction):
        (WebKit::WebPolicyClient::decidePolicyForNewWindowAction):
        (WebKit::WebPolicyClient::decidePolicyForMIMEType):
        * UIProcess/WebPolicyClient.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidStartProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForMIMEType):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadURL):
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebPage/WebPage.h: Replaced KURL / KURLWrapper with String.

2010-04-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Fix horizontal scrollbar repainting
        https://bugs.webkit.org/show_bug.cgi?id=37626

        Make sure that the update chunk is flipped because that's what WebCore expects.
        
        * Shared/mac/UpdateChunk.cpp:
        (WebKit::UpdateChunk::createImage):
        * Shared/mac/UpdateChunk.h:
        Add new createImage member function that creates a CGImageRef from the update chunk.
        
        * UIProcess/mac/DrawingAreaProxyUpdateChunk.mm:
        (WebKit::DrawingAreaProxyUpdateChunk::drawUpdateChunkIntoBackingStore):
        Pass the right rectangle here; CoreGraphics wants it in non-flipped coordinates.
        
        (WebKit::DrawingAreaProxyUpdateChunk::ensureBackingStore):
        Create a flipped backing store.

        * WebProcess/WebPage/mac/DrawingAreaUpdateChunk.cpp:
        (WebKit::DrawingAreaUpdateChunk::paintIntoUpdateChunk):
        Flip the update chunk.

2010-04-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add WKRetainPtr helper class as private header
        https://bugs.webkit.org/show_bug.cgi?id=37603

        WKRetainPtr is just like RetainPtr, but works for WK types instead of
        CF/NS types.

        * UIProcess/API/cpp: Added.
        * UIProcess/API/cpp/WKRetainPtr.h: Added.
        * WebKit2.xcodeproj/project.pbxproj: Add new file.
        * win/WebKit2.vcproj: Ditto.

2010-04-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Make the WebProcess a LSUIElement to suppress its icon from the Dock.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Info.plist:

2010-04-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Factor code to paint into an update chunk out into a separate function.
        https://bugs.webkit.org/show_bug.cgi?id=37594

        * WebProcess/WebPage/mac/DrawingAreaUpdateChunk.cpp:
        (WebKit::DrawingAreaUpdateChunk::paintIntoUpdateChunk):
        (WebKit::DrawingAreaUpdateChunk::display):
        (WebKit::DrawingAreaUpdateChunk::setSize):
        * WebProcess/WebPage/mac/DrawingAreaUpdateChunk.h:

2010-04-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix reported leaks when quitting MiniBrowser with open pages.

        * WebProcess/WebPage/WebPage.h: Make close() public.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::removeWebPage):
        (WebKit::WebProcess::didClose): If the UIProcess disappears, close
        the live pages in an effort to not leak.
        * WebProcess/WebProcess.h:

2010-04-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Do a JS collection and clear the memory cache to improve leaks output
        when exiting. Only do this in debug builds as it is slow.

        * UIProcess/API/mac/WKView.h:
        * UIProcess/WebProcessProxy.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::shutdown):
        (WebKit::WebProcess::didClose):

2010-04-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Adele Peterson.

        Post a null event after calling [NSApp stop] to flush the run loop
        and finish teardown.

        * Platform/mac/RunLoopMac.mm:
        (RunLoop::stop):

2010-04-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add #ifdef so that WKView is not included on the mac if not
        compiling objective-c.

        * UIProcess/API/C/WebKit2.h:

2010-04-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Add WebKit2 solution file.

        * WebKit2.sln: Added.

2010-04-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=37417
        Move duplicated internal CoreIPC message kinds to a
        header.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::processIncomingMessage):
        * Platform/CoreIPC/CoreIPCMessageKinds.h: Added.
        (CoreIPC::CoreIPCMessage::):
        (CoreIPC::):
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2010-04-11  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Anders Carlsson.

        Disable not-implemented warnings by default for now.

        * Shared/NotImplemented.h:

2010-04-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=37399
        Remove use of STL data structures from CoreIPC code

        * Platform/CoreIPC/ArgumentDecoder.cpp:
        (CoreIPC::ArgumentDecoder::ArgumentDecoder):
        (CoreIPC::ArgumentDecoder::decodeBytes):
        (CoreIPC::ArgumentDecoder::removeAttachment):
        * Platform/CoreIPC/ArgumentDecoder.h:
        Use WTF::Deque instead of std::queue and WTF::Vector
        instead of std::vector. Replace use of malloc/free with 
        fastMalloc/fastFree.

        * Platform/CoreIPC/ArgumentEncoder.cpp:
        (CoreIPC::ArgumentEncoder::addAttachment):
        (CoreIPC::ArgumentEncoder::releaseAttachments):
        * Platform/CoreIPC/ArgumentEncoder.h:
        Use WTF::Vector instead of std::list. Replace use of malloc/free
        with fastMalloc/fastFree.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendMessage):
        (CoreIPC::Connection::waitForMessage):
        (CoreIPC::Connection::processIncomingMessage):
        (CoreIPC::Connection::sendOutgoingMessages):
        (CoreIPC::Connection::dispatchMessages):
        * Platform/CoreIPC/Connection.h:
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::sendOutgoingMessage):
        (CoreIPC::createArgumentDecoder):
        Use WTF::Vector instead of std::queue.

        * Platform/RunLoop.cpp:
        (RunLoop::performWork):
        (RunLoop::scheduleWork):
        * Platform/RunLoop.h:
        Ditto.

        * Platform/WorkQueue.h:
        * Platform/win/WorkQueueWin.cpp:
        (WorkQueue::scheduleWork):
        (WorkQueue::performWork):
        Ditto.

2010-04-10  Mark Rowe  <mrowe@apple.com>

        Fix an obviously incorrect part of the Xcode configuration cleanup that resulted in debug builds
        asserting shortly after launch.

        * WebKit2.xcodeproj/project.pbxproj: Fix the setting of DEBUG_DEFINES for the Debug configuration.

2010-04-09  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Bring the WebKit2 Xcode configuration in to sync with recent changes to the WebKit Xcode configuration files.

        In particular, this updates the FEATURE_DEFINES to match those used in the other projects, and brings in
        the changes to support building WebKit for older Mac OS X versions from the current Mac OS X version.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:

2010-04-09  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Clean up the Xcode project configuration.

        Common target settings are pulled out in to BaseTarget.xcconfig.  The majority of setting overrides are
        removed from the Xcode project itself.  Info.plist files are updated to match those used in other frameworks.

        * Configurations/BaseTarget.xcconfig: Copied from WebKit2/Configurations/WebKit2.xcconfig.
        * Configurations/WebKit2.xcconfig:
        * Configurations/WebProcess.xcconfig: Copied from WebKit2/Configurations/WebKit2.xcconfig.
        * Info.plist:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess-Info.plist: Removed.
        * WebProcess/Info.plist: Moved from WebProcess-Info.plist.

2010-04-09  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.m:
        (InitWebCoreSystemInterface): Update for recent WKSI changes.

2010-04-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=37351
        Cannot build with build-webkit --webkit2

        Add some headers that it seems others are not getting
        already.

        * Platform/mac/WorkQueueMac.cpp: #inlude <mach/mach_port.h>
        * Shared/mac/UpdateChunk.cpp: #inlude <mach/vm_map.h>

2010-04-09  Anders Carlsson  <andersca@apple.com>

        More build fixes.
        
        * WebProcess/win/WebProcessMain.h:
        Include windows.h here.
        
        * win/WebKit2.def:
        Add new exports.

        * win/WebKit2.vcproj:
        Add new files.

2010-04-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add new WKString.h and WKURL.h headers to top
        level include.

        * UIProcess/API/C/WebKit2.h:

2010-04-09  Anders Carlsson  <andersca@apple.com>

        More Windows build fixes.
        
        * Shared/NotImplemented.h:
        * UIProcess/API/C/cf/WKURLCF.cpp:
        Fix typo.
        
        (WKURLCreateWithCFURL):
        * UIProcess/API/C/cf/WKURLCF.h:
        Ditto.
        
        * win/WebKit2Generated.make:
        Copy the new CF headers.

2010-04-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Two more #include sorting issues.

        * Shared/NotImplemented.h:
        * WebProcess/WebPage/win/DrawingAreaUpdateChunk.cpp:

2010-04-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix minor style nits found by the style-script.

        * Platform/CoreIPC/ArgumentDecoder.h:
        * Platform/CoreIPC/ArgumentEncoder.cpp:
        * Platform/CoreIPC/Attachment.cpp:
        * Platform/CoreIPC/Connection.cpp:
        * Platform/CoreIPC/Connection.h:
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        * Platform/CoreIPC/win/ConnectionWin.cpp:
        * Platform/WorkQueue.h:
        * Platform/mac/WorkQueueMac.cpp:
        * Platform/win/RunLoopWin.cpp:
        * Shared/KURLWrapper.h:
        * Shared/WebCoreTypeArgumentMarshalling.h:
        * Shared/mac/UpdateChunk.cpp:
        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/C/WKURL.cpp:
        * UIProcess/Launcher/win/WebProcessLauncher.cpp:
        * UIProcess/ResponsivenessTimer.cpp:
        * UIProcess/WebLoaderClient.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPolicyClient.cpp:
        * UIProcess/WebUIClient.cpp:
        * UIProcess/win/DrawingAreaProxy.cpp:
        * UIProcess/win/WebView.cpp:
        * WebProcess/Launching/win/WebProcessWinMain.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.h:
        * WebProcess/WebCoreSupport/win/WebCoreLocalizedStrings.cpp:
        * WebProcess/WebCoreSupport/win/WebErrorsWin.cpp:
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/mac/DrawingAreaUpdateChunk.cpp:
        * WebProcess/WebProcess.h:
        * WebProcess/win/WebLocalizableStrings.cpp:
        * WebProcess/win/WebLocalizableStrings.h:
        * WebProcess/win/WebProcessMain.cpp:

2010-04-09  Anders Carlsson  <andersca@apple.com>

        Fix Windows build.

        * Shared/NotImplemented.h:
        Include stdio.h.

2010-04-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=37347
        Don't use CF types in the new C API

        Replace all uses of CF types in the C API.
        - Replace CFStringRef with WKStringRef.
        - Replace CFURLRef with WKURLRef.

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

        * Shared/KURLWrapper.h: Added. RefCounted wrapper around KURL.
        * UIProcess/API/C/WKAPICast.h: Add new conversions.
        * UIProcess/API/C/WKBase.h: Add new types.
        * UIProcess/API/C/WKFrame.cpp:
        * UIProcess/API/C/WKFrame.h: 
        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/C/WKPage.h:
        Replace uses of CF types with WK equivalents.

        * UIProcess/API/C/WKString.cpp: Added.
        * UIProcess/API/C/WKString.h: Added.
        Represents a WebCore::StringImpl*.

        * UIProcess/API/C/WKURL.cpp: Added.
        * UIProcess/API/C/WKURL.h: Added.
        Represents a WebKit::KURLWrapper*.

        * UIProcess/API/C/cf: Added.
        * UIProcess/API/C/cf/WKStringCF.cpp: Added.
        * UIProcess/API/C/cf/WKStringCF.h: Added.
        * UIProcess/API/C/cf/WKURLCF.cpp: Added.
        * UIProcess/API/C/cf/WKURLCF.h: Added.
        CoreFoundation conversion files. Allows converting
         WKStringRef <-> CFStringRef
         WKURLRef <-> CFURLRef

        * UIProcess/ScriptReturnValueCallback.cpp:
        (WebKit::ScriptReturnValueCallback::performCallbackWithReturnValue):
        * UIProcess/ScriptReturnValueCallback.h:
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didStartProvisionalLoad):
        (WebKit::WebFrameProxy::didCommitLoad):
        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::url):
        (WebKit::WebFrameProxy::provisionalURL):
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::didReceiveTitleForFrame):
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::didReceiveTitleForFrame):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForMIMEType):
        (WebKit::WebPageProxy::runJavaScriptAlert):
        (WebKit::WebPageProxy::didRunJavaScriptInMainFrame):
        (WebKit::WebPageProxy::processDidExit):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::pageTitle):
        (WebKit::WebPageProxy::urlAtProcessExit):
        * UIProcess/WebPolicyClient.cpp:
        (WebKit::WebPolicyClient::decidePolicyForNavigationAction):
        (WebKit::WebPolicyClient::decidePolicyForNewWindowAction):
        (WebKit::WebPolicyClient::decidePolicyForMIMEType):
        * UIProcess/WebPolicyClient.h:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::runJavaScriptAlert):
        * UIProcess/WebUIClient.h:
        Don't use CF types internally at all.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::frameLoaderDestroyed):
        Fix typo.

2010-04-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add build support for WebKit2.

        * Configurations: Added.
        * Configurations/Base.xcconfig: Added.
        * Configurations/DebugRelease.xcconfig: Added.
        * Configurations/FeatureDefines.xcconfig: Added.
        * Configurations/Version.xcconfig: Added.
        * Configurations/WebKit2.xcconfig: Added.
        * English.lproj: Added.
        * English.lproj/InfoPlist.strings: Added.
        * Info.plist: Added.
        * Makefile: Added.
        * WebKit2.xcodeproj: Added.
        * WebKit2.xcodeproj/project.pbxproj: Added.
        * WebKit2Prefix.cpp: Added.
        * WebKit2Prefix.h: Added.
        * WebKit2_Prefix.pch: Added.
        * WebProcess-Info.plist: Added.
        * version.plist: Added.
        * win: Added.
        * win/WebKit2.def: Added.
        * win/WebKit2.vcproj: Added.
        * win/WebKit2Generated.make: Added.
        * win/WebKit2Generated.vcproj: Added.
        * win/WebKit2WebProcess.vcproj: Added.

2010-04-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=37301
        Add WebKit2/UIProcess directory.

        * UIProcess: Added.
        * UIProcess/API: Added.
        * UIProcess/API/C: Added.
        * UIProcess/API/C/WKAPICast.h: Added.
        * UIProcess/API/C/WKBase.h: Added.
        * UIProcess/API/C/WKContext.cpp: Added.
        * UIProcess/API/C/WKContext.h: Added.
        * UIProcess/API/C/WKFrame.cpp: Added.
        * UIProcess/API/C/WKFrame.h: Added.
        * UIProcess/API/C/WKFramePolicyListener.cpp: Added.
        * UIProcess/API/C/WKFramePolicyListener.h: Added.
        * UIProcess/API/C/WKPage.cpp: Added.
        * UIProcess/API/C/WKPage.h: Added.
        * UIProcess/API/C/WKPageNamespace.cpp: Added.
        * UIProcess/API/C/WKPageNamespace.h: Added.
        * UIProcess/API/C/WKPreferences.cpp: Added.
        * UIProcess/API/C/WKPreferences.h: Added.
        * UIProcess/API/C/WebKit2.h: Added.
        * UIProcess/API/mac: Added.
        * UIProcess/API/mac/PageClientImpl.h: Added.
        * UIProcess/API/mac/PageClientImpl.mm: Added.
        * UIProcess/API/mac/WKView.h: Added.
        * UIProcess/API/mac/WKView.mm: Added.
        * UIProcess/API/mac/WKViewInternal.h: Added.
        * UIProcess/API/win: Added.
        * UIProcess/API/win/WKAPICastWin.h: Added.
        * UIProcess/API/win/WKBaseWin.h: Added.
        * UIProcess/API/win/WKView.cpp: Added.
        * UIProcess/API/win/WKView.h: Added.
        * UIProcess/Launcher: Added.
        * UIProcess/Launcher/WebProcessLauncher.h: Added.
        * UIProcess/Launcher/mac: Added.
        * UIProcess/Launcher/mac/WebProcessLauncher.mm: Added.
        * UIProcess/Launcher/win: Added.
        * UIProcess/Launcher/win/WebProcessLauncher.cpp: Added.
        * UIProcess/PageClient.h: Added.
        * UIProcess/ProcessModel.h: Added.
        * UIProcess/ResponsivenessTimer.cpp: Added.
        * UIProcess/ResponsivenessTimer.h: Added.
        * UIProcess/ScriptReturnValueCallback.cpp: Added.
        * UIProcess/ScriptReturnValueCallback.h: Added.
        * UIProcess/WebContext.cpp: Added.
        * UIProcess/WebContext.h: Added.
        * UIProcess/WebFramePolicyListenerProxy.cpp: Added.
        * UIProcess/WebFramePolicyListenerProxy.h: Added.
        * UIProcess/WebFrameProxy.cpp: Added.
        * UIProcess/WebFrameProxy.h: Added.
        * UIProcess/WebLoaderClient.cpp: Added.
        * UIProcess/WebLoaderClient.h: Added.
        * UIProcess/WebPageNamespace.cpp: Added.
        * UIProcess/WebPageNamespace.h: Added.
        * UIProcess/WebPageProxy.cpp: Added.
        * UIProcess/WebPageProxy.h: Added.
        * UIProcess/WebPolicyClient.cpp: Added.
        * UIProcess/WebPolicyClient.h: Added.
        * UIProcess/WebPreferences.cpp: Added.
        * UIProcess/WebPreferences.h: Added.
        * UIProcess/WebProcessManager.cpp: Added.
        * UIProcess/WebProcessManager.h: Added.
        * UIProcess/WebProcessProxy.cpp: Added.
        * UIProcess/WebProcessProxy.h: Added.
        * UIProcess/WebUIClient.cpp: Added.
        * UIProcess/WebUIClient.h: Added.
        * UIProcess/mac: Added.
        * UIProcess/mac/DrawingAreaProxy.h: Added.
        * UIProcess/mac/DrawingAreaProxy.mm: Added.
        * UIProcess/mac/DrawingAreaProxyUpdateChunk.h: Added.
        * UIProcess/mac/DrawingAreaProxyUpdateChunk.mm: Added.
        * UIProcess/win: Added.
        * UIProcess/win/DrawingAreaProxy.cpp: Added.
        * UIProcess/win/DrawingAreaProxy.h: Added.
        * UIProcess/win/WebView.cpp: Added.
        * UIProcess/win/WebView.h: Added.

2010-04-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig and Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=37300
        Add WebKit2/WebProcess directory.

        * WebProcess: Added.
        * WebProcess/Launching: Added.
        * WebProcess/Launching/mac: Added.
        * WebProcess/Launching/mac/WebProcessMain.mm: Added.
        * WebProcess/Launching/win: Added.
        * WebProcess/Launching/win/WebProcessWinMain.cpp: Added.
        * WebProcess/WebCoreSupport: Added.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp: Added.
        * WebProcess/WebCoreSupport/WebChromeClient.h: Added.
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp: Added.
        * WebProcess/WebCoreSupport/WebContextMenuClient.h: Added.
        * WebProcess/WebCoreSupport/WebDragClient.cpp: Added.
        * WebProcess/WebCoreSupport/WebDragClient.h: Added.
        * WebProcess/WebCoreSupport/WebEditorClient.cpp: Added.
        * WebProcess/WebCoreSupport/WebEditorClient.h: Added.
        * WebProcess/WebCoreSupport/WebErrors.h: Added.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: Added.
        * WebProcess/WebCoreSupport/WebInspectorClient.h: Added.
        * WebProcess/WebCoreSupport/mac: Added.
        * WebProcess/WebCoreSupport/mac/WebErrorsMac.mm: Added.
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.h: Added.
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.m: Added.
        * WebProcess/WebCoreSupport/win: Added.
        * WebProcess/WebCoreSupport/win/WebCoreLocalizedStrings.cpp: Added.
        * WebProcess/WebCoreSupport/win/WebErrorsWin.cpp: Added.
        * WebProcess/WebPage: Added.
        * WebProcess/WebPage/DrawingArea.cpp: Added.
        * WebProcess/WebPage/DrawingArea.h: Added.
        * WebProcess/WebPage/WebFrame.cpp: Added.
        * WebProcess/WebPage/WebFrame.h: Added.
        * WebProcess/WebPage/WebPage.cpp: Added.
        * WebProcess/WebPage/WebPage.h: Added.
        * WebProcess/WebPage/mac: Added.
        * WebProcess/WebPage/mac/DrawingAreaUpdateChunk.cpp: Added.
        * WebProcess/WebPage/mac/DrawingAreaUpdateChunk.h: Added.
        * WebProcess/WebPage/mac/WebPageMac.mm: Added.
        * WebProcess/WebPage/win: Added.
        * WebProcess/WebPage/win/DrawingAreaUpdateChunk.cpp: Added.
        * WebProcess/WebPage/win/DrawingAreaUpdateChunk.h: Added.
        * WebProcess/WebPage/win/WebPageWin.cpp: Added.
        * WebProcess/WebProcess.cpp: Added.
        * WebProcess/WebProcess.h: Added.
        * WebProcess/win: Added.
        * WebProcess/win/DllMain.cpp: Added.
        * WebProcess/win/WebLocalizableStrings.cpp: Added.
        * WebProcess/win/WebLocalizableStrings.h: Added.
        * WebProcess/win/WebProcessMain.cpp: Added.
        * WebProcess/win/WebProcessMain.h: Added.

2010-04-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=37295
        Add WebKit2/Shared directory.

        * Shared: Added.
        * Shared/CoreIPCSupport: Added.
        * Shared/CoreIPCSupport/DrawingAreaMessageKinds.h: Added.
        * Shared/CoreIPCSupport/DrawingAreaProxyMessageKinds.h: Added.
        * Shared/CoreIPCSupport/WebPageMessageKinds.h: Added.
        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h: Added.
        * Shared/CoreIPCSupport/WebProcessMessageKinds.h: Added.
        * Shared/NotImplemented.h: Added.
        * Shared/WebCoreTypeArgumentMarshalling.h: Added.
        * Shared/WebEvent.h: Added.
        * Shared/WebEventConversion.cpp: Added.
        * Shared/WebEventConversion.h: Added.
        * Shared/WebPreferencesStore.cpp: Added.
        * Shared/WebPreferencesStore.h: Added.
        * Shared/mac: Added.
        * Shared/mac/UpdateChunk.cpp: Added.
        * Shared/mac/UpdateChunk.h: Added.
        * Shared/mac/WebEventFactory.h: Added.
        * Shared/mac/WebEventFactory.mm: Added.
        * Shared/win: Added.
        * Shared/win/UpdateChunk.cpp: Added.
        * Shared/win/UpdateChunk.h: Added.
        * Shared/win/WebEventFactory.cpp: Added.
        * Shared/win/WebEventFactory.h: Added.

2010-04-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=37293
        Add WebKit2/Platform directory.

        * Platform: Added.
        * Platform/CoreIPC: Added.
        * Platform/CoreIPC/ArgumentDecoder.cpp: Added.
        * Platform/CoreIPC/ArgumentDecoder.h: Added.
        * Platform/CoreIPC/ArgumentEncoder.cpp: Added.
        * Platform/CoreIPC/ArgumentEncoder.h: Added.
        * Platform/CoreIPC/Arguments.h: Added.
        * Platform/CoreIPC/Attachment.cpp: Added.
        * Platform/CoreIPC/Attachment.h: Added.
        * Platform/CoreIPC/Connection.cpp: Added.
        * Platform/CoreIPC/Connection.h: Added.
        * Platform/CoreIPC/MessageID.h: Added.
        * Platform/CoreIPC/mac: Added.
        * Platform/CoreIPC/mac/ConnectionMac.cpp: Added.
        * Platform/CoreIPC/mac/MachPort.h: Added.
        * Platform/CoreIPC/win: Added.
        * Platform/CoreIPC/win/ConnectionWin.cpp: Added.
        * Platform/PlatformProcessIdentifier.h: Added.
        * Platform/RunLoop.cpp: Added.
        * Platform/RunLoop.h: Added.
        * Platform/WorkItem.h: Added.
        * Platform/WorkQueue.cpp: Added.
        * Platform/WorkQueue.h: Added.
        * Platform/mac: Added.
        * Platform/mac/RunLoopMac.mm: Added.
        * Platform/mac/WorkQueueMac.cpp: Added.
        * Platform/win: Added.
        * Platform/win/RunLoopWin.cpp: Added.

2010-04-08  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Mark Rowe.

        Add WebKit2 directory.
