2014-04-17  Daniel Bates  <dabates@apple.com>

        [iOS] Hook up screen.{availHeight, availWidth, height, width}
        https://bugs.webkit.org/show_bug.cgi?id=131821
        <rdar://problem/16413795>

        Reviewed by Benjamin Poulain and Tim Horton.

        Implement WebKit2-specific support infrastructure.

        Additionally substitute "screenSize" for "viewporScreenSize" to make the code more understandable.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode): Modified to encode the available screen size
        creation parameter.
        (WebKit::WebPageCreationParameters::decode): Modified to decode the available screen size
        creation parameter.
        * Shared/WebPageCreationParameters.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters): Initialize the available screen size
        parameter.
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::screenSize): Renamed; formerly named viewportScreenSize.
        (WebKit::WebPageProxy::availableScreenSize): Added.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::screenSize): Renamed; formerly named viewportScreenSize.
        (WebKit::WebChromeClient::availableScreenSize): Added; turns around and calls WebPage::availableScreenSize().
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Hook up WebKit System Interface function WKGetAvailableScreenSize.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Initialize available screen size instance variable.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::screenSize):
        (WebKit::WebPage::availableScreenSize):

2014-04-17  Anders Carlsson  <andersca@apple.com>

        Remove unused API enums
        https://bugs.webkit.org/show_bug.cgi?id=131836

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        (NS_ENUM):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::PolicyClient::decidePolicyForNavigationAction):
        (WebKit::NavigationState::PolicyClient::decidePolicyForResponse):

2014-04-17  Brent Fulgham  <bfulgham@apple.com>

        Make RenderLayerBacking get the timingFunction of the correct animation.
        https://bugs.webkit.org/show_bug.cgi?id=100632

        Reviewed by Simon Fraser.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (IPC::ArgumentCoder<GraphicsLayerAnimation>::decode): Update for new signatures for
        FloatAnimationValue, TransformAnimationValue, etc.

2014-04-17  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] support replacements for misspelled words.
        https://bugs.webkit.org/show_bug.cgi?id=131827
        <rdar://problem/16319657>

        Reviewed by Benjamin Poulain.

        This is the first part of the work to add support for replacements.
        It handles _promptForReplace in canPerformAction to decide
        whether to show the Replace button in the menu and add the
        implementation of the replace action.

        * Shared/EditorState.cpp:
        (WebKit::EditorState::encode):
        (WebKit::EditorState::decode):
        * Shared/EditorState.h:
        (WebKit::EditorState::EditorState):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView selectedText]):
        (-[WKContentView replaceText:withText:]):
        (-[WKContentView _promptForReplace:]):
        (-[WKContentView replace:]):
        (-[WKContentView canPerformAction:withSender:]):
        (-[WKContentView selectWordForReplacement]): This is called
        by UIKit when the user taps on a mispelled word to select it.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::replaceSelectedText):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::editorState):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::selectWithGesture): Removed m_shouldReturnWordForSelection.
        We now return always the word corresponding to the caret selection or
        the selected text up to a maximum of 200 characters.
        (WebKit::WebPage::extendSelection):
        (WebKit::WebPage::replaceSelectedText):

2014-04-17  Tim Horton  <timothy_horton@apple.com>

        [iOS] REGRESSION (r166975): WKPDFView is broken
        https://bugs.webkit.org/show_bug.cgi?id=131828

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:WebKit::]):
        Bail from updating the scroll view parameters from the layer tree update
        while it's being managed by a custom content view.
        We'll get any changes again in the next commit after removing the custom
        content view (and painting the new page) anyway, so this should be OK.

2014-04-17  Pratik Solanki  <psolanki@apple.com>

        _webProcessIdentifier should return 0 if the web process crashed
        https://bugs.webkit.org/show_bug.cgi?id=131813
        <rdar://problem/16650605>

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _hasWebProcess]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2014-04-17  Darin Adler  <darin@apple.com>

        Remove use of deprecatedDeleteAllValues in NPRemoteObjectMap::pluginDestroyed
        https://bugs.webkit.org/show_bug.cgi?id=122496

        Reviewed by Brent Fulgham.

        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::pluginDestroyed): Use new-style code and write the
        deprecatedDeleteAllValues function out using a loop. Might be nice to return here
        and use unique_ptr instead some day, but I tried that before and got it wrong, so
        lets do that another time.

2014-04-17  Darin Adler  <darin@apple.com>

        Add separate flag for IndexedDatabase in workers since the current implementation is not threadsafe
        https://bugs.webkit.org/show_bug.cgi?id=131785
        rdar://problem/16003108

        Reviewed by Brady Eidson.

        * Configurations/FeatureDefines.xcconfig: Added INDEXED_DATABASE_IN_WORKERS.

2014-04-17  Dan Bernstein  <mitz@apple.com>

        WebKit2 part of <rdar://problem/16601336> [Cocoa] _userInitiated is always NO in WKNavigationAction passed to -webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:
        https://bugs.webkit.org/show_bug.cgi?id=131783

        Reviewed by Tim Horton.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createWindow): Set the isProcessingUserGesture field of
        the NavigationActionData to the corresponding value in the NavigationAction.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction): Ditto.
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): Ditto.

2014-04-16  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Fix the DidCommitLoad initial scrolling position
        https://bugs.webkit.org/show_bug.cgi?id=131780

        Reviewed by Jon Honeycutt.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:]):
        That code is older than _obscuredInsets and used the contentInsets as a workaround.

2014-04-16  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Fix annoying scrolling bugs
        https://bugs.webkit.org/show_bug.cgi?id=131722

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _scrollToContentOffset:WebCore::]):
        We are scrolling at the wrong position when we have the "small obscured insets".

2014-04-16  Gavin Barraclough  <baraclough@apple.com>

        On iOS keep network process running using a process assertion rather than a boost
        https://bugs.webkit.org/show_bug.cgi?id=131779

        Reviewed by Benjamin Poulain.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToService):
            - No need to leak a boost onto the NetworkProcess on iOS.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didFinishLaunching):
            - Take a ProcessAssertion on the NetworkProcess.
        * UIProcess/Shared/ChildProcessProxy.h:
            - Added m_assertion.
        * UIProcess/WebProcessProxy.h:
            - Removed m_assertion.
        * UIProcess/ios/ProcessAssertion.h: Added.
            - Added - refactored from WebProcessProxy.h.
        * UIProcess/ios/ProcessAssertion.mm: Added.
        (WebKit::ProcessAssertion::ProcessAssertion):
        (WebKit::ProcessAssertion::setState):
            - Added - refactored from WebProcessProxyIOS.mm.
        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::updateProcessState):
            - Code refactored out to ProcessAssertion.mm.
        * WebKit2.xcodeproj/project.pbxproj:
            - Added files.

2014-04-16  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Improve the approximation of the scroll position of the dynamic viewport size updates
        https://bugs.webkit.org/show_bug.cgi?id=131720

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _scrollToContentOffset:]):
        The scrolling tree was forcing scroll at the wrong scale during the transition. 

        (-[WKWebView _setMinimumLayoutSizeOverride:]):
        This was left out by accident. The WebProcess was getting the new layout size twice, making
        WebPage::dynamicViewportSizeUpdate() very confused when the content size changes.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        Add scrolling adjustment for the dynamic relayout case:
        -Sticky top and bottom like the UIProcess.
        -Keep the same relative position of the unobscured rect's center.

        Also fix a bug in the horizontal and vertical adjustments: the code was using the exposed rect
        instead of the unobscured rect, which made the adjustments off by the size of the obscured insets.

        The type is changed from double to float since ARMv7 has a grudge against double.

2014-04-16  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Do not update the visible content rects when setting the same obscured insets multiple times
        https://bugs.webkit.org/show_bug.cgi?id=131633

        Reviewed by Darin Adler.

        We should avoid computing the visible content rects when not needed.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setObscuredInsets:]):

2014-04-16  Zan Dobersek  <zdobersek@igalia.com>

        Make IPC::Arguments a variadic template
        https://bugs.webkit.org/show_bug.cgi?id=131684

        Reviewed by Darin Adler.

        Make IPC::Arguments a variadic template that uses the template parameter pack to further
        define the std::tuple ValueType and is used to define the std::tuple container of the
        values passed into the container.

        * Platform/IPC/Arguments.h:
        (IPC::Arguments::Arguments):
        (IPC::Arguments::encode):
        (IPC::Arguments::decode):
        (IPC::Arguments0::encode): Deleted.
        (IPC::Arguments0::decode): Deleted.
        (IPC::Arguments1::Arguments1): Deleted.
        (IPC::Arguments1::encode): Deleted.
        (IPC::Arguments1::decode): Deleted.
        (IPC::Arguments2::Arguments2): Deleted.
        (IPC::Arguments2::encode): Deleted.
        (IPC::Arguments2::decode): Deleted.
        (IPC::Arguments3::Arguments3): Deleted.
        (IPC::Arguments3::encode): Deleted.
        (IPC::Arguments3::decode): Deleted.
        (IPC::Arguments4::Arguments4): Deleted.
        (IPC::Arguments4::encode): Deleted.
        (IPC::Arguments4::decode): Deleted.
        (IPC::Arguments5::Arguments5): Deleted.
        (IPC::Arguments5::encode): Deleted.
        (IPC::Arguments5::decode): Deleted.
        (IPC::Arguments6::Arguments6): Deleted.
        (IPC::Arguments6::encode): Deleted.
        (IPC::Arguments6::decode): Deleted.
        (IPC::Arguments7::Arguments7): Deleted.
        (IPC::Arguments7::encode): Deleted.
        (IPC::Arguments7::decode): Deleted.
        (IPC::Arguments8::Arguments8): Deleted.
        (IPC::Arguments8::encode): Deleted.
        (IPC::Arguments8::decode): Deleted.
        (IPC::Arguments10::Arguments10): Deleted.
        (IPC::Arguments10::encode): Deleted.
        (IPC::Arguments10::decode): Deleted.
        * Scripts/webkit2/LegacyMessages-expected.h:
        * Scripts/webkit2/Messages-expected.h:
        * Scripts/webkit2/messages.py: Clean up the code a bit.
        (reply_parameter_type):
        (arguments_type):
        (reply_type):
        (decode_type):
        (arguments_type_old): Deleted.
        (base_class): Deleted.
        (delayed_reply_type): Deleted.

2014-04-16  Tim Horton  <timothy_horton@apple.com>

        Deduplicate LayerTreeContext
        https://bugs.webkit.org/show_bug.cgi?id=131773

        Reviewed by Simon Fraser.

        There are three identical implementations, one for each platform, for no reason.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * Shared/LayerTreeContext.cpp: Renamed from Source/WebKit2/Shared/mac/LayerTreeContextMac.mm.
        (WebKit::LayerTreeContext::LayerTreeContext):
        (WebKit::LayerTreeContext::~LayerTreeContext):
        (WebKit::LayerTreeContext::encode):
        (WebKit::LayerTreeContext::decode):
        (WebKit::LayerTreeContext::isEmpty):
        (WebKit::operator==):
        * Shared/LayerTreeContext.h:
        (WebKit::operator!=): Deleted.
        * Shared/efl/LayerTreeContextEfl.cpp: Removed.
        * Shared/gtk/LayerTreeContextGtk.cpp: Removed.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::initialize):

2014-04-16  Tim Horton  <timothy_horton@apple.com>

        Don't build LayerTreeHost on Mac (and clean it up)
        https://bugs.webkit.org/show_bug.cgi?id=131769

        Reviewed by Simon Fraser.

        * WebKit2.xcodeproj/project.pbxproj:
        Don't include it in the project.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.cpp:
        (WebKit::CoordinatedDrawingArea::updatePreferences):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::updatePreferences):
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit::LayerTreeHost::setLayerHostingMode): Deleted.
        (WebKit::LayerTreeHost::supportsAcceleratedCompositing): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        Get rid of LayerTreeHost::supportsAcceleratedCompositing, which always returns true everywhere.
        Remove some LayerTreeHost.h includes.
        Remove LayerTreeHost::setLayerHostingMode, which is PLATFORM(COCOA) and not needed.

2014-04-16  Simon Fraser  <simon.fraser@apple.com>

        Failing to decode a layer tree commit message resulted in silent and mysterious failure
        https://bugs.webkit.org/show_bug.cgi?id=131766
        <rdar://problem/16520894>

        Reviewed by Sam Weinig.
        
        If the message decode failed, we should have already marked the message as invalid.
        Failing to do so indicates in a decode code coding error.

        * Platform/IPC/HandleMessage.h:
        (IPC::handleMessage):
        (IPC::handleMessageVariadic):
        (IPC::handleMessageDelayed):

2014-04-16  Tim Horton  <timothy_horton@apple.com>

        Minor include sanity in WebPage.h
        https://bugs.webkit.org/show_bug.cgi?id=131752

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/WebPage.h:
        Remove a bunch of unnecessary includes.
        Un-indent some stuff.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebPage/FindController.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        Add back more specific includes, into implementation files.
        
        * WebProcess/WebPage/WebUndoStep.cpp:
        (WebKit::WebUndoStep::~WebUndoStep):
        * WebProcess/WebPage/WebUndoStep.h:
        Add an out-of-line destructor.

2014-04-16  Gavin Barraclough  <baraclough@apple.com>

        REGRESSION: PCE.js is 20x slower in WebKit2 because timers are throttled
        https://bugs.webkit.org/show_bug.cgi?id=131189

        Unreviewed rollout of r166754

        This change is no longer necessary.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToService):

2014-04-16  Alexey Proskuryakov  <ap@apple.com>

        Updating tests after bug 131721, [GTK] Fix unused parameter warnings.

        * Scripts/webkit2/LegacyMessageReceiver-expected.cpp:
        (WebKit::WebPage::didReceiveWebPageMessage):
        (WebKit::WebPage::didReceiveSyncWebPageMessage):
        * Scripts/webkit2/MessageReceiver-expected.cpp:
        (WebKit::WebPage::didReceiveMessage):
        (WebKit::WebPage::didReceiveSyncMessage):

2014-04-16  Brendan Long  <b.long@cablelabs.com>

        [GTK] Fix unused parameter warnings
        https://bugs.webkit.org/show_bug.cgi?id=131721

        Reviewed by Darin Adler.

        * Scripts/webkit2/messages.py:
        (generate_message_handler): Add UNUSED_PARAM() for a couple parameters which aren't always used.
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<LinearTimingFunction>::decode): Remove unused parameters.
        * WebProcess/InjectedBundle/APIInjectedBundleFormClient.h:
        (API::InjectedBundle::FormClient::textDidChangeInTextField): Same.
        (API::InjectedBundle::FormClient::willSubmitForm): Same.
        (API::InjectedBundle::FormClient::willSendSubmitEvent): Same.
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveSyncMessage): Same.

2014-04-16  Tim Horton  <timothy_horton@apple.com>

        Accidentally included some style-checker-testing changes in the last commit.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::attemptToUnlockPDF):
        (WebKit::PDFPlugin::updatePageAndDeviceScaleFactors):

2014-04-16  Tim Horton  <timothy_horton@apple.com>

        Fix some style checker complaints in PDFPlugin
        https://bugs.webkit.org/show_bug.cgi?id=131706

        Reviewed by Darin Adler.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (-[WKPDFPluginAccessibilityObject accessibilityAttributeValue:]):
        (-[WKPDFPluginAccessibilityObject accessibilityAttributeValue:forParameter:]):
        (-[WKPDFPluginAccessibilityObject accessibilityAttributeNames]):
        (WebKit::PDFPlugin::attemptToUnlockPDF):
        (WebKit::PDFPlugin::updatePageAndDeviceScaleFactors):
        (WebKit::PDFPlugin::isEditingCommandEnabled):
        (WebKit::PDFPlugin::nextMatchForString):
        (WebKit::PDFPlugin::handleWheelEvent):
        (WebKit::PDFPlugin::liveData):

2014-04-15  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Add a form delegate method corresponding to willSubmitForm
        https://bugs.webkit.org/show_bug.cgi?id=131718

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setFormDelegate:]): Changed to define and create a FormClient (which derives
        from API::FormClient and messages a delegate), and set it as the form client.

        * UIProcess/API/Cocoa/_WKFormDelegate.h: Declared new delegate method.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFormDelegatePrivate.h: Added a
        variant of willSubmitForm that returs a user object to pass to the delegate in the UI
        process, giving it a temporary name with “new”.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setFormDelegate:]): Changed willSubmitForm()
        to check for the new bundle delegate method first and encode the user object as user data.
        Moved the encoding of an NSObject <NSSecureCoding> as user data into a helper function.

2014-04-15  Hyowon Kim  <hw1008.kim@samsung.com>

        Make page overlay functionality working on coordinated graphics.
        https://bugs.webkit.org/show_bug.cgi?id=131425

        Reviewed by Darin Adler.

        Page overlay functionality did not work on coordinated graphics since r166975.
        This patch removes deprecated code related to the PageOverlay GraphicsLayer management.
        and makes CoordinatedLayerTreeHost use PageOverlayController.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.cpp:
        (WebKit::CoordinatedDrawingArea::mainFrameContentSizeChanged):
        (WebKit::CoordinatedDrawingArea::didInstallPageOverlay): Deleted.
        (WebKit::CoordinatedDrawingArea::didUninstallPageOverlay): Deleted.
        (WebKit::CoordinatedDrawingArea::setPageOverlayNeedsDisplay): Deleted.
        (WebKit::CoordinatedDrawingArea::setPageOverlayOpacity): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::setRootCompositingLayer):
        (WebKit::CoordinatedLayerTreeHost::didFlushRootLayer):
        (WebKit::CoordinatedLayerTreeHost::deviceOrPageScaleFactorChanged):
        (WebKit::CoordinatedLayerTreeHost::didInstallPageOverlay): Deleted.
        (WebKit::CoordinatedLayerTreeHost::didUninstallPageOverlay): Deleted.
        (WebKit::CoordinatedLayerTreeHost::setPageOverlayNeedsDisplay): Deleted.
        (WebKit::CoordinatedLayerTreeHost::setPageOverlayOpacity): Deleted.
        (WebKit::CoordinatedLayerTreeHost::createPageOverlayLayer): Deleted.
        (WebKit::CoordinatedLayerTreeHost::destroyPageOverlayLayer): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit::LayerTreeHost::didInstallPageOverlay):
        (WebKit::LayerTreeHost::didUninstallPageOverlay):
        (WebKit::LayerTreeHost::setPageOverlayNeedsDisplay):

2014-04-15  Dan Bernstein  <mitz@apple.com>

        Introduce API::FormClient
        https://bugs.webkit.org/show_bug.cgi?id=131714

        Reviewed by Tim Horton.

        * UIProcess/API/APIFormClient.h: Added.
        (API::FormClient::~FormClient):
        (API::FormClient::willSubmitForm):

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageFormClient): Changed to create a WebFormClient and call
        WebPageProxy::setFormClient.

        * UIProcess/WebFormClient.cpp:
        (WebKit::WebFormClient::WebFormClient): Added a constructor from WKPageFormClientBase.
        * UIProcess/WebFormClient.h: Added inheritance from API::FormClient, marked overrides as
        such.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Initialize m_formClient member.
        (WebKit::WebPageProxy::setFormClient): Added. Updates m_formClient.
        (WebKit::WebPageProxy::close): Updated code to clear m_formClient.
        (WebKit::WebPageProxy::willSubmitForm): Updated for type change.
        (WebKit::WebPageProxy::initializeFormClient): Deleted.
        * UIProcess/WebPageProxy.h:

        * WebKit2.xcodeproj/project.pbxproj: Added reference to new file.

2014-04-15  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Pages often blank on first load if page loaded by typing the URL
        https://bugs.webkit.org/show_bug.cgi?id=131665

        Reviewed by Tim Horton.

        The document overlay-related code in RemoteLayerTreeDrawingArea::setRootCompositingLayer()
        was triggering a compositing layer flush when called with a null rootLayer, which happens
        for pages going into the page cache. This would trigger a layer flush that would clobber
        the root layer for the visible page, resulting in missing content.
        
        Also, rebuildCompositingLayerTree() is called recursively and the m_documentOverlayRootLayer
        was being added to (and then removed from) every single compositing layers.
        
        Fix both these by changing to a pull model, where RenderLayerCompositor requests
        the overlay layer via ChromeClient, and gets it at the end of every flush,
        adding to the children of the root layer.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::documentOverlayLayerForFrame):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer):

2014-04-15  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Pass Mouse movement data to WebMouseEvent
        https://bugs.webkit.org/show_bug.cgi?id=131663

        Reviewed by Gyuyoung Kim.

        Currently mouse movement data are not passed to WebMouseEvent. Instead, they are set to 0 as default.
        EFL port needs to send the deltaX and deltaY for PointerLock API which will be implemented later.

        * Shared/efl/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebMouseEvent):

2014-04-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r167298.
        https://bugs.webkit.org/show_bug.cgi?id=131670

        Broke CSS filters (17 test crashes) (Requested by ap on
        #webkit).

        Reverted changeset:

        "[iOS WK2] Pages often blank on first load if page loaded by
        typing the URL"
        https://bugs.webkit.org/show_bug.cgi?id=131665
        http://trac.webkit.org/changeset/167298

2014-04-14  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Pages often blank on first load if page loaded by typing the URL
        https://bugs.webkit.org/show_bug.cgi?id=131665

        Reviewed by Tim Horton.

        The document overlay-related code in RemoteLayerTreeDrawingArea::setRootCompositingLayer()
        was triggering a compositing layer flush when called with a null rootLayer, which happens
        for pages going into the page cache. This would trigger a layer flush that would clobber
        the root layer for the visible page, resulting in missing content.
        
        Also, rebuildCompositingLayerTree() is called recursively and the m_documentOverlayRootLayer
        was being added to (and then removed from) every single compositing layers.
        
        Fix both these by changing to a pull model, where RenderLayerCompositor requests
        the overlay layer via ChromeClient, and gets it at the end of every flush,
        adding to the children of the root layer.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::documentOverlayLayerForFrame):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer):

2014-04-14  Tim Horton  <timothy_horton@apple.com>

        Fix the 32-bit build.

        * UIProcess/mac/ViewGestureControllerMac.mm:

2014-04-14  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (WebKit2): Programmatic scrolls in overflow-scrolling:touch don't work
        https://bugs.webkit.org/show_bug.cgi?id=131649

        Reviewed by Tim Horton.
        
        Update the UIScrollView's contentOffset when we're told that the scroll position
        changed.
        
        Also refactor slightly to have a single exception-protected block.

        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateAfterChildren):

2014-04-14  Tim Horton  <timothy_horton@apple.com>

        Fix the 32-bit build.

        * UIProcess/mac/ViewGestureControllerMac.mm:

2014-04-14  Tim Horton  <timothy_horton@apple.com>

        Sometimes-crash under handleSwipeGesture after closing a window or quitting
        https://bugs.webkit.org/show_bug.cgi?id=131648
        <rdar://problem/15966106>

        Reviewed by Simon Fraser.

        * UIProcess/mac/ViewGestureController.h:
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::~ViewGestureController):
        (WebKit::ViewGestureController::trackSwipeGesture):
        Keep a Objective C object with a single boolean property, isCancelled, on
        the ViewGestureController, and also retained by the swipe-tracking block.
        When the ViewGestureController is destroyed, we set isCancelled to YES,
        and the next time the block is invoked, we will cancel the swipe without
        touching the destroyed ViewGestureController.

        (WebKit::ViewGestureController::handleSwipeGesture):
        Don't try to handle a swipe gesture if the drawing area is missing.

        (WebKit::ViewGestureController::endSwipeGesture):
        Clear the swipe cancellation tracker when the gesture completes.

2014-04-14  Enrica Casucci  <enrica@apple.com>

        REGRESSION(r166027) Menu is shown and immediately hidden after doubletap gesture.
        https://bugs.webkit.org/show_bug.cgi?id=131646
        <rdar://problem/16614374>

        Reviewed by Benjamin Poulain.

        This is a problem with every gesture that changes the selection
        We don't need to delay updating the selection if the selection is
        being changed with a gesture.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _didUpdateBlockSelectionWithTouch:withFlags:growThreshold:shrinkThreshold:]):
        (-[WKContentView changeSelectionWithGestureAt:withGesture:withState:]):
        (-[WKContentView changeSelectionWithTouchAt:withSelectionTouch:baseIsStart:]):
        (-[WKContentView changeSelectionWithTouchesFrom:to:withGesture:withState:]):
        (-[WKContentView changeBlockSelectionWithTouchAt:withSelectionTouch:forHandle:]):
        (-[WKContentView _selectionChanged]):

2014-04-14  Dan Bernstein  <mitz@apple.com>

        Let the bundle form client know whether a change in a text field was initiated by user typing
        https://bugs.webkit.org/show_bug.cgi?id=131643

        Reviewed by Sam Weinig.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFormDelegatePrivate.h: Added
        initiatedByUserTyping parameter to the delegate method.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setFormDelegate:]): Updated overload of
        textDidChangeInTextField to take the initiatedByUserTyping parameter and pass it along to
        the delegate.

        * WebProcess/InjectedBundle/APIInjectedBundleFormClient.h:
        (API::InjectedBundle::FormClient::textDidChangeInTextField): Added initiatedByUserTyping
        parameter.

        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:
        (WebKit::InjectedBundlePageFormClient::textDidChangeInTextField): Maintained the existing
        behavior of not calling the C SPI client if the change was not initiated by user typing.
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.h: Updated for added parameter.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::textDidChangeInTextField): Changed to call the bundle client
        function unconditionally, but pass along whether the change was initiated by user typing.

2014-04-14  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Add a WKWebProcessPlugInFormDelegate method corresponding to willSendSubmitEvent
        https://bugs.webkit.org/show_bug.cgi?id=131639

        Reviewed by Tim Horton.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFormDelegatePrivate.h: Declared
        new delegate method.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setFormDelegate:]): Added an override
        of API::InjectedBundle::FormClient::willSendSubmitEvent which calls the new delegate
        method.

2014-04-14  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Change the SPI used when starting the rotation animation
        https://bugs.webkit.org/show_bug.cgi?id=131638

        Reviewed by Tim Horton.

        Having an update block where all the properties are changed is more convenient for Safari.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        (-[WKWebView _beginAnimatedResizeToSize:obscuredInsets:minimumLayoutSizeOverride:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2014-04-14  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Hash table assertion closing a tab
        https://bugs.webkit.org/show_bug.cgi?id=131640

        Reviewed by Tim Horton.
        
        Have RemoteLayerTreeContext keep track of all PlatformCALayerRemotes,
        and clear their context pointer when it is being destroyed to avoid
        calling into a deleted object later.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::~PlatformCALayerRemote):
        (WebKit::PlatformCALayerRemote::addAnimationForKey):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:
        (WebKit::PlatformCALayerRemote::clearContext):
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::~RemoteLayerTreeContext):
        (WebKit::RemoteLayerTreeContext::layerWasCreated):
        (WebKit::RemoteLayerTreeContext::layerWillBeDestroyed):

2014-04-14  Tim Horton  <timothy_horton@apple.com>

        Allow dynamic changes of WKThumbnailView snapshot scale
        https://bugs.webkit.org/show_bug.cgi?id=131628
        <rdar://problem/16584156>

        Reviewed by Beth Dakin.

        * UIProcess/API/Cocoa/_WKThumbnailView.mm:
        (-[_WKThumbnailView _requestSnapshotIfNeeded]):
        Don't bail from requesting a snapshot just because we already had one; we want to resnapshot.
        Keep track of when we bail from requesting a snapshot because we have one in-flight, so we can request it later.

        (-[_WKThumbnailView _didTakeSnapshot:]):
        Apply the scale to the bitmap size (whoops!).
        Make CA always resize the content to fill the thumbnail view's layer, respecting aspect ratio.
        Re-snapshot if we previously deferred a snapshot.

        (-[_WKThumbnailView setScale:]):
        If we get a scale change, request a new snapshot.

        (-[_WKThumbnailView setUsesSnapshot:]):
        Never apply thumbnail scale to the page if we're using snapshots. It's unnecessary,
        because scale will be applied simply when painting the software snapshot.
        Apply the thumbnail scale if we're going from usesSnapshot -> !usesSnapshot.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::snapshotAtSize):
        Snapshots should use the greater of the two scales, so as to never leave a portion of the snapshot unpainted.

2014-04-14  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (WebKit2 View Gestures): Double-tap doesn't work properly when there's no element underneath the cursor
        https://bugs.webkit.org/show_bug.cgi?id=131629
        <rdar://problem/16192821>

        Reviewed by Dan Bernstein.

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::didCollectGeometryForSmartMagnificationGesture):
        If there's nothing under the cursor, zoom towards the cursor instead of towards 0,0.

2014-04-14  Simon Fraser  <simon.fraser@apple.com>

        Run filter animations in the UI process with UI-side compositing
        https://bugs.webkit.org/show_bug.cgi?id=131199
        <rdar://problem/16479487>

        Reviewed by Sam Weinig.
        
        * Shared/WebCoreArgumentCoders.cpp: Removed lots of WebCore::
        (IPC::ArgumentCoder<SelectionRect>::decode):
        (IPC::ArgumentCoder<PasteboardWebContent>::encode):
        (IPC::ArgumentCoder<PasteboardWebContent>::decode):
        (IPC::ArgumentCoder<PasteboardImage>::encode):
        (IPC::ArgumentCoder<PasteboardImage>::decode):
        (IPC::ArgumentCoder<URL>::decode):
        (IPC::ArgumentCoder<UserStyleSheet>::encode):
        (IPC::ArgumentCoder<UserStyleSheet>::decode):
        (IPC::ArgumentCoder<UserScript>::encode):
        (IPC::ArgumentCoder<UserScript>::decode):
        (IPC::ArgumentCoder<ScrollableAreaParameters>::encode):
        (IPC::ArgumentCoder<ScrollableAreaParameters>::decode):
        (IPC::ArgumentCoder<FixedPositionViewportConstraints>::encode):
        (IPC::ArgumentCoder<FixedPositionViewportConstraints>::decode):
        (IPC::ArgumentCoder<StickyPositionViewportConstraints>::encode):
        (IPC::ArgumentCoder<StickyPositionViewportConstraints>::decode):
        (IPC::ArgumentCoder<FilterOperation>::encode):
        (IPC::decodeFilterOperation):
        (IPC::ArgumentCoder<FilterOperations>::encode):
        (IPC::ArgumentCoder<WebCore::UserStyleSheet>::encode): Deleted.
        (IPC::ArgumentCoder<WebCore::UserStyleSheet>::decode): Deleted.
        (IPC::ArgumentCoder<WebCore::UserScript>::encode): Deleted.
        (IPC::ArgumentCoder<WebCore::UserScript>::decode): Deleted.
        (IPC::ArgumentCoder<WebCore::ScrollableAreaParameters>::encode): Deleted.
        (IPC::ArgumentCoder<WebCore::ScrollableAreaParameters>::decode): Deleted.
        (IPC::ArgumentCoder<WebCore::FixedPositionViewportConstraints>::encode): Deleted.
        (IPC::ArgumentCoder<WebCore::FixedPositionViewportConstraints>::decode): Deleted.
        (IPC::ArgumentCoder<WebCore::StickyPositionViewportConstraints>::encode): Deleted.
        (IPC::ArgumentCoder<WebCore::StickyPositionViewportConstraints>::decode): Deleted.
        (IPC::encodeFilterOperation): Deleted.
        Add encoding/decoding support for FilterOperation.
        decodeFilterOperation() has to be a bare function because of the RefPtr
        out parameter.
        REFERENCE filters should never be encoded, since they have CachedSVGDocumentReferences.

        * Shared/WebCoreArgumentCoders.h:

        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTextStream::operator<<):
        Add logging for filter animations to the RemoteLayerTree log output.

        * WebProcess/WebPage/mac/GraphicsLayerCARemote.h:
        * WebProcess/WebPage/mac/GraphicsLayerCARemote.cpp:
        (WebKit::GraphicsLayerCARemote::addAnimation): Deleted. We can run
        filter animations now.

        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.h:
        KeyValues have a RefPtr<WebCore::FilterOperation> now (which can't be part of
        the union because we need its constructor to get called).
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm:
        (WebKit::PlatformCAAnimationRemote::KeyframeValue::encode): Encode the filter.
        (WebKit::PlatformCAAnimationRemote::KeyframeValue::decode): Decode the filter.
        (WebKit::PlatformCAAnimationRemote::setFromValue): Implement.
        (WebKit::PlatformCAAnimationRemote::setToValue): Implement.
        (WebKit::PlatformCAAnimationRemote::setValues): Implement.
        (WebKit::animationValueFromKeyframeValue): Handle filters.

2014-04-14  Simon Fraser  <simon.fraser@apple.com>

        Fix the build.

        * UIProcess/mac/PageClientImpl.h:

2014-04-14  Simon Fraser  <simon.fraser@apple.com>

        [WK2 iOS] Scrolling to anchor links is broken
        https://bugs.webkit.org/show_bug.cgi?id=131618
        <rdar://problem/16599144>

        Reviewed by Tim Horton.
        
        The RemoteScrollingTree implements scrollingTreeNodeRequestsScroll
        to get informed about requested scroll position updates, and passes
        them along via the RemoteScrollingCoordinatorProxy, WebPageProxy and PageClient
        to the WKWebView, which performs a scroll.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _scrollToContentOffset:WebCore::]): Scroll to content offset,
        taking page scale and insets into account.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::requestScroll):
        * UIProcess/CoordinatedGraphics/WebView.h:
        * UIProcess/PageClient.h:
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeRequestsScroll):
        Pass scrolls along to the WebPageProxy for the root node. We will also need
        to handle programmatic scrolls for overflow soon.
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/Scrolling/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::scrollingTreeNodeRequestsScroll):
        * UIProcess/Scrolling/RemoteScrollingTree.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestScroll):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::canScrollView):
        (WebKit::PageClientImpl::requestScroll):
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::requestScroll):

2014-04-12  Antti Koivisto  <antti@apple.com>

        Keep secondary tile grid for zoomed-out scale
        https://bugs.webkit.org/show_bug.cgi?id=131586

        Reviewed by Darin Adler.

        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.cpp:
        (WebKit::PlatformCALayerRemoteTiledBacking::PlatformCALayerRemoteTiledBacking):
        (WebKit::PlatformCALayerRemoteTiledBacking::customSublayers):
        
            Always request new sublayer list from tile controller.

        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.h:

2014-04-14  Tim Horton  <timothy_horton@apple.com>

        Make WK(Web)View magnification setters actually use view-relative positions
        https://bugs.webkit.org/show_bug.cgi?id=131611
        <rdar://problem/15965239>

        Reviewed by Darin Adler.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView setMagnification:centeredAtPoint:]):
        (-[WKView setMagnification:]):
        Use scalePageInViewCoordinates instead.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::scalePageInViewCoordinates):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scalePageInViewCoordinates):
        (WebKit::WebPage::pageScaleFactor):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Add scalePageInViewCoordinates, which turns the scale centerpoint within the view
        into what scalePage expects: a post-scale scroll offset.

2014-04-14  Tim Horton  <timothy_horton@apple.com>

        Support setting a background color on page overlays
        https://bugs.webkit.org/show_bug.cgi?id=131600

        Reviewed by Darin Adler.

        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::PageOverlay):
        (WebKit::PageOverlay::bounds):
        (WebKit::PageOverlay::startFadeInAnimation):
        (WebKit::PageOverlay::startFadeOutAnimation):
        (WebKit::PageOverlay::startFadeAnimation):
        (WebKit::PageOverlay::fadeAnimationTimerFired):
        Minor style adjustments.
        Use more references everywhere.

        (WebKit::PageOverlay::setBackgroundColor):
        (WebKit::PageOverlay::setNeedsDisplay):
        * WebProcess/WebPage/PageOverlay.h:
        (WebKit::PageOverlay::backgroundColor):
        Keep track of our background color, and push it down to the page overlay controller if we have one.

        * WebProcess/WebPage/PageOverlayController.cpp:
        (WebKit::updateOverlayGeometry):
        (WebKit::PageOverlayController::clearPageOverlay):
        Page overlays will always have the right size, and just use drawsContents to determine
        whether or not they should tile/have backing store/etc.

        (WebKit::PageOverlayController::installPageOverlay):
        (WebKit::PageOverlayController::didChangeOverlayBackgroundColor):
        Set the background color of the layer.

        * WebProcess/WebPage/PageOverlayController.h:

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

2014-04-13  Andy Estes  <aestes@apple.com>

        [QuickLook] Move file system-related code into WebKit
        https://bugs.webkit.org/show_bug.cgi?id=131597

        Reviewed by Dan Bernstein.

        * WebProcess/Network/WebResourceLoader.h: Made m_quickLookHandle a unique_ptr.
        * WebProcess/ios/WebResourceLoaderIOS.mm:
        (WebKit::WebResourceLoader::setUpQuickLookHandleIfNeeded):

2014-04-13  Andy Estes  <aestes@apple.com>

        REGRESSION (r167164): -[WKNSURLSessionLocal _getCookieHeadersForTask:completionHandler:] _block_invoke can access a deallocated completionHandler
        https://bugs.webkit.org/show_bug.cgi?id=131595

        Reviewed by Dan Bernstein.

        Make a copy of completionHandler and release it after we're done with it.

        * Shared/mac/CookieStorageShim.mm:
        (-[WKNSURLSessionLocal _getCookieHeadersForTask:completionHandler:]):

2014-04-13  Pratik Solanki  <psolanki@apple.com>

        Don't use ImportanceAssertion on iOS
        https://bugs.webkit.org/show_bug.cgi?id=131481
        <rdar://problem/16575830>

        Reviewed by Darin Adler.

        We have other API to mark processes as being in use on iOS. No need to use ImportanceAssertion.

        * Platform/IPC/MessageDecoder.cpp:
        * Platform/IPC/MessageDecoder.h:
        * Platform/IPC/mac/ConnectionMac.cpp:
        (IPC::Connection::receiveSourceEventHandler):
        * Platform/IPC/mac/ImportanceAssertion.h:

2014-04-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r167168 and r167194.
        https://bugs.webkit.org/show_bug.cgi?id=131589

        Caused massive ASSERTION failures on the GTK Debug bot
        (Requested by philn on #webkit).

        Reverted changesets:

        "[GTK] Add HighDPI support for non-accelerated compositing
        contents"
        https://bugs.webkit.org/show_bug.cgi?id=131562
        http://trac.webkit.org/changeset/167168

        "Unreviewed. Fix GTK+ build with recent cairo and GTK+ after
        r167168."
        http://trac.webkit.org/changeset/167194

2014-04-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build with recent cairo and GTK+ after r167168.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseCreateWebPage):

2014-04-12  Andy Estes  <aestes@apple.com>

        [iOS] Move QuickLookHandle from ResourceLoader to WebResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=131580

        Reviewed by Darin Adler.

        There's no need to bloat WebKit1's ResourceLoader with a pointer that
        only WebKit2's WebResourceLoader cares about.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResponseWithCertificateInfo):
        (WebKit::WebResourceLoader::didReceiveData):
        (WebKit::WebResourceLoader::didFinishResourceLoad):
        (WebKit::WebResourceLoader::didFailResourceLoad):
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/ios/WebResourceLoaderIOS.mm:
        (WebKit::WebResourceLoader::setUpQuickLookHandleIfNeeded):

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

        [Mac] Crashes when copying or pasting huge images
        https://bugs.webkit.org/show_bug.cgi?id=131576
        <rdar://problem/12131833>
        <rdar://problem/14427398>

        Reviewed by Darin Adler.

        Added a few null checks for SharedMemory::create() return value in pasteboard code.
        Error handling feels a bit sketchy, but
        - I'm not sure what it should look like ideally;
        - it matches the kind of error handling we already have in these functions;
        - it appears to work reasonably well in practice. We get empty content, which
        is not nice, but not particularly problematic either. When copying an animated GIF,
        we also get the GIF in RTFD flavor, so even pasting into NSTextViews works!

        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::createFromVMBuffer):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::getPasteboardBufferForType):
        (WebKit::WebContext::readBufferFromPasteboard):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::setBufferForType):

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm: (WebKit::WebDragClient::declareAndWriteDragImage):
        Also renamed some variables to prevent name collisions with with nested scope.

2014-04-11  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix on the EFL port after r167152

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

2014-04-11  Hyowon Kim  <hw1008.kim@samsung.com>

        [WK2] WebProcess crashes, when closing window after opening page by means of context menu
        https://bugs.webkit.org/show_bug.cgi?id=131439

        Reviewed by Tim Horton.

        CoordinatedGraphicsLayer calls notifyFlushRequired() through its client when destroyed.
        When PageOverlayController::notifyFlushRequired() is called, the DrawingArea could be null
        because it's destoryed in WebPage::close().

        * WebProcess/WebPage/PageOverlayController.cpp:
        (WebKit::PageOverlayController::notifyFlushRequired): Add null check of m_webPage->drawingArea().

2014-04-11  Tim Horton  <timothy_horton@apple.com>

        Lots of compositing test failures after r167152
        https://bugs.webkit.org/show_bug.cgi?id=131574

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/PageOverlayController.h:
        Skip page overlay layers in layer tree dumps, for consistency between platforms.

2014-04-11  Beth Dakin  <bdakin@apple.com>

        Need WK2 API to disable rubber-banding
        https://bugs.webkit.org/show_bug.cgi?id=131567

        Reviewed by Simon Fraser.

        New API allows the client to enable/disable horizontal or vertical rubber-banding. 
        By default, rubber-banding is enabled.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageVerticalRubberBandingIsEnabled):
        (WKPageSetEnableVerticalRubberBanding):
        (WKPageHorizontalRubberBandingIsEnabled):
        (WKPageSetEnableHorizontalRubberBanding):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setEnableVerticalRubberBanding):
        (WebKit::WebPageProxy::verticalRubberBandingIsEnabled):
        (WebKit::WebPageProxy::setEnableHorizontalRubberBanding):
        (WebKit::WebPageProxy::horizontalRubberBandingIsEnabled):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setEnableVerticalRubberBanding):
        (WebKit::WebPage::setEnableHorizontalRubberBanding):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2014-04-11  Tim Horton  <timothy_horton@apple.com>

        Fix the Mac build.

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

2014-04-11  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] Find-in-page indicator
        https://bugs.webkit.org/show_bug.cgi?id=131510
        <rdar://problem/16547777>

        Reviewed by Simon Fraser and Enrica Casucci.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindUIAfterPageScroll):
        WebKit2 will clear the selection if we reveal it while not enabling selection painting.
        So, avoid revealing it.

        (WebKit::FindController::findString):
        (WebKit::FindController::hideFindIndicator):
        (WebKit::FindController::willFindString):
        (WebKit::FindController::didFailToFindString):
        (WebKit::FindController::didHideFindIndicator):
        #if out the cross-platform find indicator code on iOS; it will be replaced
        by the code in FindControllerIOS.

        * WebProcess/WebPage/FindController.h:

        * WebProcess/WebPage/ios/FindControllerIOS.mm: Added.
        (highlightColor):
        (WebKit::FindIndicatorOverlayClientIOS::drawRect):
        Paint the selection (with black text forced on), and the yellow rounded rect
        into the indicator page overlay.

        (WebKit::FindController::updateFindIndicator):
        Create or update a small document-relative page overlay in the selection rect.

        (WebKit::FindController::hideFindIndicator):
        (WebKit::FindController::willFindString):
        (WebKit::FindController::didFailToFindString):
        (WebKit::FindController::didHideFindIndicator):
        Add willFindString, didFailToFindString, and didHideFindIndicator functions.
        They do nothing, except on iOS where they are used to prevent selection change
        messages from being dispatched while using find-in-page, and to force
        WebCore to compute a selection rect (via updateAppearance) despite the selection not being painted.

        * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h:
        (WebKit::FindIndicatorOverlayClientIOS::setFrame):

2014-04-11  Owen Taylor  <otaylor@redhat.com>

        [GTK] Add HighDPI support for non-accelerated compositing contents
        https://bugs.webkit.org/show_bug.cgi?id=131562

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (scaleFactorChanged): Added this callback to pass scale changes to the page proxy.
        (webkitWebViewBaseCreateWebPage): Attach the callback to the notify signal.
        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::createBackingStoreForGTK): Pass the scale factor to the WebCore backing store.
        (WebKit::BackingStore::incorporateUpdate): Ditto.

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

        [WK2] Dispatch to main thread's run loop to handle cookie requests.
        https://bugs.webkit.org/show_bug.cgi?id=131524

        Reviewed by Brady Eidson.

        When using synchronous network APIs from the main thread (e.g., -[NSImage
        initWithContentsOfURL:]) our cookie shim would attempt to dispath_async
        to the main thread to handle the cookie request, and block against the original
        request. CFNetwork is still servicing the run loop however, so rather than
        dispatch_async to the main queue, use the RunLoop to dispatch to the main thread.

        * Shared/mac/CookieStorageShim.mm:
        (-[WKNSURLSessionLocal _getCookieHeadersForTask:completionHandler:]):

2014-04-11  Tim Horton  <timothy_horton@apple.com>

        Make the stylebot happier with r167154.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:

2014-04-11  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] Expose a simplified zoom-to-rect to the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=131563

        Reviewed by Simon Fraser.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::zoomToRect):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::zoomToRect):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::zoomToRect):
        Add a simple message that calls WKContentView's zoom-to-rect code given just a rect and min/max scale.
        We will use the center of the rect as the zoom origin, and will try to show the whole rect.

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

        [iOS][WK2] Videos should animate into and out of fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=131497

        Reviewed by Simon Fraser.

        Pass a starting rect for the enterFullscreen animation and an ending rect
        for the exitFullscreen animation.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::enterFullscreenWithID): Pass initialFrame.
        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::screenRectOfContents): Casts node -> element and returns its screenRect().
        (WebKit::WebVideoFullscreenManager::enterFullscreenForNode): Pass initialFrame.
        (WebKit::WebVideoFullscreenManager::exitFullscreenForNode): Pass finalFrame.

2014-04-11  Tim Horton  <timothy_horton@apple.com>

        Support document-relative and custom-frame page overlays
        https://bugs.webkit.org/show_bug.cgi?id=131560
        <rdar://problem/16595556>

        Reviewed by Simon Fraser.

        Add "document-relative" overlays, which attach to (and scroll with) the document,
        and can be given a frame rect within the document to avoid overallocation of backing store.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::didChangeScrollOffset):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mainFrame):
        (WebKit::WebPage::mainFrameView):
        (WebKit::WebPage::didChangeScrollOffsetForFrame):
        * WebProcess/WebPage/WebPage.h:
        Let the PageOverlayController know *which* frame scrolled, instead of "any frame".

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindUIAfterPageScroll):
        Factor out shared code.

        (WebKit::FindController::willMoveToWebPage):
        (WebKit::FindController::drawRect):
        We can use clearRect() instead of a transparency layer and fillRect().
        I've looked through all the other overlay clients I know of and none of them
        depend on having a transparency layer at the overlay level.

        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::create):
        (WebKit::PageOverlay::PageOverlay):
        (WebKit::PageOverlay::bounds):
        (WebKit::PageOverlay::frame):
        (WebKit::PageOverlay::setFrame):
        (WebKit::PageOverlay::drawRect):
        Add OverlayType, which allows creation of Document or View relative overlays.
        All overlays up to this point are View relative, so we default to that.
        Document-relative overlays scroll with the page instead of repainting as
        the page scrolls. They can also be given an explicit frame, allowing them
        to be smaller than the entire document.

        * WebProcess/WebPage/PageOverlay.h:
        (WebKit::PageOverlay::overlayType):
        (WebKit::PageOverlay::webPage):
        (WebKit::PageOverlay::client): Deleted.
        * WebProcess/WebPage/PageOverlayController.cpp:
        (WebKit::PageOverlayController::initialize):
        (WebKit::PageOverlayController::installPageOverlay):
        (WebKit::PageOverlayController::uninstallPageOverlay):
        (WebKit::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates):
        (WebKit::updateOverlayGeometry):
        (WebKit::PageOverlayController::setPageOverlayNeedsDisplay):
        (WebKit::PageOverlayController::didChangeViewSize):
        (WebKit::PageOverlayController::didChangeDocumentSize):
        (WebKit::PageOverlayController::didChangeDeviceScaleFactor):
        (WebKit::PageOverlayController::didScrollFrame):
        (WebKit::PageOverlayController::flushPageOverlayLayers):
        (WebKit::PageOverlayController::didChangeOverlayFrame):
        Keep two overlay root layers - one for view-relative
        and one for document-relative overlays.
        Don't force synchronous scrolling if we only have document-relative overlays.
        Update the overlay's position as well as its size whenever necessary.
        Update document-relative overlay geometry when the document size changes.
        Only explicitly flush view-relative overlays; document-relative ones
        are plugged into the WebCore layer tree and flushed along with the page.

        * WebProcess/WebPage/PageOverlayController.h:
        (WebKit::PageOverlayController::documentOverlayRootLayer):
        (WebKit::PageOverlayController::viewOverlayRootLayer):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer):
        (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged):
        (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer):
        Let the PageOverlay controller know when the document size changes.
        When we set up compositing, push the document overlay root layer
        down into WebCore.

2014-04-11  Pratik Solanki  <psolanki@apple.com>

        [iOS WebKit2]: Share NSURLCache directory for webkit processes
        https://bugs.webkit.org/show_bug.cgi?id=131513
        <rdar://problem/16420859>

        Reviewed by Alexey Proskuryakov.

        Use iOS specific NSURLCache API to share the cache directory used by the networking process,
        web process and Safari.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

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

        [Mac] Add IconServices to WebProcess sandbox profile
        https://bugs.webkit.org/show_bug.cgi?id=131558
        <rdar://problem/16552397>

        Reviewed by Brady Eidson.

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

2014-04-11  Antti Koivisto  <antti@apple.com>

        Pipe initial scale factor to TileController
        https://bugs.webkit.org/show_bug.cgi?id=131521

        Reviewed by Tim Horton.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::viewportConfigurationChanged):

2014-04-10  Chris Fleizach  <cfleizach@apple.com>

        AX: WebProcess at com.apple.WebCore: WebCore::AXObjectCache::rootObject + 18
        https://bugs.webkit.org/show_bug.cgi?id=131522

        Reviewed by Anders Carlsson.

        Protect against documents that have had their render tree destroyed, and no longer return a valid cache.

        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm:

2014-04-11  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Prevent crash when exiting fullscreen mode
        https://bugs.webkit.org/show_bug.cgi?id=131528

        Reviewed by Jer Noble.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]):
        Clean up the _scaleAnimation controller, not just the _fadeAnimation controller.
        (-[WKFullScreenWindowController close]): If we are doing an immediate
        close of the view, we need to stop animations so we avoid any
        final timer events from interacting with invalid window handles.

2014-04-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        wk2-gtk does not display anything
        https://bugs.webkit.org/show_bug.cgi?id=125558

        Reviewed by Martin Robinson.

        Remove fcntl call to set access mode flags on the duplicated files
        descriptor. Those flags are ignored in Linux and make fcntl to
        fail in FreeBSD. We should handle the case where the passed
        protection is ReadOnly.
        Thanks to Raphael Kubo da Costa who proposed the solution.

        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::SharedMemory::createHandle):
        (WebKit::accessModeFile): Deleted.

2014-04-11  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][WK2] Move Vector objects into WebEditorClient::executePendingEditorCommands() invocations
        https://bugs.webkit.org/show_bug.cgi?id=131454

        Reviewed by Carlos Garcia Campos.

        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        (WebKit::WebEditorClient::executePendingEditorCommands): Take a const reference of the Vector
        object to avoid unnecessary copies. Also deploy two range-based for loops and efficiently move
        the Editor::Command objects into the other Vector.

2014-04-10  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/16582465> [Cocoa] Avoid casts from CF types to unrelated Objective-C types
        https://bugs.webkit.org/show_bug.cgi?id=131529

        Reviewed by Mark Rowe.

        * Shared/API/c/cf/WKStringCF.mm:
        (WKStringCreateWithCFString): Cast the CFStringRef into its toll-free-bridged counterpart,
        NSString, then cast the NSString into a WKNSString.
        * Shared/API/c/cf/WKURLCF.mm:
        (WKURLCreateWithCFURL): Cast the CFURLRef into its toll-free-bridged counterpart, NSURL,
        then cast the NSURL into a WKNSURL.

2014-04-10  Dan Bernstein  <mitz@apple.com>

        BundlePageDiagnosticLoggingClient leaks every string passing through it.
        https://bugs.webkit.org/show_bug.cgi?id=130140

        Reviewed by Brent Fulgham.

        * WebProcess/InjectedBundle/InjectedBundlePageDiagnosticLoggingClient.cpp:
        (WebKit::InjectedBundlePageDiagnosticLoggingClient::logDiagnosticMessage): Don’t copy the
        strings passed into the bundle client.

2014-04-10  Benjamin Poulain  <bpoulain@apple.com>

        Try to fix the debug bots after r167102

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-04-10  Gavin Barraclough  <barraclough@apple.com>

        Add user default for FTL JIT
        https://bugs.webkit.org/show_bug.cgi?id=131520

        Reviewed by Benjamin Poulain.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::decode):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::registerUserDefaultsIfNeeded):
        (WebKit::WebContext::platformInitializeWebProcess):
            - D'oh, whitespace.

2014-04-10  Gavin Barraclough  <barraclough@apple.com>

        Add user default for FTL JIT
        https://bugs.webkit.org/show_bug.cgi?id=131520

        Reviewed by Benjamin Poulain.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
            - pass setting to WebContent process.
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::registerUserDefaultsIfNeeded):
        (WebKit::WebContext::platformInitializeWebProcess):
            - read user default.
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
            - set JSC::Option.

2014-04-10  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Notify the form delegate when the custom button in the form accessory view is tapped
        https://bugs.webkit.org/show_bug.cgi?id=131518

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/_WKFormDelegate.h: Declared new delegate method.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView accessoryAutoFill]): Call the new delegate method.

2014-04-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r167097.
        https://bugs.webkit.org/show_bug.cgi?id=131519

        there was already a mechanism for this, and this was
        incomplete anyway (Requested by thorton on #webkit).

        Reverted changeset:

        "[iOS WebKit2] Disable the find overlay for now"
        https://bugs.webkit.org/show_bug.cgi?id=131509
        http://trac.webkit.org/changeset/167097

2014-04-10  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] Disable the find overlay for now
        https://bugs.webkit.org/show_bug.cgi?id=131509

        Reviewed by Adele Peterson.

        * Shared/WebPreferencesStore.h:
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::FindController):
        (WebKit::FindController::hideFindOverlay):
        (WebKit::FindController::hideFindUI):
        (WebKit::FindController::setShouldShowOverlay):
        * WebProcess/WebPage/FindController.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        Add a setting allowing us to turn off the find-in-page overlay on iOS.

2014-04-10  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed GTK build fix after r167074.

        This involves replacing resetDragSession() by
        resetCurrentDragInformation() and dragSession().operation by
        currentDragOperation().

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

2014-04-10  Owen Taylor  <otaylor@redhat.com>

        [Cairo] Implement ShareableBitmap::paint() with scale factor
        https://bugs.webkit.org/show_bug.cgi?id=64665

        Reviewed by Martin Robinson.

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

2014-04-10  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] Support phraseboundary gesture recognizer for CJK.
        https://bugs.webkit.org/show_bug.cgi?id=131493
        <rdar://problem/16319583>

        Reviewed by Benjamin Poulain.

        On iOS it is possible with a gesture to change the selection
        within the marked text.
        Changing the selection triggers also the update of the inline candidates
        over the keyboard area.
        The patch adds the logic to decide whether the gesture can begin
        as well as the code for the movement of
        the selection within the marked range.
        The gesture is allowed to start within a given radius from the marked
        area.

        * Shared/InteractionInformationAtPosition.cpp:
        (WebKit::InteractionInformationAtPosition::encode):
        (WebKit::InteractionInformationAtPosition::decode):
        * Shared/InteractionInformationAtPosition.h:
        (WebKit::InteractionInformationAtPosition::InteractionInformationAtPosition):
        * Shared/ios/GestureTypes.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::editorStateChanged):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView pointIsNearMarkedText:]):
        (toGestureType):
        (toUIWKGestureType):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::selectWithGesture):
        (WebKit::WebPage::getPositionInformation):

2014-04-10  Enrica Casucci  <enrica@apple.com>

        Unreviewed iOS build fix after http://trac.webkit.org/changeset/167074

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

2014-04-10  Alexey Proskuryakov  <ap@apple.com>

        Gtk build fix.

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

2014-04-09  Alexey Proskuryakov  <ap@apple.com>

        Eliminate DragSession structure
        https://bugs.webkit.org/show_bug.cgi?id=131465

        Reviewed by Benjamin Poulain.

        * Scripts/webkit2/messages.py:
        (struct_or_class):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<DragSession>::encode): Deleted.
        (IPC::ArgumentCoder<DragSession>::decode): Deleted.
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView draggingEntered:]):
        (-[WKView draggingUpdated:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::didPerformDragControllerAction):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::currentDragOperation):
        (WebKit::WebPageProxy::currentDragIsOverFileInput):
        (WebKit::WebPageProxy::currentDragNumberOfFilesToBeAccepted):
        (WebKit::WebPageProxy::resetCurrentDragInformation):
        (WebKit::WebPageProxy::dragSession): Deleted.
        (WebKit::WebPageProxy::resetDragSession): Deleted.
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performDragControllerAction):

2014-04-10  Martin Robinson  <mrobinson@igalia.com>

        [GTK] LayerTreeHostGtk is creating a software scene graph
        https://bugs.webkit.org/show_bug.cgi?id=131471

        Reviewed by Sergio Villar Senin.

        At some point, a regression was introduced that sent the GTK+ WebKit2 scenegraph down the
        software route. The rest of the file depends on the fact that the TextureMapper is the OpenGL
        variety, so we should force that explicitly. This is causing crashes locally and soon we
        should be able to test this directly.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::initialize): Force the use of the OpenGL scenegraph.

2014-04-09  Jeremy Jones  <jeremyj@apple.com>

        Fix build failure when #if USE(XPC_SERVICES) is false.
        https://bugs.webkit.org/show_bug.cgi?id=131474

        Reviewed by Dan Bernstein.

        Fix build. 

        * UIProcess/ios/WebProcessProxyIOS.mm:
        Add #if around BackgroundTabFlags ForegroundTabFlags to prevent unused variable error.

2014-04-09  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Add API to set preferred languages
        https://bugs.webkit.org/show_bug.cgi?id=131435

        Reviewed by Gyuyoung Kim.

        Add ewk_context_preferred_languages_set to change the list of "Accept-Language".
        This list is used to receive alternative version of contents, which is related
        to specified languages from the contents provider.

        * UIProcess/API/efl/ewk_context.cpp:
        (ewk_context_preferred_languages_set):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (serverCallback):
        (TEST_F): Added test case for ewk_context_preferred_languages_set

2014-04-09  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Add the initial WebProcess handling of animated resize for rotation
        https://bugs.webkit.org/show_bug.cgi?id=131469

        Reviewed by Tim Horton.

        Add the basic handling of dynamic resize from the WebProcess.

        On animated resize, the UIProcess decides new target rects and scale. The information
        is then passed to the WebProcess to update the content.

        For various reason, the target rects and scale computed by the UIProcess can be incorrect
        (for example, if viewport constraints limit the scale).

        In those cases, the WebProcess has all the information to compute a better target. This patch
        adds such a basic update mechanism.

        Once the new values are computed, they are sent back to the UIProcess. If the rotation animation
        is still ongoing, we do not want mess with it. What we do is set a temporary transform on the subviews
        and restore the real value after the animation. The key is to have the two matrix multiplying to the end
        value so that there is no visual difference.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:WebKit::]):
        (-[WKWebView _dynamicViewportUpdateChangedTargetToScale:position:]):
        (setViewportConfigurationMinimumLayoutSize):
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _setMinimumLayoutSizeOverride:]):
        (-[WKWebView _beginAnimatedResizeToSize:obscuredInsets:minimumLayoutSizeOverride:]):
        (-[WKWebView _endAnimatedResize]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView _frameOrBoundsChanged]):
        (-[WKView setMinimumLayoutSizeOverride:]):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::dynamicViewportUpdateChangedTarget):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView setMinimumLayoutSize:]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::dynamicViewportSizeUpdate):
        (WebKit::WebPageProxy::dynamicViewportUpdateChangedTarget):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::dynamicViewportSizeUpdate):

2014-04-09  Martin Robinson  <mrobinson@igalia.com>

        Try to fix the GTK+ build after resetDragOperation rename

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDragDataReceived): Rename resetDragOperation to resetDragSession.
        (dragExitedCallback): Ditto.

2014-04-09  Jeremy Jones  <jeremyj@apple.com>

        Enable fullscreen captions selection
        https://bugs.webkit.org/show_bug.cgi?id=131069

        Reviewed by Eric Carlson.

        Enable media selection in fullscreen.
        setLegibleMediaSelectionOptions/setAudioMediaSelectionOptions provide a list of options.
        selectAudioMediaOption/selectLegibleMediaOption change the selected option.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        Add selectAudioMediaOption/selectLegibleMediaOption

        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in:
        Add selectAudioMediaOption/selectLegibleMediaOption

        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::selectAudioMediaOption):
        Add selectAudioMediaOption

        (WebKit::WebVideoFullscreenManagerProxy::selectLegibleMediaOption):
        Add selectLegibleMediaOption

        * WebProcess/ios/WebVideoFullscreenManager.h:
        Add setAudioMediaSelectionOptions/setLegibleMediaSelectionOptions

        * WebProcess/ios/WebVideoFullscreenManager.messages.in:
        Add setAudioMediaSelectionOptions/setLegibleMediaSelectionOptions

        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::setAudioMediaSelectionOptions):
        Add setAudioMediaSelectionOptions

        (WebKit::WebVideoFullscreenManager::setLegibleMediaSelectionOptions):
        Add setLegibleMediaSelectionOptions

2014-04-09  Alexey Proskuryakov  <ap@apple.com>

        Rename some dragging functions
        https://bugs.webkit.org/show_bug.cgi?id=131460

        Reviewed by Tim Horton.

        Renamed performDrag to performDragOperation.

        Also renamed resetDragOperation to resetDragSession, because it's m_dragSession
        that it resets.

        * Shared/DragControllerAction.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDragDrop):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView draggingEntered:]):
        (-[WKView draggingExited:]):
        (-[WKView performDragOperation:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::performDragOperation):
        (WebKit::WebPageProxy::performDrag): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::resetDragSession):
        (WebKit::WebPageProxy::resetDragOperation): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performDragControllerAction):

2014-04-09  Gavin Barraclough  <baraclough@apple.com>

        Update SPI for managing tabs
        https://bugs.webkit.org/show_bug.cgi?id=131453

        Reviewed by Alexey Proskuryakov.

        * Configurations/WebKit2.xcconfig:
            - added AssertionServices
        * UIProcess/WebProcessProxy.h:
            - added m_assertion, m_assertionState.
        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::updateProcessState):
            - create BKSProcessAssertion to take an assertion.

2014-04-09  Enrica Casucci  <enrica@apple.com>

        WK2: Dictated words disappear after being inserted.
        https://bugs.webkit.org/show_bug.cgi?id=131458
        <rdar://problem/16395011>

        Reviewed by Benjamin Poulain.

        The dictation engine treats selected text as text to be
        removed. We need to ensure that the range selected to insert the
        new text isn't reflected in the UI process until we are done
        inserting the text.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::replaceDictatedText):

2014-04-09  Brady Eidson  <beidson@apple.com>

        Don't offer "contact" actions in telephone number menus
        <rdar://problem/16556907> and https://bugs.webkit.org/show_bug.cgi?id=131451

        Reviewed by Tim Horton.

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::showTelephoneNumberMenu): Skip actions that have to do with contacts,
          and skip separators too!

2014-04-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r166975.

        Do not use WebPage removed API to fix the build. Page overlays are
        no broken, see https://bugs.webkit.org/show_bug.cgi?id=131433.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::display):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::initialize):
        (WebKit::LayerTreeHostGtk::paintContents):

2014-04-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r166965.

        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:
        (WebKit::WebDragClient::startDrag): Rename Clipboard to DataTransfer.

2014-04-08  Hyowon Kim  <hw1008.kim@samsung.com>

        Fix EFL Build errors since r166975.
        https://bugs.webkit.org/show_bug.cgi?id=131421

        Reviewed by Gyuyoung Kim.

        This patch is just for fixing EFL build errors.
        The page overlay functionality is not working yet.

        * CMakeLists.txt:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.cpp:
        (WebKit::CoordinatedDrawingArea::display):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost):
        (WebKit::CoordinatedLayerTreeHost::paintLayerContents):
        * WebProcess/WebPage/PageOverlayController.cpp:
        * WebProcess/WebPage/TapHighlightController.cpp:
        (WebKit::TapHighlightController::hideHighlight):

2014-04-08  Jon Lee  <jonlee@apple.com>

        Turn MSE on by default
        https://bugs.webkit.org/show_bug.cgi?id=131313
        <rdar://problem/16525223>

        Reviewed by Jer Noble.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebPreferencesStore.h: Set default to true.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:

2014-04-08  Ryosuke Niwa  <rniwa@webkit.org>

        Fix the typo in the previous commit.

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

2014-04-08  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r 166890): Crash inside WebKit::WebEditorClient::textFieldDidEndEditing
        https://bugs.webkit.org/show_bug.cgi?id=131409

        Reviewed by Anders Carlsson.

        Create an empty API::InjectedBundle::FormClient to avoid crashing inside
        m_mainFrame->coreFrame()->loader().detachFromParent().

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

2014-04-08  Tim Horton  <timothy_horton@apple.com>

        Unify and factor out page overlay implementations
        https://bugs.webkit.org/show_bug.cgi?id=131353

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/PageOverlayController.cpp:
        (WebKit::PageOverlayController::uninstallPageOverlay):
        Don't turn fast scrolling back off unless the last overlay is removed.

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

        Add a WKNavigationAction property indicating whether it resulted from processing a user gesture
        https://bugs.webkit.org/show_bug.cgi?id=131405
        <rdar://problem/16535453>

        Reviewed by Tim Horton.

        * Shared/NavigationActionData.cpp:
        (WebKit::NavigationActionData::NavigationActionData):
        (WebKit::NavigationActionData::encode):
        (WebKit::NavigationActionData::decode):
        * Shared/NavigationActionData.h:
        * UIProcess/API/Cocoa/WKNavigationActionInternal.h:
        * UIProcess/API/Cocoa/WKNavigationActionPrivate.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::PolicyClient::decidePolicyForNavigationAction):
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::createNewPage):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createWindow):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2014-04-08  Tim Horton  <timothy_horton@apple.com>

        Unify and factor out page overlay implementations
        https://bugs.webkit.org/show_bug.cgi?id=131353

        Reviewed by Anders Carlsson.

        Bring all of the PageOverlay code together in a single cross-platform
        PageOverlayController, including hit-testing code from WebPage and painting
        and layer-tree manipulation code from the DrawingArea.

        This also makes all PageOverlays a single GraphicsLayer tree which can be
        flushed and plugged into any DrawingArea in a straightforward manner.
        We no longer have to watch for individual layers flipping into/out of tiling,
        because they're hidden underneath the root PageOverlay GraphicsLayer.
        Additionally, because GraphicsLayer is cross-platform, we can share
        all of the fairly trivial but oft-repeated overlay management code.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/PageOverlayController.cpp: Added.
        * WebProcess/WebPage/PageOverlayController.h: Added.
        (WebKit::PageOverlayController::rootLayer):
        Add PageOverlayController.

        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        Remove PageOverlay-related code from the DrawingAreas.

        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::setNeedsDisplay):
        (WebKit::PageOverlay::fadeAnimationTimerFired):
        (WebKit::PageOverlay::clear):
        * WebProcess/WebPage/PageOverlay.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::didChangeScrollOffset):
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:
        (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]):
        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]):
        Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays.

        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::pageOverlayController):
        Remove PageOverlay-related code from WebPage.

        * WebProcess/WebPage/mac/RemoteLayerTreeContext.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted.
        (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted.
        (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted.
        Remove the no-longer-necessary out-of-tree layer code.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageInstallPageOverlayWithAnimation):
        (WKBundlePageUninstallPageOverlayWithAnimation):
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::highlight):
        (WebKit::WebInspectorClient::hideHighlight):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindUIAfterPageScroll):
        (WebKit::FindController::hideFindUI):
        * WebProcess/WebPage/TelephoneNumberOverlayController.cpp:
        (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded):
        (WebKit::TelephoneNumberOverlayController::destroyOverlay):
        Make use of the FadeMode enum.

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

        Change WebPageProxy::CreateNewPage to take a NavigationActionData object
        https://bugs.webkit.org/show_bug.cgi?id=131401

        Reviewed by Dan Bernstein.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::createNewPage):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (toWKNavigationType):
        * UIProcess/API/Cocoa/WKNavigationActionInternal.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::toWKNavigationType): Deleted.
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::createNewPage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::createNewPage):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createWindow):

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

        Fix build.

        * WebKit2Prefix.h:

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

        Use an explicit class when decoding individual bundle parameters
        https://bugs.webkit.org/show_bug.cgi?id=131392
        <rdar://problem/16213914>

        Reviewed by Dan Bernstein.

        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::setBundleParameter):

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

        Move a Mountain Lion declaration to the WebKit2 prefix header
        https://bugs.webkit.org/show_bug.cgi?id=131391

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        * UIProcess/ios/PageClientImplIOS.mm:
        * UIProcess/mac/WebContextMac.mm:
        * WebKit2Prefix.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:

2014-04-08  Antti Koivisto  <antti@apple.com>

        Remove exposedRect from TileController
        https://bugs.webkit.org/show_bug.cgi?id=131378

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect):
        
            Update the visible rect for pageOverlayLayers by calling flushCompositingState. This way
            tile controller visible rect updates always happens via compositing flush (we assert
            for this in TileController::setVisibleRect).

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

        Rename Clipboard to DataTransfer
        https://bugs.webkit.org/show_bug.cgi?id=131371

        Reviewed by Anders Carlsson.

        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        (WebKit::WebDragClient::willPerformDragSourceAction):
        (WebKit::WebDragClient::startDrag):
        * WebProcess/WebCoreSupport/WebDragClient.h:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::startDrag):

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

        FlagsChanged events are not delivered to input methods when using async text input
        https://bugs.webkit.org/show_bug.cgi?id=131383

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm: (-[WKView _interpretKeyEvent:completionHandler:]):
        The early return is no longer needed.

2014-04-08  Tim Horton  <timothy_horton@apple.com>

        WebKit2 View Gestures (Swipe): Swipe-start hysteresis
        https://bugs.webkit.org/show_bug.cgi?id=127393
        <rdar://problem/15876822>

        Reviewed by Anders Carlsson.

        We shouldn't start a swipe immediately upon very small scrolls in the correct direction,
        because we don't want to get the user trapped in a swipe when they want to scroll.

        We'll accumulate the scroll deltas and wait until the user has scrolled at least 15px horizontally.
        In addition, we'll drop the swipe completely if any event has a vertical delta equal to half (or more)
        of the horizontal delta.

        * UIProcess/mac/ViewGestureController.h:
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::ViewGestureController):
        (WebKit::ViewGestureController::deltaIsSufficientToBeginSwipe):
        (WebKit::ViewGestureController::handleScrollWheelEvent):
        (WebKit::ViewGestureController::wheelEventWasNotHandledByWebCore):

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

        [Mac][WK2] Videos do not have access to session cookies
        https://bugs.webkit.org/show_bug.cgi?id=129687

        Reviewed by Eric Carlson.

        Update the CookieStorageShim to track changes in underlying networking stack.

        * Shared/mac/CookieStorageShim.mm:
        (WebKit::CookieStorageShim::initialize):
        (-[WKNSURLSessionLocal _getCookieHeadersForTask:completionHandler:]):

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

        [Cocoa] Add a way to tell whether a WKWebProcessPlugInNodeHandle is a text-type HTML input element
        https://bugs.webkit.org/show_bug.cgi?id=131374

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:
        (-[WKWebProcessPlugInNodeHandle isTextField]): Added this getter. Calls
        InjectedBundleNodeHandle::isTextField.
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::isTextField): Added. Uses
        WebCore::HTMLInputElement::isText, which is consistent with what
        WebChromeClient::focusedElementChanged uses to decide whether to call didFocusTextField.
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:

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

        [Cocoa] Add a _certificateChain property to WKWebProcessPlugInFrame
        https://bugs.webkit.org/show_bug.cgi?id=131370

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (-[WKWebProcessPlugInFrame _certificateChain]): Added this getter, which uses the new
        WebFrame::certificateInfo.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFramePrivate.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::certificateInfo): Added this getter.
        * WebProcess/WebPage/WebFrame.h:

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

        [Cocoa] Add a bundle form delegate method corresponding to textDidChangeInTextField
        https://bugs.webkit.org/show_bug.cgi?id=131369

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFormDelegatePrivate.h: Declared
        new delegate method.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setFormDelegate:]): Added an override
        of API::InjectedBundle::FormClient::textDidChangeInTextField which calls the new delegate
        method.

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

        [Cocoa] Add WKFormDelegate
        https://bugs.webkit.org/show_bug.cgi?id=131343

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _formDelegate]): Added this accessor.
        (-[WKWebView _setFormDelegate:]): Ditto.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Declared _formDelegate property.

        * UIProcess/API/Cocoa/_WKFormDelegate.h: Added.

        * UIProcess/API/Cocoa/_WKFormInputSession.h: Added.

        * UIProcess/ios/WKContentView.h: Moved _webView ivar into the @interface…
        * UIProcess/ios/WKContentView.mm: …from the @implementation.

        * UIProcess/ios/WKContentViewInteraction.h: Added _formInputSession ivar and
        formAccessoryView property.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFormInputSession initWithContentView:userObject:]): Added.
        (-[WKFormInputSession dealloc]): Added.
        (-[WKFormInputSession userObject]): Added.
        (-[WKFormInputSession isValid]): Added.
        (-[WKFormInputSession accessoryViewCustomButtonTitle]): Added.
        (-[WKFormInputSession setAccessoryViewCustomButtonTitle:]): Added.
        (-[WKFormInputSession invalidate]): Added.
        (-[WKContentView cleanupInteraction]): Invalidate and release the input session.
        (-[WKContentView formAccessoryView]): Added this accessor.
        (-[WKContentView _startAssistingNode:userObject:]): Create an input session and message the
        form delegate.
        (-[WKContentView _stopAssistingNode]): Invalidate and release the input session.

        * WebKit2.xcodeproj/project.pbxproj: Added references to new files.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFormDelegatePrivate.h: Added
        comment.

2014-04-08  Daniel Bates  <dabates@apple.com>

        Fallback to default storage session when there isn't a valid session ID
        https://bugs.webkit.org/show_bug.cgi?id=131326
        <rdar://problem/16231679>

        Reviewed by Alexey Proskuryakov.

        Fixes and issue where we may use the wrong storage session after disabling
        a private browsing session.

        Currently WebKit1 and WebKit2 without NetworkProcess assume that there
        is always a non-null private browsing storage session so long as the page
        has a non-default session ID. Instead we should only use the private browsing
        storage session when it's non-null and the page has a non-default session ID;
        otherwise, we should use the default storage session. This change will make
        the behavior in WebKit1 and WebKit2 without NetworkProcess consistent with
        the behavior in WebKit2 with NetworkProcess.

        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::storageSession):

2014-04-08  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [SOUP] Control cookie management according ResourceRequest.allowCookies()
        https://bugs.webkit.org/show_bug.cgi?id=131026

        Reviewed by Sergio Villar Senin.

        Added setting of accept cookies policy for the current soup network session cookie jar and all tracked sessions.
        Moved the implementation of cookie policy setting from WebCookieManager to WebFrameNetworkingContext.

        * WebProcess/Cookies/soup/WebCookieManagerSoup.cpp:
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy): Moved implementation to WebCookieManager::platformSetHTTPCookieAcceptPolicy.
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
        (WebKit::WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts): Moved implementation from WebCookieManager::platformSetHTTPCookieAcceptPolicy and set the cookie jar accept policy to the cookie jars of all sessions in addition to the default cookie jar.
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h: Added method prototype.

2014-04-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [WK2] Fix unused parameter compile warning
        https://bugs.webkit.org/show_bug.cgi?id=131260

        Reviewed by Darin Adler.

        Remove the arguments name without UNUSED_PARAM().

        * UIProcess/API/APIDownloadClient.h:
        (API::DownloadClient::didReceiveData):
        (API::DownloadClient::shouldDecodeSourceDataOfMIMEType):
        (API::DownloadClient::decideDestinationWithSuggestedFilename):
        (API::DownloadClient::didCreateDestination):
        * UIProcess/API/APIFindClient.h:
        (API::FindClient::didCountStringMatches):
        (API::FindClient::didFindString):
        * UIProcess/API/APIHistoryClient.h:
        (API::HistoryClient::didPerformClientRedirect):
        (API::HistoryClient::didPerformServerRedirect):
        (API::HistoryClient::didUpdateHistoryTitle):
        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::didStartProvisionalLoadForFrame):
        (API::LoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame):
        (API::LoaderClient::didFailProvisionalLoadWithErrorForFrame):
        (API::LoaderClient::didCommitLoadForFrame):
        (API::LoaderClient::didFinishLoadForFrame):
        (API::LoaderClient::didFailLoadWithErrorForFrame):
        (API::LoaderClient::didChangeBackForwardList):
        * UIProcess/API/APIPolicyClient.h:
        (API::PolicyClient::decidePolicyForNavigationAction):
        (API::PolicyClient::decidePolicyForNewWindowAction):
        (API::PolicyClient::decidePolicyForResponse):
        (API::PolicyClient::unableToImplementPolicy):

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

        [Mac] Allow com.apple.ViewBridge preferences reading in plug-in sandbox profile
        https://bugs.webkit.org/show_bug.cgi?id=131306
        <rdar://problem/16359865>

        Reviewed by Sam Weinig.

        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb: Do it.

2014-04-07  Stephanie Lewis  <slewis@apple.com>

        Crash in com.apple.WebKit.Plugin.Development at com.apple.WebKit2: WebKit::PluginControllerProxy::pluginInstanceID
        <rdar://problem/16479432>
        https://bugs.webkit.org/show_bug.cgi?id=131203

        Reviewed by Geoff Garen.

        pluginController was being removed before accessing the pluginInstanceID.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::removePluginControllerProxy):

2014-04-07  Dan Bernstein  <mitz@apple.com>

        More Mountain Lion build fix.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:

2014-04-07  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Implement the update of content offset on animated resize
        https://bugs.webkit.org/show_bug.cgi?id=131329

        Reviewed by Tim Horton.

        Compute a reasonable target offset on rotation. This goes in 3 steps:
        1) Move the page so that the center does not move during scaling.
        2) Limit the range to keep the page in scrollview without rubberbanding.
        3) The horizontal content stays the same but the vertical area changes. When on the top or bottom
           edge, stick to the edge.

        The code is moved inside _beginAnimatedResizeToSize:obscuredInsets:minimumLayoutSizeOverride: so that we can tell
        the WebProcess where the scroll position will be at the end of the animation.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _frameOrBoundsChangedFrom:]):
        (-[WKWebView _updateVisibleContentRects]):
        (-[WKWebView _beginAnimatedResizeToSize:obscuredInsets:minimumLayoutSizeOverride:]):

2014-04-07  Dan Bernstein  <mitz@apple.com>

        Mountain Lion build fix.

        * UIProcess/ios/PageClientImplIOS.mm:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:

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

        Handle decoding of nil invocation arguments
        https://bugs.webkit.org/show_bug.cgi?id=131335
        <rdar://problem/16528449>

        Reviewed by Tim Horton.

        * Shared/APIArray.h:
        Don't crash if the array element is null.

2014-04-07  Dan Bernstein  <mitz@apple.com>

        Add bundle client function corresponding to startAssistingNode
        https://bugs.webkit.org/show_bug.cgi?id=131332

        Reviewed by Anders Carlsson.

        * UIProcess/PageClient.h: Added userData parameter to startAssistingNode.

        * UIProcess/WebPageProxy.h: Added message decoder parameter to startAssistingNode.
        * UIProcess/WebPageProxy.messages.in: Added message decoder parameter to StartAssistingNode.

        * UIProcess/ios/PageClientImplIOS.h: Updated startAssistingNode override.
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::startAssistingNode): Decode the user data into an NSObject and pass
        it on to the content view.

        * UIProcess/ios/WKContentViewInteraction.h: Added userObject parameter to
        -_startAssitingNode:.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _startAssistingNode:userObject:]): Added userObject parameter. We will pass
        it to a future delegate method.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::startAssistingNode): Decode the user data and pass it to the client.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFormDelegatePrivate.h: Declared new
        delegate method.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setFormDelegate:]): Added an implementation
        of API::InjectedBundle::FormClient::willBeginInputSession which calls the new delegate
        method, and encodes the user object into userData.

        * WebProcess/InjectedBundle/APIInjectedBundleFormClient.h:
        (API::InjectedBundle::FormClient::willBeginInputSession): Added willBeginInputSession.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::elementDidFocus): Call willBeginInputSession and send the user data along
        with the StartAssistingNode message to the UI process.

2014-04-07  Jinwoo Song  <jinwoo7.song@samsung.com>

        Unreviewed. Fixing the EFL build.

        * WebProcess/WebPage/CoordinatedGraphics/WebPageCoordinatedGraphics.cpp: Include the Document header from WebCore
        to avoid operating on an incomplete type.

2014-04-07  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] WKPDFView fades in tiles, PDFs load very flashily
        https://bugs.webkit.org/show_bug.cgi?id=131325
        <rdar://problem/16382960>

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView scrollViewDidScroll:]):
        Forward scroll events to the current custom content provider.

        * UIProcess/Cocoa/WKWebViewContentProvider.h:
        Make content providers UIScrollViewDelegates (though we only forward didScroll for now).

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView web_setContentProviderData:suggestedFilename:]):
        (-[WKPDFView web_setMinimumSize:]):
        (-[WKPDFView web_setScrollView:]):
        (-[WKPDFView scrollViewDidScroll:]):
        (-[WKPDFView _revalidateViews]):
        (-[WKPDFView _computePageAndDocumentFrames]):
        (-[WKPDFView layoutViews]): Deleted.
        Keep track of each UIPDFPage, UIPDFPageView, and its frame (in unscaled/document coordinates).
        Compute all the rects up front (and re-compute upon rotation, loading, etc.).
        When scrolling, find all the pages that intersect the view (inflated by 1.5x in each
        vertical direction), and ensure that pages that are inside that rect have
        UIPDFPageViews installed, and ones that are outside that rect do not.
        Use setUseBackingLayer to ensure that we have a low-resolution layer behind the
        tiled layer to avoid flashiness.

2014-04-07  Dan Bernstein  <mitz@apple.com>

        Add API::InjectedBundle::FormClient
        https://bugs.webkit.org/show_bug.cgi?id=131317

        Reviewed by Anders Carlsson.

        * WebKit2.xcodeproj/project.pbxproj: Added reference to new file.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetFormClient):
        * WebProcess/InjectedBundle/API/c/WKBundlePageFormClient.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setFormDelegate:]): Changed to define and
        create a FormClient (which derives from API::InjectedBundle::FormClient and messages a
        delegate), and set it as the form client.
        (didFocusTextField): Deleted.
        (willSubmitForm): Deleted.
        (setUpFormClient): Deleted.

        * WebProcess/InjectedBundle/APIInjectedBundleFormClient.h: Added.
        (API::InjectedBundle::FormClient::~FormClient):
        (API::InjectedBundle::FormClient::didFocusTextField):
        (API::InjectedBundle::FormClient::textFieldDidBeginEditing):
        (API::InjectedBundle::FormClient::textFieldDidEndEditing):
        (API::InjectedBundle::FormClient::textDidChangeInTextField):
        (API::InjectedBundle::FormClient::textDidChangeInTextArea):
        (API::InjectedBundle::FormClient::shouldPerformActionInTextField):
        (API::InjectedBundle::FormClient::willSubmitForm):
        (API::InjectedBundle::FormClient::willSendSubmitEvent):
        (API::InjectedBundle::FormClient::didAssociateFormControls):
        (API::InjectedBundle::FormClient::shouldNotifyOnFormChanges):

        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:
        (WebKit::InjectedBundlePageFormClient::InjectedBundlePageFormClient): Added a constructor
        from WKBundlePageFormClientBase.
        (WebKit::toWKInputFieldActionType): Added helper to convert from internal enum to C SPI
        enum.
        (WebKit::InjectedBundlePageFormClient::shouldPerformActionInTextField): Use helper.
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.h: Added inheritance from
        API::InjectedBundle::FormClient, marked overrides as such.

        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h: Removed unused forward
        declarations.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::toInputFieldAction): Added helper to convert from C SPI enum to internal enum.
        (WebKit::WebEditorClient::doTextFieldCommandFromEvent): Use helper.
        (WebKit::WebEditorClient::textWillBeDeletedInTextField): Ditto.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Initialize m_formClient member.
        (WebKit::WebPage::setInjectedBundleFormClient): Added. Updates m_formClient. 
        (WebKit::WebPage::close): Updated code to clear m_formClient.
        (WebKit::WebPage::initializeInjectedBundleFormClient): Deleted.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::injectedBundleFormClient): Updated return type.

2014-04-07  Hyowon Kim  <hw1008.kim@samsung.com>

        Move to using std::unique_ptr for opengl, texmap, transforms and efl in WebCore/platform/graphics.
        https://bugs.webkit.org/show_bug.cgi?id=131276

        Reviewed by Darin Adler.

        Replace uses of OwnPtr for TextureMapper in LayerTreeHostGtk with std::unique_ptr.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:

2014-04-07  Joseph Pecoraro  <pecoraro@apple.com>

        Make Mac only parts of TelephoneNumberOverlayController PLATFORM(MAC).

        Unreviewed build fix for r166881.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::showTelephoneNumberMenu): Deleted.
        * WebProcess/WebPage/TelephoneNumberOverlayController.cpp:
        (WebKit::TelephoneNumberOverlayController::drawRect):
        (WebKit::TelephoneNumberOverlayController::mouseEvent):
        * WebProcess/WebPage/TelephoneNumberOverlayController.h:
        * WebProcess/WebPage/mac/TelephoneNumberOverlayControllerMac.mm:

2014-04-07  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Fixing the GTK build.

        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp: Include the Document header from WebCore
        to avoid operating on an incomplete type.
        * WebProcess/WebPage/TapHighlightController.cpp: Include the RenderElement instead of RenderObject
        to make the RenderObject::style() inline accessible.
        * WebProcess/WebPage/atk/WebPageAccessibilityObjectAtk.cpp: Include the Document header from WebCore

2014-04-07  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] Make back-buffers purgeable when possible
        https://bugs.webkit.org/show_bug.cgi?id=131213
        <rdar://problem/15373906>

        Reviewed by Simon Fraser.

        We should make back-buffers volatile when their owning
        layer falls out of use (either stops being repainted or
        is unparented), as they are inherently recreatable.

        * Shared/mac/RemoteLayerBackingStore.h:
        (WebKit::RemoteLayerBackingStore::volatility):
        (WebKit::RemoteLayerBackingStore::lastDisplayTime):
        Add storage and a getter for the backing store's last paint time.
        Add setter/getter for volatility of backing store.
        Add RemoteLayerTreeContext param to constructor.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::RemoteLayerBackingStore):
        (WebKit::RemoteLayerBackingStore::~RemoteLayerBackingStore):
        Inform the RemoteLayerTreeContext when backing store
        is created and destroyed. Since we only have a Context in
        the Web process, this will only happen there.

        (WebKit::RemoteLayerBackingStore::encode):
        (WebKit::RemoteLayerBackingStore::decode):
        Move some assertions out of #else blocks which are preceded by returns.

        (WebKit::RemoteLayerBackingStore::display):
        Update the last display time.
        If the backing store was volatile, make it non-volatile.

        (WebKit::RemoteLayerBackingStore::setVolatility):
        Mark the relevant surfaces as volatile or not.
        setVolatility:
            - fails and returns false if any surfaces weren't marked
              volatile because they were in use
            - marks the whole backing store for repaint if the front
              surface was purged

        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        Make it possible to remove the RemoteLayerBackingStore on layers
        that went from drawing contents to not drawing contents.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::ViewSnapshotStore::recordSnapshot):
        Adopt the new names from WebCore.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::recursiveBuildTransaction):
        Clear the backing store if the layer doesn't want to draw contents anymore.

        (WebKit::PlatformCALayerRemote::ensureBackingStore):

        * WebProcess/WebPage/mac/RemoteLayerTreeContext.h:
        (WebKit::RemoteLayerTreeContext::backingStoreCollection):
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::RemoteLayerTreeContext):
        (WebKit::RemoteLayerTreeContext::backingStoreWasCreated):
        (WebKit::RemoteLayerTreeContext::backingStoreWillBeDestroyed):
        Keep a RemoteLayerBackingStoreCollection, which just keeps track
        of all backing store (even unparented) created for layers in a
        particular context. Forward backing store creation/deletion to it.
        Remove a unused m_rootLayer member.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        If any layers had backing store changes, start the timer
        on the RemoteLayerBackingStoreCollection that will mark them
        purgeable once they are no longer needed.

        * Shared/mac/RemoteLayerBackingStoreCollection.mm:
        * Shared/mac/RemoteLayerBackingStoreCollection.h:
        Keep track of all backing store for our context.
        When the timer fires, run through the backing store, finding
        backing store that was last painted more than 1 second ago,
        and mark them purgeable. If there was more recently-painted
        backing store, let the timer fire again in another second;
        otherwise, stop it.

2014-04-07  Ryosuke Niwa  <rniwa@webkit.org>

        Another build fix after r166879.

        * WebProcess/WebPage/mac/WebPageMac.mm:

2014-04-07  Dan Bernstein  <mitz@apple.com>

        Tried to fix the Mac build.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:

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

        Handle clicks on DataDetectors UI for scanned phone numbers
        <rdar://problem/16379588> and https://bugs.webkit.org/show_bug.cgi?id=131309

        Reviewed by Tim Horton.

        WebContextMenuItemDatas never need to know about a ContextMenu, so remove that concept.
        Also add the concept of a selection handler for UIProcess-native menu items.
        * Shared/WebContextMenuItemData.cpp:
        (WebKit::WebContextMenuItemData::WebContextMenuItemData): 
        (WebKit::WebContextMenuItemData::encode):
        (WebKit::kitItems):
        (WebKit::WebContextMenuItemData::decode):
        * Shared/WebContextMenuItemData.h:
        (WebKit::WebContextMenuItemData::selectionHandler):

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showContextMenu):
        (WebKit::WebPageProxy::internalShowContextMenu): Make the decoder argument optional. Make consulting the client optional.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::showTelephoneNumberMenu):

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (-[WKSelectionHandlerWrapper initWithSelectionHandler:std::]):
        (-[WKSelectionHandlerWrapper executeSelectionHandler]):
        (-[WKMenuTarget forwardContextMenuAction:]):
        (WebKit::nsMenuItemVector):
        (WebKit::WebContextMenuProxyMac::contextMenuItemSelected): If the represented object is a WKSelectionHandlerWrapper,
          execute the selection handler. Do nothing else.

        Instead of getting rects from ranges, creating highlights, and storing those highlights,
        work in terms of a TelephoneNumberData object that wraps both a range and a highlight.
        This makes it easier to track where the mouse is down and to know what phone number we should act on when clicked.
        * WebProcess/WebPage/TelephoneNumberOverlayController.cpp:
        (WebKit::TelephoneNumberOverlayController::rectsForDrawing): Deleted.
        * WebProcess/WebPage/TelephoneNumberOverlayController.h:
        (WebKit::TelephoneNumberData::create):
        (WebKit::TelephoneNumberData::range):
        (WebKit::TelephoneNumberData::highlight):
        (WebKit::TelephoneNumberData::TelephoneNumberData):
        * WebProcess/WebPage/mac/TelephoneNumberOverlayControllerMac.mm:
        (WebKit::TelephoneNumberOverlayController::drawRect):
        (WebKit::TelephoneNumberOverlayController::handleTelephoneClick): Pass the phone number text and the point to WebPage.
        (WebKit::TelephoneNumberOverlayController::mouseEvent):
        (WebKit::TelephoneNumberOverlayController::clearMouseDownInformation):
        (WebKit::TelephoneNumberOverlayController::clearHighlights):

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

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::handleTelephoneNumberClick): Message the phone number and coordinate to the UIProcess.

2014-04-07  Dan Bernstein  <mitz@apple.com>

        Introduce API::InjectedBundle::PageUIClient
        https://bugs.webkit.org/show_bug.cgi?id=131310

        Reviewed by Anders Carlsson.

        * WebKit2.xcodeproj/project.pbxproj: Added references to new files.

        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp: Added #include that
        became necessary.

        * WebProcess/InjectedBundle/API/APIInjectedBundlePageUIClient.h: Added.
        (API::InjectedBundle::PageUIClient::~PageUIClient):
        (API::InjectedBundle::PageUIClient::willAddMessageToConsole):
        (API::InjectedBundle::PageUIClient::willSetStatusbarText):
        (API::InjectedBundle::PageUIClient::willRunJavaScriptAlert):
        (API::InjectedBundle::PageUIClient::willRunJavaScriptConfirm):
        (API::InjectedBundle::PageUIClient::willRunJavaScriptPrompt):
        (API::InjectedBundle::PageUIClient::mouseDidMoveOverElement):
        (API::InjectedBundle::PageUIClient::pageDidScroll):
        (API::InjectedBundle::PageUIClient::shouldGenerateFileForUpload):
        (API::InjectedBundle::PageUIClient::generateFileForUpload):
        (API::InjectedBundle::PageUIClient::statusBarIsVisible):
        (API::InjectedBundle::PageUIClient::menuBarIsVisible):
        (API::InjectedBundle::PageUIClient::toolbarsAreVisible):
        (API::InjectedBundle::PageUIClient::didReachApplicationCacheOriginQuota):
        (API::InjectedBundle::PageUIClient::didExceedDatabaseQuota):
        (API::InjectedBundle::PageUIClient::plugInStartLabelTitle):
        (API::InjectedBundle::PageUIClient::plugInStartLabelSubtitle):
        (API::InjectedBundle::PageUIClient::plugInExtraStyleSheet):
        (API::InjectedBundle::PageUIClient::plugInExtraScript):

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetUIClient): Changed to create an InjectedBundlePageUIClient and set it on
        the WebPage.

        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::InjectedBundlePageUIClient): Added constructor from
        WKBundlePageUIClient.
        (WebKit::toUIElementVisibility): Added helper to convert from C SPI enum to internal enum.
        (WebKit::InjectedBundlePageUIClient::statusBarIsVisible): Changed to use the above.
        (WebKit::InjectedBundlePageUIClient::menuBarIsVisible): Ditto.
        (WebKit::InjectedBundlePageUIClient::toolbarsAreVisible): Ditto.
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h: Added inheritance from
        API::InjectedBundle::PageUIClient, marked overrides as such.

        * WebProcess/Storage/StorageAreaMap.cpp: Added #include that became necessary.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::toolbarsVisible): Updated to use new internal enum.
        (WebKit::WebChromeClient::statusbarVisible): Ditto.
        (WebKit::WebChromeClient::menubarVisible): Ditto.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Initialized m_uiClient member.
        (WebKit::WebPage::setInjectedBundleUIClient): Added. Updates m_uiClient.
        (WebKit::WebPage::close): Updated for change in m_uiClient.
        (WebKit::WebPage::pageDidScroll): Ditto.
        (WebKit::WebPage::initializeInjectedBundleUIClient): Deleted.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::injectedBundleUIClient): Updated return type.

        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm: Added #include that became
        necessary.

2014-04-06  Dan Bernstein  <mitz@apple.com>

        Clean up WKGestureTypes.h
        https://bugs.webkit.org/show_bug.cgi?id=131286

        Reviewed by Sam Weinig.

        Renamed WKGestureTypes.h to GestureTypes.h, dropped the useless “WK” prefixes and changed
        into scoped enums, with the exception of SelectionFlags.

        * Shared/ios/GestureTypes.h: Copied from Source/WebKit2/Shared/ios/WKGestureTypes.h.
        * Shared/ios/WKGestureTypes.h: Removed.
        * UIProcess/API/Cocoa/_WKElementAction.mm:
        (copyElement):
        (saveImage):
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didUpdateBlockSelectionWithTouch):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _performAction:]):
        (toGestureType):
        (toUIWKGestureType):
        (toSelectionTouch):
        (toUIWKSelectionTouch):
        (toGestureRecognizerState):
        (toUIGestureRecognizerState):
        (toUIWKSelectionFlags):
        (toSelectionHandlePosition):
        (selectionChangedWithGesture):
        (selectionChangedWithTouch):
        (-[WKContentView _didUpdateBlockSelectionWithTouch:withFlags:growThreshold:shrinkThreshold:]):
        (-[WKContentView changeSelectionWithGestureAt:withGesture:withState:]):
        (-[WKContentView changeSelectionWithTouchAt:withSelectionTouch:baseIsStart:]):
        (-[WKContentView changeSelectionWithTouchesFrom:to:withGesture:withState:]):
        (-[WKContentView changeBlockSelectionWithTouchAt:withSelectionTouch:forHandle:]):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::rangeForWebSelectionAtPosition):
        (WebKit::WebPage::selectWithGesture):
        (WebKit::distanceBetweenRectsForPosition):
        (WebKit::computeEdgeCenter):
        (WebKit::WebPage::expandedRangeFromHandle):
        (WebKit::WebPage::contractedRangeFromHandle):
        (WebKit::WebPage::computeExpandAndShrinkThresholdsForHandle):
        (WebKit::shouldExpand):
        (WebKit::WebPage::changeBlockSelection):
        (WebKit::WebPage::updateBlockSelectionWithTouch):
        (WebKit::WebPage::updateSelectionWithTouches):
        (WebKit::WebPage::performActionOnElement):

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

        Document user content related APIs..

        Reviewed by Anders Carlsson.

        - Also demote WKScriptWorld to SPI.

        * UIProcess/API/Cocoa/WKScriptMessage.h:
        * UIProcess/API/Cocoa/WKScriptMessage.mm:
        (-[WKScriptMessage _scriptWorld]):
        (-[WKScriptMessage scriptWorld]): Deleted.
        * UIProcess/API/Cocoa/WKScriptMessageHandler.h:
        * UIProcess/API/Cocoa/WKScriptMessagePrivate.h: Added.
        * UIProcess/API/Cocoa/WKScriptWorld.h: Removed.
        * UIProcess/API/Cocoa/WKScriptWorld.mm: Removed.
        * UIProcess/API/Cocoa/WKUserContentController.h:
        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController addScriptMessageHandler:name:]):
        (-[WKUserContentController removeScriptMessageHandlerForName:]):
        (-[WKUserContentController _addScriptMessageHandler:name:world:]):
        (-[WKUserContentController _removeScriptMessageHandlerForName:world:]):
        (-[WKUserContentController addScriptMessageHandler:name:world:]): Deleted.
        (-[WKUserContentController removeScriptMessageHandlerForName:world:]): Deleted.
        * UIProcess/API/Cocoa/WKUserContentControllerPrivate.h: Added.
        * UIProcess/API/Cocoa/_WKScriptWorld.h: Copied from WebKit2/UIProcess/API/Cocoa/WKScriptWorld.h.
        * UIProcess/API/Cocoa/_WKScriptWorld.mm: Copied from WebKit2/UIProcess/API/Cocoa/WKScriptWorld.mm.
        (+[_WKScriptWorld defaultWorld]):
        (+[WKScriptWorld defaultWorld]): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:

2014-04-04  Brian J. Burg  <burg@cs.washington.edu>

        Enable WEB_REPLAY for PLATFORM(MAC)
        https://bugs.webkit.org/show_bug.cgi?id=130700

        Reviewed by Timothy Hatcher.

        * Configurations/FeatureDefines.xcconfig:

2014-04-05  Miyoung Shin  <myid.m.shin@gmail.com>

        [WK2] Fix unused parameter compile warning.
        https://bugs.webkit.org/show_bug.cgi?id=131260

        Reviewed by Gyuyoung Kim.

        fix unused parameter warning in the WebKit2 build.

        * UIProcess/API/APIDownloadClient.h:
        (API::DownloadClient::didReceiveData):
        (API::DownloadClient::shouldDecodeSourceDataOfMIMEType):
        (API::DownloadClient::decideDestinationWithSuggestedFilename):
        (API::DownloadClient::didCreateDestination):

2014-04-05  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (NetworkProcess): Subresources fail to load from AppCache
        https://bugs.webkit.org/show_bug.cgi?id=131262
        <rdar://problem/15370653>

        Reviewed by Sam Weinig.

        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::scheduleLoad): Check application cache,
        as done in ResourceLoader::start() for in-process loads.

2014-04-05  Alexey Proskuryakov  <ap@apple.com>

        Frequent PluginProcess crashes at libsqlite3.dylib: openDatabase
        https://bugs.webkit.org/show_bug.cgi?id=131264
        <rdar://problem/14165329>

        Reviewed by Sam Weinig.

        Don't create NSURLCache until after having called setenv.

        * PluginProcess/PluginProcess.h: Added m_nsurlCacheDirectory.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializePluginProcess): Compute NSURL cache path
        on our own. This does not match CFNetwork's result in most cases, but should work
        equally well.
        (WebKit::PluginProcess::initializeSandbox): Create a cache with our path and best
        guess for capacity.

2014-04-04  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed. iOS Build fix after r166818.

        These member variables / declarations are accessed by iOS
        in shared code in TelephoneNumberOverlayControllerMac.

        * WebProcess/WebPage/TelephoneNumberOverlayController.h:

2014-04-04  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed. Rollout r166812, breaks 32-bit Mavericks build.

        * Shared/mac/CookieStorageShim.mm:
        (WebKit::CookieStorageShim::initialize):
        (-[WKNSURLSessionLocal _copyCookiesForRequestUsingAllAppropriateStorageSemantics:]):

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

        Show DataDetector UI on scanned phone numbers.
        <rdar://problem/16379588> and https://bugs.webkit.org/show_bug.cgi?id=131247

        Reviewed by Tim Horton.

        Add a new PageOverlay for telephone number UI, handle drawing the UI, and
        handle mouse clicks on the button in that UI.

        Even though clicks are detected, they aren’t acted upon yet.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::selectedTelephoneNumberRangesChanged): Pass ranges to
          the TelephoneNumberController.
        * WebProcess/WebCoreSupport/WebEditorClient.h:

        This controller handles installing/removing the PageOverlay, drawing the UI elements,
        and handling mouse events while any of the UI elements are shown.
        There’s also a clumsy attempt to keep platform-specific parts separated out.
        * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: Added.
        (WebKit::TelephoneNumberOverlayController::TelephoneNumberOverlayController):
        (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded):
        (WebKit::TelephoneNumberOverlayController::destroyOverlay):
        (WebKit::TelephoneNumberOverlayController::pageOverlayDestroyed):
        (WebKit::TelephoneNumberOverlayController::willMoveToWebPage):
        (WebKit::TelephoneNumberOverlayController::didMoveToWebPage):
        (WebKit::TelephoneNumberOverlayController::rectsForDrawing):
        (WebKit::TelephoneNumberOverlayController::selectedTelephoneNumberRangesChanged):

        * WebProcess/WebPage/TelephoneNumberOverlayController.h: Added.
        (WebKit::TelephoneNumberOverlayController::create):

        * WebProcess/WebPage/mac/TelephoneNumberOverlayControllerMac.mm: Added.
        (WebKit::TelephoneNumberOverlayController::drawRect):
        (WebKit::TelephoneNumberOverlayController::handleTelephoneClick):
        (WebKit::TelephoneNumberOverlayController::mouseEvent):
        (WebKit::TelephoneNumberOverlayController::clearMouseDownInformation):
        (WebKit::TelephoneNumberOverlayController::clearHighlights):

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

        * WebKit2.xcodeproj/project.pbxproj:

2014-04-04  Martin Hock  <mhock@apple.com>

        Include Session ID in WebPageCreationParameters.
        https://bugs.webkit.org/show_bug.cgi?id=131239

        <rdar://problem/16175483>

        Reviewed by Sam Weinig.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):

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

        [Mac][WK2] Videos do not have access to session cookies
        https://bugs.webkit.org/show_bug.cgi?id=129687

        Reviewed by Eric Carlson.

        Update the CookieStorageShim to track changes in underlying networking stack.

        * Shared/mac/CookieStorageShim.mm:
        (WebKit::CookieStorageShim::initialize):
        (-[WKNSURLSessionLocal _getCookieHeadersForTask:completionHandler:]):

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

        Improve error checking in WebPageProxy::didReceiveEvent
        https://bugs.webkit.org/show_bug.cgi?id=131243
        <rdar://problem/16529207>

        Reviewed by Anders Carlsson.

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

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

        More documentation
        https://bugs.webkit.org/show_bug.cgi?id=131238

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKNavigation.h:
        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:

2014-04-04  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [GTK][CMake] Use a stricter check for the HAVE_GTK_UNIX_PRINTING define
        https://bugs.webkit.org/show_bug.cgi?id=131226

        Reviewed by Carlos Garcia Campos.

        #cmakedefine01 will define HAVE_GTK_UNIX_PRINTING to 0 instead of #undef'ining it. This
        means that simple checks like #ifdef HAVE_GTK_UNIX_PRINTING will always be true -- we
        actually need to check if the value is set to 1, which is precisely what the HAVE() macro
        does, so start using it.

        * UIProcess/API/gtk/WebKitPrintOperation.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::print):
        * WebProcess/WebPage/gtk/PrinterListGtk.cpp:
        * WebProcess/WebPage/gtk/PrinterListGtk.h:
        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:
        (WebKit::WebPrintOperationGtk::create):

2014-04-03  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS does not need to spin the run loop on synchronous message calls
        https://bugs.webkit.org/show_bug.cgi?id=131195

        Reviewed by Dan Bernstein.

        On the Mac platform, we need to spin the run loop while making synchronous calls to avoid VoiceOver hanging.
        On iOS, this not needed due to architectural differences.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::runJavaScriptAlert):
        (WebKit::WebChromeClient::runJavaScriptConfirm):
        (WebKit::WebChromeClient::runJavaScriptPrompt):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::synchronousMessagesShouldSpinRunLoop):
        * WebProcess/WebPage/WebPage.h:

2014-04-03 Andy Estes <aestes@apple.com>

        [Cocoa] Add additional WKWebView SPI for clients that interact with PDFs
        https://bugs.webkit.org/show_bug.cgi?id=131206

        Reviewed by Dan Bernstein.

        Add _dataForDisplayedPDF and _suggestedFilenameForDisplayedPDF to
        support clients that wish to save a copy of the currently displayed PDF
        to disk. Ultimately we should support this use case by exposing something
        like WKWebViewContentProvider, but for now let's do something simple.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didFinishLoadingDataForCustomContentProviderWithSuggestedFilename:data:]):
        (-[WKWebView _dataForDisplayedPDF]):
        (-[WKWebView _suggestedFilenameForDisplayedPDF]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/WKWebViewContentProvider.h:
        * UIProcess/ios/WKPDFView.h:
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView documentData]):
        (-[WKPDFView suggestedFilename]):
        (-[WKPDFView web_setContentProviderData:suggestedFilename:]):

2014-04-03  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Add API to get contents size of current web page.
        https://bugs.webkit.org/show_bug.cgi?id=131148

        Reviewed by Gyuyoung Kim.

        Application can want to get contents size of current web page without
        monitoring "contents,size,changed" signal, so I add API to get contents
        size directly.

        * UIProcess/API/C/CoordinatedGraphics/WKView.cpp:
        (WKViewGetContentsSize): WK API to get contents size from WebView.
        * UIProcess/API/C/CoordinatedGraphics/WKView.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_contents_size_get): new API to get contents size.
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2014-04-03  Jinwoo Song  <jinwoo7.song@samsung.com>

        [WK2][EFL] Use template method in creating NativeWebMouseEvent
        https://bugs.webkit.org/show_bug.cgi?id=131152

        Reviewed by Anders Carlsson.

        There are three EFL mouse events, such as Evas_Event_Mouse_Down, Evas_Event_Mouse_Up,
        and Evas_Event_Mouse_Move. They can be defined as a template method.

        * PlatformEfl.cmake: Remove NativeWebMouseEventEfl.cpp
        * Shared/NativeWebMouseEvent.h:
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent): Add a template method.
        * Shared/efl/NativeWebMouseEventEfl.cpp: Removed.

2014-04-03  Anders Carlsson  <andersca@apple.com>

        Add WKWebView documentation
        https://bugs.webkit.org/show_bug.cgi?id=131190

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKBackForwardListItem.h:
        * UIProcess/API/Cocoa/WKNavigationAction.h:
        * UIProcess/API/Cocoa/WKWebView.h:

2014-04-03  Michael Saboff  <msaboff@apple.com>

        REGRESSION: PCE.js is 20x slower in WebKit2 because timers are throttled
        https://bugs.webkit.org/show_bug.cgi?id=131189

        Reviewed by Geoffrey Garen.

        Elevate the priority of all WebKit2 service processes on iOS, not just the network process.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToService):

2014-04-03  Simon Fraser  <simon.fraser@apple.com>

        ASSERT(m_children.isEmpty()) in PlatformCALayerRemote::removeAllSublayers() on time.com
        https://bugs.webkit.org/show_bug.cgi?id=131187

        Reviewed by Maciej Stachowiak.
        
        After a call to PlatformCALayerRemote::adoptSublayers() when a layer
        toggles between tiled and non-tiled, we'd assert in PlatformCALayerRemote::removeAllSublayers()
        that not all sublayers had been removed (there was one with a null superlayer).
        
        Fix by ensuring that we don't copy over custom subviews when adoptSublayers()
        is called; they'll get added as we update children anyway.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::adoptSublayers):

2014-04-03  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Add SPI to handle animated resize
        https://bugs.webkit.org/show_bug.cgi?id=131141

        Reviewed by Simon Fraser.

        Set up a basic API to handle animated resize. The code does not do much at the moment,
        it is mostly to have an interface we can implement later.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView setFrame:]):
        (-[WKWebView setBounds:]):
        (-[WKWebView _didCommitLayerTree:WebKit::]):
        (-[WKWebView _frameOrBoundsChangedFrom:]):
        (-[WKWebView _beginAnimatedResizeToSize:obscuredInsets:minimumLayoutSizeOverride:]):
        (-[WKWebView _endAnimatedResize]):
        (-[WKWebView _frameOrBoundsChanged]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2014-04-03  Simon Fraser  <simon.fraser@apple.com>

        Pixelated WebView when display is changed from hiDPI to regularDPI
        https://bugs.webkit.org/show_bug.cgi?id=131185
        <rdar://problem/16512184&16503714>

        Reviewed by Tim Horton.
        
        TileController function was renamed.

        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.cpp:
        (WebKit::PlatformCALayerRemoteTiledBacking::setContentsScale):

2014-04-03  Sam Weinig  <sam@webkit.org>

        [WebKit2] Promote user script SPI to API
        https://bugs.webkit.org/show_bug.cgi?id=131181

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKScriptMessage.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKScriptMessage.h.
        * UIProcess/API/Cocoa/WKScriptMessage.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKScriptMessage.mm.
        (-[WKScriptMessage scriptWorld]):
        (-[_WKScriptMessage scriptWorld]): Deleted.
        * UIProcess/API/Cocoa/WKScriptMessageHandler.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKScriptMessageHandler.h.
        * UIProcess/API/Cocoa/WKScriptWorld.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKScriptWorld.h.
        * UIProcess/API/Cocoa/WKScriptWorld.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKScriptWorld.mm.
        (+[WKScriptWorld defaultWorld]):
        (+[_WKScriptWorld defaultWorld]): Deleted.
        * UIProcess/API/Cocoa/WKUserContentController.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKUserContentController.h.
        * UIProcess/API/Cocoa/WKUserContentController.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKUserContentController.mm.
        (-[WKUserContentController addScriptMessageHandler:name:world:]):
        (-[WKUserContentController removeScriptMessageHandlerForName:world:]):
        (-[_WKUserContentController addScriptMessageHandler:name:world:]): Deleted.
        (-[_WKUserContentController removeScriptMessageHandlerForName:world:]): Deleted.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration userContentController]):
        (-[WKWebViewConfiguration setUserContentController:]):
        (-[WKWebViewConfiguration _userContentController]): Deleted.
        (-[WKWebViewConfiguration _setUserContentController:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKScriptMessage.h: Removed.
        * UIProcess/API/Cocoa/_WKScriptMessage.mm: Removed.
        * UIProcess/API/Cocoa/_WKScriptMessageHandler.h: Removed.
        * UIProcess/API/Cocoa/_WKScriptWorld.h: Removed.
        * UIProcess/API/Cocoa/_WKScriptWorld.mm: Removed.
        * UIProcess/API/Cocoa/_WKUserContentController.h: Removed.
        * UIProcess/API/Cocoa/_WKUserContentController.mm: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2014-04-03  Anders Carlsson  <andersca@apple.com>

        Make download policy decisions SPI for now
        https://bugs.webkit.org/show_bug.cgi?id=131179

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        (NS_ENUM):
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        (NS_ENUM):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::PolicyClient::decidePolicyForNavigationAction):
        (WebKit::NavigationState::PolicyClient::decidePolicyForResponse):

2014-04-02  Simon Fraser  <simon.fraser@apple.com>

        Harden FilterOperation type casting
        https://bugs.webkit.org/show_bug.cgi?id=131142

        Reviewed by Sam Weinig.

        DefaultFilterOperation had an error-prone behavior where it set the base class
        OperationType to the type of some other filter class, but overrode isDefault(). 
        This made it very easy to write incorrect code that casted incorrectly based on type().
        
        Fix by making adding a DEFAULT filter operation type, and storing the represented
        type on DefaultFilterOperation().
        
        Also remove the OperationType argument for constructors of FilterOperations that
        can only be of one type, to avoid possible mistakes.
        
        Make the type cast macros a bit more normal, and use them in a few places.
        
        Fixed PlatformCAFiltersMac to handle the default filter case more cleanly.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::encodeFilterOperation):
        (IPC::decodeFilterOperation):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTextStream::operator<<):

2014-04-03  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (Async text input): Controls become unresponsive to mouse events
        https://bugs.webkit.org/show_bug.cgi?id=131176
        <rdar://problem/16507932>

        Reviewed by Tim Horton.

        * UIProcess/API/mac/WKView.mm: (NATIVE_MOUSE_EVENT_HANDLER):
        Don't confuse event handling machinery by sending events to WebProcess twice.

2014-04-03  Anders Carlsson  <andersca@apple.com>

        WKWebView should always have a UIDelegate, even when closed
        https://bugs.webkit.org/show_bug.cgi?id=131174
        <rdar://problem/16389248>

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView UIDelegate]):
        (-[WKWebView setUIDelegate:]):
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIDelegate):
        (WebKit::UIDelegate::~UIDelegate):
        (WebKit::UIDelegate::createUIClient):
        (WebKit::UIDelegate::delegate):
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::UIClient):
        (WebKit::UIDelegate::UIClient::~UIClient):
        (WebKit::UIDelegate::UIClient::createNewPage):
        (WebKit::UIDelegate::UIClient::runJavaScriptAlert):
        (WebKit::UIDelegate::UIClient::runJavaScriptConfirm):
        (WebKit::UIDelegate::UIClient::runJavaScriptPrompt):
        (WebKit::UIDelegate::UIClient::actionsForElement):
        (WebKit::UIClient::UIClient): Deleted.
        (WebKit::UIClient::~UIClient): Deleted.
        (WebKit::UIClient::delegate): Deleted.
        (WebKit::UIClient::setDelegate): Deleted.
        (WebKit::UIClient::createNewPage): Deleted.
        (WebKit::UIClient::runJavaScriptAlert): Deleted.
        (WebKit::UIClient::runJavaScriptConfirm): Deleted.
        (WebKit::UIClient::runJavaScriptPrompt): Deleted.
        (WebKit::UIClient::actionsForElement): Deleted.
        * UIProcess/ios/WKActionSheetAssistant.mm:

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

        Document WKNavigationAction and WKNavigationResponse
        https://bugs.webkit.org/show_bug.cgi?id=131138

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKFrameInfo.h:
        * UIProcess/API/Cocoa/WKNavigationAction.h:
        * UIProcess/API/Cocoa/WKNavigationResponse.h:

2014-04-03  Anders Carlsson  <andersca@apple.com>

        Make actionsForElement a proper API::UIClient member function
        https://bugs.webkit.org/show_bug.cgi?id=131171

        Reviewed by Sam Weinig.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::actionsForElement):
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIClient::actionsForElement):
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant showImageSheet]):
        (-[WKActionSheetAssistant showLinkSheet]):

2014-04-03  Martin Hodovan  <mhodovan@inf.u-szeged.hu>

        [WK2] Fix !ENABLE(BLOB) build
        https://bugs.webkit.org/show_bug.cgi?id=131164

        Reviewed by Alexey Proskuryakov.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didClose):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:

2014-04-03  Anders Carlsson  <andersca@apple.com>

        Fix iOS build.

        * UIProcess/ios/WKActionSheetAssistant.mm:

2014-04-03  Anders Carlsson  <andersca@apple.com>

        Rename UIClient.{h, mm} to UIDelegate.{h, mm}.

        Rubber-stamped by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/Cocoa/UIDelegate.h: Renamed from Source/WebKit2/UIProcess/Cocoa/UIClient.h.
        * UIProcess/Cocoa/UIDelegate.mm: Renamed from Source/WebKit2/UIProcess/Cocoa/UIClient.mm.
        * WebKit2.xcodeproj/project.pbxproj:

2014-04-03  Andrzej Badowski  <a.badowski@samsung.com>

        [EFL][WK2] Replacing zoom functionality of MiniBrowser from scale_set to page_zoom_set.
        https://bugs.webkit.org/show_bug.cgi?id=130391

        Reviewed by Gyuyoung Kim.

        Change the implementation of the zoom functionality from ewk_view_scale_set
        to ewk_view_page_zoom_set. Adding to the API functions: ewk_view_page_zoom_set and
        ewk_view_page_zoom_get to call appropriate WK functions.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_page_zoom_set):
        (ewk_view_page_zoom_get):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

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

        Sandbox violation in NetworkProcess when uploading a bundle
        https://bugs.webkit.org/show_bug.cgi?id=131133

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::cleanup):
        (WebKit::NetworkResourceLoader::didReceiveResponseAsync):
        Don't delete the files. It can't work.

2014-04-02  Jinwoo Song  <jinwoo7.song@samsung.com>

        [WK2][EFL] Remove unnecessary reinterpret_cast<> in unit testcase
        https://bugs.webkit.org/show_bug.cgi?id=131143

        Reviewed by Gyuyoung Kim.

        Ecore_Timer callback requires *Eina_Bool* return type instead of *bool*.
        Also, WebKit/EFL port coding style recommends to use *Eina_Bool* in the
        callback function for EFL event handler. Additionally, replaced 0 to nullptr.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::CallbackDataTimer::CallbackDataTimer):
        (EWK2UnitTest::CallbackDataTimer::setDone):
        (EWK2UnitTest::CallbackDataTimer::timeOutCallback):
        (EWK2UnitTest::CallbackDataTimer::setTimedOut):
        * UIProcess/API/efl/tests/test_ewk2_storage_manager.cpp:
        (EWK2StorageManagerTest::timerCallback):
        (TEST_F):

2014-04-02  Tim Horton  <timothy_horton@apple.com>

        Remove a FIXME that happened.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::display):

2014-04-02  Tim Horton  <timothy_horton@apple.com>

        Fix the !USE(IOSURFACE) build... again.

        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy):

2014-04-02  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/131135> Introduce LockHistory and LockBackForwardList enums to use in place of bools.

        These arguments are often passed using literals at the call site, where the use of bools severely hinders
        the readability of the code.

        Reviewed by Andreas Kling.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::clickedLink):

2014-04-02  Tim Horton  <timothy_horton@apple.com>

        Pool IOSurfaces to help with allocation cost
        https://bugs.webkit.org/show_bug.cgi?id=131096
        <rdar://problem/15373942>

        Reviewed by Simon Fraser.

        * Shared/mac/RemoteLayerBackingStore.h:
        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::~RemoteLayerBackingStore):
        (WebKit::RemoteLayerBackingStore::clearBackingStore):
        (WebKit::RemoteLayerBackingStore::display):
        When RemoteLayerBackingStore discards a layer, throw it into the pool.

        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy):
        Disable the pool in the UI process.

2014-04-02  Alice Barraclough  <alice.barraclough@apple.com>

        Fix a typo causing TestWebKitAPI to timeout when testing Find.

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageFindClient): Test for !functionPointer like
        all the other implementations do.

2014-04-02  Dean Jackson  <dino@apple.com>

        [iOS] Expose geolocation provider on the process pool
        https://bugs.webkit.org/show_bug.cgi?id=131125

        Reviewed by Dan Bernstein.

        Followup comments from Dan Bernstein. Use a class
        extension rather than a new category.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _geolocationProvider]):
        * UIProcess/API/Cocoa/WKProcessPoolInternal.h:

2014-04-02  Tim Horton  <timothy_horton@apple.com>

        RemoteLayerBackingStore doesn't need to clear opaque layers
        https://bugs.webkit.org/show_bug.cgi?id=131134

        Reviewed by Simon Fraser.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::display):
        We don't need to clear opaque layers, because we'll paint
        over the whole area. In addition, we should fill opaque layers
        with a bright color in debug builds to make it very clear
        that we've made a mistake (similar to what FrameView does).

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

        Document WKBackForwardList, WKBackForwardListItem and WKWebViewConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=131131

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKBackForwardList.h:
        * UIProcess/API/Cocoa/WKBackForwardListItem.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:

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

        Document WKUIDelegate and WKWindowFeatures
        https://bugs.webkit.org/show_bug.cgi?id=131124

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKProcessPool.h:
        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKWindowFeatures.h:

2014-04-02  Dean Jackson  <dino@apple.com>

        [iOS] Expose geolocation provider on the process pool
        https://bugs.webkit.org/show_bug.cgi?id=131125

        Patch by Sam Weinig.
        Reviewed by Dean Jackson.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _geolocationProvider]): Create and initialize WKGeolocationProviderIOS if necessary.
        * UIProcess/API/Cocoa/WKProcessPoolInternal.h: Expose _geolocationProvider.
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _decidePolicyForGeolocationRequestFromOrigin:frame:request:]): Call into WKProcessPool.

2014-04-02  Martin Hock  <mhock@apple.com>

        Unify private browsing with sessions.
        https://bugs.webkit.org/show_bug.cgi?id=130099

        Reviewed by Alexey Proskuryakov.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: Change WebPage::isUsingEphemeralSession() to WebPage::usesEphemeralSession().
        (WKBundlePageIsUsingEphemeralSession):
        * WebProcess/InjectedBundle/InjectedBundle.cpp: Change Settings::setPrivateBrowsingEnabled() to Page::enableLegacyPrivateBrowsing().
        (WebKit::InjectedBundle::setPrivateBrowsingEnabled):
        * WebProcess/Plugins/PluginView.cpp: Change Settings::privateBrowsingEnabled() to Page::usesEphemeralSession().
        (WebKit::PluginView::isPrivateBrowsingEnabled):
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp: Ditto.
        (WebKit::WebFrameNetworkingContext::storageSession):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::usesEphemeralSession): Renamed from isUsingEphemeralSession.
        (WebKit::WebPage::setSessionID): Ensure session before setting.
        (WebKit::WebPage::updatePreferences): Set session to legacy private session if needed.
        (WebKit::WebPage::sessionID): Moved to header.
        (WebKit::WebPage::isUsingEphemeralSession): Renamed to usesEphemeralSession.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::sessionID): Just call down to m_page.

2014-04-02  Alice Barraclough  <alice.liu@apple.com>

        Adding Objective-C SPI for Find in Page.
        https://bugs.webkit.org/show_bug.cgi?id=131000 Need an Objective-C API or SPI for Find in Page

        Reviewed by Dan Bernstein.

        Find-on-page SPI added to WKWebView, which funnels the messages through the WebPageProxy.
        Returning messages are designated by _WKFindDelegate protocol.
        Also provide FindDelegate access on WKWebView.
        WebPageProxy gets a new-style API::FindClient.
        Also had to replicate WKFindOptions as _WKFindOptions in Cocoa SPI. This is unfortunate, but it 
        does follow the pattern of other options & enums related to classes that are SPI-for-now.
        
        PageClientImplIOS handles setFindIndicator function by forwarding to its WKContentView, 
        but WKContentView _setFindIndicator remains unimplemented for now.
        
        * UIProcess/API/APIFindClient.h: Added.
        (API::FindClient::~FindClient):
        (API::FindClient::didCountStringMatches):
        (API::FindClient::didFindString):
        (API::FindClient::didFailToFindString):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageFindClient):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView _findDelegate]):
        (-[WKWebView _setFindDelegate:]):
        (toFindOptions):
        (-[WKWebView _countStringMatches:options:maxCount:]):
        (-[WKWebView _findString:options:maxCount:]):
        (-[WKWebView _hideFindUI]):
        (-[WKWebView _hostForFindUI]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        (NS_OPTIONS):
        * UIProcess/API/Cocoa/_WKFindDelegate.h: Added.
        * UIProcess/Cocoa/FindClient.h: Added.
        * UIProcess/Cocoa/FindClient.mm: Added.
        (WebKit::FindClient::FindClient):
        (WebKit::FindClient::delegate):
        (WebKit::FindClient::setDelegate):
        (WebKit::FindClient::didCountStringMatches):
        (WebKit::FindClient::didFindString):
        (WebKit::FindClient::didFailToFindString):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setFindClient):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::didCountStringMatches):
        (WebKit::WebPageProxy::didFindString):
        (WebKit::WebPageProxy::didFailToFindString):
        (WebKit::WebPageProxy::initializeFindClient): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::findClient):
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::setFindIndicator):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _setFindIndicator:WebKit::fadeOut:animate:]):
        * WebKit2.xcodeproj/project.pbxproj:

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

        Rename -[WKBackForwardListItem originalURL] to -[WKBackForwardListItem initialURL]
        https://bugs.webkit.org/show_bug.cgi?id=131116

        Reviewed by Antti Koivisto.

        * UIProcess/API/Cocoa/WKBackForwardListItem.h:
        * UIProcess/API/Cocoa/WKBackForwardListItem.mm:
        (-[WKBackForwardListItem initialURL]):
        (-[WKBackForwardListItem originalURL]): Deleted.

2014-04-02  Antti Koivisto  <antti@apple.com>

        Split tile grid out from TileController
        https://bugs.webkit.org/show_bug.cgi?id=131102

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.cpp:
        (WebKit::PlatformCALayerRemoteTiledBacking::PlatformCALayerRemoteTiledBacking):
        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.h:

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

        Try a workaround for a crash
        https://bugs.webkit.org/show_bug.cgi?id=131112

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView UIDelegate]):
        (-[WKWebView setUIDelegate:]):

2014-04-02  Martin Robinson  <mrobinson@igalia.com>

        REGRESSION(r165704): [GTK] Inspector resources not correctly generated
        https://bugs.webkit.org/show_bug.cgi?id=130343

        Reviewed by Gustavo Noronha Silva.

        * PlatformGTK.cmake: Pass all appropriate directories to the
        GResources XML generation script.

2014-04-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move NEWS file to a new location
        https://bugs.webkit.org/show_bug.cgi?id=130901

        Reviewed by Brent Fulgham.

        * gtk/NEWS: Renamed from Source/WebKit/gtk/NEWS.

2014-04-01  Benjamin Poulain  <bpoulain@apple.com>

        <rdar://problem/16294704> Remove _pageExtendedBackgroundColor entirely
        https://bugs.webkit.org/show_bug.cgi?id=131075

        Reviewed by Beth Dakin.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _pageExtendedBackgroundColor]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2014-04-01  Anders Carlsson  <andersca@apple.com>

        Stub out more WKNavigation properties
        https://bugs.webkit.org/show_bug.cgi?id=131080

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKNavigation.h:
        * UIProcess/API/Cocoa/WKNavigation.mm:
        (-[WKNavigation initialRequest]):
        (-[WKNavigation response]):
        (-[WKNavigation error]):

2014-04-01  Anders Carlsson  <andersca@apple.com>

        Rename -[WKWebView activeURL] to -[WKWebView URL]
        https://bugs.webkit.org/show_bug.cgi?id=131077

        Reviewed by Tim Horton.

        Keep -[WKWebView activeURL] as SPI until no clients depend on it.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView URL]):
        (-[WKWebView activeURL]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::willChangeActiveURL):
        (WebKit::NavigationState::didChangeActiveURL):

2014-04-01  Anders Carlsson  <andersca@apple.com>

        Move -[WKWebView stopLoading:] back to WKIBActions
        https://bugs.webkit.org/show_bug.cgi?id=131072

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView stopLoading:]):

2014-04-01  Anders Carlsson  <andersca@apple.com>

        Migrate more headers
        https://bugs.webkit.org/show_bug.cgi?id=131068

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKBackForwardList.h:
        Remove a newline.

        * WebKit2.xcodeproj/project.pbxproj:
        Move files from the "Deprecated" group.

2014-04-01  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Enable runtime feature if feature flag is enabled
        https://bugs.webkit.org/show_bug.cgi?id=130013

        Reviewed by Simon Fraser.

        Enable CSS Grid Layout runtime feature when ENABLE_CSS_GRID_LAYOUT flag is true.

        * Shared/WebPreferencesStore.h:

2014-04-01  Anders Carlsson  <andersca@apple.com>

        Demote WKBackForwardListDidChangeNotification to SPI
        https://bugs.webkit.org/show_bug.cgi?id=131059

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKBackForwardList.h:
        * UIProcess/API/Cocoa/WKBackForwardList.mm:
        * UIProcess/API/Cocoa/WKBackForwardListInternal.h:
        * UIProcess/API/Cocoa/WKBackForwardListPrivate.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKBackForwardListInternal.h.
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::LoaderClient::didChangeBackForwardList):
        * WebKit2.xcodeproj/project.pbxproj:

2014-04-01  Andy Estes  <aestes@apple.com>

        [Cocoa] Add SPI to determine if a WKWebView is displaying a PDF
        https://bugs.webkit.org/show_bug.cgi?id=131063

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _isDisplayingPDF]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2014-04-01  Simon Fraser  <simon.fraser@apple.com>

        Remove some explicit template instantiations from logging code
        https://bugs.webkit.org/show_bug.cgi?id=131065

        Reviewed by Tim Horton.
        
        No need to explicitly state template types.

        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::dumpChangedLayers):

2014-04-01  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] Partial repaint is broken
        https://bugs.webkit.org/show_bug.cgi?id=131056

        Reviewed by Dean Jackson.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::display):
        We need to check if the repaint rects themselves cover the whole
        layer's surface, not just their bounds. Otherwise, we'll optimize
        out the back->front copy and end up not painting the whole layer.

2014-04-01  Anders Carlsson  <andersca@apple.com>

        Pass a WKNavigationAction to the create UIDelegate method
        https://bugs.webkit.org/show_bug.cgi?id=131053

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/Cocoa/UIClient.h:
        * UIProcess/Cocoa/UIClient.mm:
        (WebKit::UIClient::setDelegate):
        (WebKit::UIClient::createNewPage):

2014-04-01  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Remove the two finger pan gesture recognizer until it is actually implemented
        https://bugs.webkit.org/show_bug.cgi?id=131009

        Reviewed by Sam Weinig.

        The two finger pan should not block the pinch gesture recognizer.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView _twoFingerPanRecognized:]): Deleted.

2014-04-01  Anders Carlsson  <andersca@apple.com>

        Remove limits from WKBackForwardList getters
        https://bugs.webkit.org/show_bug.cgi?id=131052

        Reviewed by Beth Dakin.

        * UIProcess/API/Cocoa/WKBackForwardList.h:
        * UIProcess/API/Cocoa/WKBackForwardList.mm:
        (-[WKBackForwardList backList]):
        (-[WKBackForwardList forwardList]):
        (-[WKBackForwardList backListCount]): Deleted.
        (-[WKBackForwardList forwardListCount]): Deleted.
        (-[WKBackForwardList backListWithLimit:]): Deleted.
        (-[WKBackForwardList forwardListWithLimit:]): Deleted.
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::backList):
        (WebKit::WebBackForwardList::forwardList):
        * UIProcess/WebBackForwardList.h:

2014-04-01  Anders Carlsson  <andersca@apple.com>

        Stub out the web process -> UI process message SPI
        https://bugs.webkit.org/show_bug.cgi?id=131048

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _userContentController]):
        (-[WKWebViewConfiguration _setUserContentController:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKScriptMessage.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKScriptWorld.h.
        * UIProcess/API/Cocoa/_WKScriptMessage.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKScriptWorld.h.
        (-[_WKScriptMessage body]):
        (-[_WKScriptMessage originatingWebView]):
        * UIProcess/API/Cocoa/_WKScriptMessageHandler.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKScriptWorld.h.
        * UIProcess/API/Cocoa/_WKScriptWorld.h:
        * UIProcess/API/Cocoa/_WKUserContentController.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKScriptWorld.h.
        * UIProcess/API/Cocoa/_WKUserContentController.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h.
        (-[_WKUserContentController addScriptMessageHandler:name:world:]):
        (-[_WKUserContentController removeScriptMessageHandler:]):
        * WebKit2.xcodeproj/project.pbxproj:

2014-04-01  Andreas Kling  <akling@apple.com>

        Invalidate CFNetwork connection cache on memory pressure.
        <https://webkit.org/b/131038>

        Stop holding on to cached HTTP connections if we come under memory pressure.

        Reviewed by Geoff Malloc-Garen.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformLowMemoryHandler):

2014-04-01  Anders Carlsson  <andersca@apple.com>

        Tweak WKPreferences API
        https://bugs.webkit.org/show_bug.cgi?id=131047

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences init]):
        (-[WKPreferences initWithUserDefaultsKeyPrefix:]):
        (-[WKPreferences userDefaultsKeyPrefix]):
        (-[WKPreferences initWithUserDefaultsPrefixKey:]): Deleted.
        (-[WKPreferences userDefaultsPrefixKey]): Deleted.

2014-03-31  Simon Fraser  <simon.fraser@apple.com>

        Enable WEB_TIMING on Mac and iOS
        https://bugs.webkit.org/show_bug.cgi?id=128064

        Reviewed by Sam Weinig, Brent Fulgham.
        
        Enable WEB_TIMING.

        * Configurations/FeatureDefines.xcconfig:

2014-03-31  Simon Fraser  <simon.fraser@apple.com>

        [UI-side compositing] Fix animations, and add logging
        https://bugs.webkit.org/show_bug.cgi?id=131011

        Reviewed by Tim Horton.
        
        UI-side animations were broken because GraphicsLayerCARemote::addAnimation()
        never called the superclass, so fix.
        
        Add logging for animations to the layer tree commit output.

        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::dumpProperty):
        (WebKit::RemoteLayerTreeTextStream::operator<<):
        (WebKit::dumpChangedLayers):
        * WebProcess/WebPage/mac/GraphicsLayerCARemote.cpp:
        (WebKit::GraphicsLayerCARemote::addAnimation):

2014-04-01  Zalan Bujtas  <zalan@apple.com>

        Build fix after r166582.

        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::ContextMenuContextData):

2014-04-01  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Transition class Image (and its dependencies) from int to float to enable subpixel positioned/sized images.
        https://bugs.webkit.org/show_bug.cgi?id=130643

        Reviewed by Simon Fraser.

        This is in preparation to support subpixel positioned/sized background images. While 1x bitmap images can't take
        subpixel sizing on hidpi resolutions, both generated and hidpi images can.
        This patch does not change Image behavior in general as both position and size are still snapped to integral values.  

        No change in behavior.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::encodeImage):
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::updateCursor):

2014-04-01  Joonghun Park  <jh718.park@samsung.com>

        [EFL][WK2] Fix and update the existing test case for ewk_database_manager_origins_async_get API
        https://bugs.webkit.org/show_bug.cgi?id=131017

        Reviewed by Gyuyoung Kim.

        * UIProcess/API/efl/tests/test_ewk2_database_manager.cpp:
        Fix memory leaks and errors caused by duplication of Ecore_Timer deletion
        as well as update a naming style of local variable.
        (EWK2DatabaseManagerTest::databaseOriginsCallback):
        (TEST_F):

2014-04-01  Zan Dobersek  <zdobersek@igalia.com>

        Don't copy the children map in webkitWebViewBaseContainerForall
        https://bugs.webkit.org/show_bug.cgi?id=131016

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseContainerForall): Avoid copying the GtkWidget-to-IntRect HashMap object
        by transforming the iteration to a range-based for-loop over that HashMap's keys.

2014-04-01  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Don't copy the ResourceResponse object in webkitWebViewDecidePolicy
        https://bugs.webkit.org/show_bug.cgi?id=131015

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewDecidePolicy): Avoid copying the ResourceResponce object returned by webkitURIResponseGetResourceResponse.
        That function already returns a reference, so the return value should be stored accordingly.

2014-04-01  Eunmi Lee  <eunmi15.lee@samsung.com>

        [CoordinatedGraphics] Content scale factor should not be applied to draw contents when fixed layout is not used.
        https://bugs.webkit.org/show_bug.cgi?id=130962

        Reviewed by Gyuyoung Kim.

        Delegating scaling is turned off when fixed layout is not used in the
        coordinated graphics, so page scale factor is applied to the contents
        directly.
        In that case, we should not apply page scale factor to coordinated
        graphics to draw contents and calculate visible content rect.

        Currently, page scale factor is applied twice to the coordinated
        graphics and contents, so result of scaling is abnormal.

        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::transformToScene):
        (WebKit::WebView::visibleContentsSize):

2014-04-01  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Rename ewk_application_cache_manager_delete{_all}
        https://bugs.webkit.org/show_bug.cgi?id=131012

        Reviewed by Gyuyoung Kim.

        While discussing Bug 130577, we resulted that _clear and _xxx_del is better name for the EFL.
        This patch will rename similar API in ewk_application_cache_manager.

        In addition, fixed some typos in doxygen.

        * UIProcess/API/efl/ewk_application_cache_manager.cpp:
        (ewk_application_cache_manager_clear): Renamed from ewk_application_cache_manager_delete_all
        (ewk_application_cache_manager_entries_for_origin_del): Renamed from ewk_application_cache_manager_delete
        (ewk_application_cache_manager_delete_all): Deleted.
        (ewk_application_cache_manager_delete): Deleted.
        * UIProcess/API/efl/ewk_application_cache_manager.h:
        * UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:
        (TEST_F):

2014-03-31  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK build fix after r166553.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (_WebKitSettingsPrivate::_WebKitSettingsPrivate): Pass 'WebKit2.' as the second argument to WebPreferences::create().

2014-03-31  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Extract the control of page background out of color_set
        https://bugs.webkit.org/show_bug.cgi?id=127539

        Reviewed by Gyuyoung Kim.

        EFL have a way to change the color using evas_object_color_set and we used it to change background.
        But, We should not use it because the alpha value of color_set is used
        for the transparancy of object itself including background and contents.

        This patch added ewk_view_bg_color_{get|set} to change the background color.

        * UIProcess/API/C/efl/WKViewEfl.cpp:
        Extracted controls of page background out of color_set.
        color_set will be only used for the opacity of whole contents.
        (WKViewSetBackgroundColor): Added to share page background color.
        (WKViewGetBackgroundColor):
        * UIProcess/API/C/efl/WKViewEfl.h:
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::handleEvasObjectColorSet):
        * UIProcess/API/efl/ewk_view.cpp:
        Removed ewk_view_draws_page_background_set which just control whether to draw background.
        ewk_view_bg_color_set will conver it.
        (ewk_view_bg_color_set):
        (ewk_view_bg_color_get):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp: Added simple test case.
        * UIProcess/efl/WebViewEfl.cpp:
        (WebKit::WebViewEfl::setViewBackgroundColor):
        (WebKit::WebViewEfl::viewBackgroundColor):
        * UIProcess/efl/WebViewEfl.h:

2014-03-31  Joonghun Park  <jh718.park@samsung.com>

        [EFL][WK2]Implement ewk APIs of web local storage which have deletion functions of the local storage entries
        https://bugs.webkit.org/show_bug.cgi?id=130577

        Reviewed by Gyuyoung Kim.

        * UIProcess/API/efl/ewk_storage_manager.cpp:
        (ewk_storage_manager_entries_clear):
        (ewk_storage_manager_entries_for_origin_del):
        * UIProcess/API/efl/ewk_storage_manager.h:
        * UIProcess/API/efl/ewk_storage_manager_private.h:
        (EwkStorageManager::wkStorageManager):
        * UIProcess/API/efl/tests/test_ewk2_storage_manager.cpp:
        adding and updating API unittest and fixing memory leak of the existing test case
        (EWK2StorageManagerTest::getStorageOriginsCallback):
        (EWK2StorageManagerTest::checkOrigin):
        (EWK2StorageManagerTest::getOrigin):
        (TEST_F):

2014-03-31  Anders Carlsson  <andersca@apple.com>

        Rename policy enums to match the delegate methods
        https://bugs.webkit.org/show_bug.cgi?id=131002

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        (NS_ENUM):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::PolicyClient::decidePolicyForNavigationAction):
        (WebKit::NavigationState::PolicyClient::decidePolicyForResponse):

2014-03-31  Anders Carlsson  <andersca@apple.com>

        Add more preferences
        https://bugs.webkit.org/show_bug.cgi?id=131001

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences isJavaScriptEnabled]):
        (-[WKPreferences setJavaScriptEnabled:]):
        (-[WKPreferences javaScriptCanOpenWindowsAutomatically]):
        (-[WKPreferences setJavaScriptCanOpenWindowsAutomatically:]):
        (-[WKPreferences suppressesIncrementalRendering]):
        (-[WKPreferences setSuppressesIncrementalRendering:]):
        (-[WKPreferences isJavaEnabled]):
        (-[WKPreferences setJavaEnabled:]):
        (-[WKPreferences arePlugInsEnabled]):
        (-[WKPreferences setPlugInsEnabled:]):

2014-03-31  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

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

2014-03-31  Simon Fraser  <simon.fraser@apple.com>

        Fix the iOS build.

        * UIProcess/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::createLayer):
        * UIProcess/mac/RemoteLayerTreeHost.h:
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::setLayerID):
        (WebKit::RemoteLayerTreeHost::layerID):
        (WebKit::RemoteLayerTreeHost::createLayer):

2014-03-31  Anders Carlsson  <andersca@apple.com>

        Add a couple of iOS specific preferences
        https://bugs.webkit.org/show_bug.cgi?id=130999

        Reviewed by Simon Fraser.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences allowsInlineMediaPlayback]):
        (-[WKPreferences setAllowsInlineMediaPlayback:]):
        (-[WKPreferences mediaPlaybackRequiresUserAction]):
        (-[WKPreferences setMediaPlaybackRequiresUserAction:]):
        (-[WKPreferences mediaPlaybackAllowsAirPlay]):
        (-[WKPreferences setMediaPlaybackAllowsAirPlay:]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2014-03-31  Anders Carlsson  <andersca@apple.com>

        Add a new -[WKPreferences initWithUserDefaultsPrefixKey:] initializer
        https://bugs.webkit.org/show_bug.cgi?id=130996

        Reviewed by Simon Fraser.

        Add a "key prefix" to the WebKit::WebPreferences create function, so we can use a different
        key prefix ("WebKit") for the modern API and not pollute the user defaults namespace with
        the old key prefix ("WebKit2.").
        
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesCreate):
        (WKPreferencesCreateWithIdentifier):
        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences init]):
        (-[WKPreferences initWithUserDefaultsPrefixKey:]):
        (-[WKPreferences userDefaultsPrefixKey]):
        * UIProcess/WebPageGroup.cpp:
        (WebKit::WebPageGroup::WebPageGroup):
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::WebPreferences):
        * UIProcess/WebPreferences.h:
        (WebKit::WebPreferences::create):
        * UIProcess/mac/WebPreferencesMac.mm:
        (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):
        (WebKit::WebPreferences::platformUpdateFloatValueForKey):

2014-03-31  Pratik Solanki  <psolanki@apple.com>

        Remove duplicate entries in Derived Sources.

        Rubber-stamped by Anders Carlsson.

        * WebKit2.xcodeproj/project.pbxproj:

2014-03-31  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree):

2014-03-31  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree):

2014-03-31  Anders Carlsson  <andersca@apple.com>

        Rename -[WKNavigationAction destinationFrame] to -[WKNavigationAction targetFrame]
        https://bugs.webkit.org/show_bug.cgi?id=130994

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKNavigationAction.h:
        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (-[WKNavigationAction description]):
        (-[WKNavigationAction targetFrame]):
        (-[WKNavigationAction setTargetFrame:]):
        (-[WKNavigationAction destinationFrame]): Deleted.
        (-[WKNavigationAction setDestinationFrame:]): Deleted.
        * UIProcess/API/Cocoa/WKNavigationActionInternal.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::PolicyClient::decidePolicyForNavigationAction):

2014-03-31  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] Flush all surfaces after painting into all of them, instead of after painting into each one
        https://bugs.webkit.org/show_bug.cgi?id=130768
        <rdar://problem/16421471>

        Reviewed by Benjamin Poulain.

        * Shared/mac/RemoteLayerBackingStore.h:
        Make RemoteLayerBackingStore noncopyable.
        Add flush(), which synchronously flushes painting operations on the underlying backing store.
        Add storage for the CGContext that needs to be flushed, and ensure that it is flushed before we paint again.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (RemoteLayerBackingStore::display):

        (RemoteLayerBackingStore::drawInContext):
        Don't flush the context immediately after painting.

        (RemoteLayerBackingStore::flush):
        Flush the current front surface/buffer's context.
        Clear the new pending-flush members.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::flushBackingStoreChangesInTransaction):
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        Crawl through all of the valid changed backing stores in the transaction and flush them.
        Reset changed properties after encoding the commit.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::resetChangedProperties):
        (WebKit::RemoteLayerTreeTransaction::changedLayers):
        (WebKit::RemoteLayerTreeTransaction::changedLayerProperties):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        (WebKit::RemoteLayerTreeTransaction::encode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        (WebKit::RemoteLayerTreeTransaction::layerPropertiesChanged):
        (WebKit::dumpChangedLayers):
        Instead of storing a copy of the LayerProperties struct for each changed layer
        while building the transaction in the Web process, store a list of changed layers,
        and directly encode the commit from those layers' LayerProperties. This provides a few benefits:
                - We avoid copying LayerProperties for every changed layer, every commit
                - We can make RemoteLayerBackingStore noncopyable
                - We can walk the changed layers after building the transaction
                in order to flush backing store, and actually affect the layers'
                own RemoteLayerBackingStore instead of a copy.
        The UI process will still generate a LayerPropertiesMap at decode time.
        
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree):
        Don't copy the LayerProperties struct for the debug overlay. Instead,
        adjust the properties which the debug overlay whacks directly on the layer,
        after applying the normal LayerProperties.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (PlatformCALayerRemote::recursiveBuildTransaction):
        Don't reset changed layer properties in the middle of building a transaction. Instead,
        RemoteLayerTreeDrawingArea::flushLayers() will reset all the flags on all changed layers
        after the commit is encoded.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:
        (WebKit::PlatformCALayerRemote::properties):

2014-03-31  Simon Fraser  <simon.fraser@apple.com>

        [UI-side compositing] Proxy animations to the UI process
        https://bugs.webkit.org/show_bug.cgi?id=130946

        Reviewed by Tim Horton.
        
        Add encoding/decoding of TimingFunctions. Add encoding support
        for HashSet.
        
        Add PlatformCAAnimationRemote and have PlatformCALayerRemote allow
        animations now. PlatformCALayerRemote's properties are defined in the class,
        as is the encoding/decoding (much cleaner than having them in the transaction
        class I think).
        
        Add support for the "animationDidStart" callback and sending this back to the
        web process. This involves a HashMap of layerID->WKAnimationDelegate stored
        on the RemoteLayerTreeHost, and a message send via the DrawingArea. On the
        other side, RemoteLayerTreeContext stores a HashMap of layerID->PlatformCALayerRemote*
        for layers which have just started animations, which is used to get the
        PlatformCALayer* to call animationDidStart() on.
        
        This requires that the RemoteLayerTreeHost* be passed down into property application,
        and that the RemoteLayerTreeHost have a reference to the drawing area.
        
        To every CALayer in the UI process we -setValue:forKey: to track the PlatformLayerID,
        so we can get back to it in order to dispatch "animationDidStart".
        
        Replace some "using namespace WebKit" with "namespace WebKit { }".

        * Platform/IPC/ArgumentCoders.h:
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<LinearTimingFunction>::encode):
        (IPC::ArgumentCoder<LinearTimingFunction>::decode):
        (IPC::ArgumentCoder<CubicBezierTimingFunction>::encode):
        (IPC::ArgumentCoder<CubicBezierTimingFunction>::decode):
        (IPC::ArgumentCoder<StepsTimingFunction>::encode):
        (IPC::ArgumentCoder<StepsTimingFunction>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/mac/RemoteLayerBackingStore.mm:
        * Shared/mac/RemoteLayerTreePropertyApplier.h:
        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::applyPropertiesToLayer):
        (WebKit::RemoteLayerTreePropertyApplier::applyProperties):
        * Shared/mac/RemoteLayerTreeTransaction.h:
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        (WebKit::dumpChangedLayers):
        * UIProcess/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::layerID):
        (WebKit::RemoteLayerTreeHost::createLayer):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::acceleratedAnimationDidStart):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::showDebugIndicator):
        * UIProcess/mac/RemoteLayerTreeHost.h:
        (WebKit::RemoteLayerTreeHost::animationDelegates):
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::RemoteLayerTreeHost):
        (WebKit::RemoteLayerTreeHost::updateLayerTree):
        (WebKit::RemoteLayerTreeHost::layerWillBeRemoved):
        (WebKit::RemoteLayerTreeHost::animationDidStart):
        (WebKit::RemoteLayerTreeHost::layerID):
        (WebKit::RemoteLayerTreeHost::createLayer):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::acceleratedAnimationDidStart):
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/mac/GraphicsLayerCARemote.cpp:
        (WebKit::GraphicsLayerCARemote::createPlatformCAAnimation):
        * WebProcess/WebPage/mac/GraphicsLayerCARemote.h:
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.h: Added.
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm: Added.
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::recursiveBuildTransaction):
        (WebKit::PlatformCALayerRemote::animationStarted):
        (WebKit::PlatformCALayerRemote::addAnimationForKey):
        (WebKit::PlatformCALayerRemote::removeAnimationForKey):
        (WebKit::PlatformCALayerRemote::animationForKey):
        (PlatformCALayerRemote::recursiveBuildTransaction): Deleted.
        (PlatformCALayerRemote::addAnimationForKey): Deleted.
        (PlatformCALayerRemote::removeAnimationForKey): Deleted.
        (PlatformCALayerRemote::animationForKey): Deleted.
        * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.mm:
        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.cpp:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::layerWillBeDestroyed):
        (WebKit::RemoteLayerTreeContext::willStartAnimationOnLayer):
        (WebKit::RemoteLayerTreeContext::animationDidStart):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::acceleratedAnimationDidStart):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::commitTransientZoom):

2014-03-31  Tim Horton  <timothy_horton@apple.com>

        Double-buffer RemoteLayerBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=130990

        Reviewed by Simon Fraser.

        We'll keep a front and back buffer for each surface; the front is generally currently
        being displayed in the UI process, and the back is the one we'll paint into.

        Swap the two surfaces each time we paint; since we synchronize with the UI process,
        the old front surface will generally be out-of-use by the render server by the time
        we paint again. However, since render server commits are asynchronous and we have 
        no way to syncronize with them yet, we have to check if the (swapped to front) back buffer is in use,
        and create a new front buffer if it is.

        Triple-buffering would solve this problem, as would synchronization with the render server,
        as would a pool of surfaces - we will revisit these solutions in future patches.

        * Shared/mac/RemoteLayerBackingStore.h:
        * Shared/mac/RemoteLayerBackingStore.mm:
        (RemoteLayerBackingStore::ensureBackingStore):
        (RemoteLayerBackingStore::clearBackingStore):
        Factor clearBackingStore() out of ensureBackingStore() and display().

        (RemoteLayerBackingStore::display):
        Swap buffers. Since m_backSurface will hold on to the back surface's CGContext,
        we don't need to worry about tearing down the image first anymore.
        Don't worry about creating a back image (nor copying it into the front image)
        if we're going to paint the whole layer.

        (RemoteLayerBackingStore::drawInContext):
        Fix some names.

        (RemoteLayerBackingStore::applyBackingStoreToLayer):
        Reduce duplication.

        (RemoteLayerBackingStore::createImageForFrontBuffer): Deleted.

2014-03-31  Tim Horton  <timothy_horton@apple.com>

        Synchronize Web process remote layer tree commits with CoreAnimation commits in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=130984

        Reviewed by Simon Fraser.

        There's no reason for the Web process to paint faster than the UI process
        can apply to and commit the CoreAnimation layer tree.

        Also, once we get proper double-buffering and purgeable back buffers, we
        will need the ability to make some assumptions about in-use surfaces.

        Unfortunately, we can't actually tell when the render server commits, 
        as this is an asynchronous operation in a process we don't control, so
        for now, this is only an approximation.

        This also means that the assumptions we would like to make won't be
        strong guarantees yet.

        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        When we commit, install a run loop observer to fire immediately after CoreAnimation commits.

        (WebKit::RemoteLayerTreeDrawingAreaProxy::showDebugIndicator):
        Fix a typo ('cmponents').

        (WebKit::coreAnimationDidCommitLayersCallback):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::scheduleCoreAnimationLayerCommitObserver):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::coreAnimationDidCommitLayers):
        When CA commits, send a message to the Web process letting it know that we
        swapped to the new backing store.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        (WebKit::RemoteLayerTreeDrawingArea::didUpdate):
        Defer remote layer tree commits until we get didUpdate() from the UI process.

2014-03-31  Dean Jackson  <dino@apple.com>

        Remove WEB_ANIMATIONS
        https://bugs.webkit.org/show_bug.cgi?id=130989

        Reviewed by Simon Fraser.

        Remove this feature flag until we plan to implement.

        * Configurations/FeatureDefines.xcconfig:

2014-03-31  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Hook up scroll events for accelerated overflow:scroll
        https://bugs.webkit.org/show_bug.cgi?id=130976

        Reviewed by Tim Horton.
        
        When an accelerated overflow:scroll is scrolled in the UI process,
        tell the WebProcess that the scroll happened to update RenderLayer
        state and fire events.
        
        Add a WKOverflowScrollViewDelegate which is set as the delegate of
        UIScrollViews, owned by ScrollingTreeOverflowScrollingNodeIOS, and propagates
        -scrollViewDidScroll: messages to ScrollingTree::scrollPositionChangedViaDelegatedScrolling(),
        which updates child layers and then, via RemoteScrollingTree::scrollingTreeNodeDidScroll,
        tells the RemoteScrollingCoordinator which sends a message to the WebProcess.
        
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidScroll): Name change
        to try to reduce confusion.
        (WebKit::RemoteScrollingCoordinatorProxy::scrollPositionChanged): Deleted.
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/Scrolling/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::scrollingTreeNodeDidScroll):
        * UIProcess/Scrolling/RemoteScrollingTree.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (-[WKOverflowScrollViewDelegate initWithScrollingTreeNode:WebKit::]):
        (-[WKOverflowScrollViewDelegate scrollViewDidScroll:]):
        (-[WKOverflowScrollViewDelegate scrollViewWillBeginDragging:]):
        (-[WKOverflowScrollViewDelegate scrollViewDidEndDragging:willDecelerate:]):
        (-[WKOverflowScrollViewDelegate scrollViewDidEndScrollingAnimation:]):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::~ScrollingTreeOverflowScrollingNodeIOS):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateBeforeChildren):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateAfterChildren):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::scrollViewDidScroll):
        * WebProcess/Scrolling/RemoteScrollingCoordinator.mm:
        (WebKit::RemoteScrollingCoordinator::scrollPositionChangedForNode): No need for
        rounding.

2014-03-29  Simon Fraser  <simon.fraser@apple.com>

        Fix scrolling on OS X with UI-side compositing
        https://bugs.webkit.org/show_bug.cgi?id=130930

        Reviewed by Tim Horton.
        
        On iOS, we rely on visible rect updates to propagate scroll offset
        changes to the WebProcess. RemoteScrollingCoordinatorProxy was thus hardcoded
        to bail from scrollPositionChanged() when the scrolled node was the root node,
        but this broke OS X. Fix by adding a behavior flag to RemoteScrollingCoordinatorProxy.

        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::RemoteScrollingCoordinatorProxy):
        (WebKit::RemoteScrollingCoordinatorProxy::scrollPositionChanged):
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        (WebKit::RemoteScrollingCoordinatorProxy::setPropagatesMainFrameScrolls):
        (WebKit::RemoteScrollingCoordinatorProxy::propagatesMainFrameScrolls):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeWebPage):

2014-03-31  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] Disable tile cohort retention for now
        https://bugs.webkit.org/show_bug.cgi?id=130926
        <rdar://problem/16465413>

        Reviewed by Simon Fraser.

        * Shared/WebPreferencesStore.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        Add a preference for temporary tile cohort retention (essentially, provide a setting
        that means that we will never retain tiles at all once they leave the tile coverage rect).
        Defaults to true to maintain existing behavior, except for iOS WebKit2, where
        it defaults to false because we don't have the requisite support for purgeable tiles yet.

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

2014-03-31  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Buildfix after r166497.

        Reviewed by Csaba Osztrogonác.

        * UIProcess/API/efl/ewk_context.h: Missing EAPI added.

2014-03-31  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Use PROJECT_VERSION_* instead of WEBKIT_*_VERSION
        https://bugs.webkit.org/show_bug.cgi?id=130936

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitVersion.h.in: Use PROJECT_VERSION_* macros instead of the Autotools ones.

2014-03-31  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        [EFL][WK2] Add ewk APIs to control TLS error policy on WebContext.
        https://bugs.webkit.org/show_bug.cgi?id=129740

        Reviewed by Gyuyoung Kim.

        * PlatformEfl.cmake:
        Added the new SSL test.

        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::ignoreTLSErrors):
        (EwkContext::setIgnoreTLSErrors):
        (ewk_context_ignore_tls_errors_get):
        (ewk_context_ignore_tls_errors_set):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_private.h:
        Added the API functions.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestServer.cpp:
        (EWK2UnitTestServer::EWK2UnitTestServer):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestServer.h:
        Extended the unit test server to handle TLS.

        * UIProcess/API/efl/tests/test_ewk2_ssl.cpp:
        Added tests to check the TLS policy API.

2014-03-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK2 plugin process binary name after r166492.

        * PlatformGTK.cmake: Fix typo.

2014-03-31  Dániel Bátyai  <dbatyai.u-szeged@partner.samsung.com>

        Remove hostThisRegister() and hostThisValue()
        https://bugs.webkit.org/show_bug.cgi?id=130895

        Reviewed by Geoffrey Garen.

        Removed hostThisRegister() and hostThisValue() and instead use thisArgumentOffset() and thisValue() respectively.

        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        (WebKit::callMethod):

2014-03-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add support for GTK3 plugins
        https://bugs.webkit.org/show_bug.cgi?id=130599

        Reviewed by Martin Robinson.

        We currently have a gtk2 based plugin process mainly for flash
        and a few other plugins that use GTK2, but many other plugins
        don't even use gtk at all. This patch builds a lighter plugin
        process based on GTK3, used by default for all the plugins expect
        the ones requiring GTK2. And of course the default plugin process
        supports GTK3 plugins.

        * CMakeLists.txt: Add common rules to build the default plugin process.
        * PlatformEfl.cmake: Remove common cmake code that is now in CMakeLists.txt.
        * PlatformGTK.cmake: Rename WebKitPluginProcess to
        WebKitPluginProcess2 and add the platform specific rules to build
        the default plugin process.
        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::NetscapePluginModule::getPluginInfoForLoadedPlugin):
        Check if the loaded plugin module uses GTK2.
        (WebKit::NetscapePluginModule::getPluginInfo): Set requiresGtk2 accordingly.
        (WebKit::NetscapePluginModule::scanPlugin): Write "requires-gtk2"
        line to stdout if the plugin requires GTK2.
        * Shared/Plugins/PluginModuleInfo.h: Add requiresGtk2 boolean member.
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess): Use the
        WebKitPluginProcess2 executable when the plugin requires GTK2.
        * UIProcess/Plugins/PluginProcessProxy.h: Add requiresGtk2 boolean
        member to RawPluginMetaData struct.
        * UIProcess/Plugins/gtk/PluginInfoCache.cpp: Bump the cache schema version.
        (WebKit::PluginInfoCache::getPluginInfo): Read also requires-gtk2
        key from the cache.
        (WebKit::PluginInfoCache::updatePluginInfo): Save also
        requires-gtk2 key in the cache.
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::platformGetLaunchOptions): Add an
        extra initialization data parameter if the plugin requires GTK2.
        (WebKit::PluginProcessProxy::scanPlugin): Check if "requires-gtk2"
        was written to stdout.

2014-03-30  Andy Estes  <aestes@apple.com>

        [Cocoa] Add an originatingWebView property to _WKDownload
        https://bugs.webkit.org/show_bug.cgi?id=130945

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]): Passed self to WKView's initializer.
        * UIProcess/API/Cocoa/_WKDownload.h: Declared originatingWebView as a weak, readonly property.
        * UIProcess/API/Cocoa/_WKDownload.mm:
        (-[_WKDownload originatingWebView]):
        (-[_WKDownload setOriginatingWebView:]):
        * UIProcess/API/Cocoa/_WKDownloadInternal.h: Re-declared originatingWebView as readwrite so that
        PageClientImpl can call setOriginatingWebView:. Removed some dead code.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:context:configuration:webView:]): Updated to accept a webView parameter.
        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]): Passed nil for the webView parameter.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/Cocoa/DownloadClient.mm:
        (WebKit::DownloadClient::decideDestinationWithSuggestedFilename): Ensured allowOverwrite is initialized.
        * UIProcess/PageClient.h: Included handleDownloadRequest() on all platforms.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision): Ditto.
        (WebKit::WebPageProxy::handleDownloadRequest): Ditto.
        * UIProcess/WebPageProxy.h: Ditto.
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::handleDownloadRequest): Called -[_WKDownload setOriginatingWebView:].
        * UIProcess/mac/PageClientImpl.h: Added a m_webView member variable.
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::PageClientImpl): Asserted that m_webView is nil if WK API isn't enabled.
        (WebKit::PageClientImpl::handleDownloadRequest): Called -[_WKDownload setOriginatingWebView:].

2014-03-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r166434.
        https://bugs.webkit.org/show_bug.cgi?id=130938

        Caused crashes and other failures on cache tests (Requested by
        ap on #webkit).

        Reverted changeset:

        "Web Replay: add page-level setting to bypass the MemoryCache"
        https://bugs.webkit.org/show_bug.cgi?id=130728
        http://trac.webkit.org/changeset/166434

2014-03-28  Anders Carlsson  <andersca@apple.com>

        Uncaught NSExceptions should crash the web process
        https://bugs.webkit.org/show_bug.cgi?id=130923
        <rdar://problem/16463751>

        Reviewed by Dan Bernstein.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-03-28  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r166441 and r166443.

        Missing PLATFORM(COCOA) guards added.

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

2014-03-28  Stephanie Lewis  <slewis@apple.com>

        Don't prevent AppSleep from sync messages.
        https://bugs.webkit.org/show_bug.cgi?id=130747.

        Reviewed by Anders Carlsson.

        We think sync messages only need to happen full throttle when the plugin is visible,
        the user is interacting with the plugin, or audio is playing.  Since we already
        take assertions for all these cases the assertion in sync messages doesn’t provide
        any value.  Since it can keep the PluginProcess awake in other instances remove it.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::didReceiveSyncMessage):

2014-03-28  Stephanie Lewis  <slewis@apple.com>

        Stop waking up the web process in the background because of plugin activity.
        Part of <rdar://problem/16061257> PluginProcess should AppNap when no plugins on active tab.

        Reviewed by Anders Carlsson.

        Plugin activity in the background can constantly wake up web processes.  This is only
        necessary when audio is playing to support web apps like Pandora and youtube playing 
        in the background.  Use a new api in CoreAudio to see if there is audio playing in
        the PluginProcess.

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::PluginProcess): Add a AudioHardwareListener
        (WebKit::PluginProcess::createWebProcessConnection): tell web process current state
        (WebKit::PluginProcess::audioHardwareDidBecomeActive): respond to audio hardware notifications
        (WebKit::PluginProcess::audioHardwareDidBecomeInactive):
        * PluginProcess/PluginProcess.h:
        * PluginProcess/WebProcessConnection.cpp: tell WebProcess when audio state in PluginProcess
             changes.
        (WebKit::WebProcessConnection::audioHardwareDidBecomeActive):
        (WebKit::WebProcessConnection::audioHardwareDidBecomeInactive):
        * PluginProcess/WebProcessConnection.h:
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
             Only invoke pageThrottler activity when playing audio
        (WebKit::NPRuntimeObjectMap::evaluate):
        * WebProcess/Plugins/Plugin.h: add function to get audio state
        (WebKit::Plugin::audioIsPlayingInPluginProcess):
        * WebProcess/Plugins/PluginProcessConnection.cpp: store audio state
        (WebKit::PluginProcessConnection::PluginProcessConnection):
        (WebKit::PluginProcessConnection::didReceiveMessage):
        (WebKit::PluginProcessConnection::audioHardwareDidBecomeActive):
        (WebKit::PluginProcessConnection::audioHardwareDidBecomeInactive):
        * WebProcess/Plugins/PluginProcessConnection.h:
        (WebKit::PluginProcessConnection::audioIsPlaying):
        * WebProcess/Plugins/PluginProcessConnection.messages.in:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::audioIsPlayingInPluginProcess):
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::audioIsPlayingInPluginProcess):
        * WebProcess/Plugins/PluginView.h:

2014-03-28  Stephanie Lewis  <slewis@apple.com>

        Have the plugin process track visibility of it’s plugin and sleep when none
        are visible.
        Part of <rdar://problem/16061257> PluginProcess should AppNap when no plugins on active tab.
        https://bugs.webkit.org/show_bug.cgi?id=130694

        Reviewed by Anders Carlsson.

        Currently AppSleep is enabled on the PluginProcess based on web page visibility.
        Add visibility tracking to plugins and move the decision to AppSleep into the the
        PluginProcess

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::PluginProcess): Add a new activity for visible plugins
        (WebKit::PluginProcess::pluginsForWebProcessDidBecomeVisible): take an activity
             assertion if any web processes have a visible plugin.
        (WebKit::PluginProcess::pluginsForWebProcessDidBecomeHidden): 
        * PluginProcess/PluginProcess.h:
        * PluginProcess/WebProcessConnection.cpp: 
        (WebKit::WebProcessConnection::removePluginControllerProxy): remove plugin from 
            visible plugins when destroying it
        (WebKit::WebProcessConnection::pluginDidBecomeVisible):
        (WebKit::WebProcessConnection::pluginDidBecomeHidden): track which plugins are
            visible for each web process
        * PluginProcess/WebProcessConnection.h:
        * PluginProcess/mac/PluginControllerProxyMac.mm:
        (WebKit::PluginControllerProxy::windowVisibilityChanged): notify WebProcessConnection
            when visibility changed.
        * UIProcess/WebContext.h:
        * UIProcess/mac/WebContextMac.mm:  instead of tracking plugin app sleep state on the web pref.
            and visibility state, just use the web pref.
        (WebKit::WebContext::updateProcessSuppressionState):
        (WebKit::WebContext::processSuppressionPreferenceIsEnabledForAllContexts):

2014-03-28  Brian Burg  <bburg@apple.com>

        Web Replay: add page-level setting to bypass the MemoryCache
        https://bugs.webkit.org/show_bug.cgi?id=130728

        Reviewed by Timothy Hatcher.

        * UIProcess/APISession.cpp:
        (API::generateID): update the base ID for generating unique sessions.

2014-03-28  Cody Krieger  <cjk@apple.com>

        Add willSubmitForm callback support to WKWebProcessPlugInFormDelegatePrivate.

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

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFormDelegatePrivate.h:
        Add -_webProcessPlugInBrowserContextController:willSubmitForm:toFrame:fromFrame:withValues:
        to the WKWebProcessPlugInFormDelegatePrivate protocol.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        Wire up the willSubmitForm() callback to the new
        WKWebProcessPlugInFormDelegatePrivate method.

2014-03-28  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Enable async text input implementation
        https://bugs.webkit.org/show_bug.cgi?id=130856

        Reviewed by Sam Weinig.

        * UIProcess/API/mac/WKView.mm: (-[WKView _interpretKeyEvent:completionHandler:]):
        Temporarily work around <rdar://16393434>.

2014-03-28  Alexey Proskuryakov  <ap@apple.com>

        Move sync CancelComposition message under an ifdef
        https://bugs.webkit.org/show_bug.cgi?id=130908

        Reviewed by Enrica Casucci.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::cancelComposition): Deleted.
        * UIProcess/mac/WebPageProxyMac.mm:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:

2014-03-28  Alexey Proskuryakov  <ap@apple.com>

        [iOS] Don't cancel composition on selection change
        https://bugs.webkit.org/show_bug.cgi?id=130909

        Reviewed by Enrica Casucci.

        Fixing a recent regression from bug 130727.

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

2014-03-28  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        [WK2] Removed unused method logChannelByName.
        https://bugs.webkit.org/show_bug.cgi?id=130897

        Reviewed by Anders Carlsson.

        * Platform/Logging.cpp:
        (WebKit::logChannelByName): Deleted.
        * Platform/Logging.h:

2014-03-28  Alexey Proskuryakov  <ap@apple.com>

        Eliminate a sync cancelComposition call in WebPageProxy::editorStateChanged
        https://bugs.webkit.org/show_bug.cgi?id=130727

        Reviewed by Enrica Casucci.

        Added a separate CompositionWasCanceled IPC call, with which WebProcess can tell
        UIProcess that it should notify an input method of canceled composition. There are
        a lot of incorrect edge cases where we don't call it correctly, but this was true
        in the old implementation too (for different edge cases).

        This change only affects iOS and async NSTextInputClient code path on Mac. I don't
        want to change sync NSTextInputClient code path unless absolutely necessary.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::editorStateChanged):
        (WebKit::WebPageProxy::compositionWasCanceled):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::insertText):
        (WebKit::WebPageProxy::executeKeypressCommands):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didChangeSelection):

2014-03-28  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Running minibrowser with url crashes in debug build
        https://bugs.webkit.org/show_bug.cgi?id=130492

        Reviewed by Martin Robinson.

        Use the ResourceRequest(const URL& url) constructor, instead of the
        one taking a String, to call WebPageProxy::loadRequest(), so we
        ensure that the passed URI is correctly constructed.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_load_uri): Create an URL out of a SoupURI and
        use that to create a ResourceRequest to pass to loadRequest().

2014-03-27  Pratik Solanki  <psolanki@apple.com>

        [iOS WebKit2] Tweak cache sizes for iOS
        https://bugs.webkit.org/show_bug.cgi?id=130871

        Reviewed by Sam Weinig.

        Bring over the tweaks we had made to memory cache size for WebKit1 on iOS to WebKit2. These
        were made per findings in <rdar://8611638>.

        * Shared/CacheModel.cpp:
        (WebKit::calculateCacheSizes):

2014-03-27  Jinwoo Song  <jinwoo7.song@samsung.com>

        [WK2][EFL] Fix wrong parameter name in ewk_view_user_agent_set()
        https://bugs.webkit.org/show_bug.cgi?id=130888

        Reviewed by Gyuyoung Kim.

        * UIProcess/API/efl/ewk_view.h:

2014-03-27  Alexey Proskuryakov  <ap@apple.com>

        Confirm composition in resignFirstResponder, don't cancel it
        https://bugs.webkit.org/show_bug.cgi?id=130852

        Reviewed by Darin Adler.

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

2014-03-27  Pratik Solanki  <psolanki@apple.com>

        [iOS WebKit2] Don't pass disk cache directory path on iOS
        https://bugs.webkit.org/show_bug.cgi?id=130862

        Reviewed by Sam Weinig.

        The diskPath passed to NSURLCache initializer is treated differently on Mac and iOS. Just
        pass nil for now until we sort out the API.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-03-27  Pratik Solanki  <psolanki@apple.com>

        [iOS WebKit2] Share network process code between iOS and Mac
        https://bugs.webkit.org/show_bug.cgi?id=130861

        Reviewed by Sam Weinig.

        Implement network process functions for iOS by moving common code from NetworkProcessMac.mm
        to a new shared file NetworkProcessCocoa.mm and sharing between iOS and Mac.

        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm: Added.
        (WebKit::NetworkProcess::platformLowMemoryHandler):
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        Common initialization code for iOS and Mac.
        (WebKit::memorySize):
        (WebKit::volumeFreeSize):
        (WebKit::NetworkProcess::platformSetCacheModel):
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        (WebKit::NetworkProcess::initializeProcess):
        Remove unnecessary #if PLATFORM(IOS).
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
        * WebKit2.xcodeproj/project.pbxproj:

2014-03-27  Enrica Casucci  <enrica@apple.com>

        Add support for AirPlay picker in WK2 for iOS.
        https://bugs.webkit.org/show_bug.cgi?id=130855
        <rdar://problem/15349859>

        Reviewed by Joseph Pecoraro and Benjamin Poulain.

        Adds support to display the airplay picker for iPhone and iPad
        in WK2.
        The picker on iPad is displayed next to the airplay button.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::showAirPlayRoutePicker):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _showAirPlayRoutePicker:fromRect:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::showAirPlayRoutePicker):
        * UIProcess/ios/forms/WKAirPlayRoutePicker.h: Added.
        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm: Added.
        (-[WKAirPlayRoutePicker initWithView:]):
        (-[WKAirPlayRoutePicker dealloc]):
        (-[WKAirPlayRoutePicker popoverControllerDidDismissPopover:]):
        (-[WKAirPlayRoutePicker _presentAirPlayPopoverAnimated:fromRect:]):
        (-[WKAirPlayRoutePicker _windowWillRotate:]):
        (-[WKAirPlayRoutePicker _windowDidRotate:]):
        (-[WKAirPlayRoutePicker _dismissAirPlayRoutePickerIPad]):
        (-[WKAirPlayRoutePicker showAirPlayPickerIPad:fromRect:]):
        (-[WKAirPlayRoutePicker showAirPlayPickerIPhone:]):
        (-[WKAirPlayRoutePicker show:fromRect:]):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        (WebKit::WebChromeClient::showAirPlayRoutePicker):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::touchEvent):
        (WebKit::WebPage::touchEventSyncForTesting):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::rectForElementAtInteractionLocation):
        (WebKit::WebPage::handleTap):

2014-03-27  Benjamin Poulain  <bpoulain@apple.com>

        [WK2][iOS] <rdar://problem/16414684> WKWebView should draw a white background before the page loads
        https://bugs.webkit.org/show_bug.cgi?id=130873

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):

2014-03-27  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Compute a good exposed rect when scaling WKContentView
        https://bugs.webkit.org/show_bug.cgi?id=130761

        Reviewed by Simon Fraser.

        Add a simple heuristic to improve tiling while zooming. In theory we could take the zoom
        center and scaleRate to split the speed between scrolling and pinching. In practice,
        zoom is transitory and is not as predictable as scrolling, so this patch just does a very
        simple heuristic:
        -When zooming in, do not expand coverage.
        -When zooming out, add half a tile size on every side.

        * Shared/VisibleContentRectUpdateInfo.cpp:
        (WebKit::VisibleContentRectUpdateInfo::encode):
        (WebKit::VisibleContentRectUpdateInfo::decode):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::VisibleContentRectUpdateInfo::timestamp):
        (WebKit::VisibleContentRectUpdateInfo::horizontalVelocity):
        (WebKit::VisibleContentRectUpdateInfo::verticalVelocity):
        (WebKit::VisibleContentRectUpdateInfo::scaleChangeRate):
        * UIProcess/ios/WKContentView.mm:
        (WebKit::HistoricalVelocityData::VelocityData::VelocityData):
        (WebKit::HistoricalVelocityData::velocityForNewData):
        (WebKit::HistoricalVelocityData::append):
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:scale:inStableState:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:

        (WebKit::adjustExposedRectForBoundedScale):
        When zooming past the maximum size, adjust the exposed rect to continue tiling the area
        at maximum size. Otherwise, we tile a tiny area, and have to retile larger when the animation
        pull back the view to maximum scale.

        (WebKit::adjustVelocityDataForBoundedScale):
        Since we do not split the velocity from scrolling from the scaling, just clear the velocity when zooming.
        Also clear the scaleChangeRate when the scale is out of bounds. There is no reason to add tiles for
        temporary state.

        (WebKit::WebPage::updateVisibleContentRects):

2014-03-27  Anders Carlsson  <andersca@apple.com>

        Add _ prefix to WKRemoteObjectRegistery and WKRemoteObjectInterface
        https://bugs.webkit.org/show_bug.cgi?id=130868

        Reviewed by Sam Weinig.

        * Shared/API/Cocoa/RemoteObjectRegistry.h:
        * Shared/API/Cocoa/RemoteObjectRegistry.mm:
        (WebKit::RemoteObjectRegistry::RemoteObjectRegistry):
        * Shared/API/Cocoa/WKRemoteObject.h:
        * Shared/API/Cocoa/WKRemoteObject.mm:
        (-[WKRemoteObject _initWithObjectRegistry:interface:]):
        * Shared/API/Cocoa/WKRemoteObjectCoder.h:
        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (-[WKRemoteObjectDecoder initWithInterface:rootObjectDictionary:WebKit::]):
        * Shared/API/Cocoa/WKRemoteObjectInterface.h:
        * Shared/API/Cocoa/WKRemoteObjectInterface.mm:
        (isContainerClass): Deleted.
        (propertyListClasses): Deleted.
        (allowedArgumentClassesForMethod): Deleted.
        (initializeAllowedArgumentClasses): Deleted.
        (-[WKRemoteObjectInterface initWithProtocol:identifier:]): Deleted.
        (+[WKRemoteObjectInterface remoteObjectInterfaceWithProtocol:]): Deleted.
        (-[WKRemoteObjectInterface description]): Deleted.
        (classesForSelectorArgument): Deleted.
        (-[WKRemoteObjectInterface classesForSelector:argumentIndex:]): Deleted.
        (-[WKRemoteObjectInterface setClasses:forSelector:argumentIndex:]): Deleted.
        (methodArgumentTypeEncodingForSelector): Deleted.
        (-[WKRemoteObjectInterface _methodSignatureForSelector:]): Deleted.
        (-[WKRemoteObjectInterface _allowedArgumentClassesForSelector:]): Deleted.
        * Shared/API/Cocoa/WKRemoteObjectRegistry.h:
        * Shared/API/Cocoa/WKRemoteObjectRegistry.mm:
        (-[WKRemoteObjectRegistry registerExportedObject:interface:]): Deleted.
        (-[WKRemoteObjectRegistry unregisterExportedObject:interface:]): Deleted.
        (-[WKRemoteObjectRegistry remoteObjectProxyWithInterface:]): Deleted.
        (-[WKRemoteObjectRegistry _initWithMessageSender:IPC::]): Deleted.
        (-[WKRemoteObjectRegistry _invalidate]): Deleted.
        (-[WKRemoteObjectRegistry _sendInvocation:interface:]): Deleted.
        (-[WKRemoteObjectRegistry WebKit::]): Deleted.
        (-[WKRemoteObjectRegistry _invokeMethod:]): Deleted.
        (-[WKRemoteObjectRegistry _invokeMessageWithInterfaceIdentifier:encodedInvocation:]): Deleted.
        * Shared/API/Cocoa/_WKRemoteObjectInterface.h: Copied from Source/WebKit2/Shared/API/Cocoa/WKRemoteObjectInterface.h.
        * Shared/API/Cocoa/_WKRemoteObjectInterface.mm: Copied from Source/WebKit2/Shared/API/Cocoa/WKRemoteObjectInterface.mm.
        (isContainerClass):
        (propertyListClasses):
        (allowedArgumentClassesForMethod):
        (initializeAllowedArgumentClasses):
        (-[_WKRemoteObjectInterface initWithProtocol:identifier:]):
        (+[_WKRemoteObjectInterface remoteObjectInterfaceWithProtocol:]):
        (-[_WKRemoteObjectInterface description]):
        (classesForSelectorArgument):
        (-[_WKRemoteObjectInterface classesForSelector:argumentIndex:]):
        (-[_WKRemoteObjectInterface setClasses:forSelector:argumentIndex:]):
        (methodArgumentTypeEncodingForSelector):
        (-[_WKRemoteObjectInterface _methodSignatureForSelector:]):
        (-[_WKRemoteObjectInterface _allowedArgumentClassesForSelector:]):
        * Shared/API/Cocoa/_WKRemoteObjectInterfaceInternal.h: Renamed from Source/WebKit2/Shared/API/Cocoa/WKRemoteObjectInterfaceInternal.h.
        * Shared/API/Cocoa/_WKRemoteObjectRegistry.h: Copied from Source/WebKit2/Shared/API/Cocoa/WKRemoteObjectRegistry.h.
        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm: Copied from Source/WebKit2/Shared/API/Cocoa/WKRemoteObjectRegistry.mm.
        (-[_WKRemoteObjectRegistry registerExportedObject:interface:]):
        (-[_WKRemoteObjectRegistry unregisterExportedObject:interface:]):
        (-[_WKRemoteObjectRegistry remoteObjectProxyWithInterface:]):
        (-[_WKRemoteObjectRegistry _initWithMessageSender:IPC::]):
        (-[_WKRemoteObjectRegistry _invalidate]):
        (-[_WKRemoteObjectRegistry _sendInvocation:interface:]):
        (-[_WKRemoteObjectRegistry WebKit::]):
        (-[_WKRemoteObjectRegistry _invokeMethod:]):
        (-[_WKRemoteObjectRegistry _invokeMessageWithInterfaceIdentifier:encodedInvocation:]):
        * Shared/API/Cocoa/_WKRemoteObjectRegistryInternal.h: Renamed from Source/WebKit2/Shared/API/Cocoa/WKRemoteObjectRegistryInternal.h.
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController _remoteObjectRegistry]):
        (-[WKBrowsingContextController remoteObjectRegistry]): Deleted.
        * UIProcess/API/Cocoa/WKBrowsingContextControllerPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _remoteObjectRegistry]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInBrowserContextControllerToBeRemoved.mm: Copied from Source/WebKit2/Shared/API/Cocoa/WKRemoteObject.h.
        (-[WKWebProcessPlugInBrowserContextController remoteObjectRegistry]):
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _remoteObjectRegistry]):
        (-[WKWebProcessPlugInBrowserContextController remoteObjectRegistry]): Deleted.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerPrivate.h:

2014-03-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r166360.
        https://bugs.webkit.org/show_bug.cgi?id=130869

        Seems to have broken PLT (Requested by ap on #webkit).

        Reverted changeset:

        "Connection::dispatchOneMessage() can be re-entered while
        handling Cmd-key menu"
        https://bugs.webkit.org/show_bug.cgi?id=130767
        http://trac.webkit.org/changeset/166360

2014-03-27  Sam Weinig  <sam@webkit.org>

        Support dynamic layer hosting context changes
        <rdar://problem/16278019>
        https://bugs.webkit.org/show_bug.cgi?id=130863

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView addWindowObserversForWindow:]):
        (-[WKView removeWindowObservers]):
        (-[WKView _windowDidChangeLayerHosting:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::layerHostingModeDidChange):
        * UIProcess/WebPageProxy.h:

2014-03-27  Simon Fraser  <simon.fraser@apple.com>

        Don't leak the WKBrowsingContextController
        https://bugs.webkit.org/show_bug.cgi?id=130815

        Reviewed by Tim Horton.
        
        Use adoptNS to avoid leaking the WKBrowsingContextController.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView browsingContextController]):

2014-03-27  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Give WebProcess a proxy application entitlement
        https://bugs.webkit.org/show_bug.cgi?id=130806

        Reviewed by Timothy Hatcher.

        * Configurations/WebContent-iOS.entitlements:

2014-03-27  Anders Carlsson  <andersca@apple.com>

        Add reload and reloadFromOrigin as API
        https://bugs.webkit.org/show_bug.cgi?id=130858

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView reload]):
        (-[WKWebView reloadFromOrigin]):
        (-[WKWebView validateUserInterfaceItem:]):
        (-[WKWebView reload:]):
        (-[WKWebView reloadFromOrigin:]):

2014-03-27  Anders Carlsson  <andersca@apple.com>

        Rename WKFrameHandle to _WKFrameHandle
        https://bugs.webkit.org/show_bug.cgi?id=130847

        Reviewed by Tim Horton.

        * Shared/API/Cocoa/_WKFrameHandle.h: Renamed from Source/WebKit2/Shared/API/Cocoa/WKFrameHandle.h.
        * Shared/API/Cocoa/_WKFrameHandle.mm: Renamed from Source/WebKit2/Shared/API/Cocoa/WKFrameHandle.mm.
        (-[_WKFrameHandle dealloc]):
        (-[_WKFrameHandle isEqual:]):
        (-[_WKFrameHandle hash]):
        (-[_WKFrameHandle _frameID]):
        (-[_WKFrameHandle copyWithZone:]):
        (+[_WKFrameHandle supportsSecureCoding]):
        (-[_WKFrameHandle initWithCoder:]):
        (-[_WKFrameHandle encodeWithCoder:]):
        (-[_WKFrameHandle API::]):
        * Shared/API/Cocoa/_WKFrameHandleInternal.h: Renamed from Source/WebKit2/Shared/API/Cocoa/WKFrameHandleInternal.h.
        (WebKit::wrapper):
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (+[WKWebProcessPlugInFrame lookUpFrameFromHandle:]):
        (-[WKWebProcessPlugInFrame handle]):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFramePrivate.h:

2014-03-27  Alexey Proskuryakov  <ap@apple.com>

        Connection::dispatchOneMessage() can be re-entered while handling Cmd-key menu
        equivalents, ASSERT(!_data->_keyDownEventBeingResent)
        https://bugs.webkit.org/show_bug.cgi?id=130767
        <rdar://problem/16307487>

        Reviewed by Darin Adler.

        * Shared/WebKit2Initialize.cpp: (WebKit::InitializeWebKit2): Added NSModalPanelRunLoopMode
        to RunLoop event source and timer modes.

2014-03-27  Jae Hyun Park  <jaepark@webkit.org>

        Remove LayerTreeContextCairo.cpp
        https://bugs.webkit.org/show_bug.cgi?id=130807

        Reviewed by Martin Robinson.

        * Shared/cairo/LayerTreeContextCairo.cpp: Removed.

2014-03-27  Maciej Florek  <m.florek@samsung.com>

        [EFL][WK2] Add tests of the set process model API
        https://bugs.webkit.org/show_bug.cgi?id=130830

        Reviewed by Gyuyoung Kim.

        Implement unit tests to check, if process model API works
        properly. When process model is set to EWK_PROCESS_MODEL_SHARED_SECONDARY,
        there should be only one WebProcess. In case of EWK_PROCESS_MODEL_MULTIPLE_SECONDARY
        setting, each WebView should have own process, as well as the network process
        should exist.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::EWK2UnitTestBase):
        (EWK2UnitTest::EWK2UnitTestBase::SetUp):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (EWK2ContextTestMultipleProcesses::EWK2ContextTestMultipleProcesses):
        (TEST_F):

2014-03-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r166296 and r166331.
        https://bugs.webkit.org/show_bug.cgi?id=130822

        caused some crashes and frequent assertion failures, and the
        fix is going to take a little while (Requested by thorton on
        #webkit).

        Reverted changesets:

        "[iOS WebKit2] Flush all surfaces after painting into all of
        them, instead of after painting into each one"
        https://bugs.webkit.org/show_bug.cgi?id=130768
        http://trac.webkit.org/changeset/166296

        "Assertion failure in RemoteLayerBackingStore::flush"
        https://bugs.webkit.org/show_bug.cgi?id=130810
        http://trac.webkit.org/changeset/166331

2014-03-26  Tim Horton  <timothy_horton@apple.com>

        Blind speculative iOS build fix.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::viewportConfigurationChanged):

2014-03-26  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] <rdar://problem/16265272> REGRESSION (WebKit2): Some pages appear blank until you scroll
        https://bugs.webkit.org/show_bug.cgi?id=130819

        Reviewed by Tim Horton.

        When loading a new page, we never define the unobscured rect and exposed rect on the new frame.
        As a result, there is nothing to render.

        It uses to work thanks to dumb luck and a bug in Safari updating the visibleContentRects from
        the UIProcess. Now that the bug is gone, "dumb luck" is not reliable enough to get the content rects :)

        What this patch does is save if we have ever received new rects from the UI. If we have not, create them
        based on the minimum layout size. This works because we know Safari shows the minimum layout size by default
        and will tell us if it changes the obscured rects.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::viewportConfigurationChanged):
        (WebKit::WebPage::updateVisibleContentRects):

2014-03-26  Anders Carlsson  <andersca@apple.com>

        Add a _WKScriptWorld class
        https://bugs.webkit.org/show_bug.cgi?id=130817

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/_WKScriptWorld.h: Added.
        * UIProcess/API/Cocoa/_WKScriptWorld.mm: Added.
        (generateWorldID):
        (+[_WKScriptWorld defaultWorld]):
        (-[_WKScriptWorld init]):
        (-[_WKScriptWorld _initWithWorldID:]):
        * WebKit2.xcodeproj/project.pbxproj:

2014-03-26  Anders Carlsson  <andersca@apple.com>

        Rename a delegate method to -webView:didFinishNavigation:
        https://bugs.webkit.org/show_bug.cgi?id=130814

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::NavigationState::LoaderClient::didFinishLoadForFrame):

2014-03-26  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] Crashes on swipe
        <rdar://problem/16440867>

        Reviewed by Benjamin Poulain.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        Get the IOSurfaceRef from the WebCore::IOSurface.

2014-03-26  Simon Fraser  <simon.fraser@apple.com>

        Fix the build: include UIKit headers inside the iOS #ifdef.

        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:

2014-03-26  Simon Fraser  <simon.fraser@apple.com>

        Hook up -webkit-overflow-scrolling:touch for iOS WK2
        https://bugs.webkit.org/show_bug.cgi?id=130809

        Reviewed by Tim Horton.

        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateAfterChildren):
        Set the content size of the UIScrollVIew based on the geometry.
        * UIProcess/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::createLayer): Make a UIScrollView if the
        layer properties tell us that we have the scrolling behavior.
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView initWithFrame:context:WebKit::configuration:WebKit::webView:]):
        We need to allow user interaction in the _rootContentView so that events get to
        nested UIScrollViews (this could be optimized in future).
        * UIProcess/mac/RemoteLayerTreeHost.h:
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree):
        (WebKit::RemoteLayerTreeHost::createLayer): Need to pass RemoteLayerTreeTransaction::LayerProperties
        in so we can get at the custom behavior.

2014-03-26  Anders Carlsson  <andersca@apple.com>

        Add -[WKWebView stopLoading]
        https://bugs.webkit.org/show_bug.cgi?id=130812

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView stopLoading]):

2014-03-26  Tim Horton  <timothy_horton@apple.com>

        Assertion failure in RemoteLayerBackingStore::flush
        https://bugs.webkit.org/show_bug.cgi?id=130810
        <rdar://problem/16439276>

        Reviewed by Simon Fraser.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (RemoteLayerBackingStore::flush):
        We don't always have backing store to flush, if platformCALayerDrawsContent() is false.
        We also can't assert that we have a back surface, because the very first paint will not.

2014-03-26  Andy Estes  <aestes@apple.com>

        [Cocoa] Expose DownloadClient::didFail() and DownloadClient::didCancel()
        https://bugs.webkit.org/show_bug.cgi?id=130805

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/_WKDownloadDelegate.h:
        * UIProcess/Cocoa/DownloadClient.h:
        * UIProcess/Cocoa/DownloadClient.mm:
        (WebKit::DownloadClient::DownloadClient):
        (WebKit::DownloadClient::didFail):
        (WebKit::DownloadClient::didCancel):

2014-03-26  Cody Krieger  <cjk@apple.com>

        -[WKWebProcessPlugInNodeHandle HTMLInputElementIsUserEdited] and -HTMLTextAreaElementIsUserEdited do not return the correct values.

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

        Reviewed by Dan Bernstein.

        The existing implementations of these methods are mis-cased
        ("HTMLInputELementIsUserEdited" and "HTMLTextAreaELementIsUserEdited" —
        note the "EL" in both cases). This results in us getting
        auto-synthesized getters for the HTMLInputElementIsUserEdited and
        HTMLTextAreaElementIsUserEdited properties, which will return NO
        unconditionally.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:
        Fix the capitalization of -HTMLInputElementIsUserEdited and
        -HTMLTextAreaElementIsUserEdited.

2014-03-26  Andy Estes  <aestes@apple.com>

        [Cocoa] Expose DownloadProxy::cancel()
        https://bugs.webkit.org/show_bug.cgi?id=130799

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/_WKDownload.h:
        * UIProcess/API/Cocoa/_WKDownload.mm:
        (-[_WKDownload cancel]):

2014-03-26  Timothy Hatcher  <timothy@apple.com>

        Propagate the hiddenFromInspector flag on ResourceRequest in
        places when a new request a made or passed between processes.

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

        Reviewed by Joseph Pecoraro.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::continueWillSendRequest): Use updateFromDelegatePreservingOldProperties.
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ResourceRequest>::encode): Added hiddenFromInspector support.
        (IPC::ArgumentCoder<ResourceRequest>::decode): Ditto.
        * WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.cpp:
        (WebKit::InjectedBundlePageResourceLoadClient::willSendRequestForFrame): Ditto.

2014-03-26  Andy Estes  <aestes@apple.com>

        [Cocoa] Expose DownloadProxy::request()
        https://bugs.webkit.org/show_bug.cgi?id=130796

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/_WKDownload.h:
        * UIProcess/API/Cocoa/_WKDownload.mm:
        (-[_WKDownload request]):

2014-03-26  Anders Carlsson  <andersca@apple.com>

        Pass a real FrameLoadRequest to Chrome::createWindow
        https://bugs.webkit.org/show_bug.cgi?id=130795

        Reviewed by Dan Bernstein.

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

2014-03-26  Jeremy Jones  <jeremyj@apple.com>

        Implement hasLiveStreamingContent property in WebAVPlayerController
        https://bugs.webkit.org/show_bug.cgi?id=128684

        Reviewed by Simon Fraser.

        Plumb through the seekable ranges to the fullscreen interface.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        Add declaration for setSeekableRangesVector()

        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in:
        Add interface SetSeekableRangesVector()

        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::setSeekableRangesVector):
        Add setSeekableRangesVector that translates the vector into a TimeRanges and calls setSeekableRanges()

        * WebProcess/ios/WebVideoFullscreenManager.h:
        Add setSeekableRanges()

        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::setSeekableRanges):
        setSeekableRanges() converts TimeRanges to Vector and calls SetSeekableRangesVector()

2014-03-26  Simon Fraser  <simon.fraser@apple.com>

        Add a custom behavior flag to GraphicsLayer, piped down to PlatformCALayer, for scrolling layers
        https://bugs.webkit.org/show_bug.cgi?id=130778

        Reviewed by Tim Horton.

        Make it possible to put a "custom behavior" flag on a layer so that,
        with UI-side compositing, we know to create a specific type of
        layer or view for that GraphicsLayer.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        (WebKit::dumpChangedLayers):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (PlatformCALayerRemote::customBehavior):
        (PlatformCALayerRemote::updateCustomBehavior):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:

2014-03-26  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Remove shape-inside support
        https://bugs.webkit.org/show_bug.cgi?id=130698

        Reviewed by David Hyatt.

        * Configurations/FeatureDefines.xcconfig:

2014-03-26  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] Flush all surfaces after painting into all of them, instead of after painting into each one
        https://bugs.webkit.org/show_bug.cgi?id=130768
        <rdar://problem/16421471>

        Reviewed by Simon Fraser.

        * Shared/mac/RemoteLayerBackingStore.h:
        Add flush(), which synchronously flushes painting operations on the underlying backing store.
        Factor clearBackingStore() out of ensureBackingStore/display, which releases our reference to underlying backing store.
        Add two members for storing the back surface and front buffer context until flush() is called.
                - We need to keep the back surface alive because the CGImageRef created from it is referenced by
                the front surface's drawing queue, and won't be freed until said queue is flushed. If we release
                the back surface (and its associated CGContextRef) *before* the CGImageRef is freed, we will
                do an expensive readback of the surface.
                - When not using accelerated drawing, we need to keep the front buffer's CGContextRef around
                until the flush occurs so that we can avoid re-creating it in order to perform the flush. This
                happens automatically in the accelerated drawing case via WebCore::IOSurface.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (RemoteLayerBackingStore::ensureBackingStore):
        (RemoteLayerBackingStore::clearBackingStore):
        (RemoteLayerBackingStore::display):
        Factor clearBackingStore() out of ensureBackingStore() and display().
        Update a comment about the above performance gotcha.
        Store the current back surface/front buffer context.

        (RemoteLayerBackingStore::drawInContext):
        Don't flush the context immediately after painting.

        (RemoteLayerBackingStore::applyBackingStoreToLayer):
        Move things around to reduce duplicated code.

        (RemoteLayerBackingStore::flush):
        Flush the current front surface/buffer's context.
        Clear the new pending-flush members.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::flushBackingStoreChangesInTransaction):
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        Crawl through all of the valid changed backing stores in the transaction and flush them.
        Remove a completely useless assertion.

2014-03-25  Simon Fraser  <simon.fraser@apple.com>

        Add a new type of scrolling tree node for overflow scrolling
        https://bugs.webkit.org/show_bug.cgi?id=130763

        Reviewed by Tim Horton.

        Prepare for overflow scrolling via the scrolling tree by adding
        a new scrolling node type for overflow:scroll nodes. Mostly
        this is a new ScrollingNodeType that gets mapped to the same
        scrolling state nodes and scrolling nodes, but iOS creates
        state and scrolling nodes specific to overflow:scroll.
        
        Change the type checking on nodes to use virtual functions instead
        of just checking the node type, to allow the macros to work with
        the new scrolling node type.

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (WebKit::encodeNodeAndDescendants):
        (WebKit::RemoteScrollingCoordinatorTransaction::decode):
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        * UIProcess/Scrolling/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::createNode):
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h: Copied from Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.h.
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm: Copied from Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.h.
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::create):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::ScrollingTreeOverflowScrollingNodeIOS):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::~ScrollingTreeOverflowScrollingNodeIOS):
        * UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        * WebKit2.xcodeproj/project.pbxproj:

2014-03-26  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Removing the remaining Automake cruft.

        * GNUmakefile.list.am: Removed.

2014-03-25  Pratik Solanki  <psolanki@apple.com>

        Remove PLATFORM(IOS) from NetworkProcessMac.mm
        https://bugs.webkit.org/show_bug.cgi?id=130751

        Reviewed by Alexey Proskuryakov.

        Code in NetworkProcessMac.mm is guarded by PLATFORM(MAC) and so is not compiled on iOS.
        Having PLATFORM(IOS) code in this file is unnecessary and confusing.

        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::initializeProcessName):
        (WebKit::overrideSystemProxies):
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):

2014-03-25  Anders Carlsson  <andersca@apple.com>

        Add a UI delegate callback for handling window.open
        https://bugs.webkit.org/show_bug.cgi?id=130757

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/Cocoa/UIClient.h:
        * UIProcess/Cocoa/UIClient.mm:
        (WebKit::UIClient::setDelegate):
        (WebKit::UIClient::createNewPage):

2014-03-25  Anders Carlsson  <andersca@apple.com>

        Move stopLoading: back for now.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView stopLoading:]):

2014-03-25  Anders Carlsson  <andersca@apple.com>

        Change toolbarVisibility back to toolbarsVisibility
        https://bugs.webkit.org/show_bug.cgi?id=130749

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWindowFeatures.h:
        * UIProcess/API/Cocoa/WKWindowFeatures.mm:
        (-[WKWindowFeatures _initWithWindowFeatures:WebCore::]):

2014-03-25  Anders Carlsson  <andersca@apple.com>

        Pass the source frame to the CreateNewPage message
        https://bugs.webkit.org/show_bug.cgi?id=130752

        Reviewed by Tim Horton.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::createNewPage):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::createNewPage):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createWindow):

2014-03-25  Anders Carlsson  <andersca@apple.com>

        Add a WebFrame::fromCoreFrame static member function and use it where possible
        https://bugs.webkit.org/show_bug.cgi?id=130744

        Reviewed by Tim Horton.

        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        (WebKit::GeolocationPermissionRequestManager::startRequestForGeolocation):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::documentFrame):
        (WebKit::InjectedBundleNodeHandle::htmlFrameElementContentFrame):
        (WebKit::InjectedBundleNodeHandle::htmlIFrameElementContentFrame):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/InjectedBundle/InjectedBundleDOMWindowExtension.cpp:
        (WebKit::InjectedBundleDOMWindowExtension::frame):
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
        (WebKit::InjectedBundleHitTestResult::frame):
        (WebKit::InjectedBundleHitTestResult::targetFrame):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::webPage):
        (WebKit::PluginView::performFrameLoadURLRequest):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::focusedElementChanged):
        (WebKit::WebChromeClient::focusedFrameChanged):
        (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel):
        (WebKit::WebChromeClient::runJavaScriptAlert):
        (WebKit::WebChromeClient::runJavaScriptConfirm):
        (WebKit::WebChromeClient::runJavaScriptPrompt):
        (WebKit::WebChromeClient::print):
        (WebKit::WebChromeClient::exceededDatabaseQuota):
        (WebKit::WebChromeClient::runOpenPanel):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::textFieldDidBeginEditing):
        (WebKit::WebEditorClient::textFieldDidEndEditing):
        (WebKit::WebEditorClient::textDidChangeInTextField):
        (WebKit::WebEditorClient::textDidChangeInTextArea):
        (WebKit::WebEditorClient::doTextFieldCommandFromEvent):
        (WebKit::WebEditorClient::textWillBeDeletedInTextField):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebKit::WebFrameLoaderClient::dispatchWillSendSubmitEvent):
        (WebKit::WebFrameLoaderClient::dispatchWillSubmitForm):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::fromCoreFrame):
        (WebKit::WebFrame::contentsAsString):
        (WebKit::WebFrame::parentFrame):
        (WebKit::WebFrame::childFrames):
        (WebKit::WebFrame::frameForContext):
        (WebKit::WebFrame::webArchiveData):
        * WebProcess/WebPage/WebFrame.h:

2014-03-25  Jeffrey Pfau  <jpfau@apple.com>

        [WK2] Schemes registered as cache partitioned are not properly registered in new web processes
        https://bugs.webkit.org/show_bug.cgi?id=130739

        Reviewed by Anders Carlsson.

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

2014-03-25  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Inspector View Indication Support
        https://bugs.webkit.org/show_bug.cgi?id=130709

        Reviewed by Simon Fraser.

        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKInspectorIndicationView initWithFrame:]):
        (-[WKContentView isShowingInspectorIndication]):
        (-[WKContentView setShowingInspectorIndication:]):
        (-[WKContentView _didCommitLayerTree:WebKit::]):
        When indicating include a simple tinted UIView over the content.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _showInspectorIndication]):
        (-[WKWebView _hideInspectorIndication]):
        Have the content view show or hide an indication.

        * UIProcess/PageClient.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::showInspectorIndication):
        (WebKit::PageClientImpl::hideInspectorIndication):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::showInspectorIndication):
        (WebKit::WebPageProxy::hideInspectorIndication):
        Pass WebProcess indication message up to the WKWebView.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::indicate):
        (WebKit::WebInspectorClient::hideIndication):
        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::indicate):
        (WebKit::WebPage::hideIndication):
        Pass WebCore / remote inspector indication message up to UIProcess.

2014-03-25  Anders Carlsson  <andersca@apple.com>

        Add more properties to WKWindowFeatures
        https://bugs.webkit.org/show_bug.cgi?id=130738

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWindowFeatures.h:
        * UIProcess/API/Cocoa/WKWindowFeatures.mm:
        (-[WKWindowFeatures _initWithWindowFeatures:WebCore::]):
        (-[WKWindowFeatures menuBarVisibility]):
        (-[WKWindowFeatures statusBarVisibility]):
        (-[WKWindowFeatures toolbarsVisibility]):
        (-[WKWindowFeatures allowsResizing]):

2014-03-25  Anders Carlsson  <andersca@apple.com>

        Fix iOS build.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        Make WKIBActions OS X only for now.

2014-03-25  Anders Carlsson  <andersca@apple.com>

        Begin stubbing out a WKWindowFeatures class
        https://bugs.webkit.org/show_bug.cgi?id=130733

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWindowFeatures.h: Added.
        * UIProcess/API/Cocoa/WKWindowFeatures.mm: Added.
        (-[WKWindowFeatures _initWithWindowFeatures:WebCore::]):
        (-[WKWindowFeatures x]):
        (-[WKWindowFeatures y]):
        (-[WKWindowFeatures width]):
        (-[WKWindowFeatures height]):
        * UIProcess/API/Cocoa/WKWindowFeaturesInternal.h: Added.
        * WebKit2.xcodeproj/project.pbxproj:

2014-03-25  Anders Carlsson  <andersca@apple.com>

        Add goBack: and goForward: IBActions and move stopLoading: to a new WKIBActions category on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=130732

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView goBack]):
        (-[WKWebView goForward]):
        (-[WKWebView validateUserInterfaceItem:]):
        (-[WKWebView goBack:]):
        (-[WKWebView goForward:]):
        (-[WKWebView stopLoading:]):

2014-03-25  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Remove the autotools build
        https://bugs.webkit.org/show_bug.cgi?id=130717

        Reviewed by Anders Carlsson.

        * GNUmakefile.am: Removed.
        * WebKit2Prefix.h: Removed references to the autotools configure file.
        * config.h: Ditto.

2014-03-25  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL][WK2] Add NETWORK_PROCESS build option
        https://bugs.webkit.org/show_bug.cgi?id=130131

        Reviewed by Gyuyoung Kim.

        * PlatformEfl.cmake: Add file needed to build with NETWORK_PROCESS enabled.

2014-03-24 Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL][WK2] Add an API to set process model
        https://bugs.webkit.org/show_bug.cgi?id=130133

        Reviewed by Gyuyoung Kim.

        Implement an API to set and get process model in ewk_context.
        By default process model enum value is set to EWK_PROCESS_MODEL_SHARED_SECONDARY
        which keeps current behaviour. Setting EWK_PROCESS_MODEL_MULTIPLE_SECONDARY
        will make each web view use separate web process, also enables network process.

        * UIProcess/API/efl/ewk_context.cpp:
        (toWKProcessModel):
        (EwkContext::setProcessModel):
        (toEwkProcessModel):
        (EwkContext::processModel):
        (ewk_context_process_model_set):
        (ewk_context_process_model_get):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_private.h:
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (TEST_F):

2014-03-24  Chris Fleizach  <cfleizach@apple.com>

        AX: hit-testing doesn't always work correctly with WK2
        https://bugs.webkit.org/show_bug.cgi?id=130706

        Reviewed by Simon Fraser.

        Accessibility code was trying to do screenToRootView itself, and in 
        some cases with embedded WK2 views that did not work.

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

2014-03-24  Benjamin Poulain  <bpoulain@apple.com>

        [WK2] SpinLock are not initialized by default, ViewUpdateDispatcher is missing an initializer
        https://bugs.webkit.org/show_bug.cgi?id=130705

        Reviewed by Simon Fraser.

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

2014-03-24  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] Dictation support.
        https://bugs.webkit.org/show_bug.cgi?id=130622
        <rdar://problem/15337316>

        Reviewed by Benjamin Poulain.

        Adding support for dictation on iOS. There are two main types of interactions
        with the dictation system:
        - initial request for context, which consists in retrieving the selected text
        and 5 words before the selection and 5 words after, if available.
        - insertion of recognized chunks of text, providing the text
        to replace.
    
        * UIProcess/AutoCorrectionCallback.h:
        (WebKit::DictationContextCallback::create):
        (WebKit::DictationContextCallback::~DictationContextCallback):
        (WebKit::DictationContextCallback::performCallbackWithReturnValue):
        (WebKit::DictationContextCallback::invalidate):
        (WebKit::DictationContextCallback::DictationContextCallback):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView replaceDictatedText:withText:]):
        (-[WKContentView requestDictationContext:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::dictationContextCallback):
        (WebKit::WebPageProxy::replaceDictatedText):
        (WebKit::WebPageProxy::requestDictationContext):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::requestDictationContext):
        (WebKit::WebPage::replaceDictatedText):

2014-03-24  Andy Estes  <aestes@apple.com>

        Yet another iOS build fix, for the 32-bit build this time.

        * Shared/Downloads/ios/DownloadIOS.mm:
        (WebKit::setUpDownloadClient):

2014-03-24  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r165872): Double-applying device scale to snapshots
        https://bugs.webkit.org/show_bug.cgi?id=130697
        <rdar://problem/16396629>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scaledSnapshotWithOptions):
        Drive-by, make scaledSnapshotWithOptions respect SnapshotOptionsExcludeDeviceScaleFactor.

        (WebKit::WebPage::snapshotAtSize):
        Divide the device scale out of the scale factor

        * WebProcess/WebPage/WebPage.h:
        Rename the scale argument to scaledSnapshotWithOptions to clarify
        that it is an additional scale on top of the device scale.

2014-03-24  Brent Fulgham  <bfulgham@apple.com>

        Activate WebVTT Tests Once Merging is Complete
        https://bugs.webkit.org/show_bug.cgi?id=130420

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig: Turn on ENABLE(WEBVTT_REGIONS)

2014-03-24  Andy Estes  <aestes@apple.com>

        Fix the iOS build.

        * Shared/Downloads/ios/DownloadIOS.mm:
        (WebKit::setUpDownloadClient):
        * UIProcess/Cocoa/DownloadClient.mm:

2014-03-24  Mark Rowe  <mrowe@apple.com>

        Build fix after r166186.

        * UIProcess/Cocoa/DownloadClient.mm:

2014-03-24  Benjamin Poulain  <bpoulain@apple.com>

        [WK2] Make updates on ViewUpdateDispatcher less heavy
        https://bugs.webkit.org/show_bug.cgi?id=130626

        Reviewed by Darin Adler.

        * WebProcess/WebPage/ViewUpdateDispatcher.cpp:
        (WebKit::ViewUpdateDispatcher::visibleContentRectUpdate):
        (WebKit::ViewUpdateDispatcher::dispatchVisibleContentRectUpdate):
        * WebProcess/WebPage/ViewUpdateDispatcher.h:

2014-03-24  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Micro-optimize view state updates on the UIProcess side
        https://bugs.webkit.org/show_bug.cgi?id=130631

        Reviewed by Darin Adler.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (contentZoomScale):
        [UIScrollView zoomScale] is not fast enough for -[WKWebView _updateVisibleContentRects]. Since we know what the zoom view is,
        make a fast version hardcoding that.

        (-[WKWebView _updateScrollViewBackground]):
        (-[WKWebView _zoomToPoint:WebCore::atScale:]):
        (-[WKWebView _scrollToRect:WebCore::origin:WebCore::minimumScrollDistance:]):
        (-[WKWebView _zoomToRect:WebCore::withOrigin:WebCore::fitEntireRect:minimumScale:maximumScale:minimumScrollDistance:]):
        (-[WKWebView _updateVisibleContentRects]):
        * UIProcess/ios/WKContentView.mm:
        (fixedPositionRectFromExposedRect):
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:scale:inStableState:]):

2014-03-24  Dean Jackson  <dino@apple.com>

        Remove WebGL asset entitlement
        https://bugs.webkit.org/show_bug.cgi?id=130685

        Reviewed by Simon Fraser.

        No longer necessary on iOS.

        * Configurations/WebContent-iOS.entitlements:

2014-03-24  Andy Estes  <aestes@apple.com>

        [iOS] Download support by CFURLDownloadRef under USE(CFNETWORK).
        https://bugs.webkit.org/show_bug.cgi?id=129322

        Reviewed by Anders Carlsson.

        Based on an original patch by Yongjun Zhang  <yongjun_zhang@apple.com>.

        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * Shared/Downloads/ios/DownloadIOS.mm:
        (WebKit::dispatchOnMainThread):
        (WebKit::toDownload):
        (WebKit::setUpDownloadClient):
        (WebKit::Download::startWithHandle):
        * UIProcess/API/APIDownloadClient.h:
        (API::DownloadClient::~DownloadClient):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetDownloadClient):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _downloadDelegate]):
        (-[WKProcessPool _setDownloadDelegate:]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/_WKDownload.h: Added.
        * UIProcess/API/Cocoa/_WKDownload.mm: Added.
        (WebKit::wrapper):
        (WebKit::createAPIDownloadClient):
        (-[_WKDownload dealloc]):
        (-[_WKDownload API::]):
        * UIProcess/API/Cocoa/_WKDownloadDelegate.h: Added.
        * UIProcess/API/Cocoa/_WKDownloadInternal.h: Added.
        * UIProcess/Cocoa/DownloadClient.h: Added.
        * UIProcess/Cocoa/DownloadClient.mm: Added.
        * WebKit2.xcodeproj/project.pbxproj:

2014-03-24  Dániel Bátyai  <dbatyai.u-szeged@partner.samsung.com>

        [EFL][WK2] Buildfix after r166159.

        Reviewed by Csaba Osztrogonác.

        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_file_access_from_file_urls_allowed_set):
        (ewk_settings_file_access_from_file_urls_allowed_get):

2014-03-24  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Use C API inside ewk_settings
        https://bugs.webkit.org/show_bug.cgi?id=107820

        Reviewed by Gyuyoung Kim.

        Use C API inside ewk_settings instead of accessing directly
        internal C++ classes, to avoid violating API layering.

        Original-author: Christophe Dumez <ch.dumez@sisa.samsung.com>

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_fullscreen_enabled_set):
        (ewk_settings_fullscreen_enabled_get):
        (ewk_settings_javascript_enabled_set):
        (ewk_settings_javascript_enabled_get):
        (ewk_settings_loads_images_automatically_set):
        (ewk_settings_loads_images_automatically_get):
        (ewk_settings_developer_extras_enabled_set):
        (ewk_settings_developer_extras_enabled_get):
        (ewk_settings_file_access_from_file_urls_allowed_set):
        (ewk_settings_file_access_from_file_urls_allowed_get):
        (ewk_settings_frame_flattening_enabled_set):
        (ewk_settings_frame_flattening_enabled_get):
        (ewk_settings_dns_prefetching_enabled_set):
        (ewk_settings_dns_prefetching_enabled_get):
        (ewk_settings_encoding_detector_enabled_set):
        (ewk_settings_encoding_detector_enabled_get):
        (ewk_settings_preferred_minimum_contents_width_set):
        (ewk_settings_preferred_minimum_contents_width_get):
        (ewk_settings_offline_web_application_cache_enabled_set):
        (ewk_settings_offline_web_application_cache_enabled_get):
        (ewk_settings_scripts_can_open_windows_set):
        (ewk_settings_scripts_can_open_windows_get):
        (ewk_settings_local_storage_enabled_set):
        (ewk_settings_local_storage_enabled_get):
        (ewk_settings_plugins_enabled_set):
        (ewk_settings_plugins_enabled_get):
        (ewk_settings_default_font_size_set):
        (ewk_settings_default_font_size_get):
        (ewk_settings_private_browsing_enabled_set):
        (ewk_settings_private_browsing_enabled_get):
        (ewk_settings_text_autosizing_enabled_set):
        (ewk_settings_text_autosizing_enabled_get):
        (ewk_settings_spatial_navigation_enabled_set):
        (ewk_settings_spatial_navigation_enabled_get):
        (EwkSettings::setDefaultTextEncodingName):
        * UIProcess/API/efl/ewk_settings_private.h:
        (EwkSettings::EwkSettings):
        (EwkSettings::preferences):

2014-03-24  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][WK2] Guard NetscapePluginModule methods used in PluginInfoCache that are specific to X11 architecture
        https://bugs.webkit.org/show_bug.cgi?id=130663

        Reviewed by Carlos Garcia Campos.

        The two used methods are specific to the X11 plugin architecture and are not declared when building for a
        Wayland-only configuration. Guarding them prevents build failures, but does not ensure proper functionality
        which isn't a problem anyway since there's no support yet for Netscape plugins on Wayland.

        * UIProcess/Plugins/gtk/PluginInfoCache.cpp:
        (WebKit::PluginInfoCache::getPluginInfo): Guard NetscapePluginModule::parseMIMEDescription with PLUGIN_ARCHITECTURE(X11).
        (WebKit::PluginInfoCache::updatePluginInfo): Ditto for NetscapePluginModule::buildMIMEDescription.

2014-03-24  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Convert some more OwnPtr/PassOwnPtr to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=130662

        Reviewed by Gyuyoung Kim.

        Replace uses of PassOwnPtr/OwnPtr with std::unique_ptr in remained WebKit2/Efl specific code.

        * UIProcess/API/efl/EwkView.h:
        * UIProcess/API/efl/ewk_cookie_manager.cpp:
        * UIProcess/API/efl/ewk_database_manager.cpp:
        (getDatabaseOriginsCallback):
        * UIProcess/API/efl/ewk_error_private.h:
        * UIProcess/efl/DownloadManagerEfl.cpp:
        (WebKit::DownloadManagerEfl::didFail):
        * UIProcess/efl/InputMethodContextEfl.h:
        (WebKit::InputMethodContextEfl::create):
        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit::PageLoadClientEfl::didFailLoadWithErrorForFrame):
        (WebKit::PageLoadClientEfl::didFailProvisionalLoadWithErrorForFrame):

2014-03-23  Hyowon Kim  <hw1008.kim@samsung.com>

        Move all EFL typedefs into EflTypedefs.h.
        https://bugs.webkit.org/show_bug.cgi?id=130511

        Reviewed by Gyuyoung Kim.

        * Shared/API/c/efl/WKArrayEfl.h: Remove EFL typedefs.
        * UIProcess/API/efl/EwkView.h: Ditto.

2014-03-23  Jinwoo Song  <jinwoo7.song@samsung.com>

        [WK2] Refine WebKit2 BatteryStatus code
        https://bugs.webkit.org/show_bug.cgi?id=130573

        Reviewed by Anders Carlsson.

        Refinements
         - Return PassRef instead of PassRefPtr in create methods
         - Use auto instead of iterator

        * UIProcess/WebBatteryManagerProxy.cpp:
        (WebKit::WebBatteryManagerProxy::create):
        * UIProcess/WebBatteryManagerProxy.h:
        * UIProcess/efl/BatteryProvider.cpp:
        (BatteryProvider::create):
        * UIProcess/efl/BatteryProvider.h:
        * WebProcess/Battery/WebBatteryManager.cpp:
        (WebKit::WebBatteryManager::didChangeBatteryStatus):
        (WebKit::WebBatteryManager::updateBatteryStatus):

2014-03-23  Sam Weinig  <sam@webkit.org>

        Simplify the HTMLConverter interface (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=130654

        Reviewed by Darin Adler.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::performDictionaryLookupForRange):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::getAttributedSubstringFromRange):
        (WebKit::WebPage::attributedSubstringForCharacterRangeAsync):
        (WebKit::WebPage::performDictionaryLookupAtLocation):
        (WebKit::WebPage::performDictionaryLookupForSelection):
        (WebKit::WebPage::performDictionaryLookupForRange):

2014-03-23  David Kilzer  <ddkilzer@apple.com>

        WebKit::resistanceForDelta() truncates 'scaleDistance' to integer value using abs()
        <http://webkit.org/b/130651>

        Reviewed by Darin Adler.

        Fixes the following build failure with trunk clang:

            WebKit2/UIProcess/mac/ViewGestureControllerMac.mm:112:28: error: using integer absolute value function 'abs' when argument is of floating point type [-Werror,-Wabsolute-value]
                double scaleDistance = abs(limit - currentScale);
                                       ^
            WebKit2/UIProcess/mac/ViewGestureControllerMac.mm:112:28: note: use function 'fabs' instead
                double scaleDistance = abs(limit - currentScale);
                                       ^~~
                                       fabs

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::resistanceForDelta): Use fabs() instead of abs().

2014-03-23  Simon Fraser  <simon.fraser@apple.com>

        Clean up #includes by geometry classes
        https://bugs.webkit.org/show_bug.cgi?id=130645

        Reviewed by Andreas Kling.

        Pulling in <wtf/Vector.h> and <wtf/PrintStream.h> in the simple geometry
        classes brings in a lot of additional headers. Fix by adding a new
        GeometryUtilities file so that the basic files don't need Vector,
        and including GeometryUtilities.h where necessary.
        
        Also forward declare PrintStream.h and only bring in the header
        in implementation files.

        * Shared/UpdateInfo.h:
        * UIProcess/BackingStore.h:
        * UIProcess/CoordinatedGraphics/PageViewportController.h:
        * UIProcess/FindIndicator.cpp:
        * UIProcess/mac/WKPrintingView.h:

2014-03-23  Simon Fraser  <simon.fraser@apple.com>

        Clean up #includes by geometry classes
        https://bugs.webkit.org/show_bug.cgi?id=130645

        Reviewed by Andreas Kling.

        Pulling in <wtf/Vector.h> and <wtf/PrintStream.h> in the simple geometry
        classes brings in a lot of additional headers. Fix by adding a new
        GeometryUtilities file so that the basic files don't need Vector,
        and including GeometryUtilities.h where necessary.
        
        Also forward declare PrintStream.h and only bring in the header
        in implementation files.

        * UIProcess/BackingStore.h:
        * UIProcess/FindIndicator.cpp:
        * UIProcess/mac/WKPrintingView.h:

2014-03-22  Alexey Proskuryakov  <ap@apple.com>

        Assertions in WebPage::rangeFromEditingRange when requested range location is NSNotFound
        https://bugs.webkit.org/show_bug.cgi?id=130633
        <rdar://problem/16397583>

        Reviewed by Darin Adler.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView firstRectForCharacterRange:completionHandler:]):
        (-[WKView firstRectForCharacterRange:actualRange:]):
        Return NSZeroRect, like NSTextView does for any locations that are out of bounds.
        There is no need for a round trip to WebProcess in this case.

2014-03-21  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Reduce the tiling coverage to the current rect and 1 tile size ahead
        https://bugs.webkit.org/show_bug.cgi?id=130555

        Reviewed by Simon Fraser.

        * Shared/VisibleContentRectUpdateInfo.cpp:
        (WebKit::VisibleContentRectUpdateInfo::encode):
        (WebKit::VisibleContentRectUpdateInfo::decode):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::operator==):
        * UIProcess/ios/WKContentView.mm:
        (WebKit::HistoricalKinematicData::HistoricalKinematicData):
        (WebKit::HistoricalKinematicData::velocityForNewData):
        (WebKit::HistoricalKinematicData::clear):
        (WebKit::HistoricalKinematicData::append):
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:scale:inStableState:]):
        * WebProcess/WebPage/ViewUpdateDispatcher.cpp:
        (WebKit::ViewUpdateDispatcher::visibleContentRectUpdate):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):

2014-03-21  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r165356): Predictive Chinese input is broken
        https://bugs.webkit.org/show_bug.cgi?id=130619

        Reviewed by Enrica Casucci.

        * UIProcess/mac/WebPageProxyMac.mm: (WebKit::WebPageProxy::executeKeypressCommands):
        Like after insertText, we are no longer in an intermediate state after executeKeypressCommands.
        Make sure that we don't call -discardMarkedText the next time we get a non-intermediate
        state with closed composition.

2014-03-21  Sam Weinig  <sam@webkit.org>

        [WebKit2] Implement NetworkingContext::sourceApplicationAuditData() for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=130528

        Reviewed by Tim Horton.

        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.cpp:
        (IPC::Connection::getAuditToken):
        Expose the audit data if available. 

        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::sourceApplicationAuditData):
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::sourceApplicationAuditData):
        Pass the audit data corresponding to the UIProcess.

        * Configurations/Network-iOS.entitlements: Copied from Configurations/WebContent-iOS.entitlements.
        * Configurations/NetworkProcess.xcconfig:
        * Configurations/NetworkService.Development.xcconfig:
        * Configurations/NetworkService.xcconfig:
        * Configurations/WebContent-iOS.entitlements:
        Add entitlement allowing the audit data to be used.

2014-03-21  Tim Horton  <timothy_horton@apple.com>

        Always retrieve the screen scale factor from WKSI
        <rdar://problem/16329679>

        Reviewed by Sam Weinig.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView initWithFrame:context:WebKit::configuration:WebKit::webView:]):
        (-[WKContentView _updateForScreen:]):
        Use WKGetScreenScaleFactor/WKGetScaleFactorForScreen.

2014-03-21  Yongjun Zhang  <yongjun_zhang@apple.com>

        [Webkit2] Add APIDownloadClient for download support.
        https://bugs.webkit.org/show_bug.cgi?id=130484

        Add API::DownloadClient to WebContext and get rid of WebDownloadClient.

        Reviewed by Anders Carlsson.

        * UIProcess/API/APIDownloadClient.h: Added.
        (API::DownloadClient::~DownloadClient):
        (API::DownloadClient::didStart):
        (API::DownloadClient::didReceiveAuthenticationChallenge):
        (API::DownloadClient::didReceiveResponse):
        (API::DownloadClient::didReceiveData):
        (API::DownloadClient::shouldDecodeSourceDataOfMIMEType):
        (API::DownloadClient::decideDestinationWithSuggestedFilename):
        (API::DownloadClient::didCreateDestination):
        (API::DownloadClient::didFinish):
        (API::DownloadClient::didFail):
        (API::DownloadClient::didCancel):
        (API::DownloadClient::processDidCrash):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetDownloadClient): Move the original WebDownloadClient methods to a local class
            DownloadClient and set up the downloadClient for WebContext.
        * UIProcess/Downloads/DownloadProxy.cpp:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::setDownloadClient):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::downloadClient):
        * UIProcess/WebDownloadClient.cpp: Removed.
        * UIProcess/WebDownloadClient.h: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2014-03-21  Alexey Proskuryakov  <ap@apple.com>

        ASSERTION FAILED: event == [NSApp currentEvent] hitting Command-+
        https://bugs.webkit.org/show_bug.cgi?id=130526
        <rdar://problem/16371612> 

        This was fixed yesterday for sync code path, landing the same this for async one.

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

2014-03-21  Pratik Solanki  <psolanki@apple.com>

        Add callbacks in WebKit2 Cocoa API for page load testing
        https://bugs.webkit.org/show_bug.cgi?id=130569

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (didFirstVisuallyNonEmptyLayoutForFrame):
        (didHandleOnloadEventsForFrame):
        (setUpPageLoaderClient):
        (willSendRequestForFrame):
        (didInitiateLoadForResource):
        (didFinishLoadForResource):
        (didFailLoadForResource):
        (setUpResourceLoadClient):

2014-03-21  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Remove Ewk_Error parameter from some async callbacks
        https://bugs.webkit.org/show_bug.cgi?id=130567

        Reviewed by Gyuyoung Kim.

        WebKit2 internally uses GenericCallbacks for several APIs such as WKKeyValueStorageManagerGetKeyValueStorageOrigins.
        But only few callbacks really return errors.

        This patch removes Ewk_Error parameters from these callbacks not to make
        the confusion for application developers.

        * UIProcess/API/efl/ewk_cookie_manager.cpp:
        (getAcceptPolicyCallback):
        (getHostnamesWithCookiesCallback):
        * UIProcess/API/efl/ewk_cookie_manager.h:
        * UIProcess/API/efl/ewk_database_manager.cpp:
        (getDatabaseOriginsCallback):
        * UIProcess/API/efl/ewk_database_manager.h:
        * UIProcess/API/efl/ewk_storage_manager.cpp:
        (getStorageOriginsCallback):
        * UIProcess/API/efl/ewk_storage_manager.h:
        * UIProcess/API/efl/tests/test_ewk2_cookie_manager.cpp:
        (EWK2CookieManagerTest::getAcceptPolicyCallback):
        (EWK2CookieManagerTest::getHostnamesWithCookiesCallback):
        * UIProcess/API/efl/tests/test_ewk2_database_manager.cpp:
        (EWK2DatabaseManagerTest::databaseOriginsCallback):
        * UIProcess/API/efl/tests/test_ewk2_storage_manager.cpp:
        (EWK2StorageManagerTest::getStorageOriginsCallback):

2014-03-21  Darin Adler  <darin@apple.com>

        Improve idiom used for string building in a few places
        https://bugs.webkit.org/show_bug.cgi?id=130561

        Reviewed by Andreas Kling.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::initializeSandbox): Use a more efficient idiom for string
        concatenation.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::createInspectorPage): Use a StringBuilder.

2014-03-20  Hyowon Kim  <hw1008.kim@samsung.com>

        Move to using std::unique_ptr for EFL objects.
        https://bugs.webkit.org/show_bug.cgi?id=129853

        Reviewed by Gyuyoung Kim.

        EflUniquePtr is a template alias of std::unique_ptr
        with a custom deleter for each Efl Objects, which is motivated by GUniquePtr.
        This patch replaces uses of OwnPtr and PassOwnPtr for Efl objects with EflUniquePtr.

        * Platform/Module.h:
        * Platform/efl/ModuleEfl.cpp:
        (WebKit::Module::load):
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        * UIProcess/API/efl/EwkView.h:
        * UIProcess/efl/InputMethodContextEfl.cpp:
        (WebKit::InputMethodContextEfl::InputMethodContextEfl):
        (WebKit::InputMethodContextEfl::createIMFContext):
        * UIProcess/efl/InputMethodContextEfl.h:
        (WebKit::InputMethodContextEfl::create):

2014-03-20  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [EFL][GTK] Get CMake to find Freetype2 properly
        https://bugs.webkit.org/show_bug.cgi?id=130150

        Reviewed by Martin Robinson.

        Newer versions of CMake are not able to find Freetype2 correctly.
        FindFreetype2.cmake checks for the version number in freetype.h header, since it seems that bug exists in
        freetype2 repo, because a completely different version number is found in freetype2.pc.

        * PlatformEfl.cmake:

2014-03-20  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Suppress errors about using gdk_threads_enter gdk_threads_leave
        https://bugs.webkit.org/show_bug.cgi?id=130517

        Reviewed by Sergio Villar Senin.

        * UIProcess/API/gtk/WebKitWebView.cpp: Use GCC suppression to suppress errors about deprecations.
        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp: Ditto.

2014-03-20  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] tests of test_ewk2_cookie_manager are flaky
        https://bugs.webkit.org/show_bug.cgi?id=130498

        Reviewed by Gyuyoung Kim.

        Loaded web page before calling getAcceptPolicy() to guarantee that webprocess
        or networkprocess was launched and registered WebCookieManager.

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

2014-03-20  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r165985.
        https://bugs.webkit.org/show_bug.cgi?id=130551

        broke page loading on all cocoa platforms (Requested by
        thorton on #webkit).

        Reverted changeset:

        "[WebKit2] Implement
        NetworkingContext::sourceApplicationAuditData() for WebKit2"
        https://bugs.webkit.org/show_bug.cgi?id=130528
        http://trac.webkit.org/changeset/165985

2014-03-20  Alexey Proskuryakov  <ap@apple.com>

        Fix a long-standing typo that's now breaking USE(ASYNC_NSTEXTINPUTCLIENT) build.

        Rubber-stamped by Tim Horton.

        * UIProcess/mac/WebPageProxyMac.mm: (WebKit::WebPageProxy::cancelComposition):
        Use a correct type for reply (it's really the same type, but ConfirmComposition
        is behind an ifdef, and not available).

2014-03-20  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] typing and deleting text lags behind the caret movement on google.com.
        https://bugs.webkit.org/show_bug.cgi?id=130544
        <rdar://problem/16380296>

        Reviewed by Tim Horton.

        On iOS the selection is drawn in the UIProcess. If the WebProcess is
        processing multiple requests within the same runloop, the caret could be
        updated in the UIProcess before the WebProcess has had a chance to paint.
        This change synchronizes the selection drawing with the tile update.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _didCommitLayerTree:WebKit::]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _selectionChanged]):
        (-[WKContentView _updateChangedSelection]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didChangeSelection):

2014-03-20  Alexey Proskuryakov  <ap@apple.com>

        Generalize WebInspector check in maybeInitializeSandboxExtensionHandle().
        https://bugs.webkit.org/show_bug.cgi?id=130079
        <rdar://problem/16286683>

        Reviewed by Anders Carlsson.

        * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):
        Perform an early return for all paths that don't need a sandbox extension due to
        access being assumed, not only for WebInspector pages.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::hasAssumedReadAccessToURL):
        (WebKit::WebProcessProxy::checkURLReceivedFromWebProcess):
        * UIProcess/WebProcessProxy.h:
        Factored out m_localPathsWithAssumedReadAccess iteration to a public function.

2014-03-20  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r165983 for non Cocoa platforms.

        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKPreferences.cpp:
        * UIProcess/efl/WebInspectorProxyEfl.cpp:

2014-03-20  Beth Dakin  <bdakin@apple.com>

        Implement contentInset for Mac WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=130273

        Reviewed by Simon Fraser.

        This patch adds WKView API for setting a topContentInset(). All of this work gets 
        that number plumbed down to WebCore.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setTopContentInset:]):
        (-[WKWebView _topContentInset]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setTopContentInset:]):
        (-[WKView _topContentInset]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setTopContentInset):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::topContentInset):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::setTopContentInset):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2014-03-20  Anders Carlsson  <andersca@apple.com>

        Fix 32-bit build.

        * UIProcess/API/Cocoa/WKProcessPoolConfiguration.mm:

2014-03-20  Anders Carlsson  <andersca@apple.com>

        Make WKProcessPoolConfiguration SPI
        https://bugs.webkit.org/show_bug.cgi?id=130537

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKProcessPool.h:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool init]):
        (-[WKProcessPool dealloc]):
        (-[WKProcessPool description]):
        (-[WKProcessPool _configuration]):
        (-[WKProcessPool API::]):
        (-[WKProcessPool _initWithConfiguration:]):
        * UIProcess/API/Cocoa/WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/WKProcessPoolConfiguration.mm:
        (-[WKProcessPoolConfiguration _injectedBundleURL]):
        (-[WKProcessPoolConfiguration _setInjectedBundleURL:]):
        * UIProcess/API/Cocoa/WKProcessPoolConfigurationPrivate.h:
        * UIProcess/API/Cocoa/WKProcessPoolInternal.h:
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/WKProcessPoolToBeRemoved.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h.
        (-[WKProcessPool initWithConfiguration:]):
        (-[WKProcessPool configuration]):
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolConfigurationPrivate.h.
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolConfiguration.mm.
        (-[_WKProcessPoolConfiguration injectedBundleURL]):
        (-[_WKProcessPoolConfiguration setInjectedBundleURL:]):
        (-[_WKProcessPoolConfiguration description]):
        (-[_WKProcessPoolConfiguration copyWithZone:]):
        * WebKit2.xcodeproj/project.pbxproj:

2014-03-20  Tim Horton  <timothy_horton@apple.com>

        Add WebCore::IOSurface wrapper
        https://bugs.webkit.org/show_bug.cgi?id=130529

        Reviewed by Simon Fraser.

        * Shared/mac/RemoteLayerBackingStore.h:
        * Shared/mac/RemoteLayerBackingStore.mm:
        (RemoteLayerBackingStore::encode):
        (RemoteLayerBackingStore::decode):
        (RemoteLayerBackingStore::display):
        (RemoteLayerBackingStore::applyBackingStoreToLayer):
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        * UIProcess/mac/ViewGestureController.h:
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        * UIProcess/mac/ViewSnapshotStore.h:
        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::createIOSurfaceFromImage):
        (WebKit::ViewSnapshotStore::recordSnapshot):
        Adopt WebCore::IOSurface.

2014-03-20  Alexey Proskuryakov  <ap@apple.com>

        Update iOS input method code to use new cross-platform async functions
        https://bugs.webkit.org/show_bug.cgi?id=130530

        Reviewed by Enrica Casucci.

        Merge identical iOS and cross-platform functions.

        Also tightened up ifdefs, and removed stub iOS implementations of sync methods,
        which hopefully won't be ever needed. The only tricky case is sync cancelComposition,
        will I'll investigate separately.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setMarkedText:selectedRange:]):
        (-[WKContentView unmarkText]):
        (-[WKContentView insertText:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::cancelComposition):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::cancelComposition):
        (WebKit::WebPageProxy::insertDictatedTextAsync):
        (WebKit::WebPageProxy::attributedSubstringForCharacterRangeAsync):
        (WebKit::WebPageProxy::attributedStringForCharacterRangeCallback):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::cancelComposition):
        (WebKit::WebPage::insertDictatedTextAsync):
        (WebKit::WebPage::attributedSubstringForCharacterRangeAsync):

2014-03-20  Alexey Proskuryakov  <ap@apple.com>

        ASSERTION FAILED: event == [NSApp currentEvent] hitting Command-+
        https://bugs.webkit.org/show_bug.cgi?id=130526
        <rdar://problem/16371612>

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm: (-[WKView performKeyEquivalent:]): Cut custom
        processing short whenever we are redispatching an event, not just when the event
        we are handling is the one being redispatched. There shouldn't be any other unrelated
        events here, just the one being redispatched and synthetic ones generated from it by AppKit.

2014-03-20  Anders Carlsson  <andersca@apple.com>

        Fix build.

        Rename WKPreferencesPrivate.h to WKPreferencesRefPrivate.h.

        * UIProcess/API/C/WKPreferencesRefPrivate.h: Renamed from Source/WebKit2/UIProcess/API/C/WKPreferencesPrivate.h.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * WebKit2.xcodeproj/project.pbxproj:

2014-03-20  Gavin Barraclough  <barraclough@apple.com>

        Merge AtomicString, Identifier
        https://bugs.webkit.org/show_bug.cgi?id=128624

        Unreviewed build fix following r165982.

        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
            - update includes.

2014-03-20  Sam Weinig  <sam@webkit.org>

        [WebKit2] Implement NetworkingContext::sourceApplicationAuditData() for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=130528

        Reviewed by Anders Carlsson.

        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.cpp:
        (IPC::Connection::getAuditToken):
        Expose the audit data if available. 

        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::sourceApplicationAuditData):
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::sourceApplicationAuditData):
        Pass the audit data corresponding to the UIProcess.

2014-03-20  Sam Weinig  <sam@webkit.org>

        [Cocoa] Expose preference to enable telephone number detection
        https://bugs.webkit.org/show_bug.cgi?id=130524

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _telephoneNumberDetectionIsEnabled]):
        (-[WKPreferences _setTelephoneNumberDetectionIsEnabled:]):
        * UIProcess/API/Cocoa/WKPreferencesInternal.h:
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h: Added.
        * WebKit2.xcodeproj/project.pbxproj:

2014-03-19  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Support asynchronous NSTextInputClient
        https://bugs.webkit.org/show_bug.cgi?id=130479

        Reviewed by Anders Carlsson.

        The implementation is currently disabled, pending lower level support.
        Most of the code is not under compile time guard however, to facilitate cross-platform
        reuse, or at least under a PLATFORM(COCOA) guard to share the code with iOS.

        * UIProcess/API/mac/WKView.mm: Added a compile time branch for USE(ASYNC_NSTEXTINPUTCLIENT).
        We still implement sync NSTextInputClient here, in order to get assertions when
        its methods are unexpectedly called.
        The new code first sends an event to input method asynchronously, handling any callbacks
        that may arrive. During this time, we no longer care about WKViewInterpretKeyEventsParameters
        at all. Once done, we interpret key bindings synchronously, collecting them into
        a vector.

        * UIProcess/API/mac/WKViewInternal.h: We no longer expose _interpretKeyEvent outside
        WKView.

        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        Added async calls and callbacks. Removed unnecessary and slightly harmful .get() when moving
        a callback pointer into map. Moved insertDictatedText() and getAttributedSubstringFromRange()
        from PLATFORM(COCOA) to PLATFORM(MAC), because they are unused and unimplemented on
        iOS, and unlikely to be needed any time soon. Changed USE(APPKIT) to PLATFORM(MAC),
        because that's more accurate in this case (nothing depends on AppKit, it's just code
        that we only need on Mac).

        * UIProcess/WebPageProxy.messages.in: Added messages for new async IM responses.

        * UIProcess/ios/WebPageProxyIOS.mm: Removed insertDictatedText() and getAttributedSubstringFromRange().

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::insertDictatedTextAsync):
        (WebKit::WebPageProxy::attributedSubstringForCharacterRangeAsync):
        (WebKit::WebPageProxy::attributedStringForCharacterRangeCallback):
        Added async calls and callbacks that are Mac only.

        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        Added async implementations (which are essentially the same as sync ones, sadly).

        * WebProcess/WebPage/WebPage.messages.in: Added async messages, moved some messages
        under PLATFORM(MAC).

        * WebProcess/WebPage/ios/WebPageIOS.mm: More of deleting functions that are Mac only,
        and cannot be easily implemented in WebPage.cpp with shared code.

2014-03-20  Martin Robinson  <mrobinson@igalia.com>

        Remove remaining GTK+ unused parameter warnings from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=130518

        Reviewed by Sergio Villar Senin.

        Fix almost all unused parameter warnings in the WebKit2GTK+ build.

2014-03-20  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r165962.
        https://bugs.webkit.org/show_bug.cgi?id=130512

        It broke the build (Requested by Ossy on #webkit).

        Reverted changeset:

        "[EFL][GTK] Get CMake to find Freetype2 properly"
        https://bugs.webkit.org/show_bug.cgi?id=130150
        http://trac.webkit.org/changeset/165962

2014-03-20  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [EFL][GTK] Get CMake to find Freetype2 properly
        https://bugs.webkit.org/show_bug.cgi?id=130150

        Reviewed by Csaba Osztrogonác.

        Newer versions of CMake are not able to find Freetype2 correctly.
        FindFreetype2.cmake checks for the version number in freetype.h header, since it seems that bug exists in
        freetype2 repo, because a completely different version number is found in freetype2.pc.

        * PlatformEfl.cmake:

2014-03-20  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] test_ewk2_application_cache_manager is flaky
        https://bugs.webkit.org/show_bug.cgi?id=130501

        Reviewed by Gyuyoung Kim.

        * UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:
        (timerCallback): Return ECORE_CALLBACK_CANCEL to clear the timer.

2014-03-19  Tim Horton  <timothy_horton@apple.com>

        Address late review comment and style nit after r165934.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):

2014-03-19  Tim Horton  <timothy_horton@apple.com>

        [iOS][WebKit2] Back-forward swipe doesn't always complete with fingers down
        https://bugs.webkit.org/show_bug.cgi?id=130489
        <rdar://problem/16027007>

        Reviewed by Simon Fraser.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        In order to have fingers-down swipe completion work correctly, we need
        to give UIKit an empty interactive update block.

2014-03-19  Anders Carlsson  <andersca@apple.com>

        Get rid of two IPC::Connection functions by folding them into lambdas
        https://bugs.webkit.org/show_bug.cgi?id=130482

        Reviewed by Tim Horton.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::addWorkQueueMessageReceiver):
        (IPC::Connection::removeWorkQueueMessageReceiver):
        * Platform/IPC/Connection.h:

2014-03-19  Simon Fraser  <simon.fraser@apple.com>

        Expose text and page zoom in WK2 SPI, and hook them up in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=130476

        Reviewed by Anders Carlsson.
        
        Expose page and text zoom as SPI.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _supportsTextZoom]):
        (-[WKWebView _textZoomFactor]):
        (-[WKWebView _setTextZoomFactor:]):
        (-[WKWebView _pageZoomFactor]):
        (-[WKWebView _setPageZoomFactor:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2014-03-19  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Reduce the extended background's opacity when WKContentView is smaller than its WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=130436

        Reviewed by Beth Dakin.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _updateScrollViewBackground]):

2014-03-19  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WebKit2] <rdar://problem/16330387> Do not use the keyboard rect for computing the general unobscuredRect, only use it for centering
        https://bugs.webkit.org/show_bug.cgi?id=130382

        Reviewed by Simon Fraser.

        Always accumulating the keyboard rect out of the exposedRect caused some issues (see <rdar://problem/16330387>).
        This patch split the rect in two: unobscured rect for WebCore, and unobscuredContentRectIncludingKeyboard for centering
        UI Elements in view.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _zoomToRect:WebCore::atScale:origin:WebCore::]):
        (-[WKWebView _scrollToRect:WebCore::origin:WebCore::minimumScrollDistance:]):
        (-[WKWebView _zoomToRect:WebCore::withOrigin:WebCore::fitEntireRect:minimumScale:maximumScale:minimumScrollDistance:]):
        (-[WKWebView _contentRectForUserInteraction]):
        (-[WKWebView _updateVisibleContentRects]):

2014-03-19  Anders Carlsson  <andersca@apple.com>

        Get rid of WKProcessClass
        https://bugs.webkit.org/show_bug.cgi?id=130478

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKProcessClass.h: Removed.
        * UIProcess/API/Cocoa/WKProcessClass.mm: Removed.
        * UIProcess/API/Cocoa/WKProcessClassConfiguration.h: Removed.
        * UIProcess/API/Cocoa/WKProcessClassConfiguration.mm: Removed.
        * UIProcess/API/Cocoa/WKProcessClassConfigurationPrivate.h: Removed.
        * UIProcess/API/Cocoa/WKProcessClassPrivate.h: Removed.
        * UIProcess/API/Cocoa/WKWebViewConfigurationToBeRemoved.mm: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2014-03-19  Jer Noble  <jer.noble@apple.com>

        [Mac][EME] Query whether decoder support exists before creating a new MediaKeys object.
        https://bugs.webkit.org/show_bug.cgi?id=130459

        Reviewed by Eric Carlson.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Initialize the new WCSI method.

2014-03-19  Brady Eidson  <beidson@apple.com>

        Filter out editable services from image menu for non-contenteditable images
        <rdar://problem/16319645> and https://bugs.webkit.org/show_bug.cgi?id=130437

        Reviewed by Tim Horton.

        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (-[WKSharingServicePickerDelegate setIncludeEditorServices:]):
        (-[WKSharingServicePickerDelegate sharingServicePicker:sharingServicesForItems:mask:proposedSharingServices:]):
          Filter out editing services based on the includeEditorServices flag.
        (WebKit::WebContextMenuProxyMac::setupImageServicesMenu):
        (WebKit::WebContextMenuProxyMac::populate):

2014-03-19  Yongjun Zhang  <yongjun_zhang@apple.com>

        [iOS] WebKit2 Quicklook.
        https://bugs.webkit.org/show_bug.cgi?id=130360

        For WebKit2 resource loads, if we detect a quicklook content that QLConverter is able to
        convert, handle the response data to QLConverter and use its delegate WKWebResourceQuickLookDelegate
        to rounte the converted results (HTML) back into WebCore.  Thie similiar logic has been in place
        for WebKit1.

        Reviewed by Tim Horton.

        * WebKit2.xcodeproj/project.pbxproj: Add WebResourceLoaderIOS.mm to the project.
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        * WebProcess/ios/WebResourceLoaderIOS.mm: Added.
        (-[WKWebResourceQuickLookDelegate initWithWebResourceLoader:WebKit::]): WKWebResourceQuickLookDelegate holds
            the original WebResourceLoader so that we could send converted result to WebCore.
        (-[WKWebResourceQuickLookDelegate connection:didReceiveDataArray:]):
        (-[WKWebResourceQuickLookDelegate connection:didReceiveData:lengthReceived:]):
        (-[WKWebResourceQuickLookDelegate connectionDidFinishLoading:]):
        (-[WKWebResourceQuickLookDelegate connection:didFailWithError:]):
        (-[WKWebResourceQuickLookDelegate clearHandle]):
        (WebKit::WebResourceLoader::setUpQuickLookHandleIfNeeded):

2014-03-19  Tim Horton  <timothy_horton@apple.com>

        WebKit2 View Gestures: Swipe gesture can track vertical movement instead of horizontal movement
        https://bugs.webkit.org/show_bug.cgi?id=130441
        <rdar://problem/16337279>

        Reviewed by Simon Fraser.

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::scrollEventCanBecomeSwipe):
        Factor logic that determines if a scroll event can become a swipe
        out into scrollEventCanBecomeSwipe.
        Use <= instead of < when comparing the axes, because we don't want
        to start a swipe on a completely diagonal scroll either (because AppKit
        can start tracking a vertical swipe in that case).

        (WebKit::ViewGestureController::handleScrollWheelEvent):
        (WebKit::ViewGestureController::wheelEventWasNotHandledByWebCore):
        Make use of scrollEventCanBecomeSwipe.

2014-03-18  Anders Carlsson  <andersca@apple.com>

        Add new functionality that will be required by the history item decoding
        https://bugs.webkit.org/show_bug.cgi?id=130433

        Reviewed by Sam Weinig.

        * Shared/cf/KeyedDecoder.cpp:
        (WebKit::KeyedDecoder::decodeUInt32):
        (WebKit::KeyedDecoder::decodeInt32):
        (WebKit::KeyedDecoder::decodeFloat):
        * Shared/cf/KeyedDecoder.h:

2014-03-19  Tim Horton  <timothy_horton@apple.com>

        [iOS] WebPDFViewPlaceholder divides-by-zero with an empty document
        https://bugs.webkit.org/show_bug.cgi?id=130444
        <rdar://problem/15580682>

        Reviewed by Sam Weinig.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView web_setContentProviderData:]):
        Don't make UIPDFPageViews for null pages.

2014-03-18  Tim Horton  <timothy_horton@apple.com>

        [iOS][WebKit2] Provide generic software-snapshotting API
        https://bugs.webkit.org/show_bug.cgi?id=130385
        <rdar://problem/16005957>

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:WebKit::]):
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKThumbnailView.mm:
        (-[_WKThumbnailView initWithFrame:fromWKView:]):
        (-[_WKThumbnailView _requestSnapshotIfNeeded]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::takeSnapshot):
        (WebKit::WebPage::scaledSnapshotWithOptions):
        (WebKit::WebPage::snapshotAtSize):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Rename TakeThumbnailSnapshot message to TakeSnapshot.

        Fill the snapshot image with the FrameView's background color, to avoid
        half-pixel alpha around the edges.

        Factor snapshotAtSize out of scaledSnapshotWithOptions.

        Don't apply both the custom and device scale factor to the base CTM,
        only the device scale factor. Custom scale factor should only be
        applied to the user CTM.

        * Shared/ImageOptions.h:
        Add a snapshot option, RespectDrawingAreaTransform, that maps
        the rect through the drawing area's root layer transform.
        Use this in place of the thumbnail-specific code in TakeThumbnailSnapshot.
        Add a snapshot option, ExcludeDeviceScaleFactor, which means that
        snapshotting will not factor the device scale in (useful for drawing
        to a bitmap at an exact requested size).

2014-03-18  Samuel White  <samuel_white@apple.com>

        AX: Not able to use arrow keys to read text with VoiceOver before selection is set someplace (anyplace).
        https://bugs.webkit.org/show_bug.cgi?id=130250

        Reviewed by Chris Fleizach.

        Added ability to toggle enhanced accessibility on and off to support tests that require it.

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

2014-03-18  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Rename async APIs for better consistency with EFL
        https://bugs.webkit.org/show_bug.cgi?id=130319

        Reviewed by Gyuyoung Kim.

        There are inconsistency with async keyword in several ewebkit2 APIs.
        This patch rename them to {module/feature}_async_{verb} for better consistency with EFL.
        In addition, added Async keyword into their callback name.

        * UIProcess/API/efl/ewk_application_cache_manager.cpp:
        (EwkApplicationCacheOriginsAsyncData::EwkApplicationCacheOriginsAsyncData):
        (getApplicationCacheOriginsCallback):
        (ewk_application_cache_manager_origins_async_get):
        * UIProcess/API/efl/ewk_application_cache_manager.h:
        * UIProcess/API/efl/ewk_cookie_manager.cpp:
        (EwkCookiePolicyAsyncData::EwkCookiePolicyAsyncData):
        (getAcceptPolicyCallback):
        (ewk_cookie_manager_accept_policy_async_get):
        (EwkCookieHostnamesAsyncData::EwkCookieHostnamesAsyncData):
        (getHostnamesWithCookiesCallback):
        (ewk_cookie_manager_hostnames_with_cookies_async_get):
        * UIProcess/API/efl/ewk_cookie_manager.h:
        * UIProcess/API/efl/ewk_database_manager.cpp:
        (EwkDatabaseOriginsAsyncData::EwkDatabaseOriginsAsyncData):
        (getDatabaseOriginsCallback):
        (ewk_database_manager_origins_async_get):
        * UIProcess/API/efl/ewk_database_manager.h:
        * UIProcess/API/efl/ewk_storage_manager.cpp:
        (EwkStorageOriginsAsyncData::EwkStorageOriginsAsyncData):
        (getStorageOriginsCallback):
        (ewk_storage_manager_origins_async_get):
        * UIProcess/API/efl/ewk_storage_manager.h:
        * UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:
        (timerCallback):
        * UIProcess/API/efl/tests/test_ewk2_cookie_manager.cpp:
        (EWK2CookieManagerTest::getAcceptPolicy):
        (EWK2CookieManagerTest::getHostnamesWithCookies):
        * UIProcess/API/efl/tests/test_ewk2_database_manager.cpp:
        (EWK2DatabaseManagerTest::timerCallback):
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_storage_manager.cpp:
        (EWK2StorageManagerTest::timerCallback):
        (TEST_F):

2014-03-18  Tim Horton  <timothy_horton@apple.com>

        [iOS][WebKit2] Mark layer contents as being opaque if they are
        https://bugs.webkit.org/show_bug.cgi?id=130427
        <rdar://problem/15540434>

        Reviewed by Simon Fraser.

        * Shared/mac/RemoteLayerBackingStore.h:
        (WebKit::RemoteLayerBackingStore::isOpaque):
        * Shared/mac/RemoteLayerBackingStore.mm:
        (RemoteLayerBackingStore::RemoteLayerBackingStore):
        (RemoteLayerBackingStore::ensureBackingStore):
        (RemoteLayerBackingStore::encode):
        (RemoteLayerBackingStore::decode):
        (RemoteLayerBackingStore::display):
        (RemoteLayerBackingStore::applyBackingStoreToLayer):
        Move the code to set a RemoteLayerBackingStore as a CALayer's contents
        from RemoteLayerTreePropertyApplier to RemoteLayerBackingStore (mostly
        as a way to keep the USE(IOSURFACE) #ifs in one place).
        Remove the surface() getter, because it's no longer needed, and make
        image() private as it can be now (and rename it to createImageForFrontBuffer
        for clarity's sake).

        Add an isOpaque argument to ensureBackingStore, encode/decode it, and
        add a getter. If isOpaque is true when applying backing store to the
        CALayer on the UI process side, set CALayer.contentsOpaque to let CA know.

        Make opaque bitmaps if not using accelerated drawing. For the IOSurface
        case, we can't make opaque IOSurfaces, but telling CA that we have filled
        the whole bitmap still enables similar optimizations.

        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::applyPropertiesToLayer):
        Reset contentsOpaque if the layer loses its backing store.

        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTextStream::operator<<):
        (WebKit::dumpChangedLayers):
        Add a bit more logging about RemoteLayerBackingStore's opaqueness
        and acceleratedness.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (PlatformCALayerRemote::updateBackingStore):
        (PlatformCALayerRemote::setOpaque):
        Invalidate the RemoteLayerBackingStore if layer opaqueness changes.

2014-03-18  Brady Eidson  <beidson@apple.com>

        Make image controls menu work in WK2
        <rdar://problem/16294412> and https://bugs.webkit.org/show_bug.cgi?id=130424

        Reviewed by Tim Horton.

        * Platform/SharedMemory.h:
        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::Handle::~Handle):
        (WebKit::SharedMemory::Handle::clear):

        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::SharedMemory::Handle::~Handle):
        (WebKit::SharedMemory::Handle::clear):

        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        (WebKit::ContextMenuContextData::operator=):
        (WebKit::ContextMenuContextData::encode):
        (WebKit::ContextMenuContextData::decode):
        * Shared/ContextMenuContextData.h:
        (WebKit::ContextMenuContextData::controlledImageHandle):

        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::Handle::clear):
        * Shared/ShareableBitmap.h:
        * UIProcess/WebContextMenuProxy.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu):
        (WebKit::WebPageProxy::replaceControlledImage):
        * UIProcess/WebPageProxy.h:

        * UIProcess/efl/WebContextMenuProxyEfl.cpp:
        (WebKit::WebContextMenuProxyEfl::showContextMenu):
        * UIProcess/efl/WebContextMenuProxyEfl.h:

        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::showContextMenu):
        * UIProcess/gtk/WebContextMenuProxyGtk.h:

        Add a sharing service context menu that lives side-by-side with the normal one:
        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (+[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate]):
        (-[WKSharingServicePickerDelegate setMenuProxy:WebKit::]):
        (-[WKSharingServicePickerDelegate setPicker:]):
        (-[WKSharingServicePickerDelegate sharingServicePicker:delegateForSharingService:]):
        (-[WKSharingServicePickerDelegate sharingService:willShareItems:]):
        (-[WKSharingServicePickerDelegate sharingService:didShareItems:]):
        (-[WKSharingServicePickerDelegate sharingService:sourceFrameOnScreenForShareItem:]):
        (-[WKSharingServicePickerDelegate sharingService:transitionImageForShareItem:contentRect:]):
        (-[WKSharingServicePickerDelegate sharingService:sourceWindowForShareItems:sharingContentScope:]):
        (WebKit::WebContextMenuProxyMac::contextMenuItemSelected):
        (WebKit::WebContextMenuProxyMac::setupImageServicesMenu):
        (WebKit::WebContextMenuProxyMac::clearImageServicesMenu):
        (WebKit::WebContextMenuProxyMac::populate):
        (WebKit::WebContextMenuProxyMac::showContextMenu):
        (WebKit::WebContextMenuProxyMac::window):
        (WebKit::WebContextMenuProxyMac::replaceControlledImage):

        * WebProcess/WebPage/WebContextMenu.cpp:
        (WebKit::WebContextMenu::show):
        (WebKit::WebContextMenu::replaceControlledImage):
        * WebProcess/WebPage/WebContextMenu.h:

        Teach the WebProcess how to accept the replaced image.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::replaceControlledImage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2014-03-18  Anders Carlsson  <andersca@apple.com>

        Begin cleaning up KeyedDecoder and KeyedEncoder
        https://bugs.webkit.org/show_bug.cgi?id=130431

        Reviewed by Tim Horton.

        * Shared/cf/KeyedDecoder.cpp:
        (WebKit::KeyedDecoder::KeyedDecoder):
        If we can't parse the property list data, just add an empty dictionary to the stack.

        (WebKit::KeyedDecoder::decodeBool):
        Remove unneeded m_dictionaryStack.last() null check. m_dictionaryStack would either be empty
        or at least have a root element; it would never have a null element.
        
        (WebKit::KeyedDecoder::decodeDouble):
        Remove the same check as above and remove the CFNumberGetType checks since CFNumberGetValue will
        do the type conversion for us and return false if it's lossy.

        (WebKit::KeyedDecoder::decodeInt64):
        Remove the m_dictionaryStack.last() check.

        (WebKit::KeyedDecoder::decodeUInt32):
        Ditto.

        (WebKit::KeyedDecoder::decodeString):
        Ditto.

        (WebKit::KeyedDecoder::beginObject):
        Ditto.

        (WebKit::KeyedDecoder::beginArray):
        Ditto.

        (WebKit::KeyedDecoder::beginArrayElement):
        Ditto.

        * Shared/cf/KeyedDecoder.h:
        Sort functions to be in the same logical order as the base class.

        * Shared/cf/KeyedEncoder.cpp:
        (WebKit::KeyedEncoder::finishEncoding):
        Don't check for a non-null CFErrorRef here (which we incidentally never released on error). Instead,
        just null check the returned CFDataRef object.

2014-03-18  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed typo build fix for r165846.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::decode):

2014-03-18  Joseph Pecoraro  <pecoraro@apple.com>

        WebKit2 SPI to disable remote inspection on a WKWebView / WKPage
        https://bugs.webkit.org/show_bug.cgi?id=130371

        Reviewed by Dan Bernstein.

        * Shared/WebPageCreationParameters.h:
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        Add allowsRemoteInspection bool.

        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetAllowsRemoteInspection):
        (WKPageSetAllowsRemoteInspection):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _allowsRemoteInspection]):
        (-[WKWebView _setAllowsRemoteInspection:]):
        Getter and setter for allowing remote inspection state.

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::allowsRemoteInspection):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setAllowsRemoteInspection):
        (WebKit::WebPageProxy::creationParameters):
        Cached allows remote inspection state, with getter and setter.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setAllowsRemoteInspection):
        When setting, call into WebCore to adjust the Page's setting.

2014-03-18  Anders Carlsson  <andersca@apple.com>

        REGRESSION: Visited link coloring seems to be completely broken in tip of tree
        https://bugs.webkit.org/show_bug.cgi?id=130419
        <rdar://problem/16337850>

        Reviewed by Dan Bernstein.

        Make sure to send any queued up messages before calling connectionWillOpen so we'll ensure
        FIFO ordering if any messages are sent from within connectionWillOpen.

        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::didFinishLaunching):

2014-03-18  Joseph Pecoraro  <pecoraro@apple.com>

        WebPageCreationParameters colorSpace should be MAC not COCOA
        https://bugs.webkit.org/show_bug.cgi?id=130414

        Reviewed by Dan Bernstein.

        The colorSpace param was only set and used on Mac, not iOS.

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

2014-03-18  Simon Fraser  <simon.fraser@apple.com>

        Dan says that options should be unsigned, and enums should be signed.
        
        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        (NS_ENUM):

2014-03-17  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Pass ranges over IPC in a cross-platform manner
        https://bugs.webkit.org/show_bug.cgi?id=130376

        Reviewed by Anders Carlsson.

        Added an EditingRange class for IPC, which automatically converts to and from
        NSRanges, knowing the difference between notFound and NSNotFound.

        Manually applied the same fix to characterIndexForPoint.

        * Scripts/webkit2/messages.py:
        (struct_or_class):
        * Shared/EditingRange.h: Added.
        (WebKit::EditingRange::EditingRange):
        (WebKit::EditingRange::isValid):
        (WebKit::EditingRange::operator NSRange):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView insertText:replacementRange:]):
        (-[WKView selectedRange]):
        (-[WKView hasMarkedText]):
        (-[WKView setMarkedText:selectedRange:replacementRange:]):
        (-[WKView markedRange]):
        (-[WKView attributedSubstringForProposedRange:actualRange:]):
        (-[WKView characterIndexForPoint:]):
        (-[WKView firstRectForCharacterRange:actualRange:]):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setMarkedText:selectedRange:]):
        (-[WKContentView insertText:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setComposition):
        (WebKit::WebPageProxy::insertText):
        (WebKit::WebPageProxy::insertDictatedText):
        (WebKit::WebPageProxy::getMarkedRange):
        (WebKit::WebPageProxy::getSelectedRange):
        (WebKit::WebPageProxy::getAttributedSubstringFromRange):
        (WebKit::WebPageProxy::firstRectForCharacterRange):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setComposition):
        (WebKit::WebPageProxy::insertText):
        (WebKit::WebPageProxy::insertDictatedText):
        (WebKit::WebPageProxy::getMarkedRange):
        (WebKit::WebPageProxy::getSelectedRange):
        (WebKit::WebPageProxy::getAttributedSubstringFromRange):
        (WebKit::WebPageProxy::firstRectForCharacterRange):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::rangeFromEditingRange):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::setComposition):
        (WebKit::WebPage::insertText):
        (WebKit::WebPage::insertDictatedText):
        (WebKit::WebPage::getMarkedRange):
        (WebKit::WebPage::getSelectedRange):
        (WebKit::WebPage::getAttributedSubstringFromRange):
        (WebKit::WebPage::firstRectForCharacterRange):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::setComposition):
        (WebKit::WebPage::insertText):
        (WebKit::WebPage::insertDictatedText):
        (WebKit::WebPage::getMarkedRange):
        (WebKit::WebPage::getSelectedRange):
        (WebKit::WebPage::getAttributedSubstringFromRange):
        (WebKit::WebPage::characterIndexForPoint):
        (WebKit::WebPage::firstRectForCharacterRange):

2014-03-17  Filip Pizlo  <fpizlo@apple.com>

        More FTL enabling.

        Rubber stamped by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig:

2014-03-17  Simon Fraser  <simon.fraser@apple.com>

        Renable pagination mode in WK2 MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=130374

        Reviewed by Anders Carlsson.
        
        Add SPI for pagination mode.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _paginationMode]):
        (-[WKWebView _setPaginationMode:]):
        (-[WKWebView _paginationBehavesLikeColumns]):
        (-[WKWebView _setPaginationBehavesLikeColumns:]):
        (-[WKWebView _pageLength]):
        (-[WKWebView _setPageLength:]):
        (-[WKWebView _gapBetweenPages]):
        (-[WKWebView _setGapBetweenPages:]):
        (-[WKWebView _pageCount]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        (NS_ENUM):

2014-03-18  Ryuan Choi  <ryuan.choi@samsung.com>

        [CMAKE][WK2]Move CoordinatedGraphics related files out of WebKit2/CMakeLists.txt
        https://bugs.webkit.org/show_bug.cgi?id=130390

        Reviewed by Martin Robinson.

        Now, only EFL port use CoordinatedGraphics among CMake based ports.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake: Removed CoordinatedGraphics related files.

2014-03-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Race condition when the socket event source is cancelled
        https://bugs.webkit.org/show_bug.cgi?id=130395

        Reviewed by Martin Robinson.

        In some cases when the socket event source is cancelled the socket
        event source callback is called with the condition of the previous
        poll instead of 0. This can happen sometimes when the source is
        cancelled from the socket event source callback. Once the socket
        event source is cancelled, it's dispatched by glib without
        polling, so the condition is never reset again and the callback is
        called again and again with the previous condition. When the
        condition is G_IO_IN, the source is re-scheduled entering into an
        infinite loop. We should always check if the source has been
        cancelled at the beginning of the callback to destroy the source
        instead of relying on the condition being 0.

        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::SocketEventSource::isCancelled):
        (WorkQueue::SocketEventSource::eventCallback):

2014-03-18  Csaba Osztrogonác  <ossy@webkit.org>

        [GTK] URTFB after r165789. Stub function added.

        * WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        (WebKit::InjectedBundle::setBundleParameter):

2014-03-17  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed, EFL build fix after r165789

        * WebProcess/InjectedBundle/efl/InjectedBundleEfl.cpp:
        (WebKit::InjectedBundle::setBundleParameter): Implemented.

2014-03-17  Jae Hyun Park  <jaepark@webkit.org>

        [GTK] Build fix for debug build

        Unreviewed.

        finalizedListItem was actually used in ASSERT.  So, use ASSERT_UNUSED
        instead of ASSERT.

        * UIProcess/API/gtk/WebKitBackForwardListItem.cpp:
        (webkitBackForwardListItemFinalized):

2014-03-17  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [WK2] Getting rid of compilation warnings
        https://bugs.webkit.org/show_bug.cgi?id=130348

        Reviewed by Benjamin Poulain.

        * UIProcess/API/APIHistoryClient.h:
        (API::HistoryClient::didPerformClientRedirect):
        (API::HistoryClient::didPerformServerRedirect):
        (API::HistoryClient::didUpdateHistoryTitle):
        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::didStartProvisionalLoadForFrame):
        (API::LoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame):
        (API::LoaderClient::didFailProvisionalLoadWithErrorForFrame):
        (API::LoaderClient::didCommitLoadForFrame):
        (API::LoaderClient::didFinishLoadForFrame):
        (API::LoaderClient::didFailLoadWithErrorForFrame):
        (API::LoaderClient::didChangeBackForwardList):
        * UIProcess/API/APIPolicyClient.h:
        (API::PolicyClient::decidePolicyForNavigationAction):
        (API::PolicyClient::decidePolicyForNewWindowAction):
        (API::PolicyClient::decidePolicyForResponse):
        (API::PolicyClient::unableToImplementPolicy):
        * UIProcess/API/APIUIClient.h:
        (API::UIClient::exceededDatabaseQuota):
        (API::UIClient::saveDataToFileInDownloadsFolder):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        * UIProcess/APISession.cpp:
        (API::generateID):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::viewStateDidChange):

2014-03-17  Anders Carlsson  <andersca@apple.com>

        Update the bundle parameters dictionary and send out KVO notifications
        https://bugs.webkit.org/show_bug.cgi?id=130379
        <rdar://problem/16213914>

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _setObject:forBundleParameter:]):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.mm:
        (-[WKWebProcessBundleParameters setParameter:forKey:]):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::setBundleParameter):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setInjectedBundleParameter):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2014-03-17  Tim Horton  <timothy_horton@apple.com>

        Address some style nits.

        * UIProcess/API/Cocoa/_WKThumbnailViewInternal.h:

2014-03-17  Simon Fraser  <simon.fraser@apple.com>

        Address some style nits.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2014-03-17  Simon Fraser  <simon.fraser@apple.com>

        Add transparent window support back into MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=130363

        Reviewed by Anders Carlsson.
        
        Expose SPI for transparent window support.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _drawsTransparentBackground]):
        (-[WKWebView _setDrawsTransparentBackground:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2014-03-17  Alexey Proskuryakov  <ap@apple.com>

        Undo some accidental Gtk changes from http://trac.webkit.org/changeset/165759

        * UIProcess/WebPageProxy.cpp:
        * WebProcess/WebPage/WebPage.messages.in:

2014-03-17  Csaba Osztrogonác  <ossy@webkit.org>

        [WK2] URTBF after r165755 for non Apple platforms, stub functions added.

        * WebProcess/InjectedBundle/efl/InjectedBundleEfl.cpp:
        (WebKit::InjectedBundle::platformInitialize):
        * WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        (WebKit::InjectedBundle::platformInitialize):

2014-03-17  Alexey Proskuryakov  <ap@apple.com>

        Move convertToRange() helper to cross-platform WebPage.cpp
        https://bugs.webkit.org/show_bug.cgi?id=130365

        Reviewed by Tim Horton.

        Also renamed it to rangeFromEditingLocationAndLength().

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::rangeFromEditingLocationAndLength):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::insertText):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::setComposition):
        (WebKit::WebPage::insertText):
        (WebKit::WebPage::insertDictatedText):
        (WebKit::WebPage::getAttributedSubstringFromRange):
        (WebKit::WebPage::characterIndexForPoint):
        (WebKit::WebPage::firstRectForCharacterRange):

2014-03-17  Anders Carlsson  <andersca@apple.com>

        Follow-up fix.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.h:

2014-03-17  Enrica Casucci  <enrica@apple.com>

        WK2: support data detectors driven action sheet..
        https://bugs.webkit.org/show_bug.cgi?id=130362
        <rdar://problem/16319711>

        Reviewed by Benjamin Poulain.

        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant showDataDetectorsSheet]):

2014-03-17  Anders Carlsson  <andersca@apple.com>

        Fix 32-bit OS X build.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.mm:
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::platformInitialize):

2014-03-17  Jae Hyun Park  <jaepark@webkit.org>

        [GTK][CMake] Fix WebKit2 unused parameter warnings
        https://bugs.webkit.org/show_bug.cgi?id=130316

        Reviewed by Martin Robinson.

        * Platform/gtk/WorkQueueGtk.cpp: Fix unused parameter warnings.
        * UIProcess/API/gtk/PageClientImpl.cpp: Ditto.
        * UIProcess/API/gtk/WebKitBackForwardListItem.cpp: Ditto.
        * UIProcess/API/gtk/WebKitContextMenuClient.cpp: Ditto.
        * UIProcess/API/gtk/WebKitContextMenuItem.cpp: Ditto.
        * UIProcess/API/gtk/WebKitDownloadClient.cpp: Ditto.
        * UIProcess/API/gtk/WebKitFaviconDatabase.cpp: Ditto.
        * UIProcess/API/gtk/WebKitFindController.cpp: Ditto.
        * UIProcess/API/gtk/WebKitFormClient.cpp: Ditto.
        * UIProcess/API/gtk/WebKitGeolocationProvider.cpp: Ditto.
        * UIProcess/API/gtk/WebKitLoaderClient.cpp: Ditto.
        * UIProcess/API/gtk/WebKitPlugin.cpp: Ditto.
        * UIProcess/API/gtk/WebKitPolicyClient.cpp: Ditto.
        * UIProcess/API/gtk/WebKitRequestManagerClient.cpp: Ditto.
        * UIProcess/API/gtk/WebKitTextChecker.cpp: Ditto.
        * UIProcess/API/gtk/WebKitUIClient.cpp: Ditto.
        * UIProcess/API/gtk/WebKitURISchemeRequest.cpp: Ditto.
        * UIProcess/API/gtk/WebKitWebContext.cpp: Ditto.
        * UIProcess/API/gtk/WebKitWebInspector.cpp: Ditto.
        * UIProcess/API/gtk/WebKitWebView.cpp: Ditto.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp: Ditto.
        * UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp: Ditto.
        * UIProcess/API/gtk/WebViewBaseInputMethodFilter.cpp: Ditto.
        * UIProcess/gtk/TextCheckerGtk.cpp: Ditto.
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp: Ditto.
        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp: Ditto.
        * WebProcess/InjectedBundle/API/gtk/WebKitFrame.cpp: Ditto.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebExtension.cpp: Ditto.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp: Ditto.
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp: Ditto.
        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp: Ditto.

2014-03-17  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Standardize on start/length in text input IPC methods
        https://bugs.webkit.org/show_bug.cgi?id=130359

        Reviewed by Anders Carlsson.

        Some IPC methods used start/length, and others use start/end. This was confusing.

        While here, changed WebPageMac.mm to not use NSMakeRange where we don't need it
        (I want to move this code to WebPage.cpp, where it could be shared with iOS and
        other platforms, as it doesn't depend on Foundation much).

        * UIProcess/API/mac/WKView.mm:
        (-[WKView insertText:replacementRange:]):
        (-[WKView setMarkedText:selectedRange:replacementRange:]):
        (-[WKView attributedSubstringForProposedRange:actualRange:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setComposition):
        (WebKit::WebPageProxy::insertText):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setComposition):
        (WebKit::WebPageProxy::insertText):
        (WebKit::WebPageProxy::insertDictatedText):
        (WebKit::WebPageProxy::getAttributedSubstringFromRange):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setComposition):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::setComposition):
        (WebKit::WebPage::insertText):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::setComposition):
        (WebKit::WebPage::insertText):
        (WebKit::WebPage::insertDictatedText):
        (WebKit::WebPage::getAttributedSubstringFromRange):
        (WebKit::convertToRange):
        (WebKit::WebPage::firstRectForCharacterRange):

2014-03-17  Tim Horton  <timothy_horton@apple.com>

        Rename WKThumbnailView to _WKThumbnailView
        https://bugs.webkit.org/show_bug.cgi?id=130361

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/_WKThumbnailView.h: Renamed from Source/WebKit2/UIProcess/API/Cocoa/WKThumbnailView.h.
        * UIProcess/API/Cocoa/_WKThumbnailView.mm: Renamed from Source/WebKit2/UIProcess/API/Cocoa/WKThumbnailView.mm.
        (-[_WKThumbnailView initWithFrame:fromWKView:]):
        (-[_WKThumbnailView _viewWasUnparented]):
        (-[_WKThumbnailView _viewWasParented]):
        (-[_WKThumbnailView _requestSnapshotIfNeeded]):
        (-[_WKThumbnailView _didTakeSnapshot:]):
        (-[_WKThumbnailView viewDidMoveToWindow]):
        (-[_WKThumbnailView setScale:]):
        (-[_WKThumbnailView setUsesSnapshot:]):
        (-[_WKThumbnailView _setThumbnailLayer:]):
        (-[_WKThumbnailView _thumbnailLayer]):
        * UIProcess/API/Cocoa/_WKThumbnailViewInternal.h: Renamed from Source/WebKit2/UIProcess/API/Cocoa/WKThumbnailViewInternal.h.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setThumbnailView:]):
        (-[WKView _thumbnailView]):
        (-[WKView _updateThumbnailViewLayer]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/mac/PageClientImpl.mm:
        * WebKit2.xcodeproj/project.pbxproj:

2014-03-17  Anders Carlsson  <andersca@apple.com>

        Add SPI for getting bundle parameters from the injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=130355

        Reviewed by Dan Bernstein.

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.h: Copied from Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.mm: Copied from Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h.
        (-[WKWebProcessBundleParameters initWithDictionary:]):
        (-[WKWebProcessBundleParameters valueForKey:]):
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm:
        (-[WKWebProcessPlugInController parameters]):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::InjectedBundle):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (WebKit::InjectedBundle::create):
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::bundleParameters):
        (WebKit::InjectedBundle::platformInitialize):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2014-03-17  Brent Fulgham  <bfulgham@apple.com>

        Provide preference to enable additional AVFoundation options
        https://bugs.webkit.org/show_bug.cgi?id=130275

        Reviewed by Eric Carlson.

        * Shared/WebPreferencesStore.h: Added new preference.
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetEnableInheritURIQueryComponent): Added.
        (WKPreferencesGetEnableInheritURIQueryComponent): Added.
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Handle new preference.

2014-03-17  Alexey Proskuryakov  <ap@apple.com>

        [Mac] getAttributedSubstringFromRange arguments are incorrectly named
        https://bugs.webkit.org/show_bug.cgi?id=130349

        Reviewed by Tim Horton.

        There is a mess of start/end and start/length pairs in IPC. One day we'll fix them
        all, but now, let's at least name them correctly.

        No behavior change.

        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::getAttributedSubstringFromRange):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::getAttributedSubstringFromRange):

2014-03-17  Tim Horton  <timothy_horton@apple.com>

        WKThumbnailView should support snapshots
        https://bugs.webkit.org/show_bug.cgi?id=130335
        <rdar://problem/16255139>

        Reviewed by Simon Fraser.

        Add a mode where WKThumbnailView takes a software snapshot of the web content,
        replacing the live layer tree with said snapshot once it returns from the
        web process. This may improve animation performance in cases where the
        layer tree would otherwise be very complex.

        * UIProcess/API/Cocoa/WKThumbnailView.h:
        Add a property, usesSnapshot, which determines whether the thumbnail view
        should use the live layer tree or a snapshot of the content.

        * UIProcess/API/Cocoa/WKThumbnailView.mm:
        (-[WKThumbnailView initWithFrame:fromWKView:]):
        (-[WKThumbnailView _viewWasUnparented]):
        Clear the snapshot when unparented.

        (-[WKThumbnailView _viewWasParented]):
        Take a snapshot of the web content when parented, if needed.

        (-[WKThumbnailView _requestSnapshotIfNeeded]):
        If we're using snapshots, and haven't already dispatched an async snapshot request,
        and don't already have a snapshot, request a snapshot from the web process.

        When it returns, use it as the contents of the WKThumbnailView layer, and
        unparent the live layer tree.

        (-[WKThumbnailView setScale:]):
        (-[WKThumbnailView setUsesSnapshot:]):
        (-[WKThumbnailView _setThumbnailLayer:]):
        (-[WKThumbnailView _thumbnailLayer]):
        * UIProcess/API/Cocoa/WKThumbnailViewInternal.h:

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setAcceleratedCompositingModeRootLayer:]):
        (-[WKView _acceleratedCompositingModeRootLayer]):
        WKView should always keep track of the current root layer, instead of totally
        handing control over to WKThumbnailView when it is used.

        (-[WKView _setThumbnailView:]):
        (-[WKView _updateThumbnailViewLayer]):
        (-[WKView _reparentLayerTreeInThumbnailView]):
        If needed (either we're not using snapshots, or still waiting for the snapshot to be painted),
        push the WKView's live layer tree into the thumbnail view.

        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::takeThumbnailSnapshot):
        Add a message that asynchronously returns a snapshot that respects the
        current thumbnail scale and position.

        (WebKit::WebPage::scaledSnapshotWithOptions):
        Use some nullptr.

        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::transform):
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        Add a getter for the DrawingArea's transform.
        Rename it to rootLayerTransform.

2014-03-17  Zan Dobersek  <zdobersek@igalia.com>

        Use RunLoop objects through references instead of pointers
        https://bugs.webkit.org/show_bug.cgi?id=130313

        Reviewed by Andreas Kling.

        Adjust the code accordingly now that RunLoop::current() and RunLoop::main()
        return RunLoop reference instead of a pointer.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::didClose):
        (WebKit::DatabaseProcess::didReceiveInvalidMessage):
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
        (WebKit::UniqueIDBDatabase::postMainThreadTask):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didClose):
        (WebKit::NetworkProcess::didReceiveInvalidMessage):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::SyncMessageState::getOrCreate):
        (IPC::Connection::SyncMessageState::SyncMessageState):
        (IPC::Connection::SyncMessageState::~SyncMessageState):
        (IPC::Connection::SyncMessageState::processIncomingMessage):
        (IPC::Connection::SyncMessageState::dispatchMessages):
        (IPC::Connection::createServerConnection):
        (IPC::Connection::createClientConnection):
        (IPC::Connection::Connection):
        (IPC::Connection::addWorkQueueMessageReceiver):
        (IPC::Connection::removeWorkQueueMessageReceiver):
        (IPC::Connection::sendSyncMessage):
        (IPC::Connection::sendSyncMessageFromSecondaryThread):
        (IPC::Connection::waitForSyncReply):
        (IPC::Connection::processIncomingMessage):
        (IPC::Connection::connectionDidClose):
        (IPC::Connection::dispatchDidReceiveInvalidMessage):
        (IPC::Connection::enqueueIncomingMessage):
        (IPC::Connection::wakeUpRunLoop):
        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.cpp:
        (IPC::Connection::receiveSourceEventHandler):
        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::stopRunLoop):
        * Shared/Plugins/NPObjectProxy.cpp:
        (WebKit::NPObjectProxy::NP_Deallocate):
        * UIProcess/Launcher/efl/ProcessLauncherEfl.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToService):
        (WebKit::tryPreexistingProcess):
        (WebKit::createProcess):
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::getOrigins):
        (WebKit::StorageManager::getStorageDetailsByOrigin):
        * UIProcess/Storage/StorageManager.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::pluginThreadAsyncCall):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::unprotectPluginFromDestruction):
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::wheelEvent):
        * WebProcess/WebPage/ViewUpdateDispatcher.cpp:
        (WebKit::ViewUpdateDispatcher::visibleContentRectUpdate):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):

2014-03-17  Giovanni Campagna  <gcampagna@src.gnome.org>

        [GTK] Don't busy loop when the socket is full
        https://bugs.webkit.org/show_bug.cgi?id=129802

        Reviewed by Carlos Garcia Campos.

        When the socket is full and we see EAGAIN or EWOULDBLOCK
        (because the socket is non blocking), don't busy loop by
        tring to write again, instead poll() until the socket
        becomes writable.

        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::sendOutgoingMessage):

2014-03-17  Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMake] Ensure that HAVE_GTK_UNIX_PRINTING is defined when appropriate
        https://bugs.webkit.org/show_bug.cgi?id=130155

        Reviewed by Philippe Normand.

        * PlatformGTK.cmake: Add GTK_UNIX_PRINT flags to the build.

2014-03-17  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Restore cursor when moving mouse into webview
        https://bugs.webkit.org/show_bug.cgi?id=130182

        Reviewed by Gyuyoung Kim.

        We changed mouse cursor when the type of cursor is changed.
        But once mouse is moved out of webview, ewebkit will not know whether cursor
        is changed or not.

        So, this patch added a logic to restore the last applied type of cursor when
        mouse is moved into webview again.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkViewEventHandler<EVAS_CALLBACK_MOUSE_IN>::handleEvent):
        Call updateCursor to restore the last applied type of cursor.
        (EwkView::EwkView):
        (EwkView::updateCursor): Extracted from setCursor.
        (EwkView::setCursor):
        (EwkView::handleEvasObjectAdd):
        * UIProcess/API/efl/EwkView.h:

2014-03-16  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Add ewk_application_cache_manager APIs
        https://bugs.webkit.org/show_bug.cgi?id=102853

        Reviewed by Gyuyoung Kim.

        Implemented application cache manager to get list of origins which stores
        application cache and remove specified origin or all.

        * PlatformEfl.cmake: Added newly added files.
        * UIProcess/API/efl/ewk_application_cache_manager.cpp: Added.
        (EwkApplicationCacheManager::EwkApplicationCacheManager):
        (EwkApplicationCacheManager::~EwkApplicationCacheManager):
        (Get_Origins_Data::Get_Origins_Data):
        (getApplicationCacheOriginsCallback):
        (ewk_application_cache_manager_origins_get):
        (ewk_application_cache_origins_free):
        (ewk_application_cache_manager_delete_all):
        (ewk_application_cache_manager_delete):
        * UIProcess/API/efl/ewk_application_cache_manager.h: Added.
        * UIProcess/API/efl/ewk_application_cache_manager_private.h: Added.
        (EwkApplicationCacheManager::impl):
        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::applicationCacheManager):
        (ewk_context_application_cache_manager_get):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_private.h:
        * UIProcess/API/efl/ewk_security_origin_private.h:
        (EwkSecurityOrigin::wkSecurityOrigin):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestServer.cpp:
        (EWK2UnitTestServer::port):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestServer.h:
        * UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:
        Added to test application_cache_manager.
        (serverCallback):
        (getOriginsCallback):
        (timerCallback):
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        Added test case to test getter of application_cache_manager.
        (TEST_F):

2014-03-16  Zan Dobersek  <zdobersek@igalia.com>

        Move GTK WebKit2 code to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=129672

        Reviewed by Anders Carlsson.

        Repace uses of OwnPtr and PassOwnPtr in GTK-specific WebKit2 code with std::unique_ptr.

        * Shared/Downloads/Download.h:
        * Shared/Downloads/soup/DownloadSoup.cpp:
        (WebKit::Download::start):
        (WebKit::Download::startWithHandle):
        (WebKit::Download::platformInvalidate):
        * UIProcess/API/gtk/PageClientImpl.cpp:
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/WebKitContextMenuItem.cpp:
        (webkitContextMenuItemCreate):
        (webkitContextMenuItemCreateForGtkItem):
        (webkit_context_menu_item_new):
        (webkit_context_menu_item_new_from_stock_action):
        (webkit_context_menu_item_new_from_stock_action_with_label):
        (webkit_context_menu_item_new_with_submenu):
        (webkit_context_menu_item_new_separator):
        * UIProcess/API/gtk/WebKitTextChecker.h:
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (createDefaultWebContext):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseConstructed):
        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:
        (WebKit::WebPrintOperationGtk::print):
        * WebProcess/gtk/WebGtkExtensionManager.cpp:
        (WebKit::WebGtkExtensionManager::initialize):
        * WebProcess/soup/WebKitSoupRequestInputStream.cpp:
        (webkitSoupRequestInputStreamPendingReadAsyncComplete):
        (webkitSoupRequestInputStreamReadAsync):
        * WebProcess/soup/WebSoupRequestManager.cpp:
        (WebKit::WebSoupRequestManager::send):
        * WebProcess/soup/WebSoupRequestManager.h:

2014-03-16  Brian Burg  <bburg@apple.com>

        Web Inspector: vended backend commands file should be generated as part of the build
        https://bugs.webkit.org/show_bug.cgi?id=130110

        Reviewed by Timothy Hatcher.

        * PlatformGTK.cmake: Copy over generated inspector backend commands files.

2014-03-16  Darin Adler  <darin@apple.com>

        Try to fix 32-bit Mac build.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm: Add missing include.

2014-03-16  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix after r165692.

        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::TextChecker::checkSpellingOfString):
        (WebKit::TextChecker::checkGrammarOfString):

2014-03-15  Darin Adler  <darin@apple.com>

        Remove all uses of deprecatedCharacters from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=130197

        Reviewed by Andreas Kling.

        * Shared/APIString.h: Rewrote getCharacters to use StringView,
        substring, and getCharactersWithUpconvert. Added an 8-bit case
        to getUTF8CString.

        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::writeByte): Added.
        (WebKit::writeCharacter): Added.
        (WebKit::writeLine): Added. Uses operator[] instead of characters16 to get
        the UTF-16 characters out of the string.
        (WebKit::NetscapePluginModule::scanPlugin): Replaced code that writes out
        text to stdout with much simpler version using the functions above.

        * UIProcess/TextChecker.h: Changed text arguments to use StringView instead
        of UChar/int pairs.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu): Updated to pass StringView.

        * UIProcess/efl/TextCheckerEfl.cpp:
        (WebKit::nextWordOffset): Changed function to use StringView and unsigned.
        (WebKit::TextChecker::checkTextOfParagraph): Changed to use StringView and
        substring.
        (WebKit::TextChecker::checkSpellingOfString): Ditto.
        (WebKit::TextChecker::checkGrammarOfString): Ditto.
        (WebKit::TextChecker::requestCheckingOfString): Pass in a StringView, so no
        need to call deprecatedCharacters.

        * UIProcess/ios/TextCheckerIOS.mm:
        (WebKit::TextChecker::checkTextOfParagraph): Changed to take StringView.
        (WebKit::TextChecker::checkSpellingOfString): Ditto.
        (WebKit::TextChecker::checkGrammarOfString): Ditto.

        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::checkTextOfParagraph): Changed to take StringView and
        use StringView::createNSStringWithoutCopying.
        (WebKit::TextChecker::checkSpellingOfString): CHanged to take StringView.
        (WebKit::TextChecker::checkGrammarOfString): Ditto.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::convertStringToKeyCodes): Changed to take StringView and use
        upconvertedCharacters instead of deprecatedCharacters. Also use move instead
        of swap.
        (WebKit::NetscapePlugin::sendComplexTextInput): Updated to new style for loop.

        * WebProcess/WebPage/EncoderAdapter.cpp:
        (WebKit::EncoderAdapter::encodeString): Use StringView::upconvertedCharacters
        instead of String::deprecatedCharacters.

2014-03-15  David Kilzer  <ddkilzer@apple.com>

        [iOS] Define SYSTEM_VERSION_PREFIX consistently
        <http://webkit.org/b/130293>
        <rdar://problem/15926359>

        Reviewed by Dan Bernstein.

        * Configurations/Version.xcconfig:
        (SYSTEM_VERSION_PREFIX): Sync with
        Source/WebKit/mac/Version.xcconfig.

2014-03-14  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Sync extended attribute related rules with AppSandbox profile
        https://bugs.webkit.org/show_bug.cgi?id=130263
        <rdar://problem/16318965>

        Reviewed by Sam Weinig.

        Update the fix to use a different syntax in some OS versions.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb:
        * WebProcess/com.apple.WebProcess.sb.in:

2014-03-14  Ryosuke Niwa  <rniwa@webkit.org>

        Revert erroneous changes made to UIProcess/API/Cocoa in r165676.

        * UIProcess/API/Cocoa/WKBackForwardList.h:
        * UIProcess/API/Cocoa/WKBackForwardListItem.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKBackForwardListItem.h.
        * UIProcess/API/Cocoa/WKNavigation.h:
        * UIProcess/API/Cocoa/WKNavigationAction.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKNavigationAction.h.
        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        (NS_ENUM):
        * UIProcess/API/Cocoa/WKNavigationResponse.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKNavigationResponse.h.
        * UIProcess/API/Cocoa/WKNavigationTrigger.h: Removed.
        * UIProcess/API/Cocoa/WKWebView.h:

2014-03-14  Mark Rowe  <mrowe@apple.com>

        Fix the production build.

        Don't rely on USE_INTERNAL_SDK being set for the Production configuration since UseInternalSDK.xcconfig won't
        be at the expected relative path when working from installed source.

        * Configurations/Base.xcconfig:

2014-03-14  Maciej Stachowiak  <mjs@apple.com>

        Replace "Apple Computer, Inc." with "Apple Inc." in copyright headers
        https://bugs.webkit.org/show_bug.cgi?id=130276
        <rdar://problem/16266927>
        
        Reviewed by Simon Fraser.

        * Shared/AsyncRequest.cpp:
        * Shared/AsyncRequest.h:
        * Shared/ContextMenuContextData.cpp:
        * Shared/ContextMenuContextData.h:
        * Shared/Databases/DatabaseProcessCreationParameters.h:
        * Shared/Databases/IndexedDB/IDBUtilities.cpp:
        * Shared/Databases/IndexedDB/IDBUtilities.h:
        * Shared/mac/RemoteLayerBackingStore.h:
        * Shared/mac/RemoteLayerBackingStore.mm:
        * UIProcess/API/Cocoa/WKBackForwardList.h:
        * UIProcess/API/Cocoa/WKBackForwardListItem.h: Removed.
        * UIProcess/API/Cocoa/WKNavigation.h:
        * UIProcess/API/Cocoa/WKNavigationAction.h: Removed.
        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        * UIProcess/API/Cocoa/WKNavigationResponse.h: Removed.
        * UIProcess/API/Cocoa/WKNavigationTrigger.h: Added.
        (NS_ENUM):
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/CoordinatedGraphics/WKCoordinatedScene.cpp:
        * UIProcess/API/CoordinatedGraphics/WKCoordinatedScene.h:
        * UIProcess/CoordinatedGraphics/WKCoordinatedSceneAPICast.h:
        * WebProcess/Databases/IndexedDB/WebIDBFactoryBackend.cpp:
        * WebProcess/Databases/IndexedDB/WebIDBFactoryBackend.h:
        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp:
        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.h:
        * WebProcess/Databases/WebToDatabaseProcessConnection.cpp:
        * WebProcess/Databases/WebToDatabaseProcessConnection.h:
        * WebProcess/WebCoreSupport/WebAlternativeTextClient.h:
        * WebProcess/WebCoreSupport/mac/WebAlternativeTextClient.cpp:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        * WebProcess/WebPage/mac/GraphicsLayerCARemote.cpp:
        * WebProcess/WebPage/mac/GraphicsLayerCARemote.h:
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:
        * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.h:
        * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.mm:
        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.cpp:
        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.h:

2014-03-14  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] background-attachment: fixed renders oddly, moves around
        https://bugs.webkit.org/show_bug.cgi?id=130277
        <rdar://problem/16332883>

        Reviewed by Tim Horton.
        
        Actually send scrolling and counter-scrolling layers to the UI process!

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateScrollingNode>::decode):

2014-03-14  Anders Carlsson  <andersca@apple.com>

        Try to fix the iOS build.

        * UIProcess/mac/WebContextMac.mm:

2014-03-14  Anders Carlsson  <andersca@apple.com>

        Begin work on the bundle parameter API
        https://bugs.webkit.org/show_bug.cgi?id=130267

        Reviewed by Dan Bernstein.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _objectForBundleParameter:]):
        (-[WKProcessPool _setObject:forBundleParameter:]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/WebContext.h:
        (WebKit::WebContext::bundleParameters):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::ensureBundleParameters):
        (WebKit::WebContext::platformInitializeWebProcess):

2014-03-14  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Sync extended attribute related rules with AppSandbox profile
        https://bugs.webkit.org/show_bug.cgi?id=130263
        <rdar://problem/16318965>

        Reviewed by Sam Weinig.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/PlugInSandboxProfiles/com.apple.QuickTime Plugin.plugin.sb:
        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb:
        * Resources/PlugInSandboxProfiles/com.apple.ist.ds.appleconnect.webplugin.sb:
        * Resources/PlugInSandboxProfiles/com.macromedia.Flash Player.plugin.sb:
        * Resources/PlugInSandboxProfiles/com.microsoft.SilverlightPlugin.sb:
        * Resources/PlugInSandboxProfiles/com.oracle.java.JavaAppletPlugin.sb:
        * WebProcess/com.apple.WebProcess.sb.in:

2014-03-14  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Improve behavior of fixed elments on zooming
        https://bugs.webkit.org/show_bug.cgi?id=130253

        Reviewed by Beth Dakin.

        Correctly reposition right- and bottom-relative position:fixed
        elements on zooming in WK2 iOS by telling the scrolling tree
        about zoom-related viewport changes.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::notePropertiesChanged):
        Drive-by cleanup; typedef the flags field to an unsigned, to avoid ugly casting.
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::updateScrollingTree): Pass out a flag to say
        if the update contained a new fixed or sticky layer.
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        (WebKit::RemoteScrollingCoordinatorProxy::viewportChangedViaDelegatedScrolling):
        Call into the new ScrolingTree::viewportChangedViaDelegatedScrolling().
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm: If we got a new fixed
        or sticky layer, set fixedOrStickyLayerChanged to true.
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers): Ditto.
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:scale:inStableState:]):
        Remember both the old zoomScale and the filteredScale, since the fixed position rect
        should be computed using the unfiltered scale.
        Some FloatRect -> CGRect changes.
        Now call viewportChangedViaDelegatedScrolling() on the scrolling coordinator.
        (-[WKContentView fixedPositionRectFromExposedRect:scale:]): Call the
        FrameView function to compute the iOS fixed position rect.
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree): If the update
        got a new fixed or sticky layer, run the scrolling tree logic to make sure
        it gets into the right place.
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree): If we logged here,
        we'd log twice if the tiled scrolling indicator was enabled, so 
        hoisted the logging out into the caller.

2014-03-14  Landry Breuil  <landry@openbsd.org>

        Use the correct type in webkitSoupRequestInputStreamNew()'s declaration.
        Nhttps://bugs.webkit.org/show_bug.cgi?id=129974

        Reviewed by Andreas Kling.

        * WebProcess/soup/WebKitSoupRequestInputStream.h:

2014-03-14  Anders Carlsson  <andersca@apple.com>

        Fix crash when resizing the visited link table
        https://bugs.webkit.org/show_bug.cgi?id=130257
        <rdar://problem/16328177>

        Reviewed by Dan Bernstein.

        We're iterating over the old table, so use currentTableSize in the loop termination condition.

        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::resizeTable):

2014-03-14  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Expose a way to set the cookie accept policy
        https://bugs.webkit.org/show_bug.cgi?id=130251

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (toHTTPCookieAcceptPolicy): Added a helper function that maps from NSHTTPCookieAcceptPolicy
        values to WebKit::HTTPCookieAcceptPolicy values.
        (-[WKProcessPool _setCookieAcceptPolicy:]): Added. Calls
        WebCookieManagerProxy::setHTTPCookieAcceptPolicy. 
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h: Declared new method.

2014-03-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKit2WebExtension GIR can't be used in vala
        https://bugs.webkit.org/show_bug.cgi?id=127179

        Reviewed by Martin Robinson.

        Do not include all WebKit2 gir symbols from WebKit2WebExtension gir
        file.

        * GNUmakefile.am:
        * PlatformGTK.cmake:

2014-03-14  Csaba Osztrogonác  <ossy@webkit.org>

        [CMake] URTBF after r165619.

        * CMakeLists.txt: Add new files.

2014-03-14  Anders Carlsson  <andersca@apple.com>

        Remove WebContext::addVisitedLink
        https://bugs.webkit.org/show_bug.cgi?id=130242

        Reviewed by Dan Bernstein.

        Fold the function into WKContextAddVisitedLink instead.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextAddVisitedLink):
        * UIProcess/WebContext.cpp:
        * UIProcess/WebContext.h:
        (WebKit::WebContext::visitedLinkProvider):

2014-03-13  Anders Carlsson  <andersca@apple.com>

        Move visited link handling to VisitedLinkTableController and VisitedLinkProvider
        https://bugs.webkit.org/show_bug.cgi?id=130223
        <rdar://problem/16315792>

        Reviewed by Dan Bernstein.

        * DerivedSources.make:
        Generate messages for VisitedLinkProvider and VisitedLinkTableController.
        
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):
        Set the visited link provider.

        * UIProcess/API/Cocoa/_WKVisitedLinkProvider.h:
        Add addVisitedLinkWithURL: method.

        * UIProcess/API/Cocoa/_WKVisitedLinkProvider.mm:
        (-[_WKVisitedLinkProvider addVisitedLinkWithURL:]):
        Compute a link hash from the absolute URL string and pass it to the underlying VisitedLinkProvider object.

        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::addProcess):
        Add the process to the m_processes HashCountedSet. If it's the first time we're adding the process, 
        add the VisitedLinkProvider object as a message receiver and send the visited link table to the process.

        (WebKit::VisitedLinkProvider::removeProcess):
        Remove the process from the m_processes HashCountedSet. If we're removing the last reference to the process,
        remove ourselves as a  message receiver.

        (WebKit::VisitedLinkProvider::addVisitedLinkHash):
        Rename this from addVisitedLink to better indicate what it's doing.

        (WebKit::tableSizeForKeyCount):
        Update for constant rename.

        (WebKit::VisitedLinkProvider::pendingVisitedLinksTimerFired):
        Compute the new pending visited links table size. If it's bigger than our current table, resize the table
        by calling resizeTable. Otherwise, simply try to add the pending hashes to our shared hash table. If successful,
        add the link hash to the addedVisitedLinks table and eventually send it to all processes associated with the visited link provider.

        (WebKit::VisitedLinkProvider::resizeTable):
        Create a new shared memory segment, Set it as the table backing store and add all visited links from the old table. Finally,
        add our pending visited link hashes and send the new table memory to all processes associated with the visited link provider.

        (WebKit::VisitedLinkProvider::sendTable):
        Helper function that creates a shared memory handle and sends it to a given web process.

        * UIProcess/VisitedLinkProvider.h:
        Add new members.

        * UIProcess/VisitedLinkProvider.messages.in:
        Add messages.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::processDidFinishLaunching):
        (WebKit::WebContext::disconnectProcess):
        The WebContext no longer needs to inform the visited link provider about the processes coming and going, that's already handled
        by the WebPageProxy objects.

        (WebKit::WebContext::addVisitedLink):
        Call addVisitedLinkHash on the visited link provider.

        * UIProcess/WebContext.h:
        * UIProcess/WebContext.messages.in:
        Remove a message that is now implemented by the visited link provider.

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

        * WebProcess/WebPage/VisitedLinkTableController.cpp:
        (WebKit::VisitedLinkTableController::VisitedLinkTableController):
        Add the table controller as a message receiver.

        (WebKit::VisitedLinkTableController::~VisitedLinkTableController):
        Remove the table controller as a message receiver.

        (WebKit::VisitedLinkTableController::isLinkVisited):
        Check if the link is visited according to the visited link table.

        (WebKit::VisitedLinkTableController::addVisitedLink):
        Send the link hash to the UI process if it's not already visited.

        (WebKit::VisitedLinkTableController::setVisitedLinkTable):
        Set the backing store memory and invalidate all styles.

        (WebKit::VisitedLinkTableController::visitedLinkStateChanged):
        Invalidate the styles for the given links.

        (WebKit::VisitedLinkTableController::allVisitedLinkStateChanged):
        Invalidate the styles for all links.

        * WebProcess/WebPage/VisitedLinkTableController.h:
        Add new members.

        * WebProcess/WebPage/VisitedLinkTableController.messages.in:
        Add new messages.

        * WebProcess/WebProcess.cpp:
        Remove unused functions; these are handled by VisitedLinkTableController now.

        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::shouldTrackVisitedLinks):
        Add getter.

        * WebProcess/WebProcess.messages.in:
        Remove messages.

2014-03-12  Sergio Villar Senin  <svillar@igalia.com>

        Rename DEFINE_STATIC_LOCAL to DEPRECATED_DEFINE_STATIC_LOCAL
        https://bugs.webkit.org/show_bug.cgi?id=129612

        Reviewed by Darin Adler.

        For new code use static NeverDestroyed<T> instead.

        * DatabaseProcess/IndexedDB/sqlite/SQLiteIDBCursor.cpp:
        (WebKit::getIndexStatement):
        (WebKit::getObjectStoreStatement):
        * Shared/linux/SeccompFilters/SeccompBroker.cpp:
        (WebKit::SeccompBrokerClient::shared):
        * UIProcess/InspectorServer/WebInspectorServer.cpp:
        (WebKit::WebInspectorServer::didReceiveWebSocketUpgradeHTTPRequest):

2014-03-14  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/16319722> [Cocoa] WKHistoryDelegate is being called for subframes
        https://bugs.webkit.org/show_bug.cgi?id=130228

        Reviewed by Mark Rowe.

        * UIProcess/Cocoa/HistoryClient.mm:
        (WebKit::HistoryClient::didNavigateWithNavigationData): Bail out if the frame is not the
        main frame.
        (WebKit::HistoryClient::didPerformClientRedirect): Ditto.
        (WebKit::HistoryClient::didPerformServerRedirect): Ditto.
        (WebKit::HistoryClient::didUpdateHistoryTitle): Ditto.

2014-03-13  Jinwoo Jeong  <jw00.jeong@samsung.com>

        Refactor Vibration algorithm to use only one timer.
        https://bugs.webkit.org/show_bug.cgi?id=130059

        Reviewed by Darin Adler.

        This patch adds a vibration unit test regression after r161257.
        It consists of two short term requests to check
        that Vibration could work properly by sequential requests.

        Indeed this patch tightens condition of existing tests.

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

2014-03-13  Paul Hankes Drielsma  <phd@apple.com>

        Add SPI to set a custom user agent on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=130164

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _customUserAgent]):
        (-[WKWebView _setCustomUserAgent:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2014-03-13  Paul Hankes Drielsma  <phd@apple.com>

        Add SPI to run javascript in main frame on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=130047

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _runJavaScriptInMainFrame:]):

2014-03-13  Benjamin Poulain  <bpoulain@apple.com>

        The viewport code should not depend on WebKitSystemInterface
        https://bugs.webkit.org/show_bug.cgi?id=130218

        Reviewed by Tim Horton.

        Get the viewport size from the UIProcess when creating a new WebProcess.
        From there, the value is stored in WebPage and used whenever we need to update
        the viewport parameters.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::viewportScreenSize):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::viewportScreenSize):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::viewportScreenSize):

2014-03-13  Beth Dakin  <bdakin@apple.com>

        Do not show extended background during a pinch gesture on iOS
        https://bugs.webkit.org/show_bug.cgi?id=130152
        -and corresponding-
        <rdar://problem/16303819>

        Reviewed by Simon Fraser.

        This patch refactors the backgroundColor-setting logic into its own method so that 
        it can be called from both _didCommitLayerTree and scrollViewDidZoom.

        Only set the UIScrollView’s background color when the zoomScale is greater than or 
        equal to the minimumZoomScale. Also do not set it during the zoom bounce 
        animation. Otherwise, clear the background color by setting it to nil.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView updateScrollViewBackground]):
        (-[WKWebView _didCommitLayerTree:WebKit::]):
        (-[WKWebView scrollViewDidZoom:]):

2014-03-13  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] block selection should avoid large blocks.
        https://bugs.webkit.org/show_bug.cgi?id=130208
        <rdar://problem/16251785>

        Reviewed by Benjamin Poulain.

        When creating a block selection, we should discard blocks that
        are larger than most of the visible portion of the document.
        This prevents the accidental selection the entire document, which
        is fairly common when tapping over empty areas.

        * Shared/InteractionInformationAtPosition.cpp:
        (WebKit::InteractionInformationAtPosition::encode):
        (WebKit::InteractionInformationAtPosition::decode):
        * Shared/InteractionInformationAtPosition.h: Removed selectionRects that was not really needed and
        added isSelectable to indicate whether the selection can start.
        (WebKit::InteractionInformationAtPosition::InteractionInformationAtPosition):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView hasSelectablePositionAtPoint:]): Now uses isSelectable.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation): Takes into account the userSelect property
        to figure out if the element can be selected and discards blocks that are
        larger than 97% of the visible area of the document.

2014-03-13  Anders Carlsson  <andersca@apple.com>

        Rename WKVisitedLinkProvider to _WKVisitedLinkProvider and make it private
        https://bugs.webkit.org/show_bug.cgi?id=130207

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKVisitedLinkProviderPrivate.h: Removed.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _visitedLinkProvider]):
        (-[WKWebViewConfiguration _setVisitedLinkProvider:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/API/Cocoa/_WKVisitedLinkProvider.h: Renamed from Source/WebKit2/UIProcess/API/Cocoa/WKVisitedLinkProvider.h.
        * UIProcess/API/Cocoa/_WKVisitedLinkProvider.mm: Renamed from Source/WebKit2/UIProcess/API/Cocoa/WKVisitedLinkProvider.mm.
        (-[_WKVisitedLinkProvider init]):
        * UIProcess/API/Cocoa/_WKVisitedLinkProviderInternal.h: Renamed from Source/WebKit2/UIProcess/API/Cocoa/WKVisitedLinkProviderInternal.h.
        * WebKit2.xcodeproj/project.pbxproj:

2014-03-13  Anders Carlsson  <andersca@apple.com>

        Remove a commented out member function
        https://bugs.webkit.org/show_bug.cgi?id=130204

        Reviewed by Tim Horton.

        * Shared/ChildProcessProxy.h:
        (WebKit::ChildProcessProxy::canSendMessage):

2014-03-13  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] Crash on iPad when displaying a select element with options.
        https://bugs.webkit.org/show_bug.cgi?id=130200
        <rdar://problem/16316187>

        Reviewed by Simon Fraser.

        _singleSelectionIndex should be initialized to NSNotFound for multiSelect elements.

        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        (-[WKSelectTableViewController initWithView:hasGroups:]):

2014-03-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Close the connection when we fail to read from the socket for any unhandled error
        https://bugs.webkit.org/show_bug.cgi?id=130191

        Reviewed by Martin Robinson.

        We currently show an error message, but we should close the
        connection avoid entering an infinite loop. Also provide more
        information in the error message to help when debugging the issue.

        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::readyReadHandler):

2014-03-13  Radu Stavila  <stavila@adobe.com>

        Webkit not building on XCode 5.1 due to garbage collection no longer being supported
        https://bugs.webkit.org/show_bug.cgi?id=130087

        Reviewed by Mark Rowe.

        Disable garbage collection on macosx when not using internal SDK.

        * Configurations/Base.xcconfig:

2014-03-10  Darin Adler  <darin@apple.com>

        Avoid copy-prone idiom "for (auto item : collection)"
        https://bugs.webkit.org/show_bug.cgi?id=129990

        Reviewed by Geoffrey Garen.

        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::RemoteLayerTreePropertyApplier::applyProperties): Use auto&.

        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode): Use auto&
        even though the type is a scalar. This does no harm and makes it easier
        to spot uses that trigger unnecessary copying with grep.
        (WebKit::RemoteLayerTreeTransaction::decode): Ditto.
        (WebKit::dumpChangedLayers): Ditto.
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree): Ditto.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::visitedLinkStateChanged): Ditto.

2014-03-12  Brian Burg  <bburg@apple.com>

        Web Inspector: Remove unused callId parameter from evaluateInWebInspector
        https://bugs.webkit.org/show_bug.cgi?id=129744

        Reviewed by Timothy Hatcher.

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

2014-03-13  Laszlo Vidacs  <lvidacs.u-szeged@partner.samsung.com>

        Fix the !ENABLE(SQL_DATABASE) build
        https://bugs.webkit.org/show_bug.cgi?id=130130

        Reviewed by Csaba Osztrogonác.

        Add missing #ifdef guard to typedef.

        * UIProcess/API/C/WKDatabaseManager.cpp:

2014-03-12  Dean Jackson  <dino@apple.com>

        [WebGL] WebKit1 + WebKit2 iOS clients should check load policy
        https://bugs.webkit.org/show_bug.cgi?id=130162

        Reviewed by Simon Fraser.

        Implement webGLPolicyForURL() methods for iOS.

        * Configurations/WebContent-iOS.entitlements: Add the MobileAsset asset type.
        * Configurations/WebKit2.xcconfig: Add MobileAsset to iOS link list.
        * WebProcess/WebPage/WebPage.cpp: Exclude iOS.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::webGLPolicyForURL): Call into WKSI.
        (WebKit::WebPage::resolveWebGLPolicyForURL):

2014-03-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Disable REMOTE_INSPECTOR in earlier OS X releases
        https://bugs.webkit.org/show_bug.cgi?id=130118

        Reviewed by Timothy Hatcher.

        * Configurations/FeatureDefines.xcconfig:

2014-03-12  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] Crash when trying to select inside a video element with longpress..
        https://bugs.webkit.org/show_bug.cgi?id=130095
        <rdar://problem/16294534>

        Reviewed by Benjamin Poulain.

        We only need to set the assisted node for nodes that will receive an
        input peripheral (keyboard, picker, popover, etc.).

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::rangeForWebSelectionAtPosition):
        (WebKit::WebPage::elementDidFocus):

2014-03-12  Simon Fraser  <simon.fraser@apple.com>

        Have the scrolling tree track the viewport size, not the viewport rect
        https://bugs.webkit.org/show_bug.cgi?id=130141

        Reviewed by Beth Dakin.

        The scrolling tree only needs to know the size of the viewport, not its
        origin, since the origin is deduced from the updated scroll position.

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateScrollingNode>::decode):

2014-03-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r165481.
        https://bugs.webkit.org/show_bug.cgi?id=130151

        That didn't go well. (Requested by kling on #webkit).

        Reverted changeset:

        https://bugs.webkit.org/show_bug.cgi?id=130140
        http://trac.webkit.org/changeset/165481

2014-03-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Runtime error when page is closed while print operation is in progress
        https://bugs.webkit.org/show_bug.cgi?id=129869

        Reviewed by Anders Carlsson.

        Sometimes when the page is closed right after printing the web
        process aborts with the runtime message "pure virtual method
        called terminate called without an active exception".
        This happens because the page is closed when the pages have been
        printed, but print job is still ongoing sending the data to the
        printer. When print job finishes, we try to notify the UI process
        sending the print callback message using WebPage::send(), but the
        web page object has been destroyed. The virtual method it complains
        about is probably MessageSender::messageSenderDestinationID() used
        by send(). Since our print operation is always asynchronous, we
        need a way to notify the web page when the print operation has
        actually finished to clean it up, but also notify the print
        operation when the page has been closed to not try to notify the
        UI process in that case.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close): Call disconnectFromPage to notify the
        print operation in case there's an ongoing print job.
        (WebKit::WebPage::endPrinting): Do not cleanup the print operation
        here, since the print opertation might not have finished yet.
        (WebKit::WebPage::didFinishPrintOperation): Send
        PrintFinishedCallback message to the Ui process and cleanup the
        print operation.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:
        (WebKit::WebPrintOperationGtk::disconnectFromPage): Set m_webPage
        to nullptr.
        (WebKit::WebPrintOperationGtk::printDone): Call
        didFinishPrintOperation() is the web page hasn't been closed.
        * WebProcess/WebPage/gtk/WebPrintOperationGtk.h:

2014-03-12  Andreas Kling  <akling@apple.com>

        BundlePageDiagnosticLoggingClient leaks every string passing through it.
        <https://webkit.org/b/130140>
        <rdar://problem/15416838>

        Use toAPI() instead of toCopiedAPI() so the receiving end doesn't need
        to worry about adopting the WKStringRef.

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/InjectedBundlePageDiagnosticLoggingClient.cpp:
        (WebKit::InjectedBundlePageDiagnosticLoggingClient::logDiagnosticMessage):

2014-03-12  Tim Horton  <timothy_horton@apple.com>

        Hook up image controls for WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=130062
        <rdar://problem/15964809>

        Reviewed by Brady Eidson.

        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::ContextMenuContextData):

2014-03-11  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r165356): [Mac] Multi-part key bindings don't work
        https://bugs.webkit.org/show_bug.cgi?id=130100

        Reviewed by Darin Adler.

        Restore the previous behavior, where we only interpreted keydowns (including those
        coming through performKeyEquivalent).

        In the future, we might send all events to input methods, but not to key bindings.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView keyUp:]):
        (-[WKView flagsChanged:]):

2014-03-11  Beth Dakin  <bdakin@apple.com>

        _pageExtendedBackgroundColor should not be exposed on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=130093

        Reviewed by Simon Fraser.

        Added comment indicating that _pageExtendedBackgroundColor is deprecated.
        * UIProcess/API/Cocoa/WKViewPrivate.h:

        _pageExtendedBackgroundColor now returns nil, but the conversation functionality 
        is maintained with a convenience method pageExtendedBackgroundColor.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView pageExtendedBackgroundColor]):
        (-[WKWebView _didCommitLayerTree:WebKit::]):
        (-[WKWebView _pageExtendedBackgroundColor]):

        Added comment indicating that _pageExtendedBackgroundColor is deprecated.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

        Return nil.
        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView _pageExtendedBackgroundColor]):

2014-03-11  Jae Hyun Park  <jaepark@webkit.org>

        [GTK][CMake] Add HARFBUZZ_INCLUDE_DIRS to WebKit and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=130070

        Reviewed by Martin Robinson.

        * PlatformGTK.cmake:

2014-03-10  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Expose WebPageProxy::close
        https://bugs.webkit.org/show_bug.cgi?id=130068

        Reviewed by Adele Peterson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _close]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2014-03-10  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WebKit 2] Wire the unobscured rect in the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=130058

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):

2014-03-10  Simon Fraser  <simon.fraser@apple.com>

        Fix three leaks
        https://bugs.webkit.org/show_bug.cgi?id=130048

        Reviewed by Anders Carlsson.

        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (decodeObject): Code is simpler and less leaky without the RetainPtr.
        * UIProcess/API/Cocoa/WKNavigationAction.mm: Fix _originalURL leak
        by making it a RetainPtr and implementing the getter and setter.
        (-[WKNavigationAction _setOriginalURL:]):
        (-[WKNavigationAction _originalURL]):

2014-03-10  Beth Dakin  <bdakin@apple.com>

        Set background color of WK2's UIScrollView to the pageExtendedBackgroundColor
        https://bugs.webkit.org/show_bug.cgi?id=129919

        Reviewed by Benjamin Poulain.

        Make the pageExtendedBackgroundColor part of a RemoteLayerTreeTransaction.
        * Shared/mac/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::pageExtendedBackgroundColor):
        (WebKit::RemoteLayerTreeTransaction::setPageExtendedBackgroundColor):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode):
        (WebKit::RemoteLayerTreeTransaction::decode):

        Set the background color of the UIScrollView based on the 
        pageExtendedBackgroundColor.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:WebKit::]):

        For the sake of PLATFORM(MAC), continue to support the fact that this color can be 
        set via a message from the WebProcess or the new RemoteLayerTreeTransaction.
        * UIProcess/WebPageProxy.h:

        Cache the pageExtendedBackgroundColor as provided by the 
        RemoteLayerTreeTransaction.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didCommitLayerTree):

        It’s not necessary to do anything here in non-Mac platforms anymore.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::pageExtendedBackgroundColorDidChange):

        Include the pageExtendedBackgroundColor in the RemoteLayerTreeTransaction.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::willCommitLayerTree):

2014-03-10  Benjamin Poulain  <bpoulain@apple.com>

        Generalize unobscured rect to all ports
        https://bugs.webkit.org/show_bug.cgi?id=130036

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/ViewGestureGeometryCollector.cpp:
        (WebKit::ViewGestureGeometryCollector::collectGeometryForSmartMagnificationGesture):
        (WebKit::ViewGestureGeometryCollector::collectGeometryForMagnificationGesture):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::applyTransientZoomToPage):

2014-03-10  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/16278716> [Cocoa] Allow setting a custom group identifier on a WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=130033

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]): Create a page group with the group identifier
        from the configuration, if it’s non-empty.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _groupIdentifier]): Added this accessor.
        (-[WKWebViewConfiguration _setGroupIdentifier:]): Ditto.
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h: Declared _groupIdentifier property.

2014-03-10  Enrica Casucci  <enrica@apple.com>

        WebKit2: Crash in WebPage::getPositionInformation.
        https://bugs.webkit.org/show_bug.cgi?id=129936
        <rdar://problem/16264550>
 
        Reviewed by Eric Carlson.
 
        Missing null check on the node renderer in one code path.
        If the page body is smaller than the document, hit testing
        will return HTMLHtmlElement that has no renderer.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):

2014-03-10  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Clean up library linking
        https://bugs.webkit.org/show_bug.cgi?id=129782

        Reviewed by Philippe Normand.

        * PlatformGTK.cmake: Use the new macro.

2014-03-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] The web process can finish while a print operation is still ongoing
        https://bugs.webkit.org/show_bug.cgi?id=129871

        Reviewed by Martin Robinson.

        This can happen when the last page is closed while the print job
        is sending data to the printer.

        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp: Disable web
        process termination when the print job is sending data to the
        printer and enable it again when job finishes.

2014-03-09  Jeong Yong-uk  <yong@company100.com>

        Update comment in NetworkResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=129997

        Reviewed by Andreas Kling.

        NetworkResourceLoader::resourceHandleStopped() has been renamed to
        NetworkResourceLoader::cleanup() but the comment is not updated.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start):

2014-03-09  Alexey Proskuryakov  <ap@apple.com>

        iOS build fix.

        * WebProcess/WebPage/ios/WebPageIOS.mm: Include WebCore/KeyboardEvent.h.

2014-03-06  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Don't perform a round-trip through WebProcess before interpreting key events
        https://bugs.webkit.org/show_bug.cgi?id=129812

        Reviewed by Darin Adler.

        * Shared/NativeWebKeyboardEvent.h:
        * Shared/WebEvent.h:
        (WebKit::WebKeyboardEvent::handledByInputMethod):
        (WebKit::WebKeyboardEvent::commands):
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformKeyboardEvent::WebKit2PlatformKeyboardEvent):
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::WebKeyboardEvent):
        (WebKit::WebKeyboardEvent::~WebKeyboardEvent):
        (WebKit::WebKeyboardEvent::encode):
        (WebKit::WebKeyboardEvent::decode):
        * Shared/mac/NativeWebKeyboardEventMac.mm:
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent):
        * Shared/mac/WebEventFactory.h:
        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        Keyboard events now carry results of interpretation with them.
        Ideally, mouse events should also have a handledByInputMethod member, because IMs
        can handle events, but that can wait until we have actual bugs caused by not diabling
        default processing for these.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView becomeFirstResponder]): Updated for new NativeWebKeyboardEvent contructor
        signature. We don't interpret the event in this code path.
        (-[WKView doCommandBySelector:]): Added logging.
        (-[WKView performKeyEquivalent:]): Reimplemented Esc and Cmd+period handling to avoid
        infinite loops and re-entrancy. These two work in a unique way in AppKit.
        Interpret key event before sending it down to WebProcess.
        (-[WKView keyUp:]): Interpret key event before sending it down to WebProcess.
        We need to tell IMs about the event, but key binding processing is moot, all commands
        are executed on keydown.
        (-[WKView keyDown:]): Interpret the event.
        (-[WKView flagsChanged:]): Ditto.
        (-[WKView _interpretKeyEvent:savingCommandsTo:WebCore::]): Added an assertion in
        consumedByIM code path.
        (-[WKView _executeSavedCommandBySelector:]): Added logging.

        * UIProcess/PageClient.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WebPageProxyIOS.mm:
        * UIProcess/mac/WebPageProxyMac.mm:
        Removed interpretQueuedKeyEvent/interpretKeyEvent, WebProcess no longer asks UIProcess to do this.

        * WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm:
        (WebKit::WebEditorClient::handleKeyboardEvent):
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::handleKeyboardEvent):
        (WebKit::WebEditorClient::handleInputMethodKeydown):
        WebPage::handleEditingKeyboardEvent is now one function instead of two with a boolean
        switch between two behaviors.

        * WebProcess/WebPage/WebPage.cpp:(WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebPage.h:
        Removed m_keyboardEventBeingInterpreted, as we no longer send the event for interpretation.
        This means that we sometimes have to pass a null event down to WebCore, but I wasn't
        able to find any behavior differences from us doing so.

        * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::handleEditingKeyboardEvent):
        Added a FIXME.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::executeKeypressCommandsInternal): When we don't have an event,
        use current frame as a target, just like input method messages do.
        (WebKit::WebPage::handleEditingKeyboardEvent): This function no longer saves commands,
        it only interprets them.
        Added a check for Esc, as we don't want to handle it in keydown event handler.
        (WebKit::WebPage::insertText): Pass 0 instead of m_keyboardEventBeingInterpreted.
        (WebKit::WebPage::insertDictatedText): Ditto.
        (WebKit::WebPage::executeKeypressCommands): Ditto.

2014-03-09  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Pass FloatSize boxsize to transform animations to support device pixel sizing.
        https://bugs.webkit.org/show_bug.cgi?id=129985

        Reviewed by Simon Fraser.

        This is in preparation to stop passing integral positioned boxes to transform animations.

        No change in behavior.

        * WebProcess/WebPage/mac/GraphicsLayerCARemote.h:

2014-03-08  Simon Fraser  <simon.fraser@apple.com>

        [iOS Wk2] Can't scroll after going back to page in page cache
        https://bugs.webkit.org/show_bug.cgi?id=129989
        <rdar://problem/16217588>

        Reviewed by Dan Bernstein.

        iOS has a special FrameLoader::forceLayoutWithoutRecalculatingStyle()
        function that is called instead of FrameView::forceLayout(). This was unimplemented
        for the WK2 FrameLoaderClient, so no layout was forced, with the result
        that the contentSize was never updated and scrolling was broken.
        
        Fix by renaming the client function to forceLayoutOnRestoreFromPageCache()
        and having it return a bool to say whether the default forceLayout()
        should be done. WK1 can then continue to have its custom behavior,
        and Wk2 will simply do a forceLayout().
        
        Also remove FrameLaoderClient::forceLayout(), which was never called.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebCoreSupport/ios/WebFrameLoaderClientIOS.mm:
        (WebKit::WebFrameLoaderClient::forceLayoutOnRestoreFromPageCache):

2014-03-08  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Get position:fixed working slighlty better
        https://bugs.webkit.org/show_bug.cgi?id=129988

        Reviewed by Dan Bernstein.
        
        iOS uses fixed layout, but does not want fixed elements laid
        out relative to the frame.

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

2014-03-08  Jon Lee  <jonlee@apple.com>

        iOS broken after r165342
        https://bugs.webkit.org/show_bug.cgi?id=129987

        Reviewed by Simon Fraser.

        * NetworkProcess/ios/NetworkProcessIOS.mm:
        (WebKit::NetworkProcess::platformLowMemoryHandler): Add missing stub implementation for
        platformLowMemoryHandler().

2014-03-08  Eric Carlson  <eric.carlson@apple.com>

        [iOS] media preferences not initialized correctly in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=129983

        Reviewed by Dan Bernstein.

        * Shared/WebPreferencesStore.h: Initialize mediaPlaybackAllowsInline and 
        mediaPlaybackRequiresUserGesture correctly for iOS.

2014-03-08  Jeremy Jones  <jeremyj@apple.com>

        Allow media element to supply the video layer after fullscreen transition has already begun.
        https://bugs.webkit.org/show_bug.cgi?id=129870

        Reviewed by Eric Carlson.

        WebVideoFullscreenManager and WebVideoFullscreenManagerProxy do their own remote hosting of the video layer instead of needing the video layer to have already been hosted elsewhere. This allows the removal of the coordination with WebPageProxy via a RemoteLayerTreeTransaction.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        Remove m_videoLayerIDsPendingFullscreen and accessors.

        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode):
        Don't encode m_videoLayerIDsPendingFullscreen

        (WebKit::RemoteLayerTreeTransaction::decode):
        Don't decode m_videoLayerIDsPendingFullscreen

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didCommitLayerTree):
        Don't forward didCommitLayerTree to m_videoFullscreenManager.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        Remove code for synchronizing with the RenderTree.
        Add a hosting layer and methods to keep video layer frame and video gravity synchronized.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in:
        Change IPC interface to fascilitate rehosting video layer with a instead of coordinating with the RenderTree by PlatformLayerID.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::WebVideoFullscreenManagerProxy):
        Remove initialization for removed members.

        (WebKit::WebVideoFullscreenManagerProxy::enterFullscreenWithID):
        Rehost the video layer by id and pass on the layer.
        This replaces didCommitLayerTree() and  willLendVideoLayerWithID(). 

        (WebKit::WebVideoFullscreenManagerProxy::didExitFullscreen):
        Cleanup the hosting layer.

        (WebKit::WebVideoFullscreenManagerProxy::setVideoLayerFrame):
        Forward on the video layer's frame to keep the hosted layer in sync with the interface.

        (WebKit::WebVideoFullscreenManagerProxy::setVideoLayerGravity):
        Forward the videolayer gravity.

        * WebKit2.xcodeproj/project.pbxproj:
        Rename WebVideoFullscreenManager.cpp to WebVideoFullscreenManager.mm

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::willCommitLayerTree):
        Don't invovle the m_videoFullscreenManager in layer tree transactions.

        * WebProcess/ios/WebVideoFullscreenManager.h:
        Remove code that synchronizes with the render tree via RemoteLayerTreeTransaction.
        Instead rehost the video layer directly.
        Instead of hoping the WebVideoFullscreenModel has a videoLayer, supply one into which
        it can add whatever it likes as needed.

        * WebProcess/ios/WebVideoFullscreenManager.messages.in:
        No more explicit borrowing and returning video layers.
        Add functions to keep video layer bounds and gravity in sync with the UI. 

        * WebProcess/ios/WebVideoFullscreenManager.mm: Renamed from Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.cpp.
        Removed code for synchronizing via RemoteLAyerTreeTransaction.

        (WebKit::WebVideoFullscreenManager::WebVideoFullscreenManager):
        Remove initialization for removed memeber m_sendUnparentVideoLayerTransaction.

        (WebKit::WebVideoFullscreenManager::enterFullscreenForNode):
        Creates a fullscreen layer, gives it to the WebVideoFullscreenModel to fill in,
        and hosts it in a context to send to the UIProcess.

        (WebKit::WebVideoFullscreenManager::exitFullscreenForNode):
        remove enterFullscreen() and just directly send the IPC message. 

        (WebKit::WebVideoFullscreenManager::didExitFullscreen):
        Clean up the hosting context.

        (WebKit::WebVideoFullscreenManager::setVideoLayerGravityEnum):
        Forward on the video gravity. Type convert from unsigned to MediaPlayer::VideoGravity.

2014-03-08  Andreas Kling  <akling@apple.com>

        [WK2] Improve the network process low memory handler.
        <https://webkit.org/b/129977>

        Split the network process low memory handler into platform-specific
        and shared parts. The shared part tells FastMalloc to release freed
        pages back to the OS.

        For Mac, added a call to purge the in-memory part of CFURLCache.
        Remove the malloc_zone_pressure_relief() since that is now taken care
        of by the shared MemoryPressureHandler code.

        Reviewed by Darin Adler.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::lowMemoryHandler):
        (WebKit::NetworkProcess::platformLowMemoryHandler):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::platformLowMemoryHandler):
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):

2014-03-08  Jae Hyun Park  <jaepark@webkit.org>

        Remove unnecessary casting in NetworkProcessMainUnix.cpp
        https://bugs.webkit.org/show_bug.cgi?id=129968

        Reviewed by Andreas Kling.

        * NetworkProcess/unix/NetworkProcessMainUnix.cpp:
        Since socket is an int, int casting is not necessary.

        (WebKit::NetworkProcessMain):

2014-03-08  Aaron Golden  <golden@inkling.com>

        Prevent processes spawned by WebProcess from trying to insert the SecItem shim.
        https://bugs.webkit.org/show_bug.cgi?id=129864

        Reviewed by Anders Carlsson.

        * WebProcess/EntryPoint/mac/LegacyProcess/WebContentProcessMain.mm:
        (WebKit::WebContentProcessMainDelegate::doPreInitializationWork):

2014-03-07  Tim Horton  <timothy_horton@apple.com>

        [WebKit2][iOS] PDF
        https://bugs.webkit.org/show_bug.cgi?id=129600
        <rdar://problem/15260216>

        Reviewed by Anders Carlsson.

        Add a single custom content provider which installs a very primitive PDF view
        in place of the WKContentView if a PDF is loaded in the main frame.

        * Configurations/WebKit2.xcconfig:
        Link against CorePDF, for UIPDFPageView.

        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm:
        (-[WKWebViewContentProviderRegistry init]):
        Initialize the registry, using WKPDFView for all PDF MIME types.

        * WebKit2.xcodeproj/project.pbxproj:
        * UIProcess/ios/WKPDFView.h: Added.
        * UIProcess/ios/WKPDFView.mm: Added.
        Add a very simple PDF view based on UIPDFPageView. Additional functionality
        can come in the future; right now, we just create one view for each page, and
        depend on CATiledLayer to only paint the pages that are being displayed.

2014-03-07  Andreas Kling  <akling@apple.com>

        ArgumentEncoder and ArgumentDecoder should be fastmalloced.
        <https://webkit.org/b/129960>

        Reviewed by Ryosuke Niwa.

        * Platform/IPC/ArgumentDecoder.h:
        * Platform/IPC/ArgumentEncoder.h:

2014-03-07  Martin Robinson  <mrobinson@igalia.com>

        Fix the GTK+ build after the recent iOS merge.

        * UIProcess/API/gtk/PageClientImpl.cpp: Make some methods available to non-Cocoa ports and fix some signatures.
        * UIProcess/WebPageProxy.h: Ditto.

2014-03-07  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed. Fix build on the EFL port after r165303

        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::didCommitLoadForMainFrame): Added new parameters.
        * UIProcess/CoordinatedGraphics/WebView.h: Ditto.
        * UIProcess/WebPageProxy.h:
        * UIProcess/efl/WebViewEfl.cpp: Added dummy didFinishLoadingDataForCustomContentProvider()
        (WebKit::WebViewEfl::exitFullScreen):
        (WebKit::WebViewEfl::didFinishLoadingDataForCustomContentProvider):
        * UIProcess/efl/WebViewEfl.h: Ditto.

2014-03-07  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] Keyboard accessory comes up when I click a link.
        https://bugs.webkit.org/show_bug.cgi?id=129949
        <rdar://problem/16265305>

        Reviewed by Simon Fraser.

        We need to create the accessory view only when needed.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView requiresAccessoryView]):
        (-[WKContentView inputAccessoryView]):

2014-03-07  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] Long-press on a link shows just "Copy".
        https://bugs.webkit.org/show_bug.cgi?id=129938
        <rdar://problem/16266054>

        Reviewed by Benjamin Poulain.

        When adding a FIXME comment, I accidentally removed the ! on
        the if (!element) condition.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):

2014-03-07  Tim Horton  <timothy_horton@apple.com>

        [WebKit2][iOS] Main-frame custom content providers
        https://bugs.webkit.org/show_bug.cgi?id=129809

        Reviewed by Dan Bernstein.

        Re-introduce custom content providers to WebKit2 (removed in r152841), but
        for iOS this time.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        Send the initial MIME types that have custom content providers to the WebProcess.

        (-[WKWebView dealloc]):
        Unregister our page from the content provider registry.
        
        (-[WKWebView _setHasCustomContentView:loadedMIMEType:]):
        Install/uninstall the custom content provider. Create a view, if needed,
        based on the class that the registry has associated with the given MIME type.
        We unparent the WKContentView while the custom content provider is active,
        and re-use the existing WKScrollView to contain the custom content provider.

        (-[WKWebView _didFinishLoadingDataForCustomContentProviderWithSuggestedFilename:dataReference:]):
        Forward loaded data on to the custom content provider for display.

        (-[WKWebView _didCommitLayerTree:WebKit::]):
        Assert that we aren't getting layer tree commits while using a custom content provider.

        (-[WKWebView viewForZoomingInScrollView:]):
        If we're using a custom content provider, its view should be used for zooming
        instead of the (unparented) web content view.

        (-[WKWebView hasContentView]):
        (-[WKWebView scrollViewWillBeginZooming:withView:]):
        (-[WKWebView scrollViewWillBeginDragging:]):
        (-[WKWebView _didFinishScrolling]):
        (-[WKWebView _updateVisibleContentRects]):
        If we do not have a parented WKContentView because we are using a custom
        content provider, we should not forward scroll view related changes to it.

        (-[WKWebView _frameOrBoundsChanged]):
        Update the minimum size of the custom content provider if the web view size changes.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _contentProviderRegistry]):
        (-[WKWebViewConfiguration _setContentProviderRegistry:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationInternal.h: Added.
        Add an internal WKWebViewConfiguration property, the WKWebViewContentProviderRegistry.

        * UIProcess/API/Cocoa/WKWebViewInternal.h:

        * UIProcess/Cocoa/WKWebViewContentProvider.h: Added.
        A minimal protocol for informing custom content providers of changes to
        the size of the view, the represented data, and the owning scroll view.

        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.h: Added.
        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm: Added.
        (-[WKWebViewContentProviderRegistry addPage:]):
        (-[WKWebViewContentProviderRegistry removePage:]):
        (-[WKWebViewContentProviderRegistry registerProvider:forMIMEType:]):
        (-[WKWebViewContentProviderRegistry providerForMIMEType:]):
        (-[WKWebViewContentProviderRegistry mimeTypesWithContentProviders]):
        New class, keeps track of a mapping from MIME types to UIViews that
        conform to the WKWebViewContentProvider protocol.

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

        * UIProcess/PageClient.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::PageClientImpl):
        (WebKit::PageClientImpl::didCommitLoadForMainFrame):
        (WebKit::PageClientImpl::didFinishLoadingDataForCustomContentProvider):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didCommitLoadForMainFrame):
        (WebKit::PageClientImpl::didFinishLoadingDataForCustomContentProvider):
        Add parameters to didCommitLoadForMainFrame, indicating if we should use
        a custom content provider to display the main frame, and what MIME type
        was loaded in said frame, and add didFinishLoadingDataForCustomContentProvider.
        On iOS, forward these to the WKWebView.
        Also, give PageClientImplIOS a reference to the WKWebView.
        
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView initWithFrame:context:WebKit::configuration:WebKit::webView:]):
        
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (-[WKWebProcessPlugInFrame _hasCustomContentProvider]):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFramePrivate.h:
        Expose whether or not a given frame has a custom content provider to the plug-in.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::WebFrameLoaderClient):
        (WebKit::WebFrameLoaderClient::hasHTMLView):
        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
        (WebKit::WebFrameLoaderClient::committedLoad):
        (WebKit::WebFrameLoaderClient::finishedLoading):
        (WebKit::WebFrameLoaderClient::transitionToCommittedFromCachedFrame):
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        (WebKit::WebFrameLoaderClient::canCachePage):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        (WebKit::WebFrameLoaderClient::frameHasCustomContentProvider):
        Restore WebFrameLoaderClient custom representation code, which ensures
        that data is routed correctly (to the UI process, and not to WebCore) and
        that we don't try to use the page cache for frames with content providers.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mainFrameHasCustomContentProvider):
        (WebKit::WebPage::addMIMETypeWithCustomContentProvider):
        (WebKit::WebPage::shouldUseCustomContentProviderForResponse):
        (WebKit::WebPage::canShowMIMEType):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Keep a list of MIME types which can be displayed via custom content providers
        in WebPage, which will be pushed down from the registry as new providers
        are added. Plug-ins still take precendence over custom content providers.

2014-03-07  Anders Carlsson  <andersca@apple.com>

        MigrateHeaders.make should remove C SPI includes from WebKit2 headers
        https://bugs.webkit.org/show_bug.cgi?id=129937
        <rdar://problem/15920020>

        Reviewed by Tim Horton.

        * WebKit2.xcodeproj/project.pbxproj:
        Make WKPreferences.h and all headers it includes public. Update the post processing of WKBase.h
        to account for WKBase.h now being a public header again.

2014-03-07  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r164847): Pressing the command key while hovering an element causes it to un-hover
        https://bugs.webkit.org/show_bug.cgi?id=129872

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKViewPrivate.h: Changes in performDictionaryLookupAtCurrentMouseLocation
        were also not correct, because the current event could be a keyboard one (Cmd+Ctrl+D).
        But this SPI is unused, and can be simply removed.

        * UIProcess/API/mac/WKView.mm: (-[WKView _postFakeMouseMovedEventForFlagsChangedEvent:]):
        locationInWindow is undefined for keyboard events, so we have to use current location.
        Thankfully, there is a method that returns the location in appropriate coordinate
        space, unlike +[NSEvent mouseLocation] that we used before.

2014-03-07  Andy Estes  <aestes@apple.com>

        [iOS] Install WebKit2 XPC services to the correct place during iOS Simulator builds
        https://bugs.webkit.org/show_bug.cgi?id=129914

        Reviewed by Dan Bernstein.

        We weren't specifying INSTALL_PATH for iOS Simulator builds in
        BaseXPCService.xcconfig, and r164576 changed INSTALL_PATH to
        INSTALL_PATH_ACTUAL. This caused XPC services to start being installed
        to the root of the iOS Simulator SDK. Fix this by setting
        INSTALL_PATH_ACTUAL for iphonesimulator.

        * Configurations/BaseXPCService.xcconfig:

2014-03-07  Andreas Kling  <akling@apple.com>

        [Mac] Notify system malloc of fake memory pressure.
        <https://webkit.org/b/129908>

        Reviewed by Anders Carlsson.

        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):

            Listen for the fake memory pressure notification and respond by
            just forwarding to system malloc. We don't do the full WebCore
            memory pressure handling here, since that will cause stuff that
            the network process doesn't need to get instantiated.

2014-03-07  Dean Jackson  <dino@apple.com>

        Attempt to fix the iOS build.

        * Configurations/WebKit2.xcconfig: Add -framework OpenGLES to linking.

2014-03-07  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Add an updateID to visibleContentRect updates which is passed back in layer transactions, so we know whether transactions are stale
        https://bugs.webkit.org/show_bug.cgi?id=129897

        Reviewed by Benjamin Poulain.

        In WebKit2 on iOS we need to know when layer updates from the web process
        are stale with respect to visible rect updates from the UI process. Do so
        by adding an updateID to VisibleContentRectUpdateInfo, and storing it
        on each side, returning it in RemoteLayerTreeTransaction.
        
        Did some re-ordering of members and encoding order in RemoteLayerTreeTransaction
        to group like data members together.
        
        * Shared/VisibleContentRectUpdateInfo.cpp:
        (WebKit::VisibleContentRectUpdateInfo::encode):
        (WebKit::VisibleContentRectUpdateInfo::decode):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::VisibleContentRectUpdateInfo::updateID):
        (WebKit::operator==):
        * Shared/mac/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::setLastVisibleContentRectUpdateID):
        (WebKit::RemoteLayerTreeTransaction::lastVisibleContentRectUpdateID):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::nextVisibleContentRectUpdateID):
        (WebKit::WebPageProxy::lastVisibleContentRectUpdateID):
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:scale:inStableState:]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::willCommitLayerTree):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):

2014-03-07  Roger Fong  <roger_fong@apple.com>

        Replace setSystemWebGLLoadPolicy API with methods to query for WebGL blocking policy.
        https://bugs.webkit.org/show_bug.cgi?id=129873.

        Reviewed by Dean Jackson.

        Remove setSystemWebGLLoadPolicy API.
        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::resolveWebGLLoadPolicy):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        * UIProcess/API/C/WKPageLoaderClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resolveWebGLPolicyForURL):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::webGLPolicyForURL):

        Add API to directly query the WebGL blocking policies from WKSI.
        * UIProcess/API/C/mac/WKContextPrivateMac.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextShouldBlockWebGL):
        (WKContextShouldSuggestBlockWebGL):

2014-03-07  Eric Carlson  <eric.carlson@apple.com>

        Initialize new WKSI functions for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=129889

        Reviewed by Simon Fraser.

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

2014-03-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use final and override in WebPrintOperationGtk
        https://bugs.webkit.org/show_bug.cgi?id=129868

        Reviewed by Sergio Villar Senin.

        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:

2014-03-06  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Allow com.apple.GSSCred in WebKit sandbox profiles
        https://bugs.webkit.org/show_bug.cgi?id=129777
        <rdar://problem/16050832>

        Reviewed by Anders Carlsson.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/PlugInSandboxProfiles/com.apple.ist.ds.appleconnect.webplugin.sb:
        * WebProcess/com.apple.WebProcess.sb.in:

2014-03-06  Filip Pizlo  <fpizlo@apple.com>

        If the FTL is build-time enabled then it should be run-time enabled.

        Rubber stamped by Geoffrey Garen.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::registerUserDefaultsIfNeeded):
        (WebKit::WebContext::platformInitializeWebProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-03-06  Hyowon Kim  <hw1008.kim@samsung.com>

        [EFL] Move EvasGL classes from WebKit to WebCore namespace.
        https://bugs.webkit.org/show_bug.cgi?id=129797

        Reviewed by Gyuyoung Kim.

        * UIProcess/API/efl/EwkView.h: namespace changes for EvasGLContext/Surface.

2014-03-06  Simon Fraser  <simon.fraser@apple.com>

        Remove one more setCustomFixedPositionRect() that I missed.

        * UIProcess/DrawingAreaProxy.h:

2014-03-06  Simon Fraser  <simon.fraser@apple.com>

        Send the fixed position rect to the WebProcess along with the other rects
        https://bugs.webkit.org/show_bug.cgi?id=129856

        Reviewed by Benjamin Poulain.
        
        Remove the functions that pass the custom fixed position rect through
        the DrawingArea, and replace them by adding this rect to the
        VisibleContentRectUpdateInfo, along with the "is stable" flag. We
        then set the custom fixed position rect in the web process for
        stable updates.

        * Shared/VisibleContentRectUpdateInfo.cpp:
        (WebKit::VisibleContentRectUpdateInfo::encode):
        (WebKit::VisibleContentRectUpdateInfo::decode):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::VisibleContentRectUpdateInfo::customFixedPositionRect):
        (WebKit::VisibleContentRectUpdateInfo::inStableState):
        (WebKit::operator==):
        * UIProcess/DrawingAreaProxy.cpp:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:scale:inStableState:]):
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:

2014-03-06  Simon Fraser  <simon.fraser@apple.com>

        Remove empty class extension in WKContentViewInteraction
        https://bugs.webkit.org/show_bug.cgi?id=129849

        Reviewed by Enrica Casucci.
        
        This empty class extension is cruft left over from refactoring.
        It can be removed.

        * UIProcess/ios/WKContentViewInteraction.mm:

2014-03-06  Simon Fraser  <simon.fraser@apple.com>

        [iOS] didUpdateVisibleRect: should use fabs, not abs
        https://bugs.webkit.org/show_bug.cgi?id=129843

        Reviewed by Benjamin Poulain.
        
        When zooming we sent messages to the web process with an unchanging
        zoom scale because of use of abs() rather than fabs().

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:scale:inStableState:]):

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

        Remove WebKit1 header includes from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=129824

        Reviewed by Dan Bernstein.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (makeResponderFirstResponderIfDescendantOfView):
        Add a new function instead of calling an NSWindow category method that's defined in WebKit1.

        (-[WKFullScreenWindowController enterFullScreen:]):
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]):
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]):
        Call makeResponderFirstResponderIfDescendantOfView.

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        Remove unused WebKit1 header import.

        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::documentFragmentFromAttributedString):
        Change a category to be on NSObject instead of WebResource.

2014-03-06  Jon Lee  <jonlee@apple.com>

        iOS build fix.

        Reviewed by Simon Fraser.

        * UIProcess/ios/SmartMagnificationController.mm:

2014-03-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Expose the console object in JSContexts to interact with Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=127944

        Reviewed by Geoffrey Garen.

        * WebProcess/WebCoreSupport/WebChromeClient.h:
        Update namespaces.

2014-03-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Close the page when the view is disposed instead of when finalized
        https://bugs.webkit.org/show_bug.cgi?id=129783

        Reviewed by Sergio Villar Senin.

        When a GtkWidget is destroyed, the GObject is disposed, but not
        finalized if it has additional references. When the destroyed
        widget is leaked by the application, we leak the page proxy and
        what is more important the web process in multi-process mode.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDispose): Close the WebPageProxy.

2014-03-05  Chris Fleizach  <cfleizach@apple.com>

        AX: Support IOS Accessibility in WK2
        https://bugs.webkit.org/show_bug.cgi?id=129527

        Build fix.

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

2014-03-05  Chris Fleizach  <cfleizach@apple.com>

        AX: Support IOS Accessibility in WK2
        https://bugs.webkit.org/show_bug.cgi?id=129527

        Address review comments from Simon noted in bug.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _accessibilityRegisterUIProcessTokens]):
        * WebProcess/WebPage/WKAccessibilityWebPageObjectIOS.mm:
        (-[WKAccessibilityWebPageObject init]):
        (-[WKAccessibilityWebPageObject dealloc]):
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.h:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:
        (-[WKAccessibilityWebPageObject accessibilityAttributeNames]):
        (-[WKAccessibilityWebPageObject accessibilitySetValue:forAttribute:]):
        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:]):
        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]):
        (-[WKAccessibilityWebPageObject accessibilityHitTest:]):

2014-03-05  Dean Jackson  <dino@apple.com>

        [WebGL] Use WKSI to see what the system policy for WebGL is
        https://bugs.webkit.org/show_bug.cgi?id=129722
        <rdar://problem/15790542>

        Reviewed by Tim Horton.

        Use the WebKitSystemInterface methods WKShouldBlockWebGL
        and WKShouldSuggestBlockingWebGL to query what the host
        system thinks about the hardware. Tell the client about
        the result in a new WebPage method setSystemWebGLPolicy.

        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::setSystemWebGLLoadPolicy): New empty definition.
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toAPI): Convert a WebGLLoadPolicy into a WKWebGLLoadPolicy.
        * UIProcess/API/C/WKPage.cpp: Call setSystemWebGLLoadPolicy.
        (WKPageSetPageLoaderClient):
        * UIProcess/API/C/WKPageLoaderClient.h: New typedef and entry in client structure.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setSystemWebGLPolicy):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in: Add SetSystemWebGLPolicy.
        * Source/WebKit2/Configurations/WebKit2.xcconfig: We have to link against OpenGL now, because WKSI
        uses it for hardware detection.
        * WebProcess/WebPage/WebPage.cpp: Remove the implementation here, but leave
        empty methods for non-Apple platforms.
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::webGLPolicyForURL):
        (WebKit::WebPage::resolveWebGLPolicyForURL):
        * WebProcess/WebPage/WebPage.h: Add m_systemWebGLPolicy.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::webGLPolicyForURL): Moved in from WebPage, but now they call
        into WKSI and send the result to the client if necessary.
        (WebKit::WebPage::resolveWebGLPolicyForURL):

2014-03-05  Simon Fraser  <simon.fraser@apple.com>

        Fix a stupid error in r165118 that caused userVisibleString()
        to call itself recursively.

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

2014-03-05  Benjamin Poulain  <bpoulain@apple.com>

        [iOS] Rename the various VisibleExtent variations to exposedContentRect
        https://bugs.webkit.org/show_bug.cgi?id=129728

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::setExposedContentRect):

2014-03-05  Dean Jackson  <dino@apple.com>

        Unreviewed. Fix the Apple-internal builds.

        * Configurations/WebKit2.xcconfig: Add -framework OpenGL.

2014-03-05  Simon Fraser  <simon.fraser@apple.com>

        ObjC exception when dropping files into a WKView: drag and drop uses code from WebKit.framework
        https://bugs.webkit.org/show_bug.cgi?id=129752

        Reviewed by Enrica Casucci.
        
        Get WebDragClientMac off of all WebKit headers, and WebEditorClientMac off
        all but one by using C functions from WebCoreNSURLExtras.h rather than
        the NSURL category.

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::declareAndWriteDragImage):
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::userVisibleString):
        (WebKit::WebEditorClient::canonicalizeURL):
        (WebKit::WebEditorClient::canonicalizeURLString):

2014-03-05  Martin Hock  <mhock@apple.com>

        Add support for sessions to MemoryCache.
        https://bugs.webkit.org/show_bug.cgi?id=127794

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkResourceLoader.h: Add sessionID() method.
        (WebKit::NetworkResourceLoader::sessionID):
        * NetworkProcess/mac/DiskCacheMonitor.h: Add sessionID member.
        * NetworkProcess/mac/DiskCacheMonitor.mm:
        (WebKit::DiskCacheMonitor::DiskCacheMonitor): Send sessionID to NetworkProcessConnection::DidCacheResource.
        * WebProcess/Network/NetworkProcessConnection.cpp: Add sessionID parameter to didCacheResource and pass to MemoryCache.
        (WebKit::NetworkProcessConnection::didCacheResource):
        * WebProcess/Network/NetworkProcessConnection.h: Ditto.
        * WebProcess/Network/NetworkProcessConnection.messages.in: Ditto.

2014-03-05  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] support multi-select and select with groups for iPhone.
        https://bugs.webkit.org/show_bug.cgi?id=129344
        <rdar://problem/16206928>

        Reviewed by Simon Fraser.

        This is the remaining work on select element support on iOS.
        This adds multi-select and select with group support with UI
        for iPhone that uses UIPickerView.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView resignFirstResponder]):
        (-[WKContentView inputAccessoryView]): Removed incorrect early return.
        (-[WKContentView _stopAssistingNode]):
        * UIProcess/ios/forms/WKFormSelectControl.h:
        * UIProcess/ios/forms/WKFormSelectControl.mm:
        (adjustedFontSize): Moved here to make it available to both picker and
        popover based implementations.
        (-[WKFormSelectControl initWithView:]):
        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKOptionPickerCell _isSelectable]):
        (-[WKOptionPickerCell initCommon]):
        (-[WKOptionPickerCell initWithOptionItem:]):
        (-[WKOptionGroupPickerCell initWithOptionItem:]):
        (-[WKOptionGroupPickerCell labelWidthForBounds:]):
        (-[WKOptionGroupPickerCell layoutSubviews]):
        (-[WKMultipleSelectPicker initWithView:]):
        (-[WKMultipleSelectPicker dealloc]):
        (-[WKMultipleSelectPicker controlView]):
        (-[WKMultipleSelectPicker controlBeginEditing]):
        (-[WKMultipleSelectPicker controlEndEditing]):
        (-[WKMultipleSelectPicker layoutSubviews]):
        (-[WKMultipleSelectPicker pickerView:viewForRow:forComponent:reusingView:]):
        (-[WKMultipleSelectPicker numberOfComponentsInPickerView:]):
        (-[WKMultipleSelectPicker pickerView:numberOfRowsInComponent:]):
        (-[WKMultipleSelectPicker findItemIndexAt:]):
        (-[WKMultipleSelectPicker pickerView:row:column:checked:]):
        (-[WKSelectSinglePicker initWithView:]):
        (-[WKSelectSinglePicker controlEndEditing]):
        * UIProcess/ios/forms/WKFormSelectPopover.mm:

2014-03-03  Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMake] Generate documentation for the DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=126211

        Reviewed by Carlos Garcia Campos.

        * PlatformGTK.cmake: The list of headers for GIR generation has a better name now.

2014-03-04  Benjamin Poulain  <bpoulain@apple.com>

        Fix the build after r165095

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _keyboardChangedWithInfo:adjustScrollView:]):

2014-03-04  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Account for the keyboard when computing the unobscuredRect
        https://bugs.webkit.org/show_bug.cgi?id=129660

        Reviewed by Enrica Casucci.

        Adjust the unobscuredRect when a docked keyboard is on screen.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _updateVisibleContentRectsWithStableState:]):
        (-[WKWebView _keyboardChangedWithInfo:adjustScrollView:]):

2014-03-04  Andy Estes  <aestes@apple.com>

        [iOS][WebKit2] Exclude plug-in sandbox profiles from the build
        https://bugs.webkit.org/show_bug.cgi?id=129719

        Reviewed by Simon Fraser.

        * Configurations/WebKit2.xcconfig:

2014-03-04  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] WKScrollView should be able to cancel touches in content view
        https://bugs.webkit.org/show_bug.cgi?id=129711

        Reviewed by Simon Fraser.

        * UIProcess/ios/WKScrollView.mm:
        We should not override UIWebScrollView behavior regarding touch cancellation otherwise we force
        other gesture recognizers to fail if delayed touches have been dispatched.

2014-03-04  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Consider the entire view state on update to find if a change is stable or not
        https://bugs.webkit.org/show_bug.cgi?id=129721

        Reviewed by Simon Fraser.

        Changes in scroll, zoom and obscuredRect can happen simultaneously. To compute if the current state
        is stable or not, we should consider the complete picture from all the type of updates.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didFinishScrolling]):
        (-[WKWebView scrollViewDidScroll:]):
        (-[WKWebView scrollViewDidZoom:]):
        (-[WKWebView scrollViewDidEndZooming:withView:atScale:]):
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _updateVisibleContentRects]):
        (-[WKWebView _setObscuredInsets:]):
        (-[WKWebView _endInteractiveObscuredInsetsChange]):

2014-03-04  Jeremy Jones  <jeremyj@apple.com>

        WebVideoFullscreen, should make the hand off of the video layer explicit.
        https://bugs.webkit.org/show_bug.cgi?id=128844

        Reviewed by Simon Fraser.

        This change introduces a more explicit hand-off of the video layer and fullscreen transition.
        This describes the interactions between WebVideoFullscreenInterface and WebVideoFullscreenModel
        WebVideoFullscreenModel <-> WebVideoFullscreenInterface
              enterFullScreen(*) ->
                                <- borrowVideoLayer
              willLendVideoLayer ->
               didLendVideoLayer ->
                                <- didEnterFullscreen
                                ...
                                <- requestExitFullscreen
                  exitFullscreen ->
                                <- returnVideoLayer
                                <- didExitFullscreen
        (*) enterFullScreen actually comes from WebVideoFullscreenControllerAVKit.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        Implement WebVideoFullscreenChangeObserver.
        Add support for explicit video layer hand-off.
        Add m_videoView to retain the videoLayer's UIView.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in:
        WillLendVideoLayerWithID replaces SetVideoLayerID

        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        Adopt new methods for explicit video layer hand-off.

        (WebKit::WebVideoFullscreenManagerProxy::WebVideoFullscreenManagerProxy):
        Observe fullscreen changes.

        (WebKit::WebVideoFullscreenManagerProxy::didCommitLayerTree):
        Pending fullscreen transition now does didLendVideoLayer instead of calling enter fullscreen.
        It also removes the videoView from it's super view now that it is safe to do so.

        (WebKit::WebVideoFullscreenManagerProxy::willLendVideoLayerWithID):
        This replaces setVideoLayerID. It retains the UIView for the layer to keep it alive before it is unparented.

        (WebKit::WebVideoFullscreenManagerProxy::requestExitFullscreen):
        Adopt more explicit fullscreen transition.

        (WebKit::WebVideoFullscreenManagerProxy::didExitFullscreen):
        Adopt more explicit fullscreen transition.

        (WebKit::WebVideoFullscreenManagerProxy::didEnterFullscreen):
        Adopt more explicit fullscreen transition.

        (WebKit::WebVideoFullscreenManagerProxy::borrowVideoLayer):
        Adopt more explicit video layer hand-off.

        (WebKit::WebVideoFullscreenManagerProxy::returnVideoLayer):
        Adopt more explicit video layer hand-off.

        * WebProcess/ios/WebVideoFullscreenManager.cpp:
        Manage state of fullscreen transition more competently. Wait till an animation is complete to begin the next one.

        (WebKit::WebVideoFullscreenManager::WebVideoFullscreenManager):
        Init three new state members.

        (WebKit::WebVideoFullscreenManager::enterFullscreenForNode):
        Update animation state. Don't procede if animation is in progress.

        (WebKit::WebVideoFullscreenManager::exitFullscreenForNode):
        Update animation state. Don't procede if animation is in progress.

        (WebKit::WebVideoFullscreenManager::willLendVideoLayer):
        Adopt more explicit video layer hand-off.
        This replaces SetVideoLayer.

        (WebKit::WebVideoFullscreenManager::didLendVideoLayer):
        This is a no-op as this will be sent through a RemoteLayerTreeTransaction.

        (WebKit::WebVideoFullscreenManager::didEnterFullscreen):
        Adopt more explicit fullscreen transition.

        (WebKit::WebVideoFullscreenManager::didExitFullscreen):
        Adopt more explicit fullscreen transition.

        * WebProcess/ios/WebVideoFullscreenManager.h:
        Adopt more explicit fullscreen transition.

        * WebProcess/ios/WebVideoFullscreenManager.messages.in:
        Adopt more explicit fullscreen/video layer transition.

2014-03-04  Simon Fraser  <simon.fraser@apple.com>

        Get position:fixed working slightly better on iOS WK2
        https://bugs.webkit.org/show_bug.cgi?id=129714

        Reviewed by Benjamin Poulain.
        
        Start telling the RemoteScrollingCoordinatorProxy about scroll position changes
        again, so it can update fixed and sticky layers.
        
        Send the scroll position as a FloatPoint, rather than an IntPoint.

        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::scrollPositionChangedViaDelegatedScrolling):
        (WebKit::RemoteScrollingCoordinatorProxy::scrollPositionChanged):
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:scale:inStableState:]):
        Tell the RemoteScrollingCoordinatorProxy about the scroll update.
        Only update the customFixedPositionRect if we've finished scrolling or zooming.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::updateVisibleContentRects): Return a bool indicating
        whether the visible rects changed.

2014-03-04  Conrad Shultz  <conrad_shultz@apple.com>

        WKPage's pageExtendedBackgroundColor API exposed through WKView/WKWebView should support NSColor
        https://bugs.webkit.org/show_bug.cgi?id=129704

        Reviewed by Beth Dakin.

        Add NSColor-returning methods to complement the existing UIColor-returning methods.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        Declare _pageExtendedBackgroundColor for non-TARGET_OS_IPHONE.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _pageExtendedBackgroundColor]):
        Return an NSColor created from the pageExtendedBackgroundColor.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        Declare _pageExtendedBackgroundColor for non-TARGET_OS_IPHONE.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _pageExtendedBackgroundColor]):
        Return an NSColor created from the pageExtendedBackgroundColor.

2014-03-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Give WebProcess private RWI entitlement
        https://bugs.webkit.org/show_bug.cgi?id=129710

        Reviewed by Timothy Hatcher.

        * Configurations/WebContent-iOS.entitlements:
        Add entitlements to "WebProcess" when code signing.

        * Configurations/WebContentProcess.xcconfig:
        Add the private RWI entitlement.

2014-03-04  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2]: Next/Prev button in the accessory bar do not work.
        https://bugs.webkit.org/show_bug.cgi?id=129690
        <rdar://problem/16073569>

        Reviewed by Simon Fraser.

        Adding support for Next and Previous buttons in the accessory bar.
        When the request is processed by the WebProcess, we identify the next
        focusable node that needs to be assisted and we call focus() on the element
        letting the focus changing machinery take care of updating the assisted node.
        This change also add support for the Clear button, when appropriate and hooks up
        the call to the WebProcess.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView accessoryTab:]):
        (-[WKContentView accessoryClear]):
        (-[WKContentView _updateAccessory]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::focusNextAssistedNode):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::nextFocusableElement):
        (WebKit::hasFocusableElement):
        (WebKit::WebPage::focusNextAssistedNode):
        (WebKit::WebPage::getAssistedNodeInformation):

2014-03-04  Simon Fraser  <simon.fraser@apple.com>

        Allow iOS DumpRenderTree crashes to show application-specific information
        https://bugs.webkit.org/show_bug.cgi?id=129705

        Reviewed by David Kilzer.
        
        Make the WKSI function SetCrashReportApplicationSpecificInformation available
        in iOS simulator builds.

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

2014-03-04  Mark Hahnenberg  <mhahnenberg@apple.com>

        Merge API shims and JSLock
        https://bugs.webkit.org/show_bug.cgi?id=129650

        Reviewed by Mark Lam.

        JSLock is now taking on all of APIEntryShim's responsibilities since there is never a reason 
        to take just the JSLock. Ditto for DropAllLocks and APICallbackShim.

        * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::~UniqueIDBDatabaseBackingStoreSQLite):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::createIndex):

2014-03-03  Enrica Casucci  <enrica@apple.com>

        [WK2] Selection remains after reload.
        https://bugs.webkit.org/show_bug.cgi?id=129648
        <rdar://problem/16207547>

        Reviewed by Sam Weinig.

        We normally clear the selection when resigninig first responder but
        that doesn't get called when reloading the page or when navigating with
        back/forward buttons. The correct place to do this is when we get
        _didCommitLoadForMainFrame where we already stop assisting the node.
        The method we call into webselectionassistant is resignedFirstResponder
        which takes care of clearing the selection and removing the selection view.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _stopAssistingNode]):

2014-03-04  Hyowon Kim  <hw1008.kim@samsung.com>

        Move EvasGLContext and EvasGLSurface files into the efl common directory.
        https://bugs.webkit.org/show_bug.cgi?id=129603

        Reviewed by Gyuyoung Kim.

        * PlatformEfl.cmake: Update for removed files.

2014-03-03  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] WebPage::updateVisibleContentRects can set the position directly instead of using programmatic scrolling
        https://bugs.webkit.org/show_bug.cgi?id=129649

        Reviewed by Sam Weinig.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):
        Update my workaround from r165003. We should not use programmatic scrolling when the scroll position is changed
        from the UI.

2014-03-03  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Update UIScrollView's contentSize when a new layer tree is committed
        https://bugs.webkit.org/show_bug.cgi?id=129641

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:WebKit::]):
        Previously, we relied on [UIScrollView setZoomScale:] to reset the contentSize for us.
        In the cases where we would not go through [UIScrollView setZoomScale:], the UIScrollView's contentSize
        did not match the actual WKContentView's area on screen.

2014-03-03  Jeremy Jones  <jeremyj@apple.com>

        Forward application suspend resume notifications to the web process.
        https://bugs.webkit.org/show_bug.cgi?id=129356

        Reviewed by Eric Carlson.

        Repost UIApplicationWillEnterForegroundNotification,
        UIApplicationDidBecomeActiveNotification and 
        UIApplicationWillResignActiveNotification from UIProcess to WebProcess.
        As WebUIApplicationWillEnterForegroundNotification,
        WebUIApplicationDidBecomeActiveNotification, and
        WebUIApplicationWillResignActiveNotification

        * UIProcess/WebPageProxy.h:
        Add applicationWillEnterForeground()
        applicationWillResignActive()
        applicationDidBecomeActive()

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView initWithFrame:context:WebKit::configuration:WebKit::]):
        Observe notifications.

        (-[WKContentView dealloc]):
        Stop observing notifications.

        (-[WKContentView _applicationWillResignActive:]):
        Notify WebPageProxy of the event.

        (-[WKContentView _applicationWillEnterForeground:]):
        Notify WebPageProxy of the event.

        (-[WKContentView _applicationDidBecomeActive:]):
        Notify WebPageProxy of the event.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applicationWillEnterForeground):
        Send corresponding Message to WebPage.

        (WebKit::WebPageProxy::applicationWillResignActive):
        Send corresponding Message to WebPage.

        (WebKit::WebPageProxy::applicationDidBecomeActive):
        Send corresponding Message to WebPage.

        * WebProcess/WebPage/WebPage.h:
        Add applicationWillEnterForeground()
        applicationWillResignActive()
        applicationDidBecomeActive()

        * WebProcess/WebPage/WebPage.messages.in:
        Add applicationWillEnterForeground()
        applicationWillResignActive()
        applicationDidBecomeActive()

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::applicationWillResignActive):
        Post corresponding NSNotification.

        (WebKit::WebPage::applicationWillEnterForeground):
        Post corresponding NSNotification.

        (WebKit::WebPage::applicationDidBecomeActive):
        Post corresponding NSNotification.

2014-03-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r165013.
        http://trac.webkit.org/changeset/165013
        https://bugs.webkit.org/show_bug.cgi?id=129646

        New code is not thread safe, asserting on a worker test
        (Requested by ap on #webkit).

        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/mac/DiskCacheMonitor.h:
        * NetworkProcess/mac/DiskCacheMonitor.mm:
        (WebKit::DiskCacheMonitor::DiskCacheMonitor):
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didCacheResource):
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Network/NetworkProcessConnection.messages.in:

2014-03-03  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2]: Text fields don't zoom in when focused
        https://bugs.webkit.org/show_bug.cgi?id=129632
        <rdar://problem/16185230>

        Reviewed by Benjamin Poulain.

        When focusing the node we need to zoom and center it and possibly
        scroll to make it visible.
        On iPad we only scroll, without zooming.

        * Shared/AssistedNodeInformation.cpp:
        (WebKit::AssistedNodeInformation::encode):
        (WebKit::AssistedNodeInformation::decode):
        * Shared/AssistedNodeInformation.h:
        (WebKit::AssistedNodeInformation::AssistedNodeInformation):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _scrollToRect:withOrigin:minimumScrollDistance:]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _displayFormNodeInputView]):
        (-[WKContentView _startAssistingNode:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getAssistedNodeInformation):

2014-03-03  Sam Weinig  <sam@webkit.org>

        Fix ASSERT and leaks introduced in recent "Support IOS Accessibility in WK2" patch

        Reviewed by Simon Fraser.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _accessibilityRegisterUIProcessTokens]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformInitializeAccessibility):

2014-03-03  Simon Fraser  <simon.fraser@apple.com>

        Composited masks not working on iOS after r164890 
        https://bugs.webkit.org/show_bug.cgi?id=129630

        Reviewed by Jer Noble.
        
        Fix typo in UIView-related masks code; set the mask layer
        on the view, not the maskView.

        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::RemoteLayerTreePropertyApplier::applyProperties):

2014-02-28  Chris Fleizach  <cfleizach@apple.com>

        AX: Support IOS Accessibility in WK2
        https://bugs.webkit.org/show_bug.cgi?id=129527

        Reviewed by Sam Weinig.

        Implement enough AX hooks so that accessibility can work in WebKit2.

        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.cpp:
        (IPC::Connection::identifier):
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::accessibilityWebProcessTokenReceived):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _updateForScreen:]):
        (-[WKContentView _setAccessibilityWebProcessToken:]):
        (-[WKContentView _accessibilityRegisterUIProcessTokens]):
        (-[WKContentView _didRelaunchProcess]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::registerWebProcessAccessibilityToken):
        (WebKit::WebPageProxy::registerUIProcessAccessibilityTokens):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        * WebProcess/WebPage/WKAccessibilityWebPageObjectIOS.h: Added.
        * WebProcess/WebPage/WKAccessibilityWebPageObjectIOS.mm: Added.
        (-[WKAccessibilityWebPageObject init]):
        (-[WKAccessibilityWebPageObject _accessibilityCategoryInstalled:]):
        (-[WKAccessibilityWebPageObject pageScale]):
        (-[WKAccessibilityWebPageObject dealloc]):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformInitialize):
        (WebKit::WebPage::platformInitializeAccessibility):
        (WebKit::WebPage::accessibilityObjectForMainFramePlugin):
        (WebKit::WebPage::registerUIProcessAccessibilityTokens):
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.h: Copied from Source/WebKit2/WebProcess/WebPage/mac/WKAccessibilityWebPageObject.h.
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm: Copied from Source/WebKit2/WebProcess/WebPage/mac/WKAccessibilityWebPageObject.mm.
        (-[WKAccessibilityWebPageObjectBase accessibilityFocusedUIElement]):
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.h: Added.
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: Added.
        (-[WKAccessibilityWebPageObject accessibilityIsIgnored]):
        (-[WKAccessibilityWebPageObject accessibilityAttributeNames]):
        (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]):
        (-[WKAccessibilityWebPageObject accessibilityIsAttributeSettable:]):
        (-[WKAccessibilityWebPageObject accessibilitySetValue:forAttribute:]):
        (-[WKAccessibilityWebPageObject convertScreenPointToRootView:]):
        (-[WKAccessibilityWebPageObject accessibilityActionNames]):
        (-[WKAccessibilityWebPageObject accessibilityChildren]):
        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:]):
        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]):
        (-[WKAccessibilityWebPageObject accessibilityShouldUseUniqueId]):
        (-[WKAccessibilityWebPageObject accessibilityHitTest:]):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeProcess):

2014-03-03  Martin Hock  <mhock@apple.com>

        Add support for sessions to MemoryCache.
        https://bugs.webkit.org/show_bug.cgi?id=127794

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkResourceLoader.h: Add sessionID() method.
        (WebKit::NetworkResourceLoader::sessionID):
        * NetworkProcess/mac/DiskCacheMonitor.h: Add sessionID member.
        * NetworkProcess/mac/DiskCacheMonitor.mm:
        (WebKit::DiskCacheMonitor::DiskCacheMonitor): Send sessionID to NetworkProcessConnection::DidCacheResource.
        * WebProcess/Network/NetworkProcessConnection.cpp: Add sessionID parameter to didCacheResource and pass to MemoryCache.
        (WebKit::NetworkProcessConnection::didCacheResource):
        * WebProcess/Network/NetworkProcessConnection.h: Ditto.
        * WebProcess/Network/NetworkProcessConnection.messages.in: Ditto.

2014-03-03  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Regression: ScrollView's scroll offset is never set after r164702
        https://bugs.webkit.org/show_bug.cgi?id=129620

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):

2014-03-03  Simon Fraser  <simon.fraser@apple.com>

        Crash when going into video fullscreen on iOS
        https://bugs.webkit.org/show_bug.cgi?id=129613

        Reviewed by Dean Jackson.
        
        We shouldn't reparent a UIView's layer without unparenting
        the view first.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::setVideoLayerID):

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

        [GTK] WebKit2WebExtension GIR can't be used in vala
        https://bugs.webkit.org/show_bug.cgi?id=127179

        Reviewed by Martin Robinson.

        Add a different pkg-config file for the web extensions API.

        * GNUmakefile.am:
        * PlatformGTK.cmake:
        * webkit2gtk-web-extension.pc.in: Added.

2014-03-02  Darin Adler  <darin@apple.com>

        Streamline use of TextIterator, cutting down includes and use of soon-to-be-deleted functions
        https://bugs.webkit.org/show_bug.cgi?id=129592

        Reviewed by Sam Weinig.

        * UIProcess/WebPageProxy.cpp: Added now-needed include.
        * WebProcess/WebPage/WebPage.cpp: Ditto.

2014-03-02  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] Keyboard deadlock when accepting/dismissing autocorrection.
        https://bugs.webkit.org/show_bug.cgi?id=129594
        <rdar://problem/16168978>

        Reviewed by Sam Weinig.

        As a temporary fix, we are using a synchronous
        message to accept autocorrection until we implement
        a solution that processes these requests on a thread that
        is not the main thread.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView applyAutocorrection:toString:withCompletionHandler:]):
        (-[WKContentView requestAutocorrectionContextWithCompletionHandler:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applyAutocorrection):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::applyAutocorrection):
        (WebKit::WebPage::syncApplyAutocorrection):

2014-03-02  Dan Bernstein  <mitz@apple.com>

        Try to fix the 32-bit build.

        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        (adjustedFontSize):

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

        Page Cache is not enabled when using the modern WebKit2 API
        https://bugs.webkit.org/show_bug.cgi?id=129585

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool initWithConfiguration:]):
        Default to CacheModelPrimaryWebBrowser until there is a way to configure it.

2014-03-02  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] Form controls handling
        https://bugs.webkit.org/show_bug.cgi?id=129344
        <rdar://problem/16053643>

        Reviewed by Simon Fraser.

        Adding support for select elements on iOS.
        There is full support on iPad, while on iPhone it is
        still limited to single select with no groups.
        The change also fixes the issue of the keyboard appearing
        on screen for types of elements that are implemented with
        a popover or a picker.

        * Scripts/webkit2/messages.py:
        * Shared/AssistedNodeInformation.cpp:
        (WebKit::WKOptionItem::encode):
        (WebKit::WKOptionItem::decode):
        (WebKit::AssistedNodeInformation::encode):
        (WebKit::AssistedNodeInformation::decode):
        * Shared/AssistedNodeInformation.h:
        (WebKit::WKOptionItem::WKOptionItem):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView inputView]):
        (-[WKContentView assistedNodeSelectOptions]):
        (-[WKContentView _startAssistingNode:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setAssistedNodeSelectedIndex):
        * UIProcess/ios/forms/WKFormSelectControl.h:
        * UIProcess/ios/forms/WKFormSelectControl.mm: Added.
        (-[WKFormSelectControl initWithView:]):
        (+[WKFormSelectControl createPeripheralWithView:]):
        (-[WKFormSelectControl assistantView]):
        (-[WKFormSelectControl beginEditing]):
        (-[WKFormSelectControl endEditing]):
        * UIProcess/ios/forms/WKFormSelectPicker.mm: Added.
        (-[WKSelectSinglePicker initWithView:]):
        (-[WKSelectSinglePicker dealloc]):
        (-[WKSelectSinglePicker controlView]):
        (-[WKSelectSinglePicker controlBeginEditing]):
        (-[WKSelectSinglePicker controlEndEditing]):
        (-[WKSelectSinglePicker numberOfComponentsInPickerView:]):
        (stringByTrimmingWhitespaceAndNewlines):
        (-[WKSelectSinglePicker pickerView:numberOfRowsInComponent:]):
        (-[WKSelectSinglePicker pickerView:attributedTitleForRow:forComponent:]):
        (-[WKSelectSinglePicker pickerView:didSelectRow:inComponent:]):
        * UIProcess/ios/forms/WKFormSelectPopover.mm: Added.
        (stringWithWritingDirection):
        (adjustedFontSize):
        (-[WKSelectTableViewController initWithView:hasGroups:]):
        (-[WKSelectTableViewController viewWillAppear:]):
        (-[WKSelectTableViewController numberOfSectionsInTableView:]):
        (-[WKSelectTableViewController tableView:numberOfRowsInSection:]):
        (-[WKSelectTableViewController tableView:titleForHeaderInSection:]):
        (-[WKSelectTableViewController populateCell:withItem:]):
        (-[WKSelectTableViewController findItemIndexAt:]):
        (-[WKSelectTableViewController findItemAt:]):
        (-[WKSelectTableViewController tableView:cellForRowAtIndexPath:]):
        (-[WKSelectTableViewController tableView:didSelectRowAtIndexPath:]):
        (-[WKSelectTableViewController hasText]):
        (-[WKSelectTableViewController insertText:]):
        (-[WKSelectTableViewController deleteBackward]):
        (-[WKSelectPopover initWithView:hasGroups:]):
        (-[WKSelectPopover dealloc]):
        (-[WKSelectPopover controlView]):
        (-[WKSelectPopover controlBeginEditing]):
        (-[WKSelectPopover controlEndEditing]):
        (-[WKSelectPopover _userActionDismissedPopover:]):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::setAssistedNodeSelectedIndex):
        (WebKit::innerFrameQuad):
        (WebKit::WebPage::getPositionInformation):
        (WebKit::hasFocusableNode):
        (WebKit::WebPage::getAssistedNodeInformation):
        (WebKit::WebPage::elementDidFocus):

2014-03-02  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Pages using tiled compositing layers allocate too many tiles on zoom
        https://bugs.webkit.org/show_bug.cgi?id=129471

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):
        A few interesting changes here:
        -Now that we do not use setExposedRect, we can pass the exposed area directly
         to the drawing area since everything is now in content coordinates :)
        -The scale is now converted to float before being compared to the Page's scaleFactor.
         The page's scalefactor being a float, the comparison was failing most of the time.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::setVisibleExtentContentRect):

2014-03-02  Darin Adler  <darin@apple.com>

        Change public text iterator API implementations to not depend on 16-bit character pointers
        https://bugs.webkit.org/show_bug.cgi?id=129566

        Reviewed by Anders Carlsson.

        * WebView/WebTextIterator.mm:
        (-[WKDOMTextIterator initWithRange:]): Use make_unique instead of adoptPtr.
        (-[WKDOMTextIterator advance]): Clear out the upconverted text since we are moving on to the
        next text.
        (-[WKDOMTextIterator currentTextPointer]): Upconvert if we have 8-bit text.
        (-[WKDOMTextIterator currentTextLength]): Call TextIterator::text().length() since we will
        probably be removing TextIterator::length eventually.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp: Removed unneded include of TextIterator.h.
        * WebProcess/WebPage/WebPage.cpp: Ditto.

2014-03-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Make impossible to build with <webkit2/webkit2.h> and <webkit2/webkit-web-extension.h> included together
        https://bugs.webkit.org/show_bug.cgi?id=129549

        Reviewed by Martin Robinson.

        Add a compile error to prevent mixing the UI and web process APIs.

        * UIProcess/API/gtk/webkit2.h:
        * WebProcess/InjectedBundle/API/gtk/webkit-web-extension.h:

2014-03-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove the include dir of the C API from the WebKit2 pkg-config file
        https://bugs.webkit.org/show_bug.cgi?id=129543

        Reviewed by Martin Robinson.

        We are not installing the C API headers anymore.

        * webkit2gtk.pc.in:

2014-03-01  Tim Horton  <timothy_horton@apple.com>

        Fix the Mac build.

        * UIProcess/mac/ViewGestureController.messages.in:

2014-03-01  Tim Horton  <timothy_horton@apple.com>

        WebKit2 View Gestures (Smart Magnification): Support for iOS
        https://bugs.webkit.org/show_bug.cgi?id=129146
        <rdar://problem/16032668>

        Reviewed by Benjamin Poulain.

        Add support for double-tap smart magnification on iOS.

        * DerivedSources.make:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        WKContentView is no longer API, so it can know about WKWebView
        and will always have one.

        (-[WKWebView contentView:didCommitLayerTree:WebKit::]):
        Don't replace the zoom scale if we're currently animating.

        (-[WKWebView _takeViewSnapshot]):
        Rename.

        (-[WKWebView _zoomToPoint:WebCore::atScale:]):
        (-[WKWebView _zoomToRect:WebCore::atScale:origin:WebCore::]):
        (constrainContentOffset):
        (-[WKWebView _scrollToRect:WebCore::origin:WebCore::minimumScrollDistance:]):
        (-[WKWebView _zoomOutWithOrigin:]):
        (-[WKWebView _zoomToRect:withOrigin:fitEntireRect:minimumScale:maximumScale:minimumScrollDistance:]):
        Add _zoomToRect:withOrigin:fitEntireRect:minimumScale:maximumScale:minimumScrollDistance:
        and _zoomOutWithOrigin: as internal API, for use by SmartMagnificationController via WKContentView.
        These will use some heuristics to generally center the target rect in the view
        in a way that should match WebKit1 fairly closely.

        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        Don't use the WKContentViewDelegate protocol for things that don't belong there.

        * UIProcess/ios/SmartMagnificationController.h: Added.
        * UIProcess/ios/SmartMagnificationController.messages.in: Added.
        * UIProcess/ios/SmartMagnificationController.mm: Added.
        (WebKit::SmartMagnificationController::SmartMagnificationController):
        (WebKit::SmartMagnificationController::~SmartMagnificationController):
        (WebKit::SmartMagnificationController::handleSmartMagnificationGesture):
        (WebKit::SmartMagnificationController::didCollectGeometryForSmartMagnificationGesture):
        SmartMagnificationController sits off of WKContentView, and sends/receives
        messages to the WebProcess to do the smart magnification hit-testing.

        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView initWithFrame:context:WebKit::configuration:WebKit::webView:]):
        As before, teach WKContentView about its owning WKWebView.

        (-[WKContentView _takeViewSnapshot]):
        Rename.

        (-[WKContentView _zoomToRect:withOrigin:fitEntireRect:minimumScale:maximumScale:minimumScrollDistance:]):
        (-[WKContentView _zoomOutWithOrigin:]):
        Forward _zoomToRect:::::: and _zoomOutWithOrigin: to WKWebView.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView _doubleTapRecognized:]):
        (-[WKContentView _twoFingerDoubleTapRecognized:]):
        Forward double tap to the SmartMagnificationController.

        * UIProcess/mac/ViewGestureController.h:
        * UIProcess/mac/ViewGestureController.messages.in:
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::didCollectGeometryForSmartMagnificationGesture):
        Retrieve the minimum/maximum viewport scale from the WebProcess.

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

        * WebProcess/WebPage/ViewGestureGeometryCollector.cpp:
        (WebKit::ViewGestureGeometryCollector::ViewGestureGeometryCollector):
        (WebKit::ViewGestureGeometryCollector::dispatchDidCollectGeometryForSmartMagnificationGesture):
        (WebKit::ViewGestureGeometryCollector::collectGeometryForSmartMagnificationGesture):
        (WebKit::ViewGestureGeometryCollector::collectGeometryForMagnificationGesture):
        Factor out code to send the geometry back to the UI process.

        * WebProcess/WebPage/ViewGestureGeometryCollector.h:
        * WebProcess/WebPage/ViewGestureGeometryCollector.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebPage.h:
        We should have a ViewGestureGeometryCollector on iOS too.

2014-03-01  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed follow-up to r164905 and r164912.

        * Platform/IPC/Connection.h: Only declare setShouldCloseConnectionOnMachExceptions() for the Mac port.
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didFinishLaunching): Only call setShouldCloseConnectionOnMachExceptions() on the Mac port.

2014-03-01  Gavin Barraclough  <barraclough@apple.com>

        Split UserActivity/CountedUserActivity
        https://bugs.webkit.org/show_bug.cgi?id=129520

        Reviewed by Sam Weinig.

        UserActivity currently provides an interface allowing counted, nested calls to enable/disable.
        In some cases it would be easier to use if it were a simpler boolean enabled/disabled interface.

        * PluginProcess/PluginProcess.h:
        (WebKit::PluginProcess::connectionActivity):
            - UserActivity->CountedUserActivity
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializeProcess):
            - beginActivity->start
        * Shared/ActivityAssertion.cpp:
        (WebKit::ActivityAssertion::ActivityAssertion):
        (WebKit::ActivityAssertion::~ActivityAssertion):
            - beginActivity->increment, endActivity->decrement.
        * Shared/ActivityAssertion.h:
            - UserActivity->CountedUserActivity
        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::setProcessSuppressionEnabled):
            - beginActivity->start, endActivity->stop.
        * Shared/ChildProcess.h:
            - removed processSuppressionEnabled()
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
            - beginActivity->start, endActivity->stop.

2014-03-01  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed trivial Linux buildfix after r164905.

        setShouldCloseConnectionOnMachExceptions() is defined in the Mac only
        Source/WebKit2/Platform/IPC/mac/ConnectionMac.cpp inside !PLATFORM(IOS)
        which means PLATFORM(MAC), because nobody else uses this source file.

        But ChildProcessProxy.cpp is used by Linux ports too, so we have to
        use the most specific #if guard here, which is PLATFORM(MAC).

        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::didFinishLaunching):

2014-02-28  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Assertions and bad behavior when zooming into an iframe containing apple.com
        https://bugs.webkit.org/show_bug.cgi?id=129537

        Reviewed by Benjamin Poulain.
        
        When building RemoteLayerTreeTransactions, the ordering of setting created
        layers and doing the recursive tree walk was wrong, such that we failed
        to noticed layers created during the recursiveBuildTransaction().
        
        Also harden the UI-side code against Obj-C exceptions thrown when layers
        are missing.

        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::RemoteLayerTreePropertyApplier::applyProperties): Assert when 
        children are not found, and protect against Obj-C exceptions.
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerCreationProperties::LayerCreationProperties):
        Initialize the members.
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::buildTransaction): Do the recursive walk
        before setting created and destroyed layers, since the walk can create
        layers (especially when swapping into tiled layers).

2014-02-28  Jinwoo Song  <jinwoo7.song@samsung.com>

        Fix WebKit2 build after r164890
        https://bugs.webkit.org/show_bug.cgi?id=129533

        Reviewed by Simon Fraser.

        LayerRepresentation.h is included to WebPageProxy.h in r164890
        but it is not used in non Mac or iOS port.

        * UIProcess/WebPageProxy.h:

2014-02-28  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Extract _data->_thumbnailView checks into a helper function
        https://bugs.webkit.org/show_bug.cgi?id=129517

        Reviewed by Sam Weinig.

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

2014-02-28  Pratik Solanki  <psolanki@apple.com>

        [iOS][WebKit2] Don't use any of the mach exception handling code on iOS
        https://bugs.webkit.org/show_bug.cgi?id=129516

        Reviewed by Sam Weinig.

        This code is not used on iOS after my fix in r164883. We can just move it all under
        !PLATFORM(IOS).

        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.cpp:
        (IPC::Connection::platformInvalidate):
        (IPC::Connection::platformInitialize):
        (IPC::Connection::open):
        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::didFinishLaunching):

2014-02-28  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] highlight rects should never big bigger than the view
        https://bugs.webkit.org/show_bug.cgi?id=129472
        <rdar://problem/15673655>

        Reviewed by Enrica Casucci.

        The unobscuredRect on WebPageProxy is the "true" view rect as seen by the user.
        Use that to constrain our highlight rects.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (highlightedQuadsFitInRect):
        (-[WKContentView _didGetTapHighlightForRequest:color:WebCore::quads:WebCore::topLeftRadius:WebCore::topRightRadius:WebCore::bottomLeftRadius:WebCore::bottomRightRadius:WebCore::]):

2014-02-28  Simon Fraser  <simon.fraser@apple.com>

        Make UIViews for compositing layers in the UI process on iOS
        https://bugs.webkit.org/show_bug.cgi?id=129508

        Reviewed by Sam Weinig.
        
        In order to parent UIScrollViews for -webkit-overflow-scrolling:touch,
        we need to use UIViews in the compositing layer hierarchy on iOS.
        
        Make much of the code that currently uses CALayers layer-or-view
        agnostic by using a typedef LayerOrView.
        
        Fix RemoteLayerTreePropertyApplier to apply properties to UIViews
        or CALayers; on iOS, we need both paths because we have to set properties
        on CALayer for remotely hosted content.
        
        Add iOS-specific implementation files for RemoteLayerTreeHost and RemoteScrollingCoordinatorProxy,
        since these need to see the UIView implementation. WebVideoFullscreenManagerProxy.cpp also needs
        to be come a .mm file.

        * Shared/mac/RemoteLayerTreePropertyApplier.h:
        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (-[UIView setSubviews:]):
        (WebKit::applyPropertiesToLayer):
        (WebKit::RemoteLayerTreePropertyApplier::applyProperties):
        * UIProcess/Cocoa/LayerRepresentation.h: Copied from Source/WebKit2/Shared/mac/RemoteLayerTreePropertyApplier.h.
        (asLayer):
        * UIProcess/PageClient.h:
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/LayerRepresentation.mm: Copied from Source/WebKit2/Shared/mac/RemoteLayerTreePropertyApplier.h.
        (asLayer):
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::setAcceleratedCompositingRootLayer):
        (WebKit::PageClientImpl::acceleratedCompositingRootLayer):
        * UIProcess/ios/RemoteLayerTreeHostIOS.mm: Added.
        (+[WKTransformView layerClass]):
        (-[WKRemoteView initWithFrame:contextID:]):
        (+[WKRemoteView layerClass]):
        (WebKit::RemoteLayerTreeHost::createLayer):
        * UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm: Added.
        (WebKit::layerRepresentationFromLayerOrView):
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _setAcceleratedCompositingRootView:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setAcceleratedCompositingRootLayer):
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm: Renamed from Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.cpp.
        (WebKit::WebVideoFullscreenManagerProxy::create):
        (WebKit::WebVideoFullscreenManagerProxy::WebVideoFullscreenManagerProxy):
        (WebKit::WebVideoFullscreenManagerProxy::~WebVideoFullscreenManagerProxy):
        (WebKit::WebVideoFullscreenManagerProxy::didCommitLayerTree):
        (WebKit::WebVideoFullscreenManagerProxy::setVideoLayerID):
        (WebKit::WebVideoFullscreenManagerProxy::enterFullscreen):
        (WebKit::WebVideoFullscreenManagerProxy::requestExitFullScreen):
        (WebKit::WebVideoFullscreenManagerProxy::play):
        (WebKit::WebVideoFullscreenManagerProxy::pause):
        (WebKit::WebVideoFullscreenManagerProxy::togglePlayState):
        (WebKit::WebVideoFullscreenManagerProxy::seekToTime):
        (WebKit::WebVideoFullscreenManagerProxy::didExitFullscreen):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::updateDebugIndicator):
        * UIProcess/mac/RemoteLayerTreeHost.h:
        (WebKit::RemoteLayerTreeHost::rootLayer):
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree):
        (WebKit::RemoteLayerTreeHost::getLayer):
        (WebKit::RemoteLayerTreeHost::createLayer):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setAcceleratedCompositingRootLayer):
        (WebKit::WebPageProxy::acceleratedCompositingRootLayer):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (PlatformCALayerRemote::recursiveBuildTransaction):

2014-02-28  Anders Carlsson  <andersca@apple.com>

        WebKit2.TerminateTwice test is failing.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        Turns out this can be called even when we're in the launching state so don't try to
        remove the process from the visited link provider when in that state.

2014-02-28  Chris Fleizach  <cfleizach@apple.com>

        AX: Crash in WebKit::WebPageProxy::registerWebProcessAccessibilityToken
        https://bugs.webkit.org/show_bug.cgi?id=127387

        Reviewed by Alexey Proskuryakov.

        Speculative fix for crasher. We should check if the connection is still valid before proceeding.

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

2014-02-28  Timothy Hatcher  <timothy@apple.com>

        Properly handle when Test.html is not present in Production builds.

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

        Reviewed by Joseph Pecoraro.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::isMainOrTestInspectorPage):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::inspectorTestPageURL):

2014-02-28  Pratik Solanki  <psolanki@apple.com>

        [iOS][WebKit2] Don't grab mach exception port on iOS
        https://bugs.webkit.org/show_bug.cgi?id=129505
        <rdar://problem/15972749>

        Reviewed by Anders Carlsson.

        Don't grab the mach exception port on iOS so we get crash logs for web process and network
        process.

        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::didFinishLaunching):

2014-02-28  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r164832.

        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::updateProcessState): Switch from removed
        'isValid' to 'state() != State::Running'

2014-02-28  Anders Carlsson  <andersca@apple.com>

        VisitedLinkProvider should keep track of processes, not pages
        https://bugs.webkit.org/show_bug.cgi?id=129497

        Reviewed by Dan Bernstein.

        Use a counted set of WebProcessProxy pointers instead of a set of pages.

        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::~VisitedLinkProvider):
        Assert that m_processes is null.

        (WebKit::VisitedLinkProvider::addProcess):
        Add the process to the set.

        (WebKit::VisitedLinkProvider::removeProcess):
        Remove the process from the set.

        * UIProcess/VisitedLinkProvider.h:
        
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        If our process is currently running, add it to the visited link provider.
        Otherwise it will be added in connectionWillOpen.

        (WebKit::WebPageProxy::close):
        If our process is running, remove it from the visited link provider. 
        Otherwise it's either crashed or not yet launched and will not have been added.

        (WebKit::WebPageProxy::connectionWillOpen):
        Add the process to the visited link provider.

        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        Remove the process from the visited link provider.

2014-02-27  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Stop using some deprecated functions in WKView.mm
        https://bugs.webkit.org/show_bug.cgi?id=129455

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView firstRectForCharacterRange:actualRange:]): Use convertRectToScreen,
        which is a replacement for convertBaseToScreen. Don't check for window being null,
        because isn't that crazy talk?
        (-[WKView _postFakeMouseMovedEventForFlagsChangedEvent:]): Use event's location
        in window instead of current mouse location. Using location that is not synced to
        event stream rarely makes sense, and it doesn't look like this is one of those cases.
        (-[WKView performDictionaryLookupAtCurrentMouseLocation]): Ditto.

2014-02-27  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed. Fix build after r164832

        * UIProcess/CoordinatedGraphics/CoordinatedDrawingAreaProxy.cpp:
        (WebKit::CoordinatedDrawingAreaProxy::waitForAndDispatchDidUpdateBackingStoreState):

2014-02-27  Martin Robinson  <mrobinson@igalia.com>

        Fix build after r164832

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::waitForAndDispatchDidUpdateBackingStoreState): WebProcessProxy::isLaunching() has been replaced
        by WebProcessProxy::state().

2014-02-27  Tim Horton  <timothy_horton@apple.com>

        Crash in RemoteLayerTreePropertyApplier::applyPropertiesToLayer
        https://bugs.webkit.org/show_bug.cgi?id=129456
        <rdar://problem/16182676>

        Reviewed by Simon Fraser.

        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::RemoteLayerTreePropertyApplier::applyPropertiesToLayer):
        We were dereferencing the RemoteLayerBackingStore without checking if it exists,
        in the accelerated drawing codepath. This case will occur if a layer
        previously drew contents, but now does not.

2014-02-27  Anders Carlsson  <andersca@apple.com>

        Simplify WebProcessProxy state accessors
        https://bugs.webkit.org/show_bug.cgi?id=129453

        Reviewed by Andreas Kling.

        Replace WebProcessProxy::isLaunching() and WebProcessProxy::isValid() with a single
        WebProcessProxy::state() that return one of three values: Launching, Running or Terminated.

        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::state):
        (WebKit::ChildProcessProxy::sendMessage):
        (WebKit::ChildProcessProxy::abortProcessLaunchIfNeeded):
        * Shared/ChildProcessProxy.h:
        (WebKit::ChildProcessProxy::canSendMessage):
        * UIProcess/Databases/DatabaseProcessProxy.cpp:
        (WebKit::DatabaseProcessProxy::getDatabaseProcessConnection):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):
        * UIProcess/Network/mac/NetworkProcessProxyMac.mm:
        (WebKit::NetworkProcessProxy::setProcessSuppressionEnabled):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::getPluginProcessConnection):
        (WebKit::PluginProcessProxy::getSitesWithData):
        (WebKit::PluginProcessProxy::clearSiteData):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::waitForDidUpdateViewState):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::requestTermination):
        (WebKit::WebProcessProxy::enableSuddenTermination):
        (WebKit::WebProcessProxy::disableSuddenTermination):
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::waitForPossibleGeometryUpdate):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::shouldDelayWindowOrderingForEvent):
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::updateProcessSuppressionState):

2014-02-27  Simon Fraser  <simon.fraser@apple.com>

        Crash tapping on play button on video on iOS
        https://bugs.webkit.org/show_bug.cgi?id=129452

        Reviewed by Benjamin Poulain.
        
        node->computedStyle() can return null. Just use
        renderer->style() to get the tap highlight color.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::tapHighlightAtPosition):

2014-02-27  Brian Burg  <bburg@apple.com>

        Web Inspector: model tests should use a special Test.html inspector page
        https://bugs.webkit.org/show_bug.cgi?id=129190

        Reviewed by Timothy Hatcher.

        Support creating a separate test inspector page, based on the value of
        InspectorController::isUnderTest(). Add this as a separate API call for
        WebInspectorProxy. Modify the navigation policy to check the URL against
        both normal and test inspector pages.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::isMainOrTestInspectorPage):
        (WebKit::decidePolicyForNavigationAction):
        (WebKit::WebInspectorProxy::createInspectorPageForTest):
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.messages.in:
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::inspectorTestPageURL):
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::inspectorTestPageURL):
        * UIProcess/ios/WebInspectorProxyIOS.mm:
        (WebKit::WebInspectorProxy::inspectorTestPageURL):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::inspectorTestPageURL):
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::openInspectorFrontend):
        * WebProcess/WebPage/WebInspector.cpp: Some drive-by nullptr refactorings.
        (WebKit::WebInspector::WebInspector):
        (WebKit::WebInspector::createInspectorPage):
        (WebKit::WebInspector::createInspectorPageForTest):
        (WebKit::WebInspector::destroyInspectorPage):
        * WebProcess/WebPage/WebInspector.h:

2014-02-27  Anders Carlsson  <andersca@apple.com>

        Make WebProcessProxy::pages() return an IteratorRange
        https://bugs.webkit.org/show_bug.cgi?id=129440

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageCopyRelatedPages):
        Move the implementation of WebPageProxy::relatedPages here.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcessRespectingProcessCountLimit):
        Use std::min_element here instead of a manual loop.

        * UIProcess/WebPageProxy.cpp:
        Remove WebPageProxy::relatedPages().

        * UIProcess/WebProcessProxy.cpp:
        Remove WebProcessProxy::pages().

        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::pages):
        Make this return an IteratorRange.

        (WebKit::WebProcessProxy::pageCount):
        New function that returns the page count.

2014-02-27  Alexey Proskuryakov  <ap@apple.com>

        [Mac][WK2] Remove hardcoded Cmd+B and Cmd+I from WKView.mm
        https://bugs.webkit.org/show_bug.cgi?id=129436

        Reviewed by Darin Adler.

        * UIProcess/API/mac/WKView.mm: Removed a historic WebKit1 behavior that we don't
        need to preserve in WebKit2.

2014-02-27  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Remove unused SPI declarations from WKView.mm
        https://bugs.webkit.org/show_bug.cgi?id=129434

        Reviewed by Sam Weinig.

        * UIProcess/API/mac/WKView.mm:

2014-02-26  Michael Saboff  <msaboff@apple.com>

        Auto generate bytecode information for bytecode parser and LLInt
        https://bugs.webkit.org/show_bug.cgi?id=129181

        Reviewed by Mark Lam.

        Added ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR} to WebKit2_INCLUDE_DIRECTORIES due to new
        generated Bytecodes.h include file.

        * CMakeLists.txt:

2014-02-27  Anders Carlsson  <andersca@apple.com>

        Look up already existing VisitedLinkTableController objects by identifier
        https://bugs.webkit.org/show_bug.cgi?id=129431

        Reviewed by Dan Bernstein.

        * WebProcess/WebPage/VisitedLinkTableController.cpp:
        (WebKit::visitedLinkTableControllers):
        (WebKit::VisitedLinkTableController::getOrCreate):
        (WebKit::VisitedLinkTableController::VisitedLinkTableController):
        (WebKit::VisitedLinkTableController::~VisitedLinkTableController):
        * WebProcess/WebPage/VisitedLinkTableController.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):

2014-02-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WK2] Blocks when fetching plugins information
        https://bugs.webkit.org/show_bug.cgi?id=115650

        Reviewed by Gustavo Noronha Silva.

        Use a persistent cache to store the plugins metadata to avoid
        having to load all the plugins everytime a plugin is used for the
        first time.

        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * PlatformGTK.cmake:
        * Shared/Plugins/Netscape/NetscapePluginModule.h:
        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::NetscapePluginModule::parseMIMEDescription): Make this
        method public.
        (WebKit::NetscapePluginModule::buildMIMEDescription): Added this
        helper to build the MIME description string.
        * UIProcess/Plugins/gtk/PluginInfoCache.cpp: Added.
        (WebKit::PluginInfoCache::shared):
        (WebKit::PluginInfoCache::PluginInfoCache):
        (WebKit::PluginInfoCache::~PluginInfoCache):
        (WebKit::PluginInfoCache::saveToFileIdleCallback):
        (WebKit::PluginInfoCache::saveToFile):
        (WebKit::PluginInfoCache::getPluginInfo):
        (WebKit::PluginInfoCache::updatePluginInfo):
        * UIProcess/Plugins/gtk/PluginInfoCache.h: Added.
        * UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp:
        (WebKit::PluginInfoStore::getPluginInfo): Check first if we have
        metadata of the plugin in the cache and update the cache if we
        loaded the plugin to get its metadata.

2014-02-27  Ryan Lortie  <desrt@desrt.ca>

        need to #include <libgen.h> for basename
        https://bugs.webkit.org/show_bug.cgi?id=128597

        Reviewed by Carlos Garcia Campos.

        * PluginProcess/unix/PluginProcessMainUnix.cpp: include <libgen.h> as required by POSIX for basename

2014-02-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Web Inspector doesn't work with network process enabled
        https://bugs.webkit.org/show_bug.cgi?id=127651

        Reviewed by Sergio Villar Senin.

        The problem is that the web inspector loads so many resources,
        that when using the network process, a lot of IPC traffic is
        generated causing the send buffer of the socket to be full. When
        that happens sendmsg() fails with EAGAIN, because we are using non
        blocking sockets, and we are not handling neither EAGAIN nor
        EWOULDBLOCK errors (we do when reading from the socket, though).

        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::readyReadHandler): Add a log message to know
        when reading from the socket fails for any unhandled error.
        (IPC::Connection::sendOutgoingMessage): Handle EAGAIN and
        EWOULDBLOCK errors to try again in those cases. Also add a log
        message for unhandled errors.

2014-02-26  Philippe Normand  <pnormand@igalia.com>

        Unreviewed GTK build fix after r164751.

        * GNUmakefile.list.am:

2014-02-26  Dan Bernstein  <mitz@apple.com>

        iOS build fix.

        * UIProcess/ios/forms/WKFormPopover.h:
        * UIProcess/ios/forms/WKFormPopover.mm:

2014-02-26  Dan Bernstein  <mitz@apple.com>

        Replaced use of the EXCLUDED_SOURCE_FILE_NAMES build setting with #if PLATFORM(…) guards in
        the files themselves.

        Rubber-stamped by Sam Weinig.

        * Configurations/WebKit2.xcconfig: Cleared out EXCLUDED_SOURCE_FILE_NAMES_macosx, and left
        EXCLUDED_SOURCE_FILE_NAMES_iphoneos containing just the names of resources the should be
        excluded from Copy Files build phases.
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        * NetworkProcess/mac/NetworkProcessMac.mm:
        * Shared/Downloads/ios/DownloadIOS.mm:
        * Shared/Downloads/mac/DownloadMac.mm:
        * Shared/NativeWebTouchEvent.h:
        * Shared/WebPlatformTouchPoint.cpp:
        * Shared/WebTouchEvent.cpp:
        * Shared/ios/NativeWebKeyboardEventIOS.mm:
        * Shared/ios/NativeWebTouchEventIOS.mm:
        * Shared/ios/WebIOSEventFactory.h:
        * Shared/ios/WebIOSEventFactory.mm:
        * Shared/mac/PasteboardTypes.h:
        * Shared/mac/PasteboardTypes.mm:
        * Shared/mac/PrintInfoMac.mm:
        * UIProcess/API/C/WKInspector.cpp:
        * UIProcess/API/Cocoa/WKThumbnailView.h:
        * UIProcess/API/Cocoa/WKThumbnailView.mm:
        * UIProcess/API/Cocoa/WKThumbnailViewInternal.h:
        * UIProcess/API/ios/WKViewIOS.mm:
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        * UIProcess/ios/TextCheckerIOS.mm:
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        * UIProcess/ios/WKActionSheet.h:
        * UIProcess/ios/WKActionSheet.mm:
        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        * UIProcess/ios/WKContentView.mm:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        * UIProcess/ios/WKGeolocationProviderIOS.h:
        * UIProcess/ios/WKGeolocationProviderIOS.mm:
        * UIProcess/ios/WKGeolocationProviderIOSObjCSecurityOrigin.mm:
        * UIProcess/ios/WKScrollView.h:
        * UIProcess/ios/WKScrollView.mm:
        * UIProcess/ios/WebInspectorProxyIOS.mm:
        * UIProcess/ios/WebPageProxyIOS.mm:
        * UIProcess/ios/WebProcessProxyIOS.mm:
        * UIProcess/ios/forms/WKFormInputControl.h:
        * UIProcess/ios/forms/WKFormInputControl.mm:
        * UIProcess/ios/forms/WKFormPopover.h:
        * UIProcess/ios/forms/WKFormPopover.mm:
        * UIProcess/mac/FindIndicatorWindow.h:
        * UIProcess/mac/FindIndicatorWindow.mm:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        * UIProcess/mac/TextCheckerMac.mm:
        * UIProcess/mac/WKFullKeyboardAccessWatcher.h:
        * UIProcess/mac/WKFullKeyboardAccessWatcher.mm:
        * UIProcess/mac/WKPrintingView.h:
        * UIProcess/mac/WKPrintingView.mm:
        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        * UIProcess/mac/WebPageProxyMac.mm:
        * UIProcess/mac/WebProcessProxyMac.mm:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        * WebProcess/WebCoreSupport/ios/WebDatabaseManagerIOS.mm:
        * WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm:
        * WebProcess/WebCoreSupport/ios/WebFrameLoaderClientIOS.mm:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        * WebProcess/WebPage/ios/WebBackForwardListProxyIOS.mm:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObject.h:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObject.mm:
        * WebProcess/WebPage/mac/WebPageMac.mm:

2014-02-26  Anders Carlsson  <andersca@apple.com>

        VisitedLinkProvider should know which pages it belongs to
        https://bugs.webkit.org/show_bug.cgi?id=129410

        Reviewed by Dan Bernstein.

        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::~VisitedLinkProvider):
        (WebKit::VisitedLinkProvider::addPage):
        (WebKit::VisitedLinkProvider::removePage):
        * UIProcess/VisitedLinkProvider.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::close):

2014-02-26  Enrica Casucci  <enrica@apple.com>

        Build fix.

        Unexpected line break.

        * Configurations/WebKit2.xcconfig:

2014-02-26  Enrica Casucci  <enrica@apple.com>

        Build fix.

        WKFormInputControl.mm and WKFormPopover.mm should be excluded from OS X builds.

        * Configurations/WebKit2.xcconfig:

2014-02-26  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] Form controls handling: implement date and time controls.
        https://bugs.webkit.org/show_bug.cgi?id=129344

        Reviewed by Simon Fraser and Joseph Pecoraro.

        This is another step in the implementation of form controls on iOS
        for WebKit2. This adds support for date and time input elements supporting
        the different look and feel for iPhone and iPad.
        WKDateTimePicker implements iPhone UI and
        WKDateTimePopover implements iPad UI.
        WKFormRotatingAccessoryPopover and WKRotatingPopover are
        classes that implement the popover object handling the rotation
        and they will be used as base class for the select controls as well.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _displayFormNodeInputView]):
        (-[WKContentView inputView]):
        (-[WKContentView _startAssistingNode:]):
        (-[WKContentView _stopAssistingNode]):
        * UIProcess/ios/WKFormInputControl.h: Added.
        * UIProcess/ios/WKFormInputControl.mm: Added.
        (-[WKDateTimePicker datePicker]):
        (-[WKDateTimePicker initWithView:datePickerMode:]):
        (-[WKDateTimePicker dealloc]):
        (-[WKDateTimePicker controlView]):
        (-[WKDateTimePicker _timeZoneOffsetFromGMT:]):
        (-[WKDateTimePicker _sanitizeInputValueForFormatter:]):
        (-[WKDateTimePicker _dateChangedSetAsNumber]):
        (-[WKDateTimePicker _dateChangedSetAsString]):
        (-[WKDateTimePicker _dateChanged]):
        (-[WKDateTimePicker _dateChangeHandler:]):
        (-[WKDateTimePicker controlBeginEditing]):
        (-[WKDateTimePicker controlEndEditing]):
        (-[WKFormInputControl initWithView:]):
        (+[WKFormInputControl createPeripheralWithView:]):
        (-[WKFormInputControl beginEditing]):
        (-[WKFormInputControl endEditing]):
        (-[WKFormInputControl assistantView]):
        (-[WKDateTimePopoverViewController initWithView:datePickerMode:]):
        (-[WKDateTimePopoverViewController innerControl]):
        (-[WKDateTimePopoverViewController loadView]):
        (-[WKDateTimePopover clear:]):
        (-[WKDateTimePopover initWithView:datePickerMode:]):
        (-[WKDateTimePopover viewController]):
        (-[WKDateTimePopover controlBeginEditing]):
        (-[WKDateTimePopover controlEndEditing]):
        (-[WKDateTimePopover controlView]):
        * UIProcess/ios/WKFormPeripheral.h: Added.
        * UIProcess/ios/WKFormPopover.h: Added.
        * UIProcess/ios/WKFormPopover.mm: Added.
        (-[WKFormRotatingAccessoryPopover initWithView:]):
        (-[WKFormRotatingAccessoryPopover accessoryDone]):
        (-[WKFormRotatingAccessoryPopover popoverArrowDirections]):
        (-[WKFormRotatingAccessoryPopover popoverWasDismissed:]):
        (-[WKRotatingPopover initWithView:]):
        (-[WKRotatingPopover dealloc]):
        (-[WKRotatingPopover popoverController]):
        (-[WKRotatingPopover setPopoverController:]):
        (-[WKRotatingPopover popoverArrowDirections]):
        (-[WKRotatingPopover presentPopoverAnimated:]):
        (-[WKRotatingPopover dismissPopoverAnimated:]):
        (-[WKRotatingPopover willRotate:]):
        (-[WKRotatingPopover didRotate:]):
        (-[WKRotatingPopover popoverControllerDidDismissPopover:]):
        * UIProcess/ios/WKFormSelectControl.h: Added.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setAssistedNodeValue):
        (WebKit::WebPageProxy::setAssistedNodeValueAsNumber):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::setAssistedNodeValue):
        (WebKit::WebPage::setAssistedNodeValueAsNumber):

2014-02-26  Pratik Solanki  <psolanki@apple.com>

        [iOS][Webkit2] Enable codesigning entitlement for web process
        https://bugs.webkit.org/show_bug.cgi?id=129401
        <rdar://problem/16173873>

        Reviewed by Geoffrey Garen.

        * Configurations/WebContent-iOS.entitlements:

2014-02-26  Anders Carlsson  <andersca@apple.com>

        Give VisitedLinkProviders an identifier and send them to the web process
        https://bugs.webkit.org/show_bug.cgi?id=129400

        Reviewed by Dan Bernstein.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/Cocoa/WKVisitedLinkProviderInternal.h:
        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::generateIdentifier):
        (WebKit::VisitedLinkProvider::VisitedLinkProvider):
        * UIProcess/VisitedLinkProvider.h:
        (WebKit::VisitedLinkProvider::identifier):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createWebPage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/WebPageProxy.h:

2014-02-26  Jinwoo Song  <jinwoo7.song@samsung.com>

        Unreviewed CMAKE build fix after r164751.

        * CMakeLists.txt: Renamed WebVisitedLinkProvider.cpp to VisitedLinkTableController.cpp.

2014-02-26  Anders Carlsson  <andersca@apple.com>

        Rename WebVisitedLinkProvider to VisitedLinkTableController
        https://bugs.webkit.org/show_bug.cgi?id=129396

        Reviewed by Dan Bernstein.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/VisitedLinkTableController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/WebVisitedLinkProvider.cpp.
        (WebKit::VisitedLinkTableController::create):
        (WebKit::VisitedLinkTableController::VisitedLinkTableController):
        (WebKit::VisitedLinkTableController::~VisitedLinkTableController):
        (WebKit::VisitedLinkTableController::isLinkVisited):
        (WebKit::VisitedLinkTableController::addVisitedLink):
        * WebProcess/WebPage/VisitedLinkTableController.h: Renamed from Source/WebKit2/WebProcess/WebPage/WebVisitedLinkProvider.h.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):

2014-02-26  Enrica Casucci  <enrica@apple.com>

        Keyboard keeps showing up when clicking links after being shown once.
        https://bugs.webkit.org/show_bug.cgi?id=129392

        Reviewed by Benjamin Poulain.

        This is a regression introduced by http://trac.webkit.org/changeset/164690.
        _requiresKeyboardWhenFirstResponder should always return NO, if there is
        no assisted node.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _requiresKeyboardWhenFirstResponder]):

2014-02-26  Myles C. Maxfield  <mmaxfield@apple.com>

        WebProcessProxy::updateProcessState() is causing duplicate symbol linker errors
        https://bugs.webkit.org/show_bug.cgi?id=129390

        Reviewed by Tim Horton.

        Caused by r164737. WebProcessProxy::updateProcessState() is defined in a header, outside of
        a class, but isn't inlined.

        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::updateProcessState):

2014-02-26  Brian Burg  <bburg@apple.com>

        Web Replay: route through UserInputBridge when delivering user inputs to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=128150

        Reviewed by Timothy Hatcher.

        When delivering user inputs to WebCore, route calls through the page's UserInputBridge.
        This allows us to capture and replay user inputs from WebKit2 solely within WebCore.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::tryClose):
        (WebKit::WebPage::loadRequest):
        (WebKit::WebPage::stopLoadingFrame):
        (WebKit::WebPage::stopLoading):
        (WebKit::WebPage::reload):
        (WebKit::WebPage::contextMenuAtPointInWindow):
        (WebKit::handleContextMenuEvent):
        (WebKit::handleMouseEvent):
        (WebKit::handleWheelEvent):
        (WebKit::handleKeyEvent):
        (WebKit::WebPage::scroll):
        (WebKit::WebPage::logicalScroll):

2014-02-26  Pratik Solanki  <psolanki@apple.com>

        [iOS][WebKit2] Adopt SPI for managing tabs
        https://bugs.webkit.org/show_bug.cgi?id=129188
        <rdar://problem/15939827>

        Reviewed by Gavin Barraclough.

        Call into assertions SPI to mark tabs as foreground and background.

        * Configurations/WebKit2.xcconfig:
        * Platform/IPC/Connection.h:
        (IPC::Connection::xpcConnection): Expose the xpc_connection_t.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewStateDidChange):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didFinishLaunching):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::updateProcessState):
        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::updateProcessState): Added. This goes through the list of
        WebPageProxies and sets the process state to foreground if one of them is in a window.
        Otherwise, it sets it to background.

2014-02-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r164725 and r164731.
        http://trac.webkit.org/changeset/164725
        http://trac.webkit.org/changeset/164731
        https://bugs.webkit.org/show_bug.cgi?id=129382

        WebKitTestRunner build is broken on IOS (Requested by smfr on
        #webkit).

        * UIProcess/API/Cocoa/WKView.h:
        * UIProcess/API/ios/WKViewIOS.mm: Added.
        (-[WKView initWithCoder:]):
        (-[WKView initWithFrame:processGroup:browsingContextGroup:]):
        (-[WKView initWithFrame:processGroup:browsingContextGroup:relatedToView:]):
        (-[WKView dealloc]):
        (-[WKView setFrame:]):
        (-[WKView setBounds:]):
        (-[WKView scrollView]):
        (-[WKView browsingContextController]):
        (-[WKView setAllowsBackForwardNavigationGestures:]):
        (-[WKView allowsBackForwardNavigationGestures]):
        (-[WKView viewForZoomingInScrollView:]):
        (-[WKView scrollViewWillBeginZooming:withView:]):
        (-[WKView scrollViewWillBeginDragging:]):
        (-[WKView _didFinishScrolling]):
        (-[WKView scrollViewDidEndDragging:willDecelerate:]):
        (-[WKView scrollViewDidEndDecelerating:]):
        (-[WKView scrollViewDidScrollToTop:]):
        (-[WKView scrollViewDidScroll:]):
        (-[WKView scrollViewDidZoom:]):
        (-[WKView scrollViewDidEndZooming:withView:atScale:]):
        (-[WKView _commonInitializationWithContextRef:pageGroupRef:relatedToPage:]):
        (-[WKView _frameOrBoundsChanged]):
        (-[WKView _updateVisibleContentRects]):
        (-[WKView _keyboardChangedWithInfo:adjustScrollView:]):
        (-[WKView _keyboardWillChangeFrame:]):
        (-[WKView _keyboardDidChangeFrame:]):
        (-[WKView _keyboardWillShow:]):
        (-[WKView _keyboardWillHide:]):
        (-[WKView pageRef]):
        (-[WKView initWithFrame:contextRef:pageGroupRef:]):
        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]):
        (-[WKView minimumLayoutSizeOverride]):
        (-[WKView setMinimumLayoutSizeOverride:]):
        (-[WKView _obscuredInsets]):
        (-[WKView _setObscuredInsets:]):
        (-[WKView _beginInteractiveObscuredInsetsChange]):
        (-[WKView _endInteractiveObscuredInsetsChange]):
        (-[WKView _pageExtendedBackgroundColor]):
        (-[WKView _setBackgroundExtendsBeyondPage:]):
        (-[WKView _backgroundExtendsBeyondPage]):
        * WebKit2.xcodeproj/project.pbxproj:

2014-02-26  Simon Fraser  <simon.fraser@apple.com>

        Build fix: ContextMenuContextData.* should not be in the Copy Files
        phase.

        * WebKit2.xcodeproj/project.pbxproj:

2014-02-26  Simon Fraser  <simon.fraser@apple.com>

        Fix MiniBrowser/WebKitTestRunner link errors; WKView still
        needs to be exported while these tools are using it.

        * UIProcess/API/Cocoa/WKView.h:

2014-02-26  Simon Fraser  <simon.fraser@apple.com>

        Fix the iOS build by wrapping some context menu stuff in #if ENABLE(CONTEXT_MENUS)

        * UIProcess/WebPageProxy.h:

2014-02-26  Martin Hock  <mhock@apple.com>

        Create SessionID value-style class for session IDs.
        https://bugs.webkit.org/show_bug.cgi?id=129141

        The below changes deal solely with mechanical changes to use the SessionID value class instead of uint64_t except where noted.

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::storageSession):
        (WebKit::NetworkConnectionToWebProcess::startDownload):
        (WebKit::NetworkConnectionToWebProcess::cookiesForDOM):
        (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM):
        (WebKit::NetworkConnectionToWebProcess::cookiesEnabled):
        (WebKit::NetworkConnectionToWebProcess::cookieRequestHeaderFieldValue):
        (WebKit::NetworkConnectionToWebProcess::getRawCookies):
        (WebKit::NetworkConnectionToWebProcess::deleteCookie):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::ensurePrivateBrowsingSession):
        (WebKit::NetworkProcess::destroyPrivateBrowsingSession):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/RemoteNetworkingContext.h:
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
        * NetworkProcess/soup/RemoteNetworkingContextSoup.cpp:
        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters):
        * Shared/Network/NetworkResourceLoadParameters.h:
        * Shared/SessionTracker.cpp:
        (WebKit::staticSessionMap):
        (WebKit::storageSessionToID):
        (WebKit::SessionTracker::sessionMap):
        (WebKit::SessionTracker::session):
        (WebKit::SessionTracker::sessionID):
        (WebKit::SessionTracker::setSession):
        (WebKit::SessionTracker::destroySession):
        * Shared/SessionTracker.h: Move code to SessionID class.
        * Shared/WebCoreArgumentCoders.cpp: Add encode and decode for SessionID.
        (IPC::ArgumentCoder<SessionID>::encode):
        (IPC::ArgumentCoder<SessionID>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/mac/CookieStorageShim.mm:
        (WebKit::webKitCookieStorageCopyRequestHeaderFieldsForURL):
        * UIProcess/APISession.cpp:
        (API::generateID):
        (API::Session::defaultSession):
        (API::Session::legacyPrivateSession):
        (API::Session::Session):
        (API::Session::isEphemeral):
        (API::Session::getID):
        * UIProcess/APISession.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::setAnyPageGroupMightHavePrivateBrowsingEnabled):
        (WebKit::WebContext::createNewWebProcess):
        * UIProcess/WebContext.h:
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::sessionID):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setPrivateBrowsingEnabled):
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::scheduleLoad):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::loadResourceSynchronously):
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession):
        (WebKit::WebFrameNetworkingContext::storageSession):
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession):
        (WebKit::WebFrameNetworkingContext::storageSession):
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h:
        * WebProcess/WebPage/WebPage.cpp: Move sessionID to Page to allow WebCore to access it.
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::sessionID):
        (WebKit::WebPage::isUsingEphemeralSession):
        (WebKit::WebPage::setSessionID):
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::ensurePrivateBrowsingSession):
        (WebKit::WebProcess::destroyPrivateBrowsingSession):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2014-02-26  Anders Carlsson  <andersca@apple.com>

        Get rid of WKViewIOS.mm
        https://bugs.webkit.org/show_bug.cgi?id=129378

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKView.h:
        * UIProcess/API/ios/WKViewIOS.mm: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2014-02-26  Alexey Proskuryakov  <ap@apple.com>

        [iOS] Remove some erroneously captured blocks
        https://bugs.webkit.org/show_bug.cgi?id=129362

        Reviewed by Sam Weinig.

        Remove unused captured Objective-C block variables (capturing these doesn't work anyway).

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView requestAutocorrectionRectsForString:withCompletionHandler:]):
        (-[WKContentView requestAutocorrectionContextWithCompletionHandler:]):

2014-02-26  Brady Eidson  <beidson@apple.com>

        Pipe experimental image controls menu up to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=129339

        Reviewed by Simon Fraser.

        Add a WebKit object to represent the data from a ContextMenuContext object that can be shared via IPC:
        * Shared/ContextMenuContextData.cpp: Added.
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        (WebKit::ContextMenuContextData::encode):
        (WebKit::ContextMenuContextData::decode):
        * Shared/ContextMenuContextData.h: Added.
        (WebKit::ContextMenuContextData::webHitTestResultData):
        (WebKit::ContextMenuContextData::isImageControl):

        Update the rest of WK2 to use this object instead of WebHitTestResult::Data directly:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showContextMenu):
        (WebKit::WebPageProxy::internalShowContextMenu): Also make an ENABLE(IMAGE_CONTROLS) change here.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

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

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebKit2.xcodeproj/project.pbxproj:

2014-02-26  Enrique Ocaña González  <eocanha@igalia.com>

        WebKitFindOptions shouldn't expose WEBKIT_FIND_OPTIONS_SHOW_{OVERLAY,FIND_INDICATOR,HIGHLIGHT}
        https://bugs.webkit.org/show_bug.cgi?id=129263

        Reviewed by Sergio Villar Senin.

        Avoided the need of WEBKIT_FIND_OPTIONS_SHOW_* fields by changing the semantics
        of the findOptions field in WebKitFindOptions.

        * UIProcess/API/gtk/WebKitFindController.cpp: Now
        _WebKitFindControllerPrivate.findOptions is interpreted as WebKit::FindOptions
        instead of WebKitFindOptions like before. Now the conversion has to be done in
        both ways.
        (toWebKitFindOptions): Added conversion function from WebKit::FindOptions to
        WebKitFindOptions.
        (webkit_find_controller_get_options):
        (webKitFindControllerPerform):
        (webkit_find_controller_search):
        (webkit_find_controller_search_next):
        (webkit_find_controller_search_previous):
        (webkit_find_controller_count_matches):
        * UIProcess/API/gtk/WebKitFindController.h: Removed values that shouldn't be
        exposed.

2014-02-26  Gergo Balogh  <gbalogh.u-szeged@partner.samsung.com>

        Inspector server should be enabled only when the web sockets is enabled too.
        https://bugs.webkit.org/show_bug.cgi?id=129304

        Reviewed by Csaba Osztrogonác.

        * config.h:

2014-02-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r164702.

        * UIProcess/DrawingAreaProxy.cpp:

2014-02-26  Martin Robinson  <mrobinson@igalia.com>

        [GTK] generate-gtkdoc can fail with WebKit1 or WebKit2 only builds
        https://bugs.webkit.org/show_bug.cgi?id=129319

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.am: Do not generate the documentation configuration file if the port
        is disabled.

2014-02-25  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Split the rects/scale updates in 3 internally consistent groups
        https://bugs.webkit.org/show_bug.cgi?id=129354

        Reviewed by Sam Weinig.

        During scaling, the scale and rect of UIScrollView, WebPageProxy, DrawingAreaProxy,
        DrawingArea and WebPage were in completely inconsistent states.

        Some of those disconnect were temporary (like when setting the rect and scale in two different
        messages), some were lasting the time of a tile update (like the UIProcess view of the scale).
        This was causing various visual glitches.

        To fix this, all the updates from the UIProcess are funneled through a single path and the values
        are split into 3 different groups/types.
        When updating the scale/rects, the UIProcess sends the new information to the WebProcess on a queue
        through ViewUpdateDispatcher. There, the updates are accumulated until the MainThread is available.
        Once the main thread is "unblocked" from the previous frame, all the data are updated at once from
        the last known state in ViewUpdateDispatcher. The new tiles are created for the new converage information
        and they are sent to the UIProcess.

        At any point, there are 3 types of scale and rects used for different purpose:
        -In the UIProcess, there is the UIScrollView scale and rects which represent the "true" state or what
         is currently on screen.
         That information is mirrored into WebPageProxy for the other classes needing it like DrawingAreaProxy.
        -In the WebProcess, there is the last known state. That state is always lagging a little behind the "true"
         state.
        -Back in the UIProcess, we have the tile states that is attached to RemoteLayerTreeTransaction. It is used
         to setup the rendering.

        With this change, there are two paths for updating the page scale factor:
        -The UI drives the change, the updates goes WKWebView->WKContentView->WebPageProxy->ViewUpdateDispatcher
         ->WebPage->RemoteLayerTreeDrawingArea->RemoteLayerTreeDrawingAreaProxy->WKContentView->WKWebView.
        -If changes in the content force scaling parameters, the updates goes: WebPage->RemoteLayerTreeDrawingArea
         ->RemoteLayerTreeDrawingAreaProxy->WKContentView->WKWebView.
        The two kind of updates frequently conflicts during loading. We differentiate those through the flag
        scaleWasSetByUIProcess passed with the updates. In cases of conflicts, the user always wins.

        * DerivedSources.make:
        * Scripts/webkit2/messages.py:
        (struct_or_class):
        * Shared/VisibleContentRectUpdateInfo.cpp: Added.
        (WebKit::VisibleContentRectUpdateInfo::encode):
        (WebKit::VisibleContentRectUpdateInfo::decode):
        * Shared/VisibleContentRectUpdateInfo.h: Added.
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::VisibleContentRectUpdateInfo::exposedRect):
        (WebKit::VisibleContentRectUpdateInfo::unobscuredRect):
        (WebKit::VisibleContentRectUpdateInfo::scale):
        (WebKit::operator==):
        * Shared/mac/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::scaleWasSetByUIProcess):
        (WebKit::RemoteLayerTreeTransaction::setScaleWasSetByUIProcess):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView contentView:didCommitLayerTree:WebKit::]):
        (-[WKWebView _didFinishScrolling]):
        (-[WKWebView scrollViewDidScroll:]):
        (-[WKWebView scrollViewDidZoom:]):
        (-[WKWebView scrollViewDidEndZooming:withView:atScale:]):
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _updateVisibleContentRectsWithStableState:]):
        (-[WKWebView _setObscuredInsets:]):
        (-[WKWebView _endInteractiveObscuredInsetsChange]):
        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView _updateVisibleContentRects]):
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::DrawingAreaProxy):
        (WebKit::DrawingAreaProxy::setCustomFixedPositionRect):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::updateDebugIndicator):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::displayedContentScale):
        (WebKit::WebPageProxy::exposedContentRect):
        (WebKit::WebPageProxy::unobscuredContentRect):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:scale:inStableState:]):
        (-[WKContentView didFinishScrolling]):
        (-[WKContentView didZoomToScale:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::updateVisibleContentRects):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::scaledExposedRect):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::indicatorLocation):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::indicatorScale):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::updateDebugIndicator):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/ViewUpdateDispatcher.cpp: Added.
        (WebKit::ViewUpdateDispatcher::create):
        (WebKit::ViewUpdateDispatcher::ViewUpdateDispatcher):
        (WebKit::ViewUpdateDispatcher::~ViewUpdateDispatcher):
        (WebKit::ViewUpdateDispatcher::initializeConnection):
        (WebKit::ViewUpdateDispatcher::visibleContentRectUpdate):
        (WebKit::ViewUpdateDispatcher::dispatchVisibleContentRectUpdate):
        * WebProcess/WebPage/ViewUpdateDispatcher.h: Added.
        * WebProcess/WebPage/ViewUpdateDispatcher.messages.in: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::scalePage):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::scaleWasSetByUIProcess):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::tapHighlightAtPosition):
        (WebKit::WebPage::updateVisibleContentRects):
        (WebKit::WebPage::willStartUserTriggeredZooming):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeConnection):
        * WebProcess/WebProcess.h:

2014-02-25  Anders Carlsson  <andersca@apple.com>

        Rename WebCore::VisitedLinkProvider to WebCore::VisitedLinkStore
        https://bugs.webkit.org/show_bug.cgi?id=129357

        Reviewed by Sam Weinig.

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

2014-02-25  Enrica Casucci  <enrica@apple.com>

        [WebKit2] Form controls handling.
        https://bugs.webkit.org/show_bug.cgi?id=129344
        <rdar://problem/16053643>

        Reviewed by Simon Fraser and Joseph Pecoraro.

        This is the step toward adding support for
        form controls iOS style. It adds the logic to
        select the appropriate keyboard type based on the
        element type and introduces the AssistedNodeInformation
        structure used currently for the keyboard type selection
        and that will be used to populate pickers and popovers.
        It also provides information to enable/disable next/previous
        buttons in the accessory view.

        * Scripts/webkit2/messages.py:
        (struct_or_class):
        * Shared/AssistedNodeInformation.cpp: Added.
        (WebKit::AssistedNodeInformation::encode):
        (WebKit::AssistedNodeInformation::decode):
        * Shared/AssistedNodeInformation.h: Added.
        (WebKit::AssistedNodeInformation::AssistedNodeInformation):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::startAssistingNode):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _requiresKeyboardWhenFirstResponder]):
        (-[WKContentView _updateAccessory]):
        (toUITextAutocapitalize):
        (-[WKContentView textInputTraits]):
        (-[WKContentView assistedNodeInformation]):
        (-[WKContentView _startAssistingNode:]):
        (-[WKContentView _stopAssistingNode]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::startAssistingNode):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::isAssistableNode):
        (WebKit::hasFocusableNode):
        (WebKit::WebPage::getAssistedNodeInformation):
        (WebKit::WebPage::elementDidFocus):

2014-02-25  Anders Carlsson  <andersca@apple.com>

        VisitedLinkProvider should be refcounted
        https://bugs.webkit.org/show_bug.cgi?id=129351

        Reviewed by Sam Weinig.

        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::create):
        (WebKit::VisitedLinkProvider::~VisitedLinkProvider):
        * UIProcess/VisitedLinkProvider.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::processDidFinishLaunching):
        (WebKit::WebContext::disconnectProcess):
        (WebKit::WebContext::addVisitedLinkHash):
        * UIProcess/WebContext.h:

2014-02-25  Anders Carlsson  <andersca@apple.com>

        Make WebContext handle populating visited links
        https://bugs.webkit.org/show_bug.cgi?id=129348

        Reviewed by Tim Horton.

        This makes it possible to decouple VisitedLinkProvider from WebContext.

        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::VisitedLinkProvider):
        (WebKit::VisitedLinkProvider::processDidFinishLaunching):
        * UIProcess/VisitedLinkProvider.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::processDidFinishLaunching):
        * UIProcess/WebContext.h:

2014-02-25  Anders Carlsson  <andersca@apple.com>

        DrawingAreaProxy is using WebCore's Timer
        https://bugs.webkit.org/show_bug.cgi?id=129347
        <rdar://problem/16078133>

        Reviewed by Tim Horton.

        Use a RunLoop::Timer instead.

        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::DrawingAreaProxy):
        (WebKit::DrawingAreaProxy::exposedRectChangedTimerFired):
        * UIProcess/DrawingAreaProxy.h:

2014-02-25  Anders Carlsson  <andersca@apple.com>

        Add WKVisitedLinkProvider
        https://bugs.webkit.org/show_bug.cgi?id=129343

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKVisitedLinkProvider.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h.
        * UIProcess/API/Cocoa/WKVisitedLinkProvider.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h.
        * UIProcess/API/Cocoa/WKVisitedLinkProviderInternal.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h.
        * UIProcess/API/Cocoa/WKVisitedLinkProviderPrivate.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration visitedLinkProvider]):
        (-[WKWebViewConfiguration setVisitedLinkProvider:]):
        * WebKit2.xcodeproj/project.pbxproj:

2014-02-25  Anders Carlsson  <andersca@apple.com>

        Simplify visited link style invalidation
        https://bugs.webkit.org/show_bug.cgi?id=129340

        Reviewed by Dan Bernstein.

        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::addVisitedLink):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::visitedLinkStateChanged):
        (WebKit::WebProcess::allVisitedLinkStateChanged):

2014-02-25  Anders Carlsson  <andersca@apple.com>

        Fix build.

        Remove VisitedLinkStrategy.

        * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
        * NetworkProcess/NetworkProcessPlatformStrategies.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2014-02-25  Alexey Proskuryakov  <ap@apple.com>

        Rolling out http://trac.webkit.org/changeset/164611, because it broke
        WebKit2.PrivateBrowsingPushStateNoHistoryCallback API test

        The change was for:

        https://bugs.webkit.org/show_bug.cgi?id=129141
        Create SessionID class

2014-02-25  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Add delegate method for customizing actions on activated elements
        https://bugs.webkit.org/show_bug.cgi?id=129290

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: Added. Declared new delegate method.

        * UIProcess/API/Cocoa/_WKActivatedElementInfo.h:
        (_WKActivatedElementType): Defined enum of element types.
        * UIProcess/API/Cocoa/_WKActivatedElementInfo.mm:
        (-[_WKActivatedElementInfo _initWithType:URL:location:title:rect:]): Added type parameter
        to the initializer, used to set the new type property.
        * UIProcess/API/Cocoa/_WKActivatedElementInfoInternal.h:

        * UIProcess/Cocoa/UIClient.h:
        * UIProcess/Cocoa/UIClient.mm:
        (WebKit::UIClient::setDelegate): Initialize webViewActionsForElementDefaultActions member
        of m_delegateMethods.
        (WebKit::UIClient::actionsForElement): Added. Calls out to the new delegate method if
        implemented. Otherwise returns the default actions.

        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant actionSheet:clickedButtonAtIndex:]): Use new _elementInfo ivar
        instead of creating element info here.
        (-[WKActionSheetAssistant showImageSheet]): Create element info here and assign it to
        _elementInfo ivar if presenting a sheet. Call the UI client to get custom actions.
        (-[WKActionSheetAssistant showLinkSheet]): Ditto.
        (-[WKActionSheetAssistant cleanupSheet]): Clear _elementInfo ivar.
        * WebKit2.xcodeproj/project.pbxproj: Added reference to WKUIDelegatePrivate.h.

2014-02-25  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        Unreviewed EFL build fix attempt after r164562

        * CMakeLists.txt: Added WebVisitedLinkProvider.cpp.

2014-02-25  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Add ENABLE flag
        https://bugs.webkit.org/show_bug.cgi?id=129153

        Reviewed by Simon Fraser.

        Added ENABLE_CSS_GRID_LAYOUT feature flag.

        * Configurations/FeatureDefines.xcconfig:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2014-02-25  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK build fix after r164652.

        * GNUmakefile.list.am: Add WebVisitedLinkProvider build targets.

2014-02-24  Anders Carlsson  <andersca@apple.com>

        Make it possible to set the visited link provider on a per page basis
        https://bugs.webkit.org/show_bug.cgi?id=129288

        Reviewed by Andreas Kling.

        Add WebVisitedLinkProvider which just calls the web process.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebVisitedLinkProvider.cpp: Added.
        (WebKit::WebVisitedLinkProvider::create):
        (WebKit::WebVisitedLinkProvider::WebVisitedLinkProvider):
        (WebKit::WebVisitedLinkProvider::~WebVisitedLinkProvider):
        (WebKit::WebVisitedLinkProvider::isLinkVisited):
        (WebKit::WebVisitedLinkProvider::addVisitedLink):
        * WebProcess/WebPage/WebVisitedLinkProvider.h: Added.

2014-02-25  Dan Bernstein  <mitz@apple.com>

        Build fix for case-sensitive filesystems.

        * WebProcess/ios/WebVideoFullscreenManager.cpp:

2014-02-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Mark view source mode methods as deprecated
        https://bugs.webkit.org/show_bug.cgi?id=128920

        Reviewed by Martin Robinson.

        Mark WEBKIT_VIEW_MODE_SOURCE as deprecated in documentation and
        only show warnings when set_view_mode is used with WEBKIT_VIEW_MODE_SOURCE.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_set_view_mode):
        (webkit_web_view_get_view_mode):
        * UIProcess/API/gtk/WebKitWebView.h:

2014-02-24  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Stop looking for plug-in profiles in /S/L/Sandbox/Profiles
        https://bugs.webkit.org/show_bug.cgi?id=129262
        <rdar://problem/16149420>

        Reviewed by Sam Weinig.

        Remove unused code.

        * Shared/Plugins/mac/PluginSandboxProfile.mm:
        (WebKit::pluginSandboxProfileDirectory):
        (WebKit::pluginSandboxCommonProfile):
        (WebKit::pluginSandboxProfile):
        (WebKit::pluginHasSandboxProfile):

2014-02-24  Martin Robinson  <mrobinson@igalia.com>

        [GTK] generate-gtkdoc should not generate documentation for source files for unbuilt source files
        https://bugs.webkit.org/show_bug.cgi?id=128417

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.am: Generate a config file for generate-gtkdoc.
        * PlatformGTK.cmake: Ditto.

2014-02-24  Dan Bernstein  <mitz@apple.com>

        32-bit build fix.

        * UIProcess/API/Cocoa/_WKElementAction.mm:
        (+[_WKElementAction elementActionWithType:customTitle:]):

2014-02-24  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Start adding API for customizing actions on activated elements
        https://bugs.webkit.org/show_bug.cgi?id=129284

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/_WKActivatedElementInfo.h: Added. Includes the public interface of what
        was WKElementActionInfo.
        * UIProcess/API/Cocoa/_WKActivatedElementInfo.m: Added.
        (-[_WKActivatedElementInfo _initWithURL:location:title:rect:]): Moved and renamed internal
        initializer from WKElementActionInfo.
        (-[_WKActivatedElementInfo dealloc]): Moved from WKElementActionInfo.
        (-[_WKActivatedElementInfo _boundingRect]): Added private accessor.
        (-[_WKActivatedElementInfo _interactionLocation]): Ditto.
        * UIProcess/API/Cocoa/_WKActivatedElementInfoInternal.h: Added.

        * UIProcess/API/Cocoa/_WKElementAction.h: Added.
        (_WKElementActionType): Moved from WKActionSheet.h and turned into a proper NS_ENUM.
        * UIProcess/API/Cocoa/_WKElementAction.mm: Added.
        (-[_WKElementAction _initWithTitle:actionHandler:type:]): Moved and renamed internal
        initializer from WKActionSheet.mm.
        (-[_WKElementAction dealloc]): Moved from WKActionSheet.mm.
        (+[_WKElementAction elementActionWithTitle:actionHandler:]): Moved and renamed.
        (copyElement): Moved from WKActionSheet.mm.
        (saveImage): Ditto.
        (addToReadingList): Ditto.
        (+[_WKElementAction elementActionWithType:customTitle:]): Moved and renamed.
        (+[_WKElementAction elementActionWithType:]): Ditto.
        (-[_WKElementAction _runActionWithElementInfo:view:]): Moved from WKActionSheet.mm.
        * UIProcess/API/Cocoa/WKElementActionInternal.h: Added.

        * UIProcess/ios/WKActionSheet.h: Removed declarations that were moved elsewhere.
        * UIProcess/ios/WKActionSheet.mm: Removed code that was moved elsewhere.
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant actionSheet:clickedButtonAtIndex:]):
        (-[WKActionSheetAssistant showImageSheet]):
        (-[WKActionSheetAssistant showLinkSheet]):
        (-[WKActionSheetAssistant showDataDetectorsSheet]):

        * WebKit2.xcodeproj/project.pbxproj: Added references to new files. Changed the Objective-C
        class name check to allow _WK as a class name prefix.

2014-02-24  Simon Fraser  <simon.fraser@apple.com>

        Use RetainPtrs for two WKContentView data members
        https://bugs.webkit.org/show_bug.cgi?id=129276

        Reviewed by Benjamin Poulain.
        
        The UITextInputTraits were leaked. Fix with RetainPtr goodness.
        
        Rename the obscure _accessory to _formAccessoryView and
        make it a RetainPtr.
        
        Rearrange the data members of the WKContentView class extension
        for better packing and readability.

        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView inputAccessoryView]):
        (-[WKContentView _updateAccessory]):
        (-[WKContentView textInputTraits]):

2014-02-24  Simon Fraser  <simon.fraser@apple.com>

        Remove WKInteractionView, move code into WKContentView
        https://bugs.webkit.org/show_bug.cgi?id=129275

        Reviewed by Benjamin Poulain.
        
        WKInteractionView as an interim solution as WebKit2 on iOS was being
        brought up, and should be removed.
        
        Move its code into a category on WKContentView, mostly unchanged. The
        WKContentView (WKInteraction) categroy now implements the various protocols
        that WKInteractionView implemented.
        
        WKContentView is not an API class, so no longer has WK_API_CLASS, and can
        have implementation-related data members. WKContentViewInternal.h is removed.
        
        WKContentView now exposes a WebPageProxy* rather than a WKPageRef.
        
        Other changes: WKActionSheetAssistant no longer stores a WebPageProxy,
        getting it from the WKContentView instead.
        
        WKAutoCorrectionData and InteractionInformationAtPosition are stored via unique_ptr
        to reduce class size, and avoid having to expose their details in the header.

        * Configurations/WebKit2.xcconfig:
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView setAllowsBackForwardNavigationGestures:]):
        (-[WKView pageRef]):
        (-[WKView _pageExtendedBackgroundColor]):
        (-[WKView _setBackgroundExtendsBeyondPage:]):
        (-[WKView _backgroundExtendsBeyondPage]):
        * UIProcess/ios/PageClientImplIOS.mm:
        * UIProcess/ios/WKActionSheet.h:
        * UIProcess/ios/WKActionSheet.mm:
        (-[WKActionSheet initWithView:]):
        (+[WKElementAction customElementActionWithTitle:actionHandler:]):
        (copyElement):
        (saveImage):
        (+[WKElementAction standardElementActionWithType:customTitle:]):
        (-[WKElementAction runActionWithElementInfo:view:]):
        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant initWithView:]):
        (-[WKActionSheetAssistant dealloc]):
        (-[WKActionSheetAssistant initialPresentationRectInHostViewForSheet]):
        (-[WKActionSheetAssistant presentationRectInHostViewForSheet]):
        (-[WKActionSheetAssistant actionSheet:clickedButtonAtIndex:]):
        (-[WKActionSheetAssistant _createSheetWithElementActions:showLinkTitle:]):
        (-[WKActionSheetAssistant showImageSheet]):
        (-[WKActionSheetAssistant showLinkSheet]):
        (-[WKActionSheetAssistant showDataDetectorsSheet]):
        (-[WKActionSheetAssistant cleanupSheet]):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView initWithFrame:context:WebKit::configuration:WebKit::]):
        (-[WKContentView dealloc]):
        (-[WKContentView page]):
        (-[WKContentView isAssistingNode]):
        (-[WKContentView didFinishScrolling]):
        (-[WKContentView willStartZoomOrScroll]):
        (-[WKContentView willStartUserTriggeredScroll]):
        (-[WKContentView willStartUserTriggeredZoom]):
        (-[WKContentView didZoomToScale:]):
        (-[WKContentView _didCommitLoadForMainFrame]):
        (-[WKContentView _didCommitLayerTree:WebKit::]):
        * UIProcess/ios/WKContentViewInteraction.h: Renamed from Source/WebKit2/UIProcess/ios/WKInteractionView.h.
        * UIProcess/ios/WKContentViewInteraction.mm: Renamed from Source/WebKit2/UIProcess/ios/WKInteractionView.mm.
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView positionInformation]):
        (-[WKContentView setInputDelegate:]):
        (-[WKContentView inputDelegate]):
        (-[WKContentView isEditable]):
        (-[WKContentView canBecomeFirstResponder]):
        (-[WKContentView resignFirstResponder]):
        (-[WKContentView _webTouchEventsRecognized:]):
        (inflateQuad):
        (-[WKContentView _webTouchEvent:WebKit::preventsNativeGestures:]):
        (-[WKContentView _didGetTapHighlightForRequest:color:WebCore::quads:WebCore::topLeftRadius:WebCore::topRightRadius:WebCore::bottomLeftRadius:WebCore::bottomRightRadius:WebCore::]):
        (-[WKContentView _cancelLongPressGestureRecognizer]):
        (-[WKContentView _didScroll]):
        (-[WKContentView _requiresKeyboardResetOnReload]):
        (-[WKContentView gestureRecognizer:canPreventGestureRecognizer:]):
        (-[WKContentView gestureRecognizer:canBePreventedByGestureRecognizer:]):
        (isSamePair):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKContentView _showImageSheet]):
        (-[WKContentView _showLinkSheet]):
        (-[WKContentView _showDataDetectorsSheet]):
        (-[WKContentView _actionForLongPress]):
        (-[WKContentView ensurePositionInformationIsUpToDate:]):
        (-[WKContentView _updatePositionInformation]):
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView _cancelInteraction]):
        (-[WKContentView hasSelectablePositionAtPoint:]):
        (-[WKContentView pointIsInAssistedNode:]):
        (-[WKContentView webSelectionRects]):
        (-[WKContentView _highlightLongPressRecognized:]):
        (-[WKContentView _longPressRecognized:]):
        (-[WKContentView _singleTapRecognized:]):
        (-[WKContentView _doubleTapRecognized:]):
        (-[WKContentView _twoFingerDoubleTapRecognized:]):
        (-[WKContentView _twoFingerPanRecognized:]):
        (-[WKContentView _attemptClickAtLocation:]):
        (-[WKContentView useSelectionAssistantWithMode:]):
        (-[WKContentView clearSelection]):
        (-[WKContentView _positionInformationDidChange:]):
        (-[WKContentView _willStartScrollingOrZooming]):
        (-[WKContentView _willStartUserTriggeredScrollingOrZooming]):
        (-[WKContentView _didEndScrollingOrZooming]):
        (-[WKContentView inputAccessoryView]):
        (-[WKContentView supportedPasteboardTypesForCurrentSelection]):
        (-[WKContentView _addShortcut:]):
        (-[WKContentView _promptForReplace:]):
        (-[WKContentView replace:]):
        (-[WKContentView canPerformAction:withSender:]):
        (-[WKContentView _resetShowingTextStyle:]):
        (-[WKContentView _performAction:]):
        (-[WKContentView copy:]):
        (-[WKContentView cut:]):
        (-[WKContentView paste:]):
        (-[WKContentView select:]):
        (-[WKContentView selectAll:]):
        (-[WKContentView toggleBoldface:]):
        (-[WKContentView toggleItalics:]):
        (-[WKContentView toggleUnderline:]):
        (-[WKContentView _showTextStyleOptions:]):
        (-[WKContentView _showDictionary:]):
        (-[WKContentView _define:]):
        (toWKGestureType):
        (toUIWKGestureType):
        (toWKSelectionTouch):
        (toUIWKSelectionTouch):
        (toWKGestureRecognizerState):
        (toUIGestureRecognizerState):
        (toUIWKSelectionFlags):
        (toWKHandlePosition):
        (selectionChangedWithGesture):
        (selectionChangedWithTouch):
        (-[WKContentView _didUpdateBlockSelectionWithTouch:WebKit::withFlags:WebKit::growThreshold:shrinkThreshold:]):
        (-[WKContentView changeSelectionWithGestureAt:withGesture:withState:]):
        (-[WKContentView changeSelectionWithTouchAt:withSelectionTouch:baseIsStart:]):
        (-[WKContentView changeSelectionWithTouchesFrom:to:withGesture:withState:]):
        (-[WKContentView changeBlockSelectionWithTouchAt:withSelectionTouch:forHandle:]):
        (-[WKContentView autocorrectionData]):
        (-[WKContentView requestAutocorrectionRectsForString:withCompletionHandler:]):
        (-[WKContentView textFirstRect]):
        (-[WKContentView textLastRect]):
        (-[WKContentView applyAutocorrection:toString:withCompletionHandler:]):
        (-[WKContentView requestAutocorrectionContextWithCompletionHandler:]):
        (-[WKContentView accessoryDone]):
        (-[WKContentView accessoryTab:]):
        (-[WKContentView accessoryAutoFill]):
        (-[WKContentView accessoryClear]):
        (-[WKContentView _updateAccessory]):
        (-[WKContentView textInRange:]):
        (-[WKContentView replaceRange:withText:]):
        (-[WKContentView selectedTextRange]):
        (-[WKContentView caretRectForPosition:]):
        (-[WKContentView selectionRectsForRange:]):
        (-[WKContentView setSelectedTextRange:]):
        (-[WKContentView hasMarkedText]):
        (-[WKContentView markedText]):
        (-[WKContentView markedTextRange]):
        (-[WKContentView markedTextStyle]):
        (-[WKContentView setMarkedTextStyle:]):
        (-[WKContentView setMarkedText:selectedRange:]):
        (-[WKContentView unmarkText]):
        (-[WKContentView beginningOfDocument]):
        (-[WKContentView endOfDocument]):
        (-[WKContentView textRangeFromPosition:toPosition:]):
        (-[WKContentView positionFromPosition:offset:]):
        (-[WKContentView positionFromPosition:inDirection:offset:]):
        (-[WKContentView comparePosition:toPosition:]):
        (-[WKContentView offsetFromPosition:toPosition:]):
        (-[WKContentView tokenizer]):
        (-[WKContentView positionWithinRange:farthestInDirection:]):
        (-[WKContentView characterRangeByExtendingPosition:inDirection:]):
        (-[WKContentView baseWritingDirectionForPosition:inDirection:]):
        (-[WKContentView setBaseWritingDirection:forRange:]):
        (-[WKContentView firstRectForRange:]):
        (-[WKContentView closestPositionToPoint:]):
        (-[WKContentView closestPositionToPoint:withinRange:]):
        (-[WKContentView characterRangeAtPoint:]):
        (-[WKContentView deleteBackward]):
        (-[WKContentView insertText:]):
        (-[WKContentView hasText]):
        (-[WKContentView textInputTraits]):
        (-[WKContentView interactionAssistant]):
        (-[WKContentView webSelectionAssistant]):
        (-[WKContentView selectionRange]):
        (-[WKContentView rectForNSRange:]):
        (-[WKContentView _markedTextNSRange]):
        (-[WKContentView selectedDOMRange]):
        (-[WKContentView setSelectedDOMRange:affinityDownstream:]):
        (-[WKContentView replaceRangeWithTextWithoutClosingTyping:replacementText:]):
        (-[WKContentView rectContainingCaretSelection]):
        (-[WKContentView requiresKeyEvents]):
        (-[WKContentView handleKeyWebEvent:]):
        (-[WKContentView _interpretKeyEvent:isCharEvent:]):
        (-[WKContentView setBottomBufferHeight:]):
        (-[WKContentView automaticallySelectedOverlay]):
        (-[WKContentView selectionGranularity]):
        (-[WKContentView insertDictationResult:withCorrectionIdentifier:]):
        (-[WKContentView metadataDictionariesForDictationResults]):
        (-[WKContentView previousUnperturbedDictationResultBoundaryFromPosition:]):
        (-[WKContentView nextUnperturbedDictationResultBoundaryFromPosition:]):
        (-[WKContentView moveBackward:]):
        (-[WKContentView moveForward:]):
        (-[WKContentView characterBeforeCaretSelection]):
        (-[WKContentView wordContainingCaretSelection]):
        (-[WKContentView wordRangeContainingCaretSelection]):
        (-[WKContentView setMarkedText:]):
        (-[WKContentView hasContent]):
        (-[WKContentView selectAll]):
        (-[WKContentView textColorForCaretSelection]):
        (-[WKContentView fontForCaretSelection]):
        (-[WKContentView hasSelection]):
        (-[WKContentView isPosition:atBoundary:inDirection:]):
        (-[WKContentView positionFromPosition:toBoundary:inDirection:]):
        (-[WKContentView isPosition:withinTextUnit:inDirection:]):
        (-[WKContentView rangeEnclosingPosition:withGranularity:inDirection:]):
        (-[WKContentView takeTraitsFrom:]):
        (-[WKContentView _startAssistingKeyboard]):
        (-[WKContentView _stopAssistingKeyboard]):
        (-[WKContentView _startAssistingNode]):
        (-[WKContentView _stopAssistingNode]):
        (-[WKContentView _selectionChanged]):
        (-[WKContentView shouldIgnoreWebTouch]):
        (-[WKContentView isAnyTouchOverActiveArea:]):
        (-[WKTextRange _isCaret]):
        (-[WKTextRange _isRanged]):
        (+[WKTextRange textRangeWithState:isRange:isEditable:startRect:endRect:selectionRects:selectedTextLength:]):
        (-[WKTextRange dealloc]):
        (-[WKTextRange description]):
        (-[WKTextRange start]):
        (-[WKTextRange end]):
        (-[WKTextRange isEmpty]):
        (-[WKTextRange isEqual:]):
        (+[WKTextPosition textPositionWithRect:]):
        (-[WKTextPosition isEqual:]):
        (-[WKTextPosition description]):
        (-[WKTextSelectionRect initWithWebRect:]):
        (-[WKTextSelectionRect dealloc]):
        (+[WKTextSelectionRect textSelectionRectsWithWebRects:]):
        (-[WKTextSelectionRect rect]):
        (-[WKTextSelectionRect writingDirection]):
        (-[WKTextSelectionRect range]):
        (-[WKTextSelectionRect containsStart]):
        (-[WKTextSelectionRect containsEnd]):
        (-[WKTextSelectionRect isVertical]):
        (+[WKAutocorrectionRects autocorrectionRectsWithRects:lastRect:]):
        (+[WKAutocorrectionContext autocorrectionContextWithData:markedText:selectedText:afterText:selectedRangeInMarkedText:]):
        (-[WKAutocorrectionContext dealloc]):
        * UIProcess/ios/WKContentViewInternal.h: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2014-02-24  Anders Carlsson  <andersca@apple.com>

        WKProcessPool should use secondary processes + network process
        https://bugs.webkit.org/show_bug.cgi?id=129282

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool initWithConfiguration:]):

2014-02-24  Jeremy Jones  <jeremyj@apple.com>

        WK2 AVKit fullscreen doesn't display video.
        https://bugs.webkit.org/show_bug.cgi?id=128564

        Reviewed by Simon Fraser.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        Add a property to track video layer pending fullscreen.

        (WebKit::RemoteLayerTreeTransaction::isVideoLayerIDPendingFullscreen):
        (WebKit::RemoteLayerTreeTransaction::addVideoLayerIDPendingFullscreen):
        Add a property to track video layer pending fullscreen.

        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        Encode and decode m_videoLayerIDsPendingFullscreen.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didCommitLayerTree):
        Let WebVideoFullscreenManagerProxy see the RemoteLayerTreeTransaction.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.cpp:
        (WebKit::WebVideoFullscreenManagerProxy::didCommitLayerTree):
        Look for video layer pending fullscreen on the transaction to initiate
        fullscreen.

        (WebKit::WebVideoFullscreenManagerProxy::setVideoLayerID):
        Start looking for the video layer pending fullscreen in the transaction.

        (WebKit::WebVideoFullscreenManagerProxy::enterFullscreen):
        Override to prevent fullscreen from happening before the layer
        is pending fullscreen.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in:
        Pass a more specific videoLayerID in SetVideoLayerID,
        i.e. WebCore::GraphicsLayer::PlatformLayerID.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::willCommitLayerTree):
        Move webPage specific transaction building here, including,
        giving WebVideoFullscreenManager a chance to modify the transaction.

        * WebProcess/WebPage/WebPage.h:
        Add willCommitLayerTree();

        * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.mm:
        (PlatformCALayerRemoteCustom::PlatformCALayerRemoteCustom):
        (PlatformCALayerRemoteCustom::~PlatformCALayerRemoteCustom):
        Make and break the connection from CALayer to PlatformCALayerRemoteCustom,
        the same way it is done for PlatformCALayerMac.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        Move WebPage specific transaction building into WebPage::willCommitLayerTree.

        * WebProcess/ios/WebVideoFullscreenManager.cpp:
        (WebKit::WebVideoFullscreenManager::willCommitLayerTree):
        addVideoLayerIDPendingFullscreen on RemoteLayerTreeTransaction when needed.

        (WebKit::WebVideoFullscreenManager::setVideoLayer):
        Pass along the video layerID.

        * WebProcess/ios/WebVideoFullscreenManager.h:
        Add willCommitLayerTree() and remove setVideoLayerID().
        Add a member to retain the unparented PlatformCALayer.

2014-02-24  Martin Hock  <mhock@apple.com>

        Create SessionID value-style class for session IDs.
        https://bugs.webkit.org/show_bug.cgi?id=129141

        The below changes deal solely with mechanical changes to use the SessionID value class instead of uint64_t except where noted.

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::storageSession):
        (WebKit::NetworkConnectionToWebProcess::startDownload):
        (WebKit::NetworkConnectionToWebProcess::cookiesForDOM):
        (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM):
        (WebKit::NetworkConnectionToWebProcess::cookiesEnabled):
        (WebKit::NetworkConnectionToWebProcess::cookieRequestHeaderFieldValue):
        (WebKit::NetworkConnectionToWebProcess::getRawCookies):
        (WebKit::NetworkConnectionToWebProcess::deleteCookie):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::ensurePrivateBrowsingSession):
        (WebKit::NetworkProcess::destroyPrivateBrowsingSession):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/RemoteNetworkingContext.h:
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
        * NetworkProcess/soup/RemoteNetworkingContextSoup.cpp:
        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters):
        * Shared/Network/NetworkResourceLoadParameters.h:
        * Shared/SessionTracker.cpp:
        (WebKit::staticSessionMap):
        (WebKit::storageSessionToID):
        (WebKit::SessionTracker::sessionMap):
        (WebKit::SessionTracker::session):
        (WebKit::SessionTracker::sessionID):
        (WebKit::SessionTracker::setSession):
        (WebKit::SessionTracker::destroySession):
        * Shared/SessionTracker.h: Move code to SessionID class.
        * Shared/WebCoreArgumentCoders.cpp: Add encode and decode for SessionID.
        (IPC::ArgumentCoder<SessionID>::encode):
        (IPC::ArgumentCoder<SessionID>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/mac/CookieStorageShim.mm:
        (WebKit::webKitCookieStorageCopyRequestHeaderFieldsForURL):
        * UIProcess/APISession.cpp:
        (API::generateID):
        (API::Session::defaultSession):
        (API::Session::legacyPrivateSession):
        (API::Session::Session):
        (API::Session::isEphemeral):
        (API::Session::getID):
        * UIProcess/APISession.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::setAnyPageGroupMightHavePrivateBrowsingEnabled):
        (WebKit::WebContext::createNewWebProcess):
        * UIProcess/WebContext.h:
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::sessionID):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setPrivateBrowsingEnabled):
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::scheduleLoad):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::loadResourceSynchronously):
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession):
        (WebKit::WebFrameNetworkingContext::storageSession):
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession):
        (WebKit::WebFrameNetworkingContext::storageSession):
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h:
        * WebProcess/WebPage/WebPage.cpp: Move sessionID to Page to allow WebCore to access it.
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::sessionID):
        (WebKit::WebPage::isUsingEphemeralSession):
        (WebKit::WebPage::setSessionID):
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::ensurePrivateBrowsingSession):
        (WebKit::WebProcess::destroyPrivateBrowsingSession):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2014-02-24  Simon Fraser  <simon.fraser@apple.com>

        Remove PDFViewController.*, which is unused
        https://bugs.webkit.org/show_bug.cgi?id=129270

        Reviewed by Tim Horton.

        * UIProcess/mac/PDFViewController.h: Removed.
        * UIProcess/mac/PDFViewController.mm: Removed.

2014-02-24  Anders Carlsson  <andersca@apple.com>

        Rename WKProcessClass to WKProcessPool
        https://bugs.webkit.org/show_bug.cgi?id=129268

        Reviewed by Dan Bernstein.

        Stage this rename by adding back WKProcessClass and WKProcessClassConfiguration as subclasses of the renamed classes.

        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * UIProcess/API/Cocoa/WKProcessClass.h:
        * UIProcess/API/Cocoa/WKProcessClass.mm:
        * UIProcess/API/Cocoa/WKProcessClassConfiguration.h:
        * UIProcess/API/Cocoa/WKProcessClassConfiguration.mm:
        * UIProcess/API/Cocoa/WKProcessClassConfigurationPrivate.h:
        * UIProcess/API/Cocoa/WKProcessClassPrivate.h:
        * UIProcess/API/Cocoa/WKProcessPool.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessClass.h.
        * UIProcess/API/Cocoa/WKProcessPool.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessClass.mm.
        (-[WKProcessPool init]):
        (-[WKProcessPool initWithConfiguration:]):
        (-[WKProcessPool dealloc]):
        (-[WKProcessPool description]):
        (-[WKProcessPool configuration]):
        (-[WKProcessPool API::]):
        (-[WKProcessPool _setAllowsSpecificHTTPSCertificate:forHost:]):
        * UIProcess/API/Cocoa/WKProcessPoolConfiguration.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessClassConfiguration.h.
        * UIProcess/API/Cocoa/WKProcessPoolConfiguration.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessClassConfiguration.mm.
        (-[WKProcessPoolConfiguration _injectedBundleURL]):
        (-[WKProcessPoolConfiguration _setInjectedBundleURL:]):
        (-[WKProcessPoolConfiguration description]):
        (-[WKProcessPoolConfiguration copyWithZone:]):
        * UIProcess/API/Cocoa/WKProcessPoolConfigurationPrivate.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessClassConfigurationPrivate.h.
        * UIProcess/API/Cocoa/WKProcessPoolInternal.h: Renamed from Source/WebKit2/UIProcess/API/Cocoa/WKProcessClassInternal.h.
        (WebKit::wrapper):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessClassPrivate.h.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration description]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration processPool]):
        (-[WKWebViewConfiguration setProcessPool:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationToBeRemoved.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessClassPrivate.h.
        (-[WKWebViewConfiguration setProcessClass:]):
        (-[WKWebViewConfiguration processClass]):
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _decidePolicyForGeolocationRequestFromOrigin:frame:request:]):
        * WebKit2.xcodeproj/project.pbxproj:

2014-02-24  Simon Fraser  <simon.fraser@apple.com>

        Move non-API files out of WebKit2/UIProcess/API/mac
        https://bugs.webkit.org/show_bug.cgi?id=129267

        Reviewed by Anders Carlsson.

        * UIProcess/mac/FindIndicatorWindow.h: Renamed from Source/WebKit2/UIProcess/API/mac/FindIndicatorWindow.h.
        * UIProcess/mac/FindIndicatorWindow.mm: Renamed from Source/WebKit2/UIProcess/API/mac/FindIndicatorWindow.mm.
        * UIProcess/mac/PDFViewController.h: Renamed from Source/WebKit2/UIProcess/API/mac/PDFViewController.h.
        * UIProcess/mac/PDFViewController.mm: Renamed from Source/WebKit2/UIProcess/API/mac/PDFViewController.mm.
        * UIProcess/mac/WKPrintingView.h: Renamed from Source/WebKit2/UIProcess/API/mac/WKPrintingView.h.
        * UIProcess/mac/WKPrintingView.mm: Renamed from Source/WebKit2/UIProcess/API/mac/WKPrintingView.mm.
        * UIProcess/mac/WKTextInputWindowController.h: Renamed from Source/WebKit2/UIProcess/API/mac/WKTextInputWindowController.h.
        * UIProcess/mac/WKTextInputWindowController.mm: Renamed from Source/WebKit2/UIProcess/API/mac/WKTextInputWindowController.mm.
        * WebKit2.xcodeproj/project.pbxproj:

2014-02-24  Simon Fraser  <simon.fraser@apple.com>

        Move non-API files in the API/ios directory out to UIProcess/ios
        https://bugs.webkit.org/show_bug.cgi?id=129264

        Reviewed by Anders Carlsson.

        * UIProcess/ios/PageClientImplIOS.h: Renamed from Source/WebKit2/UIProcess/API/ios/PageClientImplIOS.h.
        * UIProcess/ios/PageClientImplIOS.mm: Renamed from Source/WebKit2/UIProcess/API/ios/PageClientImplIOS.mm.
        * UIProcess/ios/WKActionSheet.h: Renamed from Source/WebKit2/UIProcess/API/ios/WKActionSheet.h.
        * UIProcess/ios/WKActionSheet.mm: Renamed from Source/WebKit2/UIProcess/API/ios/WKActionSheet.mm.
        * UIProcess/ios/WKContentViewInternal.h: Renamed from Source/WebKit2/UIProcess/API/ios/WKContentViewInternal.h.
        * UIProcess/ios/WKGeolocationProviderIOS.h: Renamed from Source/WebKit2/UIProcess/API/ios/WKGeolocationProviderIOS.h.
        * UIProcess/ios/WKGeolocationProviderIOS.mm: Renamed from Source/WebKit2/UIProcess/API/ios/WKGeolocationProviderIOS.mm.
        * UIProcess/ios/WKInteractionView.h: Renamed from Source/WebKit2/UIProcess/API/ios/WKInteractionView.h.
        * UIProcess/ios/WKInteractionView.mm: Renamed from Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm.
        * UIProcess/ios/WKScrollView.h: Renamed from Source/WebKit2/UIProcess/API/ios/WKScrollView.h.
        * UIProcess/ios/WKScrollView.mm: Renamed from Source/WebKit2/UIProcess/API/ios/WKScrollView.mm.
        * WebKit2.xcodeproj/project.pbxproj:

2014-02-24  Simon Fraser  <simon.fraser@apple.com>

        Rename PageClientImplIOS::m_view to m_contentView
        https://bugs.webkit.org/show_bug.cgi?id=129124

        Reviewed by Benjamin Poulain.
        
        Simple rename of m_view to m_contentView in preparation for
        also holding onto the WKView.

        * UIProcess/API/ios/PageClientImplIOS.h:
        * UIProcess/API/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::PageClientImpl):
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        (WebKit::PageClientImpl::viewSize):
        (WebKit::PageClientImpl::isViewInWindow):
        (WebKit::PageClientImpl::processDidExit):
        (WebKit::PageClientImpl::didRelaunchProcess):
        (WebKit::PageClientImpl::decidePolicyForGeolocationPermissionRequest):
        (WebKit::PageClientImpl::didCommitLoadForMainFrame):
        (WebKit::PageClientImpl::interpretKeyEvent):
        (WebKit::PageClientImpl::positionInformationDidChange):
        (WebKit::PageClientImpl::selectionDidChange):
        (WebKit::PageClientImpl::screenToRootView):
        (WebKit::PageClientImpl::rootViewToScreen):
        (WebKit::PageClientImpl::setAcceleratedCompositingRootLayer):
        (WebKit::PageClientImpl::takeViewSnapshot):
        (WebKit::PageClientImpl::didGetTapHighlightGeometries):
        (WebKit::PageClientImpl::didCommitLayerTree):
        (WebKit::PageClientImpl::startAssistingNode):
        (WebKit::PageClientImpl::stopAssistingNode):

2014-02-24  Enrique Ocaña González  <eocanha@igalia.com>

        REGRESSION(r164438): [GTK] Tests /webkit2/WebKitWebView/tls-errors-policy and /webkit2/WebKitWebContext/uri-scheme fail
        https://bugs.webkit.org/show_bug.cgi?id=129252

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitPrivate.cpp: Manage error values generated by the user application and not present in WebCore
        (toWebKitError):
        (toWebCoreError):

2014-02-24  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/16059894> Update AppleConnect sandbox profile for XPC process names.

        Patch by Ivan Krstić, reviewed and landed by me.

        * Resources/PlugInSandboxProfiles/com.apple.ist.ds.appleconnect.webplugin.sb:

2014-02-24  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        Code cleanup: remove leftover ENABLE(WORKERS) macros and support.
        https://bugs.webkit.org/show_bug.cgi?id=129255

        Reviewed by Csaba Osztrogonác.

        ENABLE_WORKERS macro was removed in r159679.
        Support is now also removed from xcconfig files.

        * Configurations/FeatureDefines.xcconfig:

2014-02-24  Iago Toral Quiroga  <itoral@igalia.com>

        [GTK] Wrong active context when destroying GL objects.
        https://bugs.webkit.org/show_bug.cgi?id=129244

        Reviewed by Martin Robinson.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::invalidate): make context current before destroying GL objects.

2014-02-24  Koop Mast <kwm@FreeBSD.org>

        Remove unused error.h header.
        https://bugs.webkit.org/show_bug.cgi?id=126774

        Reviewed by Anders Carlsson.

        This header doesn't exists on FreeBSD. According to
        https://www.gnu.org/software/gnulib/manual/html_node/error_002eh.html
        the function that this header implements are not present in the file.
        So there isn't any need for this header.

        * NetworkProcess/unix/NetworkProcessMainUnix.cpp:

2014-02-24  David Kilzer  <ddkilzer@apple.com>

        Remove redundant setting in FeatureDefines.xcconfig

        * Configurations/FeatureDefines.xcconfig:

2014-02-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove unneeded method webkitWebViewBaseRequestExitFullScreen
        https://bugs.webkit.org/show_bug.cgi?id=129245

        Reviewed by Sergio Villar Senin.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseKeyPressEvent): Call FullscreenManager::requestExitFullScreen() directly.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:

2014-02-23  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/16144508> [iOS] Some definitions of INSTALL_PATH don’t account for INSTALL_PATH_PREFIX
        https://bugs.webkit.org/show_bug.cgi?id=129241

        Reviewed by Mark Rowe.

        * Configurations/Base.xcconfig: Define INSTALL_PATH here in terms of INSTALL_PATH_ACTUAL.
        * Configurations/BaseLegacyProcess.xcconfig: Define only INSTALL_PATH_ACTUAL.
        * Configurations/BaseTarget.xcconfig: Simplify the definition of
        NORMAL_WEBKIT2_FRAMEWORKS_DIR, now that it shouldn’t include SDKROOT for the Simulator.
        * Configurations/BaseXPCService.xcconfig: Define only INSTALL_PATH_ACTUAL.
        * Configurations/WebKit2.xcconfig: Ditto.

2014-02-23  Sam Weinig  <sam@webkit.org>

        Update FeatureDefines.xcconfig

        Rubber-stamped by Anders Carlsson.

        * Configurations/FeatureDefines.xcconfig:

2014-02-23  Sam Weinig  <sam@webkit.org>

        [WebKit2] Add C-SPI to enable/disable telephone number detection
        https://bugs.webkit.org/show_bug.cgi?id=129239

        Reviewed by Dean Jackson.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetTelephoneNumberParsingEnabled):
        (WKPreferencesGetTelephoneNumberParsingEnabled):
        * UIProcess/API/C/WKPreferencesPrivate.h:

2014-02-23  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Change a url parameter type with URL in NavigatorContentUtils
        https://bugs.webkit.org/show_bug.cgi?id=129202

        Reviewed by Sam Weinig.

        It would be good if we use *URL* for url parameters instead of using String.

        Merge from blink. https://src.chromium.org/viewvc/blink?view=rev&revision=165458.

        * WebProcess/WebCoreSupport/WebNavigatorContentUtilsClient.h:
        (WebKit::WebNavigatorContentUtilsClient::isProtocolHandlerRegistered):
        (WebKit::WebNavigatorContentUtilsClient::unregisterProtocolHandler):

2014-02-23  Sam Weinig  <sam@webkit.org>

        Move telephone number detection behind its own ENABLE macro
        https://bugs.webkit.org/show_bug.cgi?id=129236

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:
        Add ENABLE_TELEPHONE_NUMBER_DETECTION.

2014-02-23  Diego Pino García  <dpino@igalia.com>

        [GTK] Fix build after Web Inspector code reorganization (r164543)
        https://bugs.webkit.org/show_bug.cgi?id=129231

        Reviewed by Dean Jackson.

        * PlatformGTK.cmake:
        Modify paths to Web Inspector code.

2014-02-22  Joseph Pecoraro  <pecoraro@apple.com>

        Remove some unreachable code (-Wunreachable-code)
        https://bugs.webkit.org/show_bug.cgi?id=129220

        Reviewed by Eric Carlson.

        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        (WebKit::toAPI):

2014-02-22  Dan Bernstein  <mitz@apple.com>

        [Cocoa] WKUIDelegate.h is a project header
        https://bugs.webkit.org/show_bug.cgi?id=129215

        Reviewed by Anders Carlsson.

        * WebKit2.xcodeproj/project.pbxproj: Make it a public header.

2014-02-22  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/12500358> [Cocoa] Development variants of XPC services should not be installed in WebKit2.framework/XPCServices
        https://bugs.webkit.org/show_bug.cgi?id=129197

        Reviewed by Sam Weinig.

        * Configurations/BaseXPCService.xcconfig: Made INSTALL_PATH vary based on
        WK_XPC_SERVICE_VARIANT. For the Development variant, use an install path outside the
        framework. Note that engineering builds using the build action continue to have the
        Development variants copied into the framework by a script build phase.
        * Configurations/DatabaseService.Development.xcconfig: Set WK_XPC_SERVICE_VARIANT.
        * Configurations/DatabaseService.xcconfig: Ditto.
        * Configurations/NetworkService.Development.xcconfig: Ditto.
        * Configurations/NetworkService.xcconfig: Ditto.
        * Configurations/PluginService.32.xcconfig: Ditto.
        * Configurations/PluginService.64.xcconfig: Ditto.
        * Configurations/PluginService.Development.xcconfig: Ditto.
        * Configurations/WebContentService.Development.xcconfig: Ditto.
        * Configurations/WebContentService.xcconfig: Ditto.

2014-02-21  Brent Fulgham  <bfulgham@apple.com>

        Extend media support for WebVTT sources
        https://bugs.webkit.org/show_bug.cgi?id=129156

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig: Add new feature define for AVF_CAPTIONS

2014-02-21  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] Keyboard appears every time a link is tapped after searching Google
        <rdar://problem/16072563>.

        Reviewed by Benjamin Poulain.

        We need to stop assisting the node if we have
        navigated to a different page.

        * UIProcess/API/ios/WKContentView.mm:
        (-[WKContentView _didCommitLoadForMainFrame]):

2014-02-21  Dan Bernstein  <mitz@apple.com>

        Made WKWebView implement all WKContentViewDelegate methods.

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView takeViewSnapshotForContentView:]): Moved from WKViewIOS.mm.
        * UIProcess/API/ios/WKContentView.h: Made all protocol methods required.
        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView _commonInitializationWithContextRef:pageGroupRef:relatedToPage:]): Removed code
        to set self as the delegate on the content view.

2014-02-21  Sam Weinig  <sam@webkit.org>

        <rdar://problem/16073882> Please add _AbandonCoalition key to plugin XPC service Info.plist

        Reviewed by Anders Carlsson.

        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32-64.Info.plist:
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.Development/Info.plist:

2014-02-21  Jeffrey Pfau  <jpfau@apple.com>

        [Mac] Cache callbacks for cache partitioning may be passed null
        https://bugs.webkit.org/show_bug.cgi?id=129175

        Reviewed by Brady Eidson.

        * WebProcess/ResourceCache/cf/WebResourceCacheManagerCFNet.cpp:
        (WebKit::WebResourceCacheManager::cfURLCacheHostNamesWithCallback):

2014-02-21  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Update the visible content rects on zoom
        https://bugs.webkit.org/show_bug.cgi?id=129174

        Reviewed by Simon Fraser.

        Generalize _updateVisibleContentRects to also act during the zoom and not only at the end.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView scrollViewDidZoom:]):
        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView scrollViewDidZoom:]):

2014-02-21  Benjamin Poulain  <benjamin@webkit.org>

        jsDocumentPrototypeFunctionGetElementById should not create an AtomicString for the function argument
        https://bugs.webkit.org/show_bug.cgi?id=128893

        Reviewed by Darin Adler.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::pageNumberForElementById): Remove the explicit conversion to use the right overload.

2014-02-21  Enrica Casucci  <enrica@apple.com>

        Support WebSelections in WK2 on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=127015
        <rdar://problem/15211964>

        Reviewed by Benjamin Poulain.

        This is the remaining work on block selections for iOS in WK2.
        Once a block selection has been created with a long press gesture
        on a selectable area, we can interact with it by touching the four
        handles at the top, right, bottom and left side of the selection box.
        Expanding or shrinking a block selection requires finding the next/previous
        block in the direction of the movement, depending on the handle we
        are interacting with.
        Every time a new block is selected, we compute the thresholds required
        to trigger another block change. The thresholds are sent back to the
        UIProcess that will use this information to decide when to activate
        the new selection, either bigger or smaller.
        This patch also fixes a bug in selectWithTwoTouches where the points
        were not mapped to the active frame.

        * Shared/ios/WKGestureTypes.h:
        * UIProcess/API/ios/PageClientImplIOS.h:
        * UIProcess/API/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didUpdateBlockSelectionWithTouches):
        * UIProcess/API/ios/WKContentView.mm:
        (-[WKContentView _didUpdateBlockSelectionWithTouches:withFlags:growThreshold:shrinkThreshold:]):
        * UIProcess/API/ios/WKContentViewInternal.h:
        * UIProcess/API/ios/WKInteractionView.h:
        * UIProcess/API/ios/WKInteractionView.mm:
        (-[WKInteractionView hasSelectablePositionAtPoint:]):
        (-[WKInteractionView clearSelection]):
        (toWKHandlePosition):
        (-[WKInteractionView _didUpdateBlockSelectionWithTouches:WebKit::withFlags:WebKit::growThreshold:shrinkThreshold:]):
        (-[WKInteractionView changeBlockSelectionWithTouchAt:withSelectionTouch:forHandle:]):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::updateBlockSelectionWithTouches):
        (WebKit::WebPageProxy::didUpdateBlockSelectionWithTouches):
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::rangeForWebSelectionAtPosition):
        (WebKit::WebPage::rangeForBlockAtPoint):
        (WebKit::WebPage::selectWithGesture):
        (WebKit::distanceBetweenRectsForPosition):
        (WebKit::rectsEssentiallyTheSame):
        (WebKit::containsRange):
        (WebKit::unionDOMRanges):
        (WebKit::computeEdgeCenter):
        (WebKit::WebPage::expandedRangeFromHandle):
        (WebKit::WebPage::contractedRangeFromHandle):
        (WebKit::WebPage::computeExpandAndShrinkThresholdsForHandle):
        (WebKit::shouldExpand):
        (WebKit::WebPage::changeBlockSelection):
        (WebKit::WebPage::updateBlockSelectionWithTouches):
        (WebKit::WebPage::clearSelection):
        (WebKit::WebPage::selectWithTwoTouches):
        (WebKit::WebPage::getPositionInformation):

2014-02-21  Anders Carlsson  <andersca@apple.com>

        Make sure to invoke the completion handler for JS alerts
        https://bugs.webkit.org/show_bug.cgi?id=129158

        Reviewed by Alexey Proskuryakov.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):

2014-02-20  Zalan Bujtas  <zalan@apple.com>

        Remove redundant deviceScaleFactor() functions and make callers use Document::deviceScaleFactor() when accessible.
        https://bugs.webkit.org/show_bug.cgi?id=129137

        Reviewed by Simon Fraser.

        No change in behavior.

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

2014-02-20  Benjamin Poulain  <bpoulain@apple.com>

        Add a missing piece of r164469

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView scrollViewWillBeginDragging:]):
        I forgot to duplicate the change from WKViewIOS in r164469.

2014-02-20  Benjamin Poulain  <bpoulain@apple.com>

        WKInteractionView always blocks the main thread when sending touch events
        https://bugs.webkit.org/show_bug.cgi?id=129059

        Reviewed by Enrica Casucci.

        Add the asynchronous dispatching to WebKit2.

        * Shared/NativeWebTouchEvent.h:
        (WebKit::NativeWebTouchEvent::uniqueId):
        * Shared/ios/NativeWebTouchEventIOS.mm:
        (WebKit::NativeWebTouchEvent::NativeWebTouchEvent):
        * UIProcess/API/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::doneWithTouchEvent):
        * UIProcess/API/ios/WKContentView.h:
        * UIProcess/API/ios/WKContentView.mm:
        (-[WKContentView willStartUserTriggeredScroll]):
        (-[WKContentView willStartUserTriggeredZoom]):
        (-[WKContentView _webTouchEvent:WebKit::preventsNativeGestures:]):
        * UIProcess/API/ios/WKContentViewInternal.h:
        * UIProcess/API/ios/WKInteractionView.h:
        * UIProcess/API/ios/WKInteractionView.mm:
        (-[WKInteractionView _webTouchEventsRecognized:]):
        (-[WKInteractionView _webTouchEvent:WebKit::preventsNativeGestures:]):
        (-[WKInteractionView _willStartUserTriggeredScrollingOrZooming]):
        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView scrollViewWillBeginDragging:]):
        * WebKit2.xcodeproj/project.pbxproj:

2014-02-20  Benjamin Poulain  <bpoulain@apple.com>

        Start fixing the view states driven by the WKScrollView
        https://bugs.webkit.org/show_bug.cgi?id=129140

        Reviewed by Tim Horton and Simon Fraser.

        WKScrollView creates a "window" over WKContentView with an area that is exposed,
        an area that is unobcured and with a certain scale.

        Instead of having 3 loosely related paths for updating WKContentView
        when the content "window" change, everything is consolidated behind the
        single API -[WKContentView didUpdateVisibleRect:unobscuredRect:scale:].

        This patch only fixes the content updates from the UI process side to keep things simple.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didFinishScrolling]):
        (-[WKWebView scrollViewDidEndDragging:willDecelerate:]):
        (-[WKWebView scrollViewDidEndDecelerating:]):
        (-[WKWebView scrollViewDidScrollToTop:]):
        (-[WKWebView scrollViewDidScroll:]):
        (-[WKWebView scrollViewDidEndZooming:withView:atScale:]):
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _updateContentWindow]):
        (-[WKWebView _setObscuredInsets:]):
        * UIProcess/API/ios/WKContentView.h:
        * UIProcess/API/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:scale:]):
        (-[WKContentView _updateFixedPositionRect]):
        (-[WKContentView didFinishScrolling]):
        (-[WKContentView didZoomToScale:]):
        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView contentView:didCommitLayerTree:]):
        (-[WKView _didFinishScrolling]):
        (-[WKView scrollViewDidEndDragging:willDecelerate:]):
        (-[WKView scrollViewDidEndDecelerating:]):
        (-[WKView scrollViewDidScrollToTop:]):
        (-[WKView scrollViewDidScroll:]):
        (-[WKView scrollViewDidEndZooming:withView:atScale:]):
        Scrolling is modified to take into account the view position and the obcured content.
        Instead of driving the scrolling position from the UIScrollView delegate callbacks,
        we use changes in unobscured rect to find changes in "content visible scroll position".

        WebPageProxy::didFinishScrolling() is removed. All the scrollOffset updates now go through
        the ScrollingCoordinator.

        (-[WKView _frameOrBoundsChanged]):
        (-[WKView _updateContentWindow]):
        (-[WKView _setObscuredInsets:]):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::unobscuredContentRect):
        (WebKit::WebPageProxy::setUnobscuredContentRect):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:

2014-02-20  Tim Horton  <timothy_horton@apple.com>

        Fix a build warning by moving some WKWebView methods from the private category to WKWebView itself.

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView setAllowsBackForwardNavigationGestures:]):
        (-[WKWebView allowsBackForwardNavigationGestures]):

2014-02-20  Enrica Casucci  <enrica@apple.com>

        ASSERT on touches callbacks after r164409 on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=129135

        Reviewed by Alexey Proskuryakov.

        The change used incorrecly true and false in TouchesCallbacks and
        ImageCallback. It also reintroduced isMainThread() which doesn't work
        for iOS.

        * UIProcess/GenericCallback.h:
        (WebKit::CallbackBase::generateCallbackID):
        (WebKit::ImageCallback::performCallbackWithReturnValue):
        (WebKit::ImageCallback::invalidate):
        * UIProcess/WebPageProxy.h:
        (WebKit::TouchesCallback::performCallbackWithReturnValue):
        (WebKit::TouchesCallback::invalidate):

2014-02-20  Anders Carlsson  <andersca@apple.com>

        We need something like WKPageUIClient in the Obj-C API
        https://bugs.webkit.org/show_bug.cgi?id=129123
        <rdar://problem/15338439>

        Reviewed by Sam Weinig.

        * UIProcess/API/APIUIClient.h:
        * UIProcess/API/Cocoa/WKUIDelegate.h: Added.
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView UIDelegate]):
        (-[WKWebView setUIDelegate:]):
        * UIProcess/Cocoa/UIClient.h: Added.
        * UIProcess/Cocoa/UIClient.mm: Added.
        (WebKit::UIClient::UIClient):
        (WebKit::UIClient::~UIClient):
        (WebKit::UIClient::delegate):
        (WebKit::UIClient::setDelegate):
        (WebKit::UIClient::runJavaScriptAlert):
        (WebKit::UIClient::runJavaScriptConfirm):
        (WebKit::UIClient::runJavaScriptPrompt):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::uiClient):
        * WebKit2.xcodeproj/project.pbxproj:

2014-02-20  Brady Eidson  <beidson@apple.com>

        Add very basic image control rendering
        https://bugs.webkit.org/show_bug.cgi?id=129080

        Reviewed by Tim Horton.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner): Expose the 
          imageControlsEnabled setting to WKTR.

2014-02-20  Tim Horton  <timothy_horton@apple.com>

        Add magnification and swiping properties to WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=129117

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        Move allowsBackForwardNavigationGestures out of a Mac-only block.

        * UIProcess/API/Cocoa/WKWebView.h:
        Add allowsBackForwardNavigationGestures to WKWebView for both platforms.
        Add magnification properties to WKWebView for Mac.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView contentView:didCommitLayerTree:WebKit::]):
        (-[WKWebView setAllowsBackForwardNavigationGestures:]):
        (-[WKWebView allowsBackForwardNavigationGestures]):
        (-[WKWebView setAllowsMagnification:]):
        (-[WKWebView allowsMagnification]):
        (-[WKWebView setMagnification:]):
        (-[WKWebView magnification]):
        (-[WKWebView setMagnification:centeredAtPoint:]):
        For iOS, copy implementations from WKViewIOS.
        For Mac, forward to the inner WKView.

        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView setAllowsBackForwardNavigationGestures:]):
        Fix the logic to tear down the ViewGestureController.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView setMagnification:centeredAtPoint:]):
        (-[WKView setMagnification:]):
        (-[WKView magnification]):
        Use CG types for API.

== Rolled over to ChangeLog-2014-02-20 ==
