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

        Reviewed by Sam Weinig.

        UI process thinks the page is unresponsive when a plug-in is showing a context menu
        https://bugs.webkit.org/show_bug.cgi?id=58943
        <rdar://problem/9299901>

        Change the HandleMouseEvent message to have a delayed reply and make the PluginControllerProxy
        respond to it immediately, before even passing the event to the plug-in. Since it doesn't matter
        for mouse events whether the plug-in handled them or not we can do this.

        Another solution could have been to make handleMouseEvent an asynchronous message, but that could
        mess up the message ordering so this seemed like the least intrusive change.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::handleMouseEvent):
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginControllerProxy.messages.in:

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

        Reviewed by Dan Bernstein.

        Terminate hung plug-in processes after 45 seconds
        https://bugs.webkit.org/show_bug.cgi?id=58932
        <rdar://problem/8083219>

        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::pluginSyncMessageSendTimedOut):
        Find the plug-in process proxy and terminate it.

        (WebKit::PluginProcessManager::pluginProcessWithPath):
        Add new helper function.

        (WebKit::PluginProcessManager::getOrCreatePluginProcess):
        Call pluginProcessWithPath.

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::terminate):
        Terminate the process.

        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::pluginSyncMessageSendTimedOut):
        Call PluginProcessManager::pluginSyncMessageSendTimedOut.

        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        Add PluginSyncMessageSendTimedOut message.

        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::defaultSyncMessageTimeout):
        (WebKit::PluginProcessConnection::PluginProcessConnection):
        Set a sync message timeout on the plug-in process connection.

        (WebKit::PluginProcessConnection::syncMessageSendTimedOut):
        Send a message to the web process proxy.

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

        Reviewed by Adele Peterson.

        WebKit2: Merge SelectionState and TextInputState
        https://bugs.webkit.org/show_bug.cgi?id=58919

        Combined TextInputState and EditorState in one structure, which is updated whenever we get
        a chance to. There is no sense to keep possibly stale SelectionState data when we have already
        requested the most recent data synchronously.

        This also simplifies the code, as we don't need to pass the state around in a separate variable.

        * GNUmakefile.am:
        * Scripts/webkit2/messages.py:
        * Shared/EditorState.h: Copied from Source/WebKit2/Shared/SelectionState.h.
        (WebKit::EditorState::EditorState):
        * Shared/SelectionState.h: Removed.
        * Shared/mac/TextInputState.h: Removed.
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::interpretKeyEvent):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView validRequestorForSendType:returnType:]):
        (-[WKView validateUserInterfaceItem:]):
        (-[WKView shouldDelayWindowOrderingForEvent:]):
        (-[WKView doCommandBySelector:]):
        (-[WKView insertText:replacementRange:]):
        (-[WKView _handleStyleKeyEquivalent:]):
        (-[WKView _executeSavedKeypressCommands]):
        (-[WKView inputContext]):
        (-[WKView hasMarkedText]):
        (-[WKView unmarkText]):
        (-[WKView setMarkedText:selectedRange:replacementRange:]):
        (-[WKView attributedSubstringForProposedRange:actualRange:]):
        (-[WKView _interpretKeyEvent:savingCommandsTo:WebCore::]):
        (-[WKView _updateSecureInputState]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::editorStateChanged):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::editorState):
        (WebKit::WebPageProxy::hasSelectedRange):
        (WebKit::WebPageProxy::isContentEditable):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setComposition):
        (WebKit::WebPageProxy::confirmComposition):
        (WebKit::WebPageProxy::insertText):
        (WebKit::WebPageProxy::executeKeypressCommands):
        (WebKit::WebPageProxy::writeSelectionToPasteboard):
        (WebKit::WebPageProxy::readSelectionFromPasteboard):
        (WebKit::WebPageProxy::interpretQueuedKeyEvent):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::compositionSelectionChanged):
        (WebKit::WebView::onIMEComposition):
        (WebKit::WebView::onIMEEndComposition):
        (WebKit::WebView::onIMERequestCharPosition):
        (WebKit::WebView::onIMERequest):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::respondToChangedSelection):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::handleEditingKeyboardEvent):
        (WebKit::WebPage::setComposition):
        (WebKit::WebPage::confirmComposition):
        (WebKit::WebPage::insertText):
        (WebKit::WebPage::executeKeypressCommands):
        * win/WebKit2.vcproj:

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

        Reviewed by Timothy Hatcher.

        100% reproducible crash when right-clicking any element in Web Inspector on any page
        https://bugs.webkit.org/show_bug.cgi?id=58822

        Web Inspector changes selection from JavaScript, and checks in UI process are insufficient
        when selection is changing asynchronously.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::writeSelectionToPasteboard): Check that there is a selection, matching WK1
        and UI process side. Perhaps the check should really be in WebCore, but for now, it's a
        WebKit responsibility.
        (WebKit::WebPage::readSelectionFromPasteboard): Same check, for no other reason but consistency.

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

        Reviewed by Sam Weinig.

        Add syncMessageSendTimedOut CoreIPC Connection::Client member function
        https://bugs.webkit.org/show_bug.cgi?id=58928

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::waitForSyncReply):
        Call syncMessageSendTimedOut.

        * Platform/CoreIPC/Connection.h:
        Add syncMessageSendTimedOut to Connection::Client.

        * PluginProcess/PluginProcess.cpp:
        * PluginProcess/PluginProcess.h:
        * PluginProcess/WebProcessConnection.cpp:
        * PluginProcess/WebProcessConnection.h:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        * UIProcess/WebProcessProxy.h:
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        * WebProcess/Plugins/PluginProcessConnection.h:
        * WebProcess/WebProcess.cpp:
        * WebProcess/WebProcess.h:
        Add syncMessageSendTimedOut stubs.

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

        Reviewed by Alexey Proskuryakov.

        Replace the didFailToSendSyncMessage Connection::Client function with a flag
        https://bugs.webkit.org/show_bug.cgi?id=58923

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::Connection):
        Initialize m_shouldExitOnSyncMessageSendFailure to false.

        (CoreIPC::Connection::setShouldExitOnSyncMessageSendFailure):
        Set m_didCloseOnConnectionWorkQueueCallback.

        (CoreIPC::Connection::sendSyncMessage):
        Call didFailToSendSyncMessage if we fail to send the sync message for some reason.

        (CoreIPC::Connection::didFailToSendSyncMessage):
        if m_shouldExitOnSyncMessageSendFailure is true, exit.

        * Platform/CoreIPC/Connection.h:
        Remove didFailToSendSyncMessage from Connection::Client.

        * PluginProcess/PluginProcess.cpp:
        * PluginProcess/PluginProcess.h:
        Remove didFailToSendSyncMessage.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initialize):
        * WebProcess/WebProcess.h:
        Remove didFailToSendSyncMessage. Call setShouldExitOnSyncMessageSendFailure on our
        UI process connection.

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

        Reviewed by Sam Weinig.

        Add a way to set the default sync message timeout for a CoreIPC connection
        https://bugs.webkit.org/show_bug.cgi?id=58908

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

        (CoreIPC::Connection::setDefaultSyncMessageTimeout):
        Set the m_defaultSyncMessageTimeout member variable.

        (CoreIPC::Connection::waitForSyncReply):
        Handle the timeout being one of our two special magic values.

        * Platform/CoreIPC/Connection.h:
        Add a DefaultTimeout constant and change the NoTimeout constant to be -1.

2011-04-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Rename lengthReceived to encodedDataLength/dataLength
        https://bugs.webkit.org/show_bug.cgi?id=58883

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

2011-04-19  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Antonio Gomes.

        WebKit2: Typo fix in WebPopupMenu::Type.
        https://bugs.webkit.org/show_bug.cgi?id=58891

        Fixed a typo, Seperator -> Separator.
        Also removed m_ prefix on an argument variable name.

        * Shared/WebPopupItem.h:
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::populate):
        * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
        (WebKit::WebPopupMenu::populateItems):

2011-04-19  Jon Honeycutt  <jhoneycutt@apple.com>

        WKContextDownloadURLRequest() should return a WKDownloadRef
        https://bugs.webkit.org/show_bug.cgi?id=58867
        Part of <rdar://problem/8931717>

        Reviewed by Steve Falkenburg.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextDownloadURLRequest):
        Return the result of calling WebContext::download().

        * UIProcess/API/C/WKContext.h:
        Updated return type of WKContextDownloadURLRequest().

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::download):
        Return the DownloadProxy returned by createDownloadProxy().
        (WebKit::WebContext::createDownloadProxy):
        Return the DownloadProxy.

        * UIProcess/WebContext.h:
        Changed return type of download() and createDownloadProxy().

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        Call the DownloadProxy's downloadID() function to get the ID.

2011-04-18  Jia Pu  <jpu@apple.com>

        Reviewed by Mark Rowe.

        WebKit needs to stop importing <AppKit/NSTextChecker.h>
        https://bugs.webkit.org/show_bug.cgi?id=58798
        <rdar://problem/9294938>

        Use public header <AppKit/NSSpellChecker.h> instead.

        * UIProcess/mac/CorrectionPanel.h:
        * UIProcess/mac/CorrectionPanel.mm:
        (correctionIndicatorType):
        (WebKit::CorrectionPanel::show):
        (WebKit::CorrectionPanel::dismissInternal):
        (WebKit::CorrectionPanel::handleAcceptedReplacement):
        * UIProcess/mac/TextCheckerMac.mm:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:

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

        Reviewed by Sam Weinig.

        WebKit2: WKTR should support WebKit2 full screen APIs
        https://bugs.webkit.org/show_bug.cgi?id=56318

        Add a new WKBundlePage API for Full Screen events, and move some of the implementation
        of WebFullScreenManager into the new InjectedBundlePageFullScreenClient class, so that
        the default behavior can be overridden by a WKBundlePageFullScreenClient.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::supportsFullScreen): Moved contents into InjectedBundlePageFullScreenClient.
        (WebKit::WebFullScreenManager::enterFullScreenForElement): Ditto.
        (WebKit::WebFullScreenManager::exitFullScreenForElement): Ditto.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetFullScreenClient): Added.
        (WKBundlePageWillEnterFullScreenForElement): Added.
        (WKBundlePageDidEnterFullScreenForElement): Added.
        (WKBundlePageWillExitFullScreenForElement): Added.
        (WKBundlePageDidExitFullScreenForElement): Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageFullScreenClient.cpp: Added.
        (WebKit::InjectedBundlePageFullScreenClient::supportsFullScreen): Added. 
        (WebKit::InjectedBundlePageFullScreenClient::enterFullScreenForElement): Added.
        (WebKit::InjectedBundlePageFullScreenClient::exitFullScreenForElement): Added.
        * WebProcess/InjectedBundle/InjectedBundlePageFullScreenClient.h: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::initializeInjectedBundleFullScreenClient): Added.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::injectedBundleFullScreenClient): Added.

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

        Reviewed by Maciej Stachowiak.

        Re-add a null check lost in r83081
        https://bugs.webkit.org/show_bug.cgi?id=58846

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

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

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Clean up tool-tip/status-bar confusion.
        https://bugs.webkit.org/show_bug.cgi?id=58844

        Tool-tips were incorrectly hooked up to the status bar text.
        Chrome::setStatusbarText() now correctly causes the QWKPage::statusBarMessage() signal.

        New API:
        - QWKPage::toolTipChanged(const QString& toolTip) [signal]

        QGraphicsWKView will automatically listen for this and set its own toolTip().

        * UIProcess/API/qt/ClientImpl.cpp:
        (qt_wk_setStatusText):
        * UIProcess/API/qt/ClientImpl.h:
        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::QGraphicsWKView):
        (QGraphicsWKViewPrivate::onToolTipChanged):
        * UIProcess/API/qt/qgraphicswkview.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::toolTipChanged):
        (QWKPage::QWKPage):
        * UIProcess/API/qt/qwkpage.h:

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

        Reviewed by Dan Bernstein.

        sandbox violation for ~/Library/Dictionaries
        https://bugs.webkit.org/show_bug.cgi?id=58841
        <rdar://problem/9294770>

        * WebProcess/com.apple.WebProcess.sb: Add to sandbox profile.
        No obvious harm from allowing this, though it's not 100% clear
        why it's needed.

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

        Try to fix the Windows build.

        * Scripts/webkit2/messages.py:

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

        Reviewed by Dan Bernstein.

        Get rid of WebProcessProxyLegacyMessage
        https://bugs.webkit.org/show_bug.cgi?id=58825

        * GNUmakefile.am:
        * Platform/CoreIPC/MessageID.h:
        * Shared/CoreIPCSupport/WebProcessProxyMessageKinds.h: Removed.
        * UIProcess/WebProcessProxy.cpp:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        * win/WebKit2.vcproj:

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

        Fix build.

        * UIProcess/Plugins/PluginInfoStore.h:

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

        Reviewed by Sam Weinig.

        Use the message generator for the GetPluginProcessConnection message
        https://bugs.webkit.org/show_bug.cgi?id=58815

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction):
        (CoreIPC::handleMessageDelayed):
        Add helper functions.

        * UIProcess/Plugins/PluginInfoStore.h:
        Mark class noncopyable.

        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::getPluginProcessConnection):
        This now takes a delayed reply.

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::getPluginProcessConnection):
        This now takes a delayed reply.

        (WebKit::PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch):
        (WebKit::PluginProcessProxy::didCreateWebProcessConnection):
        Call DelayedReply::send.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPluginProcessConnection):
        This now takes a delayed reply.
        
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        No need to handle this message here.

        * UIProcess/WebProcessProxy.messages.in:
        Add GetPluginProcessConnection message.

        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
        Don't use deprecatedSendSync.

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

        Reviewed by Adam Roben.

        Finish implementing delayed sync replies in the CoreIPC message generator
        https://bugs.webkit.org/show_bug.cgi?id=58814

        Put the DelayedReply function definitions in the .cpp file and fix bugs found by
        actually trying to compile the generated files.

        * Scripts/webkit2/messages.py:
        * Scripts/webkit2/messages_unittest.py:

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

        Reviewed by Adam Roben.

        Reproducible crash in Find on Page, on pages that use accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=58793
        <rdar://problem/9295870>

        Move the call to PageOverlay::setNeedsDisplay() back to WebPage::installPageOverlay;
        it needs to be called after we've told the drawing area that a page overlay has been installed.

        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::setPage):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::installPageOverlay):

2011-04-18  Jeff Miller  <jeffm@apple.com>

        Reviewed by Timothy Hatcher.

        WKFrameLoadState should be a uint32_t to match our API conventions
        https://bugs.webkit.org/show_bug.cgi?id=58785

        * UIProcess/API/C/WKFrame.h: typedef WKFrameLoadState as a uint32_t and define its values as an anonymous enum.

2011-04-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebKit2 GTK build after 84017.

        * GNUmakefile.am:
        * Shared/NativeWebMouseEvent.h:
        (WebKit::NativeWebMouseEvent::nativeEvent):
        * Shared/gtk/NativeWebMouseEventGtk.cpp: Copied from Source/WebKit2/Shared/NativeWebMouseEvent.h.
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent):
        * UIProcess/gtk/WebView.cpp:
        (WebKit::WebView::handleMouseEvent):

2011-04-17  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/58463> Switch HTTP pipelining from user default to private setting
        <rdar://problem/9268729>

        Reviewed by Dan Bernstein.

        This replaces support for the WebKitEnableHTTPPipelining user
        default with methods on the WebCore::ResourceRequest class in
        WebCore, the WebView class in WebKit1, and the WebContext class
        in WebKit2.  It also removes support for the
        WebKitForceHTTPPipeliningPriorityHigh user default which was not
        needed.

        * UIProcess/API/C/WKContext.cpp:
        (_WKContextSetHTTPPipeliningEnabled): Added.
        * UIProcess/API/C/WKContextPrivate.h:
        (_WKContextSetHTTPPipeliningEnabled): Added declaration.
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::setHTTPPipeliningEnabled): Added.
        (WebKit::WebContext::httpPipeliningEnabled): Added.
        * UIProcess/WebContext.h:
        (WebKit::WebContext::setHTTPPipeliningEnabled): Added declaration.
        (WebKit::WebContext::httpPipeliningEnabled): Added declaration.

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

        Reviewed by Geoffrey Garen.

        Make more strings in WebKit2 localizable
        https://bugs.webkit.org/show_bug.cgi?id=58757

        * UIProcess/API/mac/PDFViewController.mm:
        (-[WKPDFView menuForEvent:]):
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setViewportArguments):
        (WebKit::PageClientImpl::registerEditCommand):
        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::nameForEditAction):
        * UIProcess/WebEditCommandProxy.h:
        Use WebCore's localization macro to make more strings localizable.

2011-04-17  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Rename PLATFORM(CA) to USE(CA)
        https://bugs.webkit.org/show_bug.cgi?id=58742

        * WebProcess/WebPage/LayerTreeHost.cpp:
        * WebProcess/WebPage/win/LayerTreeHostWin.cpp:
        (WebKit::LayerTreeHost::supportsAcceleratedCompositing):

2011-04-17  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Rename PLATFORM(CG) to USE(CG)
        https://bugs.webkit.org/show_bug.cgi?id=58729

        * Shared/ShareableBitmap.h:
        * Shared/WebCoreArgumentCoders.cpp:
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebGraphicsContext.cpp:
        (WebKit::WebGraphicsContext::WebGraphicsContext):
        * Shared/WebGraphicsContext.h:
        * Shared/win/PlatformCertificateInfo.cpp:
        (WebKit::PlatformCertificateInfo::PlatformCertificateInfo):
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::setFindIndicator):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::drawRectToPDF):
        (WebKit::WebPage::drawPagesToPDF):
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::platformPreferencesDidChange):
        * config.h:

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

        Reviewed by Sam Weinig.

        Crash when NPP_Write returns -1 when writing the manual stream
        https://bugs.webkit.org/show_bug.cgi?id=58735
        <rdar://problem/9124993>

        If NPP_Write returns -1 we must cancel the stream.

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

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

        Reviewed by Simon Fraser.

        Pages in the PageCache don't have the correct visited link coloring after being restored
        https://bugs.webkit.org/show_bug.cgi?id=58721

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::visitedLinkStateChanged):
        (WebKit::WebProcess::allVisitedLinkStateChanged):
        Mark all pages in the page cache as needing visited link style recalc
        whenever visited link information changes.

2011-04-15  Daniel Bates  <dbates@webkit.org>

        Attempt to fix the Qt Linux Release build after changeset 84064 <http://trac.webkit.org/changeset/84064>
        (https://bugs.webkit.org/show_bug.cgi?id=58686).

        * UIProcess/API/qt/qwkpage_p.h: Remove takeFocus().

2011-04-15  Shishir Agrawal  <shishir@chromium.org>

        Reviewed by James Robinson.

        Add a flag to guard Page Visibility API changes.
        https://bugs.webkit.org/show_bug.cgi?id=58464

        * Configurations/FeatureDefines.xcconfig:

2011-04-15  Jeff Miller  <jeffm@apple.com>

        Reviewed by Sam Weinig.

        Add takeFocus callback to WKPageUIClient
        https://bugs.webkit.org/show_bug.cgi?id=58686

        On Windows, we need to handle moving focus out of the web view in the client, so add a takeFocus callback to WKPageUIClient
        and stop handling taking focus in the framework in WKView.mm on the Mac.

        * UIProcess/API/C/WKPage.h: Added WKFocusDirection enum and takeFocus to WKPageUIClient.
        * UIProcess/API/mac/PageClientImpl.h: Removed takeFocus().
        * UIProcess/API/mac/PageClientImpl.mm: Removed takeFocus().
        * UIProcess/API/mac/WKView.mm: Removed _takeFocus().
        * UIProcess/API/mac/WKViewInternal.h: Removed _takeFocus().
        * UIProcess/API/qt/ClientImpl.cpp:
        (qt_wk_takeFocus): Added.
        * UIProcess/API/qt/ClientImpl.h: Added qt_wk_takeFocus.
        * UIProcess/API/qt/qwkpage.cpp: Remove takeFocus().
        (QWKPage::QWKPage): Added takeFocus() callback.
        * UIProcess/PageClient.h: Removed takeFocus().
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::takeFocus): Call m_uiClient to take focus.
        * UIProcess/WebPageProxy.h: Pass FocusDirection as a uint32_t to takeFocus().
        * UIProcess/WebPageProxy.messages.in: Pass FocusDirection as a uint32_t in TakeFocus message.
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::takeFocus): Added.
        * UIProcess/WebUIClient.h: Added takeFocus().
        * UIProcess/win/WebView.cpp: Removed takeFocus(), which was never implemented on Windows.
        * UIProcess/win/WebView.h: Removed takeFocus().
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::takeFocus): Pass FocusDirection as a uint32_t in TakeFocus message.

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

        Reviewed by Sam Weinig.

        WebKit2: Stop using deprecated NSInputManager
        https://bugs.webkit.org/show_bug.cgi?id=58709

        Changed all mouse related functions to give NSInputContext a chance to handle the event,
        added logging. Removed -rightMouseMoved: method, which was added by accident.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView mouseMoved:]):
        (-[WKView mouseDown:]):
        (-[WKView mouseUp:]):
        (-[WKView mouseDragged:]):

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

        Potential crash getting a JS wrapper.

        <rdar://problem/8988741>

        Reviewed by Brian Weinstein.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::jsWrapperForWorld):
        Ensure that we have a valid m_coreFrame, because it can be cleared by
        invalidate().

2011-04-08  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QWebPage MIME type handling inconsistency with other web browsers
        https://bugs.webkit.org/show_bug.cgi?id=46968

        Implementing mime type sniffing based on
        http://tools.ietf.org/html/draft-abarth-mime-sniff-06.

        * WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.cpp:
        (WebCore::WebFrameNetworkingContext::WebFrameNetworkingContext):
        (WebCore::WebFrameNetworkingContext::MIMESniffingEnabled):
        * WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.h:

2011-04-15  Oliver Hunt  <oliver@apple.com>

        GC allocate Structure
        https://bugs.webkit.org/show_bug.cgi?id=58483

        Rolling r83894 r83827 r83810 r83809 r83808 back in with
        a workaround for the gcc bug seen by the gtk bots

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

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

        Reviewed by Sam Weinig.

        Add API to get the bundle page overlay fade in fraction.

        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        (WKBundlePageOverlayFractionFadedIn):
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.h:

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

        Reviewed by Dan Bernstein.

        Fade the find page overlay
        https://bugs.webkit.org/show_bug.cgi?id=58697

        * WebProcess/WebPage/FindController.cpp:
        Make the color components floats.

        (WebKit::overlayBackgroundColor):
        (WebKit::holeShadowColor):
        (WebKit::holeFillColor):
        Add helper functions for returning the colors given the fraction faded in.

        (WebKit::FindController::drawRect):
        Use the new helper functions.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::installPageOverlay):
        Start the fade animation unless we're replacing an already existing page overlay
        with another.

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

        Fix Windows build.

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

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

        Reviewed by Sam Weinig.

        Add the ability for PageOverlays to fade in and out
        https://bugs.webkit.org/show_bug.cgi?id=58694

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageUninstallPageOverlay):
        WebPage::uninstallPageOverlay now takes a boolean. Default to false for now.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::findString):
        Pass false to uninstallPageOverlay.

        (WebKit::FindController::hideFindUI):
        Pass true to uninstallPageOverlay.
        
        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::PageOverlay):
        Initialize new member variables.

        (WebKit::PageOverlay::bounds):
        Get rid of an unnecessary webPage() getter.

        (WebKit::PageOverlay::setPage):
        Stop the animation timer.

        (WebKit::PageOverlay::startFadeInAnimation):
        Update m_fractionFadedIn and call startFadeAnimation.

        (WebKit::PageOverlay::startFadeOutAnimation):
        Ditto.
        
        (WebKit::PageOverlay::startFadeAnimation):
        Initialize m_fadeAnimationStartTime and start the fade animation timer.

        (WebKit::PageOverlay::fadeAnimationTimerFired):
        Update m_fractionFadedIn and call setNeedsDisplay().

        * WebProcess/WebPage/PageOverlay.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::uninstallPageOverlay):
        If fadeOut is true, tell the page overlay to start the fade out animation.
        When the fade animation is complete, the page overlay will uninstall itself.

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

        Reviewed by Adam Roben.

        Views should be made visible before painting in WM_PRINTCLIENT messages
        https://bugs.webkit.org/show_bug.cgi?id=58676
        <rdar://problem/9279211>

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::onPrintClientEvent): If our view isn't currently visible set it to visible
            before painting, then reset it back to not visible after painting.
        (WebKit::WebView::onShowWindowEvent): Call setIsVisible instead of duplicating logic.
        (WebKit::WebView::setIsVisible): Set the m_isVisible flag and call viewStateDidChange.
        * UIProcess/win/WebView.h:

2011-04-15  Jon Lee  <jonlee@apple.com>

        Reviewed by Anders Carlsson.

        onClick does not function with <select> elements in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=57904
        <rdar://problem/9217757>

        Reviewed by Anders Carlsson.

        * Shared/NativeWebMouseEvent.h: Copied from Source/WebKit2/UIProcess/WebPopupMenuProxy.h.
        (WebKit::NativeWebMouseEvent::nativeEvent):
        * Shared/mac/NativeWebMouseEventMac.mm: Added.
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent):
        * Shared/qt/NativeWebMouseEventQt.cpp: Copied from Source/WebKit2/UIProcess/WebPopupMenuProxy.h.
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent):
        * Shared/win/NativeWebMouseEventWin.cpp: Copied from Source/WebKit2/UIProcess/WebPopupMenuProxy.h.
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView mouseMoved:]):
        (-[WKView _mouseHandler:]): Pre-compiler mouse handler calls need to use the new NativeWebMouseEvent class
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::mouseMoveEvent):
        (QWKPagePrivate::mousePressEvent):
        (QWKPagePrivate::mouseReleaseEvent):
        (QWKPagePrivate::mouseDoubleClickEvent):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleMouseEvent): keep track of mouse down event in order to be able to send a fake mouse up event on the select element
        (WebKit::WebPageProxy::currentMouseDownEvent): for access by the popup menu proxy to dispatch the fake mouse up event
        (WebKit::WebPageProxy::didReceiveEvent): clear out the cached mouse down event
        (WebKit::WebPageProxy::processDidCrash): clear out the cached events since we assume that didReceiveEvent did not called prior to the crash
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPopupMenuProxy.h:
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::showPopupMenu): after notifying the popup menu client that the value changed, fake mouse up and mouse move events are posted
        * UIProcess/win/WebPopupMenuProxyWin.cpp:
        (WebKit::WebPopupMenuProxyWin::showPopupMenu): after notifying the popup menu client that the value changed, fake mouse up and mouse move events are posted
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::onMouseEvent):
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

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

        Qt build fix.

        * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::selectionStateChanged): Wrap the variable
        in PLATFORM(MAC), too, as it's unused on other platforms.

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

        Reviewed by Dan Bernstein.

        <rdar://problem/9287880> and https://bugs.webkit.org/show_bug.cgi?id=58596
        WK2: Past searches not remembered for <input type=search results="5" autosave="foo">

        Add SaveRecentSearches and LoadRecentSearches messages:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebPageProxy.h:

        Message up to the UIProcess for the save/load operations:
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp:
        (WebKit::WebSearchPopupMenu::saveRecentSearches):
        (WebKit::WebSearchPopupMenu::loadRecentSearches):
        * WebProcess/WebCoreSupport/WebPopupMenu.h:
        (WebKit::WebPopupMenu::page):

        Save the values to disk CFPreference-style:
        * UIProcess/cf/WebPageProxyCF.cpp:
        (WebKit::autosaveKey):
        (WebKit::WebPageProxy::saveRecentSearches):
        (WebKit::WebPageProxy::loadRecentSearches):

        Stubbed out for non-CF platforms:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::saveRecentSearches):
        (WebKit::WebPageProxy::loadRecentSearches):
        * UIProcess/qt/WebPageProxyQt.cpp:
        (WebKit::WebPageProxy::saveRecentSearches):
        (WebKit::WebPageProxy::loadRecentSearches):

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

        Reviewed by Dan Bernstein.

        WebKit2: Password field input does not switch to ASCII-compatible source
        https://bugs.webkit.org/show_bug.cgi?id=58583
        <rdar://problem/9059651>

        The implementation is more modern than what we have in WK1. Instead of returning a null
        input context (as in non-editable content), we now set page context's properties.

        * UIProcess/PageClient.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm: (WebKit::PageClientImpl::updateSecureInputState):
        Forward updateSecureInputState() call from WebPageProxy to WKView.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView dealloc]): ASSERT that we didn't somehow leave secure input events enabled.
        (-[WKView becomeFirstResponder]): Update secure event mode.
        (-[WKView resignFirstResponder]): Disable secure event mode.
        (-[WKView setMarkedText:selectedRange:replacementRange:]): Prevent most advanced editing
        behaviors in password fields, matching NSSecureTextInputField.
        (-[WKView attributedSubstringForProposedRange:actualRange:]): Disable TSM Document Access
        in password fields. There is also a check in web process, but it doest't hurt to check twice.
        (-[WKView _windowDidBecomeKey:]): Call _updateSecureInputState.
        (-[WKView _windowDidResignKey:]): Call _updateSecureInputState.
        (-[WKView _updateSecureInputState]): Update secure event mode and allowed input sources.

        * UIProcess/API/mac/WKViewInternal.h: Added _updateSecureInputState.

        * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::selectionStateChanged): Update secure
        input state when going in or out a password field.

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

        Reviewed by Eric Carlson.

        REGRESSION: Rendering in <video> element appears to render quickly to catch up if it has been playing in a background tab
        https://bugs.webkit.org/show_bug.cgi?id=58637

        Notify AVFoundation that no one will be rendering when the view or window moves off screen.

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::isViewVisible): Return false if the view's window is not visible.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView addWindowObserversForWindow:]): Observe orderOut and orderIn events.
        (-[WKView removeWindowObservers]): Ditto.
        (-[WKView _windowDidOrderOffScreen:]): Added.
        (-[WKView _windowDidOrderOnScreen:]): Added.
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::suspendPainting): Call LayerTreeHost::pauseRendering.
        (WebKit::DrawingAreaImpl::resumePainting): Call LayerTreeHost::resumeRendering.
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit::LayerTreeHost::pauseRendering): Added stub.
        (WebKit::LayerTreeHost::resumeRendering): Added stub.
        * WebProcess/WebPage/ca/mac/LayerTreeHostCAMac.h:
        * WebProcess/WebPage/ca/mac/LayerTreeHostCAMac.mm:
        (WebKit::LayerTreeHostCAMac::pauseRendering): Added. Post a notification with our
            intention to stop rendering.
        (WebKit::LayerTreeHostCAMac::resumeRendering): Added. Post a notification with our
            intention to start rendering.

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

        Reviewed by Sam Weinig.

        WebKit2: Need a way to keep the WebProcess alive for testing purposes.
        https://bugs.webkit.org/show_bug.cgi?id=58592

        * UIProcess/API/C/WKContext.cpp:
        (WKContextDisableProcessTermination):
        (WKContextEnableProcessTermination):
        * UIProcess/API/C/WKContextPrivate.h:

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        Initialize m_processTerminationEnabled to true.
        (WebKit::WebContext::enableProcessTermination):
        Set m_processTerminationEnabled to true, and try to terminate the web process.
        (WebKit::WebContext::shouldTerminate):
        If !m_processTerminationEnabled, return false.
        * UIProcess/WebContext.h:
        (WebKit::WebContext::disableProcessTermination):
        Set m_processTerminationEnabled to false;

2011-04-15  Nancy Piedra  <nancy.piedra@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt][Symbian] Need to export ViewportAttributes class
        https://bugs.webkit.org/show_bug.cgi?id=58651

        On Symbian, if the ViewportAttributes class is not exported we get
        linking errors.

        Since this is a compilation issue, no new tests added.

        * UIProcess/API/qt/qwkpage.h:

2011-04-15  Anna Cavender  <annacc@chromium.org>

        Reviewed by Eric Carlson.

        Renaming TRACK feature define to VIDEO_TRACK
        https://bugs.webkit.org/show_bug.cgi?id=53556

        * Configurations/FeatureDefines.xcconfig:

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

        Reviewed by Sam Weinig.

        Select All context menu item doesn't work in Flash
        https://bugs.webkit.org/show_bug.cgi?id=58615
        <rdar://problem/9225761>

        In some cases, -[NSWindow isKeyWindow] will return false even if
        a window is the key window, so we have to compare our window
        against -[NSApplication keyWindow].

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::isViewWindowActive):

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

        Reviewed by Anders Carlsson.

        Add CFPreference based backend for WebKit2 preferences
        https://bugs.webkit.org/show_bug.cgi?id=58605

        * UIProcess/cf/WebPreferencesCF.cpp:
        (WebKit::cfStringFromWebCoreString):
        (WebKit::makeKey):
        (WebKit::setStringValueIfInUserDefaults):
        (WebKit::setBoolValueIfInUserDefaults):
        (WebKit::setUInt32ValueIfInUserDefaults):
        (WebKit::setDoubleValueIfInUserDefaults):
        (WebKit::WebPreferences::platformInitializeStore):
        (WebKit::WebPreferences::platformUpdateStringValueForKey):
        (WebKit::WebPreferences::platformUpdateBoolValueForKey):
        (WebKit::WebPreferences::platformUpdateUInt32ValueForKey):
        (WebKit::WebPreferences::platformUpdateDoubleValueForKey):
        Implement platform functions using CFPreferences API.

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

        Reviewed by Sam Weinig.

        <rdar://problem/8665102> and https://bugs.webkit.org/show_bug.cgi?id=58595
        Menu is not displayed for <input type=search results="5">

        * WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp:
        (WebKit::WebSearchPopupMenu::enabled): Return true, like all good search popup menus should.

        * WebProcess/WebCoreSupport/mac/WebPopupMenuMac.mm:
        (WebKit::WebPopupMenu::setUpPlatformData): Remember the shouldPopOver-ness.

        * Shared/PlatformPopupMenuData.cpp:
        (WebKit::PlatformPopupMenuData::encode): Remember the shouldPopOver-ness.
        (WebKit::PlatformPopupMenuData::decode): Remember the shouldPopOver-ness.
        * Shared/PlatformPopupMenuData.h:

        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::showPopupMenu): Use the shouldPopOver-ness to adjust display position.

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

        Reviewed by Dan Bernstein.

        Crash in NetscapePluginModule::tryGetSitesWithData when NPP_GetSitesWithData returns null
        https://bugs.webkit.org/show_bug.cgi?id=58578
        <rdar://problem/9275201>

        It's OK for NPP_GetSitesWithData to return null.

        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::tryGetSitesWithData):

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

        Reviewed by Anders Carlsson.

        Make creating WebPreferences lazy
        https://bugs.webkit.org/show_bug.cgi?id=58570

        * UIProcess/WebPageGroup.cpp:
        (WebKit::WebPageGroup::WebPageGroup):
        (WebKit::WebPageGroup::~WebPageGroup):
        (WebKit::WebPageGroup::setPreferences):
        (WebKit::WebPageGroup::preferences):
        * UIProcess/WebPageGroup.h:
        Don't create the WebPreference object until it is requested.

2011-04-14  Pratik Solanki  <psolanki@apple.com>

        Reviewed by David Kilzer.

        Set minimum priority for fast lane connections
        https://bugs.webkit.org/show_bug.cgi?id=58353

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Support for new WKSI method WKSetHTTPPipeliningMinimumFastLanePriority.

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

        Clang warning fixes.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/mac/TextCheckerMac.mm:
        * WebProcess/Downloads/mac/DownloadMac.mm:

2011-04-14  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Timothy Hatcher.

        WebKit2: Add an option for a PageGroup to be invisible to the History Client.
        https://bugs.webkit.org/show_bug.cgi?id=58547

        * Shared/WebPageGroupData.cpp:
        (WebKit::WebPageGroupData::encode):
        (WebKit::WebPageGroupData::decode):
        * Shared/WebPageGroupData.h:

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::inspectorPageGroup):
        The Web Inspector should not be visible to the History Client, because its HTML-based nature
        should not be exposed through the API.

        * UIProcess/WebPageGroup.cpp:
        (WebKit::WebPageGroup::create):
        (WebKit::WebPageGroup::WebPageGroup):
        * UIProcess/WebPageGroup.h:

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::updateGlobalHistory):
        Do not send the message to the WebContent for the history client.
        (WebKit::WebFrameLoaderClient::updateGlobalHistoryRedirectLinks):
        Ditto.
        (WebKit::WebFrameLoaderClient::setTitle):
        Ditto.

        * WebProcess/WebPage/WebPageGroupProxy.h:
        (WebKit::WebPageGroupProxy::isVisibleToHistoryClient):

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

        Reviewed by Andreas Kling.

        [Qt][WK2] Make Qt port compiling with ENABLE_PLUGIN_PROCESS=1
        https://bugs.webkit.org/show_bug.cgi?id=55719

        Guard functionality related to complex text and implementations
        that rely on MachPort with PLATFORM(MAC).
        Based on Oleg Romashin's patch.

        * PluginProcess/PluginControllerProxy.cpp:
        * PluginProcess/PluginControllerProxy.messages.in:
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::createWebProcessConnection):
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::createPlugin):
        * Shared/Plugins/PluginProcessCreationParameters.cpp:
        (WebKit::PluginProcessCreationParameters::decode): Fix bad C++ that
        does not compile with gcc-linux.
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch):
        (WebKit::PluginProcessProxy::didCreateWebProcessConnection):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.messages.in:
        * WebKit2.pro: Move implementation that does not need external
        visibility from WebKit2API.pri. Adding the headers as well.
        * WebKit2API.pri:
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
        * WebProcess/WebPage/WebPage.cpp:

2011-04-13  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        Allow setting composited backing stores for scrollbars and scroll corners
        https://bugs.webkit.org/show_bug.cgi?id=57202

        Update WebPopupMenuProxyWin to reflect ScrollableArea interface changes.

        * UIProcess/win/WebPopupMenuProxyWin.h:
        (WebKit::WebPopupMenuProxyWin::invalidateScrollCornerRect):
        (WebKit::WebPopupMenuProxyWin::scrollCornerPresent):
        (WebKit::WebPopupMenuProxyWin::scrollCornerRect):

2011-04-13  Jon Lee  <jonlee@apple.com>

        Reviewed by Maciej Stachowiak.

        REGRESSION(r81880): Paste menu is disabled for many edit fields (yahoo and google search, yahoo mail msg, forms, etc)
        https://bugs.webkit.org/show_bug.cgi?id=58284
        <rdar://problem/9246149>

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setFocused): Check for whether we are not supposed to be focused AND whether our platform behavior dictates to clear out the selection

2011-04-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Fixed a bug where WKView changed the cursor when the mouse was moving over other views.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView mouseMoved:]): If getting this message because this view is the first responder,
        ignore it unless it is inside the visible rect.

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

        Reviewed by Dan Bernstein.

        Should not rely on WKEditableLinkBehavior being in synch
        with WebCore::EditableLinkBehavior.
        https://bugs.webkit.org/show_bug.cgi?id=58473

        Adding conversion routines.

        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toAPI):
        (WebKit::toEditableLinkBehavior):
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetEditableLinkBehavior):
        (WKPreferencesGetEditableLinkBehavior):

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

        Reviewed by Dan Bernstein.

        After closing the last window, re-opening my last visited website is over 2X slower
        https://bugs.webkit.org/show_bug.cgi?id=58488
        <rdar://problem/9233518>

        Give the web process a 60 second termination timeout.

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

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

        Reviewed by Adam Roben.

        Convert WebProcess over to using disableTermination/enableTermination
        https://bugs.webkit.org/show_bug.cgi?id=58485

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::getSitesWithData):
        (WebKit::PluginProcess::clearSiteData):
        Use the LocalTerminationDisabler RAII class.

        * Shared/ChildProcess.h:
        (WebKit::ChildProcess::LocalTerminationDisabler::LocalTerminationDisabler):
        (WebKit::ChildProcess::LocalTerminationDisabler::~LocalTerminationDisabler):
        Add RAII class for calling disableTermination/enableTermination.

        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp:
        (WebKit::WebApplicationCacheManager::getApplicationCacheOrigins):
        (WebKit::WebApplicationCacheManager::deleteEntriesForOrigin):
        (WebKit::WebApplicationCacheManager::deleteAllEntries):
        Use the LocalTerminationDisabler RAII class.

        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::getHostnamesWithCookies):
        (WebKit::WebCookieManager::deleteCookiesForHostname):
        (WebKit::WebCookieManager::deleteAllCookies):
        (WebKit::WebCookieManager::startObservingCookieChanges):
        (WebKit::WebCookieManager::setHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManager::getHTTPCookieAcceptPolicy):
        Use the LocalTerminationDisabler RAII class.

        * WebProcess/Downloads/Download.cpp:
        (WebKit::Download::Download):
        Call disableTermination().

        (WebKit::Download::~Download):
        Call enableTermination().

        * WebProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::downloadFinished):
        Remove call to terminateIfPossible.

        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.cpp:
        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManager::deleteEntriesForOrigin):
        (WebKit::WebKeyValueStorageManager::deleteAllEntries):
        Use the LocalTerminationDisabler RAII class.
        
        * WebProcess/MediaCache/WebMediaCacheManager.cpp:
        (WebKit::WebMediaCacheManager::getHostnamesWithMediaCache):
        (WebKit::WebMediaCacheManager::clearCacheForHostname):
        (WebKit::WebMediaCacheManager::clearCacheForAllHostnames):
        Use the LocalTerminationDisabler RAII class.
        
        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::getCacheOrigins):
        (WebKit::WebResourceCacheManager::clearCacheForOrigin):
        (WebKit::WebResourceCacheManager::clearCacheForAllOrigins):
        Use the LocalTerminationDisabler RAII class.
        
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        (WebKit::WebDatabaseManager::getDatabasesByOrigin):
        (WebKit::WebDatabaseManager::getDatabaseOrigins):
        (WebKit::WebDatabaseManager::deleteDatabaseWithNameForOrigin):
        (WebKit::WebDatabaseManager::deleteDatabasesForOrigin):
        (WebKit::WebDatabaseManager::deleteAllDatabases):
        (WebKit::WebDatabaseManager::setQuotaForOrigin):
        Use the LocalTerminationDisabler RAII class.
        
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::createWebPage):
        Call disableTermination().

        (WebKit::WebProcess::removeWebPage):
        Call enableTermination().

        (WebKit::WebProcess::shouldTerminate):
        Move logic from terminateIfPossible over here.

        (WebKit::WebProcess::terminate):
        Move logic from terminateIfPossible over here.

        (WebKit::WebProcess::getSitesWithPluginData):
        (WebKit::WebProcess::clearPluginSiteData):
        Use the LocalTerminationDisabler RAII class.

        * WebProcess/WebProcess.h:
        Publically inherit from ChildProcess, LocalTerminationDisabler needs to be accessible
        from the WebProcess class.

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

        Reviewed by Adam Roben.

        Follow-up to: WebKit2 will load two copies of the same plugin, but should not
        https://bugs.webkit.org/show_bug.cgi?id=49075
        
        Use pathGetFileName instead of Win32 PathFindFileNameW.

        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        (WebKit::PluginInfoStore::shouldUsePlugin):

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

        Reviewed by Gavin Barraclough.

        WebKit2 doesn't keep overlay scrollers shown while scroll gesture held
        <rdar://problem/9260518>

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        Initialize new WKSI functions.

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

        Reviewed by Oliver Hunt.

        WebKit2 will load two copies of the same plugin, but should not
        https://bugs.webkit.org/show_bug.cgi?id=49075
        <rdar://problem/8635947>

        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        (WebKit::PluginInfoStore::shouldUsePlugin): Don't use a plug-in if we've already allowed a plug-in with the same filename.

2011-04-13  Timothy Hatcher  <timothy@apple.com>

        Hide the dictionary panel when navigating or crashing.

        <rdar://problem/9261202>

        Reviewed by Sam Weinig.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::dismissDictionaryLookupPanel): Added. Call WKHideWordDefinitionWindow.
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame): Call PageClient::dismissDictionaryLookupPanel.
        (WebKit::WebPageProxy::processDidCrash): Call dismissCorrectionPanel and PageClient::dismissDictionaryLookupPanel.

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

        Reviewed by Adam Roben.

        Add support for disabling/enabling termination to ChildProcess
        https://bugs.webkit.org/show_bug.cgi?id=58476

        Add ChildProcess::disableTermination and ChildProcess::enableTermination and convert
        the PluginProcess class over to using them.

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::PluginProcess):
        The child process now takes a terminationTimeout argument. Get rid of the shutdown timer.

        (WebKit::PluginProcess::removeWebProcessConnection):
        Call enableTermination().

        (WebKit::PluginProcess::shouldTerminate):
        Always return true.

        (WebKit::PluginProcess::createWebProcessConnection):
        Call disableTermination().

        (WebKit::PluginProcess::getSitesWithData):
        Call disableTermination()/enableTermination().

        (WebKit::PluginProcess::clearSiteData):
        Ditto.

        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::disableTermination):
        Increment the counter and stop the timer.

        (WebKit::ChildProcess::enableTermination):
        Decrement the counter; if it's zero, start the timer.

        (WebKit::ChildProcess::terminationTimerFired):
        Call shouldTerminate(). If it returns true, call terminate().

        (WebKit::ChildProcess::terminate):
        Call RunLoop::quit().

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        Just initialize the termination timeout to 0 for now.

        (WebKit::WebProcess::shouldTerminate):
        Always return true; this isn't used yet.

        * WebProcess/WebProcess.h:

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

        Reviewed by Dan Bernstein.

        REGRESSION: Links are clickable when a contentEditable is set to true.
        https://bugs.webkit.org/show_bug.cgi?id=58473
        <rdar://problem/9256793>
        
        Added support for editable link behavior property.

        * Shared/WebPreferencesStore.cpp:
        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetEditableLinkBehavior):
        (WKPreferencesGetEditableLinkBehavior):
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

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

        Reviewed by Oliver Hunt.

        REGRESSION (WebKit2): Input methods are active in non-editable content
        https://bugs.webkit.org/show_bug.cgi?id=58404
        <rdar://problem/9275940>

        * UIProcess/API/mac/WKView.mm:
        (-[WKView insertText:]): Re-add the old variant of this function, because it's not only part
        of deprecated NSTextInput protocol, but it's also part of NSResponder, and it's called when
        the input context in nil.
        (-[WKView inputContext]): Return nil when not in editable content.

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

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9029193> and https://bugs.webkit.org/show_bug.cgi?id=58406
        Bringing up the context menu on a link might also follow the link.

        This patch adds a flag that is set just before the WebProcess tells the UIProcess to show a context menu.

        As long as this flag is set, the WebProcess will ignore any other mouse events that might have queued up
        by the time the UIProcess gets around to showing the menu.

        After the UIProcess is done showing the menu, it messages back telling the WebProcess to clear the flag
        and resume normal MouseEvent handling.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showContextMenu): No matter what internalShowContextMenu does, always notify
          the WebProcess that any context menu is now hidden.
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/WebPageProxy.h:

        * WebProcess/WebPage/WebContextMenu.cpp:
        (WebKit::WebContextMenu::show): Since we're telling the UIProcess to show the menu, tell the WebPage a
          context menu is showing so it will stop handling mouse events.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::mouseEvent): Don't try to handle mouse events if a context menu is flagged as showing.

        Add accessors to twiddle the "context menu showing" flag:
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::contextMenuShowing):
        (WebKit::WebPage::contextMenuHidden):
        * WebProcess/WebPage/WebPage.messages.in: Add the ContextMenuHidden message.

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

        Reviewed by Maciej Stachowiak.

        Quarantine related sandbox denial when downloading files
        <rdar://problem/9203736>

        * WebProcess/com.apple.WebProcess.sb:

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

        Reviewed by Anders Carlsson.

        Sandbox violations dragging an image to the desktop.
        <rdar://problem/9261834>

        * WebProcess/com.apple.WebProcess.sb:

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

        Reviewed by Cameron Zwarich.

        Sandbox violations trying to access ~/Library/Keyboard Layouts and ~/Library/Input Methods
        <rdar://problem/8973159> 

        * WebProcess/com.apple.WebProcess.sb:

2011-04-12  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov and Sam Weinig.

        Implement non-activating clicks to allow dragging out of a background window.
        https://bugs.webkit.org/show_bug.cgi?id=55053
        <rdar://problem/9042197>

        Added methods to WKView to support non activating click. Unfortunately both
        methods require a synchronous call to the WebProcess to decide what to do.
        acceptFirstMouse is called only if shouldDelayWindowOrderingForEvent returns
        true. In order to minimize the number of synchronous calls, we send the request
        only if our window is not the key window.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView acceptsFirstMouse:]):
        (-[WKView shouldDelayWindowOrderingForEvent:]):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::shouldDelayWindowOrderingForEvent):
        (WebKit::WebPageProxy::acceptsFirstMouse):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::shouldDelayWindowOrderingEvent):
        (WebKit::WebPage::acceptsFirstMouse):

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

        Reviewed by Oliver Hunt.

        Crash when serializing a null AttributedString
        https://bugs.webkit.org/show_bug.cgi?id=58393
        <rdar://problem/9275326>

        * Shared/mac/AttributedString.mm:
        (WebKit::AttributedString::encode):
        (WebKit::AttributedString::decode):
        Prefix the serialized value with an isNull tag.

2011-04-12  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        Infinite recursion in WebHTMLView executeSavedKeypressCommands.
        https://bugs.webkit.org/show_bug.cgi?id=58382
        <rdar://problem/9239370>

        Execution of some editing commands could trigger a call to selectedRange that
        internally calls executeSavedKeypressCommands creating an infinite recursion.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _executeSavedKeypressCommands]): Added flag to avoid recursion.
        (-[WKView _interpretKeyEvent:withCachedTextInputState:savingCommandsTo:WebCore::]):
        Added flag initialization.

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

        Reviewed by Simon Fraser.

        Page tears and stutters in WebKit2 when page is > 2048 pixels wide
        https://bugs.webkit.org/show_bug.cgi?id=58330

        Turn off tiling for nonCompositedContentLayer to avoid tearing when
        scrolling very wide (> 2048) windows.

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

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

        Reviewed by Adam Roben.

        Assertion in DrawingAreaImpl::resumePainting() (m_isPaintingSuspended) when clicking a link at twitter.com
        https://bugs.webkit.org/show_bug.cgi?id=58377
        <rdar://problem/8976531>

        Remove the assertion.

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

2011-04-11  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=58280
        <rdar://problem/9252824> javascript in an inconsistent state due to serialization returning an un-handled exception
        Change use of SerializedScriptValue::Create to use the same api as the rest of WebKit2.  This has the benefit
        of handling any exceptions so Javascript is not in an inconsistent state.

        * Shared/API/c/WKSerializedScriptValue.h: fix a typo
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInMainFrame):

2011-04-12  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Pressing Tab in Web Inspector's console does not cycle through completion options
        https://bugs.webkit.org/show_bug.cgi?id=56020

        Safari was always calling TranslateMessage() on key events since it has no way to know whether
        WebKit handled the event without a PageUIClient (which Safari only installs on pages inside
        a Safari window), which was generating a WM_CHAR message containing the tab in this case.  The fix
        is for Safari to never call TranslateMessage() on key events outside of a Safari window, but this
        means the WebPageProxy needs to do this for unhandled key events if there is no didNotHandleKeyEvent
        callback in the PageUIClient.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveEvent): Call TranslateMessage() on Windows for unhandled key events that can't be handled by the PageUIClient.
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::canNotHandleKeyEvent): Added.
        * UIProcess/WebUIClient.h: Added canNotHandleKeyEvent().

2011-04-12  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=58292
        Provide new setting to allow site icon loading despite disabling automatic image loading in general.

        * Shared/WebPreferencesStore.h: Add macro for setting default value.
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetLoadsSiteIconsIgnoringImageLoadingPreference): Added setter.
        (WKPreferencesGetLoadsSiteIconsIgnoringImageLoadingPreference): Added getter.
        * UIProcess/API/C/WKPreferences.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Add to list of WebCore settings that get propagated to WebKit preferences.

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

        Reviewed by Anders Carlsson.

        WebKit2: Spelling and Grammar Checking: Make sure to remove the markings from the document
        when spelling and/or grammar checking is disabled.
        https://bugs.webkit.org/show_bug.cgi?id=58350

        * UIProcess/API/mac/WKView.mm:
        (-[WKView toggleContinuousSpellChecking:]):
        Move the call to unmark the errors to the WebProcess.
        (-[WKView setGrammarCheckingEnabled:]):
        Ditto.
        (-[WKView toggleGrammarChecking:]):
        Ditto.

        * UIProcess/WebPageProxy.cpp:
        Remove unused functions.
        * UIProcess/WebPageProxy.h:
        Ditto.
        * WebProcess/WebPage/WebPage.messages.in:
        Ditto.
        * WebProcess/WebPage/WebPage.h:

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setTextCheckerState):
        If grammar or spelling checking is disabled, unmark all the pages.
        Doing it here allows makes it possible to unmark all pages in a cross-platform way that is
        triggered both by selecting the the context menu items and by any other methods of updating
        the enabled / disabled state.

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

        Reviewed by Sam Weinig.

        Cisco Meeting Center will not download or launch from Safari
        https://bugs.webkit.org/show_bug.cgi?id=58366
        <rdar://problem/8987139>

        It's OK if a plug-in has less (or more) MIME type descriptions than actual MIME types.
        
        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::getPluginInfoFromCarbonResources):

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

        Reviewed by Sam Weinig.

        Call PluginControllerProxy::platformGeometryDidChange before Plugin::geometryDidChange
        https://bugs.webkit.org/show_bug.cgi?id=58361

        Since Plugin::geometryDidChange ends up calling plug-in code it can resize the plug-in which causes
        platformGeometryDidChange to be called with the wrong rect.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::geometryDidChange):
        Call platformGeometryDidChange.

        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/mac/PluginControllerProxyMac.mm:
        (WebKit::PluginControllerProxy::platformGeometryDidChange):
        Remove the parameters to platformGeometryDidChange and just use m_frameRect instead.

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

        Reviewed by Sam Weinig.

        Move three Mac specific functions to PluginControllerProxyMac.mm.
        
2011-04-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Cache the window and plug-in element NPObjects
        https://bugs.webkit.org/show_bug.cgi?id=58355

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::PluginControllerProxy):
        (WebKit::PluginControllerProxy::~PluginControllerProxy):
        (WebKit::PluginControllerProxy::windowScriptNPObject):
        (WebKit::PluginControllerProxy::pluginElementNPObject):
        * PluginProcess/PluginControllerProxy.h:

2011-04-12  Alejandro G. Castro  <alex@igalia.com>

        Fixed GTK compilation after r83454.

        * UIProcess/gtk/WebView.cpp:
        (WebKit::WebView::findStringInCustomRepresentation):
        (WebKit::WebView::countStringMatchesInCustomRepresentation):
        * UIProcess/gtk/WebView.h:

2011-04-11  Daniel Bates  <dbates@webkit.org>

        Attempt to fix the Qt Linux Release build after changeset 83550 <http://trac.webkit.org/changeset/83550>
        (https://bugs.webkit.org/show_bug.cgi?id=54159).

        * WebKit2API.pri: Append UIProcess/API/C/WKResourceCacheManager.cpp to the list WEBKIT2_API_SOURCES.

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

        Reviewed by Anders Carlsson.

        Move focus management out of WebKit via  the UIClient
        <rdar://problem/8784068>
        https://bugs.webkit.org/show_bug.cgi?id=58278

        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::QWKPage):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setFocus):
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::focus):
        (WebKit::WebUIClient::unfocus):
        * UIProcess/WebUIClient.h:
        * UIProcess/gtk/WebView.cpp:
        * UIProcess/gtk/WebView.h:
        * UIProcess/win/WebView.h:
        Remove PageClient::setFocus() in favor of WebUIClient::focus and WebUIClient::unfocus. 

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

        Reviewed by Maciej Stachowiak.

        WebKit2: Cannot use Ctrl-Delete as a custom keyboard shortcut
        https://bugs.webkit.org/show_bug.cgi?id=58265
        <rdar://problem/9221468>

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::keyEvent): Added a comment explaining that doing work after DOM event
        dispatch isn't great.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performNonEditingBehaviorForSelector): Added a comment explaining how this
        might be moved down to WebCore.
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent): This is now empty, since both Space
        and Backspace behaviors are implemented in WebCore.

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

        Try to fix the Windows build.

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

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

        Reviewed by Dan Bernstein.

        REGRESSION (r83081): Esc key no longer removes current Kotoeri text operation
        https://bugs.webkit.org/show_bug.cgi?id=58274
        <rdar://problem/9263683>

        * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::getMarkedRange): Wrap the returned
        temporary in RefPtr.

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

        Reviewed by Sam Weinig.

        Remove m_urlAtProcessExit from WebPageProxy
        https://bugs.webkit.org/show_bug.cgi?id=58275

        Get rid of m_urlAtProcessExit and replace some zeros with nullptrs.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::processDidCrash):
        * UIProcess/WebPageProxy.h:

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

        Reviewed by Adam Roben.

        Remove the WebContext member variable from WebPageProxy
        https://bugs.webkit.org/show_bug.cgi?id=58271
        <rdar://problem/9148125>

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetContext):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::create):
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::process):
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::canShowMIMEType):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
        (WebKit::WebPageProxy::didReceiveTitleForFrame):
        (WebKit::WebPageProxy::didFirstLayoutForFrame):
        (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame):
        (WebKit::WebPageProxy::didRemoveFrameFromHierarchy):
        (WebKit::WebPageProxy::didDisplayInsecureContentForFrame):
        (WebKit::WebPageProxy::didRunInsecureContentForFrame):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::unableToImplementPolicy):
        (WebKit::WebPageProxy::willSubmitForm):
        (WebKit::WebPageProxy::mouseDidMoveOverElement):
        (WebKit::WebPageProxy::showContextMenu):
        (WebKit::WebPageProxy::contextMenuItemSelected):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::createWebPage):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):

2011-04-11  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adam Roben.

        Ignore context change callbacks when not on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=58256
        <rdar://problem/9266090>

        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.cpp:
        (WebKit::LayerTreeHostCAWin::contextDidChangeCallback): Do nothing when not called
            on the main thread. This should only happen when no changes have actually 
            been committed to the context, eg. when a video frame has been added to an image
            queue, so return without triggering animations etc.

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

        Reviewed by Sam Weinig.

        First step towards simplifying WebPageProxy/WebProcessProxy/WebContext ownership
        https://bugs.webkit.org/show_bug.cgi?id=58266
        <rdar://problem/9148125>

        With this patch, the WKView holds a strong reference to a WebPageProxy. The 
        WebPageProxy in turn holds a strong reference to its WebProcessProxy. Finally,
        The WebProcessProxy holds a strong reference to its WebContext.

        The WebContext holds a strong reference to the running WebProcessProxy which results
        in a reference cycle that's broken when the web process exits.

        The reason for is to avoid crashes where WebPageProxy::process() returns null if the web process
        has crashed but has not yet been relaunched.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::disconnectProcess):
        Add comment.

        (WebKit::WebContext::createWebPage):
        Return a PassRefPtr.

        (WebKit::WebContext::relaunchProcessIfNecessary):
        Change this to return a WebPageProxy.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::create):
        This now takes a PassRefPtr<WebProcessProxy>.

        (WebKit::WebPageProxy::WebPageProxy):
        Ditto.

        (WebKit::WebPageProxy::~WebPageProxy):
        Call close() if necessary.

        (WebKit::WebPageProxy::reattachToWebProcess):
        Replace the current process with the new process.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::create):
        Take a PassRefPtr<WebContext>.
        
        (WebKit::WebProcessProxy::WebProcessProxy):
        Ditto.

        (WebKit::WebProcessProxy::webPage):
        Remove .get() now that the page map uses weak references.

        (WebKit::WebProcessProxy::createWebPage):
        This now returns the created web page proxy.

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

        Dispatch sent messages to windows owned by the web process when waiting a sync CoreIPC reply

        On Windows, windowed plugins' HWNDs are created as children of the WKView's window. This
        creates a cross-process window hierarchy, which in turn attaches the input states of the UI
        process's and web process's main threads (as if ::AttachThreadInput has been called). Having
        the input states attached means that changes to the input state (e.g., changing the focus
        window) can result in synchronous window messages being sent between the processes. This can
        result in deadlocks if the UI process changes the input state while handling a synchronous
        CoreIPC message from the web process. Since the web process isn't running its message loop
        while waiting for the reply, it never processes the messages Windows is sending it from the
        UI process.

        The solution taken in this patch is to continue to dispatch sent (not posted) messages to
        windows created by the web process while waiting for a sync CoreIPC reply. Someday we can
        hopefully reduce the number of cases in which the UI process modifies the thread's input
        state while handling a synchronous message; see the bug for details.

        Fixes <http://webkit.org/b/58239> <rdar://problem/8769302> REGRESSION (WebKit2): Deadlock
        clicking Flash plugin

        Reviewed by Anders Carlsson.

        * Platform/CoreIPC/BinarySemaphore.h:
        (CoreIPC::BinarySemaphore::event): Added. Simple getter to expose the underlying event
        HANDLE.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::SyncMessageState::waitWhileDispatchingSentMessages): New Windows-only
        function that is used instead of wait() so that sent messages will continue to be
        dispatched.
        (CoreIPC::Connection::waitForSyncReply): Use waitWhileDispatchingSentMessages instead of
        wait on Windows. Our Client gives us the set of windows that need to have windows delivered
        to them.

        * Platform/CoreIPC/Connection.h: Added new
        windowsToReceiveSentMessagesWhileWaitingForSyncReply function to Client.

        * Platform/RunLoop.h: Added new dispatchSentMessagesUntil function to be used while waiting
        for a sync CoreIPC reply.

        * Platform/win/RunLoopWin.cpp:
        (RunLoop::dispatchSentMessagesUntil): Added. If we have no windows to dispatch messages to,
        then just wait on the semaphore. Otherwise spin a ::MsgWaitForMultipleObjectsEx loop to
        detect when the semaphore is signaled, the timeout elapses, or sent messages are available,
        and handle each case appropriately.

        * UIProcess/WebProcessProxy.h: Added new CoreIPC::Connection::Client function.

        * UIProcess/win/WebProcessProxyWin.cpp: Added.
        (WebKit::WebProcessProxy::windowsToReceiveSentMessagesWhileWaitingForSyncReply): Just return
        an empty Vector. The web process never modifies the thread's input state while responding to
        a synchronous message, so we don't have anything to worry about here.

        * WebProcess/WebProcess.h: Added new CoreIPC::Connection::Client function.

        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::addWindowToVectorIfOwnedByCurrentThread): New helper function to be called by
        ::EnumThreadWindows/::EnumChildWindows. Does what it says.
        (WebKit::WebProcess::windowsToReceiveSentMessagesWhileWaitingForSyncReply): Added. Returns
        all top-level windows created by this thread, descendants of those windows created by this
        thread, and descendants of WKViews' windows created by this thread.

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

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

        Reviewed by Anders Carlsson.

        WebKit2: Implement TextChecker on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57862

        Part 7: Implement getGuessesForWord, learnWord, and ignoreWord.

        * UIProcess/API/C/win/WKTextChecker.cpp:
        (WKTextCheckerChangeSpellingToWord):
        * UIProcess/API/C/win/WKTextChecker.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::changeSpellingToWord):
        Make this function const since it does not modify the WebPageProxy and making it const
        allows WebTextChecker::changeSpellingToWord to take a const WebPageProxy.
        (WebKit::WebPageProxy::learnWord):
        * UIProcess/WebPageProxy.h:

        * UIProcess/TextChecker.h:
        * UIProcess/win/TextCheckerWin.cpp:
        (WebKit::TextChecker::getGuessesForWord):
        Ask the TextCheckerClient for the guesses.
        (WebKit::TextChecker::learnWord):
        Tell the TextCheckerClient.
        (WebKit::TextChecker::ignoreWord):
        Ditto.
        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::TextChecker::learnWord):
        Add an unused param that is necessary for Windows.
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::learnWord):
        Ditto.
        * UIProcess/qt/TextCheckerQt.cpp:
        (WebKit::TextChecker::learnWord):
        Ditto.

        * UIProcess/win/WebTextChecker.cpp:
        (WebKit::WebTextChecker::changeSpellingToWord):
        Tell the page.
        * UIProcess/win/WebTextChecker.h:

        * UIProcess/win/WebTextCheckerClient.cpp:
        (WebKit::WebTextCheckerClient::guessesForWord):
        (WebKit::WebTextCheckerClient::learnWord):
        (WebKit::WebTextCheckerClient::ignoreWord):
        * UIProcess/win/WebTextCheckerClient.h:

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

        Reviewed by Sam Weinig.

        Remove unused WebProcessProxy functions
        https://bugs.webkit.org/show_bug.cgi?id=58262

        * UIProcess/WebProcessProxy.cpp:
        * UIProcess/WebProcessProxy.h:

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

        Reviewed by Sam Weinig.

        Crash in WebPageProxy::countStringMatches
        https://bugs.webkit.org/show_bug.cgi?id=58255
        <rdar://problem/9243837>

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::countStringMatches):
        Return early if the page is not valid.

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

        Reviewed by Anders Carlsson.

        WebKit2: links don’t update to look visited
        <rdar://problem/8806254>
        https://bugs.webkit.org/show_bug.cgi?id=58252

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::visitedLinkStateChanged):
        (WebKit::WebProcess::allVisitedLinkStateChanged):
        * WebProcess/WebProcess.h:
        Remove use of vestigial sharedPageGroup and instead iterate set of
        page groups in use by the process.

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

        Reviewed by Adam Roben.

        WebKit2: Windows 7 Gestures Window Bounce shouldn't require a sync message
        https://bugs.webkit.org/show_bug.cgi?id=58167
        <rdar://problem/9259813>
        
        Instead of making GestureDidScroll sync, have WebPageWin call from WebProcess ->
        UIProcess when the gesture causes the page to scroll to the beginning or the
        end of the document.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::gestureDidScroll): Not a sync message anymore.
        (WebKit::WebPageProxy::setGestureScrollingLimitReached): Tell the page client that the gesture
            scrolling limnit was reached.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in: Add a new message.
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView): Initialize new variable.
        (WebKit::WebView::onGesture): Use the state of the member variable, not the response from
            the sync message.
        * UIProcess/win/WebView.h:
        (WebKit::WebView::setGestureScrollingLimitReached):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::scrollbarAtTopOfBottomOrDocument): Returns whether or not the scrollbar is at the
            top or bottom of the document.
        (WebKit::WebPage::gestureDidScroll): Track whether or not we started at the beginning
            or end of the document, and whether or not we ended at the beginning or end of the document,
            and send a message if the value changed.

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

        Reviewed by Maciej Stachowiak.

        WK2: PDF: Find in page
        https://bugs.webkit.org/show_bug.cgi?id=57765

        Support searching text within PDF documents.  Find requests must be routed from the
        WebPageProxy, through the PageClient, and to the WKView, where they can be passed to 
        the PDFViewController.

        * UIProcess/API/mac/PDFViewController.h:
        * UIProcess/API/mac/PDFViewController.mm:
        (_PDFSelectionsAreEqual): Copied from WebPDFView.
        (-[WKPDFView _nextMatchFor:direction:caseSensitive:wrap:fromSelection:startInSelection:]): Copied from WebPDFView.
        (-[WKPDFView _countMatches:caseSensitive:]): Added.
        (WebKit::PDFViewController::findString): Added.
        (WebKit::PDFViewController::countStringMatches): Added.
        * UIProcess/PageClient.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::findStringInCustomRepresentation): Added.
        (WebKit::PageClientImpl::countStringMatchesInCustomRepresentation): Added.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _findStringInCustomRepresentation:withFindOptions:maxMatchCount:]): Added.
        (-[WKView _countStringMatchesInCustomRepresentation:withFindOptions:maxMatchCount:]): Added.
        * UIProcess/WebPageProxy.h: Moved a number of find-related functions from private: to public: so
            they could be called from PDFViewController.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::findString): Added. 
        (WebKit::WebPageProxy::countStringMatches): Added.
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::findStringInCustomRepresentation): Added stub.
        (WebKit::WebView::countStringMatchesInCustomRepresentation): Ditto.
        * UIProcess/win/WebView.h:
        * UIProcess/API/qt/qwkpage_p.h:
        (QWKPagePrivate::findStringInCustomRepresentation): Added stub.
        (QWKPagePrivate::countStringMatchesInCustomRepresentation): Added stub.

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

        Reviewed by Anders Carlsson.

        WebKit2: Implement TextChecker on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57862

        Part 6: Update the Spelling UI with the spelling and grammar mistakes.

        * UIProcess/API/C/win/WKAPICastWin.h:
        (WebKit::toAPI):
        Make it possible to go from a WebCore::GrammarDetail to a WebGrammarDetail.
 
        * UIProcess/API/C/win/WKGrammarDetail.cpp:
        (WKGrammarDetailCreate):
        (WKGrammarDetailGetLocation):
        (WKGrammarDetailGetLength):
        (WKGrammarDetailCopyGuesses):
        (WKGrammarDetailCopyUserDescription):
        * UIProcess/API/C/win/WKGrammarDetail.h:

        * UIProcess/API/C/win/WKTextChecker.cpp:
        (WKTextCheckerCheckSpelling):
        Tell the WebTextChecker.
        * UIProcess/API/C/win/WKTextChecker.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::contextMenuItemSelected):
        If the show/hide spelling UI is selected and the spelling UI is not showing, make sure to
        advance to the next misspelling (in this case, the first).
        This behavior matches that in WebCore and WKView.mm.
        (WebKit::WebPageProxy::advanceToNextMisspelling):
        Make this function const since it does not modify the WebPageProxy and making it const
        allows WebTextChecker::checkSpelling to take a const WebPageProxy.
        (WebKit::WebPageProxy::spellDocumentTag):
        (WebKit::WebPageProxy::updateSpellingUIWithMisspelledWord):
        (WebKit::WebPageProxy::updateSpellingUIWithGrammarString):
        * UIProcess/WebPageProxy.h:

        * UIProcess/TextChecker.h:
        * UIProcess/win/TextCheckerWin.cpp:
        (WebKit::TextChecker::uniqueSpellDocumentTag):
        Tell the TextCheckerClient which WebPageProxy this tag is for.
        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
        Tell the TextCheckerClient.
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        Ditto.
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::uniqueSpellDocumentTag):
        Add the new argument that is unused by this port.
        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
        Ditto.
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        Ditto.
        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::TextChecker::uniqueSpellDocumentTag):
        Ditto.
        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
        Ditto.
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        Ditto.
        * UIProcess/qt/TextCheckerQt.cpp:
        (WebKit::TextChecker::uniqueSpellDocumentTag):
        Ditto.
        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
        Ditto.
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        Ditto.

        * UIProcess/win/WebGrammarDetail.cpp:
        (WebKit::WebGrammarDetail::create):
        (WebKit::WebGrammarDetail::WebGrammarDetail):
        (WebKit::WebGrammarDetail::guesses):
        * UIProcess/win/WebGrammarDetail.h:
        (WebKit::WebGrammarDetail::location):
        (WebKit::WebGrammarDetail::length):
        (WebKit::WebGrammarDetail::userDescription):

        * UIProcess/win/WebTextChecker.cpp:
        (WebKit::WebTextChecker::checkSpelling):
        Tell the page to advance to the next misspelling. This matches the WK1 WebView.cpp logic.

        * UIProcess/win/WebTextChecker.h:
        * UIProcess/win/WebTextCheckerClient.cpp:
        (WebKit::WebTextCheckerClient::uniqueSpellDocumentTag):
        (WebKit::WebTextCheckerClient::toggleSpellingUIIsShowing):
        (WebKit::WebTextCheckerClient::updateSpellingUIWithMisspelledWord):
        (WebKit::WebTextCheckerClient::updateSpellingUIWithGrammarString):
        * UIProcess/win/WebTextCheckerClient.h:

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

        Not reviewed.

        Remove extra inadvertantly commiteed changes from last change.

        * WebProcess/com.apple.WebProcess.sb:

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

        Reviewed by Dan Bernstein.

        REGRESSION: WebProcess spews sandboxing violations for outbound network traffic
        https://bugs.webkit.org/show_bug.cgi?id=58215
        <rdar://problem/9251695>
        
        * WebProcess/com.apple.WebProcess.sb: Restore some previously removed rules.

2011-04-10  Kimmo Kinnunen  <kimmo.t.kinnunen@nokia.com>

        Reviewed by Eric Seidel.

        Require no undefined symbols during compilation.

        [Qt] [WK2] WebKitTestRunner, QtWebProcess and WTRInjectBundle should fail to compile when there's undefined symbols
        https://bugs.webkit.org/show_bug.cgi?id=54896
        
        Add -Wl,--no-undefined to catch missing symbols early.

        * WebProcess.pro:

2011-04-09  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.
        
        Try recommitting some things svn left out of my last commit.

        * WebProcess/Plugins/Netscape/NPJSObject.h:

2011-04-09  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.
        
        Try recommitting some things svn left out of my last commit.

        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::evaluate):

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

        Reviewed by Darin Adler.

        WebKit2: Safari doesn't respect cmd-arrows (and variations) as custom keyboard shortcuts
        https://bugs.webkit.org/show_bug.cgi?id=58175
        <rdar://problem/9060555>

        The problem is that command handling should be different for events that come as keyDown:
        and those that come as performKeyEquivalent:. WebKit1 only tries custom "key bindings"
        when handling a keyDown:, letting a performKeyEquivalent: run through the whole responder
        chain first.

        This would be very difficult to implement in WebKit2 because of how it re-sends the same
        event after web process handling. Luckily, we can both fix the bug and make the behavior
        more robust by not hardcoding key combinations.

        * WebProcess/WebPage/WebPage.h: Edit performNonEditingBehaviorForSelector.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::executeKeypressCommandsInternal): When executing commands, also try
        executing editor commands in their non-editing meaning, which is usually scrolling.
        (WebKit::WebPage::performNonEditingBehaviorForSelector): Naive implementation with a chain
        of ifs, which is hopefully ok performance-wise for a dozen check.
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent): Only kept two commands here that I
        couldn't easily move.

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

        Reviewed by Anders Carlsson.

        WebKit2: Show the substitutions panel on Mac and make sure the menu items titles are
        updated correctly.
        https://bugs.webkit.org/show_bug.cgi?id=58179

        * UIProcess/API/mac/WKView.mm:
        (-[WKView validateUserInterfaceItem:]):
        The title of the context menu item should be opposite of whether or not the spelling panel
        is visible.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::contextMenuItemSelected):
        If the "Show/Hide" Substitutions item is selected, call toggleSubstitutionsPanelIsShowing.
        (WebKit::WebPageProxy::substitutionsPanelIsShowing):
        Ask the TextChecker.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * UIProcess/TextChecker.h:
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::substitutionsPanelIsShowing):
        As the shared NSSpellChecker if the substitutionsPanel is visible.
        (WebKit::TextChecker::toggleSubstitutionsPanelIsShowing):
        Order the substitutionsPanel out or front (copied from WKView.mm).

        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::substitutionsPanelIsShowing):
        Send a sync message to the UI process to find out.
        It needs to be sync because the editor code relies on the value returned.

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

        Reviewed by Adele Peterson.

        Fixed a bug where right-to-left frames incorrectly reported that they were pinned to the left
        when they were actually not.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didChangeScrollOffsetForMainFrame): Do not assume that the minimum scroll offset
        is zero, because it is not.

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

        Fix the Windows build.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::Drop):

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

        Reviewed by Anders Carlsson.

        WebKit2: Implement TextChecker on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57862

        Part 5: Implement the code show and hide the Spelling UI via the context menu item (both
        Windows and Mac).

        * UIProcess/API/C/win/WKTextChecker.h:
        Add the new WKTextCheckerClient funtions.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView validateUserInterfaceItem:]):
        The title of the context menu item should be opposite of whether or not the spelling panel
        is visible.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::contextMenuItemSelected):
        If the "Show/Hide Spelling and Grammar" item is selected, call toggleSpellingUIIsShowing.
        (WebKit::WebPageProxy::spellingUIIsShowing):
        Call through to TextChecker.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * UIProcess/TextChecker.h:
       * UIProcess/win/TextCheckerWin.cpp:
        (WebKit::TextChecker::spellingUIIsShowing):
        Call the TextCheckerClient.
        (WebKit::TextChecker::toggleSpellingUIIsShowing):
        Ditto.
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::spellingUIIsShowing):
        Ask the shared NSSpellChecker if the spellingPanel is visible.
        (WebKit::TextChecker::toggleSpellingUIIsShowing):
        Order the spellingPanel out or front (copied from WKView.mm).
        * UIProcess/qt/TextCheckerQt.cpp:
        (WebKit::TextChecker::spellingUIIsShowing):
        Call notImplemented.
        (WebKit::TextChecker::toggleSpellingUIIsShowing):
        Ditto.
        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::TextChecker::spellingUIIsShowing):
        Ditto.
        (WebKit::TextChecker::toggleSpellingUIIsShowing):
        Ditto.
 
        * UIProcess/win/WebTextCheckerClient.cpp:
        (WebKit::WebTextCheckerClient::spellingUIIsShowing):
        Call the client.
        (WebKit::WebTextCheckerClient::toggleSpellingUIIsShowing):
        Ditto.
        * UIProcess/win/WebTextCheckerClient.h:

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::spellingUIIsShowing):
        Send a sync message to the UI process to find out.
        It needs to be sync because the Editor code relies on the value returned.

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

        Reviewed by Dan Bernstein.

        Sandboxing doesn't work if a local file is dropped on the content area
        https://bugs.webkit.org/show_bug.cgi?id=58177
        <rdar://problem/9019253>

        When performing a drag and the dragging pasteboard contains a local file, create a
        sandbox extension and pass it along. If we end up loading the file, the sandbox extension
        tracker will consume the extension.

        * UIProcess/API/mac/WKView.mm:
        (maybeCreateSandboxExtensionFromPasteboard):
        Add helper function.

        (-[WKView performDragOperation:]):
        Create a sandbox extension handle and pass it to performDrag.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::dragEntered):
        (WebKit::WebPageProxy::dragUpdated):
        (WebKit::WebPageProxy::dragExited):
        Pass an empty sandbox extension handle to performDragControllerAction.

        (WebKit::WebPageProxy::performDrag):
        Pass the sandbox extension handle along to performDragControllerAction.

        (WebKit::WebPageProxy::performDragControllerAction):
        Send along the sandbox extension handle.

        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        (WebKit::WebDragClient::willPerformDragDestinationAction):
        If the destination action is a load action, call WebPage::willPerformLoadDragDestinationAction.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performDragControllerAction):
        Create a sandbox extension.

        (WebKit::WebPage::willPerformLoadDragDestinationAction):
        If we have a sandbox extension, pass it along to the sandbox extension tracker.

        (WebKit::WebPage::SandboxExtensionTracker::willPerformLoadDragDestinationAction):
        Call setPendingProvisionalSandboxExtension.

        (WebKit::WebPage::SandboxExtensionTracker::beginLoad):
        Call setPendingProvisionalSandboxExtension.

        (WebKit::WebPage::SandboxExtensionTracker::setPendingProvisionalSandboxExtension):
        Factor code from beginLoad out into a separate function.

        * WebProcess/WebPage/WebPage.messages.in:
        PerformDragControllerAction now takes a sandbox extension handle.

2011-04-08  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=58151
        Crash after closing a Webview, in WebKit!WebCore::WindowMessageBroadcaster::SubclassedWndProc

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::close):
        Resolve a difference between old WebKit WebView and WebKit2 WebView by destroying and clearing
        out WebKit2 WebView's HWND when closing. Not doing so was causing the WebView to remain in the
        list of WindowMessageBroadcaster listeners, and after closing the WebView, WindowMessageBroadcaster
        would message a dead WebView and crash.

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

        Reviewed by Adam Roben.

        Make the drag operations be different functions
        https://bugs.webkit.org/show_bug.cgi?id=58169

        Since we want performDrag to take a sandbox extension, separate the four
        drag operations out into different functions. No functionality change.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView draggingEntered:]):
        (-[WKView draggingUpdated:]):
        (-[WKView draggingExited:]):
        (-[WKView performDragOperation:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::dragEntered):
        (WebKit::WebPageProxy::dragUpdated):
        (WebKit::WebPageProxy::dragExited):
        (WebKit::WebPageProxy::performDrag):
        * UIProcess/WebPageProxy.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::DragEnter):
        (WebKit::WebView::DragOver):
        (WebKit::WebView::DragLeave):
        (WebKit::WebView::Drop):

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

        Reviewed by Adam Roben.

        Parse 'DispatchOnConnectionQueue' in messages.in files
        https://bugs.webkit.org/show_bug.cgi?id=58168

        Handle parsing multiple, space-separated attributes in .messages.in files. Keep track of
        'DispatchOnConnectionQueue' and rename 'delayed' to 'Delayed'.

        * Scripts/webkit2/messages.py:
        * Scripts/webkit2/messages_unittest.py:

2011-04-08  Alpha Lam  <hclam@chromium.org>

        Unreviewed, rolling out r83335.
        http://trac.webkit.org/changeset/83335
        https://bugs.webkit.org/show_bug.cgi?id=53556

        GTK and QT bots are broken

        * Configurations/FeatureDefines.xcconfig:

2011-04-07  Anna Cavender  <annacc@chromium.org>

        Reviewed by Eric Carlson.

        Setup ENABLE(TRACK) feature define
        https://bugs.webkit.org/show_bug.cgi?id=53556

        * Configurations/FeatureDefines.xcconfig:

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

        Reviewed by Darin Alder.

        REGRESSION (WebKit2): AppKit thinks that web views don't support DocumentAccess
        https://bugs.webkit.org/show_bug.cgi?id=58102
        <rdar://problem/9223246>

        * UIProcess/API/mac/WKView.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView doCommandBySelector:]):
        (-[WKView insertText:replacementRange:]):
        (-[WKView validAttributesForMarkedText]):
        (-[WKView setMarkedText:selectedRange:replacementRange:]):
        (-[WKView attributedSubstringForProposedRange:actualRange:]):
        (-[WKView firstRectForCharacterRange:actualRange:]):
        Switch to NSTextInputClient, opting out of optimizations and optional features for now.

2011-04-08  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Martin Robinson.

        [Qt][WK2][Symbian] Remove use of stack arrays with variable size
        https://bugs.webkit.org/show_bug.cgi?id=57877

        For better compiler portability, use new/delete for arrays when size
        isn't known at compile time. Also fix one compiler warning about bitshift
        operations on signed integer
        * Platform/CoreIPC/unix/ConnectionUnix.cpp:
        (CoreIPC::Connection::readyReadHandler):
        (CoreIPC::Connection::sendOutgoingMessage):

2011-04-08  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fix the WebKit2 build for older versions of GTK+
        https://bugs.webkit.org/show_bug.cgi?id=58095

        * UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp: Include the GtkVersioning.h header.

2011-04-07  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [WK2][Qt][GTK] Introduce common use flag for the shared UNIX domain socket IPC implementation
        https://bugs.webkit.org/show_bug.cgi?id=58030

        Replace "PLATFORM(QT) || PLATFORM(GTK)" conditions in IPC code with
        USE(UNIX_DOMAIN_SOCKETS).

        * Platform/CoreIPC/Attachment.h:
        * Platform/CoreIPC/Connection.h:
        * Platform/SharedMemory.h:

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

        Reviewed by Simon Fraser.

        Clicks not recognized on http://www.nibblestutorials.net/ which uses Silverlight
        https://bugs.webkit.org/show_bug.cgi?id=58108
        <rdar://problem/9167611>

        Change platformHandleMouseEvent to return true, which means that the plug-in has handled the
        event. Some plug-ins (like Silverlight) will return false from NPP_HandleEvent even though the
        event has been handled. In this case it lead to a very subtle bug where the plug-in element would
        lose focus right after a mouse down even had been sent.

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

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

        Pass NPP_SetWindow a null window handle during plugin destruction on non-Mac platforms

        This matches WebKit1.

        Fixes <http://webkit.org/b/47009> WebKit2 needs to call NPP_SetWindow when destroying a
        plugin

        Reviewed by Anders Carlsson.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::destroy): Null out our NPWindow's window handle and pass it to
        NPP_SetWindow (unless we're on Mac).

2011-04-08  Jamie Cooley  <james.cooley@nokia.com>

        Reviewed by Benjamin Poulain.

        [Qt][WK2] Make sure qwkhistory.h is copied into includes/WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=57945

        * UIProcess/API/qt/WKView.h:
        * UIProcess/API/qt/qwkhistory.h:

2011-04-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Do not destroy WorkQueue event sources unless they have been cancelled
        https://bugs.webkit.org/show_bug.cgi?id=57611

        * Platform/WorkQueue.h:
        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::EventSource::EventSource): Remove unused member
        m_dispatchSource.
        (WorkQueue::EventSource::executeEventSource): Make it return void
        instead of boolean since we are always ignoring the return value.
        (WorkQueue::EventSource::performWork): Return FALSE from the
        callback only when the source has been cancelled (condition = 0)
        to make sure it's destroyed when the even source handler is
        unregistered.
        (WorkQueue::registerEventSourceHandler): Use GRefPtr for the
        source, to avoid leaking it.
        (WorkQueue::scheduleWorkOnSource): Receive the source callback as
        parameter so that it can be used by scheduleWorkOnTermination() too.
        (WorkQueue::scheduleWork):
        (WorkQueue::scheduleWorkAfterDelay):
        (WorkQueue::scheduleWorkOnTermination): Use
        scheduleWorkOnSource().

2011-04-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Close connection when web process finishes
        https://bugs.webkit.org/show_bug.cgi?id=57540

        * Platform/CoreIPC/Connection.h:
        * Platform/CoreIPC/unix/ConnectionUnix.cpp:
        * Platform/PlatformProcessIdentifier.h: Use GPid as process
        identifier.
        * Platform/WorkQueue.h:
        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::EventSource::EventSource): Add cancellable parameter.
        (WorkQueue::EventSource::cancel): New method to cancel the source.
        (WorkQueue::EventSource::performWorkOnTermination): New method to
        execute a work item called when child process has finished.
        (WorkQueue::registerEventSourceHandler): Create a GCancellable for
        the socket source.
        (WorkQueue::unregisterEventSourceHandler): Cancel the source
        instead of destroying it, this will cause the source to trigger
        with condition = 0, which makes the callback return FALSE and the
        source is destroyed.
        (WorkQueue::scheduleWorkOnSource): Pass NULL as cancellable for
        idle and timeout sources.
        (WorkQueue::scheduleWorkOnTermination): Create a child watch
        source to monitor the child process.
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess): Use GPid instead of int
        as process identifier.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didFinishLaunching): Call
        WorkQueue::scheduleWorkOnTermination() for GTK platform too when
        web process has been launched.

2011-04-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement scheduleWorkAfterDelay() in WorkQueueGtk
        https://bugs.webkit.org/show_bug.cgi?id=57434

        * Platform/WorkQueue.h:
        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::EventSource::executeEventSource): This new method
        contains the common code to execute a work item.
        (WorkQueue::EventSource::performWorkOnce): Use
        executeEventSource() to execute the work item.
        (WorkQueue::EventSource::performWork): Use executeEventSource() to
        execute the work item.
        (WorkQueue::registerEventSourceHandler): Use a GSocket instead of
        a GIOChannel since the API is newer and allows us to pass a
        cancellable object to be able to cancel the source.
        (WorkQueue::scheduleWorkOnSource): This new method contains the
        common code to attach a source to a context. It doesn't use a lock
        anymore, since g_source_attach() uses its own mutex internally.
        (WorkQueue::scheduleWork): Use an idle source instead of a timeout
        one, changing the priority to G_PRIORITY_DEFAULT.
        (WorkQueue::scheduleWorkAfterDelay): Implement it using a timeout
        source with the given delay.

2011-04-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Use glib API instead of fork + execl in ProcessLauncherGtk
        https://bugs.webkit.org/show_bug.cgi?id=57234

        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::childSetupFunction): close the socket and use prctl()
        when platform is Linux to kill the child process when the parent
        finishes.
        (WebKit::ProcessLauncher::launchProcess): Use g_spawn_async() to
        launch the web process.

2011-04-07  Geoffrey Garen  <ggaren@apple.com>

        Some Handle<T> cleanup
        https://bugs.webkit.org/show_bug.cgi?id=58109

        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::NPJSObject::NPJSObject): Updated for new null constructor.

2011-04-07  Jessie Berlin  <jberlin@apple.com>

        Max build fix.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::checkSpellingOfString):
        Do not risk an overflow.
        (WebKit::WebEditorClient::checkGrammarOfString):
        Ditto.

2011-04-07  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Brian Weinstein.

        WebKit2: Implement TextChecker on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57862

        Part 4: Implement checkGrammarOfString.

        * Scripts/webkit2/messages.py:
        The generated files should include TextCheckerClient.h for WebCore::GrammarDetail.

        * Shared/API/c/win/WKBaseWin.h:
        * Shared/APIObject.h:
        * UIProcess/API/C/win/WKAPICastWin.h:

        * UIProcess/API/C/win/WKGrammarDetail.cpp: Added.
        (WKGrammarDetailGetTypeID):
        (WKGrammarDetailCreate):
        * UIProcess/API/C/win/WKGrammarDetail.h: Added.

        * UIProcess/API/C/win/WKTextChecker.h:
        Add the checkGrammarOfString WKTextCheckerClient function.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::checkGrammarOfString):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * UIProcess/TextChecker.h:
        * UIProcess/win/TextCheckerWin.cpp:
        (WebKit::TextChecker::checkGrammarOfString):
        Call the TextCheckerClient.
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::checkSpellingOfString):
        Add a comment about this not being used on Mac.
        (WebKit::TextChecker::checkGrammarOfString):
        Ditto, and call notImplemented.
        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::TextChecker::checkGrammarOfString):
        Call notImplemented.
        * UIProcess/qt/TextCheckerQt.cpp:
        (WebKit::TextChecker::checkGrammarOfString):
        Ditto.

        * UIProcess/win/WebGrammarDetail.cpp: Added.
        (WebKit::WebGrammarDetail::create):
        (WebKit::WebGrammarDetail::WebGrammarDetail):
        Initialize the underlying WebCore::GrammarDetail.
        * UIProcess/win/WebGrammarDetail.h: Added.
        (WebKit::WebGrammarDetail::grammarDetail):
        (WebKit::WebGrammarDetail::type):

        * UIProcess/win/WebTextCheckerClient.cpp:
        (WebKit::WebTextCheckerClient::checkGrammarOfString):
        Populate the Vector of WebCore::GrammarDetails with the WebGrammarDetails.
        * UIProcess/win/WebTextCheckerClient.h:

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::checkSpellingOfString):
        Use WTF::notFound as the initial value for resultLocation.
        (WebKit::WebEditorClient::checkGrammarOfString):
        Send a sync message to the UI Process (similar to checkSpellingOfString and checkTextOfParagraph).

        * win/WebKit2.vcproj:
        Add WKGrammarDetail.h/.cpp and WebGrammarDetail.h/.cpp.
        * win/WebKit2Generated.make:
        Copy over WKGrammarDetail.h.

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

        Reviewed by Oliver Hunt.

        REGRESSION(WebKit2): execCommand('undo') doesn't work (Windows).
        https://bugs.webkit.org/show_bug.cgi?id=58056
        <rdar://problem/8862023>
        
        Adding support for execCommand('undo') and execCommand('redo')
        in WebKit2 for Windows.

        * UIProcess/API/C/win/WKView.h:
        * UIProcess/win/WebUndoClient.cpp:
        (WebKit::WebUndoClient::canUndoRedo):
        (WebKit::WebUndoClient::executeUndoRedo):
        * UIProcess/win/WebUndoClient.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::canUndoRedo):
        (WebKit::WebView::executeUndoRedo):

2011-04-07  Andrew Scherkus  <scherkus@chromium.org>

        Revert ENABLE_TRACK patch due to compile failures.

        * Configurations/FeatureDefines.xcconfig:

2011-04-07  Martin Robinson  <mrobinson@igalia.com>

        Fix the WebKit2 GTK+ build for older versions of GTK+.

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp: Include the GtkVersioning.h header.

2011-04-07   Amruth Raj  <amruthraj@motorola.com> and Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [GTK] Implement SharedMemory for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=49791

        Share the SharedMemory, Attachment and Connection implementations with the Qt port.
        Both implementation are, in fact, general Unix implementations using standard Unix
        domain sockets and sendmsg / recvmsg. This should reduce the amount of duplicated code
        greatly and lay the groundwork for GTK+/Qt implementations for other operating systems.

        * GNUmakefile.am: Replaced GTK+ versions of files with the Unix ones.
        * Platform/CoreIPC/ArgumentDecoder.cpp: Extended Qt #ifdefs to include GTK.
        (CoreIPC::ArgumentDecoder::~ArgumentDecoder):
        * Platform/CoreIPC/ArgumentEncoder.cpp: Ditto.
        (CoreIPC::ArgumentEncoder::~ArgumentEncoder):
        * Platform/CoreIPC/Attachment.h: Ditto.
        * Platform/CoreIPC/Connection.h: Combined the GTK+ and Qt sections.
        * Platform/CoreIPC/unix/AttachmentUnix.cpp: Renamed from Source/WebKit2/Platform/CoreIPC/qt/AttachmentQt.cpp.
        * Platform/CoreIPC/unix/ConnectionUnix.cpp: Renamed from Source/WebKit2/Platform/CoreIPC/qt/ConnectionQt.cpp.
        * Platform/unix/SharedMemoryUnix.cpp: Renamed from Source/WebKit2/Platform/qt/SharedMemoryQt.cpp.
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess): Use SOCK_DGRAM instead of SOCK_STREAM to match Qt.
        * WebKit2.pro: Updated source list to reflect file renaming.

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

        Reviewed by Brian Weinstein.

        REGRESSION (r83081): Use of deallocated memory in WebEditorClient::respondToChangedSelection()
        https://bugs.webkit.org/show_bug.cgi?id=58082

        * WebProcess/WebCoreSupport/WebEditorClient.cpp: (WebKit::WebEditorClient::respondToChangedSelection):
        Now that the Range is used outside the full expression where it's created, it needs to be
        protected with RefPtr.

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

        Reviewed by Dan Bernstein.

        <rdar://problem/9251566> WebBackForwardList::createCFDictionaryRepresentation's current item index
        doesn't account for items removed by filter callback.

        * UIProcess/cf/WebBackForwardListCF.cpp:
        (WebKit::WebBackForwardList::createCFDictionaryRepresentation): Update the current item index
        when we omit an item due to the filter callback.

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

        Reviewed by Anders Carlsson.

        REGRESSION (WebKit2): Reverse conversion doesn't work in Kotoeri
        https://bugs.webkit.org/show_bug.cgi?id=58066
        <rdar://problem/8965302>

        * Scripts/webkit2/messages.py:
        * Shared/mac/AttributedString.h: Added.
        * Shared/mac/AttributedString.mm: Added.
        (WebKit::AttributedString::encode):
        (WebKit::AttributedString::decode):
        Added an class that wraps NSAttributedString. As far as I can tell, one can't pass a CF
        or NS object to another process without wrapping it in a C++ one.
        
        * Shared/mac/ArgumentCodersMac.h: Added.
        * Shared/mac/ArgumentCodersMac.mm: Added.
        Added coders for Foundation objects, similar to ArgumentCodersCF. There are two reasons why
        these are needed:
        1) Even though most Foundation objects are toll free bridged with CF, CFGetTypeID() doesn't
        work properly for them (I've been just getting 1).
        2) NSColor isn't toll free bridged to CF.
        This adds just the types necessary for editing NSAttributedString (and I don't yet know what
        happens with attachments).

        * UIProcess/API/mac/WKView.mm: (-[WKView attributedSubstringFromRange:]):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::getAttributedSubstringFromRange):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Boilerplate code for making a sync call to web process.

        * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::getAttributedSubstringFromRange):
        Ported from WebHTMLView.

2011-04-07  Jeff Miller  <jeffm@apple.com>

        Mac build fix.

        * Shared/WebString.h:
        (WebKit::WebString::getCharacters): Add explict cast when using std::min().

2011-04-07  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adam Roben.

        Replace WKStringGetCharactersPtr() with WKStringGetCharacters()
        https://bugs.webkit.org/show_bug.cgi?id=58058
        
        WKStringGetCharactersPtr() exposes the internal implementation of WKString, so change this to WKStringGetCharacters(), which makes a UTF-16 copy.

        * Shared/API/c/WKString.cpp:
        (WKStringGetCharacters): Added, replaces WKStringGetCharactersPtr().
        * Shared/API/c/WKString.h: Replaced WKStringGetCharactersPtr() with WKStringGetCharacters().
        * Shared/WebString.h:
        (WebKit::WebString::getCharacters): Added.

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

        Reviewed by Adam Roben.

        WebKit2: Support window bounce when panning.
        https://bugs.webkit.org/show_bug.cgi?id=58065
        <rdar://problem/9244367>
        
        Make gestureDidScroll synchronous, as once we scroll, we need to know
        whether or not we are at the beginning or end of the scrollable document.
        
        If we are at either end of the scrollable document, we call the Windows 7
        API to bounce the window to give an indication that you are past an end
        of the document.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::gestureDidScroll): Pass a boolean for the reply, and return it.
        * UIProcess/WebPageProxy.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::WebView): Inititalize a new variable.
        (WebKit::WebView::onGesture): Once we send the message to scroll, check if have gone to
            an end of the document, and if we have, bounce the window.
        * UIProcess/win/WebView.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: GestureDidScroll is now sync.
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::gestureDidScroll): When we are done scrolling, check if we have a vertical
            scrollbar and if we are at the beginning or the end of the scrollable document.

2011-04-07  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.isPageBoxVisible
        https://bugs.webkit.org/show_bug.cgi?id=42695

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

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

        Reviewed by Oliver Hunt.

        REGRESSION(WebKit2): execCommand('undo') doesn't work (Mac).
        https://bugs.webkit.org/show_bug.cgi?id=58055
        <rdar://problem/8862023>
        
        Adding support for execCommand('undo') and execCommand('redo')
        in WebKit2 for Mac.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::canUndoRedo): Added interaction with undomanager.
        (WebKit::PageClientImpl::executeUndoRedo): Added interaction with undomanager.
        
        Added new empty PageClient methods for other platforms.
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::canUndoRedo):
        (QWKPagePrivate::executeUndoRedo):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/gtk/WebView.cpp:
        (WebKit::WebView::canUndoRedo):
        (WebKit::WebView::executeUndoRedo):
        * UIProcess/gtk/WebView.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::canUndoRedo):
        (WebKit::WebView::executeUndoRedo):
        * UIProcess/win/WebView.h:

        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::unapply): Added flag to allow dispatching
        of asychronous messages while waiting for a sync message reply.
        (WebKit::WebEditCommandProxy::reapply): Same as above.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::canUndoRedo):
        (WebKit::WebPageProxy::executeUndoRedo):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp: Added missing implementation.
        (WebKit::WebEditorClient::canUndo):
        (WebKit::WebEditorClient::canRedo):
        (WebKit::WebEditorClient::undo):
        (WebKit::WebEditorClient::redo):

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

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9250368> and https://bugs.webkit.org/show_bug.cgi?id=58062

        * UIProcess/API/C/WKIconDatabase.cpp:
        (WKIconDatabaseClose):
        * UIProcess/API/C/WKIconDatabase.h:
        
        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::close):
        * UIProcess/WebIconDatabase.h:

2011-04-07  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Implement TextChecker on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57862
 
        Part 3: Implement checkSpellingOfString

        In WebCore, checkTextOfParagraph is only defined and used on platforms where
        WTF_USE_UNIFIED_TEXT_CHECKING is defined (which right now is only non-Leopard and non-Tiger
        Mac builds).
 
        On other platforms, checkSpellingOfString and checkGrammarOfString (coming in a separate
        patch in an attempt to keep things easier to review) are used.

        * UIProcess/API/C/win/WKTextChecker.h:
        * UIProcess/TextChecker.h:
        Surround checkTextOfParagraph by #if USE(UNIFIED_TEXT_CHECKING) and add
        checkSpellingOfString.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::checkTextOfParagraph):
        Surround this by #if USE(UNIFIED_TEXT_CHECKING).
        (WebKit::WebPageProxy::checkSpellingOfString):
        Call through to the client.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        Surround checkTextOfParagraph by #if USE(UNIFIED_TEXT_CHECKING) and add
        checkSpellingOfString.

        * UIProcess/win/TextCheckerWin.cpp:
        (WebKit::TextChecker::checkSpellingOfString):
        Call through to the WebTextCheckerClient.
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::checkTextOfParagraph):
        Surround this by #if USE(UNIFIED_TEXT_CHECKING) for clarity.
        (WebKit::TextChecker::checkSpellingOfString):
        Add a call to notImplemented.
        * UIProcess/qt/TextCheckerQt.cpp:
        (WebKit::TextChecker::checkSpellingOfString):
        Ditto, and remove the implementation for checkTextOfParagraph.
        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::TextChecker::checkSpellingOfString):
        Ditto.

        * UIProcess/win/WebTextCheckerClient.cpp:
        (WebKit::WebTextCheckerClient::checkSpellingOfString):
        * UIProcess/win/WebTextCheckerClient.h:

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::checkSpellingOfString):
        Send a sync message to the UI Process (similar to the sync message used for
        checkTextOfParagraph).

2011-04-07  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt][WK2][Symbian] Temporary build fix until native Symbian IPC is done. Implement fake socketpair() as it's not available. 
        https://bugs.webkit.org/show_bug.cgi?id=57877

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::socketpair): socketpair() which returns -1

2011-04-07  Michael Saboff  <msaboff@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKit2: Memory leak in decodeResourceError
        https://bugs.webkit.org/show_bug.cgi?id=58004

        Release the local NSError after it is used to create a ResourceError
        object assigned to the reference argument.

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (CoreIPC::decodeResourceError):

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

        Reviewed by Adam Barth.

        Remove temporary WebProcess sandbox rules that are unnecessary now that plugins are in their own process
        https://bugs.webkit.org/show_bug.cgi?id=58023

        * WebProcess/com.apple.WebProcess.sb:

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

        Reviewed by Dan Bernstein.

        Remove some no longer needed WebProcess sandbox allowances
        https://bugs.webkit.org/show_bug.cgi?id=58015
        <rdar://problem/9232592>

        * WebProcess/com.apple.WebProcess.sb: Remove no-longer needed extra network
        and launching privileges, since the bugs that required them are fixed.

2011-04-06  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.pageSizeAndMarginsInPixels
        https://bugs.webkit.org/show_bug.cgi?id=57984

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundlePageSizeAndMarginsInPixels):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::pageSizeAndMarginsInPixels):
        * WebProcess/InjectedBundle/InjectedBundle.h:

2011-04-06  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Benjamin Poulain.

        [Qt][WK2][Symbian] Remove use of stack arrays with variable size
        https://bugs.webkit.org/show_bug.cgi?id=57877
        
        For better compiler portability, use new/delete for arrays when size
        isn't known at compile time. Also fix one compiler warning about bitshift
        operations on signed integers. 
        * Platform/CoreIPC/qt/ConnectionQt.cpp: 
        (CoreIPC::Connection::readyReadHandler): 
        (CoreIPC::Connection::sendOutgoingMessage):

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

        Reviewed by Adam Roben.

        WebKit2: Support Windows 7 Gestures
        https://bugs.webkit.org/show_bug.cgi?id=49824
        <rdar://problem/8689728>
        
        Port code from WebKit1 -> WebKit2 to handle Windows 7 gestures.
        
        The UIProcess gets a WM_GESTURENOTIFY message, it sends a sync message to the WebProcess to ask
        if we should allow panning. The WebProcess checks if we're in a scrollable area, and the mouse
        isn't over a scrollbar.

        The UIProcess then gets a WM_GESTURE message, and if it is a pan gesture, it sends a message to
        the WebProcess to scroll by the amount fingers have moved since the last WM_GESTURE messeage. The
        X and Y are reversed because panning up -> moving the page down, and vice versa.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::gestureWillBegin): Send a sync message to the WebProcess
            to initialize the gesture. The WebProcess returns whether or not we can start a pan
            gesture from where we are.
        (WebKit::WebPageProxy::gestureDidScroll): Send a message to the WebProcess to scroll by
            pan gesture.
        (WebKit::WebPageProxy::gestureDidEnd): Send a message to the WebProcess that the gesture has ended.
        * UIProcess/WebPageProxy.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::wndProc): Add WM_GESTURE and WM_GESTURENOTIFY handlers.
        (WebKit::WebView::WebView): Initialize two new variables.
        (WebKit::WebView::onGestureNotify): Figure out which gestures we should support based on where
            the gesture is beginning.
        (WebKit::WebView::onGesture): Support starting a gesture, ending a gesture, and panning.
        * UIProcess/win/WebView.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Add messages needed for gestures.
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::gestureWillBegin): Set the node that the gesture started on (so we 
            know which layer to scroll if the user pans), and determine whether or not we should allow
            panning. If the page can't scroll, or the user is on a scrollbar, disallow panning.
        (WebKit::WebPage::gestureDidScroll): Scroll the enclosing layer of the element the gesture
            started on.
        (WebKit::WebPage::gestureDidEnd): Clear the node the gesture started on.

2011-04-06  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adam Roben.

        Add WKStringGetCharactersPtr() and WKStringGetLength() to WebKit2 C API
        https://bugs.webkit.org/show_bug.cgi?id=57989
        
        Note that WKChar, which is returned by WKStringGetCharactersPtr(), is defined the same way we define JSChar in JSStringRef.h.

        * Shared/API/c/WKString.cpp:
        (WKStringGetLength): Added.
        (WKStringGetCharactersPtr): Added.
        * Shared/API/c/WKString.h: Define WKChar and added WKStringGetLength() and WKStringGetCharactersPtr().
        * Shared/WebString.h:
        (WebKit::WebString::length): Added.
        (WebKit::WebString::characters): Added.

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

        Reviewed by Oliver Hunt.

        Dock stays in front of Hulu.com full screen video output
        https://bugs.webkit.org/show_bug.cgi?id=57988
        <rdar://problem/9216260>

        Instead of using -[NSMenu setMenuBarVisible:] to toggle full screen, use
        -[NSApp setPresentationOptions:]. Also, make the UI process the front most app before
        setting the presentation options when exiting full screen, otherwise the dock won't
        be restored correctly.

        * PluginProcess/mac/PluginProcessShim.mm:
        Remove some shim functions that aren't needed.

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::PluginProcessProxy):
        Initialize m_preFullscreenAppPresentationOptions.

        * UIProcess/Plugins/PluginProcessProxy.h:
        Add m_preFullscreenAppPresentationOptions.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::enterFullscreen):
        Change the presentation options for the app.

        (WebKit::PluginProcessProxy::exitFullscreen):
        Restore the presentation options.

2011-04-06  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        Expose the original URL of a WKBackForwardListItem.

        Needed for <rdar://problem/9074651>.

        * UIProcess/API/C/WKBackForwardListItem.cpp:
        (WKBackForwardListItemCopyOriginalURL):
        * UIProcess/API/C/WKBackForwardListItem.h:

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

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=57973 and https://bugs.webkit.org/show_bug.cgi?id=57973
        WK2 icon database should be able to get a CGImage of a specific size

        * UIProcess/API/C/cg/WKIconDatabaseCG.cpp:
        (WKIconDatabaseTryGetCGImageForURL): Change this API to take a requested size, and find the first matching
          CGImage in the icon.
        * UIProcess/API/C/cg/WKIconDatabaseCG.h:

2011-04-06  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Anders Carlsson.

        WebKit2: Implement TextChecker on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57862

        Part 2: Implement uniqueSpellDocumentTag and closeSpellDocumentWithTag.

        * UIProcess/API/C/win/WKTextChecker.h:
        * UIProcess/win/TextCheckerWin.cpp:
        (WebKit::TextChecker::uniqueSpellDocumentTag):
        (WebKit::TextChecker::closeSpellDocumentWithTag):
        * UIProcess/win/WebTextCheckerClient.cpp:
        (WebKit::WebTextCheckerClient::uniqueSpellDocumentTag):
        (WebKit::WebTextCheckerClient::closeSpellDocumentWithTag):
        * UIProcess/win/WebTextCheckerClient.h:

2011-04-06  Robert Sesek  <rsesek@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Move code duplicated between the WebKit/mac and WebKit2 down to WebCore because Chromium will need it too
        https://bugs.webkit.org/show_bug.cgi?id=54969

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::respondToChangedSelection): Moved duplicated code to WebCore
        * WebProcess/WebPage/mac/WebPageMac.mm: Moved duplicated code to WebCore
        (WebKit::WebPage::getMarkedRange):
        (WebKit::WebPage::getSelectedRange):
        (WebKit::WebPage::characterIndexForPoint):
        (WebKit::WebPage::performDictionaryLookupAtLocation):

2011-04-06  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.pageNumberForElementById
        https://bugs.webkit.org/show_bug.cgi?id=42329

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundlePageNumberForElementById):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::pageNumberForElementById):
        * WebProcess/InjectedBundle/InjectedBundle.h:

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

        Reviewed by Darin Adler.

        REGRESSION: Drag & Drop Gmail Attachments doesn't work.
        https://bugs.webkit.org/show_bug.cgi?id=57909
        <rdar://problem/9103220>

        Added _hitTest method to support drag and drop when the drag types cannot be matched.
        This is the case for elements that do not place content
        in the drag pasteboard automatically when the drag start (i.e. dragging a DIV element).
               
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _hitTest:dragTypes:]): Added.

2011-04-06  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Darin Adler.

        Fix using UNUSED_PARAM introduced in r82907
        https://bugs.webkit.org/show_bug.cgi?id=57940

        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::clearCacheForOrigin):

2011-04-06  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Anders Carlsson.

        WebKit2: Implement TextChecker on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57862

        Part 1: Get and set the state.

        * Shared/API/c/win/WKBaseWin.h:
        * Shared/APIObject.h:
        * UIProcess/API/C/win/WKAPICastWin.h:
 
        * UIProcess/API/C/win/WKTextChecker.cpp: Added.
        (WKTextCheckerSetClient):
        (WKTextCheckerContinuousSpellCheckingEnabledStateChanged):
        (WKTextCheckerGrammarCheckingEnabledStateChanged):
        * UIProcess/API/C/win/WKTextChecker.h: Added.
 
        * UIProcess/TextChecker.h:
        * UIProcess/win/TextCheckerWin.cpp:
        (WebKit::TextChecker::state):
        Do the initalization for the state only once so that it is not necessary to call the client
        every time the state is requested.
        (WebKit::TextChecker::isContinuousSpellCheckingAllowed):
        Call the client.
        (WebKit::TextChecker::setContinuousSpellCheckingEnabled):
        Update the state and tell the client.
        (WebKit::TextChecker::setGrammarCheckingEnabled):
        Ditto.
        (WebKit::TextChecker::continuousSpellCheckingEnabledStateChanged):
        Update the state.
        (WebKit::TextChecker::grammarCheckingEnabledStateChanged):
        Update the state.

        * UIProcess/win/WebTextChecker.cpp: Added.
        (WebKit::WebTextChecker::shared):
        Make the WebTextChecker available globally.
        (WebKit::WebTextChecker::WebTextChecker):
        (WebKit::WebTextChecker::setClient):
        (WebKit::updateStateForAllWebProcesses):
        (WebKit::WebTextChecker::continuousSpellCheckingEnabledStateChanged):
        Tell the TextChecker that the state has changed, and then tell the
        WebProcessProxies to send the new state to the WebProcesses.
        (WebKit::WebTextChecker::grammarCheckingEnabledStateChanged):
        Ditto.
        * UIProcess/win/WebTextChecker.h: Added.
        (WebKit::WebTextChecker::client):
        (WebKit::WebTextChecker::type):

        * UIProcess/win/WebTextCheckerClient.cpp: Added.
        (WebKit::WebTextCheckerClient::continuousSpellCheckingAllowed):
        (WebKit::WebTextCheckerClient::continuousSpellCheckingEnabled):
        (WebKit::WebTextCheckerClient::setContinuousSpellCheckingEnabled):
        (WebKit::WebTextCheckerClient::grammarCheckingEnabled):
        (WebKit::WebTextCheckerClient::setGrammarCheckingEnabled):
        * UIProcess/win/WebTextCheckerClient.h: Added.
 
        * win/WebKit2.vcproj:
        Add WKTextChecker.h/.cpp, WebTextChecker.h/.cpp, and WebTextCheckerClient.h/.cpp.
        * win/WebKit2Generated.make:
        Copy over WKTextChecker.h.

2011-04-05  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.numberOfPages
        https://bugs.webkit.org/show_bug.cgi?id=42694

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleNumberOfPages):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::numberOfPages):
        * WebProcess/InjectedBundle/InjectedBundle.h:

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

        Reviewed by Alexey Proskuryakov.

        [Mac] WebKit2: Escape key does not stop page loads when focus is on the web page
        https://bugs.webkit.org/show_bug.cgi?id=57893
        <rdar://problem/9130486>

        * UIProcess/API/mac/PageClientImpl.h: Added executeSavedCommandBySelector.
        * UIProcess/API/mac/PageClientImpl.mm: Renamed internal Objective-C classes to use
        the WebKit2 Objective-C class prefix, WK, rather than the WebKit1 Objective-C class
        prefix, Web. Removed some unneeded explicit WebKit namespace prefixes.
        (-[WKEditCommandObjC initWithWebEditCommandProxy:]): Removed unneeded WebKit
        namespace prefix.
        (-[WKEditCommandObjC command]): Ditto.
        (-[WKEditorUndoTargetObjC undoEditing:]): Updated for new class name.
        (-[WKEditorUndoTargetObjC redoEditing:]): Ditto.
        (WebKit::PageClientImpl::PageClientImpl): Ditto.
        (WebKit::PageClientImpl::registerEditCommand): Ditto.
        (WebKit::PageClientImpl::executeSavedCommandBySelector): Added.

        * UIProcess/API/mac/WKView.mm: Renamed internal Objective-C categories to use the
        WebKit2 Objective-C prefix, WK, rather than the WebKit1 Objective-C prefix, Web,
        or no prefix at all. Tweaked use of extern "C" a little.
        (-[WKView doCommandBySelector:]): Tweaked the comment.
        (-[WKView _executeSavedCommandBySelector:]): Added. For use when command is not handled
        by WebCore.
        (-[WKResponderChainSink initWithResponderChain:]): Added. Based on the
        WebResponderChainSink class in WebKit1.
        (-[WKResponderChainSink detach]): Added.
        (-[WKResponderChainSink didReceiveUnhandledCommand]): Added.
        (-[WKResponderChainSink noResponderFor:]): Added.
        (-[WKResponderChainSink doCommandBySelector:]): Added.
        (-[WKResponderChainSink tryToPerform:with:]): Added.

        * UIProcess/API/mac/WKViewInternal.h: Added declaration of _executeSavedCommandBySelector:
        method. Also removed unneeded includes.

        * UIProcess/PageClient.h: Added executeSavedCommandBySelector.
        * UIProcess/WebPageProxy.h: Added executeSavedCommandBySelector.
        * UIProcess/WebPageProxy.messages.in: Added ExecuteSavedCommandBySelector.

        * UIProcess/mac/WebFullScreenManagerProxyMac.mm: Updated includes.

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::executeSavedCommandBySelector): Added.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::executeKeypressCommandsInternal): Send the synchronous
        ExecuteSavedCommandBySelector message when a command is not handled by WebCore.

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

        Reviewed by Alexey Proskuryakov.

        Some plug-in content is displayed upside down in Unity plug-in
        https://bugs.webkit.org/show_bug.cgi?id=57895
        <rdar://problem/9212003>

        Create the flipped geometry layer in the web process instead of the plug-in process,
        which matches what we do in WebKit1.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformPostInitialize):
        * WebProcess/Plugins/Netscape/mac/PluginProxyMac.mm:
        (WebKit::PluginProxy::pluginLayer):

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

        Reviewed by Darin Adler.

        Assertion failure when navigating quickly between file URLs
        https://bugs.webkit.org/show_bug.cgi?id=57884
        <rdar://problem/9080559>

        Remove bogus assertion. The pending provisional sandbox extension can be
        non-null if the current provisional load fails because we're about to load a new
        page that also has a sandbox extension.

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

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

        Reviewed by Adam Roben.

        Grant the web process access to ~/Library/Preferences/com.apple.universalaccess.plist
        https://bugs.webkit.org/show_bug.cgi?id=57879

        The web process needs access to the unviersal access preferences to determine if full keyboard
        access is enabled. I've filed <rdar://problem/9237619> which tracks reading this preference in the UI
        process and sending it over to the web process whenever it changes.

        * WebProcess/com.apple.WebProcess.sb:

2011-04-05  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        Add parentheses around && within || to avoid clang warning.

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

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

        Reviewed by Adam Roben.

        Add two more entries to the sandbox profile
        https://bugs.webkit.org/show_bug.cgi?id=57875

        Allow read-access to /Library/Dictionaries since WebCore::nextBreakablePosition
        ends up calling into ICU which accesses the dictionary.

        Allow Mach access to com.apple.networkd since it's used by CFNetwork.

        * WebProcess/com.apple.WebProcess.sb:

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

        Reviewed by Oliver Hunt.

        Invalidate callbacks if the WebPageProxy is no longer valid
        https://bugs.webkit.org/show_bug.cgi?id=57873
        <rdar://problem/9059717>

        Audit all function calls that take callbacks and make sure to invalidate the callbacks
        if the web page is no longer valid.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runJavaScriptInMainFrame):
        (WebKit::WebPageProxy::getRenderTreeExternalRepresentation):
        (WebKit::WebPageProxy::getSourceForFrame):
        (WebKit::WebPageProxy::getContentsAsString):
        (WebKit::WebPageProxy::getSelectionOrContentsAsString):
        (WebKit::WebPageProxy::getMainResourceDataOfFrame):
        (WebKit::WebPageProxy::getResourceDataFromFrame):
        (WebKit::WebPageProxy::getWebArchiveOfFrame):
        (WebKit::WebPageProxy::forceRepaint):
        (WebKit::WebPageProxy::computePagesForPrinting):
        (WebKit::WebPageProxy::drawRectToPDF):
        (WebKit::WebPageProxy::drawPagesToPDF):

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

        Disable accelerated compositing on Windows machines that don't support it

        This includes machines without the necessary graphics hardware, and machines without
        WebKitQuartzCoreAdditions (like the Windows 7 Release (WebKit2 Tests) bots).

        Fixes <http://webkit.org/b/57870> REGRESSION (r82960): Lots of tests crashing in
        DrawingAreaImpl::enterAcceleratedCompositingMode on Windows 7 Release (WebKit2 Tests)

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit::LayerTreeHost::supportsAcceleratedCompositing): Added. On platforms other than
        Windows, this always returns true.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Only enable accelerated compositing-related
        preferences if the machine supports accelerated compositing.

        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.cpp:
        (WebKit::LayerTreeHostCAWin::supportsAcceleratedCompositing): Added. Creates a view, asks it
        if it can draw, and returns the result.

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

        * WebProcess/WebPage/win/LayerTreeHostWin.cpp: Added.
        (WebKit::LayerTreeHost::supportsAcceleratedCompositing): Added. Calls through to
        LayerTreeHostCAWin in configurations that support that class. Otherwise just returns false.

        * win/WebKit2.vcproj: Added LayerTreeHostWin.cpp. Let VS reorder some other files.

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

        Make accelerated compositing work in WebKit2 on Windows

        LayerTreeHostCAWin uses WKCACFView to render each frame to an image, then has
        DrawingAreaImpl send that image over to the UI process (just like it does for
        non-accelerated rendering). It's unfortunate that this requires reading every frame back
        from the GPU into system memory. More efficient solutions can be explored in the future.

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

        Reviewed by Anders Carlsson.

        * DerivedSources.make: Added $(WebKit2) to the VPATH so that DerivedSources.make can be
        found when used as a target dependency. Added rules to generate a HeaderDetection.h file on
        Windows. If we can find WebKitQuartzCoreAdditions headers, we define HAVE_WKQCA in
        HeaderDetection.h.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::setLayerHostNeedsDisplay):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        Added setLayerHostNeedsDisplay. Lets the layer host tell the DrawingAreaImpl that it has a
        new frame to render. This should only be called by layer hosts that participate in
        DrawingAreaImpl's display mechanism.

        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create): Only try to instantiate LayerTreeHostCAWin if we have
        WebKitQuartzCoreAdditions, since it depends on that library.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Removed code that forced accelerated compositing to be
        disabled on Windows.

        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.cpp:
        (WebKit::registerDummyWindowClass): Registers the window class we use for the dummy window.
        (WebKit::createDummyWindow): Creates the dummy window we pass to WKCACFView so that D3D can
        determine the display mode, etc. (The window is never shown on screen.)
        (WebKit::LayerTreeHostCAWin::LayerTreeHostCAWin): Initialize new members.
        (WebKit::LayerTreeHostCAWin::platformInitialize): Create our dummy window and view and
        associate the two. We set ourselves as the view's context's user data so that
        PlatformCALayer can get our AbstractCACFLayerTreeHost pointer as needed.
        (WebKit::LayerTreeHostCAWin::invalidate): Cancel any pending flushes, tear down our view,
        and destroy the dummy window if no other layer host is using it.
        (WebKit::LayerTreeHostCAWin::scheduleLayerFlush): Ask LayerChangesFlusher to call us back
        soon to perform the flush.
        (WebKit::LayerTreeHostCAWin::participatesInDisplay): Added. Returns true, since we render
        each frame to an image.
        (WebKit::LayerTreeHostCAWin::needsDisplay): Added. Returns true if it's now time to
        displayReturns true if it's now time to display.
        (WebKit::LayerTreeHostCAWin::timeUntilNextDisplay): Added. Returns how many seconds remain
        before we need to display again.
        (WebKit::size): Added. Helper function to get the size of a WKCACFImage.
        (WebKit::toShareableBitmap): Added. Helper function to convert a WKCACFImage to a
        ShareableBitmap.
        (WebKit::LayerTreeHostCAWin::display): Added. Renders the next frame to an image and stuffs
        the image into the UpdateInfo struct.
        (WebKit::LayerTreeHostCAWin::sizeDidChange): Added. Tells the view about the new size.
        (WebKit::LayerTreeHostCAWin::forceRepaint): Added. Flushes any pending changes to the view.
        (WebKit::LayerTreeHostCAWin::contextDidChangeCallback): Added. WKCACFView calls this
        whenever any changes made to the view or its layer tree have been flushed. Just calls
        through to contextDidChange.
        (WebKit::LayerTreeHostCAWin::contextDidChange): Added. Tells layers that they've started
        animating, and tells the DrawingAreaImpl that we need to display again.
        (WebKit::LayerTreeHostCAWin::rootLayer): Added. Gets the root layer's PlatformCALayer.
        (WebKit::LayerTreeHostCAWin::addPendingAnimatedLayer): Added. Stores the layer so that we
        can tell it animations have started the next time we get a contextDidChange callback.
        (WebKit::LayerTreeHostCAWin::layerTreeDidChange): Added. Schedules a flush, unless we're
        already in the process of flushing. This code came from WebCore::WKCACFViewLayerTreeHost.
        (WebKit::LayerTreeHostCAWin::flushPendingLayerChangesNow): Added. Performs the flush. This
        code was adapted from WebCore::WKCACFViewLayerTreeHost.

        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.h: Wrapped this whole header in HAVE(WKQCA),
        since this class only works when WebKitQuartzCoreAdditions is available. Added a bunch of
        new members.

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

        Add a way for LayerTreeHost to participate in DrawingAreaImpl's normal display mechanism

        When LayerTreeHost participates in display, it renders each frame into a bitmap.
        DrawingAreaImpl sends the bitmap to the UI process in an Update message, just like in
        non-accelerated compositing mode. The UI process never knows that accelerated compositing is
        going on. (When LayerTreeHost does not participate in display, as on Mac, it is responsible
        for getting bits from the web process to the UI process.)

        No LayerTreeHost uses this mechanism (yet). This patch should cause no change in behavior.

        Fixes <http://webkit.org/b/57792> LayerTreeHost needs a way to render frames to a bitmap

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::forceRepaint): If the layer tree host participates in display,
        perform a display (like in the non-accelerated case).
        (WebKit::DrawingAreaImpl::layerHostDidFlushLayers): Don't send an
        EnterAcceleratedCompositing message to the UI process if the layer tree host participates in
        display. In that case, the UI process doesn't even need to know we're using accelerated
        compositing in the web process.
        (WebKit::DrawingAreaImpl::sendDidUpdateBackingStoreState): Go through the normal display
        mechanism if we have a layer tree host that participates in display.
        (WebKit::DrawingAreaImpl::didUpdate): Don't ignore DidUpdate messages when we have a layer
        tree host that participates in display.
        (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode): If the new layer tree host
        participates in display, let the display timer continue to run and continue to expect
        DidUpdate messages so that we don't interrupt the normal display mechanism. We still clear
        out m_dirtyRegion, m_scrollRect, and m_scrollOffset, though, because the layer tree host is
        still responsible for keeping track of those things even when it participates in display.
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode): If the outgoing layer tree host
        was participating in display, just send another Update message instead of an
        ExitAcceleratedCompositing message, since the UI process never even knew we were using
        accelerated compositing.
        (WebKit::DrawingAreaImpl::displayTimerFired): If we have a layer tree host that's
        participating in display, ask it when it next needs to display when scheduling our timer.

        (WebKit::DrawingAreaImpl::scheduleDisplay):
        (WebKit::DrawingAreaImpl::display):
        If we have a layer tree host that's participating in display, it will keep track of its own
        dirty region, so ask it if it needs display rather than checking our own dirty region.

        (WebKit::DrawingAreaImpl::display): If we have a layer tree host that's participating in
        display, don't bail out. Instead, tell it to display rather than asking the page to paint.
        Moved the setting of updateInfo.viewSize earlier so that it will be set even when the layer
        tree host is displaying. Other changes are just due to indentation.

        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit::LayerTreeHost::participatesInDisplay):
        (WebKit::LayerTreeHost::needsDisplay):
        (WebKit::LayerTreeHost::timeUntilNextDisplay):
        (WebKit::LayerTreeHost::display):
        Stubbed out these functions. Derived classes can override them to participate in display.

2011-04-04  MORITA Hajime  <morrita@google.com>

        Reviewed by Ryosuke Niwa.

        [Refactoring] SpellCheckingResult should be replaced with TextCheckingResult
        https://bugs.webkit.org/show_bug.cgi?id=56085
        
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::requestCheckingOfString):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::checkTextOfParagraph):

2011-04-05  Alejandro G. Castro  <alex@igalia.com>

        Another compilation fix after r82929 horrible patch merge.

        * UIProcess/WebPageProxy.messages.in:

2011-04-05  Alejandro G. Castro  <alex@igalia.com>

        Fix compilation error after r82929.

        * WebProcess/WebPage/WebPage.h:

2011-04-05  Amruth Raj  <amruthraj@motorola.com>, Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com> and Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

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

        Added functions to handle the generation of commands from the
        keycodes.

        * GNUmakefile.am:
        * Scripts/webkit2/messages.py:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::getEditorCommandsForKeyEvent):
        * UIProcess/gtk/WebView.cpp:
        (WebKit::backspaceCallback):
        (WebKit::selectAllCallback):
        (WebKit::cutClipboardCallback):
        (WebKit::copyClipboardCallback):
        (WebKit::pasteClipboardCallback):
        (WebKit::toggleOverwriteCallback):
        (WebKit::popupMenuCallback):
        (WebKit::showHelpCallback):
        (WebKit::deleteFromCursorCallback):
        (WebKit::moveCursorCallback):
        (WebKit::WebView::WebView):
        (WebKit::WebView::getEditorCommandsForKeyEvent):
        * UIProcess/gtk/WebView.h:
        (WebKit::WebView::addPendingEditorCommand):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp: Added.
        (WebKit::WebEditorClient::getEditorCommandsForKeyEvent):
        (WebKit::WebEditorClient::executePendingEditorCommands):
        (WebKit::WebEditorClient::handleKeyboardEvent):
        (WebKit::WebEditorClient::handleInputMethodKeydown):
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/gtk/WebPageGtk.cpp: Added.
        (WebKit::WebPage::platformInitialize):
        (WebKit::WebPage::platformPreferencesDidChange):
        (WebKit::scroll):
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent):
        (WebKit::WebPage::platformHasLocalDataForURL):
        (WebKit::WebPage::cachedResponseMIMETypeForURL):
        (WebKit::WebPage::platformCanHandleRequest):

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

        Remove duplicate API from WKContext
        <rdar://problem/8727879>
        https://bugs.webkit.org/show_bug.cgi?id=57815

        Unreviewed buildfix after r82906.

        Add UNUSED_PARAM to resourceCachesToClear, because
        it is only used within #if USE(CFURLCACHE) guard.

        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::clearCacheForOrigin):

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

        Reviewed by Brian Weinstein.

        Remove duplicate API from WKContext
        <rdar://problem/8727879>
        https://bugs.webkit.org/show_bug.cgi?id=57815

        - Remove WKContextClearResourceCaches and WKContextClearApplicationCache in favor
          of their more modern counterparts WKResourceCacheManagerClearCacheForAllOrigins
          and WKApplicationCacheManagerDeleteAllEntries.

        - Expand clearing functionality of WKResourceCacheManager by adding type of resources
          to clear.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        Remove clearing bools.

        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toResourceCachesToClear):
        Update for new name of enum.

        * UIProcess/API/C/WKContext.cpp:
        * UIProcess/API/C/WKContext.h:
        Remove WKContextClearResourceCaches and WKContextClearApplicationCache.

        * UIProcess/API/C/WKResourceCacheManager.cpp:
        (WKResourceCacheManagerClearCacheForOrigin):
        (WKResourceCacheManagerClearCacheForAllOrigins):
        * UIProcess/API/C/WKResourceCacheManager.h:
        Add WKResourceCachesToClear enum and use it in the clearing functions.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::ensureWebProcess):
        * UIProcess/WebContext.h:
        * WebProcess/WebProcess.messages.in:
        Remove clearing functions and setting of bools for clear on launch.

        * UIProcess/WebFullScreenManagerProxy.cpp:
        Remove unnecessary #include.

        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::clearCacheForOrigin):
        (WebKit::WebResourceCacheManagerProxy::clearCacheForAllOrigins):
        * UIProcess/WebResourceCacheManagerProxy.h:
        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::clearCacheForOrigin):
        (WebKit::WebResourceCacheManager::clearCacheForAllOrigins):
        * WebProcess/ResourceCache/WebResourceCacheManager.h:
        * WebProcess/ResourceCache/WebResourceCacheManager.messages.in:
        Add enum parameter describing what type of caches to clear.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::clearResourceCaches):
        * WebProcess/WebProcess.h:
        No longer need to use opaque type now that it is not a message receiver.

2011-04-04  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/57384> CFNetwork and WebCore load priorities should match

        Reviewed by Alexey Proskuryakov.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Added initialization for
        wkSetHTTPPipeliningMaximumPriority().

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

        Reviewed by Darin Adler.

        Send NPCocoaEventFlagsChanged events
        https://bugs.webkit.org/show_bug.cgi?id=57811
        <rdar://problem/9215600>

        * Shared/WebEvent.h:
        (WebKit::WebEvent::capsLockKey):
        Add CapsLock modifier and getter.

        * Shared/mac/WebEventFactory.mm:
        (WebKit::modifiersForEvent):
        Check for NSAlphaShiftKeyMask and set the CapsLockKey modifier.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::modifierFlags):
        Check for CapsLockKey and set NSAlphaShiftKeyMask.

        (WebKit::isFlagsChangedEvent):
        Return whether a given event is a Cocoa flags changed event.

        (WebKit::initializeKeyboardEvent):
        If this is a flags changed event, set the event type to NPCocoaEventFlagsChanged.

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

        Reviewed by Darin Adler.

        Don't discard the backing stores of WKViews in the key window
        https://bugs.webkit.org/show_bug.cgi?id=57808
        <rdar://problem/9110793>
        <rdar://problem/9194284>
        <rdar://problem/9222216>

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::setBackingStoreIsDiscardable):
        Add empty stub.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl):
        Initialize m_isBackingStoreDiscardable to true.

        (WebKit::DrawingAreaProxyImpl::setBackingStoreIsDiscardable):
        Set m_isBackingStoreDiscardable and schedule or stop the discard backing store timer.

        (WebKit::DrawingAreaProxyImpl::discardBackingStoreSoon):
        Don't start the timer if m_isBackingStoreDiscardable is false.

        * UIProcess/DrawingAreaProxyImpl.h:
        Add m_isBackingStoreDiscardable.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewStateDidChange):
        Mark the backing store as discardable if the view is hidden or if the containing window
        is not active.

2011-04-04  Jade Han  <jade.han@nokia.com>

        Reviewed by Csaba Osztrogonác.

        Symbian build fix.
        https://bugs.webkit.org/show_bug.cgi?id=54977

        * config.h:

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

        Rubberstamped by Adam Roben.

        Add WKIconDatabase* headers to the WebKit2 export for Windows:
        * win/WebKit2Generated.make:

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

        Reviewed by Dan Bernstein.

        Get rid of WebContext::process() in more places
        https://bugs.webkit.org/show_bug.cgi?id=57787

        Migrate calls to WebContext::process() over to sendToAllProcesses and
        sendToAllProcessesRelaunchingThemIfNecessary.

        Add FIXMEs for things that need to be fixed in order to support multiple web processes.
                
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::cancel):
        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
        (WebKit::WebPluginSiteDataManager::getSitesWithData):
        (WebKit::WebPluginSiteDataManager::clearSiteData):
        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::pendingVisitedLinksTimerFired):
        * UIProcess/WebApplicationCacheManagerProxy.cpp:
        (WebKit::WebApplicationCacheManagerProxy::getApplicationCacheOrigins):
        (WebKit::WebApplicationCacheManagerProxy::deleteEntriesForOrigin):
        (WebKit::WebApplicationCacheManagerProxy::deleteAllEntries):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::getHostnamesWithCookies):
        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::getDatabasesByOrigin):
        (WebKit::WebDatabaseManagerProxy::getDatabaseOrigins):
        (WebKit::WebDatabaseManagerProxy::deleteDatabaseWithNameForOrigin):
        (WebKit::WebDatabaseManagerProxy::deleteDatabasesForOrigin):
        (WebKit::WebDatabaseManagerProxy::deleteAllDatabases):
        (WebKit::WebDatabaseManagerProxy::setQuotaForOrigin):
        * UIProcess/WebGeolocationManagerProxy.cpp:
        (WebKit::WebGeolocationManagerProxy::providerDidChangePosition):
        (WebKit::WebGeolocationManagerProxy::providerDidFailToDeterminePosition):
        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::getLoadDecisionForIconURL):
        (WebKit::WebIconDatabase::didFinishURLImport):
        * UIProcess/WebKeyValueStorageManagerProxy.cpp:
        (WebKit::WebKeyValueStorageManagerProxy::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManagerProxy::deleteEntriesForOrigin):
        (WebKit::WebKeyValueStorageManagerProxy::deleteAllEntries):
        * UIProcess/WebMediaCacheManagerProxy.cpp:
        (WebKit::WebMediaCacheManagerProxy::getHostnamesWithMediaCache):
        (WebKit::WebMediaCacheManagerProxy::clearCacheForHostname):
        (WebKit::WebMediaCacheManagerProxy::clearCacheForAllHostnames):
        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::getCacheOrigins):
        (WebKit::WebResourceCacheManagerProxy::clearCacheForOrigin):
        (WebKit::WebResourceCacheManagerProxy::clearCacheForAllOrigins):

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

        Reviewed by Dan Bernstein.

        REGRESSION (WebKit2): Caps-Lock indicator sometimes doesn't appear in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=51230
        <rdar://problem/8780989>

        <rdar://problem/9015250> REGRESSION (WebKit2): Key events not fired for modifier keys

        * UIProcess/API/mac/WKView.mm:
        (-[WKView flagsChanged:]): Ported from WebHTMLView.
        (-[WKView _interpretKeyEvent:withCachedTextInputState:savingCommandsTo:WebCore::]):
        AppKit isn't happy about attempts to interpret NSFlagsChanged, but WK2 lacked the check.

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

        Reviewed by Adam Roben.

        Remove unused AnalyzeWithLargeStack code from Windows build files
        https://bugs.webkit.org/show_bug.cgi?id=57771
        
        This was used for us to build with prefast automatically,
        but it is out-of-date and hasn't been used for some time.
        Removing completely for now.

        * win/WebKitPreBuild.cmd:

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

        Attempt to fix the Windows build.

        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::setShouldPaintNativeControls):

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

        Reviewed by Adam Roben.

        Make it easier to send a message to all processes in a context
        https://bugs.webkit.org/show_bug.cgi?id=57776

        Add WebContext::sendToAllProcesses and WebContext::sendToAllProcessesRelaunchingThemIfNecessary
        as a first step towards getting rid of WebContext::process() and getting rid of a class of crashers
        where WebContext::process() is null.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::initializeHistoryClient):
        (WebKit::WebContext::languageChanged):
        (WebKit::WebContext::setAlwaysUsesComplexTextCodePath):
        (WebKit::WebContext::registerURLSchemeAsEmptyDocument):
        (WebKit::WebContext::registerURLSchemeAsSecure):
        (WebKit::WebContext::setDomainRelaxationForbiddenForURLScheme):
        (WebKit::WebContext::setCacheModel):
        (WebKit::WebContext::setDefaultRequestTimeoutInterval):
        (WebKit::WebContext::clearResourceCaches):
        (WebKit::WebContext::clearApplicationCache):
        (WebKit::WebContext::setEnhancedAccessibility):
        (WebKit::WebContext::startMemorySampler):
        Use sendToAllProcesses.

        (WebKit::WebContext::stopMemorySampler):
        Use sendToAllProcesses. This is a slight policy change where we now create a sandbox extension even
        if there's no process around. Since this is a debugging tool it seems OK to do this.

        * UIProcess/WebContext.h:
        Get rid of hasValidProcess.

        (WebKit::WebContext::sendToAllProcesses):
        If we have a process and we can send messages to it, then do so.

        (WebKit::WebContext::sendToAllProcessesRelaunchingThemIfNecessary):
        Relaunch the web process and send the message.

        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::deleteCookiesForHostname):
        (WebKit::WebCookieManagerProxy::deleteAllCookies):
        (WebKit::WebCookieManagerProxy::startObservingCookieChanges):
        (WebKit::WebCookieManagerProxy::stopObservingCookieChanges):
        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):
        Use sendToAllProcesses and sendToAllProcessesRelaunchingThemIfNecessary.

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

        Move a teensy bit of non-Mac-specific code up to LayerTreeHostCA

        Fixes <http://webkit.org/b/57774> LayerTreeHostCA should know how to flip the root layer

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/ca/LayerTreeHostCA.cpp:
        (WebKit::LayerTreeHostCA::initialize): Cross-platformized and moved some code here...

        * WebProcess/WebPage/ca/mac/LayerTreeHostCAMac.mm:
        (WebKit::LayerTreeHostCAMac::platformInitialize): ...from here.

2011-04-01  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        WK2: Reproducible crash when dragging out of or over Safari window.
        https://bugs.webkit.org/show_bug.cgi?id=57654
        <rdar://problem/9139755>
        
        AppKit does not retain the owner given to the pasteboard, therefore we
        need to give the ownership of the retained pointer to NSPasteboard.
        Also, dragImage will release the NSFilePromiseDragSource object, therefore
        we retain it before calling dragImage to be able to control its lifetime.
        
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::declareAndWriteDragImage): Passing ownership
        of the pointer to AppKit when providing the owner pointer to the NSPasteboard
        object.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformDragEnded): Retaining the NSFilePromiseDragSource
        since dragImage will release it.

2011-03-30  Jer Noble  <jer.noble@apple.com>

        Reviewed by Dan Bernstein.

        WebKit2: No "open in preview" contextual menu item for PDFs
        https://bugs.webkit.org/show_bug.cgi?id=57527

        Add support for opening a PDF in the associated application from the
        context menu.

        * UIProcess/API/mac/PDFViewController.mm:
        (_applicationInfoForMIMEType): Added, copied from WebKit/WebPDFView.mm
        (-[WKPDFView _openWithFinder:]): Added.
        (-[WKPDFView hitTest:]): Added, copied from WebKit/WebPDFView.mm.
        (-[WKPDFView menuForEvent:]): Added, adapted from WebKit/WebPDFVie.mm.
        (-[WKPDFView validateUserInterfaceItem:]): Added.

2011-04-04  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.setAllowFileAccessFromFileURLs
        https://bugs.webkit.org/show_bug.cgi?id=57572

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::decode):
        (WebKit::WebPreferencesStore::overrideAllowFileAccessFromFileURLsForTestRunner):
        * Shared/WebPreferencesStore.h:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetAllowFileAccessFromFileURLs):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setAllowFileAccessFromFileURLs):
        * WebProcess/InjectedBundle/InjectedBundle.h:

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=57683
        Flesh out WK2 Icon Database API

        For now the new API will add a client interface where the WK1 version used NSNotifications.

        If we decide we'd like the granularity of specific callback functions later, 
        they can easily be added on.

        Project file nonsense:
        * GNUmakefile.am:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

        Add a WKIconDatabaseClient and some new API:
        * UIProcess/API/C/WKIconDatabase.cpp:
        (WKIconDatabaseSetIconDatabaseClient):
        (WKIconDatabaseRemoveAllIcons):
        (WKIconDatabaseCheckIntegrityBeforeOpening):
        * UIProcess/API/C/WKIconDatabase.h:
        * UIProcess/API/C/cg/WKIconDatabaseCG.cpp:
        (WKIconDatabaseTryGetCGImageForURL): Renamed to "try" for subtle clarification.
        * UIProcess/API/C/cg/WKIconDatabaseCG.h:

        Implementations for the new APIs:
        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::retainIconForPageURL): Remove excessive logging.
        (WebKit::WebIconDatabase::releaseIconForPageURL): Ditto.
        (WebKit::WebIconDatabase::imageForPageURL):
        (WebKit::WebIconDatabase::removeAllIcons):
        (WebKit::WebIconDatabase::checkIntegrityBeforeOpening):
        (WebKit::WebIconDatabase::initializeIconDatabaseClient):
        (WebKit::WebIconDatabase::didImportIconURLForPageURL): Dispatch a client callback,
          much like the WK1 API uses notifications.
        (WebKit::WebIconDatabase::didImportIconDataForPageURL): Ditto.
        (WebKit::WebIconDatabase::didChangeIconForPageURL): Ditto.
        (WebKit::WebIconDatabase::didRemoveAllIcons): Ditto.
        * UIProcess/WebIconDatabase.h:
        * UIProcess/WebIconDatabaseClient.cpp: Added.
        (WebKit::WebIconDatabaseClient::didChangeIconForPageURL):
        (WebKit::WebIconDatabaseClient::didRemoveAllIcons):
        * UIProcess/WebIconDatabaseClient.h: Added.

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

        Reviewed by Martin Robinson.

        [GTK] Main loop sources are leaked in RunLoopGtk
        https://bugs.webkit.org/show_bug.cgi?id=57618

        * Platform/RunLoop.h:
        (RunLoop::TimerBase::isRepeating):
        * Platform/gtk/RunLoopGtk.cpp:
        (RunLoop::~RunLoop): Make sure main loop is currently running
        before calling g_main_loop_quit(), RunLoop::stop() might have been
        called.
        (RunLoop::wakeUp): Use an idle source with default priority
        instead of a timeout one with a 0 interval.
        (RunLoop::TimerBase::clearTimerSource): New method to clear the
        timer.
        (RunLoop::TimerBase::destroyNotifyCallback): Destroy notify
        callback called when the source is destroyed to clear the timer.
        (RunLoop::TimerBase::timerFiredCallback): Use the same callback for
        repeating and no repeating timers.
        (RunLoop::TimerBase::start): g_source_attach() increments the
        source reference counter, so use GRefPtr to make sure the source
        is freed.
        (RunLoop::TimerBase::stop): Use clearTimerSource().

2011-04-03  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * Shared/DictionaryPopupInfo.cpp:
        (WebKit::DictionaryPopupInfo::encode):
        (WebKit::DictionaryPopupInfo::decode):
        * Shared/DictionaryPopupInfo.h:

2011-04-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9227839> REGRESSION: Reproducible crash in Snow Leopard when trying to show the Dictionary panel or application
        https://bugs.webkit.org/show_bug.cgi?id=57739

        * Shared/DictionaryPopupInfo.cpp:
        (WebKit::DictionaryPopupInfo::encode): Do not encode the options dictionary on Snow Leopard.
        (WebKit::DictionaryPopupInfo::decode): Do not decode the options dictionary on Snow Leopard.
        * Shared/DictionaryPopupInfo.h: Removed the options member variable on Snow Leopard.
        * Shared/Plugins/PluginQuirks.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupForRange): Do not set the options member variable on
        Snow Leopard.

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

        Reviewed by Beth Dakin.

        https://bugs.webkit.org/show_bug.cgi?id=57605
        Frame::pageScaleFactor() should not affect getBoundingClientRect() or 
        getClientRects()
        -and corresponding-
        <rdar://problem/9194541>

        Add DRT support for the scaleWebView SPI.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetScaleAtOrigin):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:

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

        Reviewed by Oliver Hunt.

        "Search in Spotlight" broken in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=57712

        Proxy spotlight searching to the UIProcess.

        * UIProcess/WebPageProxy.messages.in:
        Add new message. Re-organize messages to put all mac specific ones together.

        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::speak):
        (WebKit::WebPageProxy::searchWithSpotlight):
        Moved code to trigger spotlight here. Use WTF::String -> NSString conversion function
        instead of relying on the built in conversion since it doesn't always work in the UIProcess.

        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        (WebKit::WebContextMenuClient::searchWithSpotlight):
        Post message to the UIProcess to do the searching.

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

        Reviewed by Dan Bernstein.

        WebKit2: Specify the certificate store in WKBundleSetClientCertificate()
        https://bugs.webkit.org/show_bug.cgi?id=57707

        Include the name of the system certificate store that the client certificate came from in WKBundleSetClientCertificate().

        The PCCERT_CONTEXT for the client certificate we create from the message from the UI process doesn't contain enough information to actually use it in a request, we need to get the real certificate from the certificate store (which is typically the "MY" store).

        * WebProcess/InjectedBundle/API/c/win/WKBundlePrivateWin.cpp:
        (WKBundleSetClientCertificate): Add certificateSystemStoreName to parameters.
        * WebProcess/InjectedBundle/API/c/win/WKBundlePrivateWin.h: Add certificateSystemStoreName to WKBundleSetClientCertificate() parameters.
        * WebProcess/InjectedBundle/InjectedBundle.h: Add certificateSystemStoreName to setClientCertificate() parameters.
        * WebProcess/InjectedBundle/win/InjectedBundleWin.cpp:
        (WebKit::InjectedBundle::setClientCertificate): Read the real certificate from the certificate store.

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

        Reviewed by Dan Bernstein.

        Implement WKBundleFrameHasHorizontalScrollbar/WKBundleFrameHasVerticalScrollbar
        <rdar://problem/9225772>
        https://bugs.webkit.org/show_bug.cgi?id=57709

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameHasHorizontalScrollbar):
        (WKBundleFrameHasVerticalScrollbar):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::hasHorizontalScrollbar):
        (WebKit::WebFrame::hasVerticalScrollbar):
        * WebProcess/WebPage/WebFrame.h:

2011-04-01  Jon Lee  <jonlee@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Type-to-select doesn't work in open <select> menu (53023)
        https://bugs.webkit.org/show_bug.cgi?id=53023
        <rdar://problem/8907678>

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in: adding new setPopupMenuSelectedIndex message for windows platform
        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::WebPageProxy::setPopupMenuSelectedIndex):
        * UIProcess/win/WebPopupMenuProxyWin.h: moving setFocusedIndex() into public method
        * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
        (WebKit::WebPopupMenu::updateFromElement): send message back to UIProcess to update the selected element

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

        Reviewed by Darin Adler.

        REGRESSION: Assertion failure when executing a complex custom key binding
        https://bugs.webkit.org/show_bug.cgi?id=57681

        Also completes a fix for
        <rdar://problem/9063782> WebKit2: Text fields in Safari don't honor custom key bindings

        * UIProcess/API/mac/WKView.mm: (-[WKView hasMarkedText]): There is no need to execute saved
        commands when they can't possibly change the result.

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

        Reviewed by Anders Carlsson.

        Crash when calling WebPageProxy::setMemoryCacheClientCallsEnabled with an invalid Web Process
        https://bugs.webkit.org/show_bug.cgi?id=57680
        <rdar://problem/9202909>

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setMemoryCacheClientCallsEnabled): Add an isValid check before sending
            the message.

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

        Reviewed by Dan Bernstein.

        WebKit2: Save as PDF in Safari provides Untitled as default file name
        https://bugs.webkit.org/show_bug.cgi?id=57529

        Set the NSPrintOperation's jobTitle to the printing frame's title.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView printOperationWithPrintInfo:forFrame:]):

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

        Reviewed by Darin Adler.

        WebKit2: Link from PDF opens in a new tab instead of in the same tab
        https://bugs.webkit.org/show_bug.cgi?id=57528

        Notify the WebProcess that a link has been clicked so that the normal policy
        lookup can occur.

        * Shared/WebEvent.cpp:
        (WebKit::WebEvent::WebEvent): Initialize ivars in the default constructor.
        * Shared/WebEvent.h: Add WebEvent::NoType to Type enum.
        * Shared/WebMouseEvent.cpp: 
        (WebKit::WebMouseEvent::WebMouseEvent): Ditto.
        * UIProcess/API/mac/PDFViewController.mm:
        (-[WKPDFView PDFViewWillClickOnLink:withURL:]): Handle the delegate
            function and override the PDFView default behavior.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveEvent): Handle the new WebEvent::NoType enum.
        (WebKit::WebPageProxy::linkClicked): Added.  Send event through to WebPage.
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::linkClicked): Added.  Call loadFrameRequest().
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Added LinkClicked.

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

        Reviewed by Adam "Keyword Slasher" Roben.

        Remove unnecessary static keyword.

        * UIProcess/API/cpp/WKRetainPtr.h:
        (WebKit::adoptWK):

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

        Reviewed by Adam Roben.

        Add adoptWK to WKRetainPtr.h
        https://bugs.webkit.org/show_bug.cgi?id=57670

        * UIProcess/API/cpp/WKRetainPtr.h:
        (WebKit::adoptWK):
        Add shared implementation of adoptWK. Previously both WebKitTestRunner
        and TestWebKitAPI had separate versions of it.

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

        Reviewed by Sam Weinig.

        Shockwave plug-in doesn't accept mouse events
        https://bugs.webkit.org/show_bug.cgi?id=57653
        <rdar://problem/8483273>

        Add a missing break.

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

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

        Reviewed by Anders Carlsson.

        WebKitTestRunner needs layoutTestController.shadowRoot
        https://bugs.webkit.org/show_bug.cgi?id=57661

        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleGetRenderRect):
        (WKBundleNodeHandleGetElementBounds):
        (WKBundleNodeHandleCopyElementShadowRoot):
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::elementShadowRoot):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:
        Add accessor for the shadowRoot of an element in the bundle.

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

        Reviewed by Darin Adler.

        Make WebKit2 text input handling more like WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=57649

        We now send more sync messages from UI process to Web process for NSTextInput protocol
        methods. Some of the exchanges are avoided by pre-calculating the responses before asking
        UI process to interpret key events, and also with each sync message sent during
        interpretation, and which could change the state.

        * Platform/CoreIPC/HandleMessage.h: (CoreIPC::callMemberFunction): Added a missing
        specialization for a function with 6 arguments and 2 returned values.

        * Scripts/webkit2/messages.py: Added TextInputState to struct list.

        * Shared/WebCoreArgumentCoders.h: Fixed a bug in CompositionUnderline encoding, which only
        encoded a part of Color field, and didn't match decoder.

        * Shared/mac/TextInputState.h: Added. This is state that's needed for IM machinery and that
        we don't want to send sync messages for. This is similar to SelectionState, but the latter
        is only updated asynchronously, and is thus less reliable.

        * UIProcess/API/mac/PageClientImpl.h: We don't "intercept", we "interpret".

        * UIProcess/API/mac/PageClientImpl.mm: (WebKit::PageClientImpl::interpretKeyEvent): Pass
        current text input state, and don't expect anything input method related in return, as input
        methods are now sync.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView doCommandBySelector:]):
        (-[WKView insertText:]):
        (-[WKView keyDown:]):
        (-[WKView _executeSavedKeypressCommands]):
        (-[WKView inputContext]):
        (-[WKView selectedRange]):
        (-[WKView hasMarkedText]):
        (-[WKView unmarkText]):
        (-[WKView setMarkedText:selectedRange:]):
        (-[WKView markedRange]):
        (-[WKView attributedSubstringFromRange:]):
        (-[WKView characterIndexForPoint:]):
        (-[WKView firstRectForCharacterRange:]):
        (-[WKView _interpretKeyEvent:withCachedTextInputState:savingCommandsTo:WebCore::]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setComposition):
        (WebKit::WebPageProxy::confirmComposition):
        (WebKit::WebPageProxy::insertText):
        (WebKit::WebPageProxy::getSelectedRange):
        (WebKit::WebPageProxy::executeKeypressCommands):
        (WebKit::WebPageProxy::interpretQueuedKeyEvent):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::handleKeyboardEvent):
        (WebKit::WebEditorClient::handleInputMethodKeydown):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::viewFrameInWindowCoordinates):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::createSelectorExceptionMap):
        (WebKit::commandNameForSelectorName):
        (WebKit::currentTextInputState):
        (WebKit::frameForEvent):
        (WebKit::WebPage::executeKeypressCommandsInternal):
        (WebKit::WebPage::handleEditingKeyboardEvent):
        (WebKit::WebPage::setComposition):
        (WebKit::WebPage::confirmComposition):
        (WebKit::WebPage::insertText):
        (WebKit::WebPage::getSelectedRange):
        (WebKit::convertToRange):
        (WebKit::WebPage::executeKeypressCommands):
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent):
        Rewrote to be more like WebKit1.

2011-04-01  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.setDatabaseQuota
        https://bugs.webkit.org/show_bug.cgi?id=57568

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetDatabaseQuota):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setDatabaseQuota):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:

2011-04-01  Timothy Hatcher  <timothy@apple.com>

        Make momentum scroll event latching work in WebKit2 on Mac.

        <rdar://problem/8751861>

        Reviewed by Darin Adler.

        * Shared/mac/WebEventFactory.mm:
        (WebKit::momentumPhaseForEvent): Return a phase on older Mac system by using WKGetNSEventMomentumPhase.
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Remove IsLatchingWheelEvent, add GetNSEventMomentumPhase.

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

        Reviewed by Anders Carlsson.

        Assertion failure (type == event.type()) after a web process crash
        https://bugs.webkit.org/show_bug.cgi?id=56228
        <rdar://problem/8806106>

        This partially un-confuses the UI process about key processing state after a web process
        crash. It may not be pefect yet - sending a KeyUp to a new process that never saw a KeyDown
        seems weird.

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

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

        Cairo build fix

        * WebProcess/WebPage/LayerTreeHost.cpp: Only pull in the LayerTreeHostCA derived classes for
        PLATFORM(CA) ports.

2011-03-31  Adam Roben  <aroben@apple.com>

        Split LayerTreeHostCA into a base class and derived Mac and Win classes

        This will make it easier to customize the Mac and Windows implementations without adding too
        many #ifdefs.

        Fixes <http://webkit.org/b/57606> Windows and Mac should use separate LayerTreeHost classes

        Reviewed by Anders Carlsson.

        * WebKit2.xcodeproj/project.pbxproj: Added LayerTreeHostCAMac.h.

        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create): Create a LayerTreeHostCAMac on Mac, and LayerTreeHostCAWin
        on Windows.

        * WebProcess/WebPage/ca/LayerTreeHostCA.cpp:
        (WebKit::LayerTreeHostCA::LayerTreeHostCA): Moved some code from here...
        (WebKit::LayerTreeHostCA::initialize): ...to here. This function will be called after the
        constructor returns, and thus can safely call functions that are pure virtual in this class
        and its base class. We now pass our LayerTreeContext to platformInitialize so that our
        derived classes can initialize it.
        (WebKit::LayerTreeHostCA::~LayerTreeHostCA): Removed Mac-specific code.

        (WebKit::LayerTreeHostCA::invalidate):
        (WebKit::LayerTreeHostCA::sizeDidChange):
        (WebKit::LayerTreeHostCA::forceRepaint):
        (WebKit::LayerTreeHostCA::didPerformScheduledLayerFlush):
        Removed platform* calls. Derived classes can just override these functions to do what they
        need.

        * WebProcess/WebPage/ca/LayerTreeHostCA.h: Removed Mac-specific pieces. Made some functions
        virtual so that derived classes can override them.

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

        * WebProcess/WebPage/ca/mac/LayerTreeHostCAMac.mm:
        (WebKit::LayerTreeHostCAMac::create): Create and initialize a host.
        (WebKit::LayerTreeHostCAMac::LayerTreeHostCAMac): Simple constructor.
        (WebKit::LayerTreeHostCAMac::~LayerTreeHostCAMac): Moved code here from LayerTreeHostCA
        destructor.
        (WebKit::LayerTreeHostCAMac::platformInitialize): Removed direct uses of LayerTreeHostCA
        data members.

        (WebKit::LayerTreeHostCAMac::invalidate):
        (WebKit::LayerTreeHostCAMac::sizeDidChange):
        (WebKit::LayerTreeHostCAMac::forceRepaint):
        (WebKit::LayerTreeHostCAMac::didPerformScheduledLayerFlush):
        Renamed from platform*. Now call up to the base class.

        (WebKit::LayerTreeHostCAMac::flushPendingLayerChangesRunLoopObserverCallback): Updated type.

        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.cpp:
        (WebKit::LayerTreeHostCAWin::create): Create and initialize a host.

        (WebKit::LayerTreeHostCAWin::LayerTreeHostCAWin):
        (WebKit::LayerTreeHostCAWin::~LayerTreeHostCAWin):
        (WebKit::LayerTreeHostCAWin::platformInitialize):
        (WebKit::LayerTreeHostCAWin::scheduleLayerFlush):
        Stubbed out.

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

        * win/WebKit2.vcproj: Added LayerTreeHostCAWin.h

        * win/WebKit2Apple.vsprops: Added WebProcess/WebPage/ca/win to the include path.

2011-03-31  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed WinCairo build fix after r82632.

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

2011-03-31  Adam Roben  <aroben@apple.com>

        Add SharedMemory::adopt, which can take ownership of an existing file mapping object

        Fixes <http://webkit.org/b/57599> Need a way to wrap an existing file mapping object in a
        SharedMemory

        Reviewed by Anders Carlsson.

        * Platform/SharedMemory.h: Added adopt.

        * Platform/win/SharedMemoryWin.cpp:
        (WebKit::SharedMemory::create): Moved code to adopt the HANDLE from here...
        (WebKit::SharedMemory::adopt): ...to here.

2011-03-31  Chang Shu  <cshu@webkit.org>

        Reviewed by Darin Adler.

        WebKitTestRunner needs layoutTestController.clearAllDatabases
        https://bugs.webkit.org/show_bug.cgi?id=42540

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleClearAllDatabases):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::clearAllDatabases):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:

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

        Reviewed by Sam Weinig.

        Add some more media related things to the sandbox profile.

        * WebProcess/com.apple.WebProcess.sb:

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

        Reviewed by Dan Bernstein.

        Tabbed pages redraw unnecessarily when activated
        https://bugs.webkit.org/show_bug.cgi?id=57589
        <rdar://problem/9218258>

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::visibilityDidChange):
        If we become visible and have no backing store, make sure to call backingStoreStateDidChange
        so that the next time we're asked to paint we'll wait for something to paint.

        (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode):
        Remove now redundant call to backingStoreStateDidChange.

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

        Reviewed by Anders Carlsson.

        Sandbox violations when playing back HTML5 video on YouTube
        <rdar://problem/8950692>

        * WebProcess/com.apple.WebProcess.sb:

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

        Reviewed by Sam Weinig.

        Implement mouseDown, mouseUp, and mouseMoveTo in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=57573

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSimulateMouseDown): Added.
        (WKBundlePageSimulateMouseUp): Added.
        (WKBundlePageSimulateMouseMotion): Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h: Added above functions.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::simulateMouseDown): Added.
        (WebKit::WebPage::simulateMouseUp): Added.
        (WebKit::WebPage::simulateMouseMotion): Added.
        * WebProcess/WebPage/WebPage.h: Added above functions.

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

        Reviewed by Anders Carlsson.

        Rename WebCore's UI_STRING to WEB_UI_STRING to not overlap with WebKit API
        https://bugs.webkit.org/show_bug.cgi?id=57582

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitialize):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformInspectedURLChanged):
        * WebProcess/WebCoreSupport/mac/WebErrorsMac.mm:
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2011-03-31  Adam Roben  <aroben@apple.com>

        Specify both FILE_MAP_READ and FILE_MAP_WRITE when creating a read-write SharedMemory object

        When passed to ::MapViewOfFile, FILE_MAP_WRITE implies FILE_MAP_READ, but other file mapping
        APIs don't work that way. This bug wasn't causing any problems in practice, but it would
        have prevented us from creating a DIB that wraps a SharedMemory object (which I noticed
        while working on another bug).

        Fixes <http://webkit.org/b/57576> File mappings used by read-write SharedMemory objects
        aren't correctly marked as read-write after being sent over a CoreIPC::Connection

        Reviewed by Brian Weinstein.

        * Platform/win/SharedMemoryWin.cpp:
        (WebKit::accessRights): Specify FILE_MAP_READ in addition to FILE_MAP_WRITE for read-write
        SharedMemory.

2011-03-31  Adam Roben  <aroben@apple.com>

        Quote the executable path we pass to ::CreateProcessW

        This will ensure that spaces in the path will be interpreted correctly.

        Fixes <http://webkit.org/b/57569> Web process sometimes fails to launch when there are
        spaces in its path

        Reviewed by Steve Falkenburg.

        * UIProcess/Launcher/win/ProcessLauncherWin.cpp:
        (WebKit::ProcessLauncher::launchProcess): Surround the executable path in quotes.

2011-03-31  Alexey Proskuryakov  <ap@apple.com>

        Patch by John Harvey, reviewed and tweaked by me.

        <rdar://problem/8644403> Should notify TSM that plug-ins would show a bottom input window for marked text.

        * UIProcess/API/mac/WKTextInputWindowController.mm:
        (-[WKTextInputPanel _interpretKeyEvent:string:]):

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

        Reviewed by John Sullivan, Darin Adler, Dan Bernstein and Sam Weinig.

        If a user doesn't have a Database/LocalStorage directory, it can't be created (sandbox violations)
        https://bugs.webkit.org/show_bug.cgi?id=57561
        <rdar://problem/9127411>

        Ensure that any readwrite sandbox directories actually exist before entering the sandbox.

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::appendReadwriteSandboxDirectory):

2011-03-31  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler and Adam Roben.

        <rdar://problem/9214824> Find client not told when WKPageCountStringMatches exceeds maximum
        https://bugs.webkit.org/show_bug.cgi?id=57552

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::countStringMatches):
        Use the same technique as findString() to report kWKMoreThanMaximumMatchCount when appropriate.
        (WebKit::FindController::findString):
        Convert numeric_limits::max() to max() - 1 to avoid overflow case.

2011-03-31  Evan Martin  <evan@chromium.org>

        Reviewed by Eric Seidel.

        <title> should support dir attribute
        https://bugs.webkit.org/show_bug.cgi?id=50961

        Update to new FrameLoaderClient interface.

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

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

        Reviewed by Csaba Osztrogonác.

        [WK2] Introduce an option for no NPAPI support
        https://bugs.webkit.org/show_bug.cgi?id=55828

        Stub out NPAPI support for platform and OS combinations that are
        not supported yet. Ancestor patch was made by Laszlo Gombos.

        * GNUmakefile.am: Add NetscapePluginModuleNone.cpp and NetscapePluginNone.cpp
        to the build system.

        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        Remove the sanity check because from now all combinations that
        don't have an explicitly set plugin architecture fall into
        the PLUGIN_ARCHITECTURE(UNSUPPORTED) category and has a stubbed
        implementation.

        * Shared/Plugins/Netscape/NetscapePluginModuleNone.cpp: Added.
        Stubbed implementation.
        (WebKit::NetscapePluginModule::getPluginInfo):
        (WebKit::NetscapePluginModule::determineQuirks):

        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp: Guard with
        PLUGIN_ARCHITECTURE(X11).

        * WebKit2.pro: Add NetscapePluginModuleNone.cpp and NetscapePluginNone.cpp
        to the build system.

        * WebProcess/Plugins/Netscape/NetscapePluginNone.cpp: Added.
        Stubbed implementation
        (WebKit::NetscapePlugin::platformPostInitialize):
        (WebKit::NetscapePlugin::platformDestroy):
        (WebKit::NetscapePlugin::platformInvalidate):
        (WebKit::NetscapePlugin::platformGeometryDidChange):
        (WebKit::NetscapePlugin::platformPaint):
        (WebKit::NetscapePlugin::platformHandleMouseEvent):
        (WebKit::NetscapePlugin::platformHandleWheelEvent):
        (WebKit::NetscapePlugin::platformSetFocus):
        (WebKit::NetscapePlugin::platformHandleMouseEnterEvent):
        (WebKit::NetscapePlugin::platformHandleMouseLeaveEvent):
        (WebKit::NetscapePlugin::platformHandleKeyboardEvent):

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp: Guard with
        PLUGIN_ARCHITECTURE(X11)

        * config.h: Introduce PLUGIN_ARCHITECTURE(UNSUPPORTED) as another
        option. Make platform and OS combinations that are not supported
        yet fall into this. Don't use Q_WS_X11 to test the window system
        for Qt because it is not defined without including <QtGlobal>.
        No clue about how could it work so far.

2011-03-31  Vamshikrishna.Yellenki  <vamshi@motorola.com> and Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        Implement MiniBrowser for Gtk port.
        https://bugs.webkit.org/show_bug.cgi?id=48512

        * Shared/API/c/gtk/WKBaseGtk.h: Add the stdbool.h include.

2011-03-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9005982> Flash of white when a WKView with composited content moves on-screen
        https://bugs.webkit.org/show_bug.cgi?id=57522

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode): Invalidate the current
        backing store state, so that we get an update as soon as the page enters compositing mode
        next.
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::sendDidUpdateBackingStoreState): Added a call to
        LayerTreeHost::forceRepaint() in order to flush and synchronize the layers
        before sending the update message to the UI process.

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

        Reviewed by Anders Carlsson.

        Sandbox violations if you navigate a file URL via something other than a click
        <rdar://problem/9016086>
        https://bugs.webkit.org/show_bug.cgi?id=57519

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::shouldReuseCommittedSandboxExtension):
        Remove unnecessary restriction on extension reuse. Any type of file to file navigation
        should be allowed.

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

        Reviewed by Sam Weinig.

        Clean up the sandbox parameter code
        https://bugs.webkit.org/show_bug.cgi?id=57518

        * Shared/WebProcessCreationParameters.h:
        Make nsURLCachePath and uiProcessBundleResourcePath Strings to match the other paths we send over.

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        nsURLCachePath and uiProcessBundleResourcePath are now Strings.

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::appendSandboxParameterPathInternal):
        (WebKit::appendReadwriteConfDirectory):
        (WebKit::appendReadonlySandboxDirectory):
        (WebKit::appendReadwriteSandboxDirectory):
        (WebKit::initializeSandbox):
        Make it more clear whether the directories we're adding are readonly or readwrite. No functionality change.
        
        (WebKit::WebProcess::platformInitializeWebProcess):
        nsURLCachePath is now a string.

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

        Reviewed by Sam Weinig.

        Downloading a file fails due to a sandbox violation if the destination path is a symlink
        https://bugs.webkit.org/show_bug.cgi?id=57517
        <rdar://problem/8943865>

        Make sure to resolve any symlinks in the given path when creating a sandbox extension handle.
        Note that we can't use realpath or -[NSString stringByResolvingSymlinksInPath], because those calls
        will fail if the pointed to file doesn't exist.

        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::resolveSymlinksInPath):
        New function that resolves all the symlinks in the given path.

        (WebKit::SandboxExtension::createHandle):
        Call resolveSymlinksInPath on the resulting path.

2011-03-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Share most vsprops between Release and Production builds in releaseproduction.vsprops
        https://bugs.webkit.org/show_bug.cgi?id=57508

        * win/WebKit2Production.vsprops:
        * win/WebKit2Release.vsprops:
        * win/WebKit2ReleaseCairoCFLite.vsprops:
        * win/WebKit2WebProcessProduction.vsprops:
        * win/WebKit2WebProcessRelease.vsprops:
        * win/WebKit2WebProcessReleaseCairoCFLite.vsprops:

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

        Reviewed by Oliver Hunt.

        Ensure consistent, readable working directory for WebProcess before entering sandbox
        <rdar://problem/8951176>

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

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

        Reviewed by Brady Eidson.

        WebKit2: Attempting to view css file from url causes it to download
        <rdar://problem/9102611>
        https://bugs.webkit.org/show_bug.cgi?id=57501

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::canShowMIMEType):
        Match WebKit1 by allowing any MIME type that starts with "text/"
        except the ones we explicitly blacklist.

2011-03-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Update Windows production build logic for new production configurations
        https://bugs.webkit.org/show_bug.cgi?id=57494

        * win/WebKit2.make:
        * win/WebKit2Production.vsprops:
        * win/WebKit2WebProcessProduction.vsprops:

2011-03-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Rename Windows configuration Release_LTCG to Production for clarity
        https://bugs.webkit.org/show_bug.cgi?id=57465

        * win/WebKit2.submit.sln:
        * win/WebKit2.vcproj:
        * win/WebKit2Generated.vcproj:
        * win/WebKit2Production.vsprops: Copied from Source/WebKit2/win/WebKit2ReleaseLTCG.vsprops.
        * win/WebKit2ReleaseLTCG.vsprops: Removed.
        * win/WebKit2WebProcess.vcproj:
        * win/WebKit2WebProcessProduction.vsprops: Copied from Source/WebKit2/win/WebKit2WebProcessReleaseLTCG.vsprops.
        * win/WebKit2WebProcessReleaseLTCG.vsprops: Removed.

2011-03-30  Jer Noble  <jer.noble@apple.com>

        Reviewed by Dan Bernstein.

        WebKit2: WebProcess is using 89%, while viewing a PDF
        https://bugs.webkit.org/show_bug.cgi?id=57471

        Break a never ending display/update cycle between the UIProcess and the WebProcess
        by clearing the dirty region when a page has a custom representation (like a PDF).
        Also, avoid the issue where possible by not setting the dirty region in the same case.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::setNeedsDisplay): Bail early if mainFrameHasCustomRepresentation().
        (WebKit::DrawingAreaImpl::scroll): Ditto.
        (WebKit::DrawingAreaImpl::display): Both bail early and clear m_dirtyRegion if 
            mainFrameHasCustomRepresentation().

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

        Fix Snow Leopard build.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenu):

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

        Reviewed by Anders Carlsson.

        WebKit2 contextual menu looks different than the rest of the OS
        <rdar://problem/9172935>
        https://bugs.webkit.org/show_bug.cgi?id=57475

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenu):
        Use correct SPI for showing a context menu. The dummy view is also
        not necessary, so remove it.

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

        Reviewed by Sam Weinig.

        Crash when NPN_Evaluate removes the plug-in frame
        https://bugs.webkit.org/show_bug.cgi?id=57474
        <rdar://problem/9191396>

        Get a reference to the frame since it can be nulled out if running the JavaScript code
        causes the plug-in's containing frame to be removed from the frame tree.

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

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

        Reviewed by Anders Carlsson.

        Add default localization strategy that can be shared by WebKit1 and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=57406

        * Shared/WebLocalizableStrings.h: Removed.
        Removed in favor of using WebCore/LocalizedStrings.h directly.

        * PluginProcess/mac/PluginProcessMac.mm:
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        * WebProcess/WebCoreSupport/mac/WebErrorsMac.mm:
        * WebProcess/mac/WebProcessMac.mm:
        Use WebCore/LocalizedStrings.h directly.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        Remove localization strategy override in favor of using new default implementation.

        * GNUmakefile.am:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Remove WebLocalizableStrings.h

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

        Reviewed by Adam Roben.

        Assertion failure in plug-in process when calling WKPluginSiteDataManagerGetSitesWithData
        https://bugs.webkit.org/show_bug.cgi?id=57468
        <rdar://problem/9199089>

        Call decrementLoadCount from removeWebProcessConnection instead of startShutdownTimerIfNecessary,
        otherwise we'll get a load count underflow when a connection is never created.

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

2011-03-30  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Anders Carlsson.

        WebKit2: Make sure to try to terminate the Web Process when any work that might require the
        Web Process to be relaunched is done
        https://bugs.webkit.org/show_bug.cgi?id=57462

        For the ManagerProxies in the UIProcess, only return true from shouldTerminate if there are
        no more callbacks waiting to be invoked.

        For the the Managers in the WebProcess, call WebProcess::shared().terminateIfPossible() when
        any work called for by a ManagerProxy function that called relaunchProcessIfNecessary is
        finished.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::shouldTerminate):
        Check with each of the ManagerProxies.

        * UIProcess/WebApplicationCacheManagerProxy.cpp:
        (WebKit::WebApplicationCacheManagerProxy::shouldTerminate):
        * UIProcess/WebApplicationCacheManagerProxy.h:
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::shouldTerminate):
        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::shouldTerminate):
        * UIProcess/WebDatabaseManagerProxy.h:
        * UIProcess/WebKeyValueStorageManagerProxy.cpp:
        (WebKit::WebKeyValueStorageManagerProxy::shouldTerminate):
        * UIProcess/WebKeyValueStorageManagerProxy.h:
        * UIProcess/WebMediaCacheManagerProxy.cpp:
        (WebKit::WebMediaCacheManagerProxy::shouldTerminate):
        * UIProcess/WebMediaCacheManagerProxy.h:
        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::shouldTerminate):
        * UIProcess/WebResourceCacheManagerProxy.h:

        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp:
        (WebKit::WebApplicationCacheManager::getApplicationCacheOrigins):
        (WebKit::WebApplicationCacheManager::deleteEntriesForOrigin):
        (WebKit::WebApplicationCacheManager::deleteAllEntries):
        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::getHostnamesWithCookies):
        (WebKit::WebCookieManager::deleteCookiesForHostname):
        (WebKit::WebCookieManager::deleteAllCookies):
        (WebKit::WebCookieManager::startObservingCookieChanges):
        (WebKit::WebCookieManager::setHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManager::getHTTPCookieAcceptPolicy):
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.cpp:
        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManager::deleteEntriesForOrigin):
        (WebKit::WebKeyValueStorageManager::deleteAllEntries):
        * WebProcess/MediaCache/WebMediaCacheManager.cpp:
        (WebKit::WebMediaCacheManager::getHostnamesWithMediaCache):
        (WebKit::WebMediaCacheManager::clearCacheForHostname):
        (WebKit::WebMediaCacheManager::clearCacheForAllHostnames):
        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::getCacheOrigins):
        (WebKit::WebResourceCacheManager::clearCacheForOrigin):
        (WebKit::WebResourceCacheManager::clearCacheForAllOrigins):
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        (WebKit::WebDatabaseManager::getDatabasesByOrigin):
        (WebKit::WebDatabaseManager::getDatabaseOrigins):
        (WebKit::WebDatabaseManager::deleteDatabaseWithNameForOrigin):
        (WebKit::WebDatabaseManager::deleteDatabasesForOrigin):
        (WebKit::WebDatabaseManager::deleteAllDatabases):
        (WebKit::WebDatabaseManager::setQuotaForOrigin):

2011-03-30  Adam Roben  <aroben@apple.com>

        Mac build fix after r82442

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::geometryDidChange): Added a missing argument.

2011-03-29  Adam Roben  <aroben@apple.com>

        Add a way to specify that a ShareableBitmap has no alpha channel

        Before this patch, all ShareableBitmaps had an alpha channel. With this patch, all
        ShareableBitmaps *still* have an alpha channel. But now there's a way to specify you don't
        want one (which will be used in the future)!

        Fixes <http://webkit.org/b/57388> Need a way to specify that a ShareableBitmap has no alpha
        channel

        Reviewed by Anders Carlsson.

        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::Handle::Handle): Moved here from the header file, and added
        initialization of m_flags.

        (WebKit::ShareableBitmap::Handle::encode):
        (WebKit::ShareableBitmap::Handle::decode):
        Encode/decode m_flags.

        (WebKit::ShareableBitmap::create):
        (WebKit::ShareableBitmap::createShareable):
        Pass along the new Flags argument.

        (WebKit::ShareableBitmap::createHandle): Store our Flags on the Handle.
        (WebKit::ShareableBitmap::ShareableBitmap): Store the Flags in m_flags.

        * Shared/ShareableBitmap.h: Added Flag, Flags, and m_flags, and added a Flags argument to
        some create functions.

        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::encodeImage):
        * Shared/WebImage.cpp:
        (WebKit::WebImage::create):
        Specify that we want a bitmap that supports alpha to maintain current behavior.

        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::bitmapInfo): New helper function. Includes an alpha channel only if specified in
        the flags.

        (WebKit::ShareableBitmap::createGraphicsContext):
        (WebKit::ShareableBitmap::makeCGImage):
        Use the new helper function.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::snapshot):
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::geometryDidChange):
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::convertImageToBitmap):
        * WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp:
        (WebKit::WebPopupMenu::setUpPlatformData):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::display):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindIndicator):
        Specify that we want a bitmap that supports alpha to maintain current behavior.

2011-03-29  Adam Roben  <aroben@apple.com>

        Add ShareableBitmap::Handle

        This object is used for encoding/decoding a ShareableBitmap via CoreIPC. It currently just
        encapsulates a SharedMemory::Handle (which is what we were using previously) and the image's
        size (which means callers no longer need to deal with the size explicitly), but in the
        future could be used to store more information about the bitmap.

        This should cause no behavior changes.

        Fixes <http://webkit.org/b/57397> ShareableBitmap needs its own Handle type

        Reviewed by Anders Carlsson.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::geometryDidChange): No longer need to pass a size to create,
        since the Handle records the size.
        (WebKit::PluginControllerProxy::snapshot): No longer need the bufferSize argument, since the
        Handle records the size.

        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginControllerProxy.messages.in:
        Updated Handle types and removed unnecessary size argument to Snapshot.

        * Shared/PlatformPopupMenuData.cpp:
        (WebKit::PlatformPopupMenuData::encode):
        (WebKit::PlatformPopupMenuData::decode):
        * Shared/PlatformPopupMenuData.h:
        Changed to use ShareableBitmap::Handle and removed m_backingStoreSize, which is now stored
        in the Handles.

        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::Handle::encode):
        (WebKit::ShareableBitmap::Handle::decode):
        Simple encode/decode functions.

        (WebKit::ShareableBitmap::create): Get the size from the Handle instead of as a separate
        argument.
        (WebKit::ShareableBitmap::createHandle): Store our size in the Handle.

        * Shared/ShareableBitmap.h: Added ShareableBitmap::Handle and made some functions use it.

        * Shared/UpdateInfo.h: Changed to use ShareableBitmap::Handle.

        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        (WebKit::UserMessageDecoder::baseDecode):
        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::encodeImage):
        (CoreIPC::decodeImage):
        Use the size stored in the Handle instead of encoding/decoding one separately.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setDragImage):
        Removed the unnecessary imageSize argument. We can get it from the image itself.

        * UIProcess/BackingStore.cpp:
        (WebKit::BackingStore::incorporateUpdate):
        * UIProcess/FindIndicator.cpp:
        (WebKit::FindIndicator::create):
        No longer need to pass a size when creating a ShareableBitmap from a Handle.

        * UIProcess/FindIndicator.h: Changed to use ShareableBitmap::Handle.

        * UIProcess/PageClient.h: Removed unnecessary imageSize argument from setDragImage.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setFindIndicator):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setDragImage):
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::snapshot):
        (WebKit::PluginProxy::geometryDidChange):
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::startDrag):
        Changed to use ShareableBitmap::Handle and removed now-unnecessary size arguments (since we
        can get the size from the Handle).

        * WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp:
        (WebKit::WebPopupMenu::setUpPlatformData): Don't need to store the backing store size in the
        data anymore; the Handles will make sure it reaches the other process.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindIndicator):
        (WebKit::FindController::hideFindIndicator):
        Changed to use ShareableBitmap::Handle.

2011-03-30  Alejandro G. Castro  <alex@igalia.com>

        Fix GTK build after r81980.

        * GNUmakefile.am:

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

        Reviewed by Maciej Stachowiak.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=57408 
        webkit-min-device-pixel-ratio media query doesn't work post-SnowLeopard 
        -and corresponding-
        <rdar://problem/8665411>

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::userSpaceScaleFactor):
        * UIProcess/API/qt/qwkpage_p.h:
        (QWKPagePrivate::userSpaceScaleFactor):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/gtk/WebView.h:
        (WebKit::WebView::userSpaceScaleFactor):
        * UIProcess/win/WebView.h:
        (WebKit::WebView::userSpaceScaleFactor):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::scaleFactor):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::userSpaceScaleFactor):

2011-03-29  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed WinCairo build fix.

        Bring DownloadCurl implementation stubs in line with current
        CFNetwork API.

        * WebProcess/Downloads/curl/DownloadCurl.cpp:
        (WebKit::Download::receivedCredential):
        (WebKit::Download::receivedRequestToContinueWithoutCredential):
        (WebKit::Download::receivedCancellation):

2011-03-29  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: WK2: When creating the window remote token, use what's returned from accessibility
        https://bugs.webkit.org/show_bug.cgi?id=57398

        This will allow a specific WKView to override what's used for the window attribute of the
        HTML elements.

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

2011-03-29  Jeff Miller  <jeffm@apple.com>

        Reviewed by Sam Weinig.

        Make Windows-only InjectedBundle functions platform-specific
        https://bugs.webkit.org/show_bug.cgi?id=57385
        
        Added files for Windows-specific WKBundle functions.
        Removed stub wrappers for InjectedBundle::setHostAllowsAnyHTTPSCertificate() and InjectedBundle::setClientCertificate() from non-Windows platforms.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp: Moved WKBundleSetHostAllowsAnyHTTPSCertificate() and WKBundleSetClientCertificate() to WKBundlePrivateWin.cpp.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h: Moved WKBundleSetHostAllowsAnyHTTPSCertificate() and WKBundleSetClientCertificate() to WKBundlePrivateWin.h.
        * WebProcess/InjectedBundle/API/c/win: Added.
        * WebProcess/InjectedBundle/API/c/win/WKBundlePrivateWin.cpp: Added.
        (WKBundleSetHostAllowsAnyHTTPSCertificate): Moved from WKBundle.cpp.
        (WKBundleSetClientCertificate): Moved from WKBundle.cpp.
        * WebProcess/InjectedBundle/API/c/win/WKBundlePrivateWin.h: Added.
        * WebProcess/InjectedBundle/InjectedBundle.h: setHostAllowsAnyHTTPSCertificate() and setClientCertificate() are Windows-only.
        * WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp: Removed setHostAllowsAnyHTTPSCertificate() and setClientCertificate().
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp: Removed setHostAllowsAnyHTTPSCertificate() and setClientCertificate().
        * WebProcess/InjectedBundle/qt/InjectedBundleQt.cpp: Removed setHostAllowsAnyHTTPSCertificate() and setClientCertificate().
        * win/WebKit2.vcproj: Added WKBundlePrivateWin.cpp and WKBundlePrivateWin.h.
        * win/WebKit2Generated.make: Copy WKBundlePrivateWin.h.

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

        Fix Windows build.

        * WebProcess/Downloads/cfnet/DownloadCFNet.cpp:
        (WebKit::Download::receivedCredential):
        (WebKit::Download::receivedRequestToContinueWithoutCredential):
        (WebKit::Download::receivedCancellation):

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

        Reviewed by Sam Weinig.

        Downloads: Authentication support
        https://bugs.webkit.org/show_bug.cgi?id=57403
        <rdar://problem/8691166>

        * UIProcess/API/C/WKContext.h:
        Add didReceiveAuthenticationChallenge callback.

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didReceiveAuthenticationChallenge):
        Call the download client.

        * UIProcess/Downloads/DownloadProxy.messages.in:
        Add DidReceiveAuthenticationChallenge message.

        * UIProcess/WebDownloadClient.cpp:
        (WebKit::WebDownloadClient::didReceiveAuthenticationChallenge):
        Call the client callback function.

        * UIProcess/WebDownloadClient.h:
        * WebProcess/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        Send the DidReceiveAuthenticationChallenge message to the download proxy.

        (WebKit::AuthenticationManager::useCredentialForChallenge):
        (WebKit::AuthenticationManager::continueWithoutCredentialForChallenge):
        (WebKit::AuthenticationManager::cancelChallenge):
        If the authentication client is null, call the static download member functions.

        * WebProcess/Authentication/AuthenticationManager.h:
        * WebProcess/Downloads/Download.cpp:
        (WebKit::Download::didReceiveAuthenticationChallenge):
        Call the authentication manager.

        * WebProcess/Downloads/Download.h:
        * WebProcess/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::receivedCredential):
        (WebKit::Download::receivedRequestToContinueWithoutCredential):
        (WebKit::Download::receivedCancellation):
        Call the right sender methods.

        (-[WKDownloadAsDelegate download:didReceiveAuthenticationChallenge:]):
        (-[WKDownloadAsDelegate downloadShouldUseCredentialStorage:]):
        Call the right Download member functions.

        * WebProcess/Downloads/qt/DownloadQt.cpp:
        (WebKit::Download::receivedCredential):
        (WebKit::Download::receivedRequestToContinueWithoutCredential):
        (WebKit::Download::receivedCancellation):
        * WebProcess/Downloads/soup/DownloadSoup.cpp:
        (WebKit::Download::receivedCredential):
        (WebKit::Download::receivedRequestToContinueWithoutCredential):
        (WebKit::Download::receivedCancellation):
        Add stubs.

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

        Reviewed by Sam Weinig.

        AuthenticationChallengeProxy objects should be associated with processes, not pages
        https://bugs.webkit.org/show_bug.cgi?id=57401

        * UIProcess/Authentication/AuthenticationChallengeProxy.cpp:
        (WebKit::AuthenticationChallengeProxy::AuthenticationChallengeProxy):
        (WebKit::AuthenticationChallengeProxy::~AuthenticationChallengeProxy):
        (WebKit::AuthenticationChallengeProxy::useCredential):
        (WebKit::AuthenticationChallengeProxy::cancel):
        * UIProcess/Authentication/AuthenticationChallengeProxy.h:
        (WebKit::AuthenticationChallengeProxy::create):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveAuthenticationChallenge):

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

        Reviewed by Anders Carlsson.

        Use LocalizedStrings.h as a bottleneck for localized strings instead of
        using UI_STRING.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView validateUserInterfaceItem:]):
        Call existing localization functions instead of using UI_STRING.

        (-[WKView _getTextInputState:selectionEnd:underlines:]):
        Remove unnecessary WebCore:: prefix.

2011-03-29  Chang Shu  <cshu@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        WebKitTestRunner needs layoutTestController.setAllowUniversalAccessFromFileURLs
        https://bugs.webkit.org/show_bug.cgi?id=42692

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::decode):
        (WebKit::WebPreferencesStore::overrideAllowUniversalAccessFromFileURLsForTestRunner):
        * Shared/WebPreferencesStore.h:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleOverrideAllowUniversalAccessFromFileURLsForTestRunner):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideAllowUniversalAccessFromFileURLsForTestRunner):
        * WebProcess/InjectedBundle/InjectedBundle.h:

2011-03-29  Timothy Hatcher  <timothy@apple.com>

        Update the order of the context menu to better match AppKit on Mac.

        <rdar://problem/9054893>

        Reviewed by John Sullivan.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::contextMenuItemTagLookUpInDictionary): Added argument for selected string.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2011-03-29  Jeff Miller  <jeffm@apple.com>

        Fix formatting of WebKit2.vcproj after r82283.

        * win/WebKit2.vcproj:

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

        [GTK] Build failed with ‘GDK_KEY_KP_Space’ was not declared in this scope
        https://bugs.webkit.org/show_bug.cgi?id=55314

        Build fix for older versions of GTK+. Use the deprecated names for GDK key
        defines and include GtkVersioning.h to allow building on newer versions
        of GTK+.

        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::isGdkKeyCodeFromKeyPad): Update key defines.

2011-03-29  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Use per-configuration vsprops in WebKit to avoid WebKitVSPropsRedirectionDir removal by MSVC IDE
        https://bugs.webkit.org/show_bug.cgi?id=57383

        Visual Studio's IDE was removing instances of $(WebKitVSPropsRedirectionDir) from
        InheritedPropertySheet rules in our vcproj files when the vcproj was edited from within
        the IDE. To avoid this, add a separate vsprops file for each project configuration that
        contains the required inherited property sheets.

        * win/WebKit2.vcproj:
        * win/WebKit2Debug.vsprops: Added.
        * win/WebKit2DebugAll.vsprops: Added.
        * win/WebKit2DebugCairoCFLite.vsprops: Added.
        * win/WebKit2Release.vsprops: Added.
        * win/WebKit2ReleaseCairoCFLite.vsprops: Added.
        * win/WebKit2ReleaseLTCG.vsprops: Added.
        * win/WebKit2WebProcess.vcproj:
        * win/WebKit2WebProcessDebug.vsprops: Added.
        * win/WebKit2WebProcessDebugAll.vsprops: Added.
        * win/WebKit2WebProcessDebugCairoCFLite.vsprops: Added.
        * win/WebKit2WebProcessRelease.vsprops: Added.
        * win/WebKit2WebProcessReleaseCairoCFLite.vsprops: Added.
        * win/WebKit2WebProcessReleaseLTCG.vsprops: Added.

2011-03-29  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Anders Carlsson.

        WebKit2: The WebProcess should be relaunched if necessary when WebKit2 is asked for
        information about Cookies, Databases, Local Storage, etc.
        https://bugs.webkit.org/show_bug.cgi?id=57374

        Instead of bailing when the WebProcess is not valid, call relaunchProcessIfNecessary().

        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
        (WebKit::WebPluginSiteDataManager::getSitesWithData):
        (WebKit::WebPluginSiteDataManager::clearSiteData):
        * UIProcess/WebApplicationCacheManagerProxy.cpp:
        (WebKit::WebApplicationCacheManagerProxy::getApplicationCacheOrigins):
        (WebKit::WebApplicationCacheManagerProxy::deleteEntriesForOrigin):
        (WebKit::WebApplicationCacheManagerProxy::deleteAllEntries):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::getHostnamesWithCookies):
        (WebKit::WebCookieManagerProxy::deleteCookiesForHostname):
        (WebKit::WebCookieManagerProxy::deleteAllCookies):
        (WebKit::WebCookieManagerProxy::startObservingCookieChanges):
        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::getDatabasesByOrigin):
        (WebKit::WebDatabaseManagerProxy::getDatabaseOrigins):
        (WebKit::WebDatabaseManagerProxy::deleteDatabaseWithNameForOrigin):
        (WebKit::WebDatabaseManagerProxy::deleteDatabasesForOrigin):
        (WebKit::WebDatabaseManagerProxy::deleteAllDatabases):
        (WebKit::WebDatabaseManagerProxy::setQuotaForOrigin):
        * UIProcess/WebKeyValueStorageManagerProxy.cpp:
        (WebKit::WebKeyValueStorageManagerProxy::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManagerProxy::deleteEntriesForOrigin):
        (WebKit::WebKeyValueStorageManagerProxy::deleteAllEntries):
        * UIProcess/WebMediaCacheManagerProxy.cpp:
        (WebKit::WebMediaCacheManagerProxy::getHostnamesWithMediaCache):
        (WebKit::WebMediaCacheManagerProxy::clearCacheForHostname):
        (WebKit::WebMediaCacheManagerProxy::clearCacheForAllHostnames):
        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::getCacheOrigins):
        (WebKit::WebResourceCacheManagerProxy::clearCacheForOrigin):
        (WebKit::WebResourceCacheManagerProxy::clearCacheForAllOrigins):

2011-03-29  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Support setting the client certificate on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57368
        
        Allow setting the client certificate for a host via the injected bundle.
        This requires the ability for Webkit2 Windows clients to create a WKCertificateInfo from a PCCERT_CONTEXT so they can send it to the web process.

        * Shared/API/c/win/WKCertificateInfoWin.cpp:
        (WKCertificateInfoCreateWithCertificate): Added.
        * Shared/API/c/win/WKCertificateInfoWin.h: Added WKCertificateInfoCreateWithCertificate().
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetClientCertificate): Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h: Added WKBundleSetClientCertificate().
        * WebProcess/InjectedBundle/InjectedBundle.h: Added setClientCertificate().
        * WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        (WebKit::InjectedBundle::setClientCertificate): Added, should never be called.
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp:
        (WebKit::InjectedBundle::setClientCertificate): Added, should never be called.
        * WebProcess/InjectedBundle/qt/InjectedBundleQt.cpp:
        (WebKit::InjectedBundle::setClientCertificate): Added, should never be called.
        * WebProcess/InjectedBundle/win/InjectedBundleWin.cpp:
        (WebKit::InjectedBundle::setClientCertificate): Added.

2011-03-29  Timothy Hatcher  <timothy@apple.com>

        Make WebKit2 work with update-webkit-localizable-strings.

        https://webkit.org/b/57354

        Reviewed by Sam Weinig.

        * PluginProcess/mac/PluginProcessMac.mm: Remove UI_STRING macro. Use WebLocalizableStrings.h.
        * Shared/WebLocalizableStrings.h: Added.
        * UIProcess/API/mac/WKView.mm: Remove UI_STRING macro. Use WebLocalizableStrings.h.
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformInspectedURLChanged): Use UI_STRING. Remove FIXME.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp: Remove UI_STRING macros.
        Use WebLocalizableStrings.h.
        * WebProcess/WebCoreSupport/mac/WebErrorsMac.mm:
        (registerErrors): Remove UI_STRING macro. Use WebLocalizableStrings.h.
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeWebProcess): Use UI_STRING. Remove FIXME.

        * GNUmakefile.am: Added Shared/WebLocalizableStrings.h.
        * WebKit2.pro: Ditto.
        * WebKit2.xcodeproj/project.pbxproj: Ditto.
        * win/WebKit2.vcproj: Ditto.

2011-03-29  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        CoreIPC::decodeResourceError() leaks a CFDataRef
        https://bugs.webkit.org/show_bug.cgi?id=57366

        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::decodeResourceError): Don't leak the result of WebCore::copyCertificateToData(), since the ResourceError will retain it.

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

        Reviewed by Sam Weinig.

        Allow the AppleConnect plug-in to use the QuickDraw drawing model
        https://bugs.webkit.org/show_bug.cgi?id=57365
        <rdar://problem/8712320>

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::determineQuirks):
        * Shared/Plugins/PluginQuirks.h:
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformPostInitialize):

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

        Reviewed by Adam Roben.

        WebKit2 bundle page needs to offer generated file hooks
        https://bugs.webkit.org/show_bug.cgi?id=57279

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h: Added shouldGenerateFileForUpload and
        generateFileForUpload callback pointers.

        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::shouldGenerateFileForUpload): Added.
        (WebKit::InjectedBundlePageUIClient::generateFileForUpload): Added.
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h: Added functions above.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::shouldReplaceWithGeneratedFileForUpload): Implemented by
        calling the functions above.
        (WebKit::WebChromeClient::generateReplacementFile): Ditto.

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

        Reviewed by Darin Adler.

        Assertion failure in plug-in process with clang-built 32/64-bit WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=57359

        Don't use __alignof when encoding and decoding scalar types.
        
        Darwin 32-bit, double and unsigned long long are 4-byte aligned but on 64-bit they're
        8-byte aligned which causes problems when doing IPC between 32-bit and 64-bit processes.
        GCC is buggy and returns 8, but clang is correct and returns 4. Use sizeof instead which we know
        is equal to or greater than the alignment.

        * Platform/CoreIPC/ArgumentDecoder.cpp:
        (CoreIPC::ArgumentDecoder::decodeBool):
        (CoreIPC::ArgumentDecoder::decodeUInt32):
        (CoreIPC::ArgumentDecoder::decodeUInt64):
        (CoreIPC::ArgumentDecoder::decodeInt32):
        (CoreIPC::ArgumentDecoder::decodeInt64):
        (CoreIPC::ArgumentDecoder::decodeFloat):
        (CoreIPC::ArgumentDecoder::decodeDouble):
        * Platform/CoreIPC/ArgumentEncoder.cpp:
        (CoreIPC::ArgumentEncoder::encodeBool):
        (CoreIPC::ArgumentEncoder::encodeUInt32):
        (CoreIPC::ArgumentEncoder::encodeUInt64):
        (CoreIPC::ArgumentEncoder::encodeInt32):
        (CoreIPC::ArgumentEncoder::encodeInt64):
        (CoreIPC::ArgumentEncoder::encodeFloat):
        (CoreIPC::ArgumentEncoder::encodeDouble):

2011-03-29  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix after r81928.

        * win/WebKit2.vcproj: Don't build CG-specific icon routines
        for WinCairo port.

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

        Reviewed by Anders Carlsson.

        Reproducible crash running under libgmalloc, in -[WKView(Internal) removeTrackingRect:] --&gt; objc_assign_ivar_non_gc
        <rdar://problem/9193352>
        https://bugs.webkit.org/show_bug.cgi?id=57358

        -[WKView removeTrackingRect] can be called from below -[WKView dealloc] after we have
        destroyed _data. So, nil out _data after releasing it and nil check it appropriately.
        
        * UIProcess/API/mac/WKView.mm:
        (-[WKView dealloc]):
        Nil out _data after releasing it.

        (-[WKView removeTrackingRect:]):
        Add early return for nil _data.

2011-03-29  Jeff Miller  <jeffm@apple.com>

        Reviewed by Jon Honeycutt.

        Add WebCore::copyCertificateToData() on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57296
        
        Remove duplicate code that implemented this functionality in WebCoreArgumentCodersWin.cpp and use WebCore::copyCertificateToData() instead. 

        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::decodeResourceError): Use WebCore::copyCertificateToData().

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

        Unreviewed build fix (64 bit gcc).

        GCC does not accept uint64_t formatted as %lli.

        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::getLoadDecisionForIconURL): Add explicit cast to long long.

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

        Reviewed by Dan Bernstein.

        WKPageGetSourceForFrame and WKPageGetContentsAsString should throw an error in case of a race with page loading
        https://bugs.webkit.org/show_bug.cgi?id=57305
        <rdar://problem/8738060>, <rdar://problem/8780168>

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close): Clear m_loadDependentStringCallbackIDs
        (WebKit::WebPageProxy::getSourceForFrame): track the callback as load dependent
        (WebKit::WebPageProxy::getContentsAsString): ditto
        (WebKit::WebPageProxy::clearLoadDependentCallbacks): Invalidate all load dependent callbacks
        (WebKit::WebPageProxy::didCommitLoadForFrame): Call clearLoadDependentCallbacks
        (WebKit::WebPageProxy::didFailLoadForFrame): ditto
        (WebKit::WebPageProxy::stringCallback): Remove callback from load dependent set if appropriate
        (WebKit::WebPageProxy::processDidCrash): Clear m_loadDependentStringCallbackIDs
        * UIProcess/WebPageProxy.h: Add m_loadDependentStringCallbackIDs hash set.

2011-03-28  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Use String instead of CString as return value of openTemporaryFile
        https://bugs.webkit.org/show_bug.cgi?id=55332

        * Shared/WebMemorySampler.cpp:
        (WebKit::WebMemorySampler::initializeTempLogFile):
        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::stop):
        * WebProcess/Plugins/Netscape/NetscapePluginStream.h:

2011-03-28  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Jon Honeycutt.

        WebKit2: Downloads started with DownloadCFNet::start never start
        https://bugs.webkit.org/show_bug.cgi?id=57268

        * WebProcess/Downloads/cfnet/DownloadCFNet.cpp:
        (WebKit::Download::start): Call CFURLDownloadStart on the download we create.

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

        Fix Windows build.

        * Shared/ShareableBitmap.h:

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

        Reviewed by Sam Weinig.

        Beep when pressing a menu key equivalent when a plug-in has focus
        https://bugs.webkit.org/show_bug.cgi?id=57264
        <rdar://problem/8935597>

        We don't want the WKTextInputWindowController inputContext to be involved in interpretKeyEvents.

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

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

        Reviewed by Sam Weinig.

        CGImageRefs must hold a strong reference to underlying data
        https://bugs.webkit.org/show_bug.cgi?id=57263
        <rdar://problem/9146179>

        Make paintBitmapContext use CGBitmapContextCreateImage, which creates a copy-on-write copy
        of the bitmap data. Also, add ShareableBitmap::makeCGImageCopy which does the same thing, and
        ShareableBitmap::makeCGImage in the cases where we know that the ShareableBitmap data will never change.

        * Platform/cg/CGUtilities.cpp:
        (WebKit::paintImage):
        Factor image painting code out into a separate function.

        (WebKit::paintBitmapContext):
        Call paintImage.

        * Shared/API/c/cg/WKImageCG.cpp:
        (WKImagemakeCGImage):
        Use ShareableBitmap::makeCGImageCopy.

        * Shared/ShareableBitmap.h:
        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::createGraphicsContext):
        (WebKit::ShareableBitmap::paint):
        (WebKit::ShareableBitmap::makeCGImageCopy):
        (WebKit::ShareableBitmap::makeCGImage):
        (WebKit::ShareableBitmap::releaseBitmapContextData):
        (WebKit::ShareableBitmap::releaseDataProviderData):
        Add makeCGImage and makeCGImageCopy.

        * Shared/cg/WebCoreArgumentCodersCG.cpp:
        (CoreIPC::createImage):
        Use ShareableBitmap::makeCGImage.
        
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setDragImage):
        Use ShareableBitmap::makeCGImage and plug a CGImageRef leak.

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

        Build fix.

        * UIProcess/API/mac/WKView.mm: (-[WKView keyDown:]): It's not "event" in this function, it's
        "theEvent".

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=57260
        Clean up text input code a little

        * UIProcess/API/mac/WKView.mm:
        (-[WKView doCommandBySelector:]): This NSTextInput protocol method lacked a LOG() call.
        (-[WKView keyDown:]): Added (possibly useless) event protection to match performKeyEquivalent:
        and also WebKit1.

        * WebProcess/WebPage/mac/WebPageMac.mm: Removed an obsolete comment.

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

        Reviewed by Adam Roben.

        ResourceError::certificate() should return a PCCERT_CONTEXT
        https://bugs.webkit.org/show_bug.cgi?id=57262

        * Shared/win/PlatformCertificateInfo.cpp:
        (WebKit::PlatformCertificateInfo::PlatformCertificateInfo): Don't assert if no PCCERT_CONTEXT is specified.
        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::encodeResourceError): Removed unneeded code now that ResourceError::certificate() returns a PCCERT_CONTEXT.

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

        Rubber-stamped by Adam Roben.

        Remove unused CFErrorRef.

        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::encodeResourceError): Remove unused CFErrorRef.

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

        Reviewed by Adam Roben.

        Include certificate when sending a WebCore::ResourceError to UI process on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57195
        
        Add support for sending the certificate with the WebCore::ResourceError.

        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::encodeResourceError): Encode certificate data.
        (CoreIPC::deallocCertContext): Added.
        (CoreIPC::createCertContextDeallocator): Added.
        (CoreIPC::copyCert): Added.
        (CoreIPC::decodeResourceError): Decode certificate data.

2011-03-27  Andy Estes  <aestes@apple.com>

        Reviewed by Maciej Stachowiak.

        Correctly get a plug-in's MIME type when it uses WebPluginMIMETypesFilename
        https://bugs.webkit.org/show_bug.cgi?id=57205
        
        If the plug-in's Info.plist uses WebPluginMIMETypesFilename to specify
        plug-in MIME types, WebKit has to check for a property list file in
        ~/Library/Preferences for the MIME type dictionary.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::getMIMETypesFromPluginBundle): If the bundle's Info dictionary
        has the key WebPluginMIMETypesFilename, open the property list
        specified by that key's value and return the MIME type dictionary from
        there. Otherwise, return the MIME type dictionary specified by the key
        WebPluginMIMETypes.
        (WebKit::getPluginInfoFromPropertyLists): Call
        getMIMETypesFromPluginBundle().

2011-03-27  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        Full Screen: disable keyboard access by default
        https://bugs.webkit.org/show_bug.cgi?id=56684

        Take into account whether keyboard access was requested when deciding whether full
        screen mode is supported.

        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::supportsFullScreen):
        * UIProcess/WebFullScreenManagerProxy.h:
        * UIProcess/WebFullScreenManagerProxy.messages.in:
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::supportsFullScreen):
        * WebProcess/FullScreen/WebFullScreenManager.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::supportsFullScreenForElement):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

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

        Reviewed by Sam Weinig.

        Dock doesn't come back after leaving fullscreen on Hulu
        https://bugs.webkit.org/show_bug.cgi?id=57189
        <rdar://problem/9192413>

        Port some code over from the old WebKit1 plug-in host.

        * PluginProcess/mac/PluginProcessShim.mm:
        (WebKit::shimShowMenuBar):
        (WebKit::shimHideMenuBar):
        (WebKit::shimIsMenuBarVisible):

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

        Reviewed by Sam Weinig.

        Keep a strong reference to the connection to avoid crashes.

        * Platform/CoreIPC/Connection.cpp:

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

        Reviewed by Sam Weinig.

        WKErrorCopyCFError() doesn't actually return a copy of the CFErrorRef
        https://bugs.webkit.org/show_bug.cgi?id=57172

        * Shared/API/c/cf/WKErrorCF.cpp:
        (WKErrorCopyCFError): Use RetainPtr<> and leakRef() to return a real copy.

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

        Revert inadvertently committed changes.

        * WebProcess/com.apple.WebProcess.sb:

2011-03-26  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Enable the Full Screen API by default in WebKit/mac and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=56956

        * Shared/WebPreferencesStore.h: Default the fullScreenEnabled preference to true.

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

        Reviewed by Steve Falkenburg.

        Add PlatformCertificateInfo::PlatformCertificateInfo(PCCERT_CONTEXT) constructor on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57152
        
        We're going to need to create a PlatformCertificateInfo with a single certificate on Windows to support client certificates.
        Also, stop relying on the fact that the Win32 API CertDuplicateCertificateContext() currently returns the same PCCERT_CONTEXT that you pass to it, since that may change in the future.

        * Shared/win/PlatformCertificateInfo.cpp:
        (WebKit::PlatformCertificateInfo::PlatformCertificateInfo): Added PlatformCertificateInfo(PCCERT_CONTEXT) construtor. Use return value from CertDuplicateCertificateContext().
        (WebKit::PlatformCertificateInfo::operator=): Use return value from CertDuplicateCertificateContext().
        * Shared/win/PlatformCertificateInfo.h: Added PlatformCertificateInfo(PCCERT_CONTEXT) construtor.

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

        Reviewed by Sam Weinig.

        Graphic corruption appeared with Silverlight contents while resizing window
        https://bugs.webkit.org/show_bug.cgi?id=57167
        <rdar://problem/9094052>

        Pass DispatchMessageEvenWhenWaitingForSyncReply when sending GeometryDidChange messages since that will guarantee
        that those messages will be handled before PaintEntirePlugin messages which prevents the PaintEntirePlugin handler from
        painting into the wrong backing store.

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

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

        Reviewed by Anders Carlsson.

        Web process considered unresponsive (SPOD shown) when displaying a JavaScript alert() as a result of a click
        <rdar://problem/9067557>
        https://bugs.webkit.org/show_bug.cgi?id=57166

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runJavaScriptAlert):
        (WebKit::WebPageProxy::runJavaScriptConfirm):
        (WebKit::WebPageProxy::runJavaScriptPrompt):
        Invalidate the responsiveness timer before calling out to the client.

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

        Reviewed by Sam Weinig.

        ASSERTION FAILED: m_operationInProgress == NoOperation loading nytimes.com
        https://bugs.webkit.org/show_bug.cgi?id=57165
        <rdar://problem/9024311>

        The assertion fired because during GC, the web process sends a synchronous NPObjectMessageReceiver::Deallocate
        message to the plug-in process. Since this is a synchronous message, the web process needs to process incoming synchronous
        messages. While waiting, we get an incoming PluginProxy::Evaluate message from the plug-in. This causes JavaScript to run
        during GC which is very bad.

        The fix for this is to add a flag on the connection that will cause synchronous messages sent by the connection (in this case the
        plug-in process) to not be processed while the other side (the web process) is waiting for a synchronous reply _unless_ the connection
        is actually processing a synchronous message. (The last part is to avoid deadlocks).

        Since the call to NPN_Evaluate by the plug-in (that ends up sending the PluginProxy::Evaluate message) comes from a run loop timer firing,
        it's OK to wait for it to be processed by the web process when it returns to the run loop.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::Connection):
        Initialize m_onlySendMessagesAsDispatchWhenWaitingForSyncReplyWhenProcessingSuchAMessage and m_inDispatchMessageMarkedDispatchWhenWaitingForSyncReplyCount.

        (CoreIPC::Connection::setOnlySendMessagesAsDispatchWhenWaitingForSyncReplyWhenProcessingSuchAMessage):
        Set m_onlySendMessagesAsDispatchWhenWaitingForSyncReplyWhenProcessingSuchAMessage.

        (CoreIPC::Connection::sendMessage):
        Don't add the MessageID::DispatchMessageWhenWaitingForSyncReply flag when the right flags has been set on the connection, and it's not processing a synchronous message.

        (CoreIPC::Connection::dispatchMessage):
        Increment and decrement m_inDispatchMessageMarkedDispatchWhenWaitingForSyncReplyCount accordingly.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::WebProcessConnection):
        Call setOnlySendMessagesAsDispatchWhenWaitingForSyncReplyWhenProcessingSuchAMessage on the connection.

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

        Rollout r82042 (If a user doesn't have a Database/LocalStorage directory, it can't be created (sandbox violations))

        -[NSString stringByResolvingSymlinksInPath] does not do what we needed for paths within /private.
        This caused all SSL sites to stop working.

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::appendSandboxParameterPath):
        (WebKit::initializeSandbox):

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

        Reviewed by Anders Carlsson.

        If a user doesn't have a Database/LocalStorage directory, it can't be created (sandbox violations)
        <rdar://problem/9127411>
        https://bugs.webkit.org/show_bug.cgi?id=57164

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::appendSandboxParameterPath):
        (WebKit::initializeSandbox):
        Use -[NSString stringByResolvingSymlinksInPath] instead of realpath to ensure we can resolve
        symlinks even if the file/directory doesn't exist yet.

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

        Reviewed by Sam Weinig.

        Factor processing of incoming sync replies out into processIncomingSyncReply
        https://bugs.webkit.org/show_bug.cgi?id=57161

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendSyncMessage):
        Pass DispatchMessageEvenWhenWaitingForSyncReply to sendMessage.

        (CoreIPC::Connection::processIncomingSyncReply):
        Move code from processIncomingMessage to here.

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

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

        Reviewed by Anders Carlsson.

        WebKit2: Assert in CoreIPC::typeFromCFTypeRef() when loading a site with an invalid certificate
        <rdar://problem/9188041>
        https://bugs.webkit.org/show_bug.cgi?id=57159

        * Shared/cf/ArgumentCodersCF.cpp:
        (CoreIPC::typeFromCFTypeRef):
        (CoreIPC::encode):
        (CoreIPC::decode):
        * Shared/cf/ArgumentCodersCF.h:
        Add encoding/decoding for SecCertificateRef type.

        * Shared/mac/PlatformCertificateInfo.mm:
        (WebKit::PlatformCertificateInfo::encode):
        (WebKit::PlatformCertificateInfo::decode):
        Use ArgumentCodersCF now that it knows how to encode/decode SecCertificateRefs.

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

        Reviewed by Sam Weinig.

        Handle synchronous replies coming in out of order
        https://bugs.webkit.org/show_bug.cgi?id=57158

        When processing an incoming reply, don't assume that it belongs to the last sent synchronous request.
        Instead, iterate over the m_pendingSyncReplies vector backwards looking for the corresponding request.

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

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

        Reviewed by Sam Weinig.

        Fix a possible deadlock when two synchronous messages are sent at the same time
        https://bugs.webkit.org/show_bug.cgi?id=57155

        Simplify code and fix a possible (although highly improbable) dead lock.

        * Platform/CoreIPC/Connection.cpp:
        Make SyncMessageState atomically ref counted since it can be ref()'ed from the connection queue.
        Get rid of m_waitForSyncReplyCount and add m_didScheduleDispatchMessagesWork.

        (CoreIPC::Connection::SyncMessageState::SyncMessageState):
        Initialize m_didScheduleDispatchMessagesWork to false.

        (CoreIPC::Connection::SyncMessageState::processIncomingMessage):
        if m_didScheduleDispatchMessagesWork is false, schedule a call to dispatchMessageAndResetDidScheduleDispatchMessagesWork
        on the client run loop.

        (CoreIPC::Connection::SyncMessageState::dispatchMessageAndResetDidScheduleDispatchMessagesWork):
        Dispatch messages and set m_didScheduleDispatchMessagesWork back to false.

        (CoreIPC::Connection::sendSyncMessage):
        Remove calls to beginWaitForSyncReply and endWaitForSyncReply.

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

        Reviewed by Adele Peterson.

        WKPageLoadAlternateHTMLString doesn't re-spawn a dead WebProcess, but should
        <rdar://problem/9191493>
        https://bugs.webkit.org/show_bug.cgi?id=57134

        Make all load functions respawn a dead WebProcess for consistency.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadHTMLString):
        Respawn a dead WebProcess.

        (WebKit::WebPageProxy::loadAlternateHTMLString):
        Respawn a dead WebProcess.

        (WebKit::WebPageProxy::loadPlainTextString):
        Respawn a dead WebProcess.

        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidStartProvisionalLoad):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadAlternateHTMLString):
        Since we may no longer always have a main frame when calling WKPageLoadAlternateHTMLString,
        set the unreachable URL, if there is one, on provisional load.

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

        Reviewed by Sam Weinig.

        PluginView's call to invalidateContentsAndWindow() in invalidateRect() is wrong for plug-ins which paint into compositing layers
        https://bugs.webkit.org/show_bug.cgi?id=57133
        <rdar://problem/9029442>

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformInvalidate):
        Return true under the Core Animation drawing model, since that prevents the plug-in from calling PluginController::invalidate.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::invalidateRect):
        Don't call invalidateContentsAndWindow() if the plug-in has a Core Animation layer.

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

        Reviewed by Sam Weinig.

        <rdar://problem/8648311> and https://bugs.webkit.org/show_bug.cgi?id=56425
        WebKit2 IconDatabase and API

        This gets a basic, usable API in place.
        Enhancements can come in other bugs as they're needed.

        * UIProcess/API/C/WKIconDatabase.cpp:
        (WKIconDatabaseRetainIconForURL):
        (WKIconDatabaseReleaseIconForURL):
        (WKIconDatabaseEnableDatabaseCleanup):
        * UIProcess/API/C/WKIconDatabase.h:
        
        The first actual accessor for an "icon for a URL" is for a CGImageRef:
        * UIProcess/API/C/cg: Added.
        * UIProcess/API/C/cg/WKIconDatabaseCG.cpp: Added.
        (WKIconDatabaseGetCGImageForURL):
        * UIProcess/API/C/cg/WKIconDatabaseCG.h: Added.
        
        Expose relevant methods to support the above API:
        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::WebIconDatabase): New IconDatabases will have cleanup disabled from the start,
          and require a single call to "enableDatabaseCleanup" to allow cleanup.
        (WebKit::WebIconDatabase::setDatabasePath):
        (WebKit::WebIconDatabase::enableDatabaseCleanup):
        (WebKit::WebIconDatabase::imageForPageURL):
        * UIProcess/WebIconDatabase.h:
        
        Project file stuff:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2011-03-25  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Add CoreIPC::encodeResourceError() and CoreIPC::decodeResourceError() for all platforms
        https://bugs.webkit.org/show_bug.cgi?id=57125
        
        Currently, these are only implemented on the Mac, but we're going to need them for Windows as well, so we might as well make them always platform-specific.
        In this patch, just replicate the existing common non-Mac implementation in WebCoreArgumentCoders.h to platform-specific files.

        * Shared/WebCoreArgumentCoders.h: Move non-Mac implementations of encodeResourceError() and decodeResourceError() to common files.
        * Shared/gtk/WebCoreArgumentCodersGtk.cpp:
        (CoreIPC::encodeResourceError): Added.
        (CoreIPC::decodeResourceError): Added.
        * Shared/qt/WebCoreArgumentCodersQt.cpp:
        (CoreIPC::encodeResourceError): Added.
        (CoreIPC::decodeResourceError): Added.
        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::encodeResourceError): Added.
        (CoreIPC::decodeResourceError): Added.

2011-03-25  Andy Estes  <aestes@apple.com>

        Reviewed by Adele Peterson.

        REGRESSION (r70748): latest nightly builds kills AC_QuickTime.js
        https://bugs.webkit.org/show_bug.cgi?id=49016

        Update objectContentType() implementation to handle the
        shouldPreferPlugInsForImages flag.

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

2011-03-25  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction.

        Add stubs for WK2 cookie handling with cURL.

        * WebProcess/Cookies/curl: Added.
        * WebProcess/Cookies/curl/WebCookieManagerCurl.cpp: Added.
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManager::platformGetHTTPCookieAcceptPolicy):
        * win/WebKit2.vcproj:

2011-03-25  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Brian Weinstein.

        Microsoft Windows Presentation Foundation (WPF) plug-in complains about missing xpcom.dll
        https://bugs.webkit.org/show_bug.cgi?id=57119
        <rdar://problem/9054148>

        This plug-in from Microsoft links against xpcom.dll, which is a Firefox-specific DLL
        not available in WebKit. The plug-in is fairly widespread, since it was included in
        a Windows Update push at one point.

        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        (WebKit::PluginInfoStore::shouldUsePlugin): Blacklist npwpf.dll.

2011-03-25  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Anders Carlsson.

        WebKit2: Need to be able to set and get the Cookie Storage Policy.
        https://bugs.webkit.org/show_bug.cgi?id=50780

        Part 2: Make it possible to set the initial policy on Windows.

        In WebKit1, we read the initial policy on Windows from WebPreferences at startup.
        Since that is not possible in WebKit2, make it possible to specify the initial policy
        as a creation parameter to the WebProcess.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        Encode initialHTTPCookieAcceptPolicy on Windows.
        (WebKit::WebProcessCreationParameters::decode):
        Decode initialHTTPCookieAcceptPolicy on Windows.
        * Shared/WebProcessCreationParameters.h:

        * UIProcess/API/C/win/WKContextPrivateWin.h:
        * UIProcess/API/C/win/WKContextWin.cpp:
        (WKContextSetInitialHTTPCookieAcceptPolicy):
        Call through to WebContext.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        Give the initial policy a default of "Always".
        * UIProcess/WebContext.h:
        (WebKit::WebContext::setInitialHTTPCookieAcceptPolicy):
        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):
        Set the initial policy on Windows.

        * WebProcess/Cookies/WebCookieManager.h:
        Make setHTTPCookieAcceptPolicy public so that it can be called from WebProcessWin.

        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):
        Tell the WebCookieManager about the initial policy.

2011-03-25  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Need to be able to set and get the Cookie Storage Policy.
        https://bugs.webkit.org/show_bug.cgi?id=50780

        * Shared/HTTPCookieAcceptPolicy.h: Added.

        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toHTTPCookieAcceptPolicy):
        (WebKit::toAPI):

        * UIProcess/API/C/WKCookieManager.cpp:
        (WKCookieManagerSetHTTPCookieAcceptPolicy):
        Call through to WebCookieManagerProxy.
        (WKCookieManagerGetHTTPCookieAcceptPolicy):
        Ditto.
        * UIProcess/API/C/WKCookieManager.h:

        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::invalidate):
        Invalidate the get http cookie accept policy callbacks.
        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):
        Send a message to the Web Process with the new value.
        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
        Keep track of the callback and send a message to the Web Process.
        (WebKit::WebCookieManagerProxy::didGetHTTPCookieAcceptPolicy):
        Invoke the callback.
        * UIProcess/mac/WebCookieManagerProxyMac.mm: Added.
        (WebKit::WebCookieManagerProxy::persistHTTPCookieAcceptPolicy):
        On Mac, also set the policy in the UI Process because the sandboxed Web Process cannot
        persist the policy.
        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/WebCookieManagerProxy.messages.in:

        * WebKit2.pri:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Common.vsprops:

        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::setHTTPCookieAcceptPolicy):
        Call platformSetHTTPCookieAcceptPolicy.
        (WebKit::WebCookieManager::getHTTPCookieAcceptPolicy):
        Send the result of platformGetHTTPCookieAcceptPolicy to the UI Process.
        * WebProcess/Cookies/WebCookieManager.h:
        * WebProcess/Cookies/WebCookieManager.messages.in:

        * WebProcess/Cookies/cf: Added.
        * WebProcess/Cookies/cf/WebCookieManagerCFNet.cpp: Added.
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
        Set the policy on both the default cookie storage and any Private Browsing cookie storage.
        (WebKit::WebCookieManager::platformGetHTTPCookieAcceptPolicy):
        * WebProcess/Cookies/mac: Added.
        * WebProcess/Cookies/mac/WebCookieManagerMac.mm: Added.
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
        Set the policy on the default cookie storage and add a FIXME to set it on any Private
        Browsing cookie storage.
        (WebKit::WebCookieManager::platformGetHTTPCookieAcceptPolicy):

        * WebProcess/Cookies/gtk: Added.
        * WebProcess/Cookies/gtk/WebCookieManagerGtk.cpp: Added.
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManager::platformGetHTTPCookieAcceptPolicy):
        * WebProcess/Cookies/qt: Added.
        * WebProcess/Cookies/qt/WebCookieManagerQt.cpp: Added.
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManager::platformGetHTTPCookieAcceptPolicy):

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

        Reviewed by Alexey Proskuryakov.

        REGRESSION(r79227): CFURLCache not initialized correctly in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=57109
        <rdar://problem/9184590>
        
        Check for a trailing Windows path separator, not a Unix path separator.

        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):

2011-03-25  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] QtWebKit will not compile with QT_ASCII_CAST_WARNINGS enabled
        https://bugs.webkit.org/show_bug.cgi?id=57087

        Use explicit conversion for string to avoid depending on the default codec
        installed by the user code.

        * Platform/qt/SharedMemoryQt.cpp:
        (WebKit::SharedMemory::create):
        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::initializeGTK):
        * UIProcess/API/qt/tests/qgraphicswkview/tst_qgraphicswkview.cpp:
        (tst_QGraphicsWKView::loadEmptyPage):
        (tst_QGraphicsWKView::loadEmptyUrl):
        * UIProcess/API/qt/tests/qwkpage/tst_qwkpage.cpp:
        (tst_QWKPage::loadEmptyUrl):
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::getPluginDisplay):
        * WebProcess/qt/WebProcessMainQt.cpp:
        (WebKit::EnvHttpProxyFactory::initializeFromEnvironment):
        (WebKit::WebProcessMainQt):

2011-03-25  Brent Fulgham  <bfulgham@webkit.org>

        Correct project file missing $(WebKitVSPropsRedirectionDir)s
        after r81924.

        * win/WebKit2.vcproj: Restore lost $(WebKitVSPropsRedirectionDir)

2011-03-25  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [WK2] Consider .c files in the generate-forwarding-headers script
        https://bugs.webkit.org/show_bug.cgi?id=56680

        * Scripts/generate-forwarding-headers.pl:

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

        Unreviewed, rolling out r81916 and r81917.
        http://trac.webkit.org/changeset/81916
        http://trac.webkit.org/changeset/81917
        https://bugs.webkit.org/show_bug.cgi?id=57071

        broke a test on platforms that do not have QuickTime installed
        (Requested by estes on #webkit).

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

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=57069
        Add WKIconDatabase api to the project files, and expose accessor on WKContext.

        Project file stuffs:
        * GNUmakefile.am:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

        * Shared/API/c/WKBase.h:
        * UIProcess/API/C/WKAPICast.h:

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetIconDatabase):
        * UIProcess/API/C/WKContext.h:

        * UIProcess/API/C/WKIconDatabase.cpp: Added.
        (WKIconDatabaseGetTypeID):
        * UIProcess/API/C/WKIconDatabase.h: Added.

        * UIProcess/WebContext.h:
        (WebKit::WebContext::iconDatabase):

2011-03-24  Brent Fulgham  <bfulgham@webkit.org>

        Build correction.

        Disable the CA Layer stuff when building with Cairo.

        * win/WebKit2.vcproj:

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

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=57058
        Hookup the UIProcess WebIconDatabase to a WebCore::IconDatabase as its implementation

        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::WebIconDatabase):
        (WebKit::WebIconDatabase::setDatabasePath): Create a new WebCore::IconDatabase and open it to this path.
        (WebKit::WebIconDatabase::retainIconForPageURL): Actually retain the url, using the impl.
        (WebKit::WebIconDatabase::releaseIconForPageURL): Actually release the url, using the impl.
        (WebKit::WebIconDatabase::setIconURLForPageURL): Actually set the url, using the impl.
        (WebKit::WebIconDatabase::setIconDataForIconURL): Actually set the data, using the impl.
        (WebKit::WebIconDatabase::getLoadDecisionForIconURL): Actually ask for a load decision to call back with.
        (WebKit::WebIconDatabase::performImport):
        (WebKit::WebIconDatabase::didImportIconURLForPageURL):
        (WebKit::WebIconDatabase::didImportIconDataForPageURL):
        (WebKit::WebIconDatabase::didChangeIconForPageURL):
        (WebKit::WebIconDatabase::didRemoveAllIcons):
        (WebKit::WebIconDatabase::didFinishURLImport): Notify all the pending callbacks what their load decisions
          are now that they're available.
        * UIProcess/WebIconDatabase.h:

        Add an IconDatabase logging channel:
        * Platform/Logging.cpp:
        (WebKit::initializeLogChannelsIfNecessary):
        * Platform/Logging.h:

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::setIconDatabasePath): Pass the new path on to the WebIconDatabase, possibly
          opening it.
        * UIProcess/WebContext.h:

2011-03-24  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r70748): latest nightly builds kills AC_QuickTime.js
        https://bugs.webkit.org/show_bug.cgi?id=49016

        Update objectContentType() implementation to handle the
        shouldPreferPlugInsForImages flag.

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

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

        Start compiling LayerTreeHostCA on Windows

        Fixes <http://webkit.org/b/57060> WebKit2.vcproj should compile LayerTreeHostCA

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.cpp: Added.
        (WebKit::LayerTreeHostCA::platformInitialize):
        (WebKit::LayerTreeHostCA::scheduleLayerFlush):
        (WebKit::LayerTreeHostCA::platformInvalidate):
        (WebKit::LayerTreeHostCA::platformSizeDidChange):
        (WebKit::LayerTreeHostCA::platformForceRepaint):
        (WebKit::LayerTreeHostCA::platformDidPerformScheduledLayerFlush):
        Stubbed out.

        * win/WebKit2.vcproj: Added new files. Let VS reorder existing files.

        * win/WebKit2Apple.vsprops: Added WebProcess\WebPage\ca to the include path.

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

        Unreviewed build fix.

        Remove reference to LayerTreeHostMac.h from WebFullScreenManagerMac.mm.

        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:

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

        Split Mac-specific parts of LayerTreeHostCA into LayerTreeHostCAMac.mm

        Fixes <http://webkit.org/b/57046> LayerTreeHostMac's code should be shareable with Windows

        Reviewed by Anders Carlsson.

        * WebKit2.xcodeproj/project.pbxproj:

        * WebProcess/WebPage/ca/LayerTreeHostCA.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/ca/LayerTreeHostCA.mm.
        (WebKit::LayerTreeHostCA::LayerTreeHostCA): Moved some Mac-specific code to
        LayerTreeHostCAMac.mm.
        (WebKit::LayerTreeHostCA::~LayerTreeHostCA): Wrapped some Mac-specific code in
        PLATFORM(MAC).

        (WebKit::LayerTreeHostCA::invalidate):
        (WebKit::LayerTreeHostCA::sizeDidChange):
        (WebKit::LayerTreeHostCA::forceRepaint):
        Moved some Mac-specific code to LayerTreeHostCAMac.mm.

        (WebKit::LayerTreeHostCA::performScheduledLayerFlush): Renamed from
        flushPendingLayerChangesRunLoopObserverCallback. Moved some code from here...
        (WebKit::LayerTreeHostCA::didPerformScheduledLayerFlush): ...to here. Moved some
        Mac-specific code to LayerTreeHostCAMac.mm.

        * WebProcess/WebPage/ca/LayerTreeHostCA.h: Added new functions, wrapped some Mac-specific
        declarations in PLATFORM(MAC).

        * WebProcess/WebPage/ca/mac/LayerTreeHostCAMac.mm: Added.
        (WebKit::LayerTreeHostCA::platformInitialize):
        (WebKit::LayerTreeHostCA::scheduleLayerFlush):
        (WebKit::LayerTreeHostCA::platformInvalidate):
        (WebKit::LayerTreeHostCA::platformSizeDidChange):
        (WebKit::LayerTreeHostCA::platformForceRepaint):
        (WebKit::LayerTreeHostCA::flushPendingLayerChangesRunLoopObserverCallback):
        (WebKit::LayerTreeHostCA::platformDidPerformScheduledLayerFlush):
        Code was extracted from LayerTreeHostCA.cpp.

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

        Rename LayerTreeHostMac to LayerTreeHostCA

        This is the first step toward sharing code with Windows.

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

        Reviewed by Anders Carlsson.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create):
        Updated for rename.

        * WebProcess/WebPage/ca/LayerTreeHostCA.h: Renamed from Source/WebKit2/WebProcess/WebPage/mac/LayerTreeHostMac.h.
        * WebProcess/WebPage/ca/LayerTreeHostCA.mm: Renamed from Source/WebKit2/WebProcess/WebPage/mac/LayerTreeHostMac.mm.

2011-03-17  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKit2: Cancelling full screen early leaves full screen window up.
        https://bugs.webkit.org/show_bug.cgi?id=56589

        No new tests, as WebKitTestRunner does not currently support the new Full Screen API.

        Notify the UIProcess when it needs to tear down its layer hosting view, turn off
        the background layer when not in accelerated rendering mode and don't swap out 
        the web view unnecessarily 

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController beganExitFullScreenAnimation]): Check before swapping _webView.
        (-[WKFullScreenWindowController enterAcceleratedCompositingMode:]): Add the _layerHostingView
            to the full screen window's animationView, not its contentsView.
        (-[WKFullScreenWindowController exitAcceleratedCompositingMode]): Hide the background layer.
        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
        (WebKit::WebFullScreenManagerMac::setRootFullScreenLayer): If given a null rootLayer, tell
            the client to exit accelerated mode.

2011-03-24  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        WebKit2:Services menu item to convert selected Simplified/Traditional Chinese Text is not working.
        https://bugs.webkit.org/show_bug.cgi?id=56975
        <rdar://problem/8915066>
        
        Adding missing entry point to support Mac OS X services in WebKit2.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView readSelectionFromPasteboard:]): Added.
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::readSelectionFromPasteboard): Added.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Added synchronous
        message.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::readSelectionFromPasteboard): Added.

2011-03-24  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Dismissed reversion suggestion is incorrectly learned.
        https://bugs.webkit.org/show_bug.cgi?id=57039

        CorrectionPanel should always use [NSSpellChecker dismissCorrectionBubbleForView].
        [NSSpellChecker cancelCorrectionBubbleForView] is reserved for situation where correction panel
        is dismissed explicitly by ESC key or clicking the dimiss button. Misusing these causes
        incorrect automatic learning.

        * UIProcess/mac/CorrectionPanel.mm:
        (WebKit::CorrectionPanel::dismissInternal):

2011-03-24  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Add Trackpoint driver hack to support IBM trackpads
        https://bugs.webkit.org/show_bug.cgi?id=49830
        <rdar://problem/8705951>

        Copy code from WebKit1 to WebKit2 to handle initializing fake scrollbars so 
        IBM machines with a trackpad send us WM_VSCROLL and WM_HSCROLL messages.

        Listen for the WM_VSCROLL and WM_HSCROLL messages, and turn the values into
        ScrollDirection and ScrollGranularity, and send a scroll command to the
        WebProcess.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::scrollBy): Send a message to the WebProcess.
        * UIProcess/WebPageProxy.h:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::wndProc): Add WM_VSCROLL and WM_HSCROLL message handling.
        (WebKit::WebView::initialize): Call shouldInitializeTrackPointHack.
        (WebKit::WebView::onHorizontalScroll): Turn wParam into a ScrollDirection and ScrollGranularity. 
        (WebKit::WebView::onVerticalScroll): Ditto.
        (WebKit::WebView::shouldInitializeTrackPointHack): Check the registry for keys that indicate
            the machine has a IBM Trackpoint driver.
        * UIProcess/win/WebView.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scrollBy): Call scroll method.
        (WebKit::WebPage::scroll): Moved from WebPageMac and WebPageWin.
        (WebKit::WebPage::logicalScroll): Ditto.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Add a new scrollBy message. 
        * WebProcess/WebPage/mac/WebPageMac.mm: Remove scroll and logicalScroll, they are now in WebPage.cpp.
        * WebProcess/WebPage/win/WebPageWin.cpp: Ditto.

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

        Reviewed by Darin Adler.

        Dictionary text extraction is not correctly detecting word boundaries on bing.com
        <rdar://problem/9078569>
        https://bugs.webkit.org/show_bug.cgi?id=56995

        * Shared/DictionaryPopupInfo.cpp:
        (WebKit::DictionaryPopupInfo::encode):
        (WebKit::DictionaryPopupInfo::decode):
        * Shared/DictionaryPopupInfo.h:
        Add options dictionary.

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        Add path that can pass options through.

        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        (WebKit::WebContextMenuClient::lookUpInDictionary):
        Use the new performDictionaryLookupForSelection which can extract context
        if supported.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::characterRangeAtPositionForPoint):
        (WebKit::characterRangeAtPoint):
        Split functionality out of characterRangeAtPoint and into 
        characterRangeAtPositionForPoint to avoid doing duplicate work 
        if you already have the position.

        (WebKit::isPositionInRange):
        (WebKit::shouldUseSelection):
        Add predicate to determine if we should use the selection instead
        of expanding to find the word we are over.

        (WebKit::WebPage::performDictionaryLookupAtLocation):
        If available, use the surrounding paragraph as context to get better extraction
        and to get lexicographical information about the word. Also, clean up and use 
        editing APIs to make the code more concise and understandable.

        (WebKit::WebPage::performDictionaryLookupForSelection):
        Use similar logic as in performDictionaryLookupAtLocation to extract additional
        details from a selection for use in the dictionary popup.

        (WebKit::WebPage::performDictionaryLookupForRange):
        Pass options to WebProcess if available.

2011-03-24  Jon Lee  <jonlee@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Tabbing from the last focused field to a non-webpage element leaves the selection in a weird state
        <rdar://problem/8553962>

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setFocused): When the page loses focus, clear out any selection in the frame

2011-03-24  Brian Weinstein  <bweinstein@apple.com>

        Rubber-stamped by Sam Weinig.

        Fix a typo in the VK_LEFT case of performDefaultBehaviorForKeyEvent.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent): It should be a logical or,
            not a bitwise or.

2011-03-24  Jeff Miller  <jeffm@apple.com>

        Fix typo - USE(CF_NETWORK) should be USE(CFNETWORK).

        * WebProcess/InjectedBundle/win/InjectedBundleWin.cpp:
        (WebKit::InjectedBundle::setHostAllowsAnyHTTPSCertificate): USE(CF_NETWORK) should be USE(CFNETWORK)

2011-03-23  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Hook up new AppKit autocorrection UI with WK2.
        https://bugs.webkit.org/show_bug.cgi?id=56055
        <rdar://problem/8947463>

        Please see WebCore/ChangeLog for detail.

        The calls to AppKit are implemented in PageClientImpl. Other changes are necessary for the
        plumbing work.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::showCorrectionPanel):
        (WebKit::PageClientImpl::dismissCorrectionPanel):
        (WebKit::PageClientImpl::dismissCorrectionPanelSoon):
        (WebKit::PageClientImpl::recordAutocorrectionResponse):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView spellCheckerDocumentTag]):
        (-[WKView handleCorrectionPanelResult:]):
        * UIProcess/API/mac/WKViewPrivate.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::showCorrectionPanel):
        (WebKit::WebPageProxy::dismissCorrectionPanel):
        (WebKit::WebPageProxy::dismissCorrectionPanelSoon):
        (WebKit::WebPageProxy::recordAutocorrectionResponse):
        (WebKit::WebPageProxy::handleCorrectionPanelResult):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/CorrectionPanel.h: Added.
        (WebKit::CorrectionPanel::isShowing):
        * UIProcess/mac/CorrectionPanel.mm: Added.
        (correctionBubbleType):
        (WebKit::CorrectionPanel::CorrectionPanel):
        (WebKit::CorrectionPanel::~CorrectionPanel):
        (WebKit::CorrectionPanel::show):
        (WebKit::CorrectionPanel::dismiss):
        (WebKit::CorrectionPanel::dismissSoon):
        (WebKit::CorrectionPanel::dismissInternal):
        (WebKit::CorrectionPanel::recordAutocorrectionResponse):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::showCorrectionPanel):
        (WebKit::WebEditorClient::dismissCorrectionPanel):
        (WebKit::WebEditorClient::dismissCorrectionPanelSoon):
        (WebKit::WebEditorClient::recordAutocorrectionResponse):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::handleCorrectionPanelResult):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2011-03-23  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKit2: Need API to manage the Media Cache
        https://bugs.webkit.org/show_bug.cgi?id=56878
        <rdar://problem/9082503>

        Call through to HTMLMediaElement functions to manage the WebCore media cache.

        * WebProcess/MediaCache/WebMediaCacheManager.cpp:
        (WebKit::WebMediaCacheManager::getHostnamesWithMediaCache):
        (WebKit::WebMediaCacheManager::clearCacheForHostname):
        (WebKit::WebMediaCacheManager::clearCacheForAllHostnames):

2011-03-23  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Add WKBundleSetHostAllowsAnyHTTPSCertificate() for Windows
        https://bugs.webkit.org/show_bug.cgi?id=56972
        
        This is the WebKit2 equivalent to the WebKit1 API IWebMutableURLRequest::setAllowsAnyHTTPSCertificate().

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetHostAllowsAnyHTTPSCertificate): Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h: Added WKBundleSetHostAllowsAnyHTTPSCertificate().
        * WebProcess/InjectedBundle/InjectedBundle.h: Added setHostAllowsAnyHTTPSCertificate().
        * WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        (WebKit::InjectedBundle::setHostAllowsAnyHTTPSCertificate): Added, should never be called.
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp:
        (WebKit::InjectedBundle::setHostAllowsAnyHTTPSCertificate): Added, should never be called.
        * WebProcess/InjectedBundle/qt/InjectedBundleQt.cpp:
        (WebKit::InjectedBundle::setHostAllowsAnyHTTPSCertificate): Added, should never be called.
        * WebProcess/InjectedBundle/win/InjectedBundleWin.cpp:
        (WebKit::InjectedBundle::setHostAllowsAnyHTTPSCertificate): Added.

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

        Reviewed by Anders Carlsson.

        Roll out r81593 Need WebKit2 API for creating a page with a specific main frame name

        This API is not necessary.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/mac/WKView.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:]):
        (-[WKView initWithFrame:contextRef:]):
        (-[WKView initWithFrame:contextRef:pageGroupRef:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createMainFrame):
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):

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

        Reviewed by Andreas Kling.

        [WK2] Handle keyboard and mouse events on X11
        https://bugs.webkit.org/show_bug.cgi?id=56103

        Propagate keyboard and mouse events to the plugin
        as XEvent's.

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::initializeXEvent):
        (WebKit::xTimeStamp):
        (WebKit::xKeyModifiers):
        (WebKit::setCommonMouseEventFields):
        (WebKit::setXMotionEventFields):
        (WebKit::setXButtonEventFields):
        (WebKit::setXCrossingEventFields):
        (WebKit::NetscapePlugin::platformHandleMouseEvent):
        (WebKit::NetscapePlugin::platformHandleMouseEnterEvent):
        (WebKit::NetscapePlugin::platformHandleMouseLeaveEvent):
        (WebKit::setXKeyEventFields):
        (WebKit::NetscapePlugin::platformHandleKeyboardEvent):

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

        Reviewed by Sam Weinig.

        Connection::SyncMessageState::processIncomingMessage should ignore whether the message is sync or not
        https://bugs.webkit.org/show_bug.cgi?id=56954

        This is so we'll eventually be able to send sync messages that aren't processed immediately if the 
        destination is waiting for a reply to another synchronous message.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::SyncMessageState::processIncomingMessage):
        Only check for the DispatchMessageWhenWaitingForSyncReply flag.

        (CoreIPC::Connection::sendSyncMessage):
        Add both DispatchMessageWhenWaitingForSyncReply and SyncMessage to the message ID.

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::sendSync):        
        (CoreIPC::Connection::deprecatedSendSync):
        No need to add SyncMessage here anymore.

2011-03-23  Brian Weinstein  <bweinstein@apple.com>

        Qt Build Fix.

        * DerivedSources.pro:

2011-03-22  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Need API to manage the Media Cache
        https://bugs.webkit.org/show_bug.cgi?id=56878
        <rdar://problem/9082503>

        Project File Fun:
        * GNUmakefile.am:
        * WebKit2.pri:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Common.vsprops:
        * win/WebKit2Generated.make:
        
        Derived Sources and API fun:
        * DerivedSources.make:
        * DerivedSources.pro:
        * Platform/CoreIPC/MessageID.h:
        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        * UIProcess/API/C/WKAPICast.h:
        
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage): Add a case for MediaCache messages.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage): Ditto.
        
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext): Initialize the WebMediaCacheManagerProxy member variable.
        (WebKit::WebContext::~WebContext): Invalidate the WebMediaCacheManagerProxy.
        (WebKit::WebContext::disconnectProcess): Ditto.
        (WebKit::WebContext::didReceiveMessage): Add a case for MediaCache messages.
        * UIProcess/WebContext.h:
        (WebKit::WebContext::mediaCacheManagerProxy):

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetMediaCacheManager): Returns the context's WebMediaCacheManager.
        * UIProcess/API/C/WKContext.h:

        * UIProcess/API/C/WKMediaCacheManager.cpp: Added.
        (WKMediaCacheManagerGetTypeID): Returns the WebMediaCacheManagerProxy type.
        (WKMediaCacheManagerGetHostnamesWithMediaCache): Calls down to the WebMediaCacheManagerProxy.
        (WKMediaCacheManagerClearCacheForHostname): Ditto.
        (WKMediaCacheManagerClearCacheForAllHostnames): Ditto.
        * UIProcess/API/C/WKMediaCacheManager.h: Added.

        * UIProcess/WebMediaCacheManagerProxy.cpp: Added.
        (WebKit::WebMediaCacheManagerProxy::create):
        (WebKit::WebMediaCacheManagerProxy::WebMediaCacheManagerProxy):
        (WebKit::WebMediaCacheManagerProxy::~WebMediaCacheManagerProxy):
        (WebKit::WebMediaCacheManagerProxy::invalidate):
        (WebKit::WebMediaCacheManagerProxy::didReceiveMessage):
        (WebKit::WebMediaCacheManagerProxy::getHostnamesWithMediaCache): Call through to the WebProcess.
        (WebKit::WebMediaCacheManagerProxy::didGetHostnamesWithMediaCache): Process the WebProcess response,
            and call the callback.
        (WebKit::WebMediaCacheManagerProxy::clearCacheForHostname): Call through to the WebProcess.
        (WebKit::WebMediaCacheManagerProxy::clearCacheForAllHostnames): Call through to the WebProcess.
        * UIProcess/WebMediaCacheManagerProxy.h: Added.
        (WebKit::WebMediaCacheManagerProxy::clearContext):
        (WebKit::WebMediaCacheManagerProxy::type):
        * UIProcess/WebMediaCacheManagerProxy.messages.in: Added.

        * WebProcess/MediaCache: Added.
        * WebProcess/MediaCache/WebMediaCacheManager.cpp: Added.
        (WebKit::WebMediaCacheManager::shared):
        (WebKit::WebMediaCacheManager::WebMediaCacheManager):
        (WebKit::WebMediaCacheManager::didReceiveMessage):
        (WebKit::WebMediaCacheManager::getHostnamesWithMediaCache): Added a FIXME to call through to WebCore.
        (WebKit::WebMediaCacheManager::clearCacheForHostname): Ditto.
        (WebKit::WebMediaCacheManager::clearCacheForAllHostnames): Ditto.
        * WebProcess/MediaCache/WebMediaCacheManager.h: Added.
        * WebProcess/MediaCache/WebMediaCacheManager.messages.in: Added.

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

        Reviewed by Sam Weinig.

        Add asynchronous load decision call to WebKit2 IconDatabase
        https://bugs.webkit.org/show_bug.cgi?id=56887

        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::getLoadDecisionForIconURL): In the future, get the actual load decision from the database.
          For now, always message "IconLoadNo" back to the WebProcess.
        * UIProcess/WebIconDatabase.h:
        * UIProcess/WebIconDatabase.messages.in:
        
        * WebProcess/IconDatabase/WebIconDatabaseProxy.cpp:
        (WebKit::WebIconDatabaseProxy::loadDecisionForIconURL): Message the UIProcess for the load decision.
        (WebKit::WebIconDatabaseProxy::receivedIconLoadDecision): Callback into WebCore with the received load decision.
        * WebProcess/IconDatabase/WebIconDatabaseProxy.h:
        * WebProcess/IconDatabase/WebIconDatabaseProxy.messages.in:

2011-03-23  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        REGRESSION: WK2: AX: PDF in Safari no longer accessible.
        https://bugs.webkit.org/show_bug.cgi?id=56849

        The WKView needs to know when to return the WKPDFView and when to return
        the remote web process connection.

        * UIProcess/API/mac/PDFViewController.h:
        (WebKit::PDFViewController::pdfView):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView accessibilityFocusedUIElement]):
        (-[WKView accessibilityHitTest:]):
        (-[WKView accessibilityAttributeValue:]):

2011-03-21  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=56798
        Wrap autorelease pools around calls that can have pathological memory growth on Membuster.  
        Only wrap the main runloop because some background threads are not expected to call into 
        objc and an autorelease pool could mask bugs.

        * Platform/mac/RunLoopMac.mm:
        (RunLoop::performWork):
        (RunLoop::TimerBase::timerFired):
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::flushPendingLayerChangesRunLoopObserverCallback):

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

        Reviewed by Sam Weinig.

        OBJECT element with DivX source is always downloaded
        https://bugs.webkit.org/show_bug.cgi?id=56879

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::getPluginInfoFromPropertyLists):
        Always try to split every element in the "WebPluginExtensions" array, since the DivX plug-in
        specifies multiple file extensions in a single element.
        
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::pluginSupportsExtension):
        Add a new helper function.

        (WebKit::WebFrameLoaderClient::objectContentType):
        If we can't find the MIME for an extension, explicitly check if there's a plugin that claims to
        handle the given extension.

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

        Reviewed by Sam Weinig.

        Rename the synchronous icon database messages to be prefixed with "synchronous"

        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::synchronousIconDataForPageURL):
        (WebKit::WebIconDatabase::synchronousIconURLForPageURL):
        (WebKit::WebIconDatabase::synchronousIconDataKnownForIconURL):
        (WebKit::WebIconDatabase::synchronousLoadDecisionForIconURL):
        * UIProcess/WebIconDatabase.h:
        * UIProcess/WebIconDatabase.messages.in:

        * WebProcess/IconDatabase/WebIconDatabaseProxy.cpp:
        (WebKit::WebIconDatabaseProxy::synchronousIconForPageURL):

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

        Rubber-stamped by Anders Carlsson.

        Loading a new tab does not dismiss Lookup
        <rdar://problem/9138391> 

        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewDidMoveToWindow]):
        Hide the dictionary popup when moving the WKView out of a window.

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

        Reviewed by Sam Weinig.

        Microsoft Silverlight playback shows artifacts
        https://bugs.webkit.org/show_bug.cgi?id=56863
        <rdar://problem/9103136>

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::paint):
        If the plug-in is transparent, clear the dirty rect before painting.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::determineQuirks):
        Add the MakeTransparentIfBackgroundAttributeExists quirk for Silverlight plug-ins.

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

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_SetValue):
        Handle NPPVpluginTransparentBool.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin):
        Initialize m_isTransparent to false.

        (WebKit::NetscapePlugin::setIsTransparent):
        Set m_isTransparent.

        (WebKit::NetscapePlugin::initialize):
        If the plug-in has the MakeTransparentIfBackgroundAttributeExists quirk, make it transparent
        if there's a 'background' attribute.

        (WebKit::NetscapePlugin::isTransparent):
        Add getter.

        * WebProcess/Plugins/Plugin.h:
        Add isTransparent().

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::paint):
        Always copy the plug-in backing store to the plug-in proxy backing store.

        (WebKit::PluginProxy::isTransparent):
        Add getter that should never be called.

        (WebKit::PluginProxy::update):
        Always copy the plug-in backing store to the plug-in proxy backing store.

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

        Reviewed by Sam Weinig.

        Crash when calling PluginProxy::evaluate on a destroyed plug-in
        https://bugs.webkit.org/show_bug.cgi?id=56848
        <rdar://problem/9168975>

        Return early if the NPObject doesn't exist anymore.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::evaluate):

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

        Reviewed by Adam Roben.

        WebKit2: Cannot make a selection past the end of the visible page (no autoscrolling)
        <rdar://problem/8823874>
        https://bugs.webkit.org/show_bug.cgi?id=56847

        * Shared/mac/WebEventFactory.mm:
        (WebKit::currentMouseButton):
        (WebKit::mouseButtonForEvent):
        Add mouse button for mouseEnter/Exit events. [NSEvent buttonNumber] doesn't seem to give the right result
        for these events, but getting the currentMouseButton does work.

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

        Fix Mac release builds after https://bugs.webkit.org/show_bug.cgi?id=56783

        * Platform/mac/Logging.mac.mm:

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

        Reviewed by Brian Weinstein.

        https://bugs.webkit.org/show_bug.cgi?id=56783
        Actually hook up WebKit2 logging on Mac.

        * Platform/Logging.cpp:
        (WebKit::initializeLogChannel):
        * Platform/Logging.h:
        * Platform/mac/Logging.mac.mm: Added.
        (WebKit::initializeLogChannel):
 
       * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext): Initialize logging if necessary.

        * WebKit2.xcodeproj/project.pbxproj:

2011-03-21  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r81269): WebKit2 gets into an infinite recursion after an unhandled command key
        https://bugs.webkit.org/show_bug.cgi?id=56782
        <rdar://problem/9151993>

        * UIProcess/API/mac/PageClientImpl.mm: (WebKit::PageClientImpl::doneWithKeyEvent):
        Factored out code for resending an event and moved it to WKView.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView performKeyEquivalent:]): Don't zero out _keyDownEventBeingResent, it's easier
        to just do that in _resendKeyDownEvent:.
        (-[WKView keyDown:]): Ditto.
        (-[WKView _resendKeyDownEvent:]): Moved from PageClientImpl.mm. Added an assertion that we
        are not already resending an event - it would be too confusing if we ever had to do that,
        but looks like this never happens.

        * UIProcess/API/mac/WKViewInternal.h: Exposed _resendKeyDownEvent.

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

        Reviewed by Sam Weinig.

        QT plug-in fails to load contextual menu
        https://bugs.webkit.org/show_bug.cgi?id=56777
        <rdar://problem/8979033>

        Open a Carbon resource map and make it the current map when calling NP_Initialize.

        * Platform/Module.cpp:
        (WebKit::Module::Module):
        Initialize m_bundleResourceMap to -1.

        * Platform/Module.h:
        Add m_bundleResourceMap.

        * Platform/mac/ModuleMac.mm:
        (WebKit::Module::unload):
        Close the resource map.

        (WebKit::Module::bundleResourceMap):
        Open a resource map if necessary.

        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::tryLoad):
        Get the resource map and make it current before calling NP_Initialize.

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

        Reviewed by Sam Weinig.

        Plug-in process crashes if it fails to load a plug-in module
        https://bugs.webkit.org/show_bug.cgi?id=56775

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::initialize):
        If NetscapePlugin::create returns null, call removePluginControllerProxy with a null plug-in.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::removePluginControllerProxy):
        Remove an incorrect assertion. Don't invalidate the remote object map if the plug-in is null.

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

        Reviewed by Sam Weinig.

        QT plug-in loads controller at top of movie not bottom
        https://bugs.webkit.org/show_bug.cgi?id=56764
        <rdar://problem/8979037>

        Create a layer with geometryFlipped set and add the plug-in layer as a sublayer,
        matching WebKit1.

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

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

        Reviewed by Anders Carlsson.

        WebKit2 needs preferences to change security knobs
        https://bugs.webkit.org/show_bug.cgi?id=56762

        Add preferences for WebSecurityEnabled, UniversalAccessFromFileURLsAllowed
        and FileAccessFromFileURLsAllowed.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetWebSecurityEnabled):
        (WKPreferencesGetWebSecurityEnabled):
        (WKPreferencesSetUniversalAccessFromFileURLsAllowed):
        (WKPreferencesGetUniversalAccessFromFileURLsAllowed):
        (WKPreferencesSetFileAccessFromFileURLsAllowed):
        (WKPreferencesGetFileAccessFromFileURLsAllowed):
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

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

        Reviewed by Anders Carlsson.

        Remove old DrawingArea and LayerHostingView code from WKView.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView drawRect:]):
        (-[WKView hitTest:]):
        (-[WKView WebKit::]):

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

        Reviewed by Anders Carlsson.

        Need WebKit2 API for creating a page with a specific main frame name
        https://bugs.webkit.org/show_bug.cgi?id=56759

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        Add mainFrameName to creation parameters.

        * UIProcess/API/mac/WKView.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:]):
        (-[WKView initWithFrame:contextRef:]):
        (-[WKView initWithFrame:contextRef:pageGroupRef:]):
        (-[WKView initWithFrame:contextRef:pageGroupRef:mainFrameName:]):
        Add new initializer which takes a main frame name.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setMainFrameName):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        Store the main frame name for initialization/re-initialization.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createMainFrame):
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        Pass the name to main frame creation.

2011-03-20  Bill Budge  <bbudge@chromium.org>

        Reviewed by Adam Barth.

        Rename ThreadSafeShared to ThreadSafeRefCounted
        https://bugs.webkit.org/show_bug.cgi?id=56714

        No new tests. Exposes no new functionality.

        * Platform/CoreIPC/Connection.h:
        * Platform/WorkQueue.h:
        * Platform/win/WorkQueueWin.cpp:
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/ThreadLauncher.h:

2011-03-19  Anton D'Auria  <adauria@apple.com>

        Reviewed by Alexey Proskuryakov.

        ApplicationCacheGroup is not obsolete after being deleted via ApplicationCacheStorage::deleteEntriesForOrigin
        https://bugs.webkit.org/show_bug.cgi?id=56415

        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp: calling ApplicationCacheGroup::deleteCacheGroupsForOrigin
        instead of ApplicationCacheStorage::deleteEntriesForOrigin.
        (WebKit::WebApplicationCacheManager::deleteEntriesForOrigin):

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

        Attempt to fix the WinCairo build.

        * win/WebKit2.vcproj:

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

        Reviewed by Dan Bernstein.

        Empty gray page after going back from a PDF
        https://bugs.webkit.org/show_bug.cgi?id=56694
        <rdar://problem/8811854>

        Update m_frameHasCustomRepresentation when loading a page that's in the page cache.

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

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

        Reviewed by Sam Weinig.

        Crash when sending a sync message ends up invalidating the connection
        https://bugs.webkit.org/show_bug.cgi?id=56686
        <rdar://problem/9048781>

        Guard against a null client.

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

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

        Reviewed by Benjamin Poulain.

        [Qt][WK2] Need a way to debug the web process after the UI process dies
        https://bugs.webkit.org/show_bug.cgi?id=56116

        Allow the web process to outlive it's parent process
        in debug builds if the QT_WEBKIT_KEEP_ALIVE_WEB_PROCESS
        environment variable is set.

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::QtWebProcess::setupChildProcess): Used getenv
        since the prctl call is already in a Linux-only block
        and the implementation in this file is a candidate
        for sharing across ports in the future.

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

        Reviewed by Anders Carlsson.

        Command-period does not stop load when page has focus in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=56601

        * UIProcess/API/mac/WKView.mm:
        (-[WKView doCommandBySelector:]): If called outside interpretKeyEvents,
        call through to super.
        (-[WKView insertText:]): Assert that we are inside interpretKeyEvents.
        (-[WKView unmarkText]): Ditto.
        (-[WKView setMarkedText:selectedRange:]): Ditto.
        (-[WKView _interceptKeyEvent:]): Set a flag to indicate we are inside
        interpretKeyEvents for use by the above.

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

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=56425
        More groundwork for WebKit2 IconDatabase

        -Update the synchronous method names to be prefixed with "synchronous."
        -Add empty implementations for the asynchronous accessors.

        * WebProcess/IconDatabase/WebIconDatabaseProxy.cpp:
        (WebKit::WebIconDatabaseProxy::setEnabled):
        (WebKit::WebIconDatabaseProxy::synchronousIconForPageURL):
        (WebKit::WebIconDatabaseProxy::synchronousIconURLForPageURL):
        (WebKit::WebIconDatabaseProxy::synchronousIconDataKnownForIconURL):
        (WebKit::WebIconDatabaseProxy::synchronousLoadDecisionForIconURL):
        (WebKit::WebIconDatabaseProxy::supportsAsynchronousMode):
        (WebKit::WebIconDatabaseProxy::loadDecisionForIconURL):
        (WebKit::WebIconDatabaseProxy::iconDataForIconURL):
        * WebProcess/IconDatabase/WebIconDatabaseProxy.h:

2011-03-18  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        Fixed compilation after r80925.

        * GNUmakefile.am:
        * UIProcess/gtk/WebFullScreenManagerProxyGtk.cpp: Added.
        (WebKit::WebFullScreenManagerProxy::enterFullScreen):
        (WebKit::WebFullScreenManagerProxy::exitFullScreen):
        (WebKit::WebFullScreenManagerProxy::beganEnterFullScreenAnimation):
        (WebKit::WebFullScreenManagerProxy::finishedEnterFullScreenAnimation):
        (WebKit::WebFullScreenManagerProxy::beganExitFullScreenAnimation):
        (WebKit::WebFullScreenManagerProxy::finishedExitFullScreenAnimation):
        (WebKit::WebFullScreenManagerProxy::enterAcceleratedCompositingMode):
        (WebKit::WebFullScreenManagerProxy::exitAcceleratedCompositingMode):
        (WebKit::WebFullScreenManagerProxy::getFullScreenRect):
        * WebProcess/FullScreen/gtk/WebFullScreenManagerGtk.cpp: Added.
        (WebKit::WebFullScreenManagerGtk::WebFullScreenManagerGtk):
        (WebKit::WebFullScreenManager::create):
        (WebKit::WebFullScreenManagerGtk::setRootFullScreenLayer):
        (WebKit::WebFullScreenManagerGtk::beginEnterFullScreenAnimation):
        (WebKit::WebFullScreenManagerGtk::beginExitFullScreenAnimation):
        * WebProcess/FullScreen/gtk/WebFullScreenManagerGtk.h: Added.

2011-03-18  Alejandro G. Castro  <alex@igalia.com>

        Unreviewed, fixed compilation after r81208.

        * GNUmakefile.am:

2011-03-18  John Sullivan  <sullivan@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=56645
        Assertion fires when hidden Find-on-Page matches are encountered in WebKit2

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindIndicator):
        Bail out if the selection rect is empty, before trying to generate an appropriately-sized
        bitmap. (Previously it was bailing out afterwards, but encountering an assertion in debug
        builds along the way.)

2011-03-18  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Jon Honeycutt.

        <rdar://problem/9153929> PluginProcess fails to launch due to PluginProcessShim.dylib building for 64-bit only

        Fix a bogus change from r81392 that made PluginProcessShim.xcconfig import DebugRelease.xcconfig.
        As its name suggests, DebugRelease.xcconfig is only applicable for the debug and release configurations.
        It overrides the valid build architectures and also restricts the build to only the active architecture.
        
        * Configurations/PluginProcessShim.xcconfig: Import BaseTarget.xcconfig instead. This is what
        each target-specific .xcconfig file should import.

2011-03-17  Mark Rowe  <mrowe@apple.com>

        Fix the build.

        * WebKit2.xcodeproj/project.pbxproj:

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

        Reviewed by Sam Weinig.

        Implement PluginProcessProxy::setFullscreenWindowIsShowing
        https://bugs.webkit.org/show_bug.cgi?id=56618

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::PluginProcessProxy):
        Initialize m_fullscreenWindowIsShowing.

        (WebKit::PluginProcessProxy::didClose):
        if m_fullscreenWindowIsShowing is true, call exitFullscreen.

        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::getPluginProcessSerialNumber):
        Add helper function for getting a PSN for the plug-in process.

        (WebKit::PluginProcessProxy::makePluginProcessTheFrontProcess):
        Make the plug-in process the front process.

        (WebKit::PluginProcessProxy::makeUIProcessTheFrontProcess):
        Make the current process (the UI process) the front process.

        (WebKit::PluginProcessProxy::setFullscreenWindowIsShowing):
        Call enterFullscreen or exitFullscreen.

        (WebKit::PluginProcessProxy::enterFullscreen):
        Make the plug-in process the front process and hide the menu bar.

        (WebKit::PluginProcessProxy::exitFullscreen):
        Show the menu bar and if necessary make the UI process the front process.

        (WebKit::PluginProcessProxy::endModal):
        call makeUIProcessTheFrontProcess.

        (WebKit::PluginProcessProxy::applicationDidBecomeActive):
        Call makePluginProcessTheFrontProcess.

2011-03-17  Adam Roben  <aroben@apple.com>

        Make bidi text in <select> menus in WebKit2 on Windows match WebKit1

        Fixes <http://webkit.org/b/56614> 3 <select> bidi tests failing on Windows 7 Release
        (WebKit2 Tests)

        Reviewed by Sam Weinig.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::selectItemWritingDirectionIsNatural):
        (WebKit::WebChromeClient::selectItemAlignmentFollowsMenuWritingDirection):
        On Windows, return the same values we return in WebKit1.

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

        Reviewed by Sam Weinig.

        Implement PluginProcessProxy::setModalWindowIsShowing
        https://bugs.webkit.org/show_bug.cgi?id=56615

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::PluginProcessProxy):
        Initialize m_modalWindowIsShowing.

        (WebKit::PluginProcessProxy::didClose):
        If m_modalWindowIsShowing is true, we must call endModal.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (-[WKPlaceholderModalWindow _wantsUserAttention]):
        Add a WKPlaceholderModalWindow.

        (WebKit::PluginProcessProxy::setModalWindowIsShowing):
        Call beginModal or endModal depending on whether we're showing a modal window or not.

        (WebKit::PluginProcessProxy::beginModal):
        Create a fake window and start a nested run loop. Listen for NSApplicationWillBecomeActiveNotification notifications.

        (WebKit::PluginProcessProxy::endModal):
        Tear down the window and the run loop.

        (WebKit::PluginProcessProxy::applicationDidBecomeActive):
        Make sure that the plug-in process is frontmost.

2011-03-17  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adam Roben.

        Web page shouldn't swallow alt-key combinations on Windows
        https://bugs.webkit.org/show_bug.cgi?id=56612
        
        Make Alt+Left Arrow and Alt+Right Arrow go back and forward, but make
        sure any alt-key combinations bubble up to the client.

        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent): Make Alt+Left Arrow and Alt+Right Arrow go back and forward, ignore any other alt-key combinations.

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

        Reviewed by Sam Weinig.

        Send SetModalWindowIsShowing and SetFullscreenWindowIsShowing messages to the UI process
        https://bugs.webkit.org/show_bug.cgi?id=56610

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::FullscreenWindowTracker::FullscreenWindowTracker):
        Add fullscreen window tracker class.

        (WebKit::rectCoversAnyScreen):
        Return whether the given rect covers any screen.

        (WebKit::windowCoversAnyScreen):
        Return whether the given window covers any screen.

        (WebKit::FullscreenWindowTracker::windowShown):
        If we're showing a fullscreen window, call PluginProcess::setFullscreenWindowIsShowing.

        (WebKit::FullscreenWindowTracker::windowHidden):
        If we're hiding the last fullscreen window, call PluginProcess::setFullscreenWindowIsShowing.

        (WebKit::cocoaWindowShown):
        (WebKit::cocoaWindowHidden):
        (WebKit::carbonWindowShown):
        (WebKit::carbonWindowHidden):
        Call the window tracking functions.

        (WebKit::setModal):
        Call PluginProcess::setModalWindowIsShowing.

        (WebKit::PluginProcess::setModalWindowIsShowing):
        (WebKit::PluginProcess::setFullscreenWindowIsShowing):
        Send CoreIPC messages.

        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.messages.in:
        Add new messages.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::setModalWindowIsShowing):
        (WebKit::PluginProcessProxy::setFullscreenWindowIsShowing):
        Add stubs.

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

        Reviewed by Brady Eidson.

        Allow passing a certificate chain as a user message
        <rdar://problem/8951709>
        https://bugs.webkit.org/show_bug.cgi?id=56605

        * Shared/API/c/mac/WKCertificateInfoMac.h:
        * Shared/API/c/mac/WKCertificateInfoMac.mm:
        (WKCertificateInfoCreateWithCertficateChain):
        Added. Creates a WKCertificate from a certificate chain.

        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        (WebKit::UserMessageDecoder::baseDecode):
        Add encoding/decoding of WebCertificateInfo.

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

        Reviewed by Sam Weinig.

        Add PluginProcessShim hooks for when windows are shown and hidden
        https://bugs.webkit.org/show_bug.cgi?id=56597

        * Configurations/PluginProcessShim.xcconfig:
        Add HEADER_SEARCH_PATHS so we can find WebKitSystemInterface.h.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::cocoaWindowShown):
        (WebKit::cocoaWindowHidden):
        (WebKit::carbonWindowShown):
        (WebKit::carbonWindowHidden):
        (WebKit::setModal):
        (WebKit::PluginProcess::initializeShim):
        Add empty stubs.

        * PluginProcess/mac/PluginProcessShim.h:
        * PluginProcess/mac/PluginProcessShim.mm:
        (WebKit::beginModal):
        (WebKit::endModal):
        Keep a modal count and call setModal accordingly.

        (WebKit::shim_NSApplication_RunModalForWindow):
        (WebKit::shimModalDialog):
        (WebKit::shimAlert):
        Call beginModal/endModal.

        (WebKit::shimShowWindow):
        (WebKit::shimHideWindow):
        Call the shim functions.
        
        (WebKit::WebKitPluginProcessShimInitialize):
        Listen for notifications and call the necessary shim functions.

        * WebKit2.xcodeproj/project.pbxproj:
        Link the plug-in process shim with AppKit and QuartzCore and WKSI.

2011-03-17  Jeff Miller  <jeffm@apple.com>

        Use a consistent set of file patterns in the svn:ignore property for all .xcodeproj directories, specifically:
        
        *.mode*
        *.pbxuser
        *.perspective*
        project.xcworkspace
        xcuserdata

        * WebKit2.xcodeproj: Modified property svn:ignore.

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

        Reviewed by Anders Carlsson.

        WKErrors need the PeerCertificateChain for certificate errors
        <rdar://problem/8951784>
        https://bugs.webkit.org/show_bug.cgi?id=56592

        * Shared/WebCoreArgumentCoders.h:
        Special case encoding/decoding of ResourceErrors for the mac.

        * Shared/mac/PlatformCertificateInfo.h:
        * Shared/mac/PlatformCertificateInfo.mm:
        (WebKit::PlatformCertificateInfo::PlatformCertificateInfo):
        Add constructor that take the PeerCertificateChain as CFArrayRef.

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (CoreIPC::encodeResourceError):
        (CoreIPC::decodeResourceError):
        Add encode/decode for ResourceError using the underlying NSError
        and encoding/decoding as much of the userInfo as we know how to.
        Right now this includes all string values and the PeerCertificateChain.

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

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=56574
        Dealloc'ing a WKView can leave a stale reference to it in NSWindow

        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewWillMoveToWindow:]):
        Clear the outgoing window's growBoxOwner if it is this view.

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

        Rubber-stamped by John Sullivan.

        Rename PluginProcessShim.cpp to PluginProcessShim.mm.

        * PluginProcess/mac/PluginProcessShim.cpp: Removed.
        * PluginProcess/mac/PluginProcessShim.mm: Copied from PluginProcess/mac/PluginProcessShim.cpp.
        * WebKit2.xcodeproj/project.pbxproj:

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

        Reviewed by Darin Adler.

        Invalidate all NPObjects for a plug-in when that plug-in is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=56511
        <rdar://problem/8993491>

        Before this change, we would invalidate NPObjectProxy objects and delete NPObjectMessageReceiver
        objects when the last plug-in of a certain type was destroyed. Doing so caused us to hold on to memory
        which we don't need, and could also lead to crashes if the NPObjectMessageReceiver would get a message and
        tried to invoke it on a already deallocated NPObject.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::initialize):
        If we fail to initialize, call removePluginControllerProxy instead of having WebProcessConnection do so.

        (WebKit::PluginControllerProxy::destroy):
        Pass the plug-in to removePluginControllerProxy.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::removePluginControllerProxy):
        Call NPRemoteObjectMap::pluginDestroyed when the plug-in has been destroyed.

        (WebKit::WebProcessConnection::createPlugin):
        Don't call removePluginControllerProxy if the plug-in fails to initialize. PluginControllerProxy::initialize now
        takes care of doing this.

        * Shared/Plugins/NPObjectMessageReceiver.cpp:
        (WebKit::NPObjectMessageReceiver::NPObjectMessageReceiver):
        (WebKit::NPObjectMessageReceiver::~NPObjectMessageReceiver):
        * Shared/Plugins/NPObjectMessageReceiver.h:
        Remove m_shouldReleaseObjectWhenInvalidating, we now know that no NPObjects will have been deallocated
        by the time the NPObjectMessageReceiver is destroyed.

        (WebKit::NPObjectMessageReceiver::plugin):
        Add getter.
        
        * Shared/Plugins/NPObjectProxy.h:
        (WebKit::NPObjectProxy::plugin):
        Add getter.
        
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::NPRemoteObjectMap):
        Remove m_isInvalidating.

        (WebKit::NPRemoteObjectMap::npObjectProxyDestroyed):
        Simplify code.

        (WebKit::NPRemoteObjectMap::pluginDestroyed):
        Rename invalidate to pluginDestroyed. Only invalidate/delete objects that belong to the given plug-in.

        * Shared/Plugins/NPRemoteObjectMap.h:
        Remove m_isInvalidating.
        
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::removePluginProxy):
        Call NPRemoteObjectMap::pluginDestroyed when the plug-in has been destroyed.

2011-03-17  Oleg Romashin  <oleg.romashin@nokia.com>

        Reviewed by Anders Carlsson.

        Teach WebKit2 messages.py generator to ifdef headers include
        which are related to ifdef-ed methods/types
        https://bugs.webkit.org/show_bug.cgi?id=55658

        * Scripts/webkit2/messages.py:
        * Scripts/webkit2/messages_unittest.py:

2011-03-16  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Viewport no longer allows an auto value for "user-scalable"
        https://bugs.webkit.org/show_bug.cgi?id=55416

        Make the default value for userScalable be true.

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

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

        Reviewed by Dan Bernstein.

        NPObjectProxy and NPObjectMessageReceiver objects should know their Plugin object
        https://bugs.webkit.org/show_bug.cgi?id=56506

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::windowScriptNPObject):
        (WebKit::PluginControllerProxy::pluginElementNPObject):
        (WebKit::PluginControllerProxy::evaluate):
        (WebKit::PluginControllerProxy::getPluginScriptableNPObject):
        * Shared/Plugins/NPObjectMessageReceiver.cpp:
        (WebKit::NPObjectMessageReceiver::create):
        (WebKit::NPObjectMessageReceiver::NPObjectMessageReceiver):
        (WebKit::NPObjectMessageReceiver::invoke):
        (WebKit::NPObjectMessageReceiver::invokeDefault):
        (WebKit::NPObjectMessageReceiver::getProperty):
        (WebKit::NPObjectMessageReceiver::setProperty):
        (WebKit::NPObjectMessageReceiver::construct):
        * Shared/Plugins/NPObjectMessageReceiver.h:
        * Shared/Plugins/NPObjectProxy.cpp:
        (WebKit::NPObjectProxy::create):
        (WebKit::NPObjectProxy::NPObjectProxy):
        (WebKit::NPObjectProxy::invalidate):
        (WebKit::NPObjectProxy::initialize):
        (WebKit::NPObjectProxy::invoke):
        (WebKit::NPObjectProxy::invokeDefault):
        (WebKit::NPObjectProxy::getProperty):
        (WebKit::NPObjectProxy::setProperty):
        (WebKit::NPObjectProxy::construct):
        * Shared/Plugins/NPObjectProxy.h:
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::createNPObjectProxy):
        (WebKit::NPRemoteObjectMap::registerNPObject):
        (WebKit::NPRemoteObjectMap::npVariantToNPVariantData):
        (WebKit::NPRemoteObjectMap::npVariantDataToNPVariant):
        * Shared/Plugins/NPRemoteObjectMap.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::pluginScriptableNPObject):
        (WebKit::PluginProxy::getWindowScriptNPObject):
        (WebKit::PluginProxy::getPluginElementNPObject):
        (WebKit::PluginProxy::evaluate):

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

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=54987 Crash beneath 
        WebPageProxy::viewWillStartLiveResize when resizing window after web process 
        crashed
        -and corresponding-
        <rdar://problem/9037685>

        Just need simple isValid() checks here. 
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeUIClient):
        (WebKit::WebPageProxy::viewWillStartLiveResize):
        (WebKit::WebPageProxy::viewWillEndLiveResize):

2011-03-16  Damian Kaleta  <dkaleta@apple.com>

        Reviewed by Kevin Decker.

        Add a user default that will force all plugins to opt in to non-executable data
        https://bugs.webkit.org/show_bug.cgi?id=56487
        <rdar://problem/9109095>

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::PluginProcessProxy):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::pluginNeedsExecutableHeap):

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

        Reviewed by Darin Adler.

        WK2: Need to propagate enhanced accessibility flag from UI -> web process
        https://bugs.webkit.org/show_bug.cgi?id=56379

        Support sending the enhanced accessibility flag between processes.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::setEnhancedAccessibility):
        * UIProcess/WebContext.h:
        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContet::platformInvalidateContext):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        (WebKit::WebContext::platformInvalidateContext):
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::platformInvalidateContext):
        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformInvalidateContext):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setEnhancedAccessibility):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2011-03-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make Structure creation require a JSGlobalData
        https://bugs.webkit.org/show_bug.cgi?id=56438

        Mechanical change to make all Structure creation use a JSGlobalData&.

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

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

        Reviewed by Dan Bernstein.

        WebKit2: Sometimes Command-[ opens a new tab and loads the back page in it
        https://bugs.webkit.org/show_bug.cgi?id=56477
        <rdar://problem/8806664>

        * UIProcess/API/mac/PageClientImpl.mm: (WebKit::PageClientImpl::doneWithKeyEvent):
        Set NSApplication current event when re-dispatching a key event that returned from the web
        process unhandled. That way, code that looks at current event modifiers won't be confused.

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

        Reviewed by Adam Roben.

        Add WebKit2 API to figure out if an input or textarea was edited
        https://bugs.webkit.org/show_bug.cgi?id=56474

        Expose WKBundleNodeHandleGetHTMLInputElementLastChangeWasUserEdit and
        WKBundleNodeHandleGetHTMLTextAreaElementLastChangeWasUserEdit. Next time,
        I will work on giving these functions longer names.

        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleGetHTMLInputElementLastChangeWasUserEdit):
        (WKBundleNodeHandleGetHTMLTextAreaElementLastChangeWasUserEdit):
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::htmlInputElementLastChangeWasUserEdit):
        (WebKit::InjectedBundleNodeHandle::htmlTextAreaElementLastChangeWasUserEdit):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:

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

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=56467
        IconDatabase-related crash seen in WK2 tests

        * WebProcess/IconDatabase/WebIconDatabaseProxy.cpp:
        (WebKit::WebIconDatabaseProxy::setIconDataForIconURL): The IconLoader might set a null data for an icon, so handle that case.

2011-03-16  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Loading an empty URL crashes
        https://bugs.webkit.org/show_bug.cgi?id=55501

        A null WKURLRef is created in the API of WebKit 2 when converting a null string. The code
        of WKPageLoadURL assume the WKPageRef is not null which causes crashes if it is.

        This patch uses the converter toWTFString() to pass from WKPageRef to WTFString. This converter
        ensure the returned string is a valid null string.

        Tested through the Qt API tests.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageLoadURL):
        * UIProcess/API/qt/tests/qgraphicswkview/tst_qgraphicswkview.cpp:
        (tst_QGraphicsWKView::loadEmptyUrl):
        * UIProcess/API/qt/tests/qwkpage/qwkpage.pro: Added.
        * UIProcess/API/qt/tests/qwkpage/tst_qwkpage.cpp: Added.
        (tst_QWKPage::init):
        (tst_QWKPage::cleanup):
        (tst_QWKPage::loadEmptyUrl):
        * UIProcess/API/qt/tests/tests.pro:

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

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=56425
        WebKit2 icon database.

        Project file paperwork:
        * DerivedSources.make:
        * DerivedSources.pro:
        * GNUmakefile.am:
        * WebKit2.pri:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Common.vsprops:
        * Scripts/webkit2/messages.py: Special-case capitalization for messages that start with "URL" to be lowercased
          to "url" instead of "uRL".

        Add messaging-related stuff:
        * Platform/CoreIPC/MessageID.h:
        * UIProcess/WebIconDatabase.messages.in: Added.
        * WebProcess/IconDatabase/WebIconDatabaseProxy.messages.in: Added.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):

        Prep to make WebIconDatabase an API object:
        * Shared/APIObject.h:

        Add an "icon DB is enabled" flag to WebProcessCreationParameters:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:

        Add SPI for client apps to set the icon database path:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetIconDatabasePath):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/WebContext.h:
        (WebKit::WebContext::setIconDatabasePath):

        Hook up initialization, clearing, and messaging for the icon database:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::ensureWebProcess):
        (WebKit::WebContext::didReceiveMessage):
        (WebKit::WebContext::didReceiveSyncMessage):
        (WebKit::WebContext::iconDatabasePath):
        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformDefaultIconDatabasePath):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformDefaultIconDatabasePath):
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::platformDefaultIconDatabasePath):
        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformDefaultIconDatabasePath):

        Add the UIProcess-side IconDatabase. It will be the "actual database" as well as the API object:
        * UIProcess/WebIconDatabase.cpp: Added.
        (WebKit::WebIconDatabase::create):
        (WebKit::WebIconDatabase::~WebIconDatabase):
        (WebKit::WebIconDatabase::WebIconDatabase):
        (WebKit::WebIconDatabase::invalidate):
        (WebKit::WebIconDatabase::retainIconForPageURL):
        (WebKit::WebIconDatabase::releaseIconForPageURL):
        (WebKit::WebIconDatabase::setIconURLForPageURL):
        (WebKit::WebIconDatabase::setIconDataForIconURL):
        (WebKit::WebIconDatabase::iconDataForPageURL):
        (WebKit::WebIconDatabase::iconURLForPageURL):
        (WebKit::WebIconDatabase::iconDataKnownForIconURL):
        (WebKit::WebIconDatabase::loadDecisionForIconURL):
        (WebKit::WebIconDatabase::didReceiveMessage):
        (WebKit::WebIconDatabase::didReceiveSyncMessage):
        * UIProcess/WebIconDatabase.h: Added.
        (WebKit::WebIconDatabase::clearContext):
        (WebKit::WebIconDatabase::type):

        Add the WebProcess-side IconDatabaseProxy. It acts as the WebCore IconDatabase and operates via messaging:
        * WebProcess/IconDatabase: Added.
        * WebProcess/IconDatabase/WebIconDatabaseProxy.cpp: Added.
        (WebKit::WebIconDatabaseProxy::~WebIconDatabaseProxy):
        (WebKit::WebIconDatabaseProxy::WebIconDatabaseProxy):
        (WebKit::WebIconDatabaseProxy::isEnabled):
        (WebKit::WebIconDatabaseProxy::setEnabled):
        (WebKit::WebIconDatabaseProxy::iconForPageURL):
        (WebKit::WebIconDatabaseProxy::retainIconForPageURL):
        (WebKit::WebIconDatabaseProxy::releaseIconForPageURL):
        (WebKit::WebIconDatabaseProxy::iconURLForPageURL):
        (WebKit::WebIconDatabaseProxy::iconDataKnownForIconURL):
        (WebKit::WebIconDatabaseProxy::loadDecisionForIconURL):
        (WebKit::WebIconDatabaseProxy::setIconURLForPageURL):
        (WebKit::WebIconDatabaseProxy::setIconDataForIconURL):
        (WebKit::WebIconDatabaseProxy::urlImportFinished):
        (WebKit::WebIconDatabaseProxy::didReceiveMessage):
        * WebProcess/IconDatabase/WebIconDatabaseProxy.h: Added.

        Hook up initialization and messaging for the icon database proxy:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/WebProcess.h:

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

        Reviewed by Anders Carlsson.

        WebKit2: False SPOD cursor when context menu is open
        <rdar://problem/9029154>
        https://bugs.webkit.org/show_bug.cgi?id=56433

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showContextMenu):
        Update to match showPopupMenu idiomatically, and stop the responsivenessTimer
        since the act of showing the context menu could spin a nested runloop.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenu):
        * UIProcess/qt/WebContextMenuProxyQt.cpp:
        (WebKit::WebContextMenuProxyQt::showContextMenu):
        * UIProcess/win/WebContextMenuProxyWin.cpp:
        (WebKit::WebContextMenuProxyWin::showContextMenu):
        Move isEmpty() check to implementations, since we don't want to show
        this in any case, not just the one where we check it.

2011-03-15  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt][Symbian][WK2] Fix exporting and importing the WebProcessMainQt symbol
        https://bugs.webkit.org/show_bug.cgi?id=56417

        Use the Q_DECL_EXPORT and Q_DECL_IMPORT macros directly to make sure
        the symbol is always exported/imported.

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

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

        Reviewed by Darin Adler.

        REGRESSION (WebKit2): keygen element doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=56402
        <rdar://problem/9006545>

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        Added strings used by keygen.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm: Initialize a WebCore pointer to
        a function used by keygen.

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

        Reviewed by Simon Fraser.

        WebKit2 part of <rdar://problem/9075624> Overlay scrollbars slow down PLT by 6%

        New WebKitystemInterface function to force the scrollbars to flash
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

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

        Reviewed by Sam Weinig.

        Make sure that NP_Shutdown is always the last NPP function called
        https://bugs.webkit.org/show_bug.cgi?id=56391
        <rdar://problem/8989902>

        Make sure to always increment the load count whenever a web process connection
        is opened to a plug-in process, and decrement it when the last web process connection
        goes away.

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::createWebProcessConnection):
        (WebKit::PluginProcess::startShutdownTimerIfNecessary):
        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        * Shared/Plugins/Netscape/NetscapePluginModule.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin):
        (WebKit::NetscapePlugin::~NetscapePlugin):

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

        Reviewed by Adam Barth.

        [GTK] [WebKit2] The UIProcess never changes the mouse cursor
        https://bugs.webkit.org/show_bug.cgi?id=56333

        Add an implementation for WebView::addCursor for WebKit2 GTK+. This allows
        the cursor to change as the user mouses around the page. There is currently
        no test infrastructure to track cursor changes.

        * UIProcess/gtk/WebView.cpp:
        (WebKit::WebView::setCursor): Ported implementation from WebKit1.

2011-03-15  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin Adler.

        Introduce WTF_USE_EXPORT_MACROS, which will allow us to put shared library import/export
        info into the headers rather than in export symbol definition files, but disable it on 
        all platforms initially so we can deal with port build issues one port at a time.
        
        https://bugs.webkit.org/show_bug.cgi?id=27551

        * config.h:

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

        Reviewed by Darin Adler.

        REGRESSION: Print preview is blank when selecting multiple pages per sheet
        https://bugs.webkit.org/show_bug.cgi?id=56341
        <rdar://problem/8991382>

        * UIProcess/API/mac/WKPrintingView.mm: (pageDidDrawToPDF): Don't reset latest expected
        callback number after receiving a different one. We only update preview after receiving
        the latest expected page data (and the assumption is that AppKit will ask for pages in
        natural order for N-up).

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

        Make WKBundlePageCanHandleRequest return true for empty document URLs

        Reviewed by Sam Weinig.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::canHandleRequest): Return true for any URL schemes that are handled as
        empty documents, and defer to the platform for everything else.

        * WebProcess/WebPage/WebPage.h: Added platformCanHandleRequest.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformCanHandleRequest):
        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (WebKit::WebPage::platformCanHandleRequest):
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::platformCanHandleRequest):
        Renamed from canHandleRequest.

2011-03-14  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        CrashTracer: 60 crashes in WebProcess at com.apple.WebKit2: -[AccessibilityWebPageObject accessibilityHitTest:] + 248
        https://bugs.webkit.org/show_bug.cgi?id=56336

        Crash trace indicates a nil pointer access in one of these m_page->mainFrame()->coreFrame()->view()
        pointers.

        * WebProcess/WebPage/mac/AccessibilityWebPageObject.mm:
        (-[AccessibilityWebPageObject accessibilityHitTest:]):

2011-03-14  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        Provide API for creating WKImage from CGImageRef
        https://bugs.webkit.org/show_bug.cgi?id=56159

        Add function for creating a WKImage from CGImage data.
        * Shared/API/c/cg/WKImageCG.cpp:
        (WKImageCreateFromCGImage): Added. Creates a graphics context for the bitmap-backed image and draws into it. 
        * Shared/API/c/cg/WKImageCG.h:

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

        Reviewed by Adam Roben.

        [Qt][WK2]Unbreak InjectedBundle on Qt
        https://bugs.webkit.org/show_bug.cgi?id=54109

        Add API's to WKURL and WKString to satisfy
        WebKitTestRunner's needs.

        * Shared/API/c/WKString.cpp:
        (WKStringIsEqualToUTF8CStringIgnoringCase):
        * Shared/API/c/WKString.h:
        * Shared/API/c/WKURL.cpp:
        (WKURLCopyHostName):
        (WKURLCopyScheme):
        * Shared/API/c/WKURL.h:
        * Shared/WebString.h:
        (WebKit::WebString::equalToUTF8StringIgnoringCase):
        * Shared/WebURL.h: Added OwnPtr<KURL> member to be able
        to lazily parse the URL and store the result.
        (WebKit::WebURL::host):
        (WebKit::WebURL::protocol):
        (WebKit::WebURL::parseURLIfNecessary):
        * win/WebKit2.def: Revert the symbol exports that were
        needed to use KURL in WebKitTestRunner.

2011-03-14  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adam Roben.

        Add WKViewSetScrollOffsetOnNextResize() to C API on Windows
        https://bugs.webkit.org/show_bug.cgi?id=56340

        * UIProcess/API/C/win/WKView.cpp:
        (WKViewSetScrollOffsetOnNextResize): Added.
        * UIProcess/API/C/win/WKView.h: Added WKViewSetScrollOffsetOnNextResize().
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::onSizeEvent): Apply any scroll offset when setting the drawing area size.
        (WebKit::WebView::setScrollOffsetOnNextResize): Added.
        * UIProcess/win/WebView.h: Added setScrollOffsetOnNextResize().

2011-03-14  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben and Gavin Barraclough.

        FileSystemWin.cpp needs listDirectory() implementation
        https://bugs.webkit.org/show_bug.cgi?id=56331
        <rdar://problem/9126635>
        
        Move PathWalker down into WebCore, and call the PathWalker in WebCore
        (that now has a second argument, the pattern to take).

        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
        (WebKit::PluginInfoStore::pluginPathsInDirectory):

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

        Reviewed by Darin Adler.

        WebKit2: No icon shown for <input type=file>
        <rdar://problem/8988982>
        https://bugs.webkit.org/show_bug.cgi?id=54288

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::chooseIconForFiles):
        Add implementation for chooseIconForFiles which calls down to Icon::createIconForFiles.

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

        Reviewed by Dan Bernstein.

        <rdar://problem/8762095> and https://bugs.webkit.org/show_bug.cgi?id=55172
        Need WK2 API to view/manage origins with LocalStorage

        Hookup the existing API stubs to the WebCore implementations:
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.cpp:
        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManager::deleteEntriesForOrigin):
        (WebKit::WebKeyValueStorageManager::deleteAllEntries):

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

        Reviewed by Sam Weinig.

        <rdar://problem/9127270> and https://bugs.webkit.org/show_bug.cgi?id=56282

        Pass the path along with creation parameters:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:

        Add SPI to set the path:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetLocalStorageDirectory):
        * UIProcess/API/C/WKContextPrivate.h:

        Pass the path along in the process creation parameters:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureWebProcess):
        (WebKit::WebContext::localStorageDirectory):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::setLocalStorageDirectory):

        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformDefaultLocalStorageDirectory):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformDefaultLocalStorageDirectory):
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::platformDefaultLocalStorageDirectory):
        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformDefaultLocalStorageDirectory):

        Include the path with settings updates, because WebCore needs it set on the Settings object:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::localStorageDirectory):

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

2011-03-12  Jer Noble  <jer.noble@apple.com>

        Reviewed by Mark Rowe.

        WebKit2: Build WKFullScreenWindowController cleanly in 32-bit.
        https://bugs.webkit.org/show_bug.cgi?id=56260

        Include <Carbon/Carbon.h> instead of <HIToolbox/MacApplication.h>.

        * UIProcess/mac/WKFullScreenWindowController.mm:

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

        Reviewed by Anders Carlsson.

        Add ability to create a WKErrorRef
        <rdar://problem/9115768>
        https://bugs.webkit.org/show_bug.cgi?id=56279

        * Shared/API/c/cf/WKErrorCF.cpp: Added.
        (WKErrorCreateWithCFError):
        (WKErrorCopyCFError):
        * Shared/API/c/cf/WKErrorCF.h: Added.
        Add new API to create a WKErrorRef from a CFErrorRef
        and vice-versa.

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

2011-03-13  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Brady Eidson.

        Make adjustMIMETypeIfNecessary use CFNetwork directly
        https://bugs.webkit.org/show_bug.cgi?id=55912

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Support for new WKSI functions.

2011-03-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        WebPageProxy cleanup
        https://bugs.webkit.org/show_bug.cgi?id=56267

        * UIProcess/WebPageProxy.cpp: Moved all Mac-only function implementations from
        here to WebPageProxyMac.mm.
        * UIProcess/WebPageProxy.h: Cleaned up #includes.
        * UIProcess/mac/WebPageProxyMac.mm: Moved all Mac-only function implementations
        here.
        (WebKit::WebPageProxy::updateWindowIsVisible):
        (WebKit::WebPageProxy::windowAndViewFramesChanged):
        (WebKit::WebPageProxy::getMarkedRange):
        (WebKit::WebPageProxy::characterIndexForPoint):
        (WebKit::WebPageProxy::firstRectForCharacterRange):
        (WebKit::WebPageProxy::writeSelectionToPasteboard):
        (WebKit::WebPageProxy::setDragImage):
        (WebKit::WebPageProxy::performDictionaryLookupAtLocation):
        (WebKit::WebPageProxy::interpretKeyEvent):
        (WebKit::WebPageProxy::sendComplexTextInputToPlugin):
        (WebKit::WebPageProxy::uppercaseWord):
        (WebKit::WebPageProxy::lowercaseWord):
        (WebKit::WebPageProxy::capitalizeWord):
        (WebKit::WebPageProxy::setSmartInsertDeleteEnabled):
        (WebKit::WebPageProxy::didPerformDictionaryLookup):
        (WebKit::WebPageProxy::registerWebProcessAccessibilityToken):
        (WebKit::WebPageProxy::registerUIProcessAccessibilityTokens):
        (WebKit::WebPageProxy::setComplexTextInputEnabled):

2011-03-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8949683> WebKit2: Drag image is offset when the page is scrolled down
        https://bugs.webkit.org/show_bug.cgi?id=56265

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::startDrag): Send the location in view coordinates rather than
        document coordinates.

2011-03-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        Fix a crash when dragging.

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::convertImageToBitmap): Retain the saved context.

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

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::startDrag): Fixed typo in a comment.

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

        Reviewed by Sam Weinig.

        Dragging image to desktop gives webloc instead of image file in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=56193

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::convertImageToBitmap): Added. Factored out from startDrag to
        make the startDrag code clearer.
        (WebKit::WebDragClient::startDrag): Streamlined code a bit.
        (WebKit::cachedImage): Added. Helper for function below.
        (WebKit::arrayForURLsWithTitles): Added. Helper for function below.
        (WebKit::WebDragClient::declareAndWriteDragImage): Added code to handle file
        promises and removed a log of uneeded code.
        (-[WKPasteboardFilePromiseOwner copyDropDirectory]): Added.
        (promisedDataClient): Added.
        (-[WKPasteboardOwner clearImage]): Added.
        (-[WKPasteboardOwner initWithImage:]): Added.
        (-[WKPasteboardOwner dealloc]): Added.
        (-[WKPasteboardOwner finalize]): Added.
        (-[WKPasteboardOwner pasteboard:provideDataForType:]): Added.
        (-[WKPasteboardOwner pasteboardChangedOwner:]): Added.
        (matchesExtensionOrEquivalent): Added.
        (-[WKPasteboardOwner namesOfPromisedFilesDroppedAtDestination:]): Added.
        Much of the new code above came from the WebKit1 drag code.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::dragEnded): Added call to Mac-only platformDragEnded.
        * WebProcess/WebPage/WebPage.h: Added Mac-only platformDragEnded and m_dragSource.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::setDragSource): Added.
        (WebKit::WebPage::platformDragEnded): Added.

2011-03-12  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit build.

        This involves hacking around some HIToolbox headers that do things of dubious correctness,
        and fixing the usual CGRect vs NSRect issues.
        
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController enterFullScreen:]): NSRect is not CGRect.
        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm:
        (WebKit::WebFullScreenManagerMac::beginExitFullScreenAnimation): Ditto.

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

        Reviewed by Sam Weinig.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::url):
        Get the URL from the loader, not from the document.

        (WebKit::WebFrame::suggestedFilenameForResourceWithURL):
        Return the correct suggested filename for the main resource.

        (WebKit::WebFrame::mimeTypeForResourceWithURL):
        Return the correct mime type for the main resource.

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

        Reviewed by Sam Weinig.

        Should be able to download a PDF to the Downloads folder
        https://bugs.webkit.org/show_bug.cgi?id=56256

        * UIProcess/API/C/WKPage.h:
        Add WKPageSaveDataToFileInDownloadsFolderCallback to the UI client.

        * UIProcess/API/mac/PDFViewController.h:
        * UIProcess/API/mac/PDFViewController.mm:
        (-[WKPDFView _applyPDFPreferences]):
        (-[WKPDFView _updatePreferences:]):
        Use new PDFViewController::page getter.

        (-[WKPDFView PDFViewSavePDFToDownloadFolder:]):
        Call PDFViewController::savePDFToDownloadsFolder.

        (WebKit::releaseCFData):
        (WebKit::PDFViewController::savePDFToDownloadsFolder):
        Create a WebData that wraps the CFData, then pass it along to
        WebPageProxy::saveDataToFileInDownloadsFolder.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::saveDataToFileInDownloadsFolder):
        Call WebUIClient::saveDataToFileInDownloadsFolder.

        (WebKit::WebUIClient::saveDataToFileInDownloadsFolder):
        * UIProcess/WebUIClient.h:
        Call the UI client callback function.

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

        Reviewed by Sam Weinig.

        WebData should be able to wrap already existing data
        https://bugs.webkit.org/show_bug.cgi?id=56254

        * Shared/WebData.h:
        (WebKit::WebData::createWithoutCopying):
        (WebKit::WebData::create):
        (WebKit::WebData::~WebData):
        (WebKit::WebData::bytes):
        (WebKit::WebData::size):
        (WebKit::WebData::WebData):
        (WebKit::WebData::fastFreeBytes):

2011-03-12  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        WebKit2: Initialize the WebFullScreenManagerProxy with a WKView
        https://bugs.webkit.org/show_bug.cgi?id=56250

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:contextRef:pageGroupRef:]): Call fullScreenManager()->setView(self).

2011-03-11  Jer Noble  <jer.noble@apple.com>

        Reviewed by Anders Carlsson.

        Add full screen animation code to WebFullScreenManager.
        https://bugs.webkit.org/show_bug.cgi?id=56220

        * WebProcess/FullScreen/WebFullScreenManager.cpp: .
        (WebKit::WebFullScreenManager::~WebFullScreenManager): Added.
        (WebKit::WebFullScreenManager::exitFullScreenForElement): Remove ASSERTs.
        (WebKit::WebFullScreenManager::willEnterFullScreen): Set the full screen renderer's background color.
        (WebKit::WebFullScreenManager::didEnterFullScreen): Ditto.
        (WebKit::WebFullScreenManager::willExitFullScreen): Ditto.
        (WebKit::WebFullScreenManager::didExitFullScreen): Ditto.
        * WebProcess/FullScreen/WebFullScreenManager.h: Make a few functions pure virtual to be implemented in a 
            concrete subclass.
        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.h: Added.
        * WebProcess/FullScreen/mac/WebFullScreenManagerMac.mm: Added.
        (-[WebFullScreenManagerAnimationListener initWithManager:WebKit::began:finished:]): Listener for CAAnimations.
        (-[WebFullScreenManagerAnimationListener animationDidStart:]): Added.
        (-[WebFullScreenManagerAnimationListener animationDidStop:finished:]): Added.
        (-[WebFullScreenManagerAnimationListener invalidate]): Added.
        (WebKit::WebFullScreenManager::create): Now creates a WebFullScreenManagerMac.
        (WebKit::WebFullScreenManagerMac::create): Added.
        (WebKit::WebFullScreenManagerMac::WebFullScreenManagerMac): Added.
        (WebKit::WebFullScreenManagerMac::~WebFullScreenManagerMac): Added.
        (WebKit::WebFullScreenManagerMac::setRootFullScreenLayer): Set up the remote layer host.
        (WebKit::WebFullScreenManagerMac::beginEnterFullScreenAnimation): Create a CATransform3D
            which will animate the full screen renderer from its initial position to its final one.
        (WebKit::WebFullScreenManagerMac::beginExitFullScreenAnimation): Ditto.

2011-03-11  Jer Noble  <jer.noble@apple.com>

        Reviewed by Anders Carlsson.

        Hook up new WKFullScreenWindowController functions to WebFullScreenManagerProxy
        https://bugs.webkit.org/show_bug.cgi?id=56218

        * UIProcess/WebFullScreenManagerProxy.cpp:
        * UIProcess/mac/WebFullScreenManagerProxyMac.mm: Added.
        (WebKit::WebFullScreenManagerProxy::enterFullScreen): Call into WKFullScreenWindowController.
        (WebKit::WebFullScreenManagerProxy::exitFullScreen): Ditto.
        (WebKit::WebFullScreenManagerProxy::beganEnterFullScreenAnimation): Ditto.
        (WebKit::WebFullScreenManagerProxy::finishedEnterFullScreenAnimation): Ditto.
        (WebKit::WebFullScreenManagerProxy::beganExitFullScreenAnimation): Ditto.
        (WebKit::WebFullScreenManagerProxy::finishedExitFullScreenAnimation): Ditto.
        (WebKit::WebFullScreenManagerProxy::enterAcceleratedCompositingMode): Ditto.
        (WebKit::WebFullScreenManagerProxy::exitAcceleratedCompositingMode): Ditto.
        (WebKit::WebFullScreenManagerProxy::getFullScreenRect): Ditto.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView fullScreenWindowController]): Lazily instantiate a WKFullScreenWindowController.
        * UIProcess/API/mac/WKViewInternal.h:

2011-03-11  Jer Noble  <jer.noble@apple.com>

        Reviewed by Anders Carlsson.

        Add the WKFullScreenWindowController, mostly cribbed from WebKit's WebFullScreenController.

        [WebKit2] Implement a full screen window controller
        https://bugs.webkit.org/show_bug.cgi?id=56210

        * UIProcess/mac/WKFullScreenWindowController.h: Added.
        * UIProcess/mac/WKFullScreenWindowController.mm: Added.
        (-[WKFullScreenWindowController init]): Remove the _mediaEventListener.
        (-[WKFullScreenWindowController dealloc]): Make sure to cancel previous async requests.
        (-[WKFullScreenWindowController windowDidLoad]): Remove the Tiger protection.
        (-[WKFullScreenWindowController webView]): Type change.
        (-[WKFullScreenWindowController setWebView:]): Type change.
        (-[WKFullScreenWindowController applicationDidResignActive:]): Case changes.
        (-[WKFullScreenWindowController applicationDidChangeScreenParameters:]): Case changes.
        (-[WKFullScreenWindowController enterFullScreen:]): Removed most of the animation code
            which will reappear in WebFullScreenManager.
        (-[WKFullScreenWindowController beganEnterFullScreenAnimation]): Added.
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]): Added.
        (-[WKFullScreenWindowController exitFullScreen]): Ditto to enterFullScreen.
        (-[WKFullScreenWindowController beganExitFullScreenAnimation]): Added.
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]): Added.
        (-[WKFullScreenWindowController enterAcceleratedCompositingMode:WebKit::]): Set up the
            layer tree host.
        (-[WKFullScreenWindowController exitAcceleratedCompositingMode]): Tear down same.
        (-[WKFullScreenWindowController getFullScreenRect:WebCore::]): Added.
        (-[WKFullScreenWindowController _updateMenuAndDockForFullScreen]): Case changes.
        (-[WKFullScreenWindowController _disableIdleDisplaySleep]): Ditto.
        (-[WKFullScreenWindowController _enableIdleDisplaySleep]): Ditto.
        (-[WKFullScreenWindowController _disableIdleSystemSleep]): Ditto.
        (-[WKFullScreenWindowController _enableIdleSystemSleep]): Ditto.
        (-[WKFullScreenWindowController _enableTickleTimer]): Ditto.
        (-[WKFullScreenWindowController _disableTickleTimer]): Ditto.
        (-[WKFullScreenWindowController _tickleTimerFired]): Ditto.
        (-[WKFullScreenWindowController _updatePowerAssertions]): Use _isPlaying ivar.
        (-[WKFullScreenWindowController _manager]): Added.
        (-[WKFullScreenWindowController _requestExit]): Case changes.
        (-[WKFullScreenWindowController _requestExitFullScreenWithAnimation:]): Ditto.
        (-[WKFullScreenWindowController _swapView:with:]): Added.
        (-[WKFullScreenWindowController _fullScreenWindow]): Case changes.
        (-[WKFullScreenWindow initWithContentRect:styleMask:backing:defer:]): Geometry no
            longer needs to be flipped.
        (-[WKFullScreenWindow cancelOperation:]): Case changes.

2011-03-11  Jer Noble  <jer.noble@apple.com>

        Reviewed by Anders Carlsson.

        Create new interface stubs to support full screen mode in WebKit2.

        WebKit2: Plumb new full screen animation APIs through WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=55993

        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::WebFullScreenManagerProxy): Added.
        (WebKit::WebFullScreenManagerProxy::invalidate): Clear m_webView.
        (WebKit::WebFullScreenManagerProxy::setWebView): Set m_webView.
        (WebKit::WebFullScreenManagerProxy::beginEnterFullScreenAnimation): Added.
        (WebKit::WebFullScreenManagerProxy::beginExitFullScreenAnimation): Added.
        (WebKit::WebFullScreenManagerProxy::beganEnterFullScreenAnimation): Added stub.
        (WebKit::WebFullScreenManagerProxy::finishedEnterFullScreenAnimation): Added stub.
        (WebKit::WebFullScreenManagerProxy::beganExitFullScreenAnimation): Added stub.
        (WebKit::WebFullScreenManagerProxy::finishedExitFullScreenAnimation): Added stub.
        (WebKit::WebFullScreenManagerProxy::enterAcceleratedCompositingMode): Added stub.
        (WebKit::WebFullScreenManagerProxy::exitAcceleratedCompositingMode): Added stub.
        (WebKit::WebFullScreenManagerProxy::getFullScreenRect): Added stub.
        * UIProcess/WebFullScreenManagerProxy.h:
        * UIProcess/WebFullScreenManagerProxy.messages.in: Added new message definitions.
        * UIProcess/WebPageProxy.cpp: Moved include of WebFullScreenManagerProxy.h into source file.
        * UIProcess/WebPageProxy.h: Ditto.
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::element): Added.
        (WebKit::WebFullScreenManager::supportsFullScreen): Send message through WebPage.
        (WebKit::WebFullScreenManager::enterFullScreenForElement): Ditto.
        (WebKit::WebFullScreenManager::exitFullScreenForElement): Ditto.
        (WebKit::WebFullScreenManager::beganEnterFullScreenAnimation): Added..
        (WebKit::WebFullScreenManager::finishedEnterFullScreenAnimation): Added.
        (WebKit::WebFullScreenManager::beganExitFullScreenAnimation): Added.
        (WebKit::WebFullScreenManager::finishedExitFullScreenAnimation): Added.
        (WebKit::WebFullScreenManager::setRootFullScreenLayer): Added stub.
        (WebKit::WebFullScreenManager::getFullScreenRect): Added.
        (WebKit::WebFullScreenManager::beginEnterFullScreenAnimation): Added stub.
        (WebKit::WebFullScreenManager::beginExitFullScreenAnimation): Added stub.
        * WebProcess/FullScreen/WebFullScreenManager.h:
        * WebProcess/FullScreen/WebFullScreenManager.messages.in: Added new message definitions.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::setRootFullScreenLayer): Added.
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2011-03-11  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        Support encoding /decoding WebData in usermessages
        https://bugs.webkit.org/show_bug.cgi?id=56158

        Added encoding/decoding for APIObject::TypeData
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        (WebKit::UserMessageDecoder::baseDecode):

2011-03-11  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        Add api for "remove" to WKMutableDictionary
        https://bugs.webkit.org/show_bug.cgi?id=56157

        * Shared/API/c/WKMutableDictionary.cpp:
        (WKDictionaryRemoveItem): Added; call remove on MutableDictionary impl.
        * Shared/API/c/WKMutableDictionary.h:
        * Shared/MutableDictionary.cpp:
        (WebKit::MutableDictionary::remove): Added; call remove on the underlying hashmap.
        * Shared/MutableDictionary.h:

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

        Unreviewed, rolling out r80899 and r80912.
        http://trac.webkit.org/changeset/80899
        http://trac.webkit.org/changeset/80912
        https://bugs.webkit.org/show_bug.cgi?id=56236

        Caused animation tests to crash on Snow Leopard WebKit2
        (Requested by rniwa on #webkit).

        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::create):
        (WebKit::ShareableBitmap::createShareable):
        (WebKit::ShareableBitmap::resize):
        * Shared/ShareableBitmap.h:
        (WebKit::ShareableBitmap::numBytesForSize):
        (WebKit::ShareableBitmap::sizeInBytes):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::update):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::didUpdate):
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::~DrawingAreaImpl):
        (WebKit::DrawingAreaImpl::sendDidUpdateBackingStoreState):
        (WebKit::DrawingAreaImpl::didUpdate):
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
        (WebKit::DrawingAreaImpl::display):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/SharedMemoryCache.cpp: Removed.
        * WebProcess/WebPage/SharedMemoryCache.h: Removed.
        * win/WebKit2.vcproj:

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

        Windows build fix. Add SharedMemoryCache to the vcproj.

        * win/WebKit2.vcproj:

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

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=56222
        A window remains frozen if web process crashes during printing

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setComplexTextInputEnabled):
        * UIProcess/WebPageProxy.h:
        Moved setAutodisplay code into WKPrintingView.

        * UIProcess/API/mac/WKPrintingView.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView printOperationWithPrintInfo:forFrame:]):
        Keep a reference to the actual WKView, so that we can manipulate how it displays, even if
        page goes away.

        * UIProcess/API/mac/WKPrintingView.mm:
        (-[WKPrintingView initWithFrameProxy:WebKit::view:]):
        (-[WKPrintingView _setAutodisplay:]):
        (-[WKPrintingView _suspendAutodisplay]):
        (-[WKPrintingView _delayedResumeAutodisplayTimerFired]):
        Move setAutodisplay here.

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

        Reviewed by Sam Weinig.

        Add a shared memory cache to the web process
        https://bugs.webkit.org/show_bug.cgi?id=56232

        Add a very simple shared memory cache to the web process, so that we don't have to allocate and
        free memory over and over when painting.

        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::create):
        (WebKit::ShareableBitmap::createShareable):
        (WebKit::ShareableBitmap::resize):
        * Shared/ShareableBitmap.h:
        (WebKit::ShareableBitmap::numBytesNeededForBitmapSize):
        (WebKit::ShareableBitmap::sizeInBytes):
        Rename numBytesForSize to numBytesNeededForBitmapSize.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::update):
        Always send back a DidUpdate message, even if we didn't use the update info.
        This is needed so that the web process knows when the UI process is done with the shared memory inside
        the update info struct.

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

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::didUpdate):
        * WebProcess/WebPage/DrawingArea.messages.in:
        DidUpdate now takes a boolean.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::sharedMemoryCache):
        Add shared memory cache.

        (WebKit::DrawingAreaImpl::~DrawingAreaImpl):
        Return the shared memory to the cache.

        (WebKit::DrawingAreaImpl::sendDidUpdateBackingStoreState):
        display now takes an extra boolean.

        (WebKit::DrawingAreaImpl::didUpdate):
        Return the shared memory to the cache.

        (WebKit::DrawingAreaImpl::display):
        If useSharedMemoryCache is true, get shared memory from the cache.

        * WebProcess/WebPage/SharedMemoryCache.cpp: Added.
        (WebKit::SharedMemoryCache::acquireSharedMemory):
        If the memory we currently hold on to is big enough, return it.

        (WebKit::SharedMemoryCache::releaseSharedMemory):
        If we're already holding on to shared memory, evict it if the returned
        shared memory object is bigger than the one we currently hold.

        (WebKit::SharedMemoryCache::clearCacheTimerFired):
        Null out the shared memory object.

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

        Reviewed by Adam Roben.

        Crash calling WebContext::clearResourceCaches(InMemoryResourceCachesOnly) before the Web
        Process has finished launching.
        https://bugs.webkit.org/show_bug.cgi?id=56208

        Only send the message if the Web Process is valid.

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

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

        Reviewed by Dan Bernstein.

        Don't paint more than 60 times per second
        https://bugs.webkit.org/show_bug.cgi?id=56206
        <rdar://problem/9085989>

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        Initialize m_lastDisplayTime to 0. Change the display timer to call displayTimerFired.

        (WebKit::DrawingAreaImpl::didUpdate):
        Call displayTimerFired instead of display.

        (WebKit::DrawingAreaImpl::displayTimerFired):
        If we're asked to paint again less than 1/60th of a second after we've already painted,
        defer painting.

        (WebKit::DrawingAreaImpl::display):
        Update m_lastDisplayTime.

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

        Reviewed by Alice Liu.

        <rdar://problem/9120161> WKPageRestoreFromSessionState does not set the pending API request URL.

        * UIProcess/cf/WebPageProxyCF.cpp:
        (WebKit::WebPageProxy::restoreFromSessionStateData): If we're navigating to a back/forward item
        as part of the restoration, call setPendingAPIRequestURL. When there's a provisional URL this will
        be done by our call to loadURL elsewhere in the function.

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

        Reviewed by Jon Honeycutt.

        WebKit2 UI process crashes if web process crashes while computing page rects for printing
        https://bugs.webkit.org/show_bug.cgi?id=56160
        <rdar://problem/9027410>

        * UIProcess/API/mac/WKPrintingView.mm:
        (-[WKPrintingView _suspendAutodisplay]): Added a null check for page, matching one that
        we have when resuming autodisplay.
        (-[WKPrintingView _delayedResumeAutodisplayTimerFired]): Added a FIXME.
        (pageDidComputePageRects): Sanitize results coming from the web process (and avoid crashing
        when there is a communication error, so results are all null).
        (-[WKPrintingView knowsPageRange:]): If there is no page any more, we can't tell how many
        pages it had.
        (-[WKPrintingView rectForPage:]): Handle the case where we are neither calculating pages
        nor knowing them, as it happens when the web process crashes.        

2011-03-10  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Sam Weinig.

        Part of <rdar://problem/8728860> WebKit2 needs to be made localizable

        The presence of CFBundleDevelopmentRegion in the application's Info.plist prevents
        the default localization that we set during launch from being respected.

        * PluginProcess/Info.plist: Remove CFBundleDevelopmentRegion.
        * WebProcess/Info.plist: Ditto.

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

        Build for WebKit2 GTK+ after r80714.

        * GNUmakefile.am: Update source list.
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp: 
        (WebKit::x11Display): Add missing semicolon.

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

        Reviewed by Darin Adler.

        REGRESSION (WebKit2): VoiceOver focus no longer follows keyboard focus
        https://bugs.webkit.org/show_bug.cgi?id=55959

        NSApplication has to return the focused element within the app in order
        for NSAccessibilityHandleFocusChanged() to work. The default implementation
        relies on keyWindow. Consequently, in WK2, the WebProcess must override that method
        to return the appropriate focused element within the WebProcess, since
        there is no keyWindow.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/mac/AccessibilityWebPageObject.mm:
        (-[AccessibilityWebPageObject accessibilityFocusedUIElement]):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::focusedWebPage):
        * WebProcess/WebProcess.h:
        * WebProcess/mac/NSApplicationOverride.mm: Added.
        (-[NSApplication accessibilityFocusedUIElement]):

2011-03-10  Oleg Romashin  <romaxa@gmail.com>

        Reviewed by Andreas Kling.

        Make Qt port compiling with ENABLE_PLUGIN_PROCESS=1, part3
        Solving conflict of Qt and Xlib includes

        * Shared/Plugins/NPIdentifierData.cpp:
        * Shared/Plugins/NPIdentifierData.h:
        * Shared/Plugins/NPObjectProxy.cpp:
        * Shared/Plugins/NPVariantData.h:

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

        Reviewed by Mark Rowe.

        - Fix plugins in release and production builds.

        * WebKit2.xcodeproj/project.pbxproj:
        Make sure to base the PluginProcess target on the correct xcconfig file
        in all configurations.

2011-03-09  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Plumb through settings for accelerated drawing for canvas
        https://bugs.webkit.org/show_bug.cgi?id=56039

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:

2011-03-10  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Oliver Hunt and Brian Weinstein.

        WebKit2: Need a way to clear only the in-memory resource caches
        https://bugs.webkit.org/show_bug.cgi?id=56022

        Add a parameter to WKContextClearResourceCaches to specify whether to clear all the caches
        or just the memory caches.

        * Shared/ResourceCachesToClear.h: Added.
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toResourceCachesToClear):

        * UIProcess/API/C/WKContext.cpp:
        (WKContextClearResourceCaches):
        Add the new parameter.
        * UIProcess/API/C/WKContext.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::clearResourceCaches):
        Ditto.
        * UIProcess/WebContext.h:

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::clearResourceCaches):
        Pass the new parameter through to the platform-specific functions.
        * WebProcess/WebProcess.h:
        Add the new parameter and give it a default of AllResourceCaches.
        * WebProcess/WebProcess.messages.in:
        Ditto.
        * WebProcess/gtk/WebProcessGtk.cpp:
        (WebKit::WebProcess::platformClearResourceCaches):
        Ditto.
        * WebProcess/qt/WebProcessQt.cpp:
        (WebKit::WebProcess::platformClearResourceCaches):
        Ditto.
        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformClearResourceCaches):
        When told to clear only the in-memory caches, return early so as not to clear the CFNetwork
        disk cache.
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformClearResourceCaches):
        Ditto.

        * WebKit2.xcodeproj/project.pbxproj:
        Add ResourceCachesToClear.h
        * win/WebKit2.vcproj:
        Ditto.

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

        Reviewed by Adam Roben.

        WKViewRegisterEditCommandCallback should use WKViewUndoType
        https://bugs.webkit.org/show_bug.cgi?id=56120

        * UIProcess/API/C/win/WKView.h: Change undoOrRedo parameter in WKViewRegisterEditCommandCallback to be WKViewUndoType.

2011-03-10  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Kenneth Rohde Christiansen.

        Tiled backing store's delegated scroll request uses incorrect convention
        https://bugs.webkit.org/show_bug.cgi?id=56011

        Adapt all of the internal API to match the delta to point
        conversion at the WebCore side.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::pageDidRequestScroll):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::pageDidRequestScroll):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::delegatedScrollRequested):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::pageDidRequestScroll):
        * WebProcess/WebPage/WebPage.h:

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

        Reviewed by Andreas Kling.

        [WK2] Make non-transparent windowless plugins paint on X11
        https://bugs.webkit.org/show_bug.cgi?id=55660

        Implement painting for non-transparent windowless X11 plugins.
        The essence of the logic has been adapted from WebCore.
        The implementation is stubbed for GTK and working only on Qt
        but it should be really easy to finish it for GTK.

        * WebKit2.pro:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue): Handle X11 specific values that are necessary.
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin): Initialize the X11 specific
        members that has been added.
        (WebKit::NetscapePlugin::callSetWindow): Always set the x and y coordinates
        of the NP_Window to 0 on X11 since we are using a backings store as the
        painting area for the plugin.
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/gtk/NetscapePluginGtk.cpp: Removed in favour
        of a common implementation for X11.
        * WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp: Ditto.
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp: Added.
        (WebKit::getPluginDisplay):

        Platform specific static getters.
        (WebKit::x11Display):
        (WebKit::displayDepth):
        (WebKit::rootWindowID):
        (WebKit::x11Screen):

        (WebKit::NetscapePlugin::platformPostInitialize): Set up the visual
        settings and the colormap for the plugin.
        (WebKit::NetscapePlugin::platformDestroy):
        (WebKit::NetscapePlugin::platformInvalidate): Remained stub.
        (WebKit::NetscapePlugin::platformGeometryDidChange): Create a new
        pixmap that fits the geometry.
        (WebKit::NetscapePlugin::platformPaint): Propagate a paint event
        to the plugin, sync with it if necessary and draw the pixmap to
        the screen.
        (WebKit::toNP): Remained stub.
        (WebKit::NetscapePlugin::platformHandleMouseEvent): Remained stub.
        (WebKit::NetscapePlugin::platformHandleWheelEvent): Remained stub.
        (WebKit::NetscapePlugin::platformSetFocus): Remained stub.
        (WebKit::NetscapePlugin::platformHandleMouseEnterEvent): Remained stub.
        (WebKit::NetscapePlugin::platformHandleMouseLeaveEvent): Remained stub.
        (WebKit::NetscapePlugin::platformHandleKeyboardEvent): Remained stub.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin): Hack. Inject wmode=opaque
        key-value pair to the plugin parameters to force Flash to act in
        non-transparent windowless mode. Qt also doing this in WebCore.

2011-03-09  Peter Kasting  <pkasting@google.com>

        Reviewed by Mihai Parparita.

        Unify Windows version checks.
        https://bugs.webkit.org/show_bug.cgi?id=55979

        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::WebPageProxy::standardUserAgent):

2011-03-09  Adele Peterson  <adele@apple.com>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=56068
        <rdar://problem/9058245> WebKit2: Can't uncheck 'Spelling and Grammar' contextual items

        * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::contextMenuItemSelected):
        Add cases for ContextMenuItemTagCorrectSpellingAutomatically, ContextMenuItemTagCheckSpellingWhileTyping, 
        and ContextMenuItemTagCheckGrammarWithSpelling

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

        Reviewed by Dan Bernstein.

        Frequent crashes when printing in WebPageProxy::setAutodisplay
        https://bugs.webkit.org/show_bug.cgi?id=56057
        <rdar://problem/9053290>

        * UIProcess/API/mac/WKPrintingView.mm: (-[WKPrintingView _delayedResumeAutodisplayTimerFired]):
        Null check the page, there is no reason for it to still exist.

2011-03-09  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction.

        * UIProcess/DrawingAreaProxy.messages.in: Exclude the other
          method using LayerTreeContext for non-accelerated composition case.

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

        Reviewed by Anders Carlsson.

        Change plugins to use their own executable on Mac OS X
        https://bugs.webkit.org/show_bug.cgi?id=55991

        * Configurations/PluginProcess.xcconfig: Copied from Source/WebKit2/Configurations/WebProcess.xcconfig.
        * PluginProcess/Info.plist: Copied from Source/WebKit2/WebProcess/Info.plist.
        Add files necessary for adding PluginProcess.app.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        Launch the PluginProcess.app when launching a plugin process.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new executable and new files, removes some unneeded copying
        and duplicate compiling of files.

        * WebProcess/Info.plist:
        Sorted.

2011-03-09  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        Use the Cookie Storage from the Private Browsing Storage Session directly
        https://bugs.webkit.org/show_bug.cgi?id=55986

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

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

        Fix compilation after r80596, add soup Download stubs.

        * GNUmakefile.am:
        * WebProcess/Downloads/soup/DownloadSoup.cpp: Added.
        (WebKit::Download::start):
        (WebKit::Download::startWithHandle):
        (WebKit::Download::cancel):
        (WebKit::Download::platformInvalidate):
        (WebKit::Download::didDecideDestination):
        (WebKit::Download::platformDidFinish):

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

        Fix GTK+ compilation after r80619. Add WebFullScreenManager.

        * GNUmakefile.am:

2011-03-08  Jer Noble  <jer.noble@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Plumb through the FULLSCREEN_API Chrome client calls
        https://bugs.webkit.org/show_bug.cgi?id=55273

        The FULLSCREEN_API Chrome client calls need to be plumbed through from the 
        WebProcess to the UIProcess.  To do this, WebFullScreenManager (and Proxy)
        classes have been added to WebPage.

        * DerivedSources.make: Added rules necessary to build DerivedSources for new .in files.
        * DerivedSources.pro: Ditto.
        * Platform/CoreIPC/MessageID.h: Added message types for WebFullScreenManager.
        * Shared/API/c/WKBase.h: Added WKFullScreenManagerRef.
        * Shared/APIObject.h: Added APIType for WebFullScreenManager.
        * UIProcess/WebFullScreenManagerProxy.cpp: Added.
        * UIProcess/WebFullScreenManagerProxy.h: Added.
        * UIProcess/WebFullScreenManagerProxy.messages.in: Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close): Invalidate and clear m_fullScreenManager.
        (WebKit::WebPageProxy::processDidCrash): Ditto.
        (WebKit::WebPageProxy::didReceiveMessage): Pass messages on to WebFullScreenManagerProxy.
        (WebKit::WebPageProxy::didReceiveSyncMessage): Ditto.
        (WebKit::WebPageProxy::fullScreenManager): Added. Lazy instantiation of m_fullScreenManager.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebUIClient.cpp:
        * UIProcess/WebUIClient.h:
        * WebKit2.xcodeproj/project.pbxproj: Added references to new classes in project file.
        * WebKit2.pro: Ditto.
        * win/WebKit2.vcproj: Ditto.
        * WebKit2.pri: Added new directories to include file path.
        * win/WebKit2Common.vsprops: Ditto.
        * WebProcess/FullScreen/WebFullScreenManager.cpp: Added.
        * WebProcess/FullScreen/WebFullScreenManager.h: Added.
        * WebProcess/FullScreen/WebFullScreenManager.messages.in: Added.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::supportsFullScreenForElement): Pass through to WebFullScreenManager.
        (WebKit::WebChromeClient::enterFullScreenForElement): Ditto.
        (WebKit::WebChromeClient::exitFullScreenForElement): Ditto.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close): Invalidate and clear m_fullScreenManager.
        (WebKit::WebPage::fullScreenManager): Lazy instantiation of m_fullScreenManager.
        (WebKit::WebPage::didReceiveMessage): Pass messages through to WebFullScreenManager.
        * WebProcess/WebPage/WebPage.h:

2011-03-08  Jer Noble  <jer.noble@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Plumb through the "supportsFullScreen" preference.
        https://bugs.webkit.org/show_bug.cgi?id=55261

        The "supportsFullScreen" preference needs to be plumbed through from
        the UIProcess to the WebProcess.

        * Shared/WebPreferencesStore.h: Add a new macro entry.
        * UIProcess/API/C/WKPreferences.cpp: Implement preferences getter and setter.
        (WKPreferencesSetFullScreenEnabled):
        (WKPreferencesGetFullScreenEnabled):
        * UIProcess/API/C/WKPreferences.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Sync the fullScreenEnabled setting through to
            the settings object.

2011-03-08  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adele Peterson.

        WebKit2: Implement Windows glue for Undo/Redo
        https://bugs.webkit.org/show_bug.cgi?id=55961
        
        Expose Undo/Redo infrastructure through WKView on Windows by
        adding an undo client as well as APIs to reapply and unapply
        an edit command.

        * UIProcess/API/C/win/WKView.cpp:
        (WKViewSetViewUndoClient): Added.
        (WKViewReapplyEditCommand): Added.
        (WKViewUnapplyEditCommand): Added.
        * UIProcess/API/C/win/WKView.h: Added WKViewUndoClient, WKViewSetViewUndoClient(), and WKViewUnapplyEditCommand().
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::isValidEditCommand): Added, used to validated an edit command from a WKView API.
        * UIProcess/WebPageProxy.h: Added isValidEditCommand().
        * UIProcess/win/WebUndoClient.cpp: Added, APIClient for WKViewUndoClient. 
        (WebKit::WebUndoClient::registerEditCommand): Added.
        (WebKit::WebUndoClient::clearAllEditCommands): Added.
        * UIProcess/win/WebUndoClient.h: Added, APIClient for WKViewUndoClient.
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::initializeUndoClient): Added.
        (WebKit::WebView::close): Clear out undo client.
        (WebKit::WebView::registerEditCommand): Implemented to call through to WKViewUndoClient.
        (WebKit::WebView::clearAllEditCommands): Implmented to call through to WKViewUndoClient.
        (WebKit::WebView::reapplyEditCommand): Added.
        (WebKit::WebView::unapplyEditCommand): Added.
        * UIProcess/win/WebView.h: Added undo client support.
        * win/WebKit2.vcproj: Added WebUndoClient.cpp and WebUndoClient.h.

2011-03-08  Jeff Miller  <jeffm@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Expose WebEditCommandProxy in the C API on Windows
        https://bugs.webkit.org/show_bug.cgi?id=55962
        
        Make WebEditCommandProxy a subclass of APIObject, and define
        WKEditCommandRef as the type that will be exposed through the C API.

        * Shared/API/c/win/WKBaseWin.h: Add WKEditCommandRef.
        * Shared/APIObject.h: Add platform-specific TypeEditCommandProxy.
        * UIProcess/API/C/win/WKAPICastWin.h: Add API mapping for WKEditCommandRef.
        * UIProcess/WebEditCommandProxy.h: Subclass WebEditCommandProxy from APIObject.
        (WebKit::WebEditCommandProxy::type): Added.

2011-03-08  Jeff Miller  <jeffm@apple.com>

        Reviewed by Oliver Hunt.

        WebKit2: Redo is broken
        https://bugs.webkit.org/show_bug.cgi?id=55978
        
        WebEditCommandProxy::unapply() and WebEditCommandProxy::reapply() were registering the wrong edit command when an undo or redo happens.
        For example, when we unapply(), we should register a Redo command, not an Undo command.

        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::unapply): Register a Redo command, not an Undo command.
        (WebKit::WebEditCommandProxy::reapply): Register an Undo command, not a Redo command.

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

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=55977
        Refine CF/CFNet distinctions for better code sharing.
        1. Rename Downloads/cf/win/DownloadCFNetWin.cpp to DownloadCFWin.cpp
           since it does not use any CFNETWORK features.
        2. Create new cfnet directory.
        3. Move Downloads/cf/DownloadCFNet.cpp to Downloads/cfnet
        4. Update project file.

        * WebProcess/Downloads/cf/DownloadCFNet.cpp: Removed.
        * WebProcess/Downloads/cf/win/DownloadCFNetWin.cpp: Removed.
        * WebProcess/Downloads/cf/win/DownloadCFWin.cpp: Copied from WebProcess/Downloads/cf/win/DownloadCFNetWin.cpp.
        * WebProcess/Downloads/cfnet: Added.
        * WebProcess/Downloads/cfnet/DownloadCFNet.cpp: Copied from WebProcess/Downloads/cf/DownloadCFNet.cpp.
        * win/WebKit2.vcproj:

2011-03-08  Mark Rowe  <mrowe@apple.com>

        Reviewed by Brady Eidson.

        <http://webkit.org/b/55976> Provisional URL should be loaded when restoring session state even if there are back / forward list entries.

        * UIProcess/cf/WebPageProxyCF.cpp:
        (WebKit::WebPageProxy::restoreFromSessionStateData): If there's a provisional URL that we will load then restore the session state
        without navigating to the current item.
        * WebProcess/WebPage/WebPage.messages.in: Expose the ability to restore the session state without navigating to the current item.

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

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=55956
        WebKit2 Changes to correct WinCairo port build

        * Shared/LayerTreeContext.h: Don't exclude CoreIPC declarations for non-accelerated
          compositing case.
        * UIProcess/DrawingAreaProxy.h: Add "stdint.h" include needed for Cairo build.
        * UIProcess/DrawingAreaProxyImpl.cpp: Exclude accelerated compositing code for
          WinCairo build.
        (WebKit::DrawingAreaProxyImpl::~DrawingAreaProxyImpl):
        (WebKit::DrawingAreaProxyImpl::didUpdateBackingStoreState):
        (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxyImpl::sendUpdateBackingStoreState):
        (WebKit::DrawingAreaProxyImpl::waitForAndDispatchDidUpdateBackingStoreState):
        * UIProcess/DrawingAreaProxyImpl.h: Exclude declarations for code only used when
          accelerated compositing is enabled.
        (WebKit::DrawingAreaProxyImpl::isInAcceleratedCompositingMode):
        * UIProcess/win/WebView.cpp: Protect CG-specific drawing code.
        (WebKit::WebView::setFindIndicator):
        * WebProcess/Downloads/Download.h: Allow CFLite implentation to share overwrite flag,
          as well as destination and bundle paths.
        * WebProcess/Downloads/curl/DownloadCurl.cpp: Remove stub (to share CFNet implementation
          of file handling.  This will be moved to a common area in a future patch.)
        * WebProcess/WebPage/DrawingAreaImpl.cpp: Exclude accelerated-compositing paths.
        (WebKit::DrawingAreaImpl::layerHostDidFlushLayers):
        (WebKit::DrawingAreaImpl::sendDidUpdateBackingStoreState):
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
        * WebProcess/WebPage/WebPage.cpp: Protect CG-specific drawing code.
        (WebKit::WebPage::drawRectToPDF):
        (WebKit::WebPage::drawPagesToPDF):
        * win/WebKit2.vcproj: Exclude unused LayerTreeContext from WinCairo

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

        Reviewed by Sam Weinig.

        Re-fix: can't paste from 3rd party text editor into WebKit2 window
        <rdar://problem/8978624>

        * WebProcess/com.apple.WebProcess.sb:

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

        Fix the WebKit2 compilation after r80578.

        * UIProcess/gtk/WebView.cpp:
        (WebKit::WebView::setFocus): Added.
        * UIProcess/gtk/WebView.h:

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

        Reviewed by Anders Carlsson.

        Crash in CFNetwork visiting google.com
        https://bugs.webkit.org/show_bug.cgi?id=55958

        * Shared/API/c/cf/WKURLResponseCF.cpp:
        (WKURLResponseCopyCFURLResponse):
        If the response to copy is null, return 0;

2011-03-08  John Sullivan  <sullivan@apple.com>

        Reverted the patch for https://bugs.webkit.org/show_bug.cgi?id=55940
        
        The patch was insufficient, and it wasn't useful for the intended client use either.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

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

        Unreviewed, fixed GTK+ compilation after r80569.

        * UIProcess/gtk/WebView.cpp:
        (WebKit::WebView::windowToScreen):
        * UIProcess/gtk/WebView.h:

2011-03-08  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Sam Weinig.

        WK2: Cannot set focus on an element when focus is outside of WKView
        https://bugs.webkit.org/show_bug.cgi?id=55281

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setFocus):
        * UIProcess/API/qt/qwkpage_p.h:
        (QWKPagePrivate::setFocus):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setFocus):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/win/WebView.h:
        (WebKit::WebView::setFocus):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::focus):
        (WebKit::WebChromeClient::unfocus):

2011-03-08  Jeff Miller  <jeffm@apple.com>

        Unreviewed, fix last change so WKBaseWin.h is in alphabetical order in the project XML.

        * win/WebKit2.vcproj: Move WKBaseWin.h to be in alphabetical order.

2011-03-08  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Remove Source/WebKit2/UIProcess/API/C/win/WKBaseWin.h
        https://bugs.webkit.org/show_bug.cgi?id=55952

        * UIProcess/API/C/win/WKBaseWin.h: Removed.
        * win/WebKit2.vcproj: Refer to the Shared version of WKBaseWin.h instead of the one in UIProcess.

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

        Reviewed by Martin Robinson.

        [GTK] Add new files to compilation after r77974
        https://bugs.webkit.org/show_bug.cgi?id=54076

        The commit added new code to allow passing context to policy
        delegate methods, we also added dummy ResourceRequest and
        ResourceResponse decoders until we implement them.

        * GNUmakefile.am:
        * Shared/gtk/WebCoreArgumentCodersGtk.cpp:
        (CoreIPC::decodeResourceRequest):
        (CoreIPC::decodeResourceResponse):

2011-03-08  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: Webkit2 not sending UAZoomFocusChanged notifications
        https://bugs.webkit.org/show_bug.cgi?id=55916

        Needed to implement the windowToScreen() method so that the right frame
        could be calculated to send for zoom focus changes.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::windowToScreen):
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::windowToScreen):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::windowToScreen):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::windowToScreen):
        * UIProcess/win/WebView.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::windowToScreen):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::windowToScreen):
        * WebProcess/WebPage/WebPage.h:

2011-03-08  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=55940
        WebKit2 should support Ignore policy from injected bundle client

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        Added WKBundlePagePolicyActionIgnore.
        
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        If the injected bundle client returns WKBundlePagePolicyActionIgnore, convert it
        to the loader's PolicyIgnore.

2011-03-08  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] [Symbian] [WK2] Fix building WebKit 2 API tests
        https://bugs.webkit.org/show_bug.cgi?id=55876

        Make sure TESTS_SOURCE_DIR is set for Symbian the same way
        as it is for WK1.

        * UIProcess/API/qt/tests/qgraphicswkview/tst_qgraphicswkview.cpp:
        (tst_QGraphicsWKView::loadEmptyPage):
        * UIProcess/API/qt/tests/tests.pri:

2011-03-07  Damian Kaleta  <dkaleta@apple.com>

        Reviewed by Anders Carlsson.

        QuickTime plugin should opt in to a 32-bit non-executable heap
        https://bugs.webkit.org/show_bug.cgi?id=55704
        <rdar://problem/8105706>

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::pluginNeedsExecutableHeap): Decides per plugin if it should opt-in to a 32-bit non-executable heap.
        By default it should opt-out.
        (WebKit::PluginProcessProxy::PluginProcessProxy):

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

        Reviewed by Anders Carlsson.

        Add unableToImplementPolicy callback for WebKit2 policy client
        <rdar://problem/9071902>
        https://bugs.webkit.org/show_bug.cgi?id=55884

        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::unableToImplementPolicy):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebPolicyClient.cpp:
        (WebKit::WebPolicyClient::unableToImplementPolicy):
        * UIProcess/WebPolicyClient.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.cpp:
        (WebKit::InjectedBundlePagePolicyClient::unableToImplementPolicy):
        * WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchUnableToImplementPolicy):
        Pipe unableToImplementPolicy through both the bundle and the main WebKit2 API.

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

        Reviewed by Anders Carlsson.

        Replace WebKit2's decidePolicyForMIMEType with decidePolicyForResponse
        https://bugs.webkit.org/show_bug.cgi?id=55827

        - Renamed FrameLoaderClient::dispatchDecidePolicyForMIMEType to dispatchDecidePolicyForResponse
          and pass the entire response, instead of just the MIMEType.
        - Updated both UIProcess API and bundle API to also be based on the whole response, not just the
          MIMEType.

        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForResponse):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebPolicyClient.cpp:
        (WebKit::WebPolicyClient::decidePolicyForResponse):
        * UIProcess/WebPolicyClient.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.cpp:
        (WebKit::InjectedBundlePagePolicyClient::decidePolicyForResponse):
        * WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2011-03-06  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435.

        When Private Browsing is enabled, use cookies from a in-memory cookie storage based on the
        Private Browsing Storage Session.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        Add support for using the new WKSI functions in WebCore.

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

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Make Qt port compiling with ENABLE_PLUGIN_PROCESS=1, part1
        Adding dummy Qt files for Plugin Process implementation,
        Adding missing sources into Qt pro files
        https://bugs.webkit.org/show_bug.cgi?id=55719

        * DerivedSources.pro:
        * PluginProcess/qt: Added.
        * PluginProcess/qt/PluginControllerProxyQt.cpp: Added.
        (WebKit::PluginControllerProxy::platformInitialize):
        (WebKit::PluginControllerProxy::platformDestroy):
        (WebKit::PluginControllerProxy::platformGeometryDidChange):
        * PluginProcess/qt/PluginProcessMainQt.cpp: Added.
        (WebKit::PluginProcessMain):
        * PluginProcess/qt/PluginProcessQt.cpp: Added.
        (WebKit::PluginProcess::platformInitialize):
        * UIProcess/Plugins/qt/PluginProcessProxyQt.cpp: Added.
        (WebKit::PluginProcessProxy::platformInitializePluginProcess):
        * WebKit2.pri:
        * WebKit2.pro:
        * WebKit2API.pri:
        * WebProcess/Plugins/Netscape/qt/PluginProxyQt.cpp: Added.
        (WebKit::PluginProxy::needsBackingStore):

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

        Reviewed by Dan Bernstein.

        Remove unneeded onPageClose function from DrawingArea
        https://bugs.webkit.org/show_bug.cgi?id=55836

        * WebProcess/WebPage/DrawingArea.h:
        Remove empty function.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):
        Remove only called

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

        WK2 Mac build fix.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageComputePagesForPrinting):
        (WKPageBeginPrinting):

        * UIProcess/API/C/WKPagePrivate.h:

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

        WK2 Mac build fix.

        * UIProcess/API/C/WKPagePrivate.h:

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

        WK2 needs printing support on Windows
        https://bugs.webkit.org/show_bug.cgi?id=55800
        <rdar://problem/8903808>

        Reviewed by Darin Adler.

        * UIProcess/API/C/WKPage.cpp:
        (ComputedPagesContext::ComputedPagesContext):
        (computedPagesCallback):
        From the Vector of WebCore::IntRects, build up a Vector of WKRects.
        Call the callback, passing these rects and the scale factor.
        (printInfoFromWKPrintInfo):
        Return a PrintInfo structure from the WKPrintInfo.
        (WKPageComputePagesForPrinting):
        Call WebPageProxy::computePagesForPrinting(). Pass
        computedPagesCallback as the callback function, so that we can
        translate the WebCore rect type to WKRect before calling the caller's
        callback function.
        (WKPageBeginPrinting):
        Call WebPageProxy::beginPrinting().
        (WKPageDrawPagesToPDF):
        Call WebPageProxy::drawPagesToPDF().

        * UIProcess/API/C/WKPagePrivate.h:
        Declare the WKPrintInfo type and new functions.

        * UIProcess/WebPageProxy.cpp:
        Compile this code on Windows.

        * UIProcess/WebPageProxy.h:
        Ditto.

        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::paint):
        We're painting the window; leave printing mode.

        * WebProcess/WebPage/WebPage.cpp:
        Compile this code on Windows.

        * WebProcess/WebPage/WebPage.h:
        Ditto.

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

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

        Reviewed by Darin Adler.

        Adopt VersionStamper tool for Windows WebKit DLLs
        https://bugs.webkit.org/show_bug.cgi?id=55784
        <rdar://problem/9021320>

        We now use a tool to stamp the version number onto the Apple WebKit DLLs
        during the post-build step.

        Fetch the WebKit version from a string resource instead of the version resource.

        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::userVisibleWebKitVersionString): Fetch version from a string resource.
        * win/WebKit2.rc: Removed version, added stringtable.
        * win/WebKit2WebProcess.rc: Removed.
        * win/WebKit2WebProcess.vcproj:
        * win/WebKit2WebProcessPostBuild.cmd: Don't run autoversion script. It isn't used in this project.
        * win/WebKit2WebProcessPreBuild.cmd: Stamp version.
        * win/WebKitPostBuild.cmd: Stamp version.

2011-03-04  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Add WKPageValidateCommand()
        https://bugs.webkit.org/show_bug.cgi?id=55793
        
        On the Mac, validation of edit menu commands is handled within WebKit2 in WKView.mm.
        However, on Windows we need to do this in the client, so expose this functionality
        in the API via WKPageValidateCommand().
        
        Change the Mac implementation to call WebPageProxy::validateCommand() with a callback
        to match this new API, so it no longer has to go through PageClient to get notified
        when a command is validated.  This makes PageClient::setEditCommandState() obsolete,
        so I removed the stub implementations in qt and gtk as well.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageValidateCommand): Added.
        * UIProcess/API/C/WKPage.h: Added WKPageValidateCommand().
        * UIProcess/API/mac/PageClientImpl.h: Removed setEditCommandState().
        * UIProcess/API/mac/PageClientImpl.mm: Removed setEditCommandState().
        * UIProcess/API/mac/WKView.mm:
        (validateCommandCallback): Added.
        (-[WKView validateUserInterfaceItem:]): Pass callback to validateCommand().
        * UIProcess/API/qt/qwkpage.cpp: Removed setEditCommandState().
        * UIProcess/API/qt/qwkpage_p.h: Removed setEditCommandState().
        * UIProcess/PageClient.h: Removed setEditCommandState().
        * UIProcess/WebPageProxy.cpp: Removed didValidateCommand().
        (WebKit::WebPageProxy::validateCommand): This now takes a callback.
        (WebKit::WebPageProxy::validateCommandCallback): Added.
        (WebKit::WebPageProxy::processDidCrash): Invalidate m_validateCommandCallbacks.
        * UIProcess/WebPageProxy.h: Removed didValidateCommand(), validateCommand() now takes a callback.
        (WebKit::ValidateCommandCallback::create): Added.
        (WebKit::ValidateCommandCallback::~ValidateCommandCallback): Added.
        (WebKit::ValidateCommandCallback::performCallbackWithReturnValue): Added.
        (WebKit::ValidateCommandCallback::invalidate): Added.
        (WebKit::ValidateCommandCallback::ValidateCommandCallback): Added.
        * UIProcess/WebPageProxy.messages.in: Removed DidValidateCommand, added ValidateCommandCallback.
        * UIProcess/gtk/WebView.cpp: Removed setEditCommandState().
        * UIProcess/gtk/WebView.h: Removed setEditCommandState().
        * UIProcess/win/WebView.cpp: Removed setEditCommandState().
        * UIProcess/win/WebView.h: Removed setEditCommandState().
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::validateCommand): This now takes a callbackID.
        * WebProcess/WebPage/WebPage.h: validateCommand now takes a callbackID.
        * WebProcess/WebPage/WebPage.messages.in: ValidateCommand now takes a callbackID.

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

        Reviewed by Darin Adler.

        Reference-counting for WKBundlePageResourceLoadClient::willSendRequestForFrame seems unclear/wrong
        https://bugs.webkit.org/show_bug.cgi?id=53919
        <rdar://problem/8966020>
        
        Adopt the result of m_client.willSendRequestForFrame (which will be leaked by the client).

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

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

        Reviewed by Mark Rowe.

        WebKit2 session state should include even loads too new to be in the back/forward list
        https://bugs.webkit.org/show_bug.cgi?id=55781
        part of <rdar://problem/8968847>

        * UIProcess/cf/WebPageProxyCF.cpp:
        (WebKit::WebPageProxy::sessionStateData): Save URLs that are early enough in the loading
        process to not be included in the back/forward list yet: The pending API request URL and
        the provisional URL.
        (WebKit::WebPageProxy::restoreFromSessionStateData): Call loadURL if the back/forward
        list is not restored and a URL is present. Later we can improve the way we handle the
        case where we have both a back/forward list and a URL.

2011-03-04  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435.

        Add in the CFURLSTORAGESESSIONS guards that I incorrectly left out because the code was
        contained within guards that made USE(CFURLSTORAGESESSIONS) always be true.

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

2011-03-04  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435.

        When Private Browsing is enabled, get the cached url response from the cache associated with
        the Private Browsing Storage Session.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformHasLocalDataForURL):
        If Private Browsing is enabled, call into WKSI to get the response.
        (WebKit::WebPage::cachedResponseMIMETypeForURL):
        Ditto.
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::WebPage::platformHasLocalDataForURL):
        If Private Browsing is enabled, call into WKSI to get the CFURLCacheRef.
        (WebKit::WebPage::cachedResponseMIMETypeForURL):
        Ditto.

2011-03-04  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Move WKViewExecuteCommand() to WKPageExecuteCommand()
        https://bugs.webkit.org/show_bug.cgi?id=55744
        
        Executing a command operates on a page, so it makes more sense for it to be in WKPage.
        This also makes it available on all platforms, not just Windows.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageExecuteCommand): Added.
        * UIProcess/API/C/WKPage.h: Add WKPageExecuteCommand().
        * UIProcess/API/C/win/WKView.cpp: Remove WKViewExecuteCommand().
        * UIProcess/API/C/win/WKView.h: Remove WKViewExecuteCommand().

2011-03-04  Dan Bernstein  <mitz@apple.com>

        LLVM Compiler build fix.

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

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

        Make the WKPageRunJavaScriptFunction callback take a WKSerializedScriptValueRef.

        https://webkit.org/b/55623

        Reviewed by Darin Adler.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageRunJavaScriptInMainFrame): Use ScriptValueCallback.
        (callRunJavaScriptBlockAndRelease): Use WKSerializedScriptValueRef.
        * UIProcess/API/C/WKPage.h: Use WKSerializedScriptValueRef.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close): Call invalidateCallbackMap for m_scriptValueCallbacks.
        (WebKit::WebPageProxy::runJavaScriptInMainFrame): Take a ScriptValueCallback.
        (WebKit::WebPageProxy::scriptValueCallback): Added. Create a WebSerializedScriptValue
        from the DataReference before calling the callback.
        (WebKit::WebPageProxy::processDidCrash): Call invalidateCallbackMap for m_scriptValueCallbacks.
        * UIProcess/WebPageProxy.h: Added ScriptValueCallback and m_scriptValueCallbacks.
        * UIProcess/WebPageProxy.messages.in: Added ScriptValueCallback.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInMainFrame): Create a DataReference from a WebCore::SerializedScriptValue.
        And use ScriptValueCallback to send the message back.

2011-03-03  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Cleanup from https://bugs.webkit.org/show_bug.cgi?id=55427.
        
        Call WebCore::startObservingCookieChanges and WebCore::stopObservingCookieChanges
        on all platforms, and stub the functions on platforms that don't implement them.

        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::startObservingCookieChanges):
        (WebKit::WebCookieManager::stopObservingCookieChanges):

2011-03-03  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Refactor classes in GenericCallback.h
        https://bugs.webkit.org/show_bug.cgi?id=55732
        
        Since we're going to need to add additional callback classes, make a CallbackBase class that manages
        the context and the callback ID.  The existing callback classes (VoidCallback, GenericCallback, and
        ComputedPagesCallback) now all derive from CallbackBase.
        
        Fix bug in VoidCallback where we meant to implement the destructor, but we were implementing the default
        constructor instead (we forgot the leading ~).
 
        * UIProcess/GenericCallback.h:
        (WebKit::CallbackBase::~CallbackBase):
        (WebKit::CallbackBase::callbackID):
        (WebKit::CallbackBase::CallbackBase):
        (WebKit::CallbackBase::context):
        (WebKit::CallbackBase::generateCallbackID):
        (WebKit::VoidCallback::~VoidCallback):
        (WebKit::VoidCallback::performCallback):
        (WebKit::VoidCallback::invalidate):
        (WebKit::VoidCallback::VoidCallback):
        (WebKit::GenericCallback::create):
        (WebKit::GenericCallback::~GenericCallback):
        (WebKit::GenericCallback::performCallbackWithReturnValue):
        (WebKit::GenericCallback::invalidate):
        (WebKit::GenericCallback::GenericCallback):
        (WebKit::ComputedPagesCallback::create):
        (WebKit::ComputedPagesCallback::~ComputedPagesCallback):
        (WebKit::ComputedPagesCallback::performCallbackWithReturnValue):
        (WebKit::ComputedPagesCallback::invalidate):
        (WebKit::ComputedPagesCallback::ComputedPagesCallback):

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

        Don't assume the web process has had a chance to paint before the view has to paint

        Fixes <http://webkit.org/b/55739> REGRESSION (r80307): Lots of tests crashing in
        BackingStore::paint

        Reviewed by Anders Carlsson.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::paint): Bail if the web process hasn't had a chance to paint
        yet.

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

        Throw away DrawingAreaProxyImpl's backing store after not painting for 5 seconds

        The intent is to save memory for views that aren't painting.

        Fixes <http://webkit.org/b/51262> <rdar://problem/8782537> WebPageProxy should delete its
        backing store after not painting for a while

        Reviewed by Anders Carlsson.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl): Initialize our timer.
        (WebKit::DrawingAreaProxyImpl::paint): Don't bail if we don't have a backing store (but do
        bail if we're in accelerated compositing mode); we might have thrown it away to save memory
        but now are being asked to paint by the view. The existing code in this function will handle
        getting a new backing store if possible by blocking for a little while to try to receive a
        DidUpdateBackingStoreState message. Added an assertion that we do have a backing store if we
        don't have any outstanding UpdateBackingStoreState requests. After painting, call
        discardBackingStoreSoon to update our timer.
        (WebKit::DrawingAreaProxyImpl::discardBackingStoreSoon): Set the timer for 5 seconds in the
        future.
        (WebKit::DrawingAreaProxyImpl::discardBackingStore): Throw away the backing store, and tell
        the web process we'll need a full backing store update on the next paint.

        * UIProcess/DrawingAreaProxyImpl.h: Added m_discardBackingStoreTimer.

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

        Add a way to tell the web process to perform a full backing store update on its next paint

        Messages::DrawingArea::UpdateBackingStoreState now takes a boolean specifying whether the
        full backing store update should happen immediately or should be deferred until the next
        paint or compositing mode change occurs. The deferred update isn't used yet, but will be
        used when we start throwing away backing stores to save memory.

        Fixes <http://webkit.org/b/55730> UI process needs a way to tell the web process its backing
        store needs a full update on the next paint

        Reviewed by Anders Carlsson.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::paint): If we have an outstanding backing store state change
        request, tell the web process to perform the backing store update right away, in case we
        previously told it it could defer the update.
        (WebKit::DrawingAreaProxyImpl::sizeDidChange): Specify that we need an immediate backing
        store update.
        (WebKit::DrawingAreaProxyImpl::didUpdateBackingStoreState): We can no longer assert that we
        were waiting for a DidUpdateBackingStoreState message when we receive one, as it's possible
        for the web process to decide to send us this message on its own (if we asked it to do a
        deferred backing store update and then it needed to paint some part of the page). Specify
        that we need an immediate backing store update if the web process hasn't updated to our
        latest state, as we're about to draw potentially out-of-date bits to the screen and want to
        get the right bits as soon as possible. Also added a FIXME about a potential optimization.
        (WebKit::DrawingAreaProxyImpl::backingStoreStateDidChange): Added a RespondImmediatelyOrNot
        parameter, which is just passed through to sendUpdateBackingStoreState.
        (WebKit::DrawingAreaProxyImpl::sendUpdateBackingStoreState): Added a RespondImmediatelyOrNot
        parameter that is used to specify to the web process whether to perform the full backing
        store update immediately. We now only wait for a DidUpdateBackingStoreState message (and
        thus suppress any more UpdateBackingStoreState messages until one is received) when we ask
        the web process for an immediate response; otherwise we could end up accidentally calling
        waitForAndDispatchDidUpdateBackingStoreState when the web process hasn't been told to send
        us such a message.

        * UIProcess/DrawingAreaProxyImpl.h: Added RespondImmediatelyOrNot.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::updateBackingStoreState): Added respondImmediately argument.

        * WebProcess/WebPage/DrawingArea.messages.in: Added respondImmediately argument to
        UpdateBackingStoreState message.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl): Initialize new member that's used to track
        whether we should send a DidUpdateBackingStoreState message instead of an Update or
        compositing mode change message. This will be set to true when a deferred backing store
        update is pending.
        (WebKit::DrawingAreaImpl::layerHostDidFlushLayers): If a deferred update is pending, send a
        DidUpdateBackingStoreState message instead of a compositing mode change message.
        (WebKit::DrawingAreaImpl::updateBackingStoreState): Added respondImmediately argument. If
        we've already been told about this state ID (as can happen when the UI process decides it
        needs an immediate update to a state that it previously requested a deferred update to),
        don't bother updating the page's size, etc. In addition, if we've already sent a
        DidUpdateBackingStoreState message for this state, we don't have to do anything at all.
        Moved code to send the DidUpdateBackingStoreState message from here...
        (WebKit::DrawingAreaImpl::sendDidUpdateBackingStoreState): ...to here.
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode): Always update our dirty region,
        even if painting is suspended or we're in the process of updating the backing store state.
        It causes no harm and simplifies the code. If a deferred update is pending, send a
        DidUpdateBackingStoreState message instead of a compositing mode change message. Also
        removed a redundant if.
        (WebKit::DrawingAreaImpl::display): Added an assertion that this isn't called while updating
        backing store state, as otherwise we might end up sending two DidUpdateBackingStoreState
        messages. If a deferred update is pending, send a DidUpdateBackingStoreState message instead
        of an Update message.

        * WebProcess/WebPage/DrawingAreaImpl.h: Updated updateBackingStoreState to match the base
        class. Added sendDidUpdateBackingStoreState and m_shouldSendDidUpdateBackingStoreState.

2011-03-03  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        When displaying the missing plug-in sheet, pass the 'pluginspage'
        attribute to the UI process.
        https://bugs.webkit.org/show_bug.cgi?id=55553

        * UIProcess/API/C/WKPage.h: Add pluginsPageURL as the third argument to
        missingPluginButtonClicked.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::missingPluginButtonClicked): Ditto.
        * UIProcess/WebPageProxy.h: Ditto.
        * UIProcess/WebPageProxy.messages.in: Ditto.
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::missingPluginButtonClicked): Ditto.
        * UIProcess/WebUIClient.h: Ditto.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::missingPluginButtonClicked): Get the value of
        pluginspageAttr.

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

        Suggested by Dan Bernstein.

        Move "const" around "NSString *", so that it suddenly begins to make sense.

        * WebProcess/mac/FullKeyboardAccessWatcher.mm:

2011-03-03  Jeff Miller  <jeffm@apple.com>

        Reviewed by Anders Carlsson.

        WebKit2: Add WKViewRef API for executing edit commands
        https://bugs.webkit.org/show_bug.cgi?id=49829

        Added WKViewExecuteCommand() and documented some of the WebCore EditorCommand strings.

        * UIProcess/API/C/win/WKView.cpp:
        (WKViewExecuteCommand): Added.
        * UIProcess/API/C/win/WKView.h: Added WKViewExecuteCommand() and comment block with WebCore EditorCommand strings.

2011-03-03  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435

        Set the Private Browsing Storage Session on requests when Private Browsing is enabled.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        Support using WKCopyRequestWithStorageSession in WebCore.

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

        Don't try to paint outside the page's bounds

        When the page is resized smaller, we would allocate a ShareableBitmap at the old, larger
        size, even though we only needed to paint at the new, smaller size.

        The assertion added in this patch will fire during the WebKit2/ResizeViewWhileHidden API
        test if this fix gets broken in the future.

        Fixes <http://webkit.org/b/55715> DrawingAreaImpl allocates more memory than necessary when
        the page is resized smaller

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::updateBackingStoreState): Update our dirty region even if painting
        is suspended (but still refrain from updating it when in accelerated compositing mode).
        Rather than unite our existing dirty region with the page's new bounds, overwrite our dirty
        region with the page's new bounds. This prevents us from accumulating a dirty region that is
        larger than the page in the case where the page is being resized smaller.
        (WebKit::DrawingAreaImpl::display): Added an assertion that we're not trying to paint
        outside of the page's bounds.

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

        Reviewed by Brady Eidson.

        WebProcess is calling CFURLCacheRemoveAllCachedResponses when loading, results in origin-load for all resources
        https://bugs.webkit.org/show_bug.cgi?id=55701
        <rdar://problem/9074017>

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters): Initialize cache-clearing
        flag parameters to false.
        (WebKit::WebProcessCreationParameters::encode): Serialize them properly.
        (WebKit::WebProcessCreationParameters::decode): And deserialize.

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

        Reviewed by Darin Adler.

        REGRESSION (WebKit2): Tab keys no longer observe Full Keyboard Access
        https://bugs.webkit.org/show_bug.cgi?id=55633
        <rdar://problem/8963023>

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/mac/FullKeyboardAccessWatcher.h: Added.
        * WebProcess/mac/FullKeyboardAccessWatcher.mm: Added.
        (-[FullKeyboardAccessWatcher retrieveKeyboardUIModeFromPreferences:]):
        (-[FullKeyboardAccessWatcher init]):
        (+[FullKeyboardAccessWatcher fullKeyboardAccessEnabled]):
        Get the current state of full keyboard access, listening for change notifications.

        * WebProcess/WebProcess.h:  Added fullKeyboardAccessEnabled().

        * WebProcess/WebProcess.cpp: (WebKit::WebProcess::fullKeyboardAccessEnabled):
        WebKit1 also doesn't implement this on platforms other than Mac.

        * WebProcess/mac/WebProcessMac.mm: (WebKit::WebProcess::fullKeyboardAccessEnabled):
        Just ask FullKeyboardAccessWatcher.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::keyboardUIMode):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        Added keyboardUIMode(), removed tabsToLinks().

        * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::keyboardUIMode):
        * WebProcess/WebPage/WebPage.h:
        Generate keyboard UI mode from tabToLinks preference and current state of FKA.

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

        Reviewed by Anders Carlsson.

        Give the Bundle's policy client the option of deciding the policy
        https://bugs.webkit.org/show_bug.cgi?id=55699

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        Add WKBundlePagePolicyAction enum and make it the return value of
        the WKBundlePagePolicyClient functions.

        * WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.cpp:
        (WebKit::InjectedBundlePagePolicyClient::decidePolicyForNavigationAction):
        (WebKit::InjectedBundlePagePolicyClient::decidePolicyForNewWindowAction):
        (WebKit::InjectedBundlePagePolicyClient::decidePolicyForMIMEType):
        * WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.h:
        Pass the return value back to the caller. For unimplemented functions, return WKBundlePagePolicyActionPassThrough.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForMIMEType):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        Call the policy function early if the bundle handles it.

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

        Reviewed by Adam Roben.

        Rest of WebKit2: Need a way to send notifications to client when cookies change
        https://bugs.webkit.org/show_bug.cgi?id=55427
        <rdar://problem/9056027>
        
        This patch adds the communication from the WebProcess <-> UIProcess about starting/stopping
        listening for cookies changing, and adds a mechanism for the WebProcess to notify the UIProcess
        when the cookies have changed. The WebProcess sends a message to the UIProcess when the cookies
        change, and the UIProcess passes this along to the WebCookieManagerProxyClient.

        * UIProcess/API/C/WKCookieManager.cpp:
        (WKCookieManagerSetClient): Call through to WebCookieManagerProxy.
        (WKCookieManagerStartObservingCookieChanges): Ditto.
        (WKCookieManagerStopObservingCookieChanges): Ditto.

        * UIProcess/API/C/WKCookieManager.h: Add new functions and a WKCookieManagerClient
            which is responsible for cookiesDidChange.

        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::initializeClient):
        (WebKit::WebCookieManagerProxy::startObservingCookieChanges): Send the message down to the web process.
        (WebKit::WebCookieManagerProxy::stopObservingCookieChanges): Ditto.
        (WebKit::WebCookieManagerProxy::cookiesDidChange): Tell the WKCookieManagerClient the cookies were
            modified.
        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/WebCookieManagerProxy.messages.in: Add new messages.

        * UIProcess/WebCookieManagerProxyClient.cpp: Added.
        (WebKit::WebCookieManagerProxyClient::cookiesDidChange): Calls through to the client saying that
            cookies changed.
        * UIProcess/WebCookieManagerProxyClient.h: Added.
    
        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::startObservingCookieChanges): Call through to WebCore::startObservingCookieChanges
            (on platforms that support it).
        (WebKit::WebCookieManager::stopObservingCookieChanges): Ditto (for stopObservingCookieChanges).
        (WebKit::WebCookieManager::dispatchDidModifyCookies): Send a message to the UI process that cookies changed.
        * WebProcess/Cookies/WebCookieManager.h:
        * WebProcess/Cookies/WebCookieManager.messages.in:
        
        Add new files.
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * GNUmakefile.am:
        * win/WebKit2.vcproj:

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

        Reviewed by Darin Adler.

        Remove CanRunBeforeUnloadConfirmPanel sync message
        https://bugs.webkit.org/show_bug.cgi?id=55689

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        Encode and decode canRunBeforeUnloadConfirmPanel, as well as canRunModal, which wasn't
        being encoded/decoded.

        * Shared/WebPageCreationParameters.h:
        Add canRunBeforeUnloadConfirmPanel.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeUIClient):
        Send SetCanRunBeforeUnloadConfirmPanel and SetCanRunModal messages.

        (WebKit::WebPageProxy::creationParameters):
        Initialize parameters.canRunBeforeUnloadConfirmPanel.

        * UIProcess/WebPageProxy.messages.in:
        Remove CanRunBeforeUnloadConfirmPanel message.

        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::canRunBeforeUnloadConfirmPanel):
        * UIProcess/WebUIClient.h:
        Make canRunBeforeUnloadConfirmPanel const.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::canRunBeforeUnloadConfirmPanel):
        Ask the web page instead of sending a synchronous message.

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

        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::canRunBeforeUnloadConfirmPanel):
        (WebKit::WebPage::setCanRunBeforeUnloadConfirmPanel):
        Add getter and setter for m_canRunBeforeUnloadConfirmPanel.

        (WebKit::WebPage::setCanRunModal):
        Add setter for m_canRunModal.

        * WebProcess/WebPage/WebPage.messages.in:
        Add SetCanRunBeforeUnloadConfirmPanel and SetCanRunModal messages.

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

        Create the CFBundleRef for WebKit.dll on Windows if needed

        WebKit part of <http://webkit.org/b/55672> <rdar://problem/9080867> All inspector tests time
        out or crash on Windows 7 Release (WebKit2 Tests)

        Reviewed by Darin Adler.

        * Shared/win/WebKitBundle.cpp: Added.
        (WebKit::createWebKitBundle): Returns a pre-existing bundle, if possible, otherwise creates
        and returns a new bundle.
        (WebKit::webKitBundle): Creates and caches a bundle, and returns it.

        * Shared/win/WebKitBundle.h: Added.

        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::inspectorPageURL):
        * WebProcess/WebPage/win/WebInspectorWin.cpp:
        (WebKit::WebInspector::localizedStringsURL):
        Changed to use webKitBundle() to ensure that the bundle has been created.

        * win/WebKit2.vcproj: Added new files.

2011-03-03  Peter Kasting  <pkasting@google.com>

        Reviewed by James Robinson.

        Drop redundant "Windows; " from the Windows-specific User Agent string.
        https://bugs.webkit.org/show_bug.cgi?id=54567

        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::WebPageProxy::standardUserAgent):

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

        Unreviewed, rolling out r80188.
        http://trac.webkit.org/changeset/80188
        https://bugs.webkit.org/show_bug.cgi?id=55647

        Broke the WebKit API tests. (Requested by xenon on #webkit).

        * UIProcess/API/C/WKPage.cpp:
        (WKPageRunJavaScriptInMainFrame):
        (callRunJavaScriptBlockAndRelease):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::runJavaScriptInMainFrame):
        (WebKit::WebPageProxy::processDidCrash):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInMainFrame):

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

        Reviewed by Darin Adler.

        Rename WebKit::WebPage::validateMenuItem() to validateCommand()
        https://bugs.webkit.org/show_bug.cgi?id=55636
        
        Since this method can validate more than menu items, validateCommand() is a better name.  Also rename various messages and WebKit::WebPageProxy::didValidateMenuItem() to didValidateCommand().

        * UIProcess/API/mac/WKView.mm:
        (-[WKView validateUserInterfaceItem:]): Call validateCommand() instead of validateMenuItem().
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::validateCommand): Renamed from validateMenuItem().
        (WebKit::WebPageProxy::didValidateCommand): Renamed from didValidateMenuItem().
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in: Renamed DidValidateMenuItem to DidValidateCommand.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::validateCommand): Renamed from validateMenuItem().
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Renamed ValidateMenuItem to ValidateCommand.

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

        Reviewed by Sam Weinig.

        WKPageSetMemoryCacheClientCallsEnabled doesn't persist if web process crashes
        https://bugs.webkit.org/show_bug.cgi?id=55635

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        Encode and decode areMemoryCacheClientCallsEnabled.

        * Shared/WebPageCreationParameters.h:
        Add areMemoryCacheClientCallsEnabled member variable.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        Initialize m_areMemoryCacheClientCallsEnabled.

        (WebKit::WebPageProxy::setMemoryCacheClientCallsEnabled):
        Update m_areMemoryCacheClientCallsEnabled. Send a message if necessary.

        (WebKit::WebPageProxy::creationParameters):
        Set areMemoryCacheClientCallsEnabled.

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

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

        Make the runJavaScriptInMainFrame callback send a WKSerializedScriptValueRef.

        https://webkit.org/b/55623

        Reviewed by Darin Adler.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageRunJavaScriptInMainFrame): Use ScriptValueCallback.
        (callRunJavaScriptBlockAndRelease): Use WKSerializedScriptValueRef.
        * UIProcess/API/C/WKPage.h: Use WKSerializedScriptValueRef.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close): Call invalidateCallbackMap for m_scriptValueCallbacks.
        (WebKit::WebPageProxy::runJavaScriptInMainFrame): Take a ScriptValueCallback.
        (WebKit::WebPageProxy::scriptValueCallback): Added. Create a WebSerializedScriptValue
        from the DataReference before calling the callback.
        (WebKit::WebPageProxy::processDidCrash): Call invalidateCallbackMap for m_scriptValueCallbacks.
        * UIProcess/WebPageProxy.h: Added ScriptValueCallback and m_scriptValueCallbacks.
        * UIProcess/WebPageProxy.messages.in: Added ScriptValueCallback.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInMainFrame): Create a DataReference from a WebCore::SerializedScriptValue.
        And use ScriptValueCallback to send the message back.

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

        Reviewed by Adam Roben.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435

        Add the ability to create a Private Browsing Storage Session.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        Encode the UI Process bundle identifier.
        (WebKit::WebProcessCreationParameters::decode):
        Decode the UI Process bundle identifier.
        * Shared/WebProcessCreationParameters.h:

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        Grab the bundle identifier and use it to set the WebProcessCreationParameter.
        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):
        Ditto.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        Support using the wkCreatePrivateStorageSession WKSI in WebCore.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        Set the base for the Private Browsing Storage Session identifier to be the bundle identifier
        from the UI Process so that WebKit1 would create a Private Browsing Storage Session with the
        same identifier as WebKit2.

2011-03-01  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Part of WebKit2: Need a way to send notifications to client when cookies change
        https://bugs.webkit.org/show_bug.cgi?id=55427
        <rdar://problem/9056027>

        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::dispatchDidModifyCookies): Add a stub with a FIXME to send a 
            message to the UI process.

        * WebProcess/Cookies/WebCookieManager.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createCookiesStrategy):
        (WebKit::WebPlatformStrategies::notifyCookiesChanged): Call WebCookieManager::dispatchDidModifyCookies.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

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

        Reviewed by Laszlo Gombos.

        [Qt][WK2] generate-forwarding-headers.pl should generate paths with framework names
        https://bugs.webkit.org/show_bug.cgi?id=55478

        On case insensitive systems the generated forwarding headers cause build problems.

        * Scripts/generate-forwarding-headers.pl: The generated header should
        also contain the framework name.

2011-03-01  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Expose some selection state fields in WKPage
        https://bugs.webkit.org/show_bug.cgi?id=55541
        
        Added WKPageCanDelete(), WKPageHasSelectedRange(), and WKPageIsContentEditable() so we can enable some
        Edit menu items properly on Windows when using WebKit2.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageCanDelete): Added.
        (WKPageHasSelectedRange): Added.
        (WKPageIsContentEditable): Added.
        * UIProcess/API/C/WKPage.h: Added new functions.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::canDelete): Added.
        (WebKit::WebPageProxy::hasSelectedRange): Added.
        (WebKit::WebPageProxy::isContentEditable): Added.

2011-03-01  Mark Rowe  <mrowe@apple.com>

        Hide the typeinfo name symbols for std::exception and std::bad_alloc too.

        * Configurations/Base.xcconfig:

2011-03-01  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Add verification scripts to WebKit2 project and fix the issues they reveal.

        * Configurations/Base.xcconfig: Add linker flags to prevent C++ standard
        library functions from being exported as weak externals.
        * Configurations/WebKit2.xcconfig: Inherit linker flags from the project level.
        * Shared/WebContextMenuItem.cpp:
        (WebKit::WebContextMenuItem::separatorItem): Use DEFINE_STATIC_LOCAL.
        * UIProcess/WebPageGroup.cpp:
        (WebKit::webPageGroupMap): Ditto.
        * WebKit2.xcodeproj/project.pbxproj: Don't copy .in files in to the framework.
        Run verification scripts at the appropriate times.
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::didBeginEditing): Use DEFINE_STATIC_LOCAL.
        (WebKit::WebEditorClient::respondToChangedContents): Ditto.
        (WebKit::WebEditorClient::respondToChangedSelection): Ditto.
        (WebKit::WebEditorClient::didEndEditing): Ditto.
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::idToHistoryItemMap): Ditto.
        (WebKit::historyItemToIDMap): Ditto.

2011-03-01  Joseph Pecoraro  <joepeck@webkit.org>

        Unreviewed. Roll out r80068 and r80073 due to breaking WebKit2 Qt port.

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

2011-03-01  Joseph Pecoraro  <joepeck@webkit.org>

        Unreviewed, missed updating a call to WebCore::computeViewportAttributes
        who's prototype changed.

        Viewport Warning/Error Messages Are Now Inaccurate
        https://bugs.webkit.org/show_bug.cgi?id=53707

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPage::viewportAttributesForSize): pass in a value for the document argument.

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

        Reviewed by Sam Weinig.

        WKPluginSiteDataManagerClearAllSiteData is not working
        https://bugs.webkit.org/show_bug.cgi?id=55528
        <rdar://problem/9071823>

        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::tryGetSitesWithData):
        Remove version checks, checking that the function pointer is not null is enough.

        (WebKit::NetscapePluginModule::tryClearSiteData):
        Remove version checks, checking that the function pointer is not null is enough.
        Also, correctly convert a null String to a null CString.

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

        Incorporate a review comment I missed in r80051

        * Shared/Plugins/Netscape/NetscapePluginModule.cpp: Clarified error message.

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

        Make the PLUGIN_ARCHITECTURE() macro work with MSVC

        Fixes <http://webkit.org/b/55513> <rdar://problem/9069189> REGRESSION (r79925): Lots of
        plugins tests crashing in NetscapePlugin::initialize on Windows

        Reviewed by Anders Carlsson.

        * Shared/Plugins/Netscape/NetscapePluginModule.cpp: Added a compile-time check to make sure
        PLUGIN_ARCHITECTURE() is defined for some platform.

        * config.h: Removed the parentheses from the use of "defined" in the PLUGIN_ARCHITECTURE()
        macro. This matches PLATFORM(), OS(), etc., and makes the macro work on Windows. Also
        replaced the nonsense OS(WIN) with OS(WINDOWS).

        * win/WebKit2.vcproj: Added config.h for editing convenience. Let VS do its thang.

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

        Reviewed by Timothy Hatcher.

        WebKit2 needs to be made localizable
        https://bugs.webkit.org/show_bug.cgi?id=55483

        * PluginProcess/mac/PluginProcessMainMac.mm:
        * WebProcess/mac/WebProcessMainMac.mm:
        Set the default localization from the passed in parameter.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        Add the preferred localization as a parameter when launching processes
        so that they can set their localization to match the launching app.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        Use WebCore's localizedString function on the mac, to actually localize
        these strings.

        (WebKit::WebPlatformStrategies::imageTitle):
        Switch to using replace, instead of concatenation, to give localizers a chance
        to rearrange the wording.

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

        Reviewed by Anders Carlsson.

        [Qt][WK2] Plugin initialization
        https://bugs.webkit.org/show_bug.cgi?id=48127

        Apply the quirks that are necessary for the flash plugin
        to not crash on X11.

        * Platform/qt/ModuleQt.cpp:
        (WebKit::Module::load): Use the ResolveAllSymbols hint as we do in WebCore.
        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::tryLoad): Call applyX11QuirksBeforeLoad
        if PLUGIN_ARCHITECTURE is X11.
        * Shared/Plugins/Netscape/NetscapePluginModule.h:
        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::initializeGTK):  The same hack that we do in WebCore.
        Call gtk_init because flash don't do it for itself.
        (WebKit::NetscapePluginModule::applyX11QuirksBeforeLoad): Added for X11.
        Do the hacks that we need to do before calling NP_Initialize on the
        flash plugin to save it form crashing.
        * Shared/Plugins/PluginQuirks.h: Use PLUGIN_ARCHITECTURE macros.
        Added RequiresGTKToolKit quirk for X11.
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue): Handle the RequiresGTKToolKit quirk on X11.
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        (WebKit::NetscapePlugin::quirks): Added getter for the PluginModule's
        quirks to be available in NPN_GetValue.

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

        Convert seconds to milliseconds before calling ::SetTimer

        Fixes <http://webkit.org/b/55417> <rdar://problem/9065287> RunLoop::Timer fires 1000x too
        early on Windows

        Reviewed by Anders Carlsson.

        * Platform/win/RunLoopWin.cpp:
        (RunLoop::TimerBase::start): Convert the timeout interval to milliseconds, since that's what
        ::SetTimer expects.

2011-03-01  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Clean up the project files and move common options to WebKit.pri.

        * WebKit2.pro: Deduplicate options.

2011-03-01  Juha Savolainen  <juha.savolainen@weego.fi>

        Reviewed by Andreas Kling.

        [Qt] WebKit2 needs to support font size changing and getting default font size
        https://bugs.webkit.org/show_bug.cgi?id=53671

        Added new enum for font size type and added methods to set and get default font sizes.

        * UIProcess/API/qt/qwkpreferences.cpp:
        (QWKPreferences::setFontSize): Added.
        (QWKPreferences::fontSize): Added.
        * UIProcess/API/qt/qwkpreferences.h:

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

        Reviewed by Adam Roben and Gavin Barraclough.

        https://bugs.webkit.org/show_bug.cgi?id=54898
        InjectedBundleNodeHandle dies too early in WKBundleHitTestResultGetNodeHandle

        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp:
        (WKBundleHitTestResultCopyNodeHandle): 
        Instead of .get(), call .release.leakRef() like other functions that return WKBundleNodeHandleRef.
        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.h:
        Renamed from "get" to "copy", because it leaksRef.

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

        Reviewed by Gavin Barraclough.

        https://bugs.webkit.org/show_bug.cgi?id=55442
        Webarchives don't contain subframe content

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::getWebArchiveOfFrame):
        Pass the frame's document instead of just the frame, to use a different LegacyWebArchive::create function.

2011-02-28  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][WK2] Add a way to test the WebKit 2 APIs
        https://bugs.webkit.org/show_bug.cgi?id=55408

        Add an initial test for the WebKit 2 APIs of Qt.

        * UIProcess/API/qt/tests/html/basic_page.html: Added.
        * UIProcess/API/qt/tests/qgraphicswkview/qgraphicswkview.pro: Added.
        * UIProcess/API/qt/tests/qgraphicswkview/tst_qgraphicswkview.cpp: Added.
        (View::View):
        (View::resizeEvent):
        (tst_QGraphicsWKView::init):
        (tst_QGraphicsWKView::cleanup):
        (tst_QGraphicsWKView::loadEmptyPage):
        * UIProcess/API/qt/tests/tests.pri: Added.
        * UIProcess/API/qt/tests/tests.pro: Added.
        * UIProcess/API/qt/tests/util.h: Added.
        (waitForSignal):

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

        Fix clang build.

        * UIProcess/API/mac/FindIndicatorWindow.mm:
        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::deprecatedUpdate):
        (WebKit::ChunkedUpdateDrawingAreaProxy::didReceiveMessage):
        * UIProcess/ChunkedUpdateDrawingAreaProxy.h:
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
        (WebKit::ChunkedUpdateDrawingArea::deprecatedResumePainting):
        (WebKit::ChunkedUpdateDrawingArea::didReceiveMessage):
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.h:

2011-02-28  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Anders Carlsson.

        Do not copy config.h into WebKit2.

        * WebKit2.xcodeproj/project.pbxproj:

2011-02-28  Dan Bernstein  <mitz@apple.com>

        LLVM Compiler build fix.

        * Scripts/webkit2/messages.py:
        * UIProcess/WebPageProxy.h:

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

        Reviewed by Dan Bernstein, Sam Weinig, Alexey Proskuryakov and Darin Adler.

        Open PDF in Preview doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=55400
        <rdar://problem/8750353>

        * UIProcess/API/mac/PDFViewController.mm:
        (-[WKPDFView initWithFrame:PDFViewController:]):
        Set the WKPDFView as the delegate of itself.

        (-[WKPDFView PDFViewOpenPDFInNativeApplication:]):
        Call PDFViewController::openPDFInFinder.

        (WebKit::PDFViewController::PDFViewController):
        Initialize m_hasWrittenPDFToDisk to false.

        (WebKit::PDFViewController::openPDFInFinder):
        Write the PDF to disk if needed and then open it using -[NSWorkspace openFile:].
        
        (WebKit::temporaryPDFDirectoryPath):
        Create a directory to put PDFs in.

        (WebKit::PDFViewController::pathToPDFOnDisk):
        Return a path to a (non-existent) file in the temporary PDF directory.

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

        Reviewed by Dan Bernstein.

        Frequent crashes in CFURLCache code on Snow Leopard
        https://bugs.webkit.org/show_bug.cgi?id=55412
        <rdar://problem/9063922>

        CString is evil, it has two lengths which can be different - specifically, fileSystemRepresentation()
        creates a string with maximum possible buffer size. A path with garbage at the end confused
        CFURLCache into corrupting its data structures.

        * Shared/WebProcessCreationParameters.h: Added a FIXME about merging Mac and Windows code.
        This problem wouldn't have occured if we didn't use CString in the first place.

        * UIProcess/mac/WebContextMac.mm: (WebKit::WebContext::platformInitializeWebProcess):
        Added an assertion matching Windows behavior (seems likely that NSURLCache also wouldn't
        have liked trailing slash).

        * UIProcess/win/WebContextWin.cpp: (WebKit::WebContext::platformInitializeWebProcess):
        Made slash removal conditional for robustness.

        * WebProcess/mac/WebProcessMac.mm: (WebKit::WebProcess::platformInitializeWebProcess):
        Use actual string length, not CString::length().

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

        Reviewed by Anders Carlsson.

        [Qt][WK2] Plugin initialization
        https://bugs.webkit.org/show_bug.cgi?id=48127

        Specialize the way of initializing the plugin for X11.
        Introduce PLUGIN_ARCHITECTURE macros to allow code sharing
        across platforms.

        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::tryLoad):
        * config.h:

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

        Reviewed by Brady Eidson.

        WK2 Context Menus - Implement LookUpInDictionary
        https://bugs.webkit.org/show_bug.cgi?id=55405

        * Shared/DictionaryPopupInfo.cpp:
        (WebKit::DictionaryPopupInfo::encode):
        (WebKit::DictionaryPopupInfo::decode):
        * Shared/DictionaryPopupInfo.h:
        Add type to differentiate between HotKey and ContextMenu triggered
        dictionary popups. This is necessary since HotKey triggered ones want
        to override the style to always be overlay.

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        Only force the overlay style for HotKey triggered dictionary lookups.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation):
        (WebKit::WebPage::performDictionaryLookupForRange):
        Factor out shared functionality into performDictionaryLookupForRange.

        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        (WebKit::WebContextMenuClient::lookUpInDictionary):
        Get selected range and call newly factored out performDictionaryLookupForRange.

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

        Reviewed by Dan Bernstein.

        PDFViewController should hold a reference to the PDF data
        https://bugs.webkit.org/show_bug.cgi?id=55394

        * UIProcess/API/mac/PDFViewController.h:
        * UIProcess/API/mac/PDFViewController.mm:
        (WebKit::PDFViewController::setPDFDocumentData):

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

        Reviewed by Darin Adler.

        Size of text in popup menu doesn't match size of text in <select> itself in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=48234

        * Shared/TextInfo.cpp: Removed.
        * Shared/TextInfo.h: Removed.
        Replace this with the more appropriately DictionaryPopupInfo.

        * Shared/DictionaryPopupInfo.cpp: Copied from Source/WebKit2/Shared/TextInfo.cpp.
        (WebKit::DictionaryPopupInfo::encode):
        (WebKit::DictionaryPopupInfo::decode):
        * Shared/DictionaryPopupInfo.h: Copied from Source/WebKit2/Shared/TextInfo.h.
        (WebKit::DictionaryPopupInfo::DictionaryPopupInfo):
        Replace individual font related fields with FontInfo.

        * Shared/FontInfo.cpp: Added.
        (WebKit::FontInfo::FontInfo):
        (WebKit::FontInfo::encode):
        (WebKit::FontInfo::decode):
        * Shared/FontInfo.h: Added.
        Add class to encapsulate passing a font description over the wire.

        * Shared/PlatformPopupMenuData.cpp:
        (WebKit::PlatformPopupMenuData::encode):
        (WebKit::PlatformPopupMenuData::decode):
        * Shared/PlatformPopupMenuData.h:
        Add FontInfo as extra data for the Mac.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        * UIProcess/PageClient.h:
        Add scaleFactor and use it to construct a font at the right size.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showPopupMenu):
        (WebKit::WebPageProxy::didPerformDictionaryLookup):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebPopupMenuProxy.h:
        * UIProcess/mac/WebPopupMenuProxyMac.h:
        (WebKit::WebPopupMenuProxyMac::create):
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::WebPopupMenuProxyMac):
        (WebKit::WebPopupMenuProxyMac::populate):
        (WebKit::WebPopupMenuProxyMac::showPopupMenu):
        * UIProcess/qt/WebPopupMenuProxyQt.cpp:
        (WebKit::WebPopupMenuProxyQt::showPopupMenu):
        * UIProcess/qt/WebPopupMenuProxyQt.h:
        * UIProcess/win/WebPopupMenuProxyWin.cpp:
        (WebKit::WebPopupMenuProxyWin::showPopupMenu):
        * UIProcess/win/WebPopupMenuProxyWin.h:
        * WebProcess/WebCoreSupport/mac/WebPopupMenuMac.mm:
        (WebKit::WebPopupMenu::setUpPlatformData):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation):
        Pass scale factor through and rename TextInfo -> DictionaryPopupInfo.

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

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

        One more rename as a followup to r79868

        Rubber-stamped by Anders Carlsson.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        * UIProcess/DrawingAreaProxyImpl.h:
        Rename stateDidChange to backingStoreStateDidChange.

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

        Rename DrawingArea[Proxy]Impl's "state ID" concept to "backing store state ID"

        Rubber-stamped (and suggested) by Anders Carlsson.

        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxy.messages.in:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        * UIProcess/DrawingAreaProxyImpl.h:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        * WebProcess/WebPage/DrawingAreaImpl.h:
        Perform the rename.

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

        Decouple state changes from sending of UpdateState messages in DrawingAreaProxyImpl

        The new DrawingAreaProxyImpl::stateDidChange function should be called whenever
        DrawingAreaProxyImpl's state changes in a way that will require allocating a new backing
        store. (Currently, this is just when the size changes.) This function will sometimes (but
        not always, as when we're waiting for a DidUpdateState message) send an UpdateState message
        to the web process. This means it's now possible for the state IDs sent in consecutive
        UpdateState messages to increase by more than one, but that's OK.

        This should cause no change in behavior.

        Fixes <http://webkit.org/b/55382> DrawingAreaProxyImpl's state ID should be updated whenever
        its state changes, not just when we send an UpdateState message

        Reviewed by Anders Carlsson.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl): Updated for rename.
        (WebKit::DrawingAreaProxyImpl::sizeDidChange): Changed to call stateDidChange.
        (WebKit::DrawingAreaProxyImpl::didUpdateState): Updated for rename, and changed to call
        sendUpdateState whenever our state has changed for any reason since the last UpdateState
        message was sent.
        (WebKit::DrawingAreaProxyImpl::stateDidChange): Added. Increments m_nextStateID and calls
        through to sendUpdateState.
        (WebKit::DrawingAreaProxyImpl::sendUpdateState): Updated for rename, moved incrementing of
        the state ID we send to the web process from here to stateDidChange, and added an assertion.

        * UIProcess/DrawingAreaProxyImpl.h: Renamed m_requestedStateID to m_nextStateID, and updated
        the comment explaining its meaning.

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

        Pass the right dirty rect to Plugin::paint

        A typo in r79040 broke this. Much of this patch is just support for testing the fix.

        Fixes <http://webkit.org/b/55365> <rdar://problem/9031089> REGRESSION (r79040): WebKit2:
        Large portions of pages with plugins paint black

        Reviewed by Anders Carlsson.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::paint): Pass the dirty rect we calculated earlier to Plugin::paint,
        rather than just passing along the dirty rect that was passed into this function. This is
        the bug fix.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageForceRepaint):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        Added new SPI. Just calls through to WebPage::forceRepaintWithoutCallback.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::forceRepaintWithoutCallback): Moved code to force a repaint here...
        (WebKit::WebPage::forceRepaint): ...from here.

        * WebProcess/WebPage/WebPage.h: Added forceRepaintWithoutCallback.

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

        Reviewed by Dan Bernstein.

        Force dictionary popup to use overlay type
        <rdar://problem/9052483>
        https://bugs.webkit.org/show_bug.cgi?id=55337

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformDictionaryLookup): As this is only
        used for the hot key version of the dictionary popup, force the overlay
        style.

2011-02-27  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] [WK2] QGraphicsWKView::showContextMenu() should be public
        https://bugs.webkit.org/show_bug.cgi?id=55330

        Move QGraphicsWKView::showContextMenu() to the public API. Add documentation
        on its use.

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

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

        Unreviewed, fixed GTK compilation after r79806.

        * UIProcess/gtk/WebView.cpp:
        (WebKit::WebView::didFinishLoadingDataForCustomRepresentation):
        * UIProcess/gtk/WebView.h:

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

        Reviewed by Dan Bernstein.

        Asynchronous response to FramePolicyListener is not finishing the load
        https://bugs.webkit.org/show_bug.cgi?id=55305
        <rdar://problem/9044356>

        Always initialize the receivedPolicyAction reply parameter.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForMIMEType):

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

        Reviewed by Sam Weinig.

        DidFinishLoadingDataForCustomRepresentation should pass along the suggested filename
        https://bugs.webkit.org/show_bug.cgi?id=55304

        * UIProcess/API/mac/PDFViewController.h:
        * UIProcess/API/mac/PDFViewController.mm:
        (WebKit::PDFViewController::setPDFDocumentData):
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didFinishLoadingDataForCustomRepresentation):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _didFinishLoadingDataForCustomRepresentationWithSuggestedFilename:dataReference:CoreIPC::]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::didFinishLoadingDataForCustomRepresentation):
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFinishLoadingDataForCustomRepresentation):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/win/WebView.cpp:
        (WebKit::WebView::didFinishLoadingDataForCustomRepresentation):
        * UIProcess/win/WebView.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::finishedLoading):

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

        Reviewed by Oliver Hunt.

        DrawingArea should not be reference counted
        https://bugs.webkit.org/show_bug.cgi?id=55284

        * Shared/DrawingAreaInfo.h:
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:
        (WebKit::ChunkedUpdateDrawingAreaProxy::ChunkedUpdateDrawingAreaProxy):
        (WebKit::ChunkedUpdateDrawingAreaProxy::setPageIsVisible):
        (WebKit::ChunkedUpdateDrawingAreaProxy::update):
        (WebKit::ChunkedUpdateDrawingAreaProxy::sendSetSize):
        * UIProcess/ChunkedUpdateDrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::DrawingAreaProxy):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::type):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl):
        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::TiledDrawingAreaProxy):
        * UIProcess/TiledDrawingAreaProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveSyncMessage):
        (WebKit::WebPageProxy::creationParameters):
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:
        (WebKit::ChunkedUpdateDrawingArea::ChunkedUpdateDrawingArea):
        (WebKit::ChunkedUpdateDrawingArea::display):
        (WebKit::ChunkedUpdateDrawingArea::setSize):
        (WebKit::ChunkedUpdateDrawingArea::didReceiveMessage):
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.h:
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        (WebKit::DrawingArea::DrawingArea):
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::create):
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/TiledDrawingArea.cpp:
        (WebKit::TiledDrawingArea::TiledDrawingArea):
        * WebProcess/WebPage/TiledDrawingArea.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::drawRect):
        * WebProcess/WebPage/WebPage.h:

2011-02-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Added clearOpener method to WKBundleWebFramePrivate.

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

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

        Reviewed by Andreas Kling.

        [Qt] Fix the focus in MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=55288

        Implement basic functionality for focus in QWKPagePrivate.

        * UIProcess/API/qt/qwkpage.cpp:
        (QWKPagePrivate::isViewWindowActive):
        (QWKPagePrivate::isViewFocused):
        (QWKPagePrivate::isViewVisible):

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

        Unreviewed, rolling out r79764.
        http://trac.webkit.org/changeset/79764
        https://bugs.webkit.org/show_bug.cgi?id=55295

        "broke Chromium builds" (Requested by rniwa on #webkit).

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleFramePrivate.h:

2011-02-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Added clearOpener method to WKBundleWebFramePrivate.

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

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

        Reviewed by Darin Adler.

        Plug-in process crashes when using GuardMalloc
        https://bugs.webkit.org/show_bug.cgi?id=55279
        <rdar://problem/9044618>

        Update m_environmentPointer after copying the environment variables.
        
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::EnvironmentVariables::copyEnvironmentVariables):

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

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess): Fixed backwards logic from last change.

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

        Reviewed by Mark Rowe.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess): Fixed performance problem in production
        builds by only setting DYLD_FRAMEWORK_PATH in engineering configurations.

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

        Reviewed by Anders Carlsson.

        <rdar://problem/8036034> WebKit2 should work even if DYLD_FRAMEWORK_PATH is not set

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::EnvironmentVariables::~EnvironmentVariables): Use fastFree, not delete, on
        the strings here because they are allocated with fastMalloc, not new.
        (WebKit::EnvironmentVariables::set): Use const more.
        (WebKit::EnvironmentVariables::get): Ditto.
        (WebKit::EnvironmentVariables::appendValue): Ditto.
        (WebKit::EnvironmentVariables::valueIfVariableHasName): Ditto. Also fix mistake
        where this would match if the name matched only a prefix of the environment variable's
        name. We want to match the whole name, so we need to use memcmp, not strncmp.
        (WebKit::EnvironmentVariables::createStringForVariable): Use const more.
        (WebKit::ProcessLauncher::launchProcess): Use clearer name, frameworkExecutablePath,
        for what was called bundlePath before. Append the frameworks path to DYLD_FRAMEWORK_PATH,
        ensuring we can pick up other frameworks from the same directory in the web process.
        Use a const_cast instead of a C-style cast.

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

        Reviewed by Anders Carlsson.

        AX: WK2: AXApplication not returning the AXFocusedUIElement within the web area
        https://bugs.webkit.org/show_bug.cgi?id=55277

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

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

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=55276
        WebPage::close() accesses "this" after it is destroyed.

        This was making many tests crash with GuardMalloc.

        * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::close): Access "this" before it can be
        destroyed, not after.

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

        Unreviewed.
        Add missing sources to WebKit2API.pri.

        * WebKit2API.pri:

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

        Reviewed by Darin Adler.

        A WKView without a window will cause CG errors in the console
        https://bugs.webkit.org/show_bug.cgi?id=55264
        <rdar://problem/9044281>

        Check that the window has a valid window number before trying to get its graphics context.

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::containingWindowGraphicsContext):

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

        Reviewed by Brady Eidson and looked over by Jessie Berlin.

        WebKit2: Need a way to manage cookies from the web process
        https://bugs.webkit.org/show_bug.cgi?id=55086
        
        Call through to WebCore::CookieJar in our WebCookieManager functions.

        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::getHostnamesWithCookies):
        (WebKit::WebCookieManager::deleteCookiesForHostname):
        (WebKit::WebCookieManager::deleteAllCookies):

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

        Reviewed by Sam Weinig.

        Option-clicking on links doesn't download them due to sandbox violation
        https://bugs.webkit.org/show_bug.cgi?id=55250
        <rdar://problem/9018359>

        The change to make DecidePolicyForNavigationAction sync didn't handle the case when the
        decided policy was "Download". Fix this by passing along the download ID back to the web process.

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction):
        Add new overload.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        Initialize m_syncNavigationActionPolicyDownloadID.

        (WebKit::WebPageProxy::receivedPolicyDecision):
        Set m_syncNavigationActionPolicyDownloadID to the download ID.

        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        Return the m_syncNavigationActionPolicyDownloadID.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        Add a DownloadID reply parameter.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        Don't pass a zero download ID to didReceivePolicyDecision.

2011-02-25  Amruth Raj  <amruthraj@motorola.com> and Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com> and Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement WebContext and NativeKeyboardEvent classes for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=48510

        * GNUmakefile.am:
        * Shared/NativeWebKeyboardEvent.h: Added the GTK event attribute
        and constructors, in our case we need it because we use a pointer
        and copy the event.
        (WebKit::NativeWebKeyboardEvent::nativeEvent):
        * Shared/gtk/NativeWebKeyboardEventGtk.cpp: Added.
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent): We need
        to copy the event in the constructor to avoid two references to
        the same event.
        * Shared/gtk/WebEventFactory.cpp: Changed the prototype of the
        functions to add const, we need it for the NativeWebKeyboardEvent
        constructor.
        (WebKit::modifiersForEvent):
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        * UIProcess/gtk/WebContextGtk.cpp: Added. Stubbed implementation
        for GTK port. Yet to implement.
        (WebKit::WebContext::applicationCacheDirectory):
        (WebKit::WebContext::platformInitializeWebProcess):
        (WebKit::WebContext::platformDefaultDatabaseDirectory):
        * UIProcess/gtk/WebView.cpp:
        (WebKit::WebView::handleKeyboardEvent):

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

        Reviewed by Sam Weinig.

        Get rid of more old accelerated compositing code
        https://bugs.webkit.org/show_bug.cgi?id=55235

        * Shared/CoreIPCSupport/DrawingAreaProxyMessageKinds.h:
        * UIProcess/ChunkedUpdateDrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        * UIProcess/DrawingAreaProxyImpl.h:
        * WebProcess/WebPage/ChunkedUpdateDrawingArea.h:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        * WebProcess/WebPage/DrawingAreaImpl.h:

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

        Reviewed by Csaba Osztrogonác.

        [Qt] Make the WebKit2 build system less confusing for non-Qt developers
        https://bugs.webkit.org/show_bug.cgi?id=55213

        * WebKit2API.pri: Added.

2011-02-25  Amruth Raj  <amruthraj@motorola.com> and Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com> and Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement WebView and WebKitWebView classes for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=48509

        * GNUmakefile.am:
        * UIProcess/API/C/gtk/WKView.cpp:
        * UIProcess/API/C/gtk/WKView.h: Removed gdkrectangle from
        constructor.
        * UIProcess/gtk/WebViewWidget.cpp: Added. The GObject interface
        for WebView. The GObject is the GtkWidget handle which is used by
        WebView class for GTK port.
        * UIProcess/gtk/WebViewWidget.h: Added. The GObject interface
        declarations for GtkWidget handle for GTK port.
        * UIProcess/gtk/WebView.cpp: Added. The native GtkWidget handle
        for GTK port which is associated with each WKViewRef.
        * UIProcess/gtk/WebView.h: Added. Class which implements the
        PageClient interface. It is a wrapper over the native GtkWidget
        handle associated with each WKViewRef for GTK port.

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

        Fix GTK compilation after r79654.

        * GNUmakefile.am:

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

        Qt build fix.

        * WebKit2.pri:

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

        Reviewed by Sam Weinig and looked over by Brian Weinstein.

        Part of <rdar://problem/8762095> and https://bugs.webkit.org/show_bug.cgi?id=55172
        Need WebKit2 API to view/manage origins with LocalStorage.

        Project file stuff:
        * GNUmakefile.am:
        * WebKit2.pri:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Common.vsprops:
        * win/WebKit2Generated.make:

        WK2 derived sources and API stuff:
        * DerivedSources.make:
        * DerivedSources.pro:
        * Platform/CoreIPC/MessageID.h:
        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        * UIProcess/API/C/WKAPICast.h:

        Add an KeyValueStorageManager to the context and invalidate it at the appropriate times:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::disconnectProcess):
        (WebKit::WebContext::didReceiveMessage):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::keyValueStorageManagerProxy):

        Add API to get the KeyValueStorageManager for a context:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetKeyValueStorageManager):
        * UIProcess/API/C/WKContext.h:

        Route messages to the right place:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage):

        Add the API object, which wraps to WebKeyValueStorageManagerProxy:
        * UIProcess/API/C/WKKeyValueStorageManager.cpp: Added.
        (WKKeyValueStorageManagerGetTypeID):
        (WKKeyValueStorageManagerGetKeyValueStorageOrigins):
        (WKKeyValueStorageManagerDeleteEntriesForOrigin):
        (WKKeyValueStorageManagerDeleteAllEntries):
        * UIProcess/API/C/WKKeyValueStorageManager.h: Added.

        The UIProcess implementation of the manager to send messages to the WebProcess and pipe a callback back up to the client:
        * UIProcess/WebKeyValueStorageManagerProxy.cpp: Added.
        (WebKit::WebKeyValueStorageManagerProxy::create):
        (WebKit::WebKeyValueStorageManagerProxy::WebKeyValueStorageManagerProxy):
        (WebKit::WebKeyValueStorageManagerProxy::~WebKeyValueStorageManagerProxy):
        (WebKit::WebKeyValueStorageManagerProxy::invalidate):
        (WebKit::WebKeyValueStorageManagerProxy::didReceiveMessage):
        (WebKit::WebKeyValueStorageManagerProxy::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManagerProxy::didGetKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManagerProxy::deleteEntriesForOrigin):
        (WebKit::WebKeyValueStorageManagerProxy::deleteAllEntries):
        * UIProcess/WebKeyValueStorageManagerProxy.h: Added.
        (WebKit::WebKeyValueStorageManagerProxy::clearContext):
        (WebKit::WebKeyValueStorageManagerProxy::type):
        * UIProcess/WebKeyValueStorageManagerProxy.messages.in: Added.

        The WebProcess implementation to response to UIProcess messages and actually do the dirty-work in WebCore:
        * WebProcess/KeyValueStorage: Added.
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.cpp: Added.
        (WebKit::WebKeyValueStorageManager::shared):
        (WebKit::WebKeyValueStorageManager::WebKeyValueStorageManager):
        (WebKit::WebKeyValueStorageManager::didReceiveMessage):
        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManager::deleteEntriesForOrigin):
        (WebKit::WebKeyValueStorageManager::deleteAllEntries):
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.h: Added.
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.messages.in: Added.

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

        Reviewed by Anders Carlsson.

        WebKit2: Image-based cursors do not work
        https://bugs.webkit.org/show_bug.cgi?id=55184

        * Shared/ShareableBitmap.h: Added releaseData function
        declaration. This is only defined for CG, but we can declare
        it without defining it on non-CG platforms without causing problems.

        * Shared/WebCoreArgumentCoders.cpp: Added.
        (CoreIPC::encodeImage): Added. For use in the Cursor argument coder.
        (CoreIPC::decodeImage): Ditto.

        * Shared/WebCoreArgumentCoders.h: Added code to the Cursor encoder
        and decoder to handle image-based cursors, using the new encodeImage
        and decodeImage functions.

        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::releaseData): Added.
        (WebKit::ShareableBitmap::createGraphicsContext): Use
        CGBitmapContextCreateWithData instead of CGBitmapContextCreate,
        to guarantee we outlast the CGBitmapContext we create.
        (WebKit::ShareableBitmap::paint): Got rid of unnneeded local variable.

        * Shared/cg/WebCoreArgumentCodersCG.cpp: Added.
        (CoreIPC::createImage): Added. For use by CoreIPC::decodeImage.

        * WebKit2.xcodeproj/project.pbxproj: Added WebCoreArgumentCoders.cpp
        and WebCoreArgumentCodersCG.cpp.
        * win/WebKit2.vcproj: Ditto.

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

        Reviewed by Dan Bernstein.

        Crash when trying to send a sync message on an invalid connection
        https://bugs.webkit.org/show_bug.cgi?id=55190
        <rdar://problem/9035806>

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendSyncMessage):
        Don't try to call a client function if isValid() returns false since the client
        will be null in that case.

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

        Reviewed by Dan Bernstein.

        Remove the layer backed drawing area
        https://bugs.webkit.org/show_bug.cgi?id=55174

        * GNUmakefile.am:
        * Shared/DrawingAreaInfo.h:
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/LayerBackedDrawingAreaProxy.cpp: Removed.
        * UIProcess/LayerBackedDrawingAreaProxy.h: Removed.
        * UIProcess/mac/LayerBackedDrawingAreaProxyMac.mm: Removed.
        * UIProcess/win/LayerBackedDrawingAreaProxyWin.cpp: Removed.
        * UIProcess/win/WebView.cpp:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        * WebProcess/WebPage/LayerBackedDrawingArea.cpp: Removed.
        * WebProcess/WebPage/LayerBackedDrawingArea.h: Removed.
        * WebProcess/WebPage/mac/LayerBackedDrawingAreaMac.mm: Removed.
        * WebProcess/WebPage/win/LayerBackedDrawingAreaWin.cpp: Removed.
        * win/WebKit2.vcproj:

2011-02-24  Mike Thole  <mthole@apple.com>

        Reviewed by Sam Weinig.

        WK2: Add ability to get document node for a WKBundleNodeHandle
        https://bugs.webkit.org/post_bug.cgi

        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleCopyDocument):
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::document):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:

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

        Reviewed by Adam Roben and looked at by Brian Weinstein.

        https://bugs.webkit.org/show_bug.cgi?id=55165
        Can call CF API with a null CFArray in WebResourceCacheManager

        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::getCacheOrigins): cfURLCacheHostNames() can return a null CFArrayRef, 
          so the call to CFArrayGetCount must be null checked.

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

        Reviewed by Simon Fraser.

        ASSERTION FAILED: !isInAcceleratedCompositingMode() when entering accelerated compositing early
        https://bugs.webkit.org/show_bug.cgi?id=55162
        <rdar://problem/9048523>

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::updateState):
        Call setShouldNotifyAfterNextScheduledLayerFlush(false) so the web process process won't send an
        EnterAcceleratedCompositingMode message.

        (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode):
        setShouldNotifyAfterNextScheduledLayerFlush now takes a boolean.

        * WebProcess/WebPage/LayerTreeHost.h:
        * WebProcess/WebPage/mac/LayerTreeHostMac.h:
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::setShouldNotifyAfterNextScheduledLayerFlush):
        Make this take a boolean.

2011-02-24  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        Drop the "U; " encryption level from the User Agent string.
        https://bugs.webkit.org/show_bug.cgi?id=54566

        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::standardUserAgent):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::standardUserAgent):
        * UIProcess/qt/WebPageProxyQt.cpp:
        (WebKit::WebPageProxy::standardUserAgent):
        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::WebPageProxy::standardUserAgent):

2011-02-24  Andrew Wilson  <atwilson@chromium.org>

        Unreviewed, rolling out r79570.
        http://trac.webkit.org/changeset/79570
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Breaks chromium build because glue/mocks/mock_web_frame.h/cc
        was not updated

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleFramePrivate.h:

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

        Reviewed by Adam Roben and looked over by Jessie Berlin.

        Part of WebKit2: Need a way to manage cookies from the web process
        https://bugs.webkit.org/show_bug.cgi?id=55086
        
        This patch adds the plumbing and classes that are needed to manage cookies from the web process.
        The functions that the API calls are currently stubs, but will be implemented in a follow-up patch.

        Project file changes.
        * DerivedSources.make:
        * DerivedSources.pro:
        * GNUmakefile.am:
        * WebKit2.pri:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * win/WebKit2Common.vsprops:
        * win/WebKit2Generated.make:

        Add some needed plumbing for WebCookieManager{Proxy}.
        * Platform/CoreIPC/MessageID.h:
        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        * UIProcess/API/C/WKAPICast.h:

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetCookieManager): Gets the cookie manager proxy.
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/WKCookieManager.cpp: Added.
        (WKCookieManagerGetTypeID):
        (WKCookieManagerGetHostnamesWithCookies): Calls through to WebCookieManagerProxy.
        (WKCookieManagerDeleteCookiesForHostname): Ditto.
        (WKCookieManagerDeleteAllCookies): Ditto.
        * UIProcess/API/C/WKCookieManager.h: Added.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage): Add a case for the cookie manager.
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext): Initialize the cookie manager.
        (WebKit::WebContext::~WebContext): Invalidate the cookie manager.
        (WebKit::WebContext::disconnectProcess): Ditto.
        (WebKit::WebContext::didReceiveMessage): Add a case for the cookie manager.
        * UIProcess/WebContext.h:
        (WebKit::WebContext::cookieManagerProxy): Returns the cookie manager.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage): Add a case for the cookie manager.

        * UIProcess/WebCookieManagerProxy.cpp: Added.
        (WebKit::WebCookieManagerProxy::create):
        (WebKit::WebCookieManagerProxy::WebCookieManagerProxy):
        (WebKit::WebCookieManagerProxy::~WebCookieManagerProxy):
        (WebKit::WebCookieManagerProxy::invalidate):
        (WebKit::WebCookieManagerProxy::didReceiveMessage): 
        (WebKit::WebCookieManagerProxy::getHostnamesWithCookies): Call through to the web process to get hostnames with cookies.
        (WebKit::WebCookieManagerProxy::didGetHostnamesWithCookies): Call the callback we were passed in getHostnamesWithCookies.
        (WebKit::WebCookieManagerProxy::deleteCookiesForHostname): Call through to the web process to delete cookies
            for the origin.
        (WebKit::WebCookieManagerProxy::deleteAllCookies): Call through to the web process to delete all cookies.
        * UIProcess/WebCookieManagerProxy.h: Added.
        (WebKit::WebCookieManagerProxy::clearContext):
        (WebKit::WebCookieManagerProxy::type):
        * UIProcess/WebCookieManagerProxy.messages.in: Added.

        * WebProcess/Cookies: Added.
        * WebProcess/Cookies/WebCookieManager.cpp: Added.
        (WebKit::WebCookieManager::shared):
        (WebKit::WebCookieManager::WebCookieManager):
        (WebKit::WebCookieManager::didReceiveMessage): Call through to didReceiveWebCookieManagerMessage.
        (WebKit::WebCookieManager::getHostnamesWithCookies): Build an array from a HashSet (that isn't filled yet), and 
            convert that HashSet to a Vector to send to the UI process.
        (WebKit::WebCookieManager::deleteCookiesForHostname): Added a stub.
        (WebKit::WebCookieManager::deleteAllCookies): Ditto.
        * WebProcess/Cookies/WebCookieManager.h: Added.
        * WebProcess/Cookies/WebCookieManager.messages.in: Added.

2011-02-24   Amruth Raj  <amruthraj@motorola.com> and Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com> and Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement WebEventFactory, WebErrors classes for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=48510

        * GNUmakefile.am:
        * Shared/gtk/WebEventFactory.cpp: Added. implementation for
        WebMouseEvent, WebWheelEvent, WebKeyboardEvent.
        * Shared/gtk/WebEventFactory.h: Added.
        * WebProcess/WebCoreSupport/gtk/WebErrorsGtk.cpp: Added. Stubbed
        implementation for GTK port.

2011-02-24  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Alexey Proskuryakov.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Added clearOpener method to WKBundleWebFramePrivate.

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

2011-02-24  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Eric Seidel.

        Support building WebKit with Python 3
        https://bugs.webkit.org/show_bug.cgi?id=55038

        Update the generator scripts to support Python 3.

        * Scripts/generate-message-receiver.py: print is a function in Python 3, write the output to
        sys.stdout to be compatible with Python 2 and 3.
        * Scripts/generate-messages-header.py:
        * Scripts/webkit2/messages.py: dist.iteritems does not exist in Python 3, fallback
          to dict.items which is common to Python 2 and 3.

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

        Reviewed by Laszlo Gombos.

        [Qt] MinGW build fails to link
        https://bugs.webkit.org/show_bug.cgi?id=55050

        Prepend the libraries of subcomponents instead of appending them
        to fix the library order according to the dependency of the libraries

        * WebKit2.pri:

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

        Reviewed by Csaba Osztrogonác.

        [Qt] REGRESSION(69304): WKNativeEvent.h forwarding header is always regenerated
        https://bugs.webkit.org/show_bug.cgi?id=47589

        In case of file name clashes only generate forwarding header for the current platform.

        * Scripts/generate-forwarding-headers.pl:

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

        Reviewed by Sam Weinig.

        Remove some of the old accelerated compositing code
        https://bugs.webkit.org/show_bug.cgi?id=55084

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::exitAcceleratedCompositingMode):
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/API/qt/qwkpage_p.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::exitAcceleratedCompositingMode):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/LayerBackedDrawingAreaProxyMac.mm:
        (WebKit::LayerBackedDrawingAreaProxy::attachCompositingContext):
        (WebKit::LayerBackedDrawingAreaProxy::detachCompositingContext):
        * UIProcess/win/WebView.cpp:
        * UIProcess/win/WebView.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::enterAcceleratedCompositingMode):
        (WebKit::WebPage::exitAcceleratedCompositingMode):
        * WebProcess/WebPage/WebPage.h:

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

        Reverting an unintentional change that was part of http://trac.webkit.org/changeset/79494.
        Unreviewed.

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

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

        Reviewed by Adam Roben.

        Mac OS X Services are not available for selected text in WebKit2 windows.
        https://bugs.webkit.org/show_bug.cgi?id=54777
        <rdar://problem/8666428>
        
        This patch adds support for Mac OS X Services in WebKit2 windows.
        In WKView we now call registerServicesMenuSendTypes providing the
        pasteboard types supported by WebKit and we also implement the two
        protocol methods required to validate the send type and write the
        content to the pasteboard. Unfortunately, AppKit expects the content
        to be available in the pasteboard upon return from writeSelectionToPasteboard and
        this is the reason why the call to the WebProcess is synchronous.

        * Shared/SelectionState.h:
        (WebKit::SelectionState::SelectionState): Extended to include
        isContentRichlyEditable
        * Shared/mac/PasteboardTypes.h:
        * Shared/mac/PasteboardTypes.mm:
        (WebKit::PasteboardTypes::forSelection): Added.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:contextRef:pageGroupRef:]): Added call
        to registerServicesMenuSendTypes.
        (-[WKView writeSelectionToPasteboard:types:]): Added.
        (-[WKView validRequestorForSendType:returnType:]): Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::writeSelectionToPasteboard):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::respondToChangedSelection): Modified to
        support the new SelectionState value.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::writeSelectionToPasteboard): Added synchronous
        message to write the selected content to the pasteboard.

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

        Reviewed by Sam Weinig.

        Add a ShareableBitmap::create overload that takes an existing SharedMemory object
        https://bugs.webkit.org/show_bug.cgi?id=55081

        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::createShareable):
        (WebKit::ShareableBitmap::create):
        * Shared/ShareableBitmap.h:

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

        Reviewed by Dan Bernstein.

        Web Inspector toolbar looks bad in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=55076
        <rdar://problem/8866258>

        * UIProcess/API/mac/WKView.mm:
        (-[WKView mouseDownCanMoveWindow]):
        Return NO from mouseDownCanMoveWindow to prevent drags in the (now transparent) inspector WKView
        from dragging the window around.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        Call [WKView setDrawsBackground:NO].

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

        Reviewed by Anders Carlsson.

        Remove WKPageForceRepaintWithInvalidation and instead make WKPageForceRepaint
        always dirty the entire page.

        * Shared/ForceRepaintFlags.h: Removed.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageForceRepaint):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::forceRepaint):
        * UIProcess/WebPageProxy.h:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::forceRepaint):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::forceRepaint):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * win/WebKit2.vcproj:

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

        Reviewed by Sam Weinig.

        Race condition when creating and destroying pages quickly
        https://bugs.webkit.org/show_bug.cgi?id=55061
        <rdar://problem/8708435>

        When the last page in a web process is closed, the web process would
        previously terminate, even if the UI process had created a new page
        (the CreateNewPage message just wouldn't have reached the web process yet).

        Fix this by adding a ShouldTerminate message that the web process sends when it's
        about to terminate. If the UI process has any pending pages, downloads etc. it will
        prevent the web process from terminating. Otherwise, it will immmediately disconnect
        the WebPageProxy so that creating a page after that will launch a new web process.

        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
        (WebKit::WebPluginSiteDataManager::shouldTerminate):
        * UIProcess/Plugins/WebPluginSiteDataManager.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::shouldTerminate):
        (WebKit::WebContext::disconnectProcess):
        * UIProcess/WebContext.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::disconnect):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        (WebKit::WebProcessProxy::didClose):
        (WebKit::WebProcessProxy::shouldTerminate):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::terminateIfPossible):

2011-02-23  Mike Thole  <mthole@apple.com>

        Reviewed by Darin Adler.

        WKBundleNavigationAction.h should be exposed as a public header
        https://bugs.webkit.org/show_bug.cgi?id=55059

        * WebKit2.xcodeproj/project.pbxproj:
        Changed WKBundleNavigationAction.h from 'project' to 'public'.

2011-02-23  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Make sure Symbian binary UIDs are unique

        * WebProcess.pro: Resolve the UID collision with QtTestBrowser.pro
        by changing the UID.

2011-02-23  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Fix the Symbian build after r79334
        https://bugs.webkit.org/show_bug.cgi?id=55044

        * WebKit2.pri: Copy the rules from JavaScriptCore.pri for
        defineTest().

        Remove addWebKit2LibWholeArchive as it is no longer needed.

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

        Unreviewed, fixed GTK WebKit2 compilation after r79366.

        * GNUmakefile.am:

2011-02-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Rename PLATFORM(CF) to USE(CF)
        https://bugs.webkit.org/show_bug.cgi?id=53540

        * UIProcess/WebBackForwardList.h:
        * UIProcess/WebPageProxy.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::formatLocalizedString):

2011-02-23  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] [WK2] When the context menu is empty, we should still send the signal QWKPage::showContextMenu()
        https://bugs.webkit.org/show_bug.cgi?id=54996

        Send the signal QWKPage::showContextMenu() with an empty menu even if the content menu generated
        is empty/contain only disabled elements.

        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::showContextMenu):
        * UIProcess/qt/WebContextMenuProxyQt.cpp:
        (WebKit::WebContextMenuProxyQt::showContextMenu):

2011-02-22  Dan Bernstein  <mitz@apple.com>

        LLVM Compiler build fix.

        * Scripts/webkit2/messages.py:
        * WebProcess/ApplicationCache/WebApplicationCacheManager.h:

2011-02-22  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Alexey Proskuryakov.

        Drop the language tag part from the User Agent string
        https://bugs.webkit.org/show_bug.cgi?id=54560

        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::standardUserAgent):

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::standardUserAgent):

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

        * UIProcess/win/WebPageProxyWin.cpp:
        (WebKit::WebPageProxy::standardUserAgent): Drop the language tag
        part and fix style.

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

        Reviewed by Anders Carlsson.

        Add WebKit2 API to force a repaint with an invalidation
        https://bugs.webkit.org/show_bug.cgi?id=55015

        * Shared/ForceRepaintFlags.h: Added.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageForceRepaint):
        (WKPageForceRepaintWithInvalidation):
        * UIProcess/API/C/WKPage.h:
        Add WKPageForceRepaintWithInvalidation which does the same thing WKPageForceRepaint
        but also calls setNeedsDisplay on the entire bounds of the page.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::forceRepaint):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::forceRepaint):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Pipe the flag down to the WebProcess.

        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Add ForceRepaintFlags.h.

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

        Reviewed by Dan Bernstein.

        <rdar://problem/9039670>
        
        Make sure that we set the accelerateDrawing property on the LayerTreeHosts's
        non-composited content layer if the preference is set.

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

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

        Fix it Windows-style.

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

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

        Reviewed by Dan Bernstein.

        Rename WebProcess::shutdownIfPossible to WebProcess::terminateIfPossible
        https://bugs.webkit.org/show_bug.cgi?id=55008

        * WebProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::downloadFinished):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::removeWebPage):
        (WebKit::WebProcess::terminateIfPossible):
        (WebKit::WebProcess::getSitesWithPluginData):
        * WebProcess/WebProcess.h:
        * WebProcess/gtk/WebProcessGtk.cpp:
        (WebKit::WebProcess::platformTerminate):
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformTerminate):
        * WebProcess/qt/WebProcessQt.cpp:
        (WebKit::WebProcess::platformTerminate):
        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformTerminate):

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

        Windows build-fix attempt.

        * win/WebKit2Generated.make:

2011-02-22  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed.

        <rdar://problem/8762042> and  https://bugs.webkit.org/show_bug.cgi?id=54514
        API to view and delete Application Cache data by origin.

        [Qt][WK2] Buildfix after r79364.

        * DerivedSources.pro:
        * WebKit2.pri:

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

        Reviewed by Anders Carlsson and looked over by Brian Weinstein.

        <rdar://problem/8762042> and https://bugs.webkit.org/show_bug.cgi?id=54514
        API to view and delete Application Cache data by origin.

        I couldn't help myself - I also re-alphabetized WebResourceCacheManager in many places where
        it's sorting was wrong due to a last minute name change.

        Project file changes:
        * GNUmakefile.am:
        * win/WebKit2.vcproj:
        * win/WebKit2Common.vsprops:
        * win/WebKit2Generated.make:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:

        WK2 build-system and API paperwork:
        * DerivedSources.make:
        * Platform/CoreIPC/MessageID.h:
        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        * UIProcess/API/C/WKAPICast.h:

        Add a helper to perform an ArrayCallback with a Vector of SecurityOriginDatas:
        * Shared/SecurityOriginData.cpp:
        (WebKit::performAPICallbackWithSecurityOriginDataVector):
        * Shared/SecurityOriginData.h:
        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::didGetCacheOrigins): Use performAPICallbackWithSecurityOriginDataVector here.

        Add an ApplicationCacheManagerProxy to the context and invalidate it at the appropriate times:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::processDidClose):
        (WebKit::WebContext::didReceiveMessage): Route messages to the right proxy.
        * UIProcess/WebContext.h:
        (WebKit::WebContext::applicationCacheManagerProxy):
        (WebKit::WebContext::resourceCacheManagerProxy):

        Add API to get the ApplicationCacheManager for a context:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetApplicationCacheManager):
        (WKContextGetResourceCacheManager):
        * UIProcess/API/C/WKContext.h:

        Route messages to the right place:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage):

        Add the API object, which wraps to WebApplicationCacheManagerProxy:
        * UIProcess/API/C/WKApplicationCacheManager.cpp: Added.
        (WKApplicationCacheManagerGetTypeID):
        (WKApplicationCacheManagerGetApplicationCacheOrigins):
        (WKApplicationCacheManagerDeleteEntriesForOrigin):
        (WKApplicationCacheManagerDeleteAllEntries):
        * UIProcess/API/C/WKApplicationCacheManager.h: Added.

        The UIProcess implementation of the manager to send messages to the WebProcess and pipe a callback back up to the client:
        * UIProcess/WebApplicationCacheManagerProxy.cpp: Added.
        (WebKit::WebApplicationCacheManagerProxy::create):
        (WebKit::WebApplicationCacheManagerProxy::WebApplicationCacheManagerProxy):
        (WebKit::WebApplicationCacheManagerProxy::~WebApplicationCacheManagerProxy):
        (WebKit::WebApplicationCacheManagerProxy::invalidate):
        (WebKit::WebApplicationCacheManagerProxy::didReceiveMessage):
        (WebKit::WebApplicationCacheManagerProxy::getApplicationCacheOrigins):
        (WebKit::WebApplicationCacheManagerProxy::didGetApplicationCacheOrigins): Use performAPICallbackWithSecurityOriginDataVector here.
        (WebKit::WebApplicationCacheManagerProxy::deleteEntriesForOrigin):
        (WebKit::WebApplicationCacheManagerProxy::deleteAllEntries):
        * UIProcess/WebApplicationCacheManagerProxy.h: Added.
        (WebKit::WebApplicationCacheManagerProxy::clearContext):
        (WebKit::WebApplicationCacheManagerProxy::type):
        * UIProcess/WebApplicationCacheManagerProxy.messages.in: Added.

        The WebProcess implementation to response to UIProcess messages and actually do the dirty-work in WebCore:
        * WebProcess/ApplicationCache: Added.
        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp: Added.
        (WebKit::WebApplicationCacheManager::shared):
        (WebKit::WebApplicationCacheManager::WebApplicationCacheManager):
        (WebKit::WebApplicationCacheManager::didReceiveMessage):
        (WebKit::WebApplicationCacheManager::getApplicationCacheOrigins):
        (WebKit::WebApplicationCacheManager::deleteEntriesForOrigin):
        (WebKit::WebApplicationCacheManager::deleteAllEntries):
        * WebProcess/ApplicationCache/WebApplicationCacheManager.h: Added.
        * WebProcess/ApplicationCache/WebApplicationCacheManager.messages.in: Added.

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

        Reviewed by Sam Weinig.

        Get rid of WebProcessManager
        https://bugs.webkit.org/show_bug.cgi?id=55001

        WebProcessManager had become a stupid map of WebContext > WebProcess relations,
        which isn't really useful since the WebContext already knows about its process.

        * Shared/WebURLRequest.cpp:
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::ensureWebProcess):
        (WebKit::WebContext::processDidFinishLaunching):
        * UIProcess/WebProcessManager.cpp: Removed.
        * UIProcess/WebProcessManager.h: Removed.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didClose):
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

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

        Reviewed by Darin Adler.

        Get rid of WebProcessManager::getAllWebProcessContexts
        https://bugs.webkit.org/show_bug.cgi?id=55000

        * Shared/WebURLRequest.cpp:
        (WebKit::WebURLRequest::setDefaultTimeoutInterval):
        Call WebContext::allContexts instead.

        * UIProcess/WebContext.cpp:
        * UIProcess/WebContext.h:
        Add a vector of WebContext objects. Update it when creating and destroying contexts.

        * UIProcess/WebProcessManager.cpp:
        * UIProcess/WebProcessManager.h:
        Remove WebProcessManager::getAllWebProcessContexts.

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

        Reviewed by Anders Carlsson.

        Re-add early bail out in dispatchDecidePolicyForNavigationAction with prevents
        a crash running fast/loader/empty-embed-src-attribute.html. This matches a 
        bail out in the default policy delegate in WebKit1.

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

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

        Reviewed by Dan Bernstein.

        Grammar correction from Spelling & Grammar window doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=54982
        <rdar://problem/8940918>

        * UIProcess/API/mac/WKView.mm:
        (-[WKView isGrammarCheckingEnabled]):
        (-[WKView setGrammarCheckingEnabled:]):
        Call down to the text checker.

        * UIProcess/TextChecker.h:
        Add updateSpellingUIWithGrammarString.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateSpellingUIWithGrammarString):
        Call TextChecker::updateSpellingUIWithGrammarString.

        * UIProcess/WebPageProxy.messages.in:
        Add UpdateSpellingUIWithGrammarString message.

        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        * UIProcess/qt/TextCheckerQt.cpp:
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        * UIProcess/win/TextCheckerWin.cpp:
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        Add stubs.

        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        Update the spelling panel.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::updateSpellingUIWithGrammarString):
        Send an UpdateSpellingUIWithGrammarString message to the UI process.

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

        Reviewed by Anders Carlsson.

        notImplemented() should behave identical in WebCore and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=54449

        Use NotImplemented.h from WebCore. Initialize logging channels.
        Remove the WebKit2 concept of notImplemented().

        * Platform/gtk/SharedMemoryGtk.cpp:
        * Platform/gtk/WorkQueueGtk.cpp:
        * Platform/qt/WorkQueueQt.cpp:
        * Platform/win/WorkQueueWin.cpp:
        * Shared/NotImplemented.h: Removed.
        * Shared/Plugins/NPIdentifierData.cpp:
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        * Shared/Plugins/NPVariantData.cpp:
        * Shared/cairo/ShareableBitmapCairo.cpp:
        * Shared/gtk/ShareableBitmapGtk.cpp:
        * Shared/gtk/WebCoreArgumentCodersGtk.cpp:
        * Shared/qt/WebCoreArgumentCodersQt.cpp:
        * Shared/win/LayerTreeContextWin.cpp:
        * UIProcess/API/mac/PageClientImpl.mm:
        * UIProcess/API/qt/qwkpage.cpp:
        * UIProcess/Launcher/gtk/ThreadLauncherGtk.cpp:
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        * UIProcess/Plugins/gtk/PluginInfoStoreGtk.cpp:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        * UIProcess/WebInspectorProxy.cpp:
        * UIProcess/gtk/TextCheckerGtk.cpp:
        * UIProcess/gtk/WebInspectorGtk.cpp:
        * UIProcess/gtk/WebPreferencesGtk.cpp:
        * UIProcess/qt/TextCheckerQt.cpp:
        * UIProcess/qt/WebInspectorProxyQt.cpp:
        * UIProcess/win/TextCheckerWin.cpp:
        * UIProcess/win/WebContextMenuProxyWin.cpp:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Downloads/cf/DownloadCFNet.cpp:
        * WebProcess/Downloads/curl/DownloadCurl.cpp:
        * WebProcess/Downloads/mac/DownloadMac.mm:
        * WebProcess/Downloads/qt/DownloadQt.cpp:
        * WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        * WebProcess/Plugins/Netscape/gtk/NetscapePluginGtk.cpp:
        * WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp:
        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/gtk/WebContextMenuClientGtk.cpp:
        * WebProcess/WebCoreSupport/gtk/WebPopupMenuGtk.cpp:
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        * WebProcess/WebCoreSupport/qt/WebContextMenuClientQt.cpp:
        * WebProcess/WebPage/gtk/WebInspectorGtk.cpp:
        * WebProcess/WebPage/qt/WebInspectorQt.cpp:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        * WebProcess/gtk/WebProcessGtk.cpp:
        * config.h:
        * win/WebKit2.vcproj:

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

        Rubber-stamped by Brady Eidson.

        Invalidate the WebResourceCacheManagerProxy in WebContext::processDidClose.

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

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

        Make DrawingAreaProxyImpl keep track of the most recent state ID it sent to the web process

        This will be useful for sending repeated messages for the same state ID to the web process.
        We don't do this currently, but will need to if we're asked to paint after we've thrown away
        our backing store to save memory.

        Fixes <http://webkit.org/b/54916> DrawingAreaProxyImpl should keep track of the state ID it
        last sent to the web process

        Reviewed by Anders Carlsson.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl): Initialize m_requestedStateID, and
        reordered member initialization to match the new declaration order.
        (WebKit::DrawingAreaProxyImpl::didUpdateState): Added an assertion that the stateID we got
        from the web process is no newer than the most recent one we requested.
        (WebKit::DrawingAreaProxyImpl::sendUpdateState): Changed to increment and send
        m_requestedStateID instead of a new global stateID.

        * UIProcess/DrawingAreaProxyImpl.h: Added m_requestedStateID, and moved the state IDs before
        other data members. Also beefed the comment explaining m_currentStateID.

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

        Reviewed by Laszlo Gombos.

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

        Part 2.

        Build WebCore as a static library, compile the WebKit API and WebKit2 API
        in a final step and link to WebKit2, WebCore and JSC libraries to fix
        linking issues resulting from stripped away symbols.

        * WebKit2.pri: Add include paths.
        * WebKit2.pro: Move include paths to WebKit2.pri and move
        the API source to WebKit/qt/QtWebKit.pro

2011-02-22  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] [WK2] Improve the memory handling of the context menu for WebKit 2
        https://bugs.webkit.org/show_bug.cgi?id=54902

        Refactor the context menu handling of Qt to make it simpler to manage memory.

        WebContextMenuProxyQt uses smart pointer for all the references to menu so
        there is no need to delete it explicitely.

        Passing the QMenu from QWKPage to the client of the signal now uses a QSharedPointer so
        the client can choose to handle the memory, but there is no leak if it does not.

        * UIProcess/API/qt/qgraphicswkview.cpp:
        (QGraphicsWKView::QGraphicsWKView):
        (QGraphicsWKView::showContextMenu):
        * UIProcess/API/qt/qgraphicswkview.h:
        * UIProcess/API/qt/qwkpage.h:
        * UIProcess/qt/WebContextMenuProxyQt.cpp:
        (WebKit::WebContextMenuProxyQt::showContextMenu):
        (WebKit::WebContextMenuProxyQt::createContextMenu):
        * UIProcess/qt/WebContextMenuProxyQt.h:

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

        Reviewed by Xan Lopez.

        [GTK] make distcheck fails
        https://bugs.webkit.org/show_bug.cgi?id=54943

        Removed reference to NotImplemented.h which was removed.

        * GNUmakefile.am:

2011-02-22  Kimmo Kinnunen  <kimmo.t.kinnunen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QtWebProcess should be installed with 'make install'
        https://bugs.webkit.org/show_bug.cgi?id=44100

        Follow the standard in other project files and allow install
        location to be changed with INSTALL_BINS variable.

        * WebProcess.pro: Install QtWebProcess.

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

        Unreviewed, rolling out r79296.
        http://trac.webkit.org/changeset/79296
        https://bugs.webkit.org/show_bug.cgi?id=54941

        Breaks compilation on SnowLeapard Intel Release (Requested by
        kbalazs_ on #webkit).

        * Platform/gtk/SharedMemoryGtk.cpp:
        * Platform/gtk/WorkQueueGtk.cpp:
        * Platform/qt/WorkQueueQt.cpp:
        * Platform/win/WorkQueueWin.cpp:
        * Shared/NotImplemented.h: Copied from Source/WebKit2/WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp.
        * Shared/Plugins/NPIdentifierData.cpp:
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        * Shared/Plugins/NPVariantData.cpp:
        * Shared/cairo/ShareableBitmapCairo.cpp:
        * Shared/gtk/ShareableBitmapGtk.cpp:
        * Shared/gtk/WebCoreArgumentCodersGtk.cpp:
        * Shared/qt/WebCoreArgumentCodersQt.cpp:
        * Shared/win/LayerTreeContextWin.cpp:
        * UIProcess/API/mac/PageClientImpl.mm:
        * UIProcess/API/qt/qwkpage.cpp:
        * UIProcess/Launcher/gtk/ThreadLauncherGtk.cpp:
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        * UIProcess/Plugins/gtk/PluginInfoStoreGtk.cpp:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        * UIProcess/WebInspectorProxy.cpp:
        * UIProcess/gtk/TextCheckerGtk.cpp:
        * UIProcess/gtk/WebInspectorGtk.cpp:
        * UIProcess/gtk/WebPreferencesGtk.cpp:
        * UIProcess/qt/TextCheckerQt.cpp:
        * UIProcess/qt/WebInspectorProxyQt.cpp:
        * UIProcess/win/TextCheckerWin.cpp:
        * UIProcess/win/WebContextMenuProxyWin.cpp:
        * WebKit2.pro:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Downloads/cf/DownloadCFNet.cpp:
        * WebProcess/Downloads/curl/DownloadCurl.cpp:
        * WebProcess/Downloads/mac/DownloadMac.mm:
        * WebProcess/Downloads/qt/DownloadQt.cpp:
        * WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        * WebProcess/Plugins/Netscape/gtk/NetscapePluginGtk.cpp:
        * WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp:
        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/gtk/WebContextMenuClientGtk.cpp:
        * WebProcess/WebCoreSupport/gtk/WebPopupMenuGtk.cpp:
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        * WebProcess/WebCoreSupport/qt/WebContextMenuClientQt.cpp:
        * WebProcess/WebPage/gtk/WebInspectorGtk.cpp:
        * WebProcess/WebPage/qt/WebInspectorQt.cpp:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        * WebProcess/gtk/WebProcessGtk.cpp:
        * config.h:
        * win/WebKit2.vcproj:

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

        Reviewed by Anders Carlsson.

        notImplemented() should behave identical in WebCore and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=54449

        Use NotImplemented.h from WebCore. Initialize logging channels.
        Remove the WebKit2 concept of notImplemented().

        * Platform/gtk/SharedMemoryGtk.cpp:
        * Platform/gtk/WorkQueueGtk.cpp:
        * Platform/qt/WorkQueueQt.cpp:
        * Platform/win/WorkQueueWin.cpp:
        * Shared/NotImplemented.h: Removed.
        * Shared/Plugins/NPIdentifierData.cpp:
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        * Shared/Plugins/NPVariantData.cpp:
        * Shared/cairo/ShareableBitmapCairo.cpp:
        * Shared/gtk/ShareableBitmapGtk.cpp:
        * Shared/gtk/WebCoreArgumentCodersGtk.cpp:
        * Shared/qt/WebCoreArgumentCodersQt.cpp:
        * Shared/win/LayerTreeContextWin.cpp:
        * UIProcess/API/qt/qwkpage.cpp:
        * UIProcess/Launcher/gtk/ThreadLauncherGtk.cpp:
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        * UIProcess/Plugins/gtk/PluginInfoStoreGtk.cpp:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        * UIProcess/WebInspectorProxy.cpp:
        * UIProcess/gtk/TextCheckerGtk.cpp:
        * UIProcess/gtk/WebInspectorGtk.cpp:
        * UIProcess/gtk/WebPreferencesGtk.cpp:
        * UIProcess/qt/TextCheckerQt.cpp:
        * UIProcess/qt/WebInspectorProxyQt.cpp:
        * UIProcess/win/TextCheckerWin.cpp:
        * UIProcess/win/WebContextMenuProxyWin.cpp:
        * WebKit2.pro:
        * WebProcess/Downloads/cf/DownloadCFNet.cpp:
        * WebProcess/Downloads/curl/DownloadCurl.cpp:
        * WebProcess/Downloads/mac/DownloadMac.mm:
        * WebProcess/Downloads/qt/DownloadQt.cpp:
        * WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        * WebProcess/Plugins/Netscape/gtk/NetscapePluginGtk.cpp:
        * WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp:
        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/gtk/WebContextMenuClientGtk.cpp:
        * WebProcess/WebCoreSupport/gtk/WebPopupMenuGtk.cpp:
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        * WebProcess/WebCoreSupport/qt/WebContextMenuClientQt.cpp:
        * WebProcess/WebPage/gtk/WebInspectorGtk.cpp:
        * WebProcess/WebPage/qt/WebInspectorQt.cpp:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        * WebProcess/gtk/WebProcessGtk.cpp:

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

        Set and update the window title for the Web Inspector in WebKit2.

        https://webkit.org/b/50945
        rdar://problem/8762410

        Reviewed by Adam Roben.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::inspectedURLChanged): Added. Call platformInspectedURLChanged.
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.messages.in: Added InspectedURLChanged.
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformInspectedURLChanged): Added. Set the window title.
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformInspectedURLChanged): Added. Set the window title.
        * UIProcess/gtk/WebInspectorGtk.cpp:
        (WebKit::WebInspectorProxy::platformInspectedURLChanged): Added. Not implemented.
        * UIProcess/qt/WebInspectorProxyQt.cpp:
        (WebKit::WebInspectorProxy::platformInspectedURLChanged): Added. Not implemented.
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        (WebKit::WebInspectorFrontendClient::inspectedURLChanged): Call WebInspector::inspectedURLChanged.
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::inspectedURLChanged): Added. Send the InspectedURLChanged message.
        * WebProcess/WebPage/WebInspector.h:

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

        Reviewed by Anders Carlsson.

        Can't paste from 3rd party text editor into WebKit2 window.
        <rdar://problem/8978624>

        * WebProcess/com.apple.WebProcess.sb:

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

        Reviewed by Dan Bernstein.

        Initialize DrawingAreaProxy::m_size
        https://bugs.webkit.org/show_bug.cgi?id=54913

        This was removed in r76962 since it caused flashes when switching drawing areas due to
        entering and exiting composited mode, but since we no longer switch drawing areas we can
        put it back.

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

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

        Add some assertions about the state IDs we receive from the web process

        Rubber-stamped by Anders Carlsson.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::update):
        (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode):
        Assert that the state ID the web process sent us is no newer than our own state ID.

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

        Rename DrawingArea[Proxy]Impl's "sequence number" concept to "state ID".

        As explained in r79251, DrawingAreaProxyImpl has some state that, when it changes, causes
        all operations performed before that state change to become invalid. Currently, this state
        consists of a single piece of data: the view's size. Eventually it will encompass more data
        (e.g., the backing store we're drawing into; when we start throwing away the backing store
        to save memory, our state will have changed, and any operations that were intended for the
        old backing store will have become invalid). r79251 effectively transformed
        DrawingArea[Proxy]Impl's "sequence number," which incremented every time DrawingAreaImpl
        sent DrawingAreaProxyImpl a message, to a "state ID," which only increments when the view's
        size changes.

        This patch is just a set of simple renames to reflect the transformation that r79251
        effected. It should not introduce any changes in behavior. The renames are:
          - Messages::DrawingArea::SetSize -> UpdateState
          - Messages::DrawingAreaProxy::DidSetSize -> DidUpdateState
          - DrawingAreaProxyImpl::m_lastDidSetSizeSequenceNumber -> m_currentStateID
          - DrawingAreaProxyImpl::m_isWaitingForDidSetSize -> m_isWaitingForDidUpdateState
          - DrawingAreaProxyImpl::waitForAndDispatchDidSetSize -> waitForAndDispatchDidUpdateState
          - DrawingAreaImpl::m_inSetSize -> m_inUpdateState
          - generateSequenceNumber -> generateStateID
          - sequenceNumber -> stateID

        Fixes <http://webkit.org/b/54911> DrawingArea[Proxy]Impl's "sequence number" concept should
        be renamed to "state ID"

        Reviewed by Anders Carlsson.

        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxy.messages.in:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        * UIProcess/DrawingAreaProxyImpl.h:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        * WebProcess/WebPage/DrawingAreaImpl.h:
        Performed the renames described above.

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

        Reviewed by Adam Roben.

        REGRESSION (WebKit2): HTTP requests time out after 60 seconds
        https://bugs.webkit.org/show_bug.cgi?id=54755
        <rdar://problem/9006592>

        * Shared/API/c/WKURLRequest.cpp:
        (WKURLRequestSetDefaultTimeoutInterval):
        * Shared/API/c/WKURLRequest.h:
        Added an API to set a default timeout interval for requests created from URLs. The API
        affects both the UI process and requests created internally by the Web process. Requests
        created from NSURLRequest or CFURLRequest take timeout from those.

        * Shared/WebURLRequest.cpp: (WebKit::WebURLRequest::setDefaultTimeoutInterval):
        * Shared/WebURLRequest.h:
        Pipe the default timeout interval from WKURLRequest down to actual implementation. Since
        WebURLRequest is currently implemented with WebCore::ResourceRequest, it automatically respects
        NSURLRequest default timeout interval.

        * UIProcess/WebProcessManager.cpp: (WebKit::WebProcessManager::getAllWebProcessContexts):
        * UIProcess/WebProcessManager.h:
        Added a way to enumerate all contexts running in separate processes.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        (WebKit::WebContext::ensureWebProcess):
        (WebKit::WebContext::setDefaultRequestTimeoutInterval):
        * UIProcess/WebContext.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::setDefaultRequestTimeoutInterval):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        Use UI process default timeout interval in separate process contexts, too.

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

        Reviewed by Adam Roben.

        WebResourceCacheManager should be responsible for managing the CFURLCache as well
        as the WebCore memory cache.
        https://bugs.webkit.org/show_bug.cgi?id=54886
        Part of <rdar://problem/8971738>

        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::getCacheOrigins): Call through to cFURLCacheHostNames, and add
            create SecurityOrigin's for them and add them to the set of SecurityOrigins with cache.
        (WebKit::WebResourceCacheManager::clearCacheForOrigin): Call through to clear the CFURLCache for
            the origin's hostname.
        * WebProcess/ResourceCache/WebResourceCacheManager.h:

        * WebProcess/ResourceCache/cf: Added.
        * WebProcess/ResourceCache/cf/WebResourceCacheManagerCFNet.cpp: Added.
        (WebKit::WebResourceCacheManager::cfURLCacheHostNames): Call through to WebKitSystemInterface.
        (WebKit::WebResourceCacheManager::clearCFURLCacheForHostNames): Ditto.

        * win/WebKit2.vcproj: Added new file.
        * WebKit2.xcodeproj/project.pbxproj: Ditto.

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

        Move control of the sequence number from DrawingAreaImpl to DrawingAreaProxyImpl

        DrawingAreaProxyImpl has some state that, when it changes, causes all operations performed
        before that state change to become invalid. When painting, we need to have performed at
        least one Update for the most recent state; otherwise, we'll be painting old/incorrect bits
        into the view.

        Currently, this state consists of a single piece of data: the view's size. Whenever the
        state (i.e., size) changes, we tell the web process via the SetSize message, and the web
        process lets us know that it has updated to match the new state (i.e., size) via the
        DidSetSize message.

        When it's time to paint, if we're waiting for the web process to update to match our current
        state (i.e., size), we block for a little while hoping to receive a DidSetSize message so
        that we can paint up-to-date bits into the window. This can cause us to receive messages
        out-of-order; the DidSetSize message will be processed immediately, and any messages that
        were sent before the DidSetSize message will be processed later. Since the messages from
        before the DidSetSize message correspond to an old state (i.e., size), they are no longer
        useful (e.g., they contain bits of the page that are drawn at the wrong size/location), so
        we discard them.

        The way we identify and discard these messages is by keeping track of a sequence number.
        Currently, DrawingAreaImpl sends a monotonically-increasing sequence number to
        DrawingAreaProxyImpl with every message. Whenever DrawingAreaProxyImpl receives a DidSetSize
        message, it records the sequence number that came along with it. If we then later receive
        any messages that have a lower sequence number, we know they correspond to an old state
        (i.e., size) and can discard them.

        This patch moves control of the sequence number to DrawingAreaProxyImpl.
        DrawingAreaProxyImpl now sends a monotonically-increasing sequence number in the SetSize
        message. DrawingAreaImpl records this sequence number when it receives the SetSize message,
        and sends it back to DrawingAreaProxyImpl in every message. Otherwise the logic is the same
        as before.

        This should cause no changes in behavior, but will allow DrawingAreaProxyImpl to request a
        full backing store update (by incrementing the sequence number) at times other than when the
        view's size changes (e.g., after it has thrown away its backing store in order to save
        memory).

        Fixes <http://webkit.org/b/54907> DrawingAreaProxyImpl should tell DrawingAreaImpl what
        sequence number to use

        Reviewed by Anders Carlsson.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::generateSequenceNumber): Moved here from DrawingAreaImpl.cpp.
        (WebKit::DrawingAreaProxyImpl::sendSetSize): Changed to pass a new sequence number in the
        SetSize message.
        (WebKit::DrawingAreaProxyImpl::waitForAndDispatchDidSetSize): Added a FIXME about a
        potential improvement.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::setSize): Updated to match the message's new parameters.

        * WebProcess/WebPage/DrawingArea.messages.in: Added a sequenceNumber parameter to SetSize.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl): Initialize m_sequenceNumber.
        (WebKit::DrawingAreaImpl::setSize): Record the new sequence number from the UI process.

        (WebKit::DrawingAreaImpl::layerHostDidFlushLayers):
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
        (WebKit::DrawingAreaImpl::display):
        Send m_sequenceNumber, instead of a new sequence number, back to the UI process.

        * WebProcess/WebPage/DrawingAreaImpl.h: Added m_sequenceNumber, updated setSize function to
        match the base class.

2011-02-21  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 54894 - Make inheritance structure described by ClassInfo match C++ class hierarchy.

        The ClassInfo objects describe an inheritance hierarchy, with each ClassInfo instance
        containing a pointer to its parent class. These links should reflect the inheritance
        hierarchy of C++ classes below JSObject. For the large part it does, but in some cases
        entries in the C++ hierarchy are skipped over. This presently likely doesn't matter,
        since intervening C++ classes may not have ClassInfo - but would be a potential bug
        were ClassInfo were to be added.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:

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

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement WorkQueue::sheduleWorkAfterDelay
        https://bugs.webkit.org/show_bug.cgi?id=54878

        * Platform/qt/WorkQueueQt.cpp:
        (WorkQueue::scheduleWorkAfterDelay):

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

        Reviewed by Martin Robinson.

        [GTK] Add WebResourceCacheDataManager to the compilation after r78848
        https://bugs.webkit.org/show_bug.cgi?id=54732

        Added resource cache manager API to GTK+ compilation after r78848.

        * GNUmakefile.am:

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

        Reviewed by Dan Bernstein.

        Crash in WebProcess at com.apple.WebCore: WebCore::Page::goToItem + 46
        <rdar://problem/8942726>

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::goForward):
        (WebKit::WebPage::goBack):
        (WebKit::WebPage::goToBackForwardItem):
        Defend agains null HistoryItems.

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

        Reviewed by Maciej Stachowiak.

        Crash when a plug-in requests a javascript: url that destroys the plug-in
        https://bugs.webkit.org/show_bug.cgi?id=54837
        <rdar://problem/9005475>

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::destroy):
        Null out m_pluginController.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performJavaScriptURLRequest):
        Don't access the frame through m_pluginElement since it will be nulled out
        when the plug-in is destroyed.

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

        Reviewed by Sam Weinig.

        Fix another crash when a plug-in is destroyed when evaluating JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=54834
        <rdar://problem/9005475>

        This contains three separate fixes:

        - In unprotectPluginFromDestruction we can't just destroy the plug-in once
          the count reaches zero, because the plug-in might still have code executing
          on the stack. To fix this we use a zero-delay timer to defer destruction
          of the plug-in.

        - Trying to get the NPObject for the window using NPN_GetValue would return
          NPERR_NO_ERROR, even if the returned NPObject was null. Fix this to return
          NPERR_GENERIC_ERROR instead.

        - Protect the plug-in from destruction anytime an NPAPI call that sends a 
          synchronous IPC message is made.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::PluginControllerProxy):
        (WebKit::PluginControllerProxy::destroy):
        (WebKit::PluginControllerProxy::unprotectPluginFromDestruction):
        * PluginProcess/PluginControllerProxy.h:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::PluginDestructionProtector::PluginDestructionProtector):
        (WebKit::NPN_GetValue):
        (WebKit::NPN_Evaluate):
        (WebKit::NPN_GetProperty):
        (WebKit::NPN_SetProperty):
        (WebKit::NPN_RemoveProperty):
        (WebKit::NPN_HasProperty):
        (WebKit::NPN_HasMethod):
        (WebKit::NPN_Enumerate):
        (WebKit::NPN_Construct):
        (WebKit::NPN_GetValueForURL):
        (WebKit::NPN_SetValueForURL):

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

        Reviewed by Anders Carlsson.

        Add phase in addition to momentumPhase to platform wheel events
        Part of <rdar://problem/8945362>

        Rename existing phase to momentumPhase.

        * Shared/WebEvent.h:
        (WebKit::WebWheelEvent::momentumPhase):
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformWheelEvent::WebKit2PlatformWheelEvent):
        * Shared/WebWheelEvent.cpp:
        (WebKit::WebWheelEvent::WebWheelEvent):
        (WebKit::WebWheelEvent::encode):
        (WebKit::WebWheelEvent::decode):
        * Shared/mac/WebEventFactory.mm:
        (WebKit::phaseForEvent):
        (WebKit::momentumPhaseForEvent):
        (WebKit::WebEventFactory::createWebWheelEvent):

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

        Reviewed by Dan Bernstein.

        Crash when trying to take a snapshot of an uninitialized plug-in
        https://bugs.webkit.org/show_bug.cgi?id=54812

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::notifyWidget):
        Don't try to create a snapshot of the plug-in if it hasn't been initialized.

2011-02-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 54786 - Devirtualize JSCell::classInfo()

        Instead of making a virtual function call, add a pointer to the ClassInfo
        onto Structure.

        This removes a virtual function call, and paves the way towards removing all
        the createStructure methods, and StructureFlags/AnonymousSlotCount properties
        (these should be able to move onto ClassInfo).

        Calls to Structure::create must now pass a pointer to the ClassInfo for the
        structure. All objects now have a ClassInfo pointer, non-object cell types
        still do not.

        Changes are most mechanical, involving three steps:
            * Remove virtual classInfo() methods.
            * Add &s_info parameter to calls to Structure::create.
            * Rename ClassInfo static members on classes from 'info' to 's_info',
              for consistency.

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

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

        Reviewed by Anders Carlsson.

        Rename performLookupAtCurrentMouseLocation to performDictionaryLookupAtCurrentMouseLocation

        * UIProcess/API/mac/WKView.mm:
        (-[WKView performDictionaryLookupAtCurrentMouseLocation]):
        * UIProcess/API/mac/WKViewPrivate.h:

2011-02-19  Charlie Reis  <creis@chromium.org>

        Reviewed by Mihai Parparita.

        Ensure loading has stopped in HistoryController::goToItem
        https://bugs.webkit.org/show_bug.cgi?id=54517

        Add a FrameLoaderClient callback for whether to stop loading before goToItem.

        Test: http/tests/navigation/forward-to-fragment-fires-onload.html

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

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

        Reviewed by Adele Peterson.

        Real fix for <rdar://problem/9025723> CrashTracer: [USER] 
        1 crash in WebProcess at com.apple.WebKit2: 
        WebKit::WebPage::didChangeScrollOffsetForMainFrame + 31

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::didChangeScrollOffset):
        Add null check for the FrameView. This function can be called when the
        FrameView is being torn down during a transition to a new FrameView.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didChangeScrollOffsetForMainFrame):
        Revert last attempt.

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

        Reviewed by Sam Weinig.

        Hang trying to load nytimes.com with Flash installed
        <rdar://problem/9018113> 

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendSyncMessage):
        Call beginWaitForSyncReply() before sending the message. Otherwise, in some cases we could
        have gotten back a synchronous request before calling beginWaitForSyncReply(), and then we wouldn't
        process it correctly. (Which would lead to the hang).

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

        Reviewed by Kevin Decker.

        <rdar://problem/9021296> Some plug-ins are the wrong size after zooming
        
        Use the same frame/bounds adjustment that we use for NSView-based
        plugins in WebKit2, which allows plug-ins and their snapshots to
        render with the correct size after scaling.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::setBoundsSize):
        (WebKit::PluginView::viewGeometryDidChange):
        (WebKit::PluginView::clipRectInWindowCoordinates):
        * WebProcess/Plugins/PluginView.h:

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

        Rubber-stamped by Adele Peterson.

        Fix for <rdar://problem/9025723> CrashTracer: [USER] 
        1 crash in WebProcess at com.apple.WebKit2: 
        WebKit::WebPage::didChangeScrollOffsetForMainFrame + 31

        Simple null-check.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didChangeScrollOffsetForMainFrame):

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

        Reviewed by Kenneth Rohde Christiansen.

        Tiled backing store area is too big.
        Error in area calculcation causes size of backing store
        up to 8 times bigger than viewport with default multipliers.
        https://bugs.webkit.org/show_bug.cgi?id=54587

        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::calculateKeepRect):
        (WebKit::TiledDrawingAreaProxy::calculateCoverRect):

2011-02-18  John Sullivan  <sullivan@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9026169>
        https://bugs.webkit.org/show_bug.cgi?id=54780
        pendingAPIRequestURL isn't updated for WKPageGoToBackForwardListItem

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::goToBackForwardItem):
        Update the pending API URL.

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

        Reviewed by Sam Weinig.

        Accelerated content fades in when using a layer backed WKView
        <rdar://problem/9021586>

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _enterAcceleratedCompositingMode:]):
        Make a new nested CATransaction and disable animations when adding the layer 
        hosting subview. This avoids an implicit fade animation that would otherwise occur.

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

        Reviewed by Dan Bernstein.

        Plugin snapshot location is wrong for subframes
        https://bugs.webkit.org/show_bug.cgi?id=54776
        
        Only change the CTM to the way that the plugin expects it
        when painting the plugin, not when drawing the snapshot.
        This fixes the snapshot location when painting flattened
        frames.

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

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

        Reviewed by Simon Fraser.

        Implement NetscapePlugin::pluginComplexTextInputIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=54770

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

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

        Reviewed by Maciej Stachowiak.

        Add the ability to ask the WKPage if the main frame is pinned
        to the right or left hand side.
        Part of <rdar://problem/9017043>.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageIsPinnedToLeftSide):
        (WKPageIsPinnedToRightSide):
        * UIProcess/API/C/WKPage.h:
        Add new API calls.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::processDidCrash):
        (WebKit::WebPageProxy::didChangeScrollOffsetPinningForMainFrame):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isPinnedToLeftSide):
        (WebKit::WebPageProxy::isPinnedToRightSide):
        Initialize, reset and update the pinned state.

        * UIProcess/WebPageProxy.messages.in:
        Add message to update the pinned state.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::didChangeScrollOffset):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::didChangeScrollOffsetForMainFrame):
        * WebProcess/WebPage/WebPage.h:
        Cache the pinned state, and only update the UIProcess when it
        changes.

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

        Reviewed by Simon Fraser.

        Fix assertion in SharedMemory::create when trying to snapshot 0x0 plug-in
        https://bugs.webkit.org/show_bug.cgi?id=54768

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::snapshot):
        Don't try to create a handle from a null ShareableBitmap.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::snapshot):
        Check for a zero sized plug-in before trying to create a snapshot.

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

        Reviewed by Simon Fraser.

        WKView flashes when entering/exiting compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=54695
        <rdar://problem/9011554>

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _exitAcceleratedCompositingMode]):
        Remove the layer hosting view before clearing out its layer, otherwise we can get
        white flashes when exiting accelerated compositing mode.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        When entering accelerated compositing mode, we want to defer sending the message
        until we've actually committed the layer tree and pushed all changes over to the
        UI process.

        (WebKit::DrawingAreaImpl::layerHostDidFlushLayers):
        Tell the layer tree host to force a repaint. This will ensure that all layer tree
        changes are pushed over to the UI process. When that is done, send the new layer tree
        context over to the UI process.

        (WebKit::DrawingAreaImpl::setRootCompositingLayer):
        When exiting compositing mode in response to a didSetSize, we want to exit accelerated 
        compositing mode right away to avoid flashes. This is safe since we've laid out the page
        already so we won't end up reentering setRootCompositingLayer.

        (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode):
        Tell the layer tree host to notify us when the next layer tree flush happened, so we can
        let the UI process know. If we're entering accelerated compositing mode in response to a
        SetSize message, the new layer tree context will be passed in the DidSetSize message.

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

        * WebProcess/WebPage/LayerTreeHost.h:
        Add setShouldNotifyAfterNextScheduledLayerFlush.

        * WebProcess/WebPage/mac/LayerTreeHostMac.h:
        Add a m_notifyAfterScheduledLayerFlush flag.

        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::LayerTreeHostMac):
        Initialize m_notifyAfterScheduledLayerFlush to false.

        (WebKit::LayerTreeHostMac::setShouldNotifyAfterNextScheduledLayerFlush):
        Set m_notifyAfterScheduledLayerFlush to true.

        (WebKit::LayerTreeHostMac::flushPendingLayerChangesRunLoopObserverCallback):
        If m_notifyAfterScheduledLayerFlush is true, call DrawingAreaImpl::layerHostDidFlushLayers.

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

        Reviewed by Adele Peterson.

        REGRESSION (WebKit2): Wrong frame printed on tivofaq.com
        https://bugs.webkit.org/show_bug.cgi?id=54677
        <rdar://problem/8994133>

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::area): Use visible frame bounds.
        (WebKit::findLargestFrameInFrameSet): Added a comment explaining what we're up to here.
        WebKit2 shouldn't be making policy decisions for the client, but it gets dangerously close
        to that. We used to expose the same as WK1 API though.

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

        Unreviwed.

        Remove CleanupHandler since we do not use it anymore.

        * Shared/qt/CleanupHandler.cpp: Removed.
        * Shared/qt/CleanupHandler.h: Removed.

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

        Fix GTK build by fixing signature of platformPaint(), required after r78956.

        * WebProcess/Plugins/Netscape/gtk/NetscapePluginGtk.cpp:
        (WebKit::NetscapePlugin::platformPaint):

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

        LLVM Compiler build fix.

        * UIProcess/WebResourceCacheManagerProxy.h:
        * WebProcess/ResourceCache/WebResourceCacheManager.h:

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

        Fix Windows and Qt builds by fixing signature of platformPaint().

        * WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp:
        (WebKit::NetscapePlugin::platformPaint):
        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
        (WebKit::NetscapePlugin::platformPaint):

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

        Reviewed by Sam Weinig.

        WebKit2 snapshots don't show plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=54716
        
        Fix WebKit2 plug-ins to do a software paint for
        snapshotting.

        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::snapshot): Respond to the snapshot
        message by getting a sharable bitmap from the plugin, and returning
        a handle to it in the reply.

        * PluginProcess/PluginControllerProxy.messages.in: Add the snapshot
        message.
        
        * Shared/Plugins/PluginQuirks.h:
        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::determineQuirks): Add a quirk for the
        ability to be snapshotted, which we only set for Flash at the moment.
        
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::snapshot): Create a shareable bitmap, and
        paint into it.
        (WebKit::NetscapePlugin::supportsSnapshotting): Test the quirk.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformPaint): Allow the paint to happen
        if we're snapshotting, even when using the CoreAnimation drawing
        model.
        
        * WebProcess/Plugins/Plugin.h: New snapshot method.
        
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::snapshot): Send a sync message to the plugin process,
        asking for a snapshot in a shareble bitmap.
        
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::paint): Use the snapshot if we have one, to avoid
        calling into the plugin to draw, which may run script.
        
        (WebKit::PluginView::notifyWidget): Generate the snapshot before
        a flattening paint, and throw it away after.

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

        Reviewed by Adam Roben.

        WebKit2: The CFNetwork Cache should be shared between the UI Process and the Web Process on
        Windows.
        https://bugs.webkit.org/show_bug.cgi?id=54683

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
 
        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):
        Make sure to remove the ending slash, as CFNetwork does not recognize the directory with
        that slash.

        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):
        Create a cache using the path, disk capacity, and memory capacity and set it as default.

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

        Reviewed by Sam Weinig.

        Web and/or plug-in process crashes when NPN_Evaluate destroys the plug-in
        https://bugs.webkit.org/show_bug.cgi?id=54686
        <rdar://problem/9013384>

        This patch fixes two bugs with a plug-in calling NPN_Evaluate to destroy itself:

        - The PluginProxy object would be destroyed in the middle of PluginProxy::evaluate.
          This would cause the web process to crash.

        - The PluginControllerProxy would call NPP_Destroy while the plug-in was busy running
          code. This would cause the plug-in process to crash.

        To fix this, we add protectPluginFromDestruction/unprotectPluginFromDestruction to
        PluginControllerProxy and use it to defer calling destroy() in the plug-in process,
        and defer actually destroying the plug-in in the web process.

        https://bugs.webkit.org/show_bug.cgi?id=54171 tracks adding a test for this.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::PluginControllerProxy):
        (WebKit::PluginControllerProxy::destroy):
        (WebKit::PluginControllerProxy::evaluate):
        (WebKit::PluginControllerProxy::protectPluginFromDestruction):
        (WebKit::PluginControllerProxy::unprotectPluginFromDestruction):
        * PluginProcess/PluginControllerProxy.h:
        (WebKit::PluginControllerProxy::asPluginController):
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::destroyPluginControllerProxy):
        (WebKit::WebProcessConnection::didReceiveMessage):
        (WebKit::WebProcessConnection::didReceiveSyncMessage):
        * PluginProcess/WebProcessConnection.h:
        (WebKit::WebProcessConnection::connection):
        * WebProcess/Plugins/PluginController.h:
        (WebKit::PluginController::PluginDestructionProtector::PluginDestructionProtector):
        (WebKit::PluginController::PluginDestructionProtector::~PluginDestructionProtector):
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::evaluate):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::protectPluginFromDestruction):
        (WebKit::PluginView::unprotectPluginFromDestruction):
        * WebProcess/Plugins/PluginView.h:

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

        Build fix.

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

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

        Reviewed by Maciej Stachowiak.

        WebKit2: Support Dictionary popup
        <rdar://problem/7660670>

        * Shared/TextInfo.cpp: Added.
        (WebKit::TextInfo::encode):
        (WebKit::TextInfo::decode):
        * Shared/TextInfo.h: Added.
        (WebKit::TextInfo::TextInfo):
        Add class to represent the location and style of a run of text.

        * UIProcess/PageClient.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        Invoke the dictionary popup.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView performLookupAtCurrentMouseLocation]):
        Tell the WebProcess to get get the text under the mouse and cause
        the dictionary popup to appear.

        * UIProcess/API/mac/WKViewPrivate.h:
        Add performLookupAtCurrentMouseLocation.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::performDictionaryLookupAtLocation):
        (WebKit::WebPageProxy::didPerformDictionaryLookup):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Pipe messages through.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::characterRangeAtPoint): Fix to return PassRefPtr
        and not potentially stale pointers.

        (WebKit::WebPage::characterIndexForPoint):
        Change to use a RefPtr.

        (WebKit::WebPage::performDictionaryLookupAtLocation):
        Add simple heuristic to get the word at the current point (or the current selection
        if it is at that point) and grab the style of the word to send the UIProcess.

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

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

        Qt build fix.

        * WebKit2.pro: Update after renaming of MemoryCache to ResourceCache.

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

        Mac build fix.

        * WebKit2.xcodeproj/project.pbxproj: Use relative to group instead of absolute paths. Not everyone's home
            directory is /Users/brian_weinstein.

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

        Reviewed by Brady Eidson.

        WebKit2: Need a way to manage the WebCore Cache
        https://bugs.webkit.org/show_bug.cgi?id=54501
        
        Implement a WebKit2 API to manage the WebCore memory cache. This API exposes three functions:
        
        1) A method to get a list of all security origins that have entries in the WebCore memory cache.
        2) A method to remove all entries in the WebCore memory cache from a SecurityOrigin.
        3) A method to remove all entries from the WebCore memory cache.

        * Platform/CoreIPC/MessageID.h: Add two new MessageClasses.
        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h: Add a CacheManager type.
        * Shared/WebSecurityOrigin.h: Typedef WKCacheManagerRef.
        (WebKit::WebSecurityOrigin::createFromString): Creates a WebCore::SecurityOrigin using 
            SecurityOrigin::createFromString.
        (WebKit::WebSecurityOrigin::toString): Calls through to SecurityOrigin::toString.
        * UIProcess/API/C/WKAPICast.h:

        * UIProcess/API/C/WKCacheManager.cpp: Added.
        (WKCacheManagerGetTypeID): Returns the WebResourceCacheManagerProxy type.
        (WKCacheManagerGetCacheOrigins): Calls through to WebResourceCacheManagerProxy::getCacheOrigins.
        (callGetCacheOriginsBlockBlockAndDispose):
        (WKCacheManagerGetCacheOrigins_b):
        (WKCacheManagerDeleteCacheForOrigin): Calls through to WebResourceCacheManagerProxy::deleteCacheForOrigin.
        (WKCacheManagerDeleteAllCache): Calls through to WebResourceCacheManagerProxy::deleteAllCache.
        * UIProcess/API/C/WKCacheManager.h: Added.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetCacheManager): Calls to get the WebResourceCacheManagerProxy.
        * UIProcess/API/C/WKContext.h:

        * UIProcess/WebResourceCacheManagerProxy.cpp: Added.
        (WebKit::WebResourceCacheManagerProxy::create): Calls through to the constructor.
        (WebKit::WebResourceCacheManagerProxy::WebResourceCacheManagerProxy): Initialize the m_webContext variable.
        (WebKit::WebResourceCacheManagerProxy::~WebResourceCacheManagerProxy):
        (WebKit::WebResourceCacheManagerProxy::invalidate): Invalidate the callback map.
        (WebKit::WebResourceCacheManagerProxy::getCacheOrigins): Call through to the web process to get the cache
            origins.
        (WebKit::WebResourceCacheManagerProxy::didGetCacheOrigins): Call the callback.
        (WebKit::WebResourceCacheManagerProxy::deleteCacheForOrigin): Call through to the web process to delete cache
            for the given origin. 
        (WebKit::WebResourceCacheManagerProxy::deleteAllCache): Call through to the web process to delete all of the cache.
        * UIProcess/WebResourceCacheManagerProxy.h: Added.
        (WebKit::WebResourceCacheManagerProxy::clearContext):
        (WebKit::WebResourceCacheManagerProxy::type):
        * UIProcess/WebResourceCacheManagerProxy.messages.in: Added.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext): Initialize new member variable.
        (WebKit::WebContext::~WebContext):  Invalidates new member variable.
        (WebKit::WebContext::didReceiveMessage): Passes cache messages to the cache manager.
        * UIProcess/WebContext.h:
        (WebKit::WebContext::cacheManagerProxy):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage): Add a new message class.

        * WebProcess/ResourceCache/WebResourceCacheManager.cpp: Added.
        (WebKit::WebResourceCacheManager::shared):
        (WebKit::WebResourceCacheManager::WebResourceCacheManager):
        (WebKit::WebResourceCacheManager::~WebResourceCacheManager):
        (WebKit::WebResourceCacheManager::didReceiveMessage): Calls through to didReceiveWebResourceCacheManagerMessage.
        (WebKit::WebResourceCacheManager::getCacheOrigins): Gets a list of origins with cache entries from the memory
            cache, and puts them into a vector to send to the UI process.
        (WebKit::WebResourceCacheManager::deleteCacheForOrigin): Calls through to ResourceCache to delete all cache entries
            from a given origin.
        (WebKit::WebResourceCacheManager::deleteAllCache):
        * WebProcess/ResourceCache/WebResourceCacheManager.h: Added.
        * WebProcess/ResourceCache/WebResourceCacheManager.messages.in: Added.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage):
        (WebKit::WebProcess::clearResourceCaches): Tell the memory cache to evict its resources. This was done on WebKit1, 
            but not WebKit2.
        * WebProcess/WebProcess.h:
        
        * WebKit2.xcodeproj/project.pbxproj: Added new files.
        * win/WebKit2.vcproj: Ditto.
        * win/WebKit2Common.vsprops: Added new include directory.
        * win/WebKit2Generated.make: Added new header.

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

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=54244
        
        Convert the line box tree to floating point and eliminate font rounding hacks.  This patch removes all of the rounding
        hacks from the Font code and makes sure all Font APIs involving width measurement and width offsets use floats.
        
        The line box tree's x, y and logicalWidth members have all been converted to floats and all of the line box APIs have
        been changed as well.
        
        In terms of pixel adjustments, overflow is using an enclosing model (so it will be enclosingIntRect of a line box's x/y/width/height).
        
        Background and border painting is using a rounding model, so borders and backgrounds will round to the nearest pixel when painting.
        
        Replaced elements still snap to integer positions on lines, and they use a rounding model as well, although their underlying line boxes
        still have a precise floating point position.

        Justification will now allow subpixel positioning to occur as well.  Platforms that don't support subpixel positioning should already
        be rounding justification spacing in their font code.

        Many layout test results change on Mac, since rounding hacks were used there and are now gone.

        * WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp:
        (WebKit::WebPopupMenu::setUpPlatformData):

2011-02-10  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Adam Roben.

        HTML5 <details> and <summary>: localized text
        https://bugs.webkit.org/show_bug.cgi?id=54260

        The method defaultDetailsSummaryText was added to LocalizationStrategy class. It is used to
        provide the default label to be used by a <details> tag that has no <summary> child.

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

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

        Make sure layout is up-to-date before rendering the layer tree in DrawingAreaImpl

        Fixes <http://webkit.org/b/54646> <rdar://problem/9016889> Assertion failure in
        FrameView::paintContents when calling WKPageForceRepaint on a page that uses accelerated
        compositing

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::forceRepaint): Lay out before we do anything else.

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

        Reviewed by Martin Robinson.

        [GTK] Add WKPluginSiteDataManager.cpp compilation after r78647
        https://bugs.webkit.org/show_bug.cgi?id=54564

        * GNUmakefile.am: Added files to compilation.
        * Shared/Plugins/Netscape/NetscapePluginModule.h: used
        npruntime_internal.h in the include to avoid problems with X
        types.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setAlwaysUsesComplexTextCodePath): fixed
        ambiguous reference to Font caused by the X headers required by
        the plugins.

2011-02-16  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Allow acceleratesDrawing for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=54511

        Plumb through preference for accelerated drawing.
        
        If accelerated drawing is enabled, keep the DrawingAreaImpl in
        accelerated compositing mode.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetAcceleratedDrawingEnabled):
        (WKPreferencesGetAcceleratedDrawingEnabled):
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        (WebKit::DrawingAreaImpl::setRootCompositingLayer):
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

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

        Reviewed by Andreas Kling.

        [Qt] White screen is displayed when tiled backing store is enabled in MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=54583

        Make sure to invalidate all the tiles, including the last one.

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

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

        Reviewed by Andreas Kling.

        [Qt] Tiles are not created for webkit2 after r77286.
        https://bugs.webkit.org/show_bug.cgi?id=54577

        When using the default tile size of 1024x1024, only one tile is created.
        Make sure to create this tile by undoing what seems to be a typo in r77286.

        * UIProcess/TiledDrawingAreaProxy.cpp:
        (WebKit::TiledDrawingAreaProxy::paint):
        (WebKit::TiledDrawingAreaProxy::createTiles):

== Rolled over to ChangeLog-2011-02-16 ==
